Coder Social home page Coder Social logo

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-ветка).

Oni Project's Projects

chipmunk.go icon chipmunk.go

This is a Golang bindings for Chipmunk2D Physics 7.0.0

oni icon oni

Server-side game engine for MMOG

spp.js icon spp.js

A sample physics particle system engine for javascript.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.