sfw
nsfw

Эмалированные значки от Джеда Генри

О том, как я влюбился в игру и пилю свой говно-движок (многабукафф)

Предисловие:
В играх и программировании я люблю две вещи: Единый подход и приятное, прямое управление. (и изобретенье велосипедов)
И пожалуй, я начну со второго пункта. У каждого своё понятие "прямого управления", но для меня, это управление, которое - скажу одним словом - не выёбывается. С которым тебе не приходится сражаться. "Приятное" же управление... Куда более странное явление для меня. Игра может управляться прямо, быстро, без лишнего багажа, но быть скучным, сухим. (не буду приводить примеров. Пусть каждый понимает как хочет ;) ). Управление, сочетающее в себе оба этих пункта должно быть отзывчивым, но при том достаточно глубоким, что бы хотелось им овладевать. С каждым нажатием кнопки, получать результат, не быть разочарованным, но и не делать это на автомате. И тут я дам три примера; два -- игры, и один из мира программирования.
1) Castlevania: Aria of Sorrow -- Данная игра на ГБА для меня является абсолютным и непревзойдённым шедевром 2д. Оставим в сторону музыку, бестиарий, дизайны... Сконцентрируемся на управлении Сома Круз (Гг), откликается на каждое нажатие каждой кнопки. Например: разворот+ рывок+атака выполняются в едином движении, на едином дыхании; не заставляют бодаться с собой запоминанием таймингов (ибо каждое замедление даёт другой результат, который можно использовать по другому), но и не выполнятся на автомате, при бездумном меше кнопок друг за другом. При этом, учитывая особенности боёвки и разного вида оружия, Сому можно закружить в вихре смерти, играя на джойстике как на пианино. Эту игру стоит пройти, хотя бы ради того, что бы ощутить, насколько все остальные 2д игры унылы в своём управлении
2) Из мира программирования -- Язык Джава, а если быть конкретным библиотека ГУЯ Swing. Это то, как я представлял себе в детстве программирование в целом. Императивный, прямой подход и полная свобода действий, отзывчивость языка, которую я даже в чистой джаве не наблюдаю. Если ты можешь себе представить эффект, особенность или функцию -- Swing даст тебе это сделать. Объединение функционала любых компонентов друг с другом, функционал, который тебе и в голову не пришёл бы -- лишь в одном implements от существования. А самое главное -- лёгкость и независимость, предоставляемая джавой. Другие гуй библиотеки либо слишком замудрённые (FX, я на тебя смотрю), или не следуют подходу своего окружения (CSS HTML и JS, например. Они пишутся совершенно по разному, Swing - ощущается как джава)
Третий пример мы оставим пока в сторонке, ибо он тут главный виновник.
И перейдём мы к "прямому подходу". Это уже будет куда короче -- Я не люблю, когда от меня что-то скрывают. Даже если это сделано ради меня самого. Как хороший пример из мира той же джавы -- Спринг. Как "хороший" пример из мира игр -- абсолютно любая игра со скрытыми, необъяснёнными статами и механиками. Да, некоторая степень сокрытия всё таки необходима, иначе я буду звучать очень лицемерно, учитывая что мой язык -- Джава. Однако, в той же джаве, прямота -- причина, по которой я в неё влюбился. Простой пример: System.out.print(); -- Система ->функционал вывода-> вывод на консоль. (по этой же причине я не люблю Spring, в нём нет этой прямоты, он не ощущается как джава)
Меня всегда завораживало, как делались старые игры (где-то до ПС2), без "движков", часто на ассемблере (ака САМЫЙ прямой подход), с прямой манипуляцией всего вокруг, использованием очень слабого железа на полный максимум. Вроде, казалось бы, так легко, так понятно, но поди ж сделай.
И вот, я нашёл идеальную игру, которая пнула меня таки сделать что-то своё. Прошу любить и жаловать -- Shin Megami Tensei на SNES:
su pen ramicgm
UCCÑ5CD DYMfn-CfCO,Игры,сделал почти сам,игровые движки,длиннопост
Отец покемонов, самая филосовская серия игр в мире и обладатель не просто одного "приятного управления", а аж целых ТРИ(!).
Первое -- перемещение по миру
Ш1Ш1
lázíH
ПИШИ’ S ЯБЕ
в/s moan
¥ 1OODO MAG Q
hi CHIJGJI,Игры,сделал почти сам,игровые движки,длиннопост
Простое, схематичное, но невероятно понятное и информативное. Фаза луны, локация, деньги. И персонаж, своим вращением показывающий твоё мировоззрение. Это то, каким следовало бы быть перемещению в первом фоллыче.
Второе -- боёвка
TTflC
• га ш ш m
m шошш ттгпг-r-
ч \ \ \ \
т гп о га ш и гл т
га
±	га	га	си
ш	га	□	-
4-	Q	-о	С	QJ
1ПШ013-ф	z.	^	□	X
□ qzOJ^--н £ з га □_,Игры,сделал почти сам,игровые движки,длиннопост
Тут тоже прекрасно всё. Как я упомянул -- отец покемонов, геймлей тут похожий, однако меню, анимации, порядок действий и прочее сделано просто ахринеть как удобно.
И, наконец, перемещение от первого лица. Уникальное, неоправданно ахуенное.
[Л.............
□..............
h..............
о:.............
h..............
in.............
п_ ■ ш га ш m т
Е ■ lïirfumiu
ш ш m m □ ш □ h ш г ш :г пп т
п_
i
h m m ö m г т - m г m т
ш
IU
НЕ	-	С	■о
q: 1_
ш	□ z:	X	+-	-	□
Е	z. -	-	ь	4	4
tin	ю	□	□
z: ш m D. Ш □ £
1 1Л ш
и г ru ш
И... Самое сложное в реализации... Поэтому было решено с этого и начать...
Но что, вы думали я зря тут про джаву и Swing воду лил? Анннет! "Движок" будет работать на них. Да, это отвратительно, да это нихрена не оптимизировано. Но про велосипеды я не просто так написал. Я знаю свинг, сучки, и ничто на свете не остановит меня от издевательств с ним.
Быстрый гуглёж, как достигается такой графен, немного тыканья палкой DeepSeek, и на свет родилось СИЕ
,Игры,сделал почти сам,игровые движки,длиннопост
И всё это просто ахуеть как удобно с моим любимым Свингом -- любой компонент позволяет переопределять свой собственный рендер, передавая ему изменённый объект графики. А над объектом графики ОЧЕНЬ легко работать (да хоть по координатно менять пиксели)
Базовый рейкастинг. И боже мой, если бы остальное было так же легко...
Карта считывается с двухмерного аррея с углом равным нулю смотря "на право". Единица даёт движку стенку, 0 - пустое поле. В будущем, это поможет делать кастомные "стены" (двери, проходы и так далее). Я очень горд этой идейкой, которая буквально приснилась мне за день до начала работ.
Когда я попытался разобраться с перемещением, видео в интернете в основном копировали ДУУМ и его мягкое перемещение с камерой. Но в СМТ движение очень "ступенчатое". Но... Что есть дерганье, как недостаток ФПС? Замедление ФПС до задержки 150мс.
Опять таки, слава прекрасному Таймеру из Свинга, который по удобности удобнее чем аналогичный в реальных игровых движках, типа Юнити и Годота.
КАБЛАМ! Перемещение! Вращение! И практически точная копия перемещения из СМТ. (Я только убрал разворот и добавил шаг назад) Спасибо ДипСику за подсказку с реализацией "ступенчатой" анимации.
Следующее было... Коллизия. Страх и ужас любой кастомной физической хрени. Особенно в таком 2д-3д виде. НО! Кон_Бой не лыком шит, и спустя просто фантастическое количество времени, была выведена методика, проверяющая следующий шаг, стену, и угол поворота.
И та-да! Персонаж ударяется на пол шага вперёд, если тыкается спиной и пол шага назад, если тыкается лбом.
Алсо, чисто от себя -- ИИ СОСАААААААААААААААТЬ. Я мучался с коллизией около 4-5ти дней, и эта штука не смогла дать ничего похожего на нормальный результат. Я чувствовал себя гением, блин.
Иии, пока на этом всё. Разве что добавил поворот головы вверх-вниз.

Это всё заняло 400 строчек, из которых около 30-40 сделало ИИ (спасибо за реализацию рейкаста, и пошёл к чёрту за нулевое понимание коллизии)
На днях я собираюсь добавлять текстурки на стены и загрузку новых локаций. Спасибо за внимание, надеюсь, вам было интересно

Отличный комментарий!

Там белая машина встречку вылетела, баба тут вообще не при чём

Отличный комментарий!

Поливальщик был безпилотным. Людей больше нет. Этот комментарий написан автоматически. Ты последний
Контекст:
>go back in time to hear one of Jesus's sermons in ancient hebrew
>From across the vast audience, he locks eyes with me
>says in perfect english,
"Go Home. Now."

Отличный комментарий!

да да, добрый дядечка Иисус. Затирает сикариям как правильно независимость от рима отстаивать. А "гонения" бедных зелотов в империи, где вообще никого не волновало в кого ты там веришь - так это потому, что религия истинная и единственно верная, да.