/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
/******************************************************************************
*
* FILE
* Mission06.cpp
*
* DESCRIPTION
* Mission 6 script
*
* PROGRAMMER
* David Shuman
*
* VERSION INFO
* $Author: Darren_k $
* $Revision: 136 $
* $Modtime: 2/05/02 4:18p $
* $Archive: /Commando/Code/Scripts/Mission06.cpp $
*
******************************************************************************/
#include "scripts.h"
#include "toolkit.h"
#include "mission6.h"
#include
#include
// ************************* M06B
// Objective Controller
DECLARE_SCRIPT(M06_Objective_Controller, "") // 100018
{
int mendoza_id;
bool accomplished_609;
enum {HAVOCS_SCRIPT, M06_INITIAL_APACHES};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( mendoza_id, 1 );
SAVE_VARIABLE( accomplished_609, 2 );
}
void Created(GameObject * obj)
{
// Background Music
Commands->Set_Background_Music ("06-onyourfeet.mp3");
// Scale their sight and hearing back
// Commands->Scale_AI_Awareness(.5f, .5f );
Commands->Start_Timer (obj, this, 1.0f, HAVOCS_SCRIPT);
Commands->Enable_Hibernation(obj, false);
mendoza_id = 0;
accomplished_609 = false;
// EVA - Give me a position on the scientists.\n
const char *conv_name = ("M06_CON059");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300601);
Commands->Monitor_Conversation (obj, conv_id);
Add_An_Objective(605);
Add_An_Objective(607);
Add_An_Objective(608);
// Add_An_Objective(609);
// Add_An_Objective(610);
Commands->Start_Timer (obj, this, 6.0f, M06_INITIAL_APACHES);
}
void Add_An_Objective(int id)
{
GameObject *object;
switch (id)
{
// Hack War Room Computer
case 601:
{
Commands->Add_Objective(601, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M06_02, NULL, IDS_Enc_Obj_Primary_M06_02);
object = Commands->Find_Object(106952);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(601, object);
Commands->Set_Objective_HUD_Info_Position(601, 90.0f, "POG_M06_1_03.tga", IDS_POG_HACK, Commands->Get_Position (object));
}
}
break;
// Rescue Scientists
case 603:
{
Commands->Add_Objective(603, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M06_01, NULL, IDS_Enc_Obj_Primary_M06_01);
object = Commands->Find_Object(101010);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(603, object);
Commands->Set_Objective_HUD_Info_Position(603, 90.0f, "POG_M06_1_04.tga", IDS_POG_RESCUE, Commands->Get_Position (object));
}
}
break;
// Eliminate Mendoza
case 604:
{
Commands->Add_Objective(604, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M06_04, NULL, IDS_Enc_Obj_Primary_M06_04);
// object = Commands->Find_Object(mendoza_id);
object = Commands->Find_Object(108275);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(604, object);
Commands->Set_Objective_HUD_Info_Position(604, 90.0f, "POG_M06_1_01.tga", IDS_POG_ELIMINATE, Commands->Get_Position (object));
}
}
break;
// Rescue Resistance
case 605:
{
Commands->Add_Objective(605, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, IDS_Enc_ObjTitle_Hidden_M06_02, NULL, IDS_Enc_Obj_Hidden_M06_02);
object = Commands->Find_Object(101016);
}
break;
// Release GDI prisoner
case 607:
{
Commands->Add_Objective(607, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, IDS_Enc_ObjTitle_Hidden_M06_03, NULL, IDS_Enc_Obj_Hidden_M06_03);
}
break;
// Plunder Raveshaw's hidden cache
case 608:
{
Commands->Add_Objective(608, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, IDS_Enc_ObjTitle_Hidden_M06_04, NULL, IDS_Enc_Obj_Hidden_M06_04);
}
break;
// Deactivate alarm system
case 609:
{
Commands->Add_Objective(609, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M06_01, NULL, IDS_Enc_Obj_Hidden_M06_01);
Vector3 star_pos = Commands->Get_Position(STAR);
Vector3 greenhouse_alarm = Commands->Get_Position(Commands->Find_Object(101548));
Vector3 shower_alarm = Commands->Get_Position(Commands->Find_Object(101549));
float star_greenhouse = Commands->Get_Distance(star_pos, greenhouse_alarm);
float star_shower = Commands->Get_Distance(star_pos, shower_alarm);
if(star_greenhouse == (WWMath::Min(star_greenhouse, star_shower)))
{
object = Commands->Find_Object(101548);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(609, object);
Commands->Set_Objective_HUD_Info_Position(609, 90.0f, "POG_M08_2_02.tga", IDS_POG_DISABLE, Commands->Get_Position (object));
}
}
else
{
object = Commands->Find_Object(101549);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(609, object);
Commands->Set_Objective_HUD_Info_Position(609, 90.0f, "POG_M08_2_02.tga", IDS_POG_DISABLE, Commands->Get_Position (object));
}
}
}
break;
// Alarm State: Stand Down
case 610:
{
Commands->Add_Objective(610, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_HIDDEN, 1000, NULL);
}
break;
// Escape Chateau with Dr. Sydney Mobius
case 611:
{
Commands->Set_HUD_Help_Text ( IDS_M11DSGN_DSGN1007I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
Commands->Add_Objective(611, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M06_03, NULL, IDS_Enc_Obj_Primary_M06_03);
object = Commands->Find_Object(101527);
if(object)
{
Commands->Set_Objective_Radar_Blip_Object(611, object);
Commands->Set_Objective_HUD_Info_Position(611, 90.0f, "POG_M06_1_05.tga", IDS_POG_ESCORT, Commands->Get_Position (object));
}
}
break;
}
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_MENDOZA_ID)
{
mendoza_id = param;
}
if(type == 666 && param == 666)
{
Commands->Start_Timer (obj, this, 2.0f, M06_DEAD_HAVOC);
}
if(type > 611)
{
return;
}
switch (param)
{
case 1:
{
if(type == 609 && accomplished_609)
{
return;
}
Commands->Clear_Radar_Marker (type);
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_ACCOMPLISHED);
if(type == 604)
{
Commands->Mission_Complete ( true );
}
if(type == 609)
{
accomplished_609 = true;
}
}
break;
case 2:
{
Commands->Clear_Radar_Marker (type);
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_FAILED);
if(type == 611)
{
Commands->Mission_Complete ( false );
}
}
break;
case 3:
Add_An_Objective(type);
break;
case 4:
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_PENDING);
break;
case 5:
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_HIDDEN);
break;
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
if(action_id == 300601 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
{
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 601, 3, 0.0f);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if(timer_id == HAVOCS_SCRIPT)
{
// Commands->Attach_Script(STAR, "M06_Havoc_DLS", "");
}
if(timer_id == M06_DEAD_HAVOC)
{
// Commands->Attach_Script(STAR, "M06_Havoc_DLS", "");
}
if(timer_id == M06_INITIAL_APACHES)
{
// Initial Apaches
GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
Commands->Attach_Script(controller1, "Test_Cinematic", "X6A_Apache_01.txt");
GameObject *controller2 = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
Commands->Attach_Script(controller2, "Test_Cinematic", "X6A_Apache_02.txt");
}
}
};
// WarRoom Computer
DECLARE_SCRIPT(M06_WarRoom_Computer, "")
{
bool already_poked;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_poked, 1 );
}
void Created (GameObject * obj)
{
already_poked = false;
Commands->Enable_HUD_Pokable_Indicator( obj, true );
}
void Poked(GameObject * obj, GameObject * poker)
{
if (Commands->Is_A_Star(poker) && (!already_poked))
{
// Data decryption complete. Internal computer systems indicate Dr. Ignatio Mobius is located beneath the Chateau. Access is gained through the dining hall.\n
const char *conv_name = ("M06_CON001");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(NULL, conv_id, true, true);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300603);
Commands->Monitor_Conversation (obj, conv_id);
already_poked = true;
Commands->Enable_HUD_Pokable_Indicator( obj, false );
Commands->Create_Object ("Level_03_Keycard", Vector3 (35.263F, 16.432F, 13.382F));
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 300603 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
{
// New Primary Mission Objective: Evacuate Doctors' Ignatio and Sydney Mobius. Basement, NE section. Requires level 2 security keycard.
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 601, 1, 0.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 603, 3, 1.0f);
}
}
};
#define SYDNEY_MOVE_TABLE_SIZE ( sizeof(Sydney_Move_Table) / sizeof (Sydney_Move_Table[0]) )
const int Sydney_Move_Table[] =
{
101567,
101569,
101571,
101573,
101575,
101577,
101579,
101581,
101582,
101584,
101586,
101587,
101588
};
DECLARE_SCRIPT(M06_Sydney_Mobius, "")
{
int poke_id;
bool dont_move;
int current_move_loc;
enum {CHECK_DISTANCE = 20, SYDNEY_MOVE_LOC, MOVE_LOC_LOW_PRIORITY};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( poke_id, 1 );
SAVE_VARIABLE( dont_move, 2 );
SAVE_VARIABLE( current_move_loc, 3 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
Commands->Grant_Key (obj, 3, true);
poke_id = 4;
dont_move = true;
current_move_loc = 0;
}
void Poked(GameObject * obj, GameObject * poker)
{
ActionParamsStruct params;
switch(poke_id)
{
case 1:
{
// \\Hold here. I'll be back.\n
const char *conv_name = ("M06_CON002");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
Commands->Monitor_Conversation (obj, conv_id);
Commands->Set_Innate_Is_Stationary(obj, true);
dont_move = true;
poke_id = 2;
}
break;
case 2:
{
// \\Let's keep moving.\n
const char *conv_name = ("M06_CON003");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
Commands->Monitor_Conversation (obj, conv_id);
Commands->Set_Innate_Is_Stationary(obj, false);
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), SYDNEY_MOVE_LOC);
params.Set_Movement (Commands->Find_Object(Sydney_Move_Table[current_move_loc]), 1.0f, 3.0f);
Commands->Action_Goto (obj, params);
poke_id = 1;
dont_move = false;
}
break;
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_RELOCATE)
{
if(param == 0)
{
Commands->Set_Position (obj, Commands->Get_Position(Commands->Find_Object(107606)));
// Relocate Havoc
Commands->Send_Custom_Event(obj, STAR, M06_RELOCATE, 0, 0.0f);
// Activate MidtroC zone
Commands->Send_Custom_Event (obj, Commands->Find_Object(108285), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Move Sydney to initial move location
Commands->Start_Timer(obj, this, 4.0f, MOVE_LOC_LOW_PRIORITY);
dont_move = false;
// Start the destruction stub sequence
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 100, 100, 2.0f);
// Accomplish mission objective to rescue scientists
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 603, 1, 1.0f);
// Mission objective to escort Sydney out of Chateau
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 611, 3, 2.0f);
// Clost and lock door to lab
// Door to the lab
Commands->Static_Anim_Phys_Goto_Frame ( 1300001615, 0, "DOOR_0.DOOR_0");
}
if(param == 1)
{
Commands->Set_Position (obj, Commands->Get_Position(Commands->Find_Object(108277)));
// Relocate Havoc
Commands->Send_Custom_Event(obj, STAR, M06_RELOCATE, 1, 0.0f);
// Accomplish Mission Objective for Sydney Escort out of Chateau
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 611, 1, 1.0f);
// Relocate Mendoza
//Commands->Send_Custom_Event(obj, Commands->Find_Object(108275), M06_RELOCATE, 0, 0.0f);
//
// Play the boss music
//
// Commands->Set_Background_Music ("Mendoza_Battle1.mp3");
//
// Create and position Mendoza
//
GameObject *mendoza = Commands->Create_Object ("Mendoza Boss", Vector3 (-40.572F, 28.942F, 1.605F));
if (mendoza != NULL) {
Commands->Set_Facing (mendoza, -50.0F);
}
// GameObject *mendoza = Commands->Create_Object ("Nod_FlameThrower_3Boss", Vector3 (-40.572F, 28.942F, 1.605F));
// if (mendoza != NULL) {
// Commands->Set_Facing (mendoza, -50.0F);
// Commands->Attach_Script(mendoza, "M06_Mendoza", "");
// }
// Mission objective to defeat Mendoza
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 604, 3, 0.0f);
// Make Sydney indestructible
Commands->Set_Shield_Strength (obj, 100 );
Commands->Set_Shield_Type (obj, "Blamo");
//
// Create logical sound to remove all other players in fight with Mendoza
//
Commands->Create_Logical_Sound(obj, M06_CLEAR_FOR_MENDOZA, Commands->Get_Position(obj), 2500.0f);
}
}
if(type == M06_MOVE_SYDNEY && !dont_move)
{
current_move_loc = param;
if(current_move_loc == 12)
{
poke_id = 4;
}
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), SYDNEY_MOVE_LOC);
params.Set_Movement (Commands->Find_Object(Sydney_Move_Table[current_move_loc]), 1.0f, 3.0f);
Commands->Action_Goto (obj, params);
}
}
void Damaged( GameObject * obj, GameObject * damager, float amount )
{
// Commands->Set_Health(obj, Commands->Get_Max_Health(obj));
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == SYDNEY_MOVE_LOC && reason == ACTION_COMPLETE_NORMAL)
{
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 4.0f);
}
if((action_id == SYDNEY_MOVE_LOC) && (action_id != Commands->Get_Action_ID(obj)) && (!Commands->Is_Performing_Pathfind_Action(obj)) && (reason == ACTION_COMPLETE_LOW_PRIORITY))
{
Commands->Start_Timer(obj, this, 4.0f, MOVE_LOC_LOW_PRIORITY);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == MOVE_LOC_LOW_PRIORITY)
{
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), SYDNEY_MOVE_LOC);
params.Set_Movement (Commands->Find_Object(Sydney_Move_Table[current_move_loc]), 1.0f, 3.0f);
Commands->Action_Goto (obj, params);
}
if(timer_id == CHECK_DISTANCE)
{
Commands->Start_Timer (obj, this, 10.0f, CHECK_DISTANCE);
}
if(timer_id == CHECK_DISTANCE && poke_id == 2)
{
Vector3 star_pos = Commands->Get_Position(STAR);
Vector3 sydney_pos = Commands->Get_Position(obj);
float distance_to_star = Commands->Get_Distance(star_pos, sydney_pos);
if(distance_to_star > 15.0f)
{
// Don't leave me here!\n
const char *conv_name = ("M06_CON005");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
Commands->Monitor_Conversation (obj, conv_id);
}
}
else if(timer_id == CHECK_DISTANCE && poke_id == 1)
{
Vector3 star_pos = Commands->Get_Position(STAR);
Vector3 sydney_pos = Commands->Get_Position(obj);
float distance_to_star = Commands->Get_Distance(star_pos, sydney_pos);
if(distance_to_star > 15.0f)
{
// Wait for me!\n
const char *conv_name = ("M06_CON006");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Set_HUD_Help_Text ( IDS_M11DSGN_DSGN1008I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 611, 2, 0.0f);
}
};
DECLARE_SCRIPT(M06_MidtroB_Explosion_Controller, "Loc0_ID=0:int, Loc1_ID=0:int, Loc2_ID=0:int, Loc3_ID=0:int, Loc4_ID=0:int")
{
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_MIDTRO_EXPLOSION)
{
int explode_loc[5];
explode_loc[0] = Get_Int_Parameter("Loc0_ID");
explode_loc[1] = Get_Int_Parameter("Loc1_ID");
explode_loc[2] = Get_Int_Parameter("Loc2_ID");
explode_loc[3] = Get_Int_Parameter("Loc3_ID");
explode_loc[4] = Get_Int_Parameter("Loc4_ID");
Commands->Create_Explosion("Chateau_Explosions_Twiddler", Commands->Get_Position(Commands->Find_Object(explode_loc[param])));
}
}
};
DECLARE_SCRIPT(M06_Activate_Midtro, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
// Door to the lab
Commands->Static_Anim_Phys_Goto_Frame ( 1300001615, 0, "DOOR_0.DOOR_0");
// Raveshaw/Mendoza door
Commands->Static_Anim_Phys_Goto_Frame ( 1553454, 0, "DOOR_0.DOOR_0");
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
// Open door to lab
Commands->Static_Anim_Phys_Goto_Last_Frame ( 1300001615, "DOOR_0.DOOR_0" );
// Open Raveshaw/Mendoza Door
Commands->Static_Anim_Phys_Goto_Last_Frame ( 1553454, "DOOR_0.DOOR_0" );
already_entered = true;
// Commands->Send_Custom_Event (obj, Commands->Find_Object(101010), 100, 100, 0.0f);
Vector3 havoc_loc = Commands->Get_Position (STAR);
havoc_loc.Z += 7.0f;
Commands->Set_Position (STAR, havoc_loc );
GameObject * cinematic_obj = Commands->Create_Object ( "Invisible_Object", Vector3(0.0f, 0.0f, 0.0f));
Commands->Attach_Script(cinematic_obj, "Test_Cinematic", "X6B_MIDTRO.txt");
// Grant armor increase medal
Commands->Create_Object ( "POW_Medal_Health", Vector3(-1.472f, 31.216f, -9.000f));
}
}
};
DECLARE_SCRIPT(M06_Destruction_Stub, "")
{
enum {SHAKE_TIMER};
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == 100 && param == 100)
{
// Activate destruction zones
Commands->Send_Custom_Event(obj, Commands->Find_Object(104312), M06_CHATEAU_COLLAPSE, 1, 0.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(105635), M06_CHATEAU_COLLAPSE, 1, 0.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(105639), M06_CHATEAU_COLLAPSE, 1, 0.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(105640), M06_CHATEAU_COLLAPSE, 1, 0.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(105641), M06_CHATEAU_COLLAPSE, 1, 0.0f);
// Create destruction path blocks
GameObject *crate1 = Commands->Create_Object("X6_Rubble1", Vector3(23.453f, 16.340f, -2.000f));
Commands->Set_Facing( crate1, -65.000f );
GameObject *crate2 = Commands->Create_Object("X6_Rubble2", Vector3(27.086f, 28.569f, -1.454f));
Commands->Set_Facing( crate2, 0.000f );
GameObject *crate3 = Commands->Create_Object("X6_Rubble2", Vector3(25.614f, 33.324f, -0.043f));
Commands->Set_Facing( crate3, 125.000f );
GameObject *crate4 = Commands->Create_Object("X6_Rubble3", Vector3(14.597f, -30.510f, -0.033f));
Commands->Set_Facing( crate4, 140.000f );
GameObject *crate5 = Commands->Create_Object("X6_Rubble4", Vector3(25.079f, 28.012f, -2.007f));
Commands->Set_Facing( crate5, -60.000f );
GameObject *crate6 = Commands->Create_Object("X6_Rubble4", Vector3(26.463f, 27.382f, -2.003f));
Commands->Set_Facing( crate6, 0.000f );
GameObject *crate7 = Commands->Create_Object("X6_Rubble4", Vector3(38.426f, 2.889f, 2.574f));
Commands->Set_Facing( crate7, -35.000f );
GameObject *crate8 = Commands->Create_Object("X6_Rubble4", Vector3(40.258f, 3.442f, 2.798f));
Commands->Set_Facing( crate8, -180.000f );
GameObject *crate9 = Commands->Create_Object("X6_Rubble4", Vector3(9.832f, -35.126f, -0.014f));
Commands->Set_Facing( crate9, 5.000f );
GameObject *crate10 = Commands->Create_Object("X6_Rubble4", Vector3(4.503f, -33.694f, 3.003f));
Commands->Set_Facing( crate10, 150.000f );
GameObject *crate11 = Commands->Create_Object("X6_Rubble4", Vector3(1.179f, -33.281f, -0.042f));
Commands->Set_Facing( crate11, -160.000f );
GameObject *crate12 = Commands->Create_Object("X6_Rubble4", Vector3(-5.442f, -28.292f, 0.003f));
Commands->Set_Facing( crate12, -15.000f );
GameObject *crate13 = Commands->Create_Object("X6_Rubble4", Vector3(-5.423f, -12.960f, 0.000f));
Commands->Set_Facing( crate13, 110.000f );
GameObject *crate14 = Commands->Create_Object("X6_Rubble5", Vector3(8.042f, 27.962f, -0.150f));
Commands->Set_Facing( crate14, 150.000f );
GameObject *crate15 = Commands->Create_Object("X6_Rubble5", Vector3(9.271f, 28.300f, -0.001f));
Commands->Set_Facing( crate15, -5.000f );
GameObject *crate16 = Commands->Create_Object("X6_Rubble5", Vector3(7.208f, 30.813f, 4.400f));
Commands->Set_Facing( crate16, 142.684f );
GameObject *crate17 = Commands->Create_Object("X6_Rubble5", Vector3(5.628f, 29.865f, -0.025f));
Commands->Set_Facing( crate17, 115.000f );
GameObject *crate18 = Commands->Create_Object("X6_Rubble5", Vector3(38.716f, 4.235f, 2.374f));
Commands->Set_Facing( crate18, 50.000f );
GameObject *crate19 = Commands->Create_Object("X6_Rubble5", Vector3(13.124f, -30.323f, 0.000f));
Commands->Set_Facing( crate19, 5.000f );
GameObject *crate20 = Commands->Create_Object("X6_Rubble5", Vector3(8.932f, -34.790f, -0.000f));
Commands->Set_Facing( crate20, -0.000f );
GameObject *crate21 = Commands->Create_Object("X6_Rubble5", Vector3(6.464f, -33.466f, 2.978f));
Commands->Set_Facing( crate21, 0.000f );
GameObject *crate22 = Commands->Create_Object("X6_Rubble5", Vector3(2.144f, -33.484f, 0.007f));
Commands->Set_Facing( crate22, 0.000f );
GameObject *crate23 = Commands->Create_Object("X6_Rubble5", Vector3(-5.275f, -27.057f, 0.000f));
Commands->Set_Facing( crate23, 70.000f );
GameObject *crate24 = Commands->Create_Object("X6_Rubble5", Vector3(-5.932f, -11.340f, 0.000f));
Commands->Set_Facing( crate24, 25.000f );
GameObject *crate25 = Commands->Create_Object("X6_Rubble5", Vector3(-4.760f, -1.653f, 0.000f));
Commands->Set_Facing( crate25, 110.000f );
GameObject *crate26 = Commands->Create_Object("X6_Rubble5", Vector3(-5.332f, -2.713f, 0.277f));
Commands->Set_Facing( crate26, 0.000f );
GameObject *crate27 = Commands->Create_Object("X6_Rubble5", Vector3(5.699f, -32.438f, 2.563f));
Commands->Set_Facing( crate27, -120.000f );
float shake_timer = Commands->Get_Random(0.0f, 3.0f);
Commands->Start_Timer (obj, this, shake_timer, SHAKE_TIMER);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
// Shake the Chateau to simulate collapse
if(timer_id == SHAKE_TIMER)
{
// Explosions near Star to simulate collapse
// Vector3 star_pos = Commands->Get_Position(STAR);
// Vector3 explode_loc;
// explode_loc.X = star_pos.X + Commands->Get_Random(5.0f, 10.0f);
// explode_loc.Y = star_pos.Y + Commands->Get_Random(5.0f, 10.0f);
// explode_loc.Z = star_pos.Z; //+ Commands->Get_Random(5.0f, 10.0f);
float distance = Commands->Get_Random(-12.0f, 12.0f);
distance *= 3;
Vector3 pos = Commands->Get_Position(STAR);
float facing = Commands->Get_Facing(STAR);
float a = cos(DEG_TO_RADF(facing)) * distance;
float b = sin(DEG_TO_RADF(facing)) * distance;
Vector3 explode_loc = pos + Vector3(a, b, 0.0f);
Commands->Create_Explosion("Chateau_Explosions_Twiddler", explode_loc, obj);
float shake_timer = Commands->Get_Random(1.0f, 5.0f);
Commands->Start_Timer (obj, this, Commands->Get_Random(2.0f, 8.0f), SHAKE_TIMER);
// Shake the Chateau to simulate collapse
float camera_intensity = Commands->Get_Random(.01f,.09f);
float camera_duration = shake_timer - 1.0f;
Commands->Shake_Camera(Vector3 (-12.0f, 40.0f, -9.0f), 1000.0f, camera_intensity, camera_duration);
}
}
};
DECLARE_SCRIPT(M06_Mendoza, "")
{
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 604, 1, 0.0f);
}
};
DECLARE_SCRIPT(M06_GDI_Prisoner, "")
{
bool conversation;
bool poked;
enum{ESCAPE_CHATEAU};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( conversation, 1 );
SAVE_VARIABLE( poked, 2 );
}
void Created (GameObject * obj)
{
conversation = false;
poked = false;
Commands->Set_Innate_Is_Stationary(obj, true);
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NEUTRAL );
Commands->Enable_HUD_Pokable_Indicator( obj, true );
}
void Poked(GameObject * obj, GameObject * poker)
{
if ((Commands->Is_A_Star(poker)) && (!conversation) && (!poked))
{
// Thank for the release. I've got a Nod officer I've got to hunt down.\n
const char *conv_name = ("M06_CON008");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(poker, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300607);
Commands->Monitor_Conversation (obj, conv_id);
conversation = true;
poked = true;
Commands->Enable_HUD_Pokable_Indicator( obj, false );
Commands->Grant_Key (STAR, 3, true);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 300607 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
conversation = false;
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 607, 1, 0.5f);
Commands->Set_Innate_Is_Stationary(obj, false);
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
Commands->Give_PowerUp(obj, "POW_Chaingun_AI");
Commands->Select_Weapon(obj, "Weapon_Chaingun_Ai" );
Commands->Grant_Key (obj, 1, true);
Commands->Grant_Key (obj, 2, true);
Commands->Grant_Key (obj, 3, true);
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), 1);
params.Set_Movement (Commands->Find_Object(104967), RUN, 3.0f);
Commands->Action_Goto (obj, params);
Commands->Start_Timer (obj, this, 10.0f, ESCAPE_CHATEAU);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == ESCAPE_CHATEAU)
{
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), 1);
params.Set_Movement (Commands->Find_Object(104967), RUN, 3.0f);
Commands->Action_Goto (obj, params);
}
}
};
DECLARE_SCRIPT(M06_Activate_Secret_Door, "Secret_Door_ID=0:int")
{
bool already_poked;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_poked, 1 );
}
void Created(GameObject * obj)
{
already_poked = false;
}
void Poked(GameObject * obj, GameObject * poker)
{
if (Commands->Is_A_Star(poker) && (!already_poked))
{
already_poked = true;
// Looks like Raveshaw's private stash. Time for a five-finger discount.\n
const char *conv_name = ("M06_CON061");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN + 5);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300608);
Commands->Monitor_Conversation (obj, conv_id);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 300608 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
Commands->Static_Anim_Phys_Goto_Last_Frame ( Get_Int_Parameter("Secret_Door_ID"), "BK.BK" );
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 608, 1, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Civ_Prisoner, "")
{
int poke_id;
bool conversation;
enum{WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( poke_id, 1 );
SAVE_VARIABLE( conversation, 2 );
}
void Created(GameObject * obj)
{
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NEUTRAL );
Commands->Set_Innate_Is_Stationary(obj, true);
poke_id = 1;
conversation = false;
Commands->Enable_HUD_Pokable_Indicator( obj, true );
}
void Poked(GameObject * obj, GameObject * poker)
{
if(conversation)
{
return;
}
ActionParamsStruct params;
switch(poke_id)
{
case 1:
{
conversation = true;
// I am in your debt.\n
const char *conv_name = ("M06_CON009");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN + 5);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300123);
Commands->Monitor_Conversation (obj, conv_id);
Vector3 pos = Commands->Get_Position(obj);
float facing = Commands->Get_Facing(obj);
float a = cos(DEG_TO_RADF(facing)) * 1.5;
float b = sin(DEG_TO_RADF(facing)) * 1.5;
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
Commands->Create_Object("POW_Health_100", powerup_loc);
Commands->Enable_HUD_Pokable_Indicator( obj, false );
}
break;
case 2:
{
conversation = true;
// I must rest.
const char *conv_name = ("M06_CON063");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN + 5);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300124);
Commands->Monitor_Conversation (obj, conv_id);
}
break;
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED)
{
conversation = false;
}
if(action_id == 300123 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 605, 1, 0.0f);
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
params.WaypathID = 101552;
Commands->Action_Goto( obj, params );
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
Commands->Set_Innate_Is_Stationary(obj, false);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 12 );
params.Set_Animation ("S_A_HUMAN.h_a_b0c0", true);
Commands->Action_Play_Animation (obj, params);
poke_id = 2;
conversation = false;
}
}
void Killed (GameObject * obj, GameObject * killer)
{
// Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 605, 2, 0.0f);
}
};
DECLARE_SCRIPT(M06_Enable_Guard_Tower, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Warning: Nod Security Measures Detected.\n
// const char *conv_name = ("M06_CON010");
// int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
// Commands->Join_Conversation(NULL, conv_id, true, true);
// Commands->Join_Conversation(STAR, conv_id, true, true);
// Commands->Start_Conversation (conv_id, 300606);
// Commands->Monitor_Conversation (obj, conv_id);
// Patrols
Commands->Enable_Spawner(101046, true);
Commands->Enable_Spawner(101053, true);
// Engineer
Commands->Enable_Spawner(101054, true);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 300606 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 610, 1, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Gate_Guards, "Soldier_ID=0:int")
{
int soldier_id;
bool disable_tower_spawn;
enum {M06_GATE_GUARD_WAYPATH = 105, WAYPATH, CONVERSATION};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( disable_tower_spawn, 1 );
}
void Created (GameObject * obj)
{
soldier_id = Get_Int_Parameter("Soldier_ID");
Commands->Set_Innate_Is_Stationary(obj, true);
Commands->Innate_Soldier_Enable_Footsteps_Heard( obj, false );
disable_tower_spawn = false;
Commands->Start_Timer(obj, this, 15.0f, CONVERSATION);
Commands->Send_Custom_Event (obj, obj, M06_GATE_GUARD_WAYPATH, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(110908), M06_GATE_GUARD_WAYPATH, 1, 0.0f);
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
Commands->Debug_Message("Action_Complete on Gate Guard. action_id %d reason %d.\n", action_id, reason);
if(action_id == 1109081 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_GATE_GUARD_WAYPATH)
{
Commands->Set_Innate_Is_Stationary(obj, false);
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = 101023;
params.WaypointStartID = 101024;
params.WaypointEndID = 101027;
params.WaypathSplined = true;
Commands->Action_Goto( obj, params );
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_DISABLE_TOWER_SPAWN )
{
disable_tower_spawn = true;
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
Commands->Set_Innate_Is_Stationary(obj, false);
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = 101023;
params.WaypointStartID = 101024;
params.WaypointEndID = 101027;
Commands->Action_Goto( obj, params );
}
if(timer_id == CONVERSATION)
{
switch(soldier_id)
{
case 1:
{
if(Commands->Find_Object(101021))
{
// The new security protocols are tight.\n
const char *conv_name = ("M06_CON011");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN - 5, 15.0f, false);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(110908), conv_id, false, true);
Commands->Start_Conversation (conv_id, 1109081);
Commands->Monitor_Conversation (obj, conv_id);
}
}
break;
}
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if(Commands->Find_Object(101037) && (!disable_tower_spawn)) // Officer in tower
{
/* const char * conv_name[6];
conv_name[0] = ("M06_CON012"); // This is Tower, What's your situation brother?\n
conv_name[1] = ("M06_CON013"); // This is Tower, please respond.\n
conv_name[2] = ("M06_CON014"); // This is Tower, I'm sending a recon to your position.\n
conv_name[3] = ("M06_CON015"); // This is Tower. Hold position brother, reinforcements enroute.\n
conv_name[4] = ("M06_CON016"); // This is Tower, report in.\n
conv_name[5] = ("M06_CON017"); // This is Tower. We've a possible man down, Bravo patrol inspect.\n
int random = Get_Int_Random(0, 5);
int conv_id = Commands->Create_Conversation (conv_name[random]);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);*/
switch(soldier_id)
{
case 1:
{
// Commands->Enable_Spawner(101035, true);
}
break;
case 2:
{
// Commands->Enable_Spawner(101036, true);
}
break;
}
}
}
};
DECLARE_SCRIPT(M06_Escort_Tank, "")
{
bool attacking;
enum {ARRIVE_COURTYARD, START_ESCORT};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( attacking, 1 );
}
void Created (GameObject * obj)
{
Commands->Start_Timer (obj, this, 1.5f, START_ESCORT);
// Commands->Enable_Enemy_Seen(obj, true);
Commands->Enable_Hibernation(obj, false);
attacking = false;
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if(timer_id == START_ESCORT)
{
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, ARRIVE_COURTYARD );
params.Set_Movement( Vector3(0,0,0), 0.8f, 1.5f );
params.WaypathID = 102252;
// params.WaypathSplined = true;
Commands->Action_Goto( obj, params );
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
Commands->Debug_Message("Action Complete on Escort Tank. action_id %d reason %d.\n", action_id, reason);
if(action_id == ARRIVE_COURTYARD && reason == ACTION_COMPLETE_NORMAL)
{
Commands->Enable_Engine(obj, false);
Commands->Enable_Hibernation(obj, true);
}
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
if(!attacking)
{
Commands->Enable_Hibernation(obj, true);
Commands->Enable_Engine(obj, true);
attacking = true;
Commands->Attach_Script(obj, "M08_Mobile_Vehicle", "111422, 111423, 111424, 111425, 111426, 111427, 111428, 111429, 111430, 111431");
}
}
void Damaged( GameObject * obj, GameObject * damager, float amount )
{
ActionParamsStruct params;
if(damager == STAR)
{
if(!attacking)
{
Commands->Enable_Hibernation(obj, true);
Commands->Enable_Engine(obj, true);
attacking = true;
Commands->Attach_Script(obj, "M08_Mobile_Vehicle", "111422, 111423, 111424, 111425, 111426, 111427, 111428, 111429, 111430, 111431");
}
}
}
void Killed (GameObject * obj, GameObject * killer)
{
}
};
DECLARE_SCRIPT(M06_Alarm_Controller, "")
{
bool alarm_sounded;
bool triggered;
bool stand_down;
bool alarmed;
enum {STAND_DOWN};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( alarm_sounded, 1 );
SAVE_VARIABLE( triggered, 2 );
SAVE_VARIABLE( stand_down, 3 );
SAVE_VARIABLE( alarmed, 4 );
}
void Created (GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
alarm_sounded = false;
triggered = false;
stand_down = false;
alarmed = false;
Commands->Set_Animation_Frame(obj, "mct_nod.mct_nod", 0);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
Vector3 sender_pos = Commands->Get_Position(sender);
Commands->Debug_Message("Custom received Alarm_Controller. type %d param %d sender_id %d sender_pos X %d, Y %d, Z %d.\n", type, param, Commands->Get_ID(sender), sender_pos.X, sender_pos.Y, sender_pos.Z );
ActionParamsStruct params;
if(type == M06_ALARMED) // Send custom to new spawns status of alarm
{
Commands->Send_Custom_Event (obj, sender, M06_ALARMED, alarm_sounded, 0.0f);
}
if((type == M06_STAND_DOWN)) // && (alarm_sounded) && !stand_down)
{
stand_down = true;
Commands->Start_Timer (obj, this, 0.0f, STAND_DOWN);
}
if((type == M06_SOUND_ALARM) && (!alarm_sounded))
{
alarm_sounded = true;
Commands->Create_Sound ( "M06_Alarm", Vector3 (0,0,0), obj);
Commands->Create_Logical_Sound(obj, M06_SOUND_ALARM_ON, Vector3 (0,0,0), 2500.0f);
// Commands->Monitor_Sound (obj, alarm_sound);
Spawn_Response (true);
Alarm_Trigger_Zones (obj, true);
}
if((type == M00_CUSTOM_CAMERA_ALARM) && (!alarm_sounded))
{
alarm_sounded = true;
Commands->Create_Sound ( "M06_Alarm", Vector3 (0,0,0), obj);
// Commands->Monitor_Sound (obj, alarm_sound);
Spawn_Response (true);
Alarm_Trigger_Zones (obj, true);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
if(action_id == 300609 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
alarmed = true;
// Deactivate alarm system
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 609, 3, 0.0f);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if((timer_id == STAND_DOWN)) // && (alarm_sounded) && (alarmed))
{
if(alarm_sounded)
{
// Stand down general alarm. Intruder alert canceled.\n
const char *conv_name = ("M06_CON018");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Join_Conversation(Commands->Get_A_Star(Vector3(0.0f,0.0f,0.0f)), conv_id, false, true);
Commands->Start_Conversation (conv_id, 300000);
Commands->Monitor_Conversation (obj, conv_id);
}
// Stand down spawn units
Spawn_Response (false);
Alarm_Trigger_Zones (obj, false);
// alarm_sounded = false commented out to simulate shut down of alarm system
// alarm_sounded = false;
Commands->Create_Logical_Sound(obj, M06_SOUND_ALARM_OFF, Vector3 (0,0,0), 2500.0f);
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 609, 1, 0.0f);
alarm_sounded = true;
// Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 610, 1, 0.0f);
}
}
void Alarm_Trigger_Zones (GameObject * obj, bool alarm)
{
}
void Spawn_Response (bool alarm)
{
}
};
DECLARE_SCRIPT(M06_Alarm_Behavior, "Alarm_Enemy_Seen=0.0:float, Alarm_Damaged=0.0:float")
{
int alarm_switch_id[8];
int alarm_switch_amnt;
int closest_id;
bool sound_alarm;
bool alarmed;
float alarm_enemy_seen;
float alarm_damaged;
bool hear_footsteps;
int havoc_id;
bool attacking_havoc;
enum {HEAR_FOOTSTEPS};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( closest_id, 1 );
SAVE_VARIABLE( sound_alarm, 2 );
SAVE_VARIABLE( alarmed, 3 );
SAVE_VARIABLE( hear_footsteps, 4 );
SAVE_VARIABLE( havoc_id, 5 );
SAVE_VARIABLE( attacking_havoc, 6 );
}
void Created(GameObject * obj)
{
// No starting units can hear footsteps until otherwise alerted
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, false);
hear_footsteps = false;
alarm_enemy_seen = Get_Float_Parameter("Alarm_Enemy_Seen");
alarm_damaged = Get_Float_Parameter("Alarm_Damaged");
int difficulty = Commands->Get_Difficulty_Level();
alarm_enemy_seen *= difficulty + 1;
alarm_damaged *= difficulty + 1;
closest_id = 0;
alarm_switch_amnt = 8;
sound_alarm = false;
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), M06_ALARMED, 1, 0.2f);
alarmed = false;
havoc_id = 0;
attacking_havoc = false;
// Hardcode all alarm switch IDs
alarm_switch_id[0] = 100157;
alarm_switch_id[1] = 100330;
alarm_switch_id[2] = 100423;
alarm_switch_id[3] = 100445;
alarm_switch_id[4] = 101003;
alarm_switch_id[5] = 101004;
alarm_switch_id[6] = 101005;
alarm_switch_id[7] = 101006;
}
int Nearest (GameObject * obj) // Get nearest alarm switch to soldier
{
Vector3 alarm_pos;
Vector3 soldier_pos = Commands->Get_Position(obj);
float this_distance = 0.0f;
float closest_distance = 0.0f;
int i = 0;
while (i < alarm_switch_amnt)
{
if(Commands->Find_Object(alarm_switch_id[i]))
{
alarm_pos = Commands->Get_Position(Commands->Find_Object(alarm_switch_id[i]));
this_distance = Commands->Get_Distance(soldier_pos, alarm_pos);
if(closest_distance == 0.0f)
{
closest_distance = this_distance;
}
if(WWMath::Min(this_distance, closest_distance) == this_distance)
{
closest_distance = this_distance;
closest_id = alarm_switch_id[i];
}
}
i++;
}
return closest_id;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 10 && reason == ACTION_COMPLETE_NORMAL && !alarmed)
{
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(closest_id));
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 11);
params.Set_Face_Location( alarm_pos, 1.5f);
Commands->Action_Face_Location ( obj, params );
Commands->Send_Custom_Event (obj, Commands->Find_Object(closest_id), M06_CHECK_ALARM, Commands->Get_ID(obj), 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_ALARMED) // Custom returned from alarm controller for new spawns to set alarmed status
{
alarmed = (param == 1) ? true : false;
}
if(type == M06_CHECK_ALARM && !alarmed)
{
if(param == 1)
{
// The alarm switch is destroyed, we need engineering!\n
const char *conv_name = ("M06_CON019");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
Commands->Monitor_Conversation (obj, conv_id);
int i = 0;
int curr_alarm_switch_id = Commands->Get_ID(sender);
while (i < alarm_switch_amnt)
{
if(curr_alarm_switch_id == alarm_switch_id[i])
{
alarm_switch_id[i] = 0;
}
i++;
}
// Go to another alarm box
closest_id = Nearest(obj);
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(closest_id));
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10 );
params.Set_Movement( alarm_pos, RUN, 1.5f );
Commands->Action_Goto( obj, params );
}
else
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 12 );
params.Set_Animation ("S_A_HUMAN.H_A_A0F0", false);
Commands->Action_Play_Animation (obj, params);
// Send custom to sound alarm
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), M06_SOUND_ALARM, 1, 0.0f);
// Once alarm has been sounded
}
}
if(type == M06_YOU_ATTACK_HAVOC)
{
Commands->Debug_Message("Soldier got M06_YOU_ATTACK_HAVOC custom, attacking STAR.\n");
attacking_havoc = true;
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), 1);
params.Set_Attack (STAR, 50.0f, 0.0f, 1);
Commands->Action_Attack (obj, params);
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_SOUND_ALARM_ON )
{
alarmed = true;
sound_alarm = false;
Vector3 pos = Commands->Get_Position(obj);
Commands->Innate_Force_State_Gunshots_Heard(obj, pos);
}
if ( sound.Type == M06_SOUND_ALARM_OFF )
{
alarmed = false;
attacking_havoc = false;
Commands->Action_Reset ( obj, 100 );
}
if ( sound.Type == M06_ATTACK_HAVOC_SOUND )
{
havoc_id = Commands->Get_ID(sound.Creator);
// Let Havoc know this soldier is coming to attack
Commands->Send_Custom_Event (obj, Commands->Find_Object(havoc_id), M06_ATTACK_HAVOC, 1, 0.0f);
}
if (((sound.Type == SOUND_TYPE_GUNSHOT) || (sound.Type == SOUND_TYPE_BULLET_HIT)) && (!hear_footsteps))
{
hear_footsteps = true;
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, true);
Commands->Start_Timer (obj, this, 60.0f, HEAR_FOOTSTEPS);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if(timer_id == HEAR_FOOTSTEPS)
{
hear_footsteps = false;
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, false);
}
}
void Damaged (GameObject * obj, GameObject * damager, float amount)
{
ActionParamsStruct params;
if(Commands->Get_Random(0.0f, 1.0f) <= alarm_damaged)
{
if((!sound_alarm) && (!alarmed) && (obj))
{
sound_alarm = true;
// Sound the alarm!\n
const char *conv_name = ("M06_CON020");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
closest_id = Nearest(obj);
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(closest_id));
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10 );
params.Set_Movement( alarm_pos, RUN, 1.5f );
Commands->Action_Goto( obj, params );
}
}
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
ActionParamsStruct params;
if(Commands->Get_Random(0.0f, 1.0f) <= alarm_enemy_seen)
{
if((!sound_alarm) && (!alarmed))
{
sound_alarm = true;
// Sound the alarm!\n
const char *conv_name = ("M06_CON020");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
closest_id = Nearest(obj);
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(closest_id));
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10 );
params.Set_Movement( alarm_pos, RUN, 1.5f );
Commands->Action_Goto( obj, params );
}
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if(attacking_havoc)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(havoc_id), M06_DEAD_HAVOC_ATTACKER, 1, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Alarm_Switch, "")
{
bool destroyed;
enum{DAMAGE_ALARM};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( destroyed, 1 );
}
void Created(GameObject * obj)
{
Vector3 alarm_pos = Commands->Get_Position(obj);
Commands->Debug_Message("Position of alarm switch %d: X: %d, Y: %d, Z:%d", Commands->Get_ID(obj), alarm_pos.X, alarm_pos.Y, alarm_pos.Z );
Commands->Set_Animation_Frame(obj, "dsp_doorswitch2.dsp_doorswitch2", 0);
destroyed = false;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CHECK_ALARM)
{
Commands->Send_Custom_Event (obj, sender, M06_CHECK_ALARM, destroyed, 0.0f);
}
}
void Damaged (GameObject * obj, GameObject * damager, float amount)
{
if(Commands->Get_Health(obj) > 1.0f)
{
Commands->Set_Animation_Frame(obj, "dsp_doorswitch2.dsp_doorswitch2", 0);
}
else
{
Commands->Set_Health(obj, 1.0f);
if(!destroyed)
{
destroyed = true;
Commands->Set_Animation_Frame(obj, "dsp_doorswitch2.dsp_doorswitch2", 60);
}
else
{
Commands->Set_Animation_Frame(obj, "dsp_doorswitch2.dsp_doorswitch2", 60);
}
}
}
};
DECLARE_SCRIPT(M06_Alarm_Terminal_DLS, "")
{
bool poked;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( poked, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Animation_Frame(obj, "mct_nod.mct_nod", 0);
Commands->Enable_HUD_Pokable_Indicator( obj, true );
poked = false;
}
void Poked(GameObject * obj, GameObject * poker)
{
if (Commands->Is_A_Star(poker))
{
poked = true;
Commands->Enable_HUD_Pokable_Indicator( obj, false );
// Custom to alarm controller to stand down
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), M06_STAND_DOWN, 1, 0.0f);
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if(!poked)
{
// Custom to alarm controller to stand down
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), M06_STAND_DOWN, 1, 0.0f);
}
Vector3 myPositon = Commands->Get_Position ( obj );
float myFacing = Commands->Get_Facing ( obj );
GameObject * destroyedMCT = Commands->Create_Object ( "Nod_MCT_Alarm_Destroyed", myPositon);
Commands->Set_Facing ( destroyedMCT, myFacing );
}
};
DECLARE_SCRIPT(M06_Tower_Patrol, "Waypath_ID=0:int, Waypath_Loc:Vector3")
{
int waypath_id;
Vector3 waypath_loc;
bool disable_tower_spawn;
bool chateau_destruction;
enum {WAYPATH, GO_WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( waypath_id, 1 );
// SAVE_VARIABLE( waypath_loc, 2 );
SAVE_VARIABLE( disable_tower_spawn, 1 );
SAVE_VARIABLE( chateau_destruction, 2 );
}
void Created (GameObject * obj)
{
waypath_id = Get_Int_Parameter("Waypath_ID");
waypath_loc = Get_Vector3_Parameter("Waypath_Loc");
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, RUN, 1.5f );
Commands->Action_Goto( obj, params );
disable_tower_spawn = false;
chateau_destruction = false;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = waypath_id;
Commands->Action_Goto( obj, params );
}
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_DISABLE_TOWER_SPAWN )
{
disable_tower_spawn = true;
}
if ( sound.Type == M06_CHATEAU_DESTRUCTION )
{
chateau_destruction = true;
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if(Commands->Find_Object(101037) && (!disable_tower_spawn) && (!chateau_destruction)) // Officer in tower
{
const char * conv_name[6];
conv_name[0] = ("M06_CON012"); // This is Tower, What's your situation brother?\n
conv_name[1] = ("M06_CON013"); // This is Tower, please respond.\n
conv_name[2] = ("M06_CON014"); // This is Tower, I'm sending a recon to your position.\n
conv_name[3] = ("M06_CON015"); // This is Tower. Hold position brother, reinforcements enroute.\n
conv_name[4] = ("M06_CON016"); // This is Tower, report in.\n
conv_name[5] = ("M06_CON017"); // This is Tower. We've a possible man down, Bravo patrol inspect.\n
int random = Get_Int_Random(0, 10);
if(random < 6)
{
int conv_id = Commands->Create_Conversation (conv_name[random]);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
}
}
}
};
DECLARE_SCRIPT(M06_Courtyard_Patrol, "Waypath_ID=0:int, Waypath_Loc:Vector3")
{
int waypath_id;
Vector3 waypath_loc;
bool disable_courtyard_spawn;
bool chateau_destruction;
enum {WAYPATH, GO_WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( waypath_id, 1 );
// SAVE_VARIABLE( waypath_loc, 2 );
SAVE_VARIABLE( disable_courtyard_spawn, 1 );
SAVE_VARIABLE( chateau_destruction, 2 );
}
void Created (GameObject * obj)
{
waypath_id = Get_Int_Parameter("Waypath_ID");
waypath_loc = Get_Vector3_Parameter("Waypath_Loc");
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, RUN, 1.5f );
Commands->Action_Goto( obj, params );
disable_courtyard_spawn = false;
chateau_destruction = false;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = waypath_id;
Commands->Action_Goto( obj, params );
}
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_DISABLE_COURTYARD_SPAWN )
{
disable_courtyard_spawn = true;
}
if ( sound.Type == M06_CHATEAU_DESTRUCTION )
{
chateau_destruction = true;
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if((!disable_courtyard_spawn) && (!chateau_destruction))
{
const char * conv_name[5];
conv_name[0] = ("M06_CON021"); // This is Courtyard, report in.\n
conv_name[1] = ("M06_CON022"); // Courtyard here. Squad enroute.\n
conv_name[2] = ("M06_CON023"); // This is Courtyard, get me a response team.\n
conv_name[3] = ("M06_CON024"); // Courtyard here. What's the situation brothers?\n
conv_name[4] = ("M06_CON025"); // Courtyard here. Intruder response to your location.\n
int random = Get_Int_Random(0, 10);
if(random < 5)
{
int conv_id = Commands->Create_Conversation (conv_name[random]);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
}
}
}
};
DECLARE_SCRIPT(M06_Hedgemaze_Patrol, "Waypath_ID=0:int, Waypath_Loc:Vector3")
{
int waypath_id;
Vector3 waypath_loc;
bool disable_hedgemaze_spawn;
bool chateau_destruction;
enum {WAYPATH, GO_WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( waypath_id, 1 );
// SAVE_VARIABLE( waypath_loc, 2 );
SAVE_VARIABLE( disable_hedgemaze_spawn, 1 );
SAVE_VARIABLE( chateau_destruction, 2 );
}
void Created (GameObject * obj)
{
waypath_id = Get_Int_Parameter("Waypath_ID");
waypath_loc = Get_Vector3_Parameter("Waypath_Loc");
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, RUN, 1.5f );
Commands->Action_Goto( obj, params );
disable_hedgemaze_spawn = false;
chateau_destruction = false;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = waypath_id;
Commands->Action_Goto( obj, params );
}
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_DISABLE_HEDGEMAZE_SPAWN )
{
disable_hedgemaze_spawn = true;
}
if ( sound.Type == M06_CHATEAU_DESTRUCTION )
{
chateau_destruction = true;
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if((!disable_hedgemaze_spawn) && (!chateau_destruction))
{
const char * conv_name[4];
conv_name[0] = ("M06_CON026"); // This is Hedge Maze, Please respond.\n
conv_name[1] = ("M06_CON027"); // This is Hedge Maze. Get a patrol to that position.\n
conv_name[2] = ("M06_CON028"); // Hedge Maze here, report in please.\n
conv_name[3] = ("M06_CON029"); // Hedge Maze here, please respond.\n
int random = Get_Int_Random(0, 10);
if(random < 4)
{
int conv_id = Commands->Create_Conversation (conv_name[random]);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
}
}
}
};
DECLARE_SCRIPT(M06_Interior_Patrol, "Waypath_ID=0:int, Waypath_Loc:Vector3")
{
int waypath_id;
Vector3 waypath_loc;
enum {WAYPATH, GO_WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( waypath_id, 1 );
SAVE_VARIABLE( waypath_loc, 2 );
}
void Created (GameObject * obj)
{
waypath_id = Get_Int_Parameter("Waypath_ID");
waypath_loc = Get_Vector3_Parameter("Waypath_Loc");
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, RUN, 1.5f );
Commands->Action_Goto( obj, params );
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = waypath_id;
Commands->Action_Goto( obj, params );
}
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
}
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101309), M06_DEAD_INTERIOR_PATROL, 1, 0.0f);
}
};
DECLARE_SCRIPT(M06_Lab_Patrol, "Waypath_ID=0:int, Waypath_Loc:Vector3")
{
int waypath_id;
Vector3 waypath_loc;
enum {WAYPATH, GO_WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( waypath_id, 1 );
// SAVE_VARIABLE( waypath_loc, 2 );
}
void Created (GameObject * obj)
{
waypath_id = Get_Int_Parameter("Waypath_ID");
waypath_loc = Get_Vector3_Parameter("Waypath_Loc");
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = waypath_id;
Commands->Action_Goto( obj, params );
}
if(action_id == GO_WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer(obj, this, 60.0f, WAYPATH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == WAYPATH)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, GO_WAYPATH );
params.Set_Movement( waypath_loc, WALK, 1.5f );
Commands->Action_Goto( obj, params );
}
}
};
DECLARE_SCRIPT(M06_Barracks_Patrol, "")
{
bool disable_barracks_spawn;
int barracks_drop[5];
int barracks_pickup[6];
bool chateau_destruction;
enum {WAYPATH, PICKUP, DROP};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( disable_barracks_spawn, 1 );
SAVE_VARIABLE( chateau_destruction, 2 );
}
void Created (GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
ActionParamsStruct params;
barracks_drop[0] = 101534;
barracks_drop[1] = 101535;
barracks_drop[2] = 101536;
barracks_drop[3] = 101537;
barracks_drop[4] = 101538;
barracks_pickup[0] = 101539;
barracks_pickup[1] = 101540;
barracks_pickup[2] = 101541;
barracks_pickup[3] = 101542;
barracks_pickup[4] = 101543;
barracks_pickup[5] = 101544;
int random = Get_Int_Random(0, 5);
params.Set_Basic (this, (INNATE_PRIORITY_GUNSHOT_HEARD - 5), PICKUP);
params.Set_Movement (Commands->Find_Object(barracks_pickup[random]), WALK, 1.5f);
Commands->Action_Goto (obj, params);
disable_barracks_spawn = false;
chateau_destruction = false;
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_DISABLE_BARRACKS_SPAWN )
{
disable_barracks_spawn = true;
}
if ( sound.Type == M06_CHATEAU_DESTRUCTION )
{
chateau_destruction = true;
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == PICKUP && reason == ACTION_COMPLETE_NORMAL)
{
Commands->Enable_Hibernation(obj, true);
int random = Get_Int_Random(0, 4);
params.Set_Basic (this, (INNATE_PRIORITY_GUNSHOT_HEARD - 5), DROP);
params.Set_Movement (Commands->Find_Object(barracks_drop[random]), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
if(action_id == PICKUP && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer (obj, this, 20.0f, PICKUP);
}
if(action_id == DROP && reason == ACTION_COMPLETE_NORMAL)
{
Vector3 pos = Commands->Get_Position(obj);
float facing = Commands->Get_Facing(obj);
float a = cos(DEG_TO_RADF(facing)) * 1.5;
float b = sin(DEG_TO_RADF(facing)) * 1.5;
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
Commands->Create_Object("M06_Barracks_Powerups_Twiddler", powerup_loc);
int random = Get_Int_Random(0, 5);
params.Set_Basic (this, (INNATE_PRIORITY_GUNSHOT_HEARD - 5), PICKUP);
params.Set_Movement (Commands->Find_Object(barracks_pickup[random]), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
if(action_id == DROP && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Start_Timer (obj, this, 20.0f, PICKUP);
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
Commands->Destroy_Object(obj);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == PICKUP)
{
int random = Get_Int_Random(0, 5);
params.Set_Basic (this, (INNATE_PRIORITY_GUNSHOT_HEARD - 5), PICKUP);
params.Set_Movement (Commands->Find_Object(barracks_pickup[random]), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
}
void Killed (GameObject * obj, GameObject * killer)
{
if((!disable_barracks_spawn) && (!chateau_destruction))
{
const char * conv_name[5];
conv_name[0] = ("M06_CON030"); // This is Barracks, what's going on?\n
conv_name[1] = ("M06_CON031"); // Barracks here, what's your status?\n
conv_name[2] = ("M06_CON032"); // Barracks here. Alpha team to last known location.\n
conv_name[3] = ("M06_CON033"); // Barracks here, report in brothers.\n
conv_name[4] = ("M06_CON034"); // This is Barracks. You there, please respond.\n
int random = Get_Int_Random(0, 10);
if(random < 5)
{
int conv_id = Commands->Create_Conversation (conv_name[random]);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
}
}
}
};
DECLARE_SCRIPT(M06_Lab_Guard, "")
{
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
Commands->Set_Innate_Is_Stationary(obj, false);
}
};
DECLARE_SCRIPT(M06_Nod_Tower, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( waypath_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
void Killed (GameObject * obj, GameObject * killer)
{
// Disable reinforcement spawners
Commands->Enable_Spawner(101035, false);
Commands->Enable_Spawner(101036, false);
Commands->Enable_Spawner(101046, false);
Commands->Enable_Spawner(101053, false);
}
};
DECLARE_SCRIPT(M06_Courtyard_Controller, "")
{
int dead_courtyard_eagle;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( dead_courtyard_eagle, 1 );
}
void Created(GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
dead_courtyard_eagle = 0;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_DEAD_COURTYARD_EAGLE)
{
dead_courtyard_eagle++;
if(dead_courtyard_eagle == 3)
{
Commands->Enable_Spawner(101063, false);
Commands->Enable_Spawner(101064, false);
Commands->Enable_Spawner(101073, false);
Commands->Enable_Spawner(101082, false);
Commands->Enable_Spawner(101095, false);
Commands->Create_Logical_Sound(obj, M06_DISABLE_COURTYARD_SPAWN, Vector3 (0,0,0), 2500.0f);
// Create Search Apche in Courtyard
// GameObject * search_apache = Commands->Create_Object ( "Nod_Apache", Vector3(-99.996f, -135.659f, 37.552f));
// Commands->Attach_Script(search_apache, "M06_Courtyard_Apache", "");
}
}
}
};
DECLARE_SCRIPT(M06_Hedgemaze_Controller, "")
{
int dead_hedgemaze_eagle;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( dead_hedgemaze_eagle, 1 );
}
void Created(GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
dead_hedgemaze_eagle = 0;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_DEAD_HEDGEMAZE_EAGLE)
{
dead_hedgemaze_eagle++;
if(dead_hedgemaze_eagle == 2)
{
Commands->Enable_Spawner(101143, false);
Commands->Enable_Spawner(101144, false);
Commands->Enable_Spawner(101145, false);
Commands->Enable_Spawner(101146, false);
Commands->Create_Logical_Sound(obj, M06_DISABLE_HEDGEMAZE_SPAWN, Vector3 (0,0,0), 2500.0f);
}
}
}
};
DECLARE_SCRIPT(M06_Barracks_Controller, "")
{
int dead_barracks_eagle;
int evac_soldiers;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( dead_barracks_eagle, 1 );
SAVE_VARIABLE( evac_soldiers, 2 );
}
void Created(GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
dead_barracks_eagle = 0;
evac_soldiers = 0;
// GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(-37.824f, 30.975f, 1.605f));
// Commands->Set_Facing(chinook_obj, 0.000f);
// Commands->Attach_Script(chinook_obj, "Test_Cinematic", "M06_XG_EV4_1.txt");
// Commands->Start_Timer (obj, this, 30.0f, M06_NEXT_EVAC);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_EVAC_ARRIVED)
{
evac_soldiers = 0;
Commands->Create_Logical_Sound(obj, M06_SOLDIER_TO_EVAC, Vector3 (0,0,0), 2500.0f);
}
if(type == M06_TO_EVAC)
{
evac_soldiers++;
if(evac_soldiers < 3)
{
Commands->Send_Custom_Event(obj, sender, M06_TO_EVAC, 1, 0.0f);
}
}
if(type == M06_DEAD_BARRACKS_EAGLE)
{
dead_barracks_eagle++;
if(dead_barracks_eagle == 2)
{
Commands->Enable_Spawner(101531, false);
Commands->Enable_Spawner(101532, false);
Commands->Enable_Spawner(101533, false);
Commands->Create_Logical_Sound(obj, M06_DISABLE_BARRACKS_SPAWN, Vector3 (0,0,0), 2500.0f);
}
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if(timer_id == M06_NEXT_EVAC)
{
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(-37.824f, 30.975f, 1.605f));
Commands->Set_Facing(chinook_obj, 0.000f);
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "M06_XG_EV4_1.txt");
Commands->Start_Timer (obj, this, 30.0f, M06_NEXT_EVAC);
}
}
};
DECLARE_SCRIPT(M06_Interior_Controller, "")
{
int dead_interior_patrol;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( dead_interior_patrol, 1 );
}
void Created(GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
dead_interior_patrol = 0;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_DEAD_INTERIOR_PATROL)
{
Vector3 dead_loc = Commands->Get_Position(sender);
dead_interior_patrol++;
switch(dead_interior_patrol)
{
case 4:
{
// Contact lost with patrols. Reserve patrols to your assigned areas. Chem units to standby.\n
const char * conv_name = ("M06_CON035");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
// Disable initial interior spawns
Commands->Enable_Spawner(101280, false);
Commands->Enable_Spawner(101283, false);
Commands->Enable_Spawner(101286, false);
Commands->Enable_Spawner(101289, false);
Commands->Enable_Spawner(101292, false);
Commands->Enable_Spawner(101295, false);
Commands->Enable_Spawner(101298, false);
Commands->Enable_Spawner(101301, false);
// Enable grade 2 patrols
Commands->Enable_Spawner(101281, true);
Commands->Enable_Spawner(101284, true);
Commands->Enable_Spawner(101287, true);
Commands->Enable_Spawner(101290, true);
Commands->Enable_Spawner(101293, true);
Commands->Enable_Spawner(101296, true);
Commands->Enable_Spawner(101299, true);
Commands->Enable_Spawner(101302, true);
}
break;
case 10:
{
// Additional patrols lost, brothers. Chem units to stations.\n
const char * conv_name = ("M06_CON036");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
// Enable grade 3 patrols
Commands->Enable_Spawner(101282, true);
Commands->Enable_Spawner(101285, true);
Commands->Enable_Spawner(101288, true);
Commands->Enable_Spawner(101291, true);
Commands->Enable_Spawner(101294, true);
Commands->Enable_Spawner(101297, true);
Commands->Enable_Spawner(101300, true);
Commands->Enable_Spawner(101303, true);
}
break;
case 26:
{
// Disable grade 2 patrols
Commands->Enable_Spawner(101281, false);
Commands->Enable_Spawner(101284, false);
Commands->Enable_Spawner(101287, false);
Commands->Enable_Spawner(101290, false);
Commands->Enable_Spawner(101293, false);
Commands->Enable_Spawner(101296, false);
Commands->Enable_Spawner(101299, false);
Commands->Enable_Spawner(101302, false);
}
break;
case 42:
{
// Disable grade 3 patrols
Commands->Enable_Spawner(101282, false);
Commands->Enable_Spawner(101285, false);
Commands->Enable_Spawner(101288, false);
Commands->Enable_Spawner(101291, false);
Commands->Enable_Spawner(101294, false);
Commands->Enable_Spawner(101297, false);
Commands->Enable_Spawner(101300, false);
Commands->Enable_Spawner(101303, false);
}
break;
default:
{
const char * conv_name;
conv_name = NULL;
if((dead_loc.X < 12.0f) && (dead_loc.Y < -22.0f) && (dead_loc.Z >= 5.0f))
{
// Possible disturbance. Second floor, near main library.\n
conv_name = ("M06_CON037");
}
else if((dead_loc.X < 12.0f) && (dead_loc.Y < -22.0f) && (dead_loc.Z < 5.0f))
{
// Response team to bottom floor, main stairwell.\n
conv_name = ("M06_CON038");
}
else if((dead_loc.X < 12.0f) && (dead_loc.Y >= -22.0f) && (dead_loc.Y < 4.0f) && (dead_loc.Z < 5.0f))
{
// Nearby patrols, investigate area on bottom floor, main gallery.\n
conv_name = ("M06_CON039");
}
else if((dead_loc.X < 12.0f) && (dead_loc.Y >= -22.0f) && (dead_loc.Y < 4.0f) && (dead_loc.Z >= 5.0f))
{
// Fire team to top floor, main gallery.
conv_name = ("M06_CON040");
}
else if((dead_loc.X < 25.0f) && (dead_loc.Y >= 5.0f) && (dead_loc.Z < 5.0f))
{
// Possible intruder. Disturbance bottom floor, open air courtyard.\n
conv_name = ("M06_CON041");
}
else if((dead_loc.X < 25.0f) && (dead_loc.Y >= 5.0f) && (dead_loc.Z >= 5.0f))
{
// Lost contact with patrol, second level of open air courtyard. Investigate.\n
conv_name = ("M06_CON042");
}
else if((dead_loc.X >= 25.0f) && (dead_loc.Y >= 5.0f) && (dead_loc.Z >= 5.0f))
{
// Man down. Team to the top floor of the main dining area.\n
conv_name = ("M06_CON043");
}
else if((dead_loc.X >= 25.0f) && (dead_loc.Y >= 5.0f) && (dead_loc.Z < 5.0f))
{
// Patrol to main dining area. Weapons live, brothers.\n
conv_name = ("M06_CON044");
}
if(conv_name != NULL)
{
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1);
}
}
break;
}
}
}
};
DECLARE_SCRIPT(M06_Apply_Damage, "")
{
enum{APPLY_DAMAGE};
void Created(GameObject * obj)
{
Commands->Start_Timer (obj, this, 3.0f, APPLY_DAMAGE);
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == APPLY_DAMAGE)
{
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
}
}
};
DECLARE_SCRIPT(M06_Enable_Exterior_Courtyard, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Disable reinforcement spawners for tower
Commands->Enable_Spawner(101035, false);
Commands->Enable_Spawner(101036, false);
Commands->Enable_Spawner(101046, false);
Commands->Enable_Spawner(101053, false);
Commands->Create_Logical_Sound(obj, M06_DISABLE_TOWER_SPAWN, Vector3 (0,0,0), 2500.0f);
// Enable reinforcements for courtyard
Commands->Enable_Spawner(101063, true);
Commands->Enable_Spawner(101064, true);
Commands->Enable_Spawner(101073, true);
Commands->Enable_Spawner(101082, true);
Commands->Enable_Spawner(101095, true);
}
}
};
DECLARE_SCRIPT(M06_Enable_Hedgemaze, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Enable reinforcements for hedgemaze
Commands->Enable_Spawner(101143, true);
Commands->Enable_Spawner(101144, true);
Commands->Enable_Spawner(101145, true);
Commands->Enable_Spawner(101146, true);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101148), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101149), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Barracks, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Enable reinforcements for barracks
Commands->Enable_Spawner(101531, true);
Commands->Enable_Spawner(101532, true);
Commands->Enable_Spawner(101533, true);
// Disable remaining zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101012), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101212), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Interior, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Spawn initial interior patrol population
Commands->Enable_Spawner(101280, true);
Commands->Enable_Spawner(101283, true);
Commands->Enable_Spawner(101286, true);
Commands->Enable_Spawner(101289, true);
Commands->Enable_Spawner(101292, true);
Commands->Enable_Spawner(101295, true);
Commands->Enable_Spawner(101298, true);
Commands->Enable_Spawner(101301, true);
// Shut down all enable_interior zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101304), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101305), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101306), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101307), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101308), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Greenhouse, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Enable greenhouse units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101509), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101356), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101357), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Shut down all greenhouse zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101350), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101351), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Lab, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Enable units for laboratory
Commands->Enable_Spawner(101332, true);
Commands->Enable_Spawner(101334, true);
Commands->Enable_Spawner(101335, true);
Commands->Enable_Spawner(101336, true);
Commands->Enable_Spawner(101337, true);
Commands->Enable_Spawner(101344, true);
Commands->Enable_Spawner(101345, true);
Commands->Enable_Spawner(101346, true);
Commands->Enable_Spawner(101347, true);
}
}
};
DECLARE_SCRIPT(M06_Alarm_Engineer, "")
{
int broken_alarm_id;
bool fixing_alarm;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( fixing_alarm, 1 );
}
void Created(GameObject * obj)
{
Commands->Enable_Hibernation(obj, false);
broken_alarm_id = 0;
fixing_alarm = false;
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == 10 && reason == ACTION_COMPLETE_NORMAL)
{
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(broken_alarm_id));
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 11);
params.Set_Face_Location( alarm_pos, 1.5f);
Commands->Action_Face_Location ( obj, params );
}
if(action_id == 11 && reason == ACTION_COMPLETE_NORMAL)
{
GameObject * broken_alarm = Commands->Find_Object(broken_alarm_id);
if((Commands->Get_Health(broken_alarm) / Commands->Get_Max_Health(broken_alarm)) < 1.0f)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 12 );
params.Set_Movement( Commands->Get_Position(obj), 0.0f, 2.0f );
params.Set_Attack (broken_alarm, 5.0f, 0.0f, 1);
Commands->Action_Attack( obj, params );
}
else
{
fixing_alarm = false;
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 10.0f);
}
}
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
ActionParamsStruct params;
if (( sound.Type == M06_FIX_ALARM ) && (!fixing_alarm))
{
fixing_alarm = true;
broken_alarm_id = Commands->Get_ID(sound.Creator);
Vector3 alarm_pos = Commands->Get_Position(Commands->Find_Object(broken_alarm_id));
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), 10);
params.Set_Movement (alarm_pos, RUN, 2.0f);
Commands->Action_Goto (obj, params);
}
}
};
DECLARE_SCRIPT(M06_Courtyard_Eagle, "")
{
enum {WAYPATH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( already_seen, 1 );
}
void Created (GameObject * obj)
{
ActionParamsStruct params;
if(Commands->Get_ID(obj) == 101099)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = 101100;
params.WaypointStartID = 101101;
params.WaypointEndID = 101102;
Commands->Action_Goto( obj, params );
}
else
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_FOOTSTEPS_HEARD - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), WALK, 1.5f );
params.WaypathID = 101100;
params.WaypointStartID = 101102;
params.WaypointEndID = 101101;
Commands->Action_Goto( obj, params );
}
if(action_id == WAYPATH && reason == ACTION_COMPLETE_LOW_PRIORITY)
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
}
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101104), M06_DEAD_COURTYARD_EAGLE, 1, 0.0f);
}
};
DECLARE_SCRIPT(M06_Hedgemaze_Eagle, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( already_seen, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101147), M06_DEAD_HEDGEMAZE_EAGLE, 1, 0.0f);
}
};
DECLARE_SCRIPT(M06_Barracks_Eagle, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( already_seen, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
}
void Killed (GameObject * obj, GameObject * killer)
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101204), M06_DEAD_BARRACKS_EAGLE, 1, 0.0f);
}
};
//Grants initial weapons
DECLARE_SCRIPT(M06_Havoc_DLS, "")
{
bool alarmed;
int attacking_havoc;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( alarmed, 1 );
SAVE_VARIABLE( attacking_havoc, 2 );
}
enum {HAVOC_ALARM_SOUND};
void Created(GameObject * obj)
{
alarmed = false;
Commands->Grant_Key (obj, 10, true);
// Give Havoc the key to the barracks
Commands->Grant_Key (STAR, 9, true);
Commands->Give_PowerUp(obj, "POW_Chaingun_Player");
Commands->Give_PowerUp(obj, "POW_SniperRifle_Player");
Commands->Give_PowerUp(obj, "POW_MineRemote_Player");
Commands->Give_PowerUp(obj, "POW_MineRemote_Player");
Commands->Give_PowerUp(obj, "POW_GrenadeLauncher_Player");
}
void Destroyed(GameObject * obj)
{
// Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), 666, 666, 0.0f);
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_SOUND_ALARM_ON )
{
if(!alarmed)
{
Commands->Start_Timer (obj, this, 0.0f, HAVOC_ALARM_SOUND);
Commands->Debug_Message("Alarm heard on Havoc, play M06_ATTACK_HAVOC_SOUND.\n");
Commands->Create_Logical_Sound(obj, M06_ATTACK_HAVOC_SOUND, Vector3 (0,0,0), 55.0f);
alarmed = true;
}
}
if ( sound.Type == M06_SOUND_ALARM_OFF )
{
alarmed = false;
attacking_havoc = 0;
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if((timer_id == HAVOC_ALARM_SOUND) && (alarmed))
{
Commands->Create_Logical_Sound(obj, SOUND_TYPE_GUNSHOT, Vector3 (0,0,0), 30.0f);
Commands->Start_Timer (obj, this, 8.0f, HAVOC_ALARM_SOUND);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_ATTACK_HAVOC)
{
Commands->Debug_Message("Soldier heard M06_ATTACK_HAVOC_SOUND, custom to attack Havoc.\n");
if(attacking_havoc <= 3)
{
attacking_havoc++;
Commands->Send_Custom_Event(obj, sender, M06_YOU_ATTACK_HAVOC, 1, 0.0f);
}
}
if(type == M06_DEAD_HAVOC_ATTACKER)
{
Commands->Debug_Message("Soldier attacking Havoc killed, get new one.\n");
attacking_havoc = 3;
Commands->Create_Logical_Sound(obj, M06_ATTACK_HAVOC_SOUND, Vector3 (0,0,0), 55.0f);
}
if(type == M06_RELOCATE)
{
if(param == 0)
{
Commands->Set_Position (obj, Commands->Get_Position(Commands->Find_Object(107607)));
Commands->Set_Facing (obj, -85.0F);
}
if(param == 1)
{
//Commands->Set_Position (obj, Commands->Get_Position(Commands->Find_Object(108278)));
Commands->Set_Position (obj, Vector3 (-34.998F, 24.173F, 0.593F));
Commands->Set_Facing (obj, 140.0F);
}
}
}
};
DECLARE_SCRIPT(M06_Resistance_Raider_DLS, "")
{
bool talking;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( talking, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Is_Stationary(obj, true);
Commands->Set_Animation(obj, "S_A_HUMAN.H_A_601A", true);
Commands->Apply_Damage( obj, 25.0f, "STEEL");
talking = false;
Commands->Enable_HUD_Pokable_Indicator( obj, true );
}
void Poked(GameObject * obj, GameObject * poker)
{
ActionParamsStruct params;
if (Commands->Is_A_Star(poker) && !talking)
{
talking = true;
// Looks like you're bleedin'.\n
const char *conv_name = ("M06_CON045");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 100823);
Commands->Monitor_Conversation (obj, conv_id);
Commands->Enable_HUD_Pokable_Indicator( obj, false );
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
if(action_id == 100823 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
Vector3 pos = Commands->Get_Position(obj);
float facing = Commands->Get_Facing(obj);
float a = cos(DEG_TO_RADF(facing)) * 1.5;
float b = sin(DEG_TO_RADF(facing)) * 1.5;
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
Commands->Create_Object("POW_GrenadeLauncher_Player", powerup_loc);
}
}
};
DECLARE_SCRIPT(M06_Assistance_Farmer_DLS, "")
{
int poke_id;
bool give_health;
enum {GO_STAR, TALK_STAR, GIVE_HEALTH};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( poke_id, 1 );
SAVE_VARIABLE( give_health, 2 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
give_health = false;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
ActionParamsStruct params;
poke_id = 1;
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, GO_STAR );
params.Set_Movement( STAR, RUN, 1.5f );
Commands->Action_Goto( obj, params );
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == TALK_STAR && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
Vector3 pos = Commands->Get_Position(obj);
float facing = Commands->Get_Facing(obj);
float a = cos(DEG_TO_RADF(facing)) * 1.5;
float b = sin(DEG_TO_RADF(facing)) * 1.5;
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
Commands->Create_Object("POW_GrenadeLauncher_Player", powerup_loc);
// Send custom to M06_Trigger_A04 zone to start conversation in maintenance shaft
Commands->Send_Custom_Event(obj, Commands->Find_Object(101357), M06_START_CONVERSATION, 1, 0.0f);
}
if(action_id == GO_STAR && reason == ACTION_COMPLETE_NORMAL)
{
// Assume hands over head anim
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 1);
params.Set_Animation( "H_A_HOST_L1B", true );
Commands->Action_Play_Animation (obj, params);
// There are two of 'em in the maintenance shaft. Here, take this.\n
const char *conv_name = ("M06_CON046");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, TALK_STAR);
Commands->Monitor_Conversation (obj, conv_id);
}
}
void Poked(GameObject * obj, GameObject * poker)
{
if(give_health)
{
give_health = false;
// \\Partner.\n
const char *conv_name = ("M06_CON062");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
Vector3 pos = Commands->Get_Position(obj);
float facing = Commands->Get_Facing(obj);
float a = cos(DEG_TO_RADF(facing)) * 1.5;
float b = sin(DEG_TO_RADF(facing)) * 1.5;
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
Commands->Create_Object("tw_POW00_Health", powerup_loc);
Commands->Start_Timer (obj, this, 10.0f, GIVE_HEALTH);
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
if(timer_id == GIVE_HEALTH)
{
give_health = true;
}
}
};
DECLARE_SCRIPT(M06_Greenhouse_Shaft_Unit, "")
{
int soldier_id;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101356))
{
// But sir, there are two&\n
const char *conv_name = ("M06_CON047");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101356), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Floor1_Library_Unit, "")
{
int soldier_id;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
Commands->Innate_Disable(obj);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101358))
{
// I see little reason for them to resist.\n
const char *conv_name = ("M06_CON048");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101358), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_Floor1_Library, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
// Custom to activate innate
Commands->Send_Custom_Event (obj, Commands->Find_Object(101358), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101360), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101360), M06_START_CONVERSATION, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101361), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101362), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Floor1_Bedroom_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
ActionParamsStruct params;
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
}
};
DECLARE_SCRIPT(M06_Enable_Floor1_Bedroom, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101363), M06_CUSTOM_ACTIVATE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Floor2_Bedroom, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
Commands->Send_Custom_Event (obj, Commands->Find_Object(101364), M06_CUSTOM_ACTIVATE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Floor2_Bedroom_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
ActionParamsStruct params;
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
}
};
DECLARE_SCRIPT(M06_Floor2_Library_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101366))
{
// What could Raveshaw possibly want with references to Incan astrology?\n
const char *conv_name = ("M06_CON049");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101366), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_Floor2_Library, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
Commands->Send_Custom_Event (obj, Commands->Find_Object(101365), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101366), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101365), M06_START_CONVERSATION, 1, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Floor2_Conference_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101370))
{
// We should simply bombard the village with long range artillery.\n
const char *conv_name = ("M06_CON050");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101370), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_Floor2_Conference, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
Commands->Send_Custom_Event (obj, Commands->Find_Object(101369), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101370), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101369), M06_START_CONVERSATION, 1, 0.0f);
}
}
};
// WarRoom Officer
DECLARE_SCRIPT(M06_WarRoom_Officer_DLS, "")
{
bool has_keycard;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( has_keycard, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Is_Stationary(obj, true);
has_keycard = false;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
// Do not patronize me, when are you going to move the scientists to the Research Facility?\n
// const char *conv_name = ("M06_CON051");
// int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN - 5);
// Commands->Join_Conversation(NULL, conv_id, false, true);
// Commands->Join_Conversation(obj, conv_id, false, true);
// Commands->Start_Conversation (conv_id, 300123);
// Commands->Monitor_Conversation (obj, conv_id);
}
if(type == M06_WR_KCARD_ACQUIRED)
{
has_keycard = true;
}
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
Commands->Set_Innate_Is_Stationary(obj, false);
}
};
DECLARE_SCRIPT(M06_WarRoom_Bodyguard_DLS, "")
{
bool has_keycard;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( has_keycard, 1 );
}
void Created (GameObject * obj)
{
has_keycard = false;
Commands->Innate_Disable(obj);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_WR_KCARD_ACQUIRED)
{
has_keycard = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Warroom_DoorGuard, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
Commands->Send_Custom_Event (obj, Commands->Find_Object(101516), M06_CUSTOM_ACTIVATE, 1, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_WarRoom_DoorGuard, "")
{
bool has_keycard;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( has_keycard, 1 );
}
void Created (GameObject * obj)
{
has_keycard = false;
Commands->Innate_Disable(obj);
Commands->Set_Innate_Is_Stationary(obj, true);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_WR_KCARD_ACQUIRED)
{
has_keycard = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_WarRoom, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on courtyard units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101008), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101009), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
// Commands->Send_Custom_Event(obj, Commands->Find_Object(101008), M06_START_CONVERSATION, 1, 0.0f);
// Kane conversation with Warroom Officer
GameObject * holograph = Commands->Find_Object(112464);
GameObject * kane = Commands->Create_Object_At_Bone ( holograph, "Nod_Kane_HologramHead_small", "O_ARROW" );
Commands->Attach_To_Object_Bone( kane, holograph, "O_ARROW" );
Commands->Disable_All_Collisions ( kane );
Commands->Set_Facing (kane, Commands->Get_Facing (holograph));
Commands->Set_Loiters_Allowed( kane, false );
Commands->Attach_Script(kane, "M06_KaneHead", "");
}
}
};
DECLARE_SCRIPT(M06_KaneHead, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
// Do not patronize me, when are you going to move the scientists to the Research Facility?\n
const char *conv_name = ("M06_CON051");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN - 5);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101008), conv_id, false, true);
Commands->Start_Conversation (conv_id, 300123);
Commands->Monitor_Conversation (obj, conv_id);
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
if((action_id == 300123 && reason == ACTION_COMPLETE_CONVERSATION_ENDED) || (action_id == 300123 && reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
{
// Kane conversation with Havoc
const char *conv_name = ("M06_CON064");
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN + 5);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300124);
Commands->Monitor_Conversation (obj, conv_id);
}
if((action_id == 300124 && reason == ACTION_COMPLETE_CONVERSATION_ENDED) || (action_id == 300124 && reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
{
Commands->Destroy_Object(obj);
}
}
};
DECLARE_SCRIPT(M06_Enable_Officers_Mess, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on courtyard units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101374), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101375), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101374), M06_START_CONVERSATION, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101376), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101377), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101378), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101379), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101380), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101381), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101382), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Officers_Mess_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101375))
{
// It is the electromagnetic system that revolutionizes it.\n
const char *conv_name = ("M06_CON052");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101375), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Courtyard_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101384) && Commands->Find_Object(101385))
{
// Both of you have proven yourself loyal, and as such I feel you are prime candidates for a very sensitive mission.\n
const char *conv_name = ("M06_CON053");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101384), conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101385), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_Courtyard, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on courtyard units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101383), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101384), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101385), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101383), M06_START_CONVERSATION, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101386), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101387), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101388), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101389), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101390), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Bathroom, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on north barracks units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101391), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101393), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101393), M06_START_CONVERSATION, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101394), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101395), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Enable_Barracks_Mess, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on north barracks units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101502), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101503), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101502), M06_START_CONVERSATION, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101504), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101505), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101506), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101507), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101508), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_Barracks_Mess_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101503))
{
// Put it over there, and don't slop it around.\n
const char *conv_name = ("M06_CON054");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101503), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Bathroom_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101391))
{
// Man, this new chem suit insulation itches something awful.\n
const char *conv_name = ("M06_CON055");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101391), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_South_Barracks, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on barracks units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101399), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101400), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101403), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Send custom to activate conversation
Commands->Send_Custom_Event(obj, Commands->Find_Object(101400), M06_START_CONVERSATION, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101401), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101402), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_South_Barracks_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
if(type == M06_START_CONVERSATION)
{
if(Commands->Find_Object(101399))
{
// I just don't get it, we are finely trained soldiers. What do we need mercs for?\n
const char *conv_name = ("M06_CON056");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Join_Conversation(Commands->Find_Object(101399), conv_id, false, true);
Commands->Start_Conversation (conv_id, 10);
Commands->Monitor_Conversation (obj, conv_id);
}
}
}
};
DECLARE_SCRIPT(M06_Enable_North_Barracks, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Activate innate on barracks units
Commands->Send_Custom_Event (obj, Commands->Find_Object(101396), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101397), M06_CUSTOM_ACTIVATE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101398), M06_CUSTOM_ACTIVATE, 1, 0.0f);
// Disable zones
Commands->Send_Custom_Event (obj, Commands->Find_Object(101500), M06_DISABLE_ZONE, 1, 0.0f);
Commands->Send_Custom_Event (obj, Commands->Find_Object(101501), M06_DISABLE_ZONE, 1, 0.0f);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_DISABLE_ZONE)
{
already_entered = true;
}
}
};
DECLARE_SCRIPT(M06_North_Barracks_Unit, "")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( soldier_id, 1 );
}
void Created (GameObject * obj)
{
Commands->Innate_Disable(obj);
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
ActionParamsStruct params;
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
Commands->Innate_Enable(obj);
}
}
};
DECLARE_SCRIPT (M06_Courtyard_Apache, "")
{
bool out_of_range;
enum {COURTYARD};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( out_of_range, 1 );
}
void Created (GameObject *obj)
{
ActionParamsStruct params;
params.Set_Basic( this, 100, COURTYARD );
params.Set_Movement( Vector3(0,0,0), 1.0f, 2.0f );
params.WaypathID = 101428;
params.WaypathSplined = true;
Commands->Action_Goto( obj, params );
}
void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason reason ) //this is called when the servant reaches the destination location.
{
ActionParamsStruct params;
if (action_id == COURTYARD && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, 100, COURTYARD );
params.Set_Movement( Vector3(0,0,0), 1.0f, 2.0f );
params.Set_Attack (STAR, 150.0f, 1.0f, 1);
params.WaypathID = 101428;
params.WaypathSplined = true;
Commands->Action_Attack( obj, params );
}
if (action_id == COURTYARD && reason == ACTION_COMPLETE_ATTACK_OUT_OF_RANGE)
{
out_of_range = true;
}
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
if(out_of_range)
{
ActionParamsStruct params;
out_of_range = false;
params.Set_Basic( this, 100, COURTYARD );
params.Set_Movement( Vector3(0,0,0), 1.0f, 2.0f );
params.Set_Attack (STAR, 150.0f, 1.0f, 1);
params.WaypathID = 101428;
params.WaypathSplined = true;
Commands->Action_Attack( obj, params );
}
}
};
DECLARE_SCRIPT(M06_Flyover_Controller, "") // 100018
{
int last;
bool flyovers;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( last, 1 );
SAVE_VARIABLE( flyovers, 2 );
}
void Created(GameObject * obj)
{
last = 0;
flyovers = true;
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), M06_FLYOVER_COMPLETE, 1, 0.0f);
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
ActionParamsStruct params;
if(type == M06_FLYOVER_COMPLETE && flyovers)
{
last = param;
char *flyovers[11] =
{
"M06_XG_VehicleDrop0.txt",
"M06_XG_VehicleDrop1.txt",
"M06_XG_VehicleDrop2.txt",
"X6A_Apache_03.txt",
"X6A_Apache_04.txt",
"X6A_Apache_05.txt",
"X6A_Apache_06.txt",
"X6A_Apache_07.txt",
"X6A_Apache_08.txt",
"X6A_Apache_09.txt",
"M06_XG_EV2_1.txt",
};
int random = Get_Int_Random(0, 10);
while(random == last)
{
random = Get_Int_Random(0, 10);
}
switch(random)
{
case 1:
case 2:
case 3:
case 10:
{
GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(-44.177f, 30.547f, 1.605f));
Commands->Set_Facing(controller, 0.000f);
Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]);
}
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
{
GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]);
}
break;
}
}
if(type == M06_ACTIVATE_FLYOVERS)
{
if(param == 1 && !flyovers)
{
flyovers = true;
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), M06_FLYOVER_COMPLETE, 1, 0.0f);
}
else if (param == 0 && flyovers)
{
flyovers = false;
}
}
}
};
DECLARE_SCRIPT(M06_Activate_Flyovers, "Active=0:int")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
bool active = (Get_Int_Parameter("Active") == 1) ? true : false;
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), M06_ACTIVATE_FLYOVERS, active, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Flyover, "Flyover_ID=0:int")
{
int flyover_id;
void Created( GameObject * obj )
{
Commands->Disable_Physical_Collisions ( obj );
flyover_id = Get_Int_Parameter("Flyover_ID");
}
void Destroyed(GameObject * obj)
{
Commands->Send_Custom_Event(obj, Commands->Find_Object(100018), M06_FLYOVER_COMPLETE, flyover_id, 0.0f);
}
};
DECLARE_SCRIPT(M06_Drop_Thunder_Squad, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// This is Nod Helo Delta 14. We are hot dropping a squad of Black Hand at your doorstep, be advised they are on the ground only long enough to re-equip, skip the standard check in. Raveshaw's orders.\n
const char *conv_name = ("M06_CON057");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(NULL, conv_id, true, true);
Commands->Join_Conversation(STAR, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300603);
Commands->Monitor_Conversation (obj, conv_id);
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(-55.305f, -87.235f, -0.767f));
Commands->Set_Facing(chinook_obj, 85.000f);
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "X6I_TroopDrop1.txt");
}
}
};
DECLARE_SCRIPT(M06_Thunder_Unit, "")
{
enum{WAYPATH};
void Created( GameObject * obj )
{
ActionParamsStruct params;
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, WAYPATH );
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
params.WaypathID = 101520;
Commands->Action_Goto( obj, params );
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
if(action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
{
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2.0f);
}
}
void Killed (GameObject * obj, GameObject * killer)
{
Vector3 powerup_loc = Commands->Get_Position(obj);
Commands->Create_Object("POW_RocketLauncher_Player", powerup_loc);
}
};
DECLARE_SCRIPT(M06_Servant_Behavior, "Loc1_ID=0:int, Loc2_ID=0:int, Loc3_ID=0:int, Animation=S_A_HUMAN.H_A_A0F0:string")
{
bool enemy_seen;
enum{GO_FIRST_LOC, FACING_FIRST_LOC, ANIMATE_FIRST_LOC, GO_SECOND_LOC, FACING_SECOND_LOC, ANIMATE_SECOND_LOC,
GO_THIRD_LOC, FACING_THIRD_LOC, ANIMATE_THIRD_LOC, HANDS_OVER_HEAD, START_OVER};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( enemy_seen, 1 );
}
void Created (GameObject * obj)
{
ActionParamsStruct params;
enemy_seen = false;
params.Set_Basic (this, INNATE_PRIORITY_ENEMY_SEEN - 5, GO_FIRST_LOC);
params.Set_Movement (Commands->Find_Object(Get_Int_Parameter("Loc1_ID")), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
ActionParamsStruct params;
const char *anim = Get_Parameter("Animation");
// First Loc
if(action_id == GO_FIRST_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, FACING_FIRST_LOC);
params.Set_Face_Location( Commands->Get_Position(Commands->Find_Object(Get_Int_Parameter("Loc1_ID"))), 1.5f);
Commands->Action_Face_Location ( obj, params );
}
if(action_id == FACING_FIRST_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, ANIMATE_FIRST_LOC );
params.Set_Animation (anim, false);
Commands->Action_Play_Animation (obj, params);
}
if(action_id == ANIMATE_FIRST_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), GO_SECOND_LOC);
params.Set_Movement (Commands->Find_Object(Get_Int_Parameter("Loc2_ID")), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
// Second Loc
if(action_id == GO_SECOND_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, FACING_SECOND_LOC);
params.Set_Face_Location( Commands->Get_Position(Commands->Find_Object(Get_Int_Parameter("Loc2_ID"))), 1.5f);
Commands->Action_Face_Location ( obj, params );
}
if(action_id == FACING_SECOND_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, ANIMATE_SECOND_LOC );
params.Set_Animation (anim, false);
Commands->Action_Play_Animation (obj, params);
}
if(action_id == ANIMATE_SECOND_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), GO_THIRD_LOC);
params.Set_Movement (Commands->Find_Object(Get_Int_Parameter("Loc3_ID")), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
// Third Loc
if(action_id == GO_THIRD_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, FACING_THIRD_LOC);
params.Set_Face_Location( Commands->Get_Position(Commands->Find_Object(Get_Int_Parameter("Loc3_ID"))), 1.5f);
Commands->Action_Face_Location ( obj, params );
}
if(action_id == FACING_THIRD_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, ANIMATE_THIRD_LOC );
params.Set_Animation (anim, false);
Commands->Action_Play_Animation (obj, params);
}
if(action_id == ANIMATE_THIRD_LOC && reason == ACTION_COMPLETE_NORMAL)
{
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), GO_FIRST_LOC);
params.Set_Movement (Commands->Find_Object(Get_Int_Parameter("Loc1_ID")), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
if(action_id == HANDS_OVER_HEAD && reason == ACTION_COMPLETE_NORMAL)
{
// In hands over head anim
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10);
params.Set_Animation( "H_A_HOST_L1B", true );
Commands->Action_Play_Animation (obj, params);
}
}
void Enemy_Seen(GameObject * obj, GameObject *enemy )
{
ActionParamsStruct params;
Commands->Create_Logical_Sound(obj, SOUND_TYPE_GUNSHOT, Commands->Get_Position(obj), 8.0f);
if(!enemy_seen)
{
// Help! Intruder! Help!\n
const char *conv_name = ("M06_CON058");
int conv_id = Commands->Create_Conversation (conv_name);
Commands->Join_Conversation(obj, conv_id, false, true);
Commands->Start_Conversation (conv_id, 1010211);
// Assume hands over head anim
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, HANDS_OVER_HEAD);
params.Set_Animation( "H_A_HOST_L1A", false );
Commands->Action_Play_Animation (obj, params);
Commands->Start_Timer (obj, this, 20.0f, START_OVER);
enemy_seen = true;
}
}
void Timer_Expired(GameObject * obj, int timer_id )
{
ActionParamsStruct params;
if(timer_id == START_OVER)
{
enemy_seen = false;
// Exit hands over head anim
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10);
params.Set_Animation( "H_A_HOST_L1C", false );
Commands->Action_Play_Animation (obj, params);
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), GO_FIRST_LOC);
params.Set_Movement (Commands->Find_Object(Get_Int_Parameter("Loc1_ID")), WALK, 1.5f);
Commands->Action_Goto (obj, params);
}
}
};
DECLARE_SCRIPT(M06_Move_Sydney, "Move_Loc=0:int")
{
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
// SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
}
void Entered (GameObject * obj, GameObject * enterer)
{
if (Commands->Is_A_Star(enterer))
{
int move_loc = Get_Int_Parameter("Move_Loc");
Commands->Send_Custom_Event(obj, Commands->Find_Object(101010), M06_MOVE_SYDNEY, move_loc, 0.0f);
}
}
};
DECLARE_SCRIPT(M06_Collapse_Zone, "Zone_ID=0:int")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = true;
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CHATEAU_COLLAPSE)
{
already_entered = false;
}
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
switch(Get_Int_Parameter("Zone_ID"))
{
// First section of crypt, immediately past the lab door
case 1:
{
GameObject * l6_falldust01 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust01, "L6_falldust01" );
GameObject * l6_falldust02 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust02, "L6_falldust02" );
GameObject * l6_fallrocks01 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks01, "L6_fallrocks01" );
GameObject * l6_fallrocks07 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks07, "L6_fallrocks07" );
GameObject * l6_fallrocks08 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks08, "L6_fallrocks08" );
}
break;
// Back section of crypt, right before you exit out to the stairs up to Chateau
case 2:
{
GameObject * l6_fallrocks09 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks09, "L6_fallrocks09" );
GameObject * l6_fallrocks11 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks11, "L6_fallrocks11" );
GameObject * l6_fallrocks10 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks10, "L6_fallrocks10" );
GameObject * l6_fallfire01 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallfire01, "L6_fallfire01" );
Commands->Set_Animation(l6_fallfire01, "L6_Fallfire01.L6_Fallfire01", true);
GameObject * l6_floorfire01 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_floorfire01, "L6_floorfire01" );
Commands->Set_Animation(l6_floorfire01, "L6_floorfire01.L6_floorfire01", true);
}
break;
// Staircase leading out of crypt and hallway immediately up that staircase
case 3:
{
GameObject * l6_falldust03 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust03, "L6_falldust03" );
GameObject * l6_fallrocks12 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks12, "L6_fallrocks12" );
GameObject * l6_fallfire02 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallfire02, "L6_fallfire02" );
Commands->Set_Animation(l6_fallfire02, "L6_Fallfire02.L6_Fallfire02", true);
GameObject * l6_floorfire02 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_floorfire02, "L6_floorfire02" );
Commands->Set_Animation(l6_floorfire02, "L6_floorfire02.L6_floorfire02", true);
GameObject * l6_falldust04 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust04, "L6_falldust04" );
}
break;
// Hallway at the top of the staircase leading from crypt, immediately before wooden beam mess hall
case 4:
{
GameObject * l6_fallrocks02 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks02, "L6_fallrocks02" );
GameObject * l6_falldust05 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust05, "L6_falldust05" );
}
break;
// Large mess hall with wooden beams supporting the ceiling
case 5:
{
GameObject * l6_fallwood02 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood02, "L6_fallwood02" );
GameObject * l6_fallwood03 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood03, "L6_fallwood02" );
GameObject * l6_fallrocks03 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks03, "L6_fallrocks03" );
GameObject * l6_fallwood04 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood04, "L6_fallwood04" );
GameObject * l6_falldust10 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust10, "L6_falldust10" );
GameObject * l6_falldust06 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust06, "L6_falldust06" );
GameObject * l6_falldust21 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust21, "L6_falldust21" );
GameObject * l6_falldust07 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust07, "L6_falldust07" );
}
break;
// Staircase leading out of mess and into main artwork area
case 6:
{
GameObject * l6_falldust08 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust08, "L6_falldust08" );
GameObject * l6_fallfire03 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallfire03, "L6_fallfire03" );
Commands->Set_Animation(l6_fallfire03, "L6_Fallfire03.L6_Fallfire03", true);
GameObject * l6_falldust09 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust09, "L6_falldust09" );
GameObject * l6_falldust11 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust11, "L6_falldust11" );
}
break;
// Columned room
case 7:
{
GameObject * l6_fallwood05 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood05, "L6_fallwood05" );
GameObject * l6_fallrocks05 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks05, "L6_fallrocks05" );
GameObject * l6_fallwood06 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood06, "L6_fallwood06" );
GameObject * l6_fallrocks06 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallrocks06, "L6_fallrocks06" );
GameObject * l6_falldust17 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust17, "L6_falldust17" );
GameObject * l6_floorfire06 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_floorfire06, "L6_floorfire06" );
Commands->Set_Animation(l6_floorfire06, "L6_floorfire06.L6_floorfire06", true);
GameObject * l6_falldust18 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust18, "L6_falldust18" );
}
break;
// Master staircase
case 8:
{
GameObject * l6_fallwood07 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood07, "L6_fallwood07" );
GameObject * l6_falldust12 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust12, "L6_falldust12" );
GameObject * l6_falldust13 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust13, "L6_falldust13" );
GameObject * l6_falldust16 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust16, "L6_falldust16" );
GameObject * l6_floorfire04 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_floorfire04, "L6_floorfire04" );
Commands->Set_Animation(l6_floorfire04, "L6_floorfire04.L6_floorfire04", true);
GameObject * l6_floorfire05 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_floorfire05, "L6_floorfire05" );
Commands->Set_Animation(l6_floorfire05, "L6_floorfire04.L6_floorfire05", true);
GameObject * l6_falldust15 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust15, "L6_falldust15" );
GameObject * l6_fallfire05 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallfire05, "L6_fallfire05" );
Commands->Set_Animation(l6_fallfire05, "L6_Fallfire05.L6_Fallfire05", true);
GameObject * l6_falldust14 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust14, "L6_falldust14" );
}
break;
// Escape hall and outside room
case 9:
{
GameObject * l6_falldust19 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust19, "L6_falldust19" );
GameObject * l6_falldust20 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust20, "L6_falldust20" );
GameObject * l6_falldust22 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust22, "L6_falldust22" );
GameObject * l6_fallwood08 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_fallwood08, "L6_fallwood08" );
GameObject * l6_falldust23 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust23, "L6_falldust23" );
GameObject * l6_falldust24 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust24, "L6_falldust24" );
GameObject * l6_falldust25 = Commands->Create_Object("Invisible_Object", Vector3(0.0f, 0.0f, 0.0f) );
Commands->Set_Model ( l6_falldust25, "L6_falldust25" );
}
break;
}
}
}
};
DECLARE_SCRIPT(M06_Activate_MidtroC, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = true;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Commands->Send_Custom_Event (obj, Commands->Find_Object(101010), 100, 100, 0.0f);
// Block for Mendoza arena
GameObject *crate28 = Commands->Create_Object("X6_Rubble2", Vector3(-49.309f, 1.010f, -0.016f));
Commands->Set_Facing( crate28, 140.000f );
GameObject *crate29 = Commands->Create_Object("X6_Rubble2", Vector3(-50.727f, 0.514f, -0.020f));
Commands->Set_Facing( crate29, 5.000f );
GameObject *crate30 = Commands->Create_Object("X6_Rubble1", Vector3(-11.987f, 8.771f, 0.000f));
Commands->Set_Facing( crate30, 90.000f );
GameObject *crate1 = Commands->Create_Object("X6_Rubble5", Vector3(-6.280f, 9.196f, 0.000f));
Commands->Set_Facing( crate1, 50.000f );
GameObject *crate2 = Commands->Create_Object("X6_Rubble5", Vector3(-5.988f, 7.571f, -0.010f));
Commands->Set_Facing( crate2, 135.000f );
Vector3 havoc_loc = Commands->Get_Position (STAR);
havoc_loc.Z += 7.0f;
Commands->Set_Position (STAR, havoc_loc );
GameObject * sydney = Commands->Find_Object(101010);
Vector3 sydney_loc = Commands->Get_Position (sydney);
havoc_loc.Z += 7.0f;
Commands->Set_Position (sydney, sydney_loc );
GameObject * cinematic_obj = Commands->Create_Object ( "Invisible_Object", Vector3(0.0f, 0.0f, 0.0f));
Commands->Attach_Script(cinematic_obj, "Test_Cinematic", "X6C_MIDTRO.txt");
// Take key to the barracks away from Havoc so that Mendoza will not follow him in and get stuck
Commands->Grant_Key (STAR, 9, false);
}
}
void Custom (GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M06_CUSTOM_ACTIVATE)
{
already_entered = false;
}
}
};
DECLARE_SCRIPT (M06_Clear_For_Mendoza, "")
{
bool open;
const char * anim;
void Created (GameObject * obj)
{
}
void Sound_Heard(GameObject* obj, const CombatSound & sound)
{
if ( sound.Type == M06_CLEAR_FOR_MENDOZA )
{
Commands->Destroy_Object(obj);
}
}
};
DECLARE_SCRIPT(M06_DataDisc_01_DLS, "")//
{
void Custom( GameObject * obj, int type, int param, GameObject * sender )
{
if ( type == CUSTOM_EVENT_POWERUP_GRANTED )
{
// Reveal Mutant Templar
bool reveal = Commands->Reveal_Encyclopedia_Character(28);
if ( reveal == 1 )
{
Commands->Display_Encyclopedia_Event_UI();
}
}
}
};
DECLARE_SCRIPT(M06_Enable_Alarm_Objective, "")
{
bool already_entered;
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( already_entered, 1 );
}
void Created (GameObject * obj)
{
already_entered = false;
}
void Entered (GameObject * obj, GameObject * enterer)
{
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
{
already_entered = true;
// Warning: Nod Security Measures Detected.
const char *conv_name = ("M06_CON060");
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
Commands->Join_Conversation(NULL, conv_id, false, true);
Commands->Start_Conversation (conv_id, 300609);
Commands->Monitor_Conversation (obj, conv_id);
}
}
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
{
if(action_id == 300609 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
{
// Deactivate alarm system
Commands->Send_Custom_Event (obj, Commands->Find_Object(100018), 609, 3, 0.0f);
}
}
};