Игра где основной механикой является кодинг. Часть - 1
9 месяцев назад я написал ответ на пост про создание игр , и хотел спросить нужна ли игра у которой основной механикой является кодинг.
Пост утонул в ответах и никому не был интересен. Но тем не менее, что-то сам себя воодушевил и решил вновь поставить Юнити и попробовать что-то сделать. Скажу сразу игра еще не написана, мало того, не сделано даже и 15% того, что задумал, но я продолжаю ее писать - а этот пост или серия - скорее для само-мотивации и советов. :-) И так как я Нуб в геймдеве - "настоящие сварщики" - могут не читать, ничего технического и нового тут, они не увидят, хотя могут меня попинать за что-то, что наверное тоже на пользу.
Краткое описание сюжета: конечно это выживач :-) - ну я люблю выживачи. Но слава богу - без Зомбарей! А сюжет изначально был такой - наш герой юный программист(А точнее вообще не программист, а болван из колледжа не знающий ничего ), слабый физически переносится на 850 лет вперед. Человечество вымерло, природа восстановилась, кругом леса и остались роботы. Роботов много, но большая часть неисправна и враждебна. Цель конечно выжить, понять что случилось, вернуться обратно и спасти человечество от вымирания. Попутно научившись кодингу - так как без него этот дохляк тут не выживет.
Вы скажете - такой сюжет и геймплей никому не нужен! Ну или нужен паре задротов и мне. И наверное будете правы. Но мало ли... может кому понравится и потом это скорее для наработки навыков работы с юнити для меня и просто for fun... Плюс у меня дочь которая любить игры, и видит свое будущее так или иначе связанное с ИТ - поэтому с ней советуюсь и может быть когда нибудь она сможет в это поиграть.
Немного отступлю для классического- "Здравствуйте все, Я Тульмон и я Программист. Здраааавствуй... " Ну в общем все верно - только кодю на работе я на php. Но c# в целом прост и понятен. Проблемы у меня в основном с моделлингом и всяким прочим визуалом.
Так или иначе, в новогодние праздники сел за код игры. А сел я за него, вместе с DeepSeek-ом - ибо в юнити шарил слабо(да и сейчас тоже не особо ). Ну а коли у него спрашивал про код, решил с ним и общаться по гемплею и сюжету. Он в целом давал прикольные рекомендации типа такого (тут у него спрашиваю как наш поцык вообще попал в будущее ? ):
Эта мысль мне показалась забавной - ведь нужен какой то учитель этого лоботряса, так что это тоже стало частью сюжета. Потом он мне подавал еще пару занятных идей но о них позже чтобы не нарушать хронологию.
На начальном этапе самым трудным мне казалось встроить внутрь игры интерпретатор какого либо языка. Я посмотрел варианты:
- встроить C# - это для меня как начинающего показалось лютым гемором.
- встроить Lua - это было бы просто, но я ненавижу луа :-D (простите меня луа-воды - но так пошло с esp8266 там можно было кодить на плюсах или луа, и все делаю на плюсах, а от луа чот тошнило)
И вдруг мне подвернулся такой вариант MiniScript https://miniscript.org/
Чел запилил неплохой скриптовый язык , и у него даже есть ассет для встраивания в юнити. А так же свое коммюнити . И подумал что мне как новичку это будет несложно, а для того что задумал там все есть. И потом - задача не научить игрока C#, PHP или lua - а научить просто мыслить циклами, алгоритмами, переменными ну вот этим вот всем программистическим.
Тут мануал- https://miniscript.org/files/MiniScript-Manual.pdf и там в целом все что нужно есть.
Асет купить не смог ввиду сложности с оплатой в сторе, но автор сам пишет что ассет это опционально - и можно встроить и так.
Что я и сделал. Быстро накидал редактор скриптов, создал коробочку повешал на нее все что там требуется и подумал что мне понадобятся кастомные команды - благо там это делается достаточно просто - и сходу бахнул туда move() и turn() - ну а что? - самое нужное для роботов.
И ЭТО СРАБОТАЛО!
Я Очень веселился. Вот гифка того периода - подхожу к коробке нажимаю F2(тогда было так да...) Открывается реадктор кода в котором последовательные команды. Потом нажимаю пуск - и робот(коробка) - ползет и поворачивается - не потому что так написал разработчик игры(я) а потому что так закодил игрок (пока тоже Я :-D ).

