LINUX.ORG.RU
ФорумGames

Death-Mask киберпанк rogue-like в разработке

 


1

1

В свободное время занимаюсь разработкой своего движка и игры рогули под названием Death-Mask. Сделал упор именно на портирование C++ кода под HTML5, трансляцию через Emscripten. В игре нужно найти артефакт Маску Смерти которая дает владельцу бессмертие, в бесконечно генерируемом лабиринте. На Game Over вылетает, но можно просто перезагрузить страницу, разница не велика.

Скриншот: http://demensdeum.com/games/deathMask/screenshot.jpg

Поиграть можно тут: https://demensdeum.com/games/deathMask/ https://www.newgrounds.com/portal/view/738737

Посмотреть исходный код, лицензия MIT: https://gitlab.com/demensdeum/Death-Mask

Поиграть можно тут: https://demensdeum.com/games/deathMask/

По этой ссылке игра выглядит так: https://0x0.st/ztdz.png

У меня Firefox/Wayland и HiDPI. Возможно где-то по пути неправильно учитывается разрешение и масштабирование.

По второй ссылке всё, вроде бы, как задумано - игра в «окне» внутри страницы.

И там и там - дикая чувствительность мыши и тачпада. Камерой управлять невозможно.

Медленное появление и исчезновение логотипов в самом начале без возможности пропуска очевидным способом (any key) - бесит. Меееедленное исчезновение меню после нажатия New Game - туда же.

Deleted
()

Походил немного. Смотрю, где-то в далеке какая-то движуха. Что-то двигается и откуда-то звук, будто кто-то стреляет. Пока дошёл, пишет, что меня убили. Но кто? Где? Как? Непонятно.

th3m3 ★★★★★
()
Ответ на: комментарий от Deleted

У меня Firefox/Wayland и HiDPI. Возможно где-то по пути неправильно учитывается разрешение и масштабирование.

SDL_GetCurrentDisplayMode берет нулевой экран, видимо возвращает больше чем надо.

Медленное появление и исчезновение логотипов в самом начале без возможности пропуска очевидным способом (any key) - бесит.

При game over будет рестарт в меню без крэша.

Меееедленное исчезновение меню после нажатия New Game - туда же.

атмосферно же

И там и там - дикая чувствительность мыши и тачпада. Камерой управлять невозможно.

Да, допилю настройки, сенса будет

demensdeum
() автор топика
Ответ на: комментарий от th3m3

Думаю добавить как в шутерах направление при ранении, пока по звуку определять, если стреляют то надо прятаться.

demensdeum
() автор топика
Ответ на: комментарий от Deleted

Ну не, у него юнити или что-то готовое, у меня же даже нет всех фишек относительно нормальных в движке - освещение и скелетки.

demensdeum
() автор топика
Ответ на: комментарий от Deleted

Это не интересно, интересно реализовать трансляцию C++ -> HTML5.

demensdeum
() автор топика

JFY, в недавно вышедшей Safari 13.0 поломали загрузку и инициализацию WebAssembly. Но у вас, как я вижу, исключительно asm.js и «нативная» ФС.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Это еще что, во всех браузерах если игра в iframe, то для обработки мыши и клавиатуры нужно каждые 0.5 секунд забирать фокус на iframe. Вообще проблем очень много, всяческих workaround'ов.

demensdeum
() автор топика
Ответ на: комментарий от next_time

В результате научных работ выяснилось, что люди осознают, что умерли, и понимают, что происходит вокруг. Об этом заявили ученые из Школы медицины Langone при Нью-Йоркском университете (NYU Langone School of Medicine).

Кроме того, он отметил, что сознание человека отключается не сразу при прекращении сердцебиения.

- Люди в «первой фазе смерти» могут все еще подавать некие признаки сознания. Это доказывают случаи, когда пережившие остановку сердца могли в деталях описать, что происходило вокруг

Правда главный герой не человек а киборг, так что возможно на него не распространяются человеческие понятия о жизни и смерти

demensdeum
() автор топика

При всём при том что разработка с нуля то очень прикольно, побегал, как тут уже сказали, первое нужна настройка сенсы, второе (у меня не было но) нужна горячая клавиша установки разрешения тоесть если на экране косяк с разрешением (не по твоей вине) то нажав на кнопку всё будет уходить в 800x600 window mode где чел выберет или сам введёт разрешение в аккуратненьком окошечке, которое будет принято, уведомление о горячей клавише можно показать вначале, это всё костыли, но всякие ретины и 4к портят жизнь нормальным людям. Шейдеры рендера вкомпилены, это не плохо, но зуб даю тебя задолбало их править и расставлять \n" я у себя сделал транслятор файл -> исходный код после того как файл оттранслирован в отдельный исходный файл записывается имя фала и указатель на массив байт, затем уже можно по имени получать индекс в массиве массивов файлов и получив char* данные открыть их через SDL_RWFromConstMem или просто скормить куда надо сырые данные очень удобно, но не знаю как это будет в вебе своё ещё не портировал под emcc.

