Бой родился без графики
Первое, что есть в MushRog, — симуляция боя, которая работает без экрана и без сети. Целую битву с Salamandra Ardente можно сыграть прямо в автоматическом тесте.
Зачем
В онлайн-игре самое дорогое правило, которое можно сломать, — чтобы сервер и клиент не расходились во мнении о том, что произошло. Если бой — чистый кусок кода с фиксированным tick в 20 в секунду и генератором случайных чисел с seed, одна и та же последовательность команд всегда даёт один и тот же результат. Сервер крутит эту симуляцию как авторитет, клиент крутит такую же, чтобы предсказывать, что случится, а тесты гоняют её тысячи раз без единого окна.
Ещё мы записываем каждую команду вместе с tick, на котором она пришла. Благодаря этому replay достаётся бесплатно: любой бой можно воспроизвести в точности. Это помогает искать баги, проверять читеров и, в будущем, показывать красивые моменты.
Как это работает
Сегодня проходят девятнадцать тестов, и они покрывают то, что важно в дизайне. Порядок элементов имеет значение: огонь, а потом лёд даёт двойной урон, лёд, а потом огонь — в полтора раза. Молния по льду снижает защиту цели на 40% на 8 секунд, а молния по огню взрывается по площади. Огненный босс неуязвим к огню и реагирует на лёд, не теряя ауру. Каждые 20 секунд он открывает окно, в котором врождённая аура пропадает и цепляется любой элемент.
Смена персонажа не сбрасывает и не ставит на паузу cooldown: маг уходит в резерв с Bola de Fogo на перезарядке и возвращается с готовой. У смены ожидание 1,5 секунды, и она заблокирована, если персонаж оглушён. Если он умирает, смена принудительная и ожидание не тратится. А с одним и тем же seed и одними и теми же командами получаются в точности одни и те же события.
Играбельный прототип собран из прямоугольников и текста: Маг синий, Воин коричневый, красный босс с контуром цвета ауры. Клавиши 1–4 для скиллов, Tab для смены. Некрасивый намеренно: вопрос, на который он отвечает, — приятно ли меняться ради реакции, а для этого спрайты не нужны.
Дальше
Играть, пока смена не станет ощущаться естественно. Потом движение и дальность, потому что сейчас любой скилл попадает откуда угодно.
Изменения
- feat(core): deterministic combat sim with team swap and elemental reactions
Fase 0 skeleton: Godot 4.7 project, data-driven content (elements, reactions, classes, skills, mobs), pure GDScript simulation with fixed tick, seeded RNG and command log for replay. Headless test runner with 19 tests covering reactions, swap rules, boss innate aura and replay.
- feat(client): offline fase 0 prototype scene
Rectangles and text over the sim: boss with innate fire aura, team of mage + warrior, skill bar with cooldowns, swap on Tab, event log.