001Наутилус — механоид 8 поколения. Вздор? Сейчас я выверну наизнанку лайфхаки от разрабочиков и расскажу, что он еще и летает на грузовой платформе.
Есть скрипт \Механоиды II\Data\Scripts\Locations\L11\
loc11.src Там, внутри функции «вход на локацию» прописано появление двух групп механоидов, DERCINT — механоид 4 поколения и
TS_GRP_NAUTILUS, механоид 8 поколения.
оригинал loc11.src с моими комментариями
Код:
#include "include\AIM.src"
void proc OnEnterLocation(char item) // Вызывается, Когда игрок входит на локацию
{
//SetPelengPoint("B_L11_ARLINGLAB"); // установить пеленг на лабараторию Арлингов (тест)
if (!GetVar("AIM.NAU.CREATED")) // Если значение переменной "AIM.NAU.CREATED" не положительное (отрицательное или отсутствует или ровно нулю), то
{
CreateGroup("TS_GRP_NAUTILUS");; // Создать группу "TS_GRP_NAUTILUS" - Наутилуса
SetMechGeneration("TS_GRP_NAUTILUS", 8); // Присвоить группе "TS_GRP_NAUTILUS" поколения 8
SetVar("AIM.NAU.CREATED"); // Установить переменной "AIM.NAU.CREATED" положительное значение (скорее всего 1)
//SetPelengPoint("TS_GRP_NAUTILUS"); // установить пеленг на Наутилуса (тест)
CreateGroup("DERCINT"); // Создать группу "DERCINT"
SetMechGeneration("DERCINT", 4); // Присвоить группе "DERCINT" поколения 4
}
}
void proc OnHour(char locID) // Вызывается Каждый внутриигровой час
{
ThrowGoodsOnRoad("TOV_FUNGUS", 10); // Раскидать 10 единиц товара "грибы" возле дорог NPC
}
Вот так новость. Дальше — интереснее. В редакторе конфигураций можно найти запись Наутилус CFG_NAUTILUS
Грузовая платформа, Сотовая броня, простые щиты 1 уровня, мощнейший коллапс-реактор и самый простой ионный двигатель для низкой скорости. Вооружение нет, оборудования нет.
Вложение:
CFG_NAUTILUS.PNG [ 22.75 КБ | Просмотров: 6826 ]
Скрипт \Механоиды II\Data\Scripts\Locations\L11\
Nautilus.srcСодержит OnTalk - «общение механоидов между глайдерами». Вот так внутри этой функции нам Наутилус шлет пламенный привет.
Оригинальный Nautilus.src с моими комментариями
Код:
#include "include\AIM.cpp"
void proc OnTalk(char gliderID) // "Общение" механоидов на глайдерах - когда один отправляет другому привет или любое другое сообщение
{
if (!GetItem("TS_ITEM3")) // Если у игрока нету Квазиментального диффузора
DamageGlider("PLAYER", 10000000); // Наносим гладйеру игрока 10 млн урона, что призведет до уничтожения глайдера и, следовательно, конца игры
// * если это первое общение, то * (комментарий разработчика от 2005)
if (GetVar("AIM.NET.NAU.2") && !GetVar("AIM.NET.NAU.3"))
{
Dialog("TS_L11_TEXT2_3"); // Диалогое окно "<color=orange>Ментальный диффузор активирован. Поглощены аномальные импульсы.<color>"
SetQuestPart("TS_L11_J_Q1_1", "TS_L11_J_TEXT2_3"); // Переход на следующий этап квеста
SetVar("AIM.NET.NAU.3"); // Установить значение переменной (второй аргумент не указан, исходя из include/AIM.cpp он будет равен единице = 1)
}
// * Второе общение с Наутилусом после синигр * (комментарий разработчика от 2005)
if (GetVar("AIM.NET.SIN.3") && !GetVar("AIM.NET.SIN.4"))
{
Dialog("TS_L11_TEXT3_2"); // Показать диалогое окно с текстом "<color=orange>Ментальный диффузор активирован. Поглощаются аномальные импульсы.<p>Коммуникатор активирован. Сообщение передано.<color>"
SetVar("AIM.NET.SIN.4"); // Установить значение переменной "AIM.NET.SIN.4" (равной 1)
SetQuestPart("TS_L11_J_Q1_6", "TS_L11_J_TEXT3_1"); // Установить часть квеста (переход на следующую часть квеста)
SetTimer("OnDestroyEffector", 24); // Задать таймер чтобы через 24 внутриигровых часа вызвать функцию OnDestroyEffector
SetTimer("OnHour", 1); // Задать таймер чтобы через 1 внутриигровой час вызвать функцию OnHour
SetVar("AIM.NAU.HOUR", 24); // Установить значение переменной "AIM.NAU.HOUR" равной 24
GliderInvis(gliderID, 1); // Сделать глайдер неивидимым
}
}
void proc OnDestroyEffector() // По логике эта функция вызовется лишь один раз, спустя 24 внутриигровых часа после второго общения с Наутилусом
{
SetVar("AIM.NAU.DESTROY"); // Установить положительное значение переменной "AIM.NAU.DESTROY" = 1 - (за кадром) она обозначает что Наутилус пробил контурное поле в секторе Болот для Синигр
}
void proc OnHour()
{
int iHour; // целое число iHour
iHour = GetVar("AIM.NAU.HOUR")-1; // установить значение iHour как значение переменной "AIM.NAU.HOUR" минус один
if (iHour<0) iHour = 0; // если iHour меньше нуля, то установить значение iHour равным 0
SetVar("AIM.NAU.HOUR", iHour); // Установить значение "AIM.NAU.HOUR" равнім числу iHour
if (iHour) // Если iHour (если значение iHour положительное)
SetTimer("OnHour", 1); // Установить таймер, чтобы вызвать функцию "OnHour" через один внутриигровой час
}
А теперь объяснение этому странному явлению и что за бред сейчас вы прочитали. Давайте поставим себя на место разработчика в то время, когда технически реализовывали Наутилуса в игре. У нас уже есть готовая механика «механоидов и глайдеров». Наша задача: добавить какое-то существо, которое умеет медленно передвигаться по одному сектору, оно должно выделяться особым цветом на сенсоре, при приближении к игроку если у игрока нету особого квестового предмета — уничтожить глайдер игрока, если предмет есть — то пообщаться с этим существом следуя логики квестов. Существо невозможно увидить в игре.
Приблизительно так выглядит техническо-логическая часть реализации Наутилуса. И тут же возникает вопрос, а зачем нам, как разработчику создавать новый тип сущности, разрабатывать другие модели поведения и т. п. если можно сделать намного проще: делаем механоида на медленном глайдере и сверхпрочной броней без оружия и, главное, делаем его невидимым. Механики поведения и внедрения в игру уже готовы. Осталось добавить новый цвет на сенсоре… ммм, мы там сделали так для 5 поколения фиолетовый, а для условно 8 поколения думаю сойдет бирюзового цвета. И еще с радаров его убрать не забудьте, с миникарты.
Вот в целом и всё, я не могу претендовать на истинность, но думаю что приблизительно таким лайфхаком была решена техническая задача разработки Наутилуса в игре. А игроки, кстати, встречали в игре очень редко такое явление, что могли подобрать механоида по имени Наутилус. В этой ситуации как никогда подходит фраза: «Не баг, а ФИЧА!».
Да, и еще самые хитрые, как я, после того как узнав об этом со скриптов — установил пеленг на Наутилуса и пытался подорвать глайдер Наутилуса минами. (Пеленг установил отредактировав скрипты).
Я узнал об этом очень давно, но решил рассказать это здесь и сейчас, потому-что возникла идея создать мод, в котором мы примем на себя роль Наутилуса. Как и что с этого выйдет, читайте дальше.
Да, и главное не задумываться о мысли и допускать что Наутилус это механоид 8 поколения, что он существовал до 5 поколения и разрушил базу в секторе Болот, что Супер что-то знает о Наутилусе и скрывает или что его создали Арлинги. Или что 8 поколение — это секретный посыл от разработчиков. Это вас сведет с ума.