MMORPG движок же!
DEMO - регистрируемся (Sign-up) под любым именем(пароль не требуется) и жмакаем по кнопке Game
Собираем сервер:
- Устанавливаем golang
- Клоним репозиторий в
$GOPATH/src
- Собираем клиент
- Подтягиваем зависимости
go get ./oni...
go run main.go
- ????????
- PROFIT
Собираем клиент:
- Устанавливаем node.js и npm
- Скачиваем зависимости:
npm install
- Собираем:
npm run build
Есть такие команды джля сборки клиента:
- Просто собирает
npm run build
- Пересобирает при каждом изменении
npm run watch
- Запускает LiveReload+Сервер редактора
npm run reload
- Запускает Сервер редактора
npm run redactor
Алсо обратите особое внимание на конфиг config.yml
. Его требуется скопировать в ../data/config.yml
.
Во первых используется git-flow. На русском можно читнуть вот это.
Во вторых общая структура каталогов такая:
- ../data/ - всякие файлики, которые можно менять. Придётся создать самостоятельно
- js - все исходники клиента
- redactor - все исходники редакторов
- oni - вся серверная часть там стоит отметить каталог mechanic в котором будут всякие штуки касательно боевых и не только механизмов игры
- public - всякие ресурсы вроде шрефтов, картинок и прочего. И туда идёт сборка клиента из js.
- templates - там все шаблонные html(с использованием шаблонизатора ace). Для серверной части шаблонные выражения одеваются в фигурные скобочки, а джля клиентского кода в обратные кавычки.
- gulpfile.js собирает клиент. Использует browserify для своих тёмных дел.
- main.go точка входа сервера
В третьих общая структура сервера такая(не допиленно):
- Есть одна нода master, на которой вертится отдача статики, аккаунты и балансер.
- Есть несколько нод db, которые занимаются обработкой данных аватаров.
- Есть много нод game, на которых спавнятся карты, по которым бегают мобы с игроками(аватарами).
Что характерно аватары получают глобальный Id, по которому могут быть доступны из любой точки этой игры. Т.е. можно послать некому объекту в игре сообщение "убейся" с другой ноды в одну-джве строчки. Именно для этого и нужен circuit буде.
Кстати да. Сервер и клиент общаются сообщениями. И игровые объекты тоже сообщениями общаются. Сообщения на сервере имеют метод Run
, который применяет сообщение на цели. При этом сообщения сериализуются при помощи CBOR.
Используйте git-flow feature-ветку для больших добавлений. Маленькие добавления идут прямо в develop-ветку.
Для go-кода используйте go fmt
перед коммитом. Для js-кода используйте табы в качестве отступов и \n
в качестве разделителя строки.
В остальном смотрите по остальному коду. Хотя можно проверить при помощи jscs, ежели не лень. Благо конфиг уже есть.
В сообщения коммитов пишите пару тройку тегов про коммит (всем ведь лень писать нормальные коммит-сообщения). В начале коммита пишите нечто вроде:
- fix - если исправили какую-то багу
- docs - всё, что касается документации
- style - исправляем опечатки, исправляем форматирование
- refactor - рефакторинг кода приложения
- test - всё, что связано с тестированием
- chore - обычное обслуживание кода
В комментариях к коду можете использовать любой вариант, кокой вам нравится. Но старайтесь делать их хоть немного понятными. Можно пользовать метки TODO
FIXME
XXX
.
Сборка js производится при помощи команды gulp
доки. Точка входа для игрового кода это js/main.js
, который превращается в public/main.js
.
Если захотите добавить кокую либу в проект, то дайте мне знать.
До 1.0.0 версии идёт стадия говнокода. По этому некоторые правила можно не соблюдать, если лень. Кроме того код совершенно не обязан быть вылизанным, иметь тесты и прочее и прочее. Хуяк-хуяк и в продакшн :3
###Некоторые нужные фичи, которых ещё нет в рандомном порядке ну чтоб я сам не запутался:
- освещение при участии Normal Mapping. Демка из pixi http://www.goodboydigital.com/pixijs/examples/20/
- нормальный балансер, вместо которого костыль
- всея редактор. Пока есть отдельно редактор изометрии и редактор тайтловых карт. Оба в зачаточном состоянии.
- нормальный билдер персов. Каждый перс имеет четыре или восемь направлений движения и несколько анимаций. При этом состоит из нескольких слоёв для шмота и прочего. Картинки брать из https://github.com/makrohn/Universal-LPC-spritesheet
- редактор эффектов всяких заклинаний и прочего. А следовательно нормальный редактор частиц. В разгар битвы количество частиц на экране должно зашкаливать за 9000 в прямом смысле. При 100к http://www.goodboydigital.com/pixijs/bunnymark/ всё ещё не падает при отключённом WebGL.
- допил механики и редактор к ней.
звуковой движок. Скорее всего это будет https://github.com/goldfire/howler.jsподдержка более одной карты и быстрый переход между ними. Да, этой хрени пока нет. Да, эту хрень пока лень делать. Но оно должно быть к концу сентября только. Т.е. ближе к 1.0.0- боты джля тестов и как мозги мобам
- моар тестов хороших и разных (~30% coverage для oni/game в данный момент)
- запуск в Vagrant
В версии 1.0.0 можно будет уже полноценно играть. Т.е. это будет уже рабочая демка с корованами и лунапарком, которой не хватает контента, но код уже средней стабильности и содержит все важные фичи. Именно эта версия появится в /b/.
Вопросы можно задавать либо в треде, либо в issues. (нубские вопросы лучше в тред). Возможно я уже работаю над этим. Вопросы помогут мне создать более подробный README. Алсо каждое изменение этого описания требует перевыпуска версии(hotfix-ветка).