BoxingSim - жуткий зуд создать свой симулятор бокса

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

Итак, BoxingSim — моя попытка создать симулятор бокса.

Скриншот:

boxingsim_screen1.png

Места попаданий в ИИ-бота после боя.

punch_zone_stat.png

Что есть:
+ Работающий мультиплеер (часть кода взята из AlienCrash).
+ Удары, блок, уклоны, стойки, поворот корпуса
+ Возможность общаться между и во время боя
+ Что-то вроде выделенного сервера (запущен на моем компе), чтобы не договариваться по IP-шнику.

Чего нет:
- Усталости, параметров, роста, веса
- Клинчей, падений, отбивов, рефери, нормального судейства и т. д.
- Автоматического обновления игры (читал что это возможно закодить)

Отличия от 3d online boxing:
* Теоретически низкие требования к скорости интернета у пользователя
* Можно поставить бой на паузу с согласия другого игрока (ох как этого не хватает!)
* После каждого раунда выводится статистика ударов
* Перед боем можно выбрать кол-во и длит-ть раундов
* Есть действие «нырок вниз»

Разумеется геймплей довольно топорный и в первую очередь его надо полировать. Но чтобы полировать — надо играть с другими игроками чтобы искать слабые места в механике, поэтому работающий мультиплеер просто необходим. С этой целью я и выкладываю игру.
ИИ есть, сейчас он просто подходит и бьет, не пользуясь защитой. Но на ИИ у меня большие планы.

Как играть

Качаем отсюда.
Сначала надо разрешить приложению BoxingSim.exe любую сетевую деятельность. В частности — надо разрешить открывать 25000, 25001 и 25002 порты.
Запускаем.

Игра начинается с сетевого окна.

setevoe_okno.png

Извините за фиксированное мелкое разрешение экрана — просто мне так проще отлаживать игру, запуская по несколько экземпляров сразу.

Здесь вы можете создать игру (P2P-Server -> Start) или присоединиться к другому компу по его IP (P2P-Client -> Connect). Или подключиться к выделенному серверу (Global Server -> Connect). Сейчас временно записан мой IP. Мастер-сервера пока нет, но планируется.

Если вам удалось подключиться к выделенному серверу, то вы должны увидеть список игроков на сервере (или пустой список, если там никого нет).

vydel_server_igroki.png

Кнопкой «Offer» вы можете предложить игроку провести бой. Если он у себя нажмет «Accept», то вы выйдете из сервера и попадете в частное лобби (как в случае P2P-соединения).

lobbi.png

Здесь можно початиться и выбрать длит-ть поединка. При выходе из лобби, если до этого были на выделенном сервере, вы должны автоматически на него вернуться.
При нажатии кнопки готовности на обоих сторонах сервер может начать бой («Start»).

boy2.png

Поскольку ног у боксеров пока нет, то все нокдауны — стоячие. Просто наносите удары сопернику в голову или в корпус, пока одна из полосок здоровья не упадет до нуля.
Следите за оставшимися силами (3-я полоска сверху), чем она короче — тем слабее и медленнее будет удар.


Управление
Пока фиксированное, посмотреть его можно кнопкой F1. Перемещение — слева, удары и блоки — справа, на NumPad'е. Также кнопками F2, F3, F4 можно выбрать положение камеры.
Если во время боя хотите поставить игру на паузу — нажмите «Enter». У другого игрока появится сообщение что его соперник просит нажать на паузу. Когда он тоже нажмет «Enter», игра поставится на паузу на обоих компьютерах.
Выход из паузы — аналогичным образом.

Известные баги
Куда же без них?
* Наверняка будут какие-то баги с подключением. Вообще с кодом мультиплеера я уже порядком замудохался.
* Руки у боксеров частенько выкручивает. Просто помахайте ими, возможно они вернутся в начальное положение. Такая же проблема раньше была у ob3d, когда ее полировали.
* При локальной игре с ИИ-ботом наш боксер наклоняется в стороны слишком сильно. Причину пока не выяснил.
* При попадании в голову и корпус засчитывается 2 попадания. Так что точность попаданий иногда может оказаться больше 100%.
* При победе TKO или KO информация о статистике посл. раунда теряется (все по нулям).
* После потери фокуса нажатые кнопки не отпускаются (залипают). Чтобы разлепить, надо нажать и отпустить их снова.
* Возврат в угол после нокдауна происходит слишком медленно.

Самое главное что для создания этой игры мне не нужно рисовать и делать уровни. Только программировать. Как раз то, что надо!
Если не получится подключиться ко мне — давайте договоримся запустить сервер у кого-то еще (надо под Global Server вместо Connect нажать Start).
В общем сижу, жду ваших подключений.