Удачи, пили дальше!

P.S. Атр в начале прикольный, если сам рисовал то зачёт.

Можешь ещё на Corange глянуть там много разных полезных мелочей есть советую глянуть в assets_core/shaders/ карты нормалей добавишь и всё будет в разы прикольней выглядеть, а большего и не надо веб же, хотя как я понят тебе интересно всё самому делать.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Во первых спасибо за подробный фидбэк)

нужна горячая клавиша установки разрешения тоесть если на экране косяк с разрешением (не по твоей вине) то нажав на кнопку всё будет уходить в 800x600 window mode где чел выберет или сам введёт разрешение в аккуратненьком окошечке, которое будет принято, уведомление о горячей клавише можно показать вначале, это всё костыли, но всякие ретины и 4к портят жизнь нормальным людям.

На самом деле я только сейчас заметил проблему с фулскрином, благодаря публичным тестам, надо как-то аккуратно обыграть. О и много чего еще заметил, чего совсем не ждал.

Шейдеры рендера вкомпилены, это не плохо, но зуб даю тебя задолбало их править и расставлять \n" я у себя сделал транслятор файл -> исходный код после того как файл оттранслирован в отдельный исходный файл записывается имя фала и указатель на массив байт, затем уже можно по имени получать индекс в массиве массивов файлов и получив char* данные открыть их через SDL_RWFromConstMem или просто скормить куда надо сырые данные очень удобно, но не знаю как это будет в вебе своё ещё не портировал под emcc.

Да, шейдеры пока хардкод, ибо динамического функционала нет.

Удачи, пили дальше!

P.S. Атр в начале прикольный, если сам рисовал то зачёт.

Спасибо) Ну это так кубики в блендере, в отдельном репозитории даже есть модель в блендере.

Можешь ещё на Corange глянуть там много разных полезных мелочей есть советую глянуть в assets_core/shaders/ карты нормалей добавишь и всё будет в разы прикольней выглядеть, а большего и не надо веб же, хотя как я понят тебе интересно всё самому делать.

Ого спасибо за линку, посмотрю. Есть еще движок: https://github.com/Shervanator/Engine

Мы примерно в одно время с автором начали писать, но я как хобби а он молодец.

demensdeum
() автор топика
Ответ на: комментарий от demensdeum

Есть еще движок: https://github.com/Shervanator/Engine

Действительно норм, ну было бы желание доработаешь и свой под лично твои нужды, не пилить же аналог юнреала или юнити с крайэнжином =)

Ого спасибо за линку, посмотрю.

Я с нуля не осилил бы вот поэтому форкнул его, он почти заброшен в текущем виде WIP уже годы, но есть как выше сказал много мелочей и архитектурных подходов хороших (ну как я могу судить я ваще не программист гыгы) но если вопросы по этому двиглу будут можешь задавать, или писать самому автору Даниэлю на гитхаб, если вопрос реально нуждается в пояснениях не очевидного он ответит обязательно. Хотя раз у тебя и так уже всё работает, вопросы не возникнут скорее чисто посмотреть на альтернативные подходы к реализации того или иного.

Мы примерно в одно время с автором начали писать, но я как хобби а он молодец.

Было бы желание, есть начало игры, есть начало движка и всё работает, дело за доработкой. =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от demensdeum

Это еще что, во всех браузерах если игра в iframe, то для обработки мыши и клавиатуры нужно каждые 0.5 секунд забирать фокус на iframe.

Нет, ничего подобного делать ненужно.

Вообще проблем очень много, всяческих workaround’ов.

Не так и много, если отказаться от всяких затычек в виде GLFW, SDL, отказаться от «нативной» ФС и реализовать свой слой.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Нет, ничего подобного делать ненужно.

К сожалению https://github.com/emscripten-core/emscripten/issues/5796

Не так и много, если отказаться от всяких затычек в виде GLFW, SDL, отказаться от «нативной» ФС и реализовать свой слой.

Так можно и браузер реализовать : -)

demensdeum
() автор топика
Ответ на: комментарий от demensdeum

К сожалению https://github.com/emscripten-core/emscripten/issues/5796

Посмотрите игру «Червячная зона» в ОК, ВК или на любом портале, где она запускается в iframe.

Так можно и браузер реализовать : -)

Нативная инициализация платформы не сложнее инициализации sdl или glfw. Реализация абстракции для FS тоже достаточно простая. Немного сложнее реализация Audio, но это все решаемо.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Нативная инициализация платформы не сложнее инициализации sdl или glfw. Реализация абстракции для FS тоже достаточно простая. Немного сложнее реализация Audio, но это все решаемо.

