Коротко - перенес змейку на новый игровой движок, спроектировал печатную плату куба V1.5, победил автотайлинг, сделал мини-игру про подземелье с фонариком, придумал, где брать готовые игры (Flash, и это не шутка), полностью перенес ядро с ардуино на ESP-IDF, почти собрал лаунчер игр и переписал систему рендера.
Для тех, кто видит меня впервые: я в одиночку разрабатываю The One Cube - мини игровую консоль в форме куба с 6 экранами. Внутри - ESP32, акселерометр, батарейка, карта памяти. Управление - наклонами и вращением самого куба.
ГЛАВА 1. НОВЫЙ ДВИЖОК И ЗМЕЙКА
Змейка переехала на новый движок. На вид тоже самое, но это принципиально другая реализация, чем раньше.
Движок пишется с нуля вместе с нейросетью GLM. Система видит весь проект в папке и сама правит файлы.
Движок почти доведен до кроссплатформенности: один и тот же код работает и на компе, и на кубе - куб в этой схеме просто ещё один "видеовыход".
Сложно разрабатывать что-то под есп32 с ИИ. Технические тесты оно пишет само, но картинку и железо проверить не может. Приходится перепрошивать куб каждый раз и смотреть на результат.
Так же сделал ревизию чужого опыта - разобрал около 40 папок с чужими движками и кодом игр, из каждой выписал, какие идеи стоит перенять.
И вообще, мне кажется, сам бы я такое никогда не сделал бы, даже учитывая что программист по образованию. А тут просто расписываешь системы / задачи и получаешь готовый результат за пару дней.
ГЛАВА 2. ПЛАТА ВЕРСИИ 1.5
В прошлых месяцах, когда я разрабатывал вторую версию кубика, была идея просто отказаться от железа первой версии, продав его "как есть". Но просто железо никому не нужно. А выбрасывать 60 экранов и 10 акселерометров жалко.
Так родилась V1.5: тот же один проц и тот же габарит, но плата переразведена заново, питание и часы реального времени взяты из второй версии, разводка экранов более аккуратная. Влез еще и вибромоторчик.
Да и по деньгам это заметно дешевле, чем сразу городить двухпроцессорный "бутер". Сначала обкатаю игры на этой версии железа, потом уже сделаю полноценную вторую версию.
И еще решил прикольнуться - шелкография на платах всё равно бесплатная. Сгенерил картинки и вставил в платы. Заодно и посмотрю, как будут выглядеть мелкие рисунки.
Китайцы на заводе, думаю, оценят такое творчество))
И ради экономии, закажу 2 платы как одну. Порезать - не проблема =)
И еще при проектировании плат очень важно их перегонять в 3D модель и смотреть как они сходятся между собой и другими частями изделия.
Это немного неудобно, приходится делать скриншот платы в EasyEDA и переносить как картинку на 3D модели.
Но главный факт в том, что когда перенес, увидел еще кучу ошибок)) Разъемы не сходились, элементы на плате задевали другую плату.. Хорошо что вовремя заметил.
Жаль все эти красивые рисунки будут заметны только при сборке, а потом всё перекроется экранами и корпусом =(
ГЛАВА 3. КАРТЫ И АВТОТАЙЛИНГ
Идея же в том, чтобы не изобретать велосипед каждый раз, а находить уже готовые решения. Во многих играх локации строятся автоматически на основе всякой математики и подготовленных картинок - тайлов. По сути как конструктор лего.
Поэтому я перерыл весь инет и собрал всё что можно на тему математики игр, движков и прочего. На тот же автотайлинг было с десяток полезных ресурсов.
Автотайлинг это по сути просто набор команд на основе ячейки и её соседей. Но при вайбкодинге и даже готовых исходниках, нейросети всё равно прям жутко тупят. Пока не объяснишь как ребенку алгоритм для каждого краевого случая, оно нормально не заработает.. Убил на это кучу времени, сжег дофига кредитов и пару раз уперся в лимиты.
Но в итоге всё таки получилось сделать генератор данжа на базе бесплатного тайлсета. Получилось в принципе неплохо, я считаю.
И чтобы было удобно работать с этими генерациями, сразу сделал формат вывода под программу Tiled.
И еще обнаружил прям жирнющий минус этих бесплатных тайлсетов, с чего просто сгорел.
Вот есть у нас набор картиночек 16*16 или 32*32 пикселя, обычно от 100+ элементов. И нигде не подписано, что это означает каждая иконка.
То есть для автотайлинга должна быть подпись каждой ячейки, например "земля слева стена справа" или "пустая земля" или "артефакт зелье". Пришлось разглядывать, как китаец в меме, каждый тайл и подписывать его назначение.
Даже существует свежее исследование, где ученые пытались через ИИ анализировать бесплатные тайлсеты.
То есть они так же вручную разметили каждую ячейку и сравнили с тем, как это распознает ИИ. Как я понял, результаты получились так себе.
НО, они выложили все свои наработки с подписями картинок в инет. Так что теперь у меня есть целая библиотека монстров и артефактов.
У меня прям навязчивая идея сделать свою Vampire Survivors на кубике. Как раз такие картиночки должны подойти.
Учитывая что у меня на кубе экраны 240*240, самую мелкая читаемая сетка это 15×15 (тайл 16×16). Далее уже получаются сетки 12×12 (20×20), 10×10 (24×24), 8×8 (30×30), 6×6 (40×40).
ГЛАВА 4. ПОДЗЕМЬЕ С ФОНАРИКОМ
После автотайлинга и пинания нейросетей, получился концепт простенькой игры - надо найти выход из лабиринта, когда факел кончается, а направление выхода указывают определенные ячейки.
Здесь я конечно намучался с ИИ. В обучающих данных видимо никто не делал игр на кубической консоли, и была постоянная путаница с поворотами и взаимодействиями объектов, переходящих между гранями.
По сути получилась некоторая база для будущих тайловых игр.
Вот полгода я разбирался с железом, писал драйвера экранов и тд и тп. А полноценных игр то на платформе нет..
И пришла идея - а вот раньше было множество браузерных игр. А может их можно как-то портировать.. И как оказалось, снова нейросети легко переваривают эти флеш-игры и переводят из скриптового языка в нормальный.
Плюс в этих играх кроме самого кода, много красивой графики, прописан сюжет, механики и тд..
Минусы в таком подходе тоже есть. Самая сложность - найти НОРМАЛЬНЫЕ игры из библиотеки 200 000 игр, а потом из них еще подобрать подходящие под мини экраны и управление наклонами.
Сюда неплохо должны встать 2D-игры с видом сверху / сбоку, лабиринты, логические задачки, сокобан (жанр "кладовщик"), кликеры и идл-игры. Пара десятков разнообразных игр точно должно набраться.
И видимо первое время буду заниматься именно портированием игр, а когда библиотека игр будет достаточно большая, можно будет придумывать что-то своё.
Отдельно для ностальгирующих: программа Flashpoint - огромная библиотека флеш-игр. Можно сказать "FLASH - STEAM".
ГЛАВА 6. ЯДРО, ЛАУНЧЕР, 20 FPS
Еще чем удобен именно агентный ИИ с доступом к файлам - он может запускать скрипты, компилировать и проверять ошибки. Тем самым я быстро выкинул ардуино из проекта.
С лаунчером пришлось прям повозиться. То текст не работал, то меню раскладывалось криво. Даже побыл немного UI дизайнером, и нарисовал раскладку экранов.
Скорее всего система поменяется не раз, но главное получилось рабочее меню через перекаты куба.
И бонусом, еще раз вернулся к рендеру на экранах. Частично была переписана несущая библиотека во всем кубе. Не без косяков, конечно)))
Увидел, как выглядит рассинхронизация отправляемых на дисплей данных.
Жаль только получил всё те же 20FPS при отрисовке всех 6 граней. Быстрее железо не может ну никак.
Заказать и собрать платы V1.5. Домучать лаунчер и ядро (сейчас еще нет анимаций и других полезных штук).
И начать портировать игры.
Этот пост - компиляция записей из моего блога в тг, где я каждый день пишу о жизни и работе над всеми своими проектами. Кому интересно - загляните.