Егор делает игры
145 subscribers
50 photos
22 videos
37 links
Привет. Это канал @yogurtthehorse

Здесь я рассказываю, как я делаю игры. Полный список моих "релизов", можно найти вот туть:
https://yogurtthehorse.itch.io/

Обычно я делаю игры на Unity, но пишу вообще о чем попало, как-то так
Download Telegram
А дальше все просто. В каждом пикселе в альфа канале и синем канале у нас записано расстояние в пикселях. Теперь осталось перевести это из пикселей в "метры" игры и.. Готово, тены нарисованы. Затем достаточно в шейдере обратиться к нужно текстуре и поиграться со шрифтами с цветами на основе расстояния

В будущем я планирую переписать эту часть не генерацию особого меша, где расстояние будет закодировано просто в его вершинах (края стенки в нулях, в глубине – посчитанное расстояние). Это сильно бы повысило фепесы, но работы там будет достаточно :)
Еще из занимательного, кстати (но для кого-то очевидное):

- Первый черно-белый "скриншот" стен обычно в два раза меньше реального размера – так меньше считать
- На каждый шаг не создается новая текстура, а применяется техника пинг-понг. Сначала данные берутся из текстуры пинг и пишутся в понг, а потом данные берутся из понга и пишутся в пинг. И так пока не закончим
- Из-за того, что я не рисую стенки за пределами экрана, когда из-за экрана резко появляется конец стены, то тени резко сдвигаются. Это видно во всех трейлерах игры сейчас, но для демки-то и так сойдет
В камушке у нас движение очень сильно зависит от того, какой угол поверхности под камушком. И у нас была проблема, когда камушек поднимался по склону и... подлетал

Потому что пока шел, получил вертикальную скорость и взлетел немного. Но это ладно еще. А вот когда ты пытаешься упасть на склон, чтобы разогнаться, но пролетаешь мимо склона, потому что слишком быстро шел и просто двигался вбок быстрее чем падал – это прямо неприятно. Потому что камушек не начинает набирать скорость в виде шара

И в общем, думали, что делать. Обсуждали. Я предложил усилить гравитацию или вообще заснаппить его к земле. Тоже какое-то время думали, насколько хорошо это будет, а потом как-то вспомнили про Tony Hawk Pro Skater и пошли ресерчить

И в общем, хочу сказать, что большая наигранность для геймдизайна это круто, потому что мы даже немного поиграли, поснимали видосы и как взрослые дяди взяли все референсы для игры. Теперь перемещаться стало прямо сильно лучше
Камушек пролетает над землей аки Нео, цирка 2024
Мини рассказ про то, что в зависимости от того, как вы издаете игру, у вас будут разные цели для демки. Прежде всего потому что у вас будет разная целевая аудитория. Для издателя интересен вертикальный срез, а если вы идете публикуете демку в стим, то игрокам интересно получать часть геймплея

Издателю будет скорее все равно, что кнопки в главном меню не дорисованы. Он посмотрел ваш питч дек и увидел, что в команде есть художник и что он умеет рисовать, что другая часть игры дорисована (если конечно, она дорисована)

А вот если такое будет в демке в стиме, то игрок подумает, что это недоделанная поделка (и вообще-то это она и есть, да), и что не нужно ждать пока ее доделают. Он ждет что-то что он смог бы купить, а издатель ждет что-то, что он смог бы продать, если инвестирует в него

Конечно, если показать издателю полноценную и доделанную демку, то он скорее обрадуется. Но скорее всего это будет означать трату ресурсов команды, которая ушла не совсем туда. Если, конечно, команда изначально целилась в издателя

Вообще, после года разработки Граплеров и неудачи с издателями, очень много для себя вещей открыл, которые хотелось бы открыть не так болезненно...
Красивое
Forwarded from Gamedev suffering (Andrei Apanasik (Balancy))
Activision выложила карту Caldera из Call of Duty: Warzone в опенсорс 🤔

Использовать можно в некоммерческих проектах. Выложили в целях обучения и для тренировок ИИ.

Помимо самой геометрии (в OpenUSD) ещё куча данных по поведению игроков на карте. И вот именно данные по игрокам, имхо, тут как раз ценнее.

#opensource
This media is not supported in your browser
VIEW IN TELEGRAM
Физика камушка тем временем все больше похожа на Tony Hawk's Pro Skater. Там игрок может снапиться на специальные перила, а у нас вот будут такие скаты. Мы шутим, что если игра выстрелит и у нас будут толки про то, как она устроена внутри, то мы скажем, что камушек это просто скейтер с переделанным визуалом и все. И это прямо очень смешно

Это я вот занят генерацией коллайдеров этих спусков
Почти год назад ко мне пришел Playdate – это миниатюрная желтая консоль, с черно-белым экраном от очень любимых мной разработчиков Panic. Эти ребята делали и софт (я пользуюсь их SSH клиентом на телефоне и айпаде и ужасно доволен), продюсировали игры (Firewatch, Goose Goose Duck) и вот добрались до хардварины

Я достаточно долго следил за консолью, даже предзаказал ее. В итоге, правда отменил, но потом снова заказал. Когда она пришла ко мне я был очень рад. Я начал прототипировать на нее всякие игры, а новые игры на нее попадали сами по себе раз в неделю и... в этом оказалась фатальная ошибка для меня

Первые пару-тройку недель я исправно играл в новые игры. Они небольшие и насладиться ими можно достаточно быстро, но потом случилось страшное – я начал их пропускать. Не в смысле, что они мне были неинтересны. Просто я так был занят прочими делами, что не успевал распаковывать подарки с играми (там они все красивые, в обертках!)

