Статьи

Как я случайно ввязался в доработку Harry Potter 2:)

Друг попросил сделать кооп в старой Harry Potter 2. По пути мы встретили камеру с характером, Снейпа ростом с Гарри, кулдаун на 1400 секунд и собрали Versus для игры от двух до восьми человек.

Как я случайно ввязался в доработку Harry Potter 2:)
Всё началось с просьбы друга, ютубера «Дилетант Геймер» (https://www.youtube.com/@dilettantegamer). Ему хотелось поиграть в Harry Potter and the Chamber of Secrets вдвоём. Звучало нестрашно: добавить второго персонажа, подключение по сети и пойти проходить знакомые уровни. На деле у игры нашлось своё мнение о том, чья сегодня камера, кто запускает заставку и где должен стоять Гарри. Так мы и увязли в HP2/M212 multiplayer.

С чего начали

Начали с ПК-версии HP2, M212 и старых наработок v16. Игру для опытов держали отдельно от обычной установки, чтобы очередная сборка не портила оригинал и сохранения. Позже заглянули в v18: там нашлись полезные идеи, но тащить версию целиком не стали. Вместе с ними приехали бы незаконченные эксперименты и старые поломки.
Довольно быстро выяснилось, что показать на карте двух персонажей мало. Каждому нужна своя камера. Заставки, враги, заклинания и переходы между уровнями должны работать для обоих. А многие скрипты в старой игре написаны так, будто Гарри на свете ровно один.

Кооп: где мы сейчас

В тестовом меню теперь есть кооп: один игрок создаёт сервер, второй подключается. Хост запускает отдельный UCC-сервер и своё игровое окно. Иначе заставка легко забирала камеру у хоста и ломала сцену. На уроке Риктусемпры двое уже появляются в игре, часть сцен и взаимодействий проходит. Несколько следующих карт тоже можно открыть напрямую для опытов.
Но всю сюжетную кампанию мы пока не прошли. После второго противника в уроке Риктусемпры скрипты местами останавливались. Переходы между главами и общие сохранения тоже ещё не готовы. Лог может написать PASS, но это не значит, что мы с другом дошли до титров на двух ПК. Так что кооп пока остаётся экспериментом, пусть и заметно живее первых сборок.

Почему Versus стал отдельным направлением

Пока мы разбирались с сюжетными скриптами, решили собрать отдельный сетевой режим. Так появился Versus на базе v16. Тут цель понятнее: от двух до восьми игроков на арене, у каждого свой персонаж, здоровье, камера и счёт. Хост создаёт матч, остальные входят по IP. Попадания, урон, смерть и фраги считает сервер. Одного заявления клиента «я победил» ему мало.
В Free For All уже есть выбор персонажа и карты, смерть, возрождение и следующий раунд. Помимо Гарри, Рона и Гермионы добавили взрослый ростер. На бумаге мелочь, на экране внезапно Снейп ростом с Гарри. Пришлось возвращать моделям нормальные пропорции, а заодно чинить ходьбу, прыжки, плащи и взмахи палочкой.
Вот как это выглядит в текущем тестовом меню: режим, персонаж, карта, параметры сервера и подключение по IP.
В разделе Versus сейчас два режима: «Каждый за себя» и «Прятки».
В Free For All можно задать имя, выбрать персонажа, создать сервер или подключиться к матчу.
Персонажи разложены по группам. На кадре список Гриффиндора; есть также Слизерин, взрослые и особые персонажи.
При создании сервера хост выбирает карту, число игроков от 2 до 8, лимит фрагов и размер своего окна.
Для входа клиент вводит IP-адрес хоста и порт. Положение и размер окна для него тоже настраиваются.
На цифровом блоке можно выбрать шесть заклинаний: Rictusempra, Mimblewimble, Expelliarmus, Flipendo, Alohomora и Spongify. Первые четыре нужны для дуэлей. Alohomora и Spongify предназначены для объектов уровня: замков, триггеров и площадок для прыжка. Есть банки лечения до 100 HP и временного ускорения. На экране показываются здоровье и выбранное заклинание, F3 открывает счёт. В текущей тестовой сборке мы убрали задержку между выстрелами. Балансировать будем после того, как нормально проверим сами заклинания.
Отдельный квест получился с окнами и камерой. Два клиента упорно открывались в одной точке. Потом оконный режим заработал, но картинка оказалась внутри толстой чёрной рамки. Ещё позже камера после входа второго игрока уезжала куда-то вверх: карту видно отлично, собственного персонажа почти нет. Сейчас окна можно двигать и растягивать, а Alt крутит камеру вокруг персонажа, не разворачивая его самого. Исправление проверяли по реальной позиции камеры, потому что красивый угол в логе уже однажды нас обманул.
Вот так выглядит HUD в игре. Слева внизу HP и выбранное заклинание.
Play-Menu-Test.cmd
        |
        v
UCC.exe: выделенный сервер, карта, HP и счёт
   |                         |
   v                         v
Game.exe: игрок 1       Game.exe: игрок 2 ... 8
   |                         |
   +---- запрос выстрела -----+
                 |
                 v
        сервер проверяет заклинание,
        попадание, урон и фраг
                 |
                 v
        результат и эффекты видят клиенты

Баги, которые уже стали внутренними мемами

Из мемов у нас уже целый альбом. Персонаж замирал в Т-позе, плащ жил отдельной жизнью, а Гермиона приземлялась с голосом Гарри.
Как КАЛБАСИЛО Гарика, "Потекло" лицо Снейпа (которого можно в хоррорах снимать)) и прочее подобное...
  
