gansik

Пикабушник
поставил 26 плюсов и 9 минусов
Награды:
5 лет на Пикабу
397 рейтинг 39 подписчиков 6 подписок 5 постов 4 в горячем

Kenshi, игра которая бьет игрока, а потом бьет снова

В игре есть возможность выбрать своё прошлое, а точнее то, с чего ты будешь начинать ознакомление с данным миром. Я начал с истории про мужчину и его собаку. Коротко о судьбе, вы никто и звать вас никак, неизвестно каким чудом вы выжили в данном мире до этого, но сейчас в вашем распоряжении 13 денег и собака, и вы в пустыне, и есть нечего. Так же в описании было что-то про то, что собака съедобная. Но я решил постараться сделать все, чтобы мы с собакеном смогли жить счастливо.


В общем очнулся я в каком-то разрушенном городе "Губка", возле полуразвалившегося здания, в котором сидел мужчина и рассказывал о том, как же мы сейчас заживем. Я подумал "вряд ли, здесь ни еды, ни плодородных земель, ни цивилизации". Решил пойти поискать какой-нибудь город. Выйдя за ворота развалин я почти сразу наткнулся на отряд людоедов, которые бодренько побежали за нами. Моя скорость была такой же, как у людоедов, но вот собака не могла похвастаться этим, в следствии чего, она начала отставать. Я понял, вот наши судьбы и расходятся, видимо когда мне намекали на то, что собаку можно съесть, в качестве того, КТО будет есть, выступал не я. Почти смирившись с тем, что собаки больше нет, я увидел отряд самураев, да еще и их фракция относиться ко мне нейтрально, я подумал "Вот он! Просвет!"... Самураи подошли ко мне, оглядели и сделали вывод, что я голодаю, а в качестве доказательства обратного потребовали показать хоть какую-то еду, а у меня в рюкзаке только бутылки из-под рома, которые я планировал продать и попробовать на них как раз таки и купить еды. Поняв, что еды у меня нет, они сказали, что в столь прекрасном мире голодать это не просто плохо, это противозаконно! Я, насмотревшись всяких сюжетных поворотов, уже начал представлять, как эти святые рыцари накормят меня и спасут мою собаку, НО! Оборвав мои мечты, самураи намекнули, что противозаконно это в буквальном смысле, и начали меня колотить. Мне осталось только притвориться мёртвым, чтобы выжить. Я не знаю, есть ли характеристика "Актерское дело", но самураи поверили в мою смерть и в качестве своей следующей миссии по освобождению этого мира от нечисти выбрали уничтожение тех самых людоедов. Пока они воевали, я поднялся, перемотал все свои раны бинтами, обнаружил, что одна нога у меня в плохом состоянии и бегать я пока не могу, ну и ходить вменяемо тоже. Я поковылял на поле боя, где посреди моря крови и только что упавших тел лежала моя собака. Моего приближения ни самураи, ни людоеды не заметили, они были сильно заняты сражением друг с другом. Я смог подобрать собаку и унести подальше от этого, туда, где нас ждало наше светлое будущее!

Kenshi, игра которая бьет игрока, а потом бьет снова Kenshi, Рассказ, Игры
Показать полностью 1

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища"

Привет всем! В сегодняшнем посте я бы хотел вам расписать, что такое эта "нейросеть" обычными словами и рассказать про то, как я использовал ее в созданном на неделе Tower Defense'е(Жанр игр, где у игрока есть карта с дорогами, по которым враги пытаются добраться от начала до конца, а цель игрока ставить "башни", для того чтобы те всячески мешали недругам выполнить их задачу, отстреливая, замедляя их и т.д.), и примерчик, как я генерирую карты(это не рандомная генерация, а просто способ ускорено рисовать наброски уровней), может кому интересен будет.


Ссылка на прошлый пост