Первая пропущенная неделя была не страшной, потому что ну что там две игры, найду еще время, но эта мысль задержалась на месяц и там уже было 8 новых игр. Я не знал как к ним подступиться, переживал и... перестал запускать консоль, потому что не понял, как решать эту проблему

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

И чтобы прямо совсем весело было, я решил, что буду писать игру на Swift. Мне давно хотелось пощупать этот язык, но обычно мне приходило в голову что-то совсем сложное типа рендер пайплайнов на Metal, а я морально как-то не готов сейчас вникать в такое (хотя все еще хочется!)

А тут в памяти вдруг вспомнилось, что Swift выкатил компиляцию в байткод для Embeded систем (устройств с очень слабыми процессорами типа плат Arduino). И вот в качестве примера того, как оно работает, Apple (вернее, команда разработки Swift) выпустила пару игр написанных под нашу маленькую желтую консоль

Я потратил вечер на то, чтобы разобраться как вообще этим вашим XCode пользоваться, как запускать проекты на свифте и прочее. Там хорошая документация и прямо подробно написано как все настраивать на любой системе с любым редактором и прямо глаз радуется. В самом блог посте с анонсом супер подробно написано как и почему сделаны те технические решения при портировании на свифт, чтобы было понятно, как самому портировать что-нибудь еще. Очень круто

Но выяснилось, что их порт стандартной библиотеки очень ограниченный и отсутствующие функции нужно допортировать самому. При этом репозиторий с портом сделан для демонстрации возможностей свифта, а не для полноценного порта апишки, поэтому форкануть и расширять его, чтобы потом вмерджить не получится. Авторы прямо пишут, что принимают только багфиксы или что-то расширяющие сам пример. Например, порты под линукс (да, на свифте можно писать и под линуксом и под виндой)

Но унывать не приходится, потому что умельцы сами подхватили это дело и выпустили полноценный порт стандартной либы на свифт. Можно посмотреть вот тут: https://github.com/finnvoor/PlaydateKit

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

@discardableResult public static func drawText(
_ text: String,
at point: Point<CInt>
) -> CInt {
graphics.drawText.unsafelyUnwrapped(
text,
text.utf8.count,
.kUTF8Encoding,
point.x,
point.y
)
}


Соответсвенно, в качестве документации можно спокойно использовать обычную документацию плейдейта для сей. Вот эту вот: https://sdk.play.date/Inside%20Playdate%20with%20C.html

Сам свифт пока вызывает интересные ощущения, осталось только придумать игру какую-нибудь, чтобы таки сделать все же 🙂
Пропал на восстановление режима сна, извините. Немного впечатлений от первых попыток тыкать Swift на Playdate, но перед этим

1) Мой обычный язык программирования C#, имейте это ввиду
2) Я использую Swift Embedded, который очень урезан, чтобы мочь запускаться на процессорах типа того, что у Playdate

Во-первых, очень необычно, что язык ужасно явный. Если не объявлять аргументы специальным образом, то при вызове функции нужно указать каждое имя аргумента. И я пока не понимаю, насколько это больше пользы чем шума:


Graphics.drawEllipse(in: Rect<CInt>(x: currentPoint.x - size / 2, y: currentPoint.y - size / 2, width: size, height: size))


Во-вторых, я почти сразу попал в странные ограничения Embeded Swift-а, который.. урезан. Это экспериментальная фича и в ней много чего не хватает. И вот доходит до смешного – нельзя просто взять и отформатировать float в строку. Ну, можно с костылями. Я даже завел ишью на эту тему в фреймворке, который я юзаю:

https://github.com/finnvoor/PlaydateKit/issues/70

Что приятно, туда даже зашел мимо-крокодил из Apple и команды свифта, который рассказал, как это лучше сделать с отметкой, что на стороне языка тоже стоило бы поправить

В-третьих... XCode. Он странный и постоянно напоминает, что сделан для инопланетян. Не в плохом смысле, а скорее просто вот в прямом – он не пытается быть как другие IDE и это тоже хорошо чувствуется. Странно сделаны вкладки, потому что там есть концепт редактора (редактор кода) и концепт вкладок и они бывают у редактора, а бывают у самого XCode и я до сих пор не понимаю, что там к чему

Иногда хочется плюнуть на это и пойти на Lua писать и не выпендриваться, но заставляю себя, потому что на самом деле это только звучит страшно, а по факту достаточно интересно и мне неприятно больше от неизвестности, чем от каких-то неудобств
Сегодня провел вечер за переписыванием встроенной в SDK плейдейта Lua кор либы на Swift. Получилось прикольно и язык подучил местами. Местами, правда, продолжаю сталкиваться с проблемами без очевидного решения. Вот, в этот раз, например, мне нужно было содержать глобальный список таймеров, а компилятор ругался, что моя переменная не конкретно-безопасная

Бедный маленький плейдейт от таких слов может подавиться и не работать между прочим, он таких слов просто не знает

Итогом порта стала маленькая демка, которая копирует базовый функционал easings.net. Сейчас вот пытаюсь понять, как оформить пул реквест в публичную репу, чтобы все могли пользоваться
(Я обязательно перестану постить ночью, просто это произойдет не сегодня)
This media is not supported in your browser
VIEW IN TELEGRAM
Все мучаю плейдейт и свифт. Делаю что-то типа гравити дефит и сегодня сделал очень простенький встроенный редактор уровня, чтобы было прикольно тестировать прямо на девайсе полностью
Я опять попал в ловушку, где "Я за пару дней сделаю игрульку простенькую" превратилось в написание "простенького" физического движка...

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

(Если для вас выглядит как раньше, то нужно обновиться)