BoxingSim - жуткий зуд создать свой симулятор бокса
Итак, думаю пора познакомить вас с работой последних месяцев.
С третьей попытки у меня получилось сделать что-то хоть капельку играбельное.
Итак, BoxingSim — моя попытка создать симулятор бокса.
Скриншот:
Места попаданий в ИИ-бота после боя.
Что есть:
+ Работающий мультиплеер (часть кода взята из AlienCrash).
+ Удары, блок, уклоны, стойки, поворот корпуса
+ Возможность общаться между и во время боя
+ Что-то вроде выделенного сервера (запущен на моем компе), чтобы не договариваться по IP-шнику.
Чего нет:
- Усталости, параметров, роста, веса
- Клинчей, падений, отбивов, рефери, нормального судейства и т. д.
- Автоматического обновления игры (читал что это возможно закодить)
Отличия от 3d online boxing:
* Теоретически низкие требования к скорости интернета у пользователя
* Можно поставить бой на паузу с согласия другого игрока (ох как этого не хватает!)
* После каждого раунда выводится статистика ударов
* Перед боем можно выбрать кол-во и длит-ть раундов
* Есть действие «нырок вниз»
Разумеется геймплей довольно топорный и в первую очередь его надо полировать. Но чтобы полировать — надо играть с другими игроками чтобы искать слабые места в механике, поэтому работающий мультиплеер просто необходим. С этой целью я и выкладываю игру.
ИИ есть, сейчас он просто подходит и бьет, не пользуясь защитой. Но на ИИ у меня большие планы.
Как играть
Качаем отсюда.
Сначала надо разрешить приложению BoxingSim.exe любую сетевую деятельность. В частности — надо разрешить открывать 25000, 25001 и 25002 порты.
Запускаем.
Игра начинается с сетевого окна.
Извините за фиксированное мелкое разрешение экрана — просто мне так проще отлаживать игру, запуская по несколько экземпляров сразу.
Здесь вы можете создать игру (P2P-Server -> Start) или присоединиться к другому компу по его IP (P2P-Client -> Connect). Или подключиться к выделенному серверу (Global Server -> Connect). Сейчас временно записан мой IP. Мастер-сервера пока нет, но планируется.
Если вам удалось подключиться к выделенному серверу, то вы должны увидеть список игроков на сервере (или пустой список, если там никого нет).
Кнопкой «Offer» вы можете предложить игроку провести бой. Если он у себя нажмет «Accept», то вы выйдете из сервера и попадете в частное лобби (как в случае P2P-соединения).
Здесь можно початиться и выбрать длит-ть поединка. При выходе из лобби, если до этого были на выделенном сервере, вы должны автоматически на него вернуться.
При нажатии кнопки готовности на обоих сторонах сервер может начать бой («Start»).
Поскольку ног у боксеров пока нет, то все нокдауны — стоячие. Просто наносите удары сопернику в голову или в корпус, пока одна из полосок здоровья не упадет до нуля.
Следите за оставшимися силами (3-я полоска сверху), чем она короче — тем слабее и медленнее будет удар.
Управление
Пока фиксированное, посмотреть его можно кнопкой F1. Перемещение — слева, удары и блоки — справа, на NumPad'е. Также кнопками F2, F3, F4 можно выбрать положение камеры.
Если во время боя хотите поставить игру на паузу — нажмите «Enter». У другого игрока появится сообщение что его соперник просит нажать на паузу. Когда он тоже нажмет «Enter», игра поставится на паузу на обоих компьютерах.
Выход из паузы — аналогичным образом.
Известные баги
Куда же без них?
* Наверняка будут какие-то баги с подключением. Вообще с кодом мультиплеера я уже порядком замудохался.
* Руки у боксеров частенько выкручивает. Просто помахайте ими, возможно они вернутся в начальное положение. Такая же проблема раньше была у ob3d, когда ее полировали.
* При локальной игре с ИИ-ботом наш боксер наклоняется в стороны слишком сильно. Причину пока не выяснил.
* При попадании в голову и корпус засчитывается 2 попадания. Так что точность попаданий иногда может оказаться больше 100%.
* При победе TKO или KO информация о статистике посл. раунда теряется (все по нулям).
* После потери фокуса нажатые кнопки не отпускаются (залипают). Чтобы разлепить, надо нажать и отпустить их снова.
* Возврат в угол после нокдауна происходит слишком медленно.
Самое главное что для создания этой игры мне не нужно рисовать и делать уровни. Только программировать. Как раз то, что надо!
Если не получится подключиться ко мне — давайте договоримся запустить сервер у кого-то еще (надо под Global Server вместо Connect нажать Start).
В общем сижу, жду ваших подключений.
- 03 июля 2016, 18:18
- 011
Кто-то под именем KONO DIO DA зашел, что-то написал и ушел.
Похоже сервер работает.
Так и не смог соединиться. Кстати, заметил что версия юнити явно не пятая, а в пятой сильно изменили мультиплеер. Не пробовал?
Именно поэтому и не пробовал. Чтобы опять не переучиваться.
Да и тормозит пятый Юнити на моем компе.
Посмотри - осталось ли в логе что-то интересное?
http://pastebin.com/F3nWbGym
Проблема в том, что после начала боя игроки не соединяются друг с другом (остается голубой экран).
Изменил кое-что в игре (перекачай). Когда будешь на сервере - включи галочку useNat в правом верхнему углу перед тем как принимать бой.
В этом случае перед началом боя игра может на 3-4 секунды зависнуть на голубом экране, надо подождать.
Не пробовал напрямую по IP-адресу подключаться?
С этой версией тоже не вышло
Ладно, на сегодня давай закончим. После еще кое-что попробую.
Прошу пардону. Игре нужны 25001 и 25002 порты, а не 25000 и 25001.
Понадеялся на свою память, а 25000 я оставил под Мастер-Сервер, к-го нет. Завтра проверим - в этом ли дело.
25002 как раз отвечает за связь между 2-мя игроками.
Что с человеком на 2-й картинке? Ему нужен врач, кажется.
Прилично так кнопок, особенно сложно соорентироваться, когда сбоку список того, куда нужно нажимать (насколько я понял, болванчика нельзя нокаутировать).
Зашел в сервер -> Никого нет -> Вышел
17:28 - Запустил локальный P2P-сервер. Попробуйте ввести в P2P Client тот же IP, что указан в Global Server и нажать "Connect".
Сейчас попробую что-то сделать чтобы игра не зависала, а можно было отключиться если не удается подключиться с глобального сервера.
Failed to connect: ConnectionFailed
Сорри, я в этот момент уже играл с marketat.
Сейчас запущу еще раз, но отойду (не удивляйтесь если я не отвечаю в чате).
Заходи сейчас, я там, если что.
Порты открыл, но не идет. Попробуем в другой раз.
Попробуй еще с markertat поиграть.
На сервере еще есть галочка 'useNat', попробуй ее включить или отключить.
Неплохо поиграл с markertat и myHazards.
markertat: подключается через выделенный сервер, но только если он отправил приглашение, а не я.
myHazards: работает через P2P-сервер, через выделенный не удалось подключиться.
Графика страшненькая, да ещё и с торибаша спизжена. Имхо лучше её довести до уровня торибаша, который между прочем был написан одним челом на самописном двиге
Эт твоя манера общаться с какого-то днища спизжена. А тут у нас идейный подражатель.
В торибаш не играю, графика спизжена с ob3d. Да и симулятору бокса не нужна красочная графика, она нужна ютуберам для своих летсплеев и для зрелищности при просмотре уже записанного боя. Графодрочеры-казуальщики в принципе не будут играть в это говно.
А в процессе боя куча спецэффектов будет отвлекать от действа, главное - обеспечить хороший контраст бойцов на фоне пола и друг друга, чтобы быстро и безошибочно оценивать ситуацию. И автор ob3d правильно решил сделать боксеров разного цвета кожи - чтобы они еще друг с другом не сливались на ближней дистанции. Нужна графика - играй в Fight Night.
Не мне как раз нравится графика Toribash. Она там симпотичная. Добавь кубмапу на пол и будет збс.
Возможно, вы имели в виду: sd3b?
СБ, он у тебя графику спёр! Лови его! На воре шапка горит!
Возможно, вы имели ввиду: sb3d?
Кстати да, я буквы-то перепутал, хах. Вообще для меня больше характерна аббревиатура s3db - это Sonic 3D Blast, пятая игра по Сонику на Сеге Мегадрайв. Было время...
Все верно. Ты видел в моих играх круги с градиентом внутри и пиксельными краями? Не видел. А потому что спёрли их у меня.
Я в замешательстве.
Оnline boxing 3d. Автор, наверное, думает, что все знают названия малоизвестных игр про бокс http://3dboxing.com/
В которые играет полтора землекопа, наверное.
Если кратко.
Для инди игры мультиплеер это грбгрбсмерт. Почему, думаю, объяснять не требуется.
По боксу, а лучше бы 4d-boxing сделал. В 95-м я по ней долго угорал, прошел не раз.
Скажи это автору ob3d, в к-й до сих пор играют. 3,5 задрота.
Просто жанр непопулярный, очень жесток к новичкам и требует длительного онанизма. А ты знаешь какие сейчас изнеженные игроки пошли.
Играл в эту игру, понравилось разнообразие тактик у противников.
Ну так я и говорю что на ИИ у меня еще большие планы. Чтобы и с другими игроками можно было играть, и с ИИ в одиночной игре был интерес. Просто автор ob3d на ИИ акцент не ставит, ограничившись тупым болваном.
Узнал, когда тебя тестировать планету попросил.
Не, ты там как знаешь, хозяин-барин. Хочешь онлайн, делаешь онлайн. Просто держи в уме, что это даст. Будь готов принять последствия. Ты же готов? Сингл-инди ты раздаешь игрокам, и в него могут погонять пять-десять случайных людей. Онлайн инди ты раздаешь, люди заходят и не могут поиграть.
Соответственно, мультиплеер игра должна быть 10х круче сингла. Так что вот так, все сурово.
Исправил пару багов. С мультиплеером нек-ые баги остались, полноценно ими займусь только в выходные.
Не могу зайти (что-то с серваком?).
Попробуй еще раз. Забыл порт поменять на прежний.
Все 3,5 задрота в одном месте
Йа тама 11!11!!!адын!!!!
=)
Почему-то нельзя зайти со своего IP на сервер с другим IP. Приходится вручную вбивать IP сервера и только потом он сможет зайти.
У меня получилось с ним соединиться c myHazards. Но он не может соединиться со своей стороны. Надо продолжать копать.
Видимо дело в том, что если запускать клиент на том же компе, что и сервер, то адрес клиента становится 127.0.0.1, а не совпадает с адресом сервера. И поэтому другой игрок пытается подключиться не к нам, а к самому себе.
ИИ продолжает окучивать во время отсчёта нокдауна, злодей такой.
Здорово было бы добавить потом-нибудь мод с оружием для любителей исторического боя. Хотя бы щит и дубинку. В Toribash оно слишком неправдоподобно, а PhysHack/Oak and Bronze реалтаймовый не вышел (но там похожая с боксом механика движения).
Поиграл сегодня с Адамеком. После того как он 20-ый раз подряд выбил из меня все потроха, он сказал, "хм, наверное у игры есть потенциал", а я вспомнил что у меня есть нырки и стал бить по корпусу, а он меня уже не доставал.
С подключением, тьфу-тьфу, вроде все проблемы исправил. Большое спасибо markertat! Без его помощи и терпения я бы не смог их исправить!
Плюс нек-ые игроки забывают открыть порты в брэндмауэре.
Обновил до 0.1.1
* Несколько изменений в геймплее (см. F1)
+ Звуки ударов
+ Режим спарринга без таймера
+ Небольшой сюрприз во время боя :) (возможность вставить собственную музыку)
* Звуковой сигнал при новом сообщении в чате (отключается галочкой)
С хазардом начали бой, между раундами вылезает это:
Ага, тоже такое было. Сразу после начала второго раунда было.
Вылезает только иногда или всегда?
Я только что бился с ним, было сразу после окончания каждого раунда. Причем он мог двигаться, а я нет. Также были телепортации какие-то.
А во время боя все шло нормально?
Отправь мне файл output_log.txt.
Игра шла рывками, как-то так (бойцы прыгали с одного места на другое).
Вид из глаз. Почти 4D Sports Boxing.
Вот это уже дело! В 4д Боксинг я только из глаз и проходил, так интереснее всего. Вид сверху это пережиток Атари восьмидесятых, был там похожий бокс. Не нужно его тащить сейчас.
Вид из глаз самый реалистичный. Но вид сверху самый удобный - легче оценивать дистанцию. И проще определить относительное положение соперника - не мешает поворот собственной головы. В 4D Sports Boxing строгого вида сверху не было, поэтому из всех вариантов вид из глаз был самым удобным.
В ob3d играю с видом сверху. Но там нет вида из глаз, поэтому сравнить не могу. Все остальные положения камеры (под углом из-за спины, из угла) - неудобны. Посему и там вид сверху удобнее, как и здесь.
Сделай тренировочную болванку :D
Чтоб потренироваться можно было.
+ лог последних событий на сервере (чтобы пришедший игрок знал - был ли кто сегодня на сервере)
+ на сервере показывается его время работы
+ другой способ измерения FPS (через OnPostRender и Network.time), посмотрим результат через неск. дней
+ поворот камеры кнопкой Backspace (н-р, можно посмотреть на себя глазами соперника)
+ сброс управления боксером при потере фокуса приложения
+ тренировочный бой с ИИ-ботом (кто-то просил)
+ отображение имени боксеров во время боя
+ почти полная статистика по ударам
* изменения в параметрах ударов (хуки - слабее, апперкоты - сильнее)
+ короткие удары на ближней теперь без поворота корпуса
+ в согнутом положении ноги двигаются медленнее
+ блок с защитой корпуса теперь ставится ниже
* боксеры при растаскивании больше не должны зацепаться
* мелкие изменения в геймплее, к-е вы вряд ли заметите
* куча других мелких изменений и исправленных багов
Решил попробовать сделать ноги.
Берусь за них первый раз, поэтому не обещаю что получится.
Сейчас получается примерно так. Поясница боксера - как пробка, плавающая в море. А ноги - это 2 якоря, перемещаемые по дну моря и таскающие за собой пробку.
Сделать настоящие ноги, удерживающие равновесие, вряд ли получится - робототехники всего мира не могут сделать шагающих роботов, удерживающих равновесие, а я хочу чтобы они еще бегали и прыгали. Да и в ob3d тело боксера удерживается в равновесии не столько ногами, сколько искусственно.
Если у вас есть какие-то идеи как по-другому сделать ноги, удерживающие тело в равновесии - выкладывайте свои мысли.
Пробка и 2 якоря... Это сильный костыль! Ну точнее да. Крутой способ имитировать то что нужно.
Просто незаметно вкину это сюда. Может заинтересует, если ещё не видено.
Нет-нет-нет! Я не должен был это смотреть! Вот зачем ты это вкинул? Чтобы я думал что у меня опять воруют идеи?
Вспомнил что у меня была идея объединить все мои любимые вещи в играх и сделать игру мечты - симулятор бокса роботов в киберпанк-мире, с элементами стелса.
По поводу ног. Результат есть, но на доведение до презентабельного вида уйдет больше времени. Придется переписать намного больше кода, чем я предполагал.
0.2.0
НОГИ
Поиграли с markertat. Решил убавить скорость ног и рук немного, а то слишком быстро двигаются.
И еще решил попробовать сделать не автоматический поворот на соперника, а только во время движения.
+ Изменение глобальной скорости геймплея перед боем (не влияет на отсчет времени)
+ Распределение энергии верхнего плечевого пояса (теперь нельзя сильно ударить двумя руками сразу или из блока)
+ Распределение энергии нижнего пояса (нельзя одновременно уклоняться и перемещаться по рингу)
+ Зум камеры кнопками Num/ и Num*
* Исправление мелких багов (н-р, добавил синхронизация настроек боя сразу после соединения)
Добавил в сборку музыку, к-я стоит у меня во время поединков. Если не понравится - можете удалить файл Resources/music.ogg или поставить свой.
Поиграл с markertat, внес изменения.
+ толчок в корпус при перемещении по рингу (для более плавного перемещения)
+ зависимость силы удара от положения руки (раньше если рука была прямо перед лицом соперника, то удар наносился так же сильно, как из стойки)
+ длина всех ударов (кроме апперкотов) зависит от расстояния до соперника
* возврат в угол при нокдауне происходит на обычной скорости
* немного усилен блок
+ при двойном нажатии кнопки движения - наскок или отскок
* передний блок - чуть выше, боковой - боковее
Далее надо переделать руки, чтобы они перестали закручиваться и блок стал достаточно крепким.
Пробовал кардинально переделать руки (чтобы не закручивались). Пока не получается. Так что просто небольшие фиксы.
- блок вернул как было раньше, поскольку испортилась траектория ударов при удержании блока
* исправил баг, из-за чего сила рук почти не влияет на силу ударов
* убрал зависимость скорости восстановления здоровья от скорости геймплея
* небольшие изменения в параметрах и физике рук (чтобы меньше закручивались)
+ параметры: откл. расхода сил на удары, откл. урона по корпуса и в голову, максимальный объем сил рук
На прошлых выходных решил вернуться в бокс. Исправил баги, на к-х застрял прошлый раз, и, со свежим взглядом, кое-чего изменил.
* Для перемещения по рингу теперь можно просто держать кнопку движения. Не надо все время ее нажимать - это очень неудобно.
* Вернул автоматический поворот в сторону противника. Поворот только во время движения был неудобен.
* Снова можно выбрасывать удары из-за блока (они будут на 35% слабее).
+ Боковые и апперкоты теперь выбрасываются с поворотом туловища. Если самому добавить поворот туловища, то удар получится сильнее.
+ Урон, полученный в голову, теперь зависит от направления попадания. Больше всего урона наносят попадания сбоку, чуть меньше - снизу / сверху, меньше всего - спереди / сзади.
+ Полученный в голову урон тем выше, чем ближе точка попадания к челюсти.
+ Ударами и блоками боксера теперь можно управлять с помощью мыши, как в Fight Night (см. управление ниже).
Хотелось бы еще попробовать чтобы пришлось самому мышью все время поворачиваться в сторону противника и плавный наклон корпуса мышью, но пока этот вариант не получается синхронизировать по сети.
* Во время игры захватывается курсор (причина - см. пред. пункт).
Чтобы его вытащить из окна (или вернуть), надо нажать Esc.
+ Определение победителя в раунде не по кол-ву попаданий, а по нанесенному урону.
Внизу экрана показывается шкала преимущества в глазах судей (пока для отладки). На чьей стороне экрана в конце раунда будет полоска, за того отдадут судьи очко (без учета нокдаунов).
+ Картинка ринга на полу (чтобы оценивать к какому углы мы ближе находимся)
+ Немного изменены положения рук в стойках и траектории ударов
МИНУСЫ:
- Из минусов отмечу что руки все еще болтаются как сопли, надо продолжать ковыряться с физикой, чтобы двигались как настоящие.
- Код мультиплеера остался без изменений (без интер- и экстра-поляций), так что все возможные рывки и телепортации сохраняются.
- Все еще нет падений после нокдаунов (все - стоячие).
движение мышкой без нажатия кнопок :
вперед / назад - наклонить корпус вперед или назад (не наклоняет корпус вниз)
влево / вправо - поворот корпуса влево или вправо
ЛКМ - удар рукой, движение мышкой:
вперед и влево - правый прямой
вперед и вправо - левый прямой
влево / вправо - левый / правый боковой
вниз и влево - левый апперкот
вниз и вправо - правый апперкот
отпустить ЛКМ - закончить удар, вернуть руку в стойку
ПКМ - поставить блок, движение мышкой:
вперед - блок спереди
вниз - блок снизу
влево - блок слева от бокового
вправо - блок справа от бокового
отпустить ПКМ - снять блок, вернуть руку в стойку
Снова запустил сервер, так что можете заходить и поиграть.
Свершилось чудо! Но играть... некогда?.. Удачи!
Ну что, что там с боксом-то? Скачать новую версию не смог (пишет "Файл не найден"), зашел со старой версии (0.2.3), попытался зайти в игру (зайти на сервер) - ошибка.
Я сейчас кое-чего делаю, как раз на тему бокса. Как доделаю - напишу. Если брошу делать - тоже напишу.
Мне самому хочется доделать геймплей в игре, но сейчас пока копаю в другом направлении.