Для людей, которые хотели бы узнать что это за "магия" на тему которой некоторые свободно разговаривают, а у других при этом возникает чувство, что первые общаются на древне-руническом. Так вот, допустим, я хочу создать нейросеть, которая будет решать, есть ли мне что-то или нет. Сама сеть это такая коробка, в которую мы подаем информацию, в данном случае блюдо, а на выходе, т.к. я хочу получить ответ есть мне это или нет, будет вероятность того, съел бы я это блюдо. внутри этой коробки есть 2 анализатора(входа), это внешний вид блюда и его запах. Т.е. по сути мы имеем 2 нейрона, по 1 от каждого анализатора, а именно - первый нейрон имеет 2 значения, если он равен 1 значит блюдо "хорошо выглядит", а в случае 0 - блюдо "плохо выглядит" и, так же, есть второй нейрон, который при 1 говорит нам, что у блюда "хороший запах", а при 0 - "плохой запах", так же у каждого нейрона есть свой "вес", часто он находиться в промежутке от 0 до 1. Изначально я установлю вес каждого нейрона равным 0. И начинаю тренировать сеть, на собственном примере, ведь я хочу, чтобы она думала также, как и я. Беру блюдо1, оно на вид хорошее и запах приятный, "я б его съел" пронеслось в голове и я говорю сети, что в данном примере ответ "да". Сеть пробегается по нейронам "хорошо выглядит" и "хороший запах", и просчитывает по "грубой" формуле (значение_нейрона1 *умножить* на вес_нейрона1 + значение_нейрона2 *умножить* на вес_нейрона2), т.е. в нашем случае сеть говорит нам (1 * 0 + 1 * 0) = 0, т.е. по ее мнению, я бы это не стал есть, но т.к. это ответ не правильный(не совпадает с тем, что я ей сказал), она прибавляет ей 0.5 к весу, чем меньше это значение(0.5), тем больше мне потребуется опытов в процессе обучения, но и сеть будет точнее работать, но в данном примере я решил прибавлять по 0.5 в случае, если ответ совсем не совпадает. Далее рассмотрим блюдо2, оно выглядит ужасно, но вкусно пахнет, я сети говорю "да, я съел бы это", она проходит по нейронам и считает (0 * 0.5 + 1 * 0.5) = 0.5, т.е. есть вероятность что я съем, по ее мнению. Что не сильно, но отличается от вреного ответа, т.к. в нейроне вкуса был 0, а мой ответ был 1, то мы от этого веса отнимем примерно третью часть нашего числа(0.5) от веса, т.е. вес стал (0.5 - 0.15) = 0.35, а вот в нейроне запаха была 1, то мы прибавляем к весу 0.15 и получаем (0.5 + 0.15) = 0.65. Теперь, мои приоритеты вам известы, а известны ли они сети? Проверим, даем блюдо3 с хорошим видом и плохим запахом (1 * 0.35 + 0 * 0.65) = 0.35, т.е. маловероятно, что в принципе близко к моему ответу нет. И вот я иммею простецкую сеть, решающую тривиальную задачу.


Теперь приступим к рассмотрению нейросети в TD. Я набросал небольшой уровень который выглядит следующим образом.

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища" Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Где желтые кубы - это места для строительства, белые шары это точки маршрута, или те самые дороги, по которым враги стремяться дойти до конца.(Вход ближняя к нам крайняя точка, выход дальняя крайняя). Так же "своял" три пушки, просто турель, стреляющая быстро по 1 врагу

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища" Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

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

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища" Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

И пушка-заморозка, которая при атаке замедляет скорость врага на 30%.

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища" Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Взяв ту же сеть, что и в прошлом посте, я начал думать, какие данные давать боту, чтобы тот отталкивался от них. Решил основываться на том, где расположена точка постройки, а точнее сколько прилегает к этому кубику "точек маршрута", тэг выглядит следующим образом "build_2_3", где первая цифра это сколько точек прилегает с отступом в 1(т.е. сверху, снизу, слева, справа), а вторая цифра это сколько точек прилегает по диагонали, это можно назвать первым слоем, второй слой смотрит что за пушка(ее ID) и сколько таких уже построено, тэг выглядит так "tower_1_0". Т.е. теперь бот получает лучшую, по его мнению, точку, для постройки, основываясь на весе нейрона с тэгом "build_*_*" и далее прибавляет к нему вес нейрона вышки "tower_*_*" для каждой из пушек и так же добавляет все эти действия в пул, из которого бот уже выберет, какую пушку ему строить. После завершения составления этого списка, бот выбирает лучшие из них, так же с коэффициентом погрешности. И уже из лучших на основе рандома выбирает конечную. Если у него хватает денег, то он строит, если нет, то ничего не делает. Это позволит боту ждать, когда ему хватит денег на башню, а не плодить кучу дешевых.