Flipendo однажды разгонял игрока так, что тот улетал за карту, а потом игра падала с ProcessFalling.
У товарища после первого выстрела появился кулдаун на 1400 секунд. Банки лечения были видны в редакторе, но исчезали в игре. Оказалось, старый установщик подменял новую пару игровых пакетов. После этого мы начали сверять их SHA-256.
Смешно ровно до того момента, пока не пытаешься понять, кто виноват: карта, скрипт, сетевой пакет, анимация или камера. Теперь у нас есть повторяемая сборка, точечные патчи и тесты серверной логики. 

А вот тот самый момент, когда Снейп вдруг оказался ростом с Гарри. И то самое "ЛИЦО)))" аналогии с Ведьмаком - приветствуются.

Где взять и как запустить

Готовый тестовый комплект лежит на Яндекс Диске: https://disk.yandex.ru/d/ik-RZ3pLQRUT_w . Это полный ZIP сборки e53847b с Arena Grounds Hub. Код мода, скрипты и документация отдельно лежат в открытом Git: https://github.com/SAANEE2000/hp2-multiplayer-coop/tree/codex/versus-8-spawn-map . Сам Git-клон не содержит готовую игру.
Для теста понадобится собственная установленная HP2 с M212 на Windows. Скачайте полный ZIP с Диска, распакуйте его целиком, например в C:\HP2MP, и откройте PowerShell в этой папке. Выполните команду ниже, подставив путь к своей игре, затем запустите Play-Menu-Test.cmd. В меню выберите Versus, Free For All, Arena Grounds Hub и «Создать сервер». На втором ПК откройте тот же комплект, выберите «Подключиться» и введите IPv4-адрес хоста. Порт по умолчанию: 7777. Для установки готового архива Python и Git не нужны.
На обоих ПК должен быть один и тот же полный ZIP. Внутри уже лежат согласованные HGame.u, M212Share.u и карта. Если каждый пересоберёт пакеты отдельно, соединение может не пройти. После установки архива перед матчем ничего пересобирать не нужно. SHA-256 этого ZIP: A6FC5D293CA49286CF782AB4ECD9760B351F062281C69CE0CB48B8ABCB7378A5.
Если хотите собирать проект из исходников, нужны Python 3.9+, своя HP2/M212 и исходный архив v16. Команды Prepare-VersusV16.ps1 и Build.ps1 -VersusV16 есть в инструкции: https://github.com/SAANEE2000/hp2-multiplayer-coop/blob/codex/versus-8-spawn-map/docs/VERSUS_V16_QUICKSTART.md . Один только клон Git-репозитория игру не запустит.
.\scripts\Setup-ArenaGroundsTestKit.ps1 -GameRoot 'D:\Games\Harry Potter 2'

Что дальше

ВОЗМОЖНО (но это не точно) - довести версус и кооп до логического завершения (это если у комуните* появится такой запрос), а возможно и выпуск чего то большего). 
Это независимый фанатский проект. Harry Potter and the Chamber of Secrets и связанные материалы принадлежат правообладателям.

Комментарии