
Как я портировал ретрошутер Redneck Rampage в браузер
Carter54 35 минут назад Как я портировал ретрошутер Redneck Rampage в браузер Средний 3 мин 1.2K WebAssembly * HTML * Разработка игр * Браузеры Тестирование игр * Из песочницы Всем привет! Я решил наконец то сам сделать...
Вот важная новость с фронта ИИ: Carter54 35 минут назад Как я портировал ретрошутер Redneck Rampage в браузер Средний 3 мин 1. 2K WebAssembly * HTML * Разработка игр * Браузеры Тестирование игр * Из песочницы Всем привет! Я решил наконец то сам сделать пост на Хабре.
Обычно о всех моих веб проектах и команды DosZone Team пишет здесь многоуважаемый @denis-19, за что ему огромное спасибо! Ведь нам просто лень или не хватает на это времени. После шутера Blood мне было интересно попробовать также портировать Redneck Rampage как раз на основе того, что я уже сделал.
Технические детали
Было ошибочно так думать, потому что RR в отличие от NBlood оказался совершенно на другом движке - RedNukem, и пришлось начинать всё с нуля. Да и сложность повысилась и всё это заняло в два раза больше времени, чуть больше недели. Rednukem — это ветка декомпилированных исходников NB lood / EDuke32 для таких игр на движке Build как Redneck Rampage, Duke Nukem 3D, NAM (Napalm), WWII GI и ещё парочке о которых я расскажу чуть позже.
Чтобы это всё заработало получается вот такая связка:Rednukem (EDuke32) → WebAssembly + WebGL palette blit + Emscripten FS/Asyncify, с доработками цикла, ввода, загрузки уровней и IndexedDB для сохранений. Для упрощения задачи по тестированию и сборке не стесняюсь использовать ИИ, он намного всё ускоряет и анализирует различные падения, а также помогает собрать с нуля логику загрузки ресурсов игры (от стартового меню до загрузки эпизодов и уровней). Я в определенный момент очень серьезно застрял как раз на реализации именно правильной последовательности загрузки меню и почти уже бросил всё это дело, но нейронка помогла найти ошибку.
Определённая проблема возникла и со скоростью игры. И обычно разработчики в такие моменты жалуются, что всё тормозит или идет медленно, но здесь получилось ровно наоборот. Игра чертовски быстро работала и что то нужно было с этим делать.
Отраслевые последствия
Игровой цикл и время в игре привязаны к тикам. На оригинальной десктопной версии под dos тики привязаны к классической схеме движка Build (120 Hz timer, 30 game tics/s). В браузере же гдеtimerGetTicks на Emscripten использует emscripten_get_now() который мне показался логичным решением проблемы, я начал получать стабильное падение игры на загрузке уровня.
Помог специальный патч позволяющий задавать коэффициент скорости __nbSpeed , который начал регулировать скорость через htmlvar params = new URLSearchParams(location. search); var initialSpeed = parseFloat(params. get(‘speed’)); // Slightly below 1.
0: gameplay uses emscripten_get_now() → patched performance. isFinite(initialSpeed) initialSpeed <= 0) initialSpeed = 0. __nbSpeed = initialSpeed; Где initialSpeed = 0.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