Для обучения я наплодил 200 волн по 8 противников, каждая волна немного сильнее предыдущей. При первой итерации бот дожил аж до 58 волны, а уже при третьей "прошел" игру. Тут я понял, что проблема в балансе и боту слишком просто. ПО этому разницу между противниками в разных волнах я увеличил. Теперь бот уже испытал сложности и начал использовать все виды пушек. Но текущие данные не идеальны, ведь бот сейчас основывается, грубо говоря, на положении точек построек относительно "точек пути", а среди пушек выбирает те, которые ему нравятся(он использует ледяную и ракету, чаще чем пулемет), хотя в текущей версии, с одинаковыми врагами, эта стратегия хорошая. Но бот не создает комбинации из нескольких пушек (ракета, а рядом заморозка), точнее подобные связи получаются у него, но они не осознанные.


Но в итоге я решил вообще отойти от темы построения кучи вышек в ряд, а сделать 6-7 отдельных позиций. В текущей версии башенки уже приобрели по несколько улучшений, разные способности. Так что в ближайшие дни я по лучше разовью бота, научу его улучшать вышки и уже научиться распознавать что правильней сначала ракета, потом заморозка или наоборот.



А теперь я расскажу, как я генерирую уровень, для дальнейшего его редактирования. На самом деле, все довольно таки банально, я просто рисую в Paint'е вот такую карту, по пиксельно.

Нейронная сеть, теперь и для Tower Defense, проверяю гибкость моего "детища" Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Где серые это просто блоки, черные - это места под строительство, зеленый - это выход. Соответственно я разбираю каждый пиксель и смотрю их цвет и в зависимости от него, я подгружаю нужный мне элемент(земля, выход и т.д.). Желтая и красные пиксели это пути, я разбираю их на 2 составляющие r и g, красный и зеленый цвет. Если зеленый цвет = 255, значит это спавн, точка старта для монстров, а вот красный цвет в зависимости от насыщенности меняется направление движения, т.е. при r=255 направление движения вправо, r = 196, направление движения вверх. Все это можно было оставить одним красным цветом и уже кодом искать ближайшие точки, но я захотел вообще упростить себе задачу). Соответственно позиция пикселя на картинке, является позицией подгружаемого объекта в мире.

Показать полностью 5

Подробный разбор нейросети для нашей карточной игры

Всем привет, сегодня я попытаюсь вам подробней рассказать, как я реализовал свою "нейросеть", как я скармливаю ей информацию и как она ее использует в обучении.


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


С чего же я начал, мне было необходимо хранилище этих самих нейронов, я назвал его мозгом, ну и сами нейроны.Класс нейронов состоит из двух параметров - это тег и вес.

Подробный разбор нейросети для нашей карточной игры Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Мозг же, это просто List с нейронами, для возможности использовать List и методами, такими как запись нейрона, получение веса и запись в файл.


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

Подробный разбор нейросети для нашей карточной игры Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

В получении веса мы, опять же, обращаемся к методу с тегом, пробегаемся по листу, если нашли нейрон с таким тегом, возвращаем его вес, иначе возвращаем 0.


Сохранение в файл происходит с помощью библиотеки "System.IO" и "JsonUtility" которая встроена в Unity3d.

Подробный разбор нейросети для нашей карточной игры Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Ну и действие, связывающее нейроны и бота. Этот класс состоит таких параметров, как вес, список тегов, действие, цели, т.к. некоторые действия требуют выбрать их.

Подробный разбор нейросети для нашей карточной игры Нейронные сети, Gamedev, Инди, Искусственный интеллект, Длиннопост

Теперь сам бот. В комментариях к прошлой статье был вопрос - "как бот взаимодействует с клиентом", по сути у нас есть 3 линии и возможность перетащить карту на одну из линий, чтобы вызвать её туда. Не зависимо от расположения курсора над линией карта становить вперед своих карт, так что по сути просто вызывается метод у линии "Добавить карту". Вот бот и вызывает этот метод, посылая параметром карту, которую хочет поставить.


