Неделя 16 (январь 4): Заточка.
Следующим шагом после добавления случайных парметров является добавление изменяемых игроком параметров. В основном речь про заточку. Я сейчас не уверен будут ли в игре другие способы улучшать предметы кроме заточки и установки камней. Но с камнями все совсем просто — это тот же инвентарь что и у персонажа (и то, надо как-то отделить два одинаковых предмета с заполненными и пустыми слотами). А вот заточка — дело довольно хитрое.
Во-первых, заточка все-таки не совсем заточка, а скорее какой-то фьюжн. Все-таки заточка — это кода предмет может развалиться в процессе улучшения. Для меня этот вариант не подходит, так как игрок будет точить редкие шмотки с особым набором бонусов (редкость помноженная на разнообразие бонусов) и их потеря в результате заточки будет настоящей трагедией, которую лично я не пережил бы.
С другой стороны пока у игры нет вообще никакого баланса, не очень понятно будет ли это действительно страшно или нет. Например в том же Hastle Castle шмотки просто устаревают и первые пол года игры нет особого резона бороться за них. Но ощущение все равно не приятное, а главное значительно сужен магазин: ну нельзя продавать даже за кристаллы предметы, которые могут устареть (хотя Hastle Castle их продают) — у меня был очень неприятный опыт с таким отношением к магазину. Я занес в игре 1.5 тысячи рублей и забросил ее через пол часа: купленные шмотки так продвинули меня по игре, что моментально устарели.
***
В любом случае в качестве ингредиента для улучшения предмета используются другие предметы этого же базового ресурса типа еды, дерева, железа и т.п. В итоге можно улучшить пирог просто влив в него стейк и так далее. Звучит немного глупо, но и у логики должны быть какие-то пределы. Это магия!
Так у предметов появился параметр типа базового ресурса и значение ценности, которое кстати говоря генерируется вместе с редкостью предмета: чем выше редкость, тем выше ценность.
В общем, идея баланса заточки основан на том, что чтобы получить предмет высокого уровня в него надо влить ооооочень много всякого говна. Сотый уровень у меня пока имеет значение опыта в виде девятнадцатизначного числа. Это перебор, конечно, но мне надо было с чего-то начать. И все это нужно будет крафтить, где-то хранить, и не сливать на первый попавшийся под руку квест.
***
Во-вторых, чисто интерфейсно заточка оказалась довольно сложной штукой. С одной стороны это просто экран в котором игрок выбирает что точить и что слить. С другой стороны надо как-то отделить затачиваемый предмет, от хранимых в инвентаре, чтобы игрок случайно не влил экземпляр предмета в самого себя.
Решил я эту проблему на мой вкус совершенно гениально: я создал новый вид складов — интерфейсные. Переносом предметов из общеигрового склада в склады заточки и слива занимается ровно тот же механизм, что переносит предметы в слоты персонажа или добавляет предметы при крафте. Работает он хорошо и надежно. Особенно после того как я его переписал на прошлой неделе почти с нуля ради склада складов.
Так же понадобилось немного модифицировать код панельки, изображающей предмет в списке инвентаря, чтобы она смогла отображать предмет, находящийся в списке на слив. Но в целом моя игра уже обросла жиром надежных систем, которые в худшем случае надо немного модифицировать, не меняя общую логику: склады, предметы, крафт, интерфейс, инвентарь и прочее. Горжусь собой.
***
Отдельным развлечением оказалось создание таблицы «опыта» для предметов. Во-первых, опыт нельзя исчислять обыкновенным интом, который как известно позволяет хранить значения от -2,147,483,647 до 2,147,483,647. С моей неправильной формулой он заканчивался в районе 45 уровня. Для хранения 19значного числа нужен лонг (вплоть до 9,223,372,036,854,775,807 как раз хватает), позволяющий хранить более значительные цифры.
Во-вторых, оказалось что мой плагин для загрузки данных из конфигов в гуглдоках, QuickSheet, не умеет загружать лонги. То есть нужно генерировать таблицу опыта внутри Юнити. И тут снова на помощь пришел Odin который позволяет модифицировать интерфейс отображения объекта в инспекторе без создания отдельного кода эдитора. Я создал простенький scriptable object с кнопкой, которая генерировала нужный мне набор значений.
Ну и наверное не лишним будет очередной раз сказать, что работа эта совершенно бесполезная и на моем этапе развития вполне хватило бы инта и 10 уровней заточки.
На видео с некоторыми глюками видна работа механизма заточки.
В игре все больше разных механик, но игры из этого пока еще не получается.