Конечно можно, но пока надобности не было.

demensdeum
() автор топика
Ответ на: комментарий от andreyu

Да, только у меня курсор забирается для реализации шутерного управления, а у вас нет, как в тикете emcsripten написано.

demensdeum
() автор топика
Ответ на: комментарий от demensdeum

Да, только у меня курсор забирается для реализации шутерного управления, а у вас нет, как в тикете emcsripten написано.

Вы про mouse pointer capture?

andreyu ★★★★★
()

Оффтоп 7, ff 69.0.1 1920*1080
Заставки на старте не соответствовали разрешению видимой части окна (вероятно были под разрешение экрана).
На стартовом экране с трудом можно обнаружить указатель мыши, он очень крупный, но из-за сенсы постоянно выходит из зоны видимости.
При game over ничего не происходит, висит заставка с надписью game over.

anonymous
()
Ответ на: комментарий от demensdeum

Вот именно, приходится workaround’ы делать чтобы все работало :- )

Так при чем тут emscripten?

Да и проблему с клавиатурой, как видно по другой игре, вы придумали.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Притом что нативно не реализован захват курсора. В iframe так вообще приходится вызывать фокус с таймаутом. В червячной битве нет захвата курсора.

demensdeum
() автор топика
Ответ на: комментарий от demensdeum

Притом что нативно не реализован захват курсора. В iframe так вообще приходится вызывать фокус с таймаутом.

Еще раз, при чем тут emscripten? Политика безопасности браузера не позволяет коду внутри iframe выбраться за его пределы. Многие вещи или нельзя вообще реализовать, или реализуются через костыли. Поэтому я повторю свой вопрос - при чем тут emscripten?

В червячной битве нет захвата курсора.

Там есть обработка клавиатуры, а вы утверждали, что с ней есть проблемы.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Многие вещи или нельзя вообще реализовать, или реализуются через костыли.

Пришли к моей фразе

Вот именно, приходится workaround'ы делать чтобы все работало :- )

и вашему ответу

Нет, ничего подобного делать ненужно.

demensdeum
() автор топика
Ответ на: комментарий от demensdeum
  1. Вы утверждаете, что для клавиатуры нужны костыли. Это не соответствует истине.

  2. С мышкой вы тоже придумали проблему и для себя, и для пользователей. Mouse pointer capture - это худшая идея, которая пришла в головы некоторых разработчиков еще в середине 90х.

andreyu ★★★★★
()
Ответ на: комментарий от demensdeum

под классику

Одобряю.

Запустил ещё раз, на первой заставке кликнул мышью, перешёл в полный экран, чего раньше не было. Нажал Esc, перешёл в окно браузера, второй раз перейти в полный экран не получается.
Походил по коридору. Звук оружия — как будто нет патронов, щелчёк просто. Пощёлкал немного — game over, в коридоре был один, звуков выстрелов не было.

anonymous
()
Ответ на: комментарий от demensdeum

Хардкор

Хардкор в том, что наступление события game over не связано с получением повреждений от противника, а наступает рандомно?
Это баг или фича?

anonymous
()
Ответ на: комментарий от demensdeum

С таким подходом в шутеры вообще грех играть : -)

Зачем нужно запускать шутеры в окошке? Вы придумали проблему и пытаетесь найти виновного в ней. А проблема лишь в том, что вы считаете нормой захват мышки в окне.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

Фича. В углу статы - health и synergy, чтобы не умереть по здоровью надо уклоняться от врагов или мочить их (ролеплей), а чтобы не умереть от недостатки синергии нужно собирать ее в ящиках и редко стрелять, ибо она используется как патроны.

demensdeum
() автор топика
Ответ на: комментарий от andreyu

Я ничего не придумывал :- ) Факт в том что нативно все работает и в окне.

demensdeum
() автор топика
Ответ на: комментарий от demensdeum

Да, на третий запуск, понял, что умираешь от недостатка патронов.
Заспавнился, подобрал ящик, тут-же заспавнились еще ящик и 2 пушки. Разница между ними не ощущается. Как их переключать — непонятно, колёсико не помогло, цифры на клавиатуре — тоже. Враги влетают внутрь стен, такое ощущение, что могут почти полностью туда влететь. Анимации повреждения врагов нет, анимации выстрела, в привычном понимании нет. С третьей пушкой в руках синергия неспешно тратилась по таймеру.

anonymous
()
Ответ на: комментарий от anonymous

Ну как найдешь Маску Смерти - можешь торжественно зачекаутить проект, грузануть сабмодули, форкнуться и сделать свою версию : -) Я пока неспешно пополняю список доделок.

demensdeum
() автор топика
Ответ на: комментарий от anonymous

Ну вот я расчитывал на крутой форк с ААА и графоном : -(

demensdeum
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.