Баланс билдов.
Техническая часть.
В какой-то игрульке у нас были персонажи со статами. На входе у игрока есть всего 4 параметра, по которым ему нужно каким-то образом распределить ачьки: сила ловкость и хуёвкость. На выходе же было больше десяти разных характеристик, которые аффектятся этим распределением — там всякая меткость, скорость, размер бицухи и прочее. Идея была в том, что бы при радикальном распределении всех очков в один параметр характеристики персонажа получались сосунковыми, а при равномерном размазывании поинтов билд персонажа получался хорошим и крепким. Опционально было б круто ещё сделать какую-нибудь секретную пропорцию прокачки, при которой билд получается имбовым, но которую можно нащупать только методом градиентного спуска по пробам и ошибкам. И последнее важное требование: опорные распределения должен задать геймдизайнер. Пример внизу, зелёное заполняет геймдиз на своё усмотрение, белое должен расчитывать мой инструмент.
Сначала мы чего-то мыкались да пыкались, пробовали да тестили, и всё получалось неустойчиво со всякими сраными побочками. Характеристики уходили в отрицательные значения, небольшое изменение входа приводило к большому изменению выхода и т.д. Из неудачных попыток я помню только линейную регрессию, остальные нерабочие варианты благополучно забыл. В некоторый момент мы с пацанами додумались сделать визуальную модельку такой системы. Увидев это визуально, я воскликнул: «Ебать меня ржавым якорем! Да это же барицентрическая залупа!» И в тот же день задачка была успешно закрыта, реализация заняла несколько часов. Матчасть и вовсе несколько минут, львиная возня произошла с API гугл-табличек.
Игорь распределил свои поинты, игре нужно найти три ближайших опорных распределения. Получился локальный барицентрический базис. Далее в этом базисе нужно узнать координаты игорьковского билда — это будут барицентрические веса. И далее эти веса умножить на соответствующие им статы и сложить. Если ни хера не понятно, то вот так понятно:
Корокто про возню с API гугл-табличек:
Гуманитарная часть.
Это был первый раз, когда я делал математичное не CG. В будущем оказалось, что не последний, ещё пару раз нужно было выдумывать какие-то кастомные геймдизные инструменты, и в основном это было интересно. На следующих геймдизных задачках я заметил одну фундаментальную разницу между прогерством и дизайнерством: инстант результат и отложенный результат. В разработке результат работы можно оценить сразу же после нажатия кнопочки плэй; в дизайне же результат видно через три дня, тридцать дней, девяносто дней, в общем через много нажатий кнопочки плэй. И как следствие, дебаг разработки суть одно прямолинейное рассуждение, дебаг дизайна — какой-то ебучий бэк пропагейшен.
От этой системы прокачки отказались в пользу я хз чего, я даже не знал, для какой это игры задумывалось. Да и мне оно было собственно до пизды.