В начале хода бота, бот ждет, когда ему дадут карту(как и во многих других ККИ у нас в начале твоего хода дают карту), затем начинает смотреть свою руку, а точнее на карты в ней, просто перебирая очередной List с картами. Если стоимость маны у карты выше, чем у бота маны, то он попросту пропускает ее, а вот если маны хватает, то тут уже происходит анализ. (Маленькое отступление) Концепция обучения этого бота такова, что я даю боту информацию, которую считаю необходимой для него, а он на основании нее уже совершает действия. Т.е. я не написал бота, который в начале даже не знал во что играет, а после долгих опытов пришел к выводу, что это похоже на ККИ.(Конец отступления). Для каждой карты бот смотрит все 3 линии, т.е. он каждую карту анализирует по 3 раза. Сначала бот создает новое действие, затем генерирует первый тег, на основании характеристик самой карты, т.е. это выглядит следующим образом "сыграть_id_*стоимость карты*_*сейчас_маны*"(id - Это идентификатор карты), получает из мозга вес этого тега, и записывает тег и вес в это действие. Затем бот смотрит есть ли дружественный сосед и, если есть, из какой он фракции, т.е. добавляет новый тег типа "фракция1_фракция1" или "фракция1_null"(в случае если на линии нет союзников), ну и все добавление тегов сопровождаются получением и записью веса этого тега в действие. Далее, если у карты есть какое-либо действие, которое воспроизведется с ее появлением на столе, то мы боту говорим результат этих действий.


Просмотр результат действий происходит следующим образом, допустим у нас есть механика убить врага напротив, убить выбранного врага, баффнуть своего союзника и достать еще карту из колоды. В начале всего анализа генерируется тег "использовать_*название механики*", далее, если это, к примеру, убить напротив себя, добавляется ID карты с дополнительным весом, равным сумме характеристик врага напротив , т.е. если напротив стоит существо 2/3 с ID = 2, то в тег добавиться запись "_2_5" и этот тег со своим весом записываеться в действие, если у врага есть способности, то мы за каждую способность так же добавим в действие тег с записью "убить_*название способности*".


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


По окончанию анализа каждое действие записывается в лист действий, а так же в самом конце добавляется действие с тегом "nothing_*текущая мана*" и своим весом, что отвечает за пропуск хода. Далее бот пробегается по всему списку и выбирает те действия, которые ему подходят, а точнее самые весомые. НО! У меня, как я уже говорил в прошлом посте, есть коэффициент погрешности, благодаря которому бот может не всегда совершать идеальные, по его мнению, ходы. Т.е перед пробегом по основному листу с действиями, создается дополнительный, изначально пустой лист. Когда мы просматриваем основной лист, мы смотрим его вес, если вес этого действия больше максимального веса в новом списке, то все действия, вес которых ниже чем (макс. вес - погрешность), удаляются, а если у текущего действия сумма (веса + погрешности) >= максимальному весу в новом листе, то просто добавляем его. Далее из полученного списка бот берет случайное действие и совершает его, тратя на это ману, далее он смотрит, может ли он еще что-то сделать, кроме "nothing" и будет ли это хорошим действием. Все разыгранные действия за игру, а именно теги(нейроны) этих действий записываются в отдельный список "задействованных нейронов".


Когда у бота проигрывается действие "nothing", бот передает ход противнику и в этот момент идет просчет урона по себе и по врагу. В зависимости от этого у каждого нейрона в списке "задействованных нейронах" добавляется(в случае нанесения урона) или отнимается(в случае получения урона) вес, где 1 ед. урона = 0.1 ед. веса. Ну и по окончанию игры, если бот выигрывает, мы его хвалим и даем по +10 к каждому сыгранному нейрону, или, в случае проигрыша, отнимает по 10 у каждого нейрона.


Далее я просто добавил в игру 2 бота, один оперировал рукой Игрока1, а другой - Игрока2 и наблюдал за их действиями и логикой. Из интересного, у нас в игре есть механика убить и забрать существо. Так вот, бот не любит убивать хороших существ врага, т.к. он может его попросту забрать себе и из-за этого спустя еще пары десятков игр бот понял, что ставить сильное существо без прикрытия слабым не ок.


Если вам интересны такие статьи, то я бы мог попробовать, для примера, написать простенький Tower Defense, в который так же играл бы бот.

Показать полностью 3

Нейронные сети в геймдеве

Привет, пикабу. Сегодня я хотел бы вам рассказать о реализации небольшой нейросети для нашей игры и какую пользу или вред она нам принесла.



Сейчас мы пилим одну игру, в которой вы как в hearthstone/Gwent должны выкладывать существ с разными способностями и противостоять своему врагу. Это краткий экскурс по базовой механики игры, более я пока рассказывать не буду, т.к. тема пойдет не об этому. Так вот,одним пятничным вечером, а в дальнейшем и выходными, мне захотелось попробовать написать бота для нашей игры, т.к. все базовые версии игры мы тестировали в ПвП, а игра пока-что является исключительно ПвЕ. Ну рано или поздно мне бы пришлось это делать,но вместо заскриптованного ИИ, мне захотелось попробовать в роли оппонента самописную нейронную сетку.


Итак, с чего я начал. Я создал некое хранилище нейронов, у которого есть функции по записи/чтению нейронов. Каждый нейрон имеет запись действия и ценность/вес, кому как удобней.  Бот может обратиться к хранилищу, указать действие и получить его ценность, если оно было записано ранее, или 0 в случае, если такого еще не происходило. Далее я рассказал боту, что у него есть его мана, есть существа, у них есть способности, напр. убить вражеское существо, Т.е. буквально, как нового игрока, я провел бота по всем механикам игры, и рассказал что каждое действие означает. И немного помог ему с ориентированием в этом. Т.е. при начале хода бота, он анализирует свою руку, а точнее карточки в ней. Пробегаясь по каждой карточке, бот смотрит, может ли он ее сыграть, если да, то как и к чему это приведет. Подробнее это выглядит так - если бот может сыграть карту, то он создает действие "Разыграть X карту, за N маны, сейчас у меня M маны". У каждого действия есть своя ценность, т.е. при создании его бот смотрит своё хранилище, если там уже совершалось подобное действие, то его ценность присваевается только-что созданному. Далее, бот смотрит на таланты этой карты, если, допустим, у карты свойство "Убить цель", тогда бот просматривает варианты, кого он может убить, выбирает самое ценное убийство, опять же перебирая варианты через свое хранилище, и добавляет ценность убийства к стартовой цене текущего действия. На пример на 3 ход, у бота 3 маны, у него есть карта за 2 маны, со своими статами и эффектом убийства он видит действие, ценность которого равна 3("Разыграть эту карту, за 2 маны, когда у меня 3") + 6("Убить супер-мутанта") = 9. Далее это действие заносится в пул из которого, после всех расчетов, бот будет выбирать что же ему сделать.


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


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


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


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


Ну и в конце хотелось бы написать такие заметки, как бы для меня, но и для вас. Что бы я хотел улучшить? Сейчас бот просматривает каждую карту отдельно, потом разыгрывает лучшую и снова просматривает карты. Т.е. у бота отсутствует понимание механики "комбо-хода". На пример, у бота есть карта за 5 маны с ценностью в 50 и 3 карты за 1, 2, 2 маны и ценностями 15, 30, 20, соответственно, и бот конечно же сходит картой за 5, т.к. разовая ценность этого действия будет больше остальных. По сути, бот может прийти к решению на 5 маны разыграть комбинацию из карт, но дорога к этому решению займет на много больше времени и погрешности все же будут.  Ну и в целом его можно развивать и развивать, просто пока не ясно, сколько пользы это нам принесет и сколько времени будет затрачено.


Всем удачи!

Показать полностью

Концепт текстовой стратегии(?). В поисках идей

Неосознанное приключение

*Это наброски концепта, возможно в дальнейшем персонажи взлетят в космос или отправятся в средневековье, или в фэнтези...


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


GamePlay:

Суть игры, вы должны поддерживать характеристики вашего народа в отрезке от 0 и до максимума (Еда : 5/10). Т.е. если еды будет 0 или 10, то вы проигрываете.(Умерли от голода/зажрались и никуда не идем).

Концепт текстовой стратегии(?). В поисках идей Work in progress, Gamedev

Разовый ивенты - при этих ивентах ваше решение не повлияет на дальнейшие события.

Цепочка событий - здесь ваше решение приведет к добавлению дополнительных ивентов, которые могут выскочить рандомно где-то дальше. В случае с бандитом, вы можете помочь ему и в дальнейшем наткнуться на салун или же убить его и позже встретить кого-то, кто будет благодарен вам за убийство бандита<br>

Неосмысленный ивент- в данный ход ничего интересного не произошло, по этому вы решаетесь завербовать человека в армию бросив в него кусок мяса (Люди -1, Еда - 1, Военные + 1)


Пост выкладываю с целью получить некий фидбек на эту идею. В случае, если она кого-то зацепит, то появится дополнительный стимул, а также ответственность, за исполнение написанного.


В одиночку генерировать идеи трудно, бывают взлеты, когда генерация прям прет, а также падения, когда мыслей нет, от чего можно и увязнуть в этом безидейном болоте и забить на проект.


Буду рад вашим предложениям, идеям касаемых геймплея, эвентов и т.д.


Сама игра - http://frolspage.comyr.com/minigame.html

Группа VK, https://vk.com/unconsadventure

Показать полностью 1
Отличная работа, все прочитано!