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