Основная проблема генератора вещей для RPG
Недавно в одном из комментариев я упомянул, что между делом занимаюсь разработкой некоторых РПГ механик, которым в свое время не нашлось места (или времени на проработку) в моем первом проекте Dark Plane.
В частности, это диалоговый модуль, плавно перетекающий в систему квестов. Выглядит он примерно так:
Несмотря на то, что модуль писался "под себя", по итогу он получился максимально юзер-френдли для разработчиков. Если совсем просто, то вызывается один единственный метод, в котором параметрами передается кто и что говорит, и в каких обстоятельствах. Прошлой игре, на мой взгляд, сильно не хватало сюжета. Если вдруг я решусь на продолжение, сюжетный инструмент уже будет под рукой :)
Но в этот раз я бы хотел рассказать про недавно законченный генератор вещей. Опять же, из опыта прошлого проекта я вынес для себя, что абсолютно весь ручной баланс можно и нужно переводить к процедурной генерации. Особенно в условиях разработки в одну каску. Просчитывать баланс для 400 единиц экипировки было больно, и при этом в игре все равно чувствовалась недостача разнообразия предметов. Мой новый генератор вещей призван решить этот вопрос.
Давайте я сразу покажу как выглядят сгенерированные вещи, а тем, кому не хватит видео для понимания, расскажу немного подробнее.
Префиксы, постфиксы и градации качества. Чувствуете, запахло Дьябло 2? :) Кстати, не обращайте внимание на графику, много где это заглушки.
Так вот. Я держал в голове необходимость именно автоматической генерации дополнительных характеристик, таких как +сила, +интеллект итд. В первую очередь, для этого был создан ряд, назовем их так, "базовых вещей", содержащих тип, иконку и привязку к мешу. Ни основных статов, ни вторичных. Например, Куртка. Или Сапоги.
По задумке, в момент убийства монстра вызывается метод, в обязательном порядке принимающий только один параметр - уровень этого монстра. Остальное генерируется по формулам, зависящим от уровня и предустановленных коэффициентов. Качество предмета, к какому слоту экипировки он относится, количество вторичных статов, внутренний гир скор и прочие. Конечно, в любой момент генерируемые параметры можно перехватить, если сюжет требует выдать игроку конкретную вещь с конкретными характеристиками.
На бумаге все работает. Да и в билде тоже. Все, кроме одного.
Русских, мать их, названий предметов!
По задумке опять же, я хотел давать префиксы и постфиксы названиям предметов в зависимости от их качества и вторичных характеристик. Таким образом, условная Куртка низкого качества со статами на +сила и +крит превращалась бы в Потрепанную Могучую Куртку Внезапной Смерти (да, я могу в названия >_<). И все бы хорошо, но внезапно выяснилось, что прилагательные в русском языке умеют склоняться! Это я выяснил, запустив билд и увидев предметы типа Могучий Носки или Простой Одеяние.
Не буду утомлять долгим описанием поиска выхода из ситуации. Скажу лишь, что изначально планировалось в каждую (лол) базовую вещь добавить поля, в которых вручную силами одного ребенка за вкусняшки будут добавляться все словоформы (!) всех прилагательных (!!) в двух формах префикс-постфикс в зависимости от рода и числа основного названия базовой вещи. Говоря проще, для Куртка это были бы Могучая, Новая, Старая, Фамильная итд. Для Штаны это Могучие, Новые, Старые итд. Это охрененная и дурная работа.
В общем, бобик сдох уже на второй базовой вещи. Оказалось, что научить программу самостоятельно склонять изначальную форму прилагательного в соответствие правил русского языка будет проще, в первую очередь для психики разработчика. Что и было сделано буквально за одну ночь. Теперь в базовой вещи просто ставится галка напротив верной формы склонения, а программа сама выбирает правильные формы из общего списка:
На этом пока что все. Если есть вопросы - задавайте :)
Лига Разработчиков Видеоигр
5.4K постов21.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"