Клево! А теперь надо добиться плавного поворота - для этого попробую заюзать корутину! И не тут то было - я получил лютую дичь!
Оно делало все и сразу! Покопал, покопал это дело но как то безрезультатно. И решил написать разработчику - ну с чем черт не шутит .
Ответа не ждал , но он последовал достаточно скоро!
Автор посоветовал не использовать корутины, а просто уже внутри моей функи немного двигать объект и при этом выдавать false пока не подвинем полностью. Что я и сделал и все стало просто и понятно и заработало так как следовало!
Чтож, теперь у меня был понятный инструмент для создания любых своих команд этому языку и куча пространства для творчества.
Тут стоит сказать, что пока я ломал голову над выполнением кода за 1 раз и ждал ответа автора минискрипта добавил :
- Роботика Фиерро - взяв конечно бесплатную модельку из асетов (к слову вчера смотрел у дочери R.E.P.O - имхо там та же моделька)
- Зачем то поменял ассеты графония на более яркие и мультяшные. Сейчас смотрю на старые гифки и думаю - зачем я это сделал...
- Систему диалогов текстовых. В целом взял некий ассет и просто допилил ему ветвление и разные состояния в зависимости от стадии игры. Могу это потом детально описать если кому то надо будет
- Менюшку управления роботом чтоб не держать в памяти все эти F2, F4 итп. Менюшка возникает при наведении на робота и дает доступ к редактору кода и запуску скрипта.
- Еще какие то мелочи типа баров - еды, здоровья, обведения предметов на которые смотрю и прочее баловство.
Следующее, что мне пришло в голову была система Батареек для роботов! Да не сильно логично в рамках этапов создания игры... но мне показалось правильным сразу сделать чтоб при выполнении скриптов роботы тратили энергию. Так было в Colobot - и мне это там нравилось . Я подумал пусть будет некий квант энергии, а разные операции тратят разное кол-во квантов за кадр. Ну например sin или там if() совсем мизер, а move или позже shoot или build гораздо больше. И пусть будут 2 типа батарей обычная - будем ее делать из гавна и палок потом и продвинутая из плутония какого-нить и разной емкостью. В общем вот что из этого вышло. (Сорри - тогда писал все в гифки почему то)

Как видно из гифки, у нас 2 коробки с разными батареями и одинаковым кодом, и синяя работает гораздо дольше. Ну и видно как они садятся. Над балансом конечно еще поработаю ибо садятся они крайне быстро но пока это был просто тест работоспособности.
На этом наверное закончу первую часть, не потому что, как тут пишут - кармадрочер, а потому что хочу даже для себя разбить на части и этапы по мере того, как мне приходили в голову разные идеи и их реализация, а во вторых может вы скажете выкладывать ли код или как реализовано то или иное. Хотя конечно это может быть интересным только новичкам в геймдеве. Возможно вы скажете - наоборот не углубляться в код, а просто описывать, что я придумал и как оно реализовано. А может быть, вы вообще ничего не скажете - что тоже результат конечно :-D
А вообще - подытожив, хотел сказать вот что: подзабросил написание игры весной, стало некогда и главное потерял смысл и мотивацию. Все твердили - накой черт учиться кодингу, тем более через игру если теперь код пишут машины... ИИ, дипсики вот это вот все. И верно подумал я! И думал так до прошлой недели, когда наткнулся на пост девушки(увы сейчас потерял его), что учит кодингу детей, она изучала ту же проблему (зачем учиться прогать, если есть ии) и пришла к выводу, что нужно учиться! Ибо будущее - не в замене прогеров - роботами, а в замене прогеров_без_роботов, прогерами_с_роботами. :-) Ну то есть она пришла к выводу, что не достаточно делать промт ии и тупо компилить его код - нужно понимать что он делает, и уметь поправить по мелочи. А значит нужно знать алгоритмы, условия, циклы, переменные итп...
Это как то мотивировало меня на написание этого поста и на восстановление работ по игре.