6

Как все начиналось

Всем привет, начинаю серию постов о том как мы с товарищем в очередную кукурузу вмотались, ну точнее все-таки занялись геймдевом. Данная серия постов просто будет логом разработчика о том как делали, какие решения принимали и какие технологии использовали.

Немного о себе: Меня зовут Леша, я программный инженер со стажем наверно уже 15+ лет, в компьютерах ковыряюсь с семи лет, учился в красноярском политехе ну и работал наверно курса со второго в ИТ. Прошел всю ветку разраба от стажера до СТО небольшой организации.

Как и многие, я люблю играть в компьютерные игры, раньше даже киберкотлетой был. Мы с товарищем, пусть будет Иван, прилипаем уже некоторое время в TeamfightTactics Duo. Этот сезон нам не сильно зашел и томным вечером в кальянке мы просто решили а давай скопипастим ТФТ и просто посмотрим по силу ли нам это сделать или нет. Ну и слово за слово, понеслось...

Пилить решили все по модному - по вайбкодерски, в целом все у нас при помощи нейронок. Ваня шарпист а я последнее время джавист, в итоге раз он создал репу то и он выбирал стек:
- Бэк пилим на net 8.0
- Фронт на вебе
Для мвп решили что пойдет, ну и что войдет в мвп:
- ФФА на 8 игроков
- Матчмейкинг
- ~60 персонажей на славянскую тематику
- Пве режим на 8 игроков
- Итемизация в целом клон тфт
- Аугментации
- Абилки в ц
- Балансер всего этого дела - тулза которая поможет соблюсти игровой баланс перснажей и предметов
- 2.5d в вебе визуализация

Ну и инженерные задачи уже начались на фазе планирования архитектуры решения. Одна из первых которую предстояло решить это - "А как вообще сделать так чтобы у нас куча боев игралась на клиентах и потом сервер это все собирал в кучу...". Сразу задумались о том что рандом работает везде по разному (ну мы же в будущем хотим в мобилки),и тупо критические удары будут приводить к разным исходам боя в разных местах, а хочется чтобы люди еще и скаутить чужие доски могли, и эта проблема не решается даже при синхронизации сида рандома. Решением стала детерменированность боя, и рассчет всего только на сервере: Сервер рассчитывает бой и передает его на клиенты, которые просто его проигрывают и отображают игроку, на серваке формируется лог боя и просто жсониной по тикам отправляется на клиент, который его проигрывает. Таким образом и с рандомом думать не надо, сервак все посчитает и отдаст, ну и читеров не будет, наверно.

Разобрались с этим ну и вперед, геймсервер парит игроков (пока это все кто заджойнились в матч + недостающие ситы забиваются ботами), и по фазам проигрывает бои и отправляет на клиенты, клиенты смотрят и через команды обновляют стейт сервера, план прост по этому и красив.

Итого проблема: сложность оркестрации различных клиентов и паралельный рассчет боя приводит к несогласованности состояний клиентов и сервера.

Как решили: детерминированный рассчет боя только на сервере и проигрывание реплея боя на клиенте.

Прос: Просто, безопасно с точки зрения читов, поддерживается подобием паттерна CQRS - читаем стейт отправляет комманды с клиента.

Конс: Нагрузка на сеть

Вытекающие: А что делать то если я хочу предмет на персонажа одеть во время боя? А чето тормозит на slow4g или 3g, как то можно побыстрее?


В следующем посту распишу как пилили гейм механики вроде щитов, передвижения персонажей по доске и распределению лута, ну и решали вытекающие.

Если кому-то интересно то сейчас уже можно в веб версию потыкать, тестовый стенд (серт самоподписный пока, не обессудьте) : https://iggq3krru.fvds.ru/

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества