- Сообщений: 469
- Спасибо получено: 850
Балансирование с математической моделью и без
(Прошу не переносить эту тему в Академию, пока она не будет видна для гостей форума.)
Что такое баланс?
Достижение баланса, как и любая разработка, преследует своей целью добиться чего-то полезного для конечной игры. Если вы тратите время на работу и не можете сформулировать, зачем она в проекте нужна - например, выбираете частоту и врагов для случайных встреч, но не можете объяснить, что они дают игре (“потому что в JRPG так надо”) - выкиньте это и займитесь полезным делом. Так же и с балансом. Если вы “балансируете”, не поставив себе конечной цели, вы зря тратите своё время.
Например, вы можете поставить себе такие цели:
- Битва должна длиться от 1 до 3 минут, потому что меньше легко, а больше скучно.
- Все персонажи должны быть одинаково полезными в бою.
- Не должно быть навыков, которые никогда не пригождаются.
Сказанное выше кажется разумным, но не следует слепо применять это к любой игре! Точно так же кажется разумным следующее:
- Битва должна длиться не больше 10 секунд (в игре много кача).
- Битва должна длиться не меньше 10 минут (игра про тактические бои).
- Персонажи должны быть полезны в бою в соответствии со своим рейтингом престижности (коллекционируем монстров).
- Персонажи должны быть полезны в бою, если у них боевой класс (экономическая ролевая игра).
- Персонажи должны быть почти бесполезны в бою (пародия или стелс).
- Все навыки полезны в разной мере, игрок должен сам вычислить, которые действительно полезны.
Иначе говоря, продумайте, что нужно вашей игре. Для этого нужно знать, чего она хочет добиться и как. Возможно, она даже не будет следовать принятым жанровым представлениям о длине боя или полезности персонажей, поэтому я не обсуждаю их в этой статье.
Только когда вы определитесь, можно говорить о балансе.
Где нужен баланс?
В таком случае вам будет полезно придерживаться принципа: в балансе нуждается то, за чем игрок проводит заметное количество времени. Заметное - то такое, которое он сам бы заметил. Потратил 20 минут подряд на скуку? Заметил и закрыл игру. Потратил первые 5 минут игры на скуку? Заметил и закрыл игру. Заметил на середине игры, что потратил 20% игрового времени на скуку? Закрыл игру.
Допустим, в игре не важно, какие будут бои, и вообще вы задумали их мало. Но, недосмотрев, вы допустили ситуацию, когда один бой оказался почти непроходимым, и игрок потратил на него 15 минут без всякого удовольствия. Закрыл игру. Потому что здесь нужна была хотя бы минимальная балансировка, гарантирующая, что игрок не потратит больше 1 минуты на бой. Проведите её, хотя бы когда узнаете об проблеме от игроков.
Математическое моделирование
Например, герой атакой бьёт на 10 урона за ход, а у врага - 100 здоровья. Несложно подсчитать, что для убийства врага понадобится 10 ходов. Мы вычислили это по формуле “здоровье делить на урон в ход”. Это и есть математическая модель. Она упрощённо описала десятиходовый бой.
Если герой бьёт на 10-20 урона в ход, то достаточно очевидно, что для убийства врага понадобится 5-10 ходов. Это немного более сложная математическая модель, учитывающая минимальный и максимальный урон.
Математическое моделирование точно так же подходит для балансирования экономики, поуровневого развития и всего, что может быть выражено математически. (Исключая, к примеру, “баланс экранного времени” персонажей в сюжете - это скорее режиссура; или левел-дизайн.)
Урон в отрезок времени
Но DPS - это приближение. Урон может наноситься часто помалу (пулемёт, яд) или редко помногу (рельса, ракета, файрбол). Редкий большой урон может наноситься в начале отрезка времени (гиперлуч - мощный удар, затем ход перезарядки) или в конце (солнечный луч - ход на зарядку, затем мощный удар). И если вы уже сражались в игровых боях (вы же не делаете игру с тактическими боями, не разбираясь в них как игрок?), то знаете, что эти варианты отнюдь не равнозначны. Лучше нанести побольше урона раньше - может, вы убьёте противника, и он уже ничего вам не сделает. А если у врага есть абсолютная (вычитаемая) броня, то бить урон на множество атак не выгодно, ведь броня будет вычтена из каждой атаки - в итоге, может, урон вообще не будет нанесён. Математическая модель с DPS этого не отражает. Что делать?
Вы можете прикинуть на глаз, насколько более выгодна атака, позволяющая пораньше нанести большой урон (или насколько не выгодна - та, которая наносит большой урон попозже) и соответственно увеличить или уменьшить урон, а затем сразиться и проверить, нормально ли получилось. Или можно построить модель, которая это учитывает.
Таблицы
Например, если в клетке А1 находится урон атаки героя, в клетке Б1 - число атак в секунду, а в клетке В1 - здоровье врага, то в клетке Г1 можно записать формулу “=В1/(A1*Б1)” и получить среднее число секунд, за которые герой убивает врага. Можно поставлять разные значения, смотреть на результат, уточнять… А можно воспользоваться школьной алгеброй и сделать формулу вычисления атаки героя, чтобы он убивал врага за нужное число секунд, записанное в Г1. В клетке А1 записать: “=В1/(Г1*Б1)”. Это следует из правила пропорции; или же можно домножать и делить на бумаге обе стороны уравнения “Г=В/АБ”, пока не слева не станет “А=...”. Кстати, несмотря на мощность цифровых инструментов, рекомендую разжиться блокнотом или тетрадью.
Кто сильнее?
Из этих данных невозможно сказать, если, конечно, в вашей игре защитные характеристики не совпадают у всех бойцов. В действительности нужно вычислить, за сколько секунд (или ходов) герой убьёт врага, а враг - героя. Допустим, это соответственно 1,2 и 1. Кто победит?
Если вы сказали “злодей” или “примерно 50/50”, то вы неправы. Из этих данных всё ещё невозможно сказать. Нужно знать, как происходят случайности в боевой системе и как распределён урон. Например, если боец всегда наносит ровно столько урона, сколько у него DPS, то, действительно, всегда победит злодей. Если злодей - пулемётчик, а герой - снайпер, бьющий в начале боя на 50, а потом молчащий 5 секунд - герой победит. Наконец, если урон равномерен, но случаен, скажем, +/-20%, то исход такого боя тоже будет случаен: может, герой нанесёт сразу 12 урона и прикончит врага, а может и нет.
Мораль в том, что DPS - хотя и очень простой показатель, который используется почти в любом моделировании боя, но нужно также учитывать нюансы боевой системы. Если вы их не учли, то увидите расхождение модели с реальностью, когда будете проверять вычисления в бою. В таком случае ищите, где в модели допущено чрезмерное упрощение.
Баланс развития
Можно составить очень большую математическую модель (непростая задача, но тут всё зависит от ваших способностей в математике и информатике; за это даже деньги платят). Можно модель не составлять, но так или иначе - боевая система в вашей игре скорее всего представляет сложную структуру из самых различных чисел и зависимостей. И следствие этого - часто если потянуть где-то один параметр или зависимость, это скажется на сражениях по всей игре.
Несколько полезных правил:
- Уровни балансируются от первого до последнего. Во-первых, так легче (вы же в этом порядке проходите игру во время тестов). Во-вторых, обычно первые уровни влияют на числа на последних, а не наоборот. Соответственно, если вы сбалансируете финальный бой, а потом станете менять что-то на первых уровнях, то финальный бой тоже расстроится.
- Сначала балансируются герои, потом - враги. Герои актуальны для большей части игры, а враги - обычно для небольшой области или отдельных событий.
- В конце разработки или после релиза исправлять баланс нужно точечно, чтобы не расстроить всю систему: например, если битва с боссом дисбалансированная - следует вносить изменения в босса (они касаются только одной битвы), а не в героев (касаются многих и многих битв).
Кроме того, развитие - это не просто сколько (какие числа будут на каком уровне), но и когда (частота повышения уровня, изменения чисел). Например, вам нужно, чтобы игрок получил второй уровень к 15-й минуте игры. Для этого нужно знать, сколько и каких источников опыта он за эти 15 минут увидит (если ваша система повышает уровни за опыт, конечно). Тогда сумма опыта из этих источников - например, боёв - должна составлять то, сколько нужно для 2-го уровня. Подобные вычисления нужно провести для всей продолжительности игры. Опять же, будет полезно использовать таблицу, чтобы не считать на пальцах.
Некоторые техники работы с таблицами
- Калькулятор (расчётная таблица) - автор закладывает пожелания (“битвы заканчиваются за 10 ходов, DPS 20”), а на выходе получает данные для ввода в игру (“здоровье врагов 200”).
- Контроль (валидатор, проверочная таблица) - автор закладывает данные, которые надо проверить, а на выходе получает оценку правильности данных. (“DPS 20, здоровье врагов 200. Заканчиваются ли битвы за 15-25 ходов?”).
- Симулятор - автор закладывает данные, которые надо проверить, а модель упрощённо разыгрывает их и выдаёт результат. (“DPS и здоровте у героя 20/50, у врагов 10/200” - “Вот лог боя”).
- Интерактивный симулятор - то же, что и симулятор, но игрок может принимать решения в процессе симуляции, например, выбирать атаки или покупать/продавать вещи. Маленькая упрощённая копия одной из ситем игры.
- Экспортёр - запускаемый в таблице скрипт, который может полученные данные экспортировать в формат, понятный игре.
- Импортёр - запускаепый в таблице скрипт, который может считать данные игры и записать их в модель.
Термины, касающиеся данных:
- Данные - под этим я подразумеваю числа, которые будут использоваться игрой: показатели атаки и здоровья, коэффициенты в формулах… А также списки персонажей, врагов, атак и другого контента.
- Заглушечные данные - числа “чтобы были”, необходимые для начала тестирования системы. Не имеют ничего общего с целями игры и критериями баланса. Ими просто нужно по-быстрому заполнить модель.
- Предварительные данные - данные, полученные моделью, но ещё не проверенные на игре; особенно если игра гораздо сложнее модели и их почти наверняка нужно исправлять.
- Финальные (актуальные) данные - данные, на которых автор поставил точку и сказал “в релизе будет так”. Само собой, до релиза и после релиза данные всё равно могут поменяться… Но в данный момент автор не считает нужным пересматривать их.
- Устаревшие данные - данные, бывшие актуальными, но теперь нуждающиеся в пересмотре.
- Расчётные данные - данные, полученные моделью (без внесения изменений вручную).
- Текущие данные - данные, сейчас находящиеся в игре, независимо от того, актуальны ли они.
А теперь собственно техники.
- Используйте условное форматирование: оно позволяет глазами отследить закономерности и аномалии в данных. Есть разные виды условного форматирования - цветом, столбиками…
- Изучите параметры условного форматирования! Например, иногда важно все числа, которые больше 1000, красить одинаковым красным, а не растягивать промежуток с белого до красного до максимального числа в области.
- Обратите внимание, что процентиль - не то же, что процент. Если вы не знакомы с термином “процентиль”, настоятельно рекомендую в параметрах условного форматирования в качестве среднего значения указывать “процент”.
- Есть условное форматирование, которое позволяет сделать все нулевые значения серым, или сделать “Да” зелёным, а “Нет” - красным… В общем, можно выделить данные почти что как угодно.
- Используйте графики. Пользоваться ими даже проще, чем условным форматированием: выделил область с данными, нажал “Вставить график” (или “Вставить/График”, смотря в какой вы программе). Это другой способ глазами увидеть закономерности и аномалии.
- Используйте знак доллара $ в формулах. Он позволяет при копировании или растягивании клетки с формулой на соседние зафиксировать координаты, по которым она берёт данные из других ячеек. Например, растягивание формулы “=А1” на клетку ниже даст “=А2” на этой клетке; если же формула будет “=А$1”, то в клетке ниже тоже будет “=А$1”, потому что единица - зафиксирована.
- Используйте именованные области. Вы может назвать клетку А1 “множитель_атаки” и дальше использовать это название в формулах: “=Б1*множитель_атаки”. Это делает формулы более удобными для восприятия, особенно когда вы сели за них после полугодичного перерыва.
- Читайте учебники. Если вы хотите добиваться серьёзных результатов с использованием таблиц, читайте про то, как ими пользоваться. Там вы прочтёте о том, как сделать и настроить условное форматирование, как использовать знак доллара, какие бывают формулы и многое, многое другое. После 10 лет работы в этой области я, по своей оценке, пользуюсь только 10% возможностей Экселя и Гугл-таблиц, и этого хватает для баланса серьёзных коммерческих игр.
Условности и ограничения модели
По мере того, как модель расходится с реальностью, должно меняться и её применение. Расчётные данные из моделей, почти что повторяющих боёвку настоящей игры, можно сразу вбивать в игру. Однако расчётные данные из моделей, которые допускают сильное упрощение, получится использовать только как отправную точку. Разница в том, что происходит, когда вы хотите что-то уточнить: если модель близка к игре, то уточнения вносятся в правила модели, чтобы получить новые расчётные данные; если же модель только задаёт отправную точку, то данные уточняются вручную, в самой игре.
Полезно помнить, что “ни один игровой баланс не переживает встречу с релизом”. По крайней мере в наш век, когда можно выпускать патчи и обновления. Если модель вашей сложной боевой системы дала вам лишь отправную точку для чисел в контенте, то для перебалансировки вам придётся либо автоматически импортировать данные из игры, либо перебивать их вручную.
Как сбалансировать игру без занудных таблиц
Но это не повод не выпустить сбалансированной игры. Нужно только правильно к этому подойти. Есть три способа.
- Балансировать “на глаз”. Просто много играть в игру и замечать “ага, тут битва слишком сложная, нужно ослабить врагов”. Этот способ надёжен, но требует много времени и труда. Если вы тестировали игру недостаточно или не проверили все ситуации, в них может остаться дисбаланс с большей вероятностью, чем если вся игра была описана и рассчитана с помощью математической модели. Главное - соблюдать принципы, изложенные в разделе “Баланс развития”, чтобы не тратить время и силы зря.
- Подобрать систему, которую легче балансировать. А то и вообще не надо балансировать. Например, вам нужно, чтобы игрок получил уровень после первого босса? Просто выдавайте уровни в игре при прохождении ключевых точек, а не от накопления опыта. Если это не кажется изящным, проявите фантазию и выдайте магический меч, или сенсея для апгрейда класса, или герой может искупаться в драконьей крови на манер Зигфрида… Главное - избегать таких закономерностей, когда исправив что-то в одном месте, можно расстроить баланс во многих и многих местах.
- Попросить помощи у других. Правда, у нас принято просить помощи только у художников, скриптеров и мапперов.
Если сбалансировать к сроку не получается
Ваша задача в таком случае - сократить потери и дать игроку наилучший пользовательский опыт из объективно возможных здесь и сейчас.
Если игра слишком сложная, пусть лучше будет слишком лёгкая. Игроки хотя бы доиграют её до конца. Дайте им читы, или тупо увеличьте силу героя в 10 раз, или давайте в 10 раз больше опыта…
Если игра слишком лёгкая, то и чёрт с ним. Сложность - понятие субъективное. Может, в неё начнёт играть 8-летний школьник, и это станет его первой игрой после того, как он только смотрел игры на Ютубе. Она покажется ему как раз в меру сложной. Кроме того, игра может быть хороша сюжетом или графикой.
Вывод
Цените время игроков, не давайте им застревать в скучных местах игры %)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Действительно, почему бы и нет, хотя математиков в этой области здесь поменьше даже чем художников.
Мелкие советы в духе не трогать героев в конце производства или не изменять систему под конец пригодятся в любом случае, а я пока, как и раньше, буду делать на глазок и упрощать системы.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
С фиксированными (без случайностей) головоломками довольно понятно - я, имея на руках фиксированную модель, могу написать программку для оценки, построения графиков и так далее, но и то - нужно понять:
- как оно будет для игрока, а не для меня - где ставить отметки на графиках статистики
- сколько, например, выставлять минимум для прохождения уровня
- как увеличивать сложность, до какого предела (а может пихать ядреное в необязательные ветки)
- когда вводить свежие дополнения и правила
- если есть доп бонусы, облегчающие игру или накапливаемые попытки, как просто их получать/рефрешить
И это еще для фиксированных случаев, а там, где рандомий царит так вообще не понимаю, что делать. И, судя по всему довольно многие. Вот как King (редкий хороший пример) балансит свои конфеты?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Это всё для нашего случая не очень подходит...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Про вероятность ни слова. в книге "искусство геймдизайна" например был разобран пример, в котором разбирается какая атака из представленных в жрпг более продуктивная: с высокой вероятностью попадания но средним уроном или низким уровнем попадания но высоким уроном.
Поэтому хотелось бы увидеть конкретный пример в духе "есть 4 героя, у каждого по определенной атаке с определенной силой и вероятнстью попадания, есть 5 видов врагов, есть разные пати врагов.необходимо сбалансировать их,чтобы ни один из героев не выпадал,ни один из врагов не был сверхсилньым или пушечным мясом и чтобы против каждого врага были свои работающие тактики"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ну, предположим, стандартная пати - воин, клирик, маг и вор. И пусть они сражаются со своим первым боссом, чтобы не углубляться в вариативность прокачки. Битва пошаговая. Каждый раунд - один удар.
Воин - имеет высокую броню, много хитов и средние резисты. Бьёт физикой, с вероятностью 50% и средним дамагом
Вор - имеет среднюю броню, мало хитов и без резистов. Бъёт физикой с вероятностью 75 % и дамагом выше среднего.
Маг - имеет лёгкую броню, мало хитов, высокие резисты. Бъёт магией с вероятностью 100% и высоким дамагом.
Клерик - имеет среднюю броню, малые резисты, среднее хитов. Бъёт физикой с вероятностью 50% и малым дамагом. Способен вместо атаки исцелять 30% жизни любого члена пати.
Босс - какая-нибудь огненная хрень в пещере. Бьёт по площади физикой со средним дамагом, либо по одной цели - высоким магическим.
Задача - вывести мощности удара и брони каждого члена пати и каждой атаки босса. Количество их хитов, а также проценты резистов, чтобы бой в среднем занял около пяти минут.
Так сойдёт?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Crazy Zey пишет: "Вы хочете песен? Их есть у меня!" (с)
Ну, предположим, стандартная пати - воин, клирик, маг и вор. И пусть они сражаются со своим первым боссом, чтобы не углубляться в вариативность прокачки. Битва пошаговая. Каждый раунд - один удар.
Воин - имеет высокую броню, много хитов и средние резисты. Бьёт физикой, с вероятностью 50% и средним дамагом
Вор - имеет среднюю броню, мало хитов и без резистов. Бъёт физикой с вероятностью 75 % и дамагом выше среднего.
Маг - имеет лёгкую броню, мало хитов, высокие резисты. Бъёт магией с вероятностью 100% и высоким дамагом.
Клерик - имеет среднюю броню, малые резисты, среднее хитов. Бъёт физикой с вероятностью 50% и малым дамагом. Способен вместо атаки исцелять 30% жизни любого члена пати.
Босс - какая-нибудь огненная хрень в пещере. Бьёт по площади физикой со средним дамагом, либо по одной цели - высоким магическим.
Задача - вывести мощности удара и брони каждого члена пати и каждой атаки босса. Количество их хитов, а также проценты резистов, чтобы бой в среднем занял около пяти минут.
Так сойдёт?
Добавим к боссу двух преспешников. Один жирный, со слабостью к магии.
Второй средний по здоровью, без слабостей, способен усыплять одного героя на 2 хода, но усыпление пропадает если он получает урон магией.
Маг также умеет долбить магией в 50% от обычной атаки по двум целям.
Задача: сделать бой сбалансированным, с двумя беспроигрышными тактиками
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Допустим: разбойник и паладин. Так вот, к чему я клоню. Вариантов стратегий тут множество:
- Разбойник попытается приберечь стан к отхилу противника и таким образом выудит защитные заклинания.
- Разбойник может использовать стан и на ранних стадиях, чтобы использовать свои усиления и не отхватить ответный стан (который будет вести к потере времени усиления).
- Тот же разбойник может использовать стан для предотвращения получения урона паладином под усилением.
И это только варианты разбойника использования стана. А есть еще свои защитные способности, повторный уход в тень, прерывание произнесения заклинаний, паралич... И это уже не говоря о паладине.
Так собственно и сам вопрос - насколько целесообразно строить математическую модель по (хотя бы) данной битве? Или в данном случае лучше действительно прикидывать на глаз?
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Наша братия геймдизов-математиков остаются невоспетыми.
EvilCat, специально для тебя. На музыку "Земля в иллюминаторе"
Геймдизы-математики, геймдизы-математики,
Вот зрелище для северных широт!
Геймдизов-математиков, геймдизов-математиков
Не знает ни один юнец-задрот.
Таблицы тем не менее, таблицы тем не менее
Полезности прибавили своей,
Но мапперы, дизайнеры, пиарщики и прогеры
Не стали относиться к ним теплей...
Но снится им не близкий срок релизов,
Не фичи, корованы, предпоказ,
А снится им закрытое окошко
И страшный, перекошенный баланс.
Графонием и музыкой, сюжетом и прокачкою
Задрота все труднее совратить
Ведь хрень непроходимую, пусть даже и красивую,
От нудных битв захочется закрыть.
Поэтому так важен стал, поэтому так важен стал
Тот, для кого баланс - не страшный сон.
И мапперы, дизайнеры, пиарщики и прогеры
Должны запомнить, как же важен он.
Но снится им лишь близкий срок релизов,
И фичи, корованы, предпоказ,
Лишь математик помнит об окошке
И правит перекошенный баланс...
vk.com/sando_rpgmaker - пустая болтовня (приходите)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Причем стеной текста, видимо хобби такое.
"Видимо сценарий и графику делали программисты" хочется сказать )
А судьи кто... а я вам отвечу.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А рассматривать абстрактные случаи и примеры, конечно, интересно, но в меру бесполезно.
Но это задача тяжелая и долгая, думается сравнимо с написанием небольшой игры.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Что я успела проверить по сути задачи.
- Если считать, что броня абсолютная - то есть вычитается из урона - то, совершенно неудивительно, задча победы босса упирается в кач. Потому что высокая броня не позволяет нанести урона вообще или же совершенно незначительное количество урона (это верно как со стороны героев монстрам, так и со стороны монстров героям). Соответственно, каждое следующее очко брони имеет больший эффект, чем предыдущее: например, если урон врага 30, а у тебя 20 брони - то +1 брони уменьшит текущий получаемый урон на 10% (с 10 до 9), а если твоя броня достигла 29 - следующее очко уменьшит урон на 100% (с 1 до 0). Это вполне нормальная боевая система, но тогда либо персонажи должны заходить в бой со строго предсказуемыми боевыми параметрами (без вариации! вот тебе и ролевая игра), либо баланс отдельно взятой битвы не имеет смысла.
- Кроме того, не хватает одного входящего условия: сколько именно тактик должно годиться против босса и какова должна быть свобода действий для персонажа? Например, в некоторых играх фактически надо вычислить одну тактику, в других - есть несколько заранее задуманных разработчиками тактик, а третьих боевая система построена так, что разработчик не должен продумывать тактику каждой отдельной битвы, он просто даёт игроку инструменты.
Если кто-либо, у кого больше свободного времени, предложит своё решение задачи, это будет хорошим дополнением к статье %)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Согласен, что вопрос может показаться странным, но хочется игру сделать хорошей, поэтому стараюсь просчитывать все варианты.
Мои законченные игры:
1. "Судоку" - reksarych.itch.io/sudoku.
Наша группа в ВК: vk.com/bratstvo_rasskazchikov_istorij .
Моя игровая и околоигровая коллекция
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
