Skip to content
This repository has been archived by the owner on Oct 29, 2018. It is now read-only.

oniproject/oniproject

Repository files navigation

Oni Project

MMORPG движок же!

Go Walker Build Status

DEMO - регистрируемся (Sign-up) под любым именем(пароль не требуется) и жмакаем по кнопке Game

screenshot

Как запустить?

Собираем сервер:

  1. Устанавливаем golang
  2. Клоним репозиторий в $GOPATH/src
  3. Собираем клиент
  4. Подтягиваем зависимости go get ./oni...
  5. go run main.go
  6. ????????
  7. PROFIT

Собираем клиент:

  1. Устанавливаем node.js и npm
  2. Скачиваем зависимости: npm install
  3. Собираем: 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-ветка).