Аврора, вопреки моим мрачным ожиданиям, потратила деньги с умом, вложив их в себя и свое творчество. Обновила свой рабочий граф-планшет, прикупила навороченный муговский синтезатор для хобби, добавила вещей в гардероб, а внушительный остаток просто оставила «на развод», как она сама пояснила с серьезным лицом.
Но вне зависимости от способа реализации капитала, выданная премия оказала на всех один общий психологический эффект. Мои сотруднички почуяли вкус крови… Кхм, вкус настоящего бабла, так скажем. Это некисло так повысило общую трудоспособность и мотивацию коллективно долбить золото в шахтах геймдева. Теперь все в студии, кроме меня и Дэвида (мы-то и так знали), имели осязаемое представление о реальных деньгах, которые может приносить наш общий бизнес, если выкладываться на сто процентов. Как говорил мой дед — лучше один раз пощупать, чем сто раз представить ее в мечтах. Или он это мне про женскую грудь говорил… В прочем не важно.
Важно что усвоил это правило лидерства еще в своей прошлой жизни, наблюдая как выгорают реально хорошие сотрудники, так и не получив даже сраной грамоты, после того как их проект срубил бюджет небольшой страны. Поэтому-то я и не поскупился, выдав ребятам такие жирные бонусы на старте. Мог бы выписать и больше, да вот только не стоит забывать, что все они и так жили и питались в моем доме за мой счет. Так что, считай, скрытые остатки их премий пошли на оплату счетов и погашение коммунальных платежей нашей уютной избушки.
Как бы то ни было, работа закипела с удвоенной силой. За следующие три дня, мы завершили всю техническую часть Майнкрафта. Больше всего пришлось повозиться с генерацией объектов и структур (до этого сделали биомы, но без деревьев и деревень и данжей — они были выполнены в качестве ассетов). Чтобы они не спавнились друг на дружке или наоборот. Вообще — спавнились… Хотя бы.
С деревьями, цветочками, кактусами и прочей флорой мы расправились быстро. Логика тут была проста. Для спавна, например, дубка. Алгоритм раздавал всем биомам в игре попытки спавна. Лесу — много попыток. Лугу — меньше. Пустыне — вообще зиро. Потом находил нужную высоту (блок поверхности), проверял земля это или не земля. Если была земля, то проверялось — достаточно ли места для кроны? И только потом спавнилось дерево. В целом детская логика, даже Кора поняла.
Следом у нас с Коулом и Эйдосом пошла возня с одиночными структурами — данжами, домиками ведьм, статуями жителей. Тут, дабы избежать эффекта плотненькой застройки, мы поделили мир игры на условные регионы, условно. В каждом таком регионе, для конкретного типа строения выделялась одна точка. Потом алгоритм проверял для этой точки кучу параметров: подходит ли биом, достаточно ли ровная поверхность, вместится ли вообще туда билдинг бокс постройки, не пересекается ли она с другими структурами, подходит ли высота, есть ли место для входа или дороги? Если проверка заваливалась хоть по одному параметру, то постройка не строилась.
Душно? А это мы еще к деревням не приступили. Но благо там все было относительно просто. Так как деревня это не единая структура а считай набор лего, то мы просто определяли место спавна стартового элемента, коим у нас выступал колодец и вот от него уже алгоритм начинал строить деревню, опираясь на множественные проверки и силу рандома!
Настоящие проблемы начались, когда мы приступили к генерации структур внутри пещер. Тут генератор уже не мог нормально определять где и как ему ставить элементы. Ибо просто не мог понять почему поверхность у него находится под землей. Поэтому пришлось заново учить генератор, чтобы он мог распознавать пустоты внутри камня используя три измерения. После чего логика у алгоритма выглядела примерно так.
Нужно заспавнить объект на полу?
текущая клетка — воздух;
клетка снизу — твёрдый блок;
над объектом достаточно свободного места.
Нужно заспавнить объект на потолке? Например свисающий корень.
текущая клетка — воздух;
клетка сверху — камень;
снизу свободное пространство.
Дальше мы научили генератор самостоятельно определять места для подземных данжей, убив несколько часов на прописывание условий, вроде — большая часть объема должна быть камнем, который можно вырезать. Или — нельзя выходить за нижнюю границу мира.
По итогу мы получили полноценный мир, с деревьями и домиками. А весь остальной коллектив получил нервный тик, который пробуждался каждый раз, когда мы с Коулом начинали обсуждать — как лучше реализовать то или иное решение по генерации.
За следующие несколько дней, пока я ковырялся с лаунчером, Коул наконец-то завершил работу над местным аналогом Херобрина.