/* ** 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 * Mission04.cpp * * DESCRIPTION * Mission 4 scripts * * PROGRAMMER * Design Team * * VERSION INFO * $Author: Joe_g $ * $Revision: 122 $ * $Modtime: 2/12/02 10:10a $ * $Archive: /Commando/Code/Scripts/Mission04.cpp $ * ******************************************************************************/ #include "scripts.h" #include #include "toolkit.h" #include "mission1.h" #include "mission11.h" DECLARE_SCRIPT(M04_Objective_Controller_JDG, "")//this guys ID number is M04_OBJECTIVE_CONTROLLER_JDG 100424 { int missile_01_sabotaged; int missile_02_sabotaged; int missile_03_sabotaged; int missile_04_sabotaged; int number_missiles_sabotaged; bool missile_primary_active; int torpedo_01_sabotaged; int torpedo_02_sabotaged; int number_torpedos_sabotaged; bool torpedo_primary_active; int engine_room_01_sabotaged; int engine_room_02_sabotaged; int engine_room_03_sabotaged; int engine_room_04_sabotaged; int number_engines_sabotaged; int announce_prisoner_objective; bool prisoner_primary_active; int announce_first_mate_objective; bool first_mate_primary_active; int announce_captain_objective; bool captain_primary_active; int announce_engine_room_objective; int announce_missile_room_objective; int announce_torpedo_room_objective; int announce_apache_objective; int announce_get_back_to_sub; int completed_prisoner_rescue; int completed_first_mate_objective; int completed_captain_objective; int completed_engine_room_objective; int completed_missile_room_objective; int completed_torpedo_room_objective; int completed_apache_objective; bool mission_started; int attach_havocs_script; int announce_prison_guard_objective; //int tell_where_guard_is; int completed_get_the_key; //new stuff int protectPOWsConv; int missionIntroConv; int missileConv; int engineIntroConv; int prisonKeyIntroConv; int medlab_conv; int firstmateConv; bool first_mate_primary_triggered; REGISTER_VARIABLES() { SAVE_VARIABLE( missile_01_sabotaged, 1 ); SAVE_VARIABLE( missile_02_sabotaged, 2 ); SAVE_VARIABLE( missile_03_sabotaged, 3 ); SAVE_VARIABLE( missile_04_sabotaged, 4 ); SAVE_VARIABLE( number_missiles_sabotaged, 5 ); SAVE_VARIABLE( missile_primary_active, 6 ); SAVE_VARIABLE( torpedo_01_sabotaged, 7 ); SAVE_VARIABLE( torpedo_02_sabotaged, 8 ); SAVE_VARIABLE( number_torpedos_sabotaged, 9 ); SAVE_VARIABLE( torpedo_primary_active, 10 ); SAVE_VARIABLE( engine_room_01_sabotaged, 11 ); SAVE_VARIABLE( engine_room_02_sabotaged, 12 ); SAVE_VARIABLE( engine_room_03_sabotaged, 13 ); SAVE_VARIABLE( engine_room_04_sabotaged, 14 ); SAVE_VARIABLE( number_engines_sabotaged, 15 ); SAVE_VARIABLE( announce_prisoner_objective, 16 ); SAVE_VARIABLE( prisoner_primary_active, 17 ); SAVE_VARIABLE( announce_first_mate_objective, 18 ); SAVE_VARIABLE( first_mate_primary_active, 19 ); SAVE_VARIABLE( announce_captain_objective, 20 ); SAVE_VARIABLE( captain_primary_active, 21 ); SAVE_VARIABLE( announce_engine_room_objective, 22 ); SAVE_VARIABLE( announce_missile_room_objective, 23 ); SAVE_VARIABLE( announce_torpedo_room_objective, 24 ); SAVE_VARIABLE( announce_apache_objective, 25 ); SAVE_VARIABLE( announce_get_back_to_sub, 26 ); SAVE_VARIABLE( completed_prisoner_rescue, 27 ); SAVE_VARIABLE( completed_first_mate_objective, 28 ); SAVE_VARIABLE( completed_captain_objective, 29 ); SAVE_VARIABLE( completed_engine_room_objective, 30 ); SAVE_VARIABLE( completed_missile_room_objective, 31 ); SAVE_VARIABLE( completed_torpedo_room_objective, 32 ); SAVE_VARIABLE( completed_apache_objective, 33 ); SAVE_VARIABLE( mission_started, 34 ); SAVE_VARIABLE( attach_havocs_script, 35 ); SAVE_VARIABLE( announce_prison_guard_objective, 36 ); SAVE_VARIABLE( firstmateConv, 37 ); SAVE_VARIABLE( completed_get_the_key, 38 ); SAVE_VARIABLE( protectPOWsConv, 39 );// SAVE_VARIABLE( missionIntroConv, 40 ); SAVE_VARIABLE( missileConv, 41 ); SAVE_VARIABLE( engineIntroConv, 42 ); SAVE_VARIABLE( prisonKeyIntroConv, 43 ); SAVE_VARIABLE( medlab_conv, 44 ); SAVE_VARIABLE( firstmateConv, 45 ); SAVE_VARIABLE( first_mate_primary_triggered, 46 ); } void Created( GameObject * obj ) { /********************************************************************************************************** The following are the custom parameter number values used to control objectives in mission 04 ***********************************************************************************************************/ missile_01_sabotaged = 100; missile_02_sabotaged = 110; missile_03_sabotaged = 120; missile_04_sabotaged = 130; number_missiles_sabotaged = 0; missile_primary_active = false; torpedo_01_sabotaged = 200; torpedo_02_sabotaged = 210; number_torpedos_sabotaged = 0; torpedo_primary_active = false; engine_room_01_sabotaged = 300; engine_room_02_sabotaged = 310; engine_room_03_sabotaged = 320; engine_room_04_sabotaged = 330; number_engines_sabotaged = 0; announce_prisoner_objective = 400; announce_prison_guard_objective = 401; //tell_where_guard_is = 402; prisoner_primary_active = false; announce_first_mate_objective = 410; first_mate_primary_active = false; first_mate_primary_triggered = false; announce_captain_objective = 420; captain_primary_active = false; announce_engine_room_objective = 430; announce_missile_room_objective = 440; announce_torpedo_room_objective = 450; announce_apache_objective = 460; announce_get_back_to_sub = 470; completed_prisoner_rescue = 500; completed_first_mate_objective = 510; completed_captain_objective = 520; completed_engine_room_objective = 530; completed_missile_room_objective = 540; completed_torpedo_room_objective = 550; completed_apache_objective = 560; completed_get_the_key = 590; mission_started = false; attach_havocs_script = 600; Commands->Send_Custom_Event( obj, obj, 0, announce_prisoner_objective, 3 ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: // { if (action_id == missionIntroConv) //rescue prisoners here { Commands->Debug_Message ( "**********************mission start conversation over--sending custom\n" ); Commands->Send_Custom_Event( obj, obj, 0, 1, 0 ); Commands->Add_Objective( 100, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_01, NULL, IDS_Enc_Obj_Primary_M04_01 ); Commands->Add_Radar_Marker ( 101, Commands->Get_Position( Commands->Find_Object ( M04_PRISON_PRISONER_01_JDG )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Add_Radar_Marker ( 102, Commands->Get_Position( Commands->Find_Object ( M04_PRISON_PRISONER_02_JDG )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Add_Radar_Marker ( 103, Commands->Get_Position( Commands->Find_Object ( M04_PRISON_PRISONER_03_JDG )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Vector3 prisoner01_position = Commands->Get_Position ( Commands->Find_Object ( M04_PRISON_PRISONER_01_JDG ) ); Commands->Set_Objective_HUD_Info_Position( 100, 90, "POG_M04_1_01.tga", IDS_POG_RESCUE, prisoner01_position ); } else if (action_id == missileConv) //sabotage missile racks M04_Add_MissileRoom_Objective_Conversation_02 { //Commands->Send_Custom_Event( obj, obj, 0, 1, 2 ); //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); Commands->Add_Objective( 300, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_03, NULL, IDS_Enc_Obj_Primary_M04_03 ); GameObject * missile_target01 = Commands->Find_Object ( 100421 ); GameObject * missile_target02 = Commands->Find_Object ( 100422 ); GameObject * missile_target03 = Commands->Find_Object ( 100423 ); GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (missile_target01 != NULL) { Commands->Send_Custom_Event( obj, missile_target01, 0, M01_START_ACTING_JDG, 0 ); } if (missile_target02 != NULL) { Commands->Send_Custom_Event( obj, missile_target02, 0, M01_START_ACTING_JDG, 0 ); } if (missile_target03 != NULL) { Commands->Send_Custom_Event( obj, missile_target03, 0, M01_START_ACTING_JDG, 0 ); } if (missile_target04 != NULL) { Commands->Send_Custom_Event( obj, missile_target04, 0, M01_START_ACTING_JDG, 0 ); } /*int missileConv02 = Commands->Create_Conversation( "M04_Add_MissileRoom_Objective_Conversation_02", 100, 1000, false); Commands->Join_Conversation( NULL, missileConv02, false, false ); Commands->Start_Conversation( missileConv02, missileConv02 );*/ GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, 300, 0 ); } } else if (action_id == engineIntroConv) //destroy engine terminals { //Commands->Send_Custom_Event( obj, obj, 0, 1, 2 ); Commands->Add_Objective( 200, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M04_02, NULL, IDS_Enc_Obj_Secondary_M04_02 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, 200, 0 ); } GameObject * target01 = Commands->Find_Object ( M04_ENGINEROOM_TARGET_01_JDG ); GameObject * target02 = Commands->Find_Object ( M04_ENGINEROOM_TARGET_02_JDG ); GameObject * target03 = Commands->Find_Object ( M04_ENGINEROOM_TARGET_03_JDG ); GameObject * target04 = Commands->Find_Object ( M04_ENGINEROOM_TARGET_04_JDG ); if (target01 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( target01, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( target01, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } if (target02 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( target02, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( target02, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } if (target03 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( target03, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( target03, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } if (target04 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( target04, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( target04, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } } else if (action_id == prisonKeyIntroConv) //get prison key from guard { Commands->Add_Objective( 110, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_02, NULL, IDS_Enc_Obj_Primary_M04_02 ); medlab_conv = Commands->Create_Conversation( "M04_Eva_Tells_Where_Guard_Is", 100, 100, false); Commands->Join_Conversation( NULL, medlab_conv, false, true ); Commands->Start_Conversation( medlab_conv, medlab_conv ); Commands->Monitor_Conversation (obj, medlab_conv); } else if (action_id == medlab_conv) //get prison key from guard { GameObject * warden = Commands->Find_Object ( M04_PRISON_WARDEN_JDG ); if (warden != NULL) { Vector3 wardenLocation = Commands->Get_Position(warden ); Commands->Add_Radar_Marker ( 111, wardenLocation, RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Set_Objective_HUD_Info_Position( 110, 92, "POG_M04_1_02.tga", IDS_POG_ACQUIRE, wardenLocation ); }// } else if (action_id == firstmateConv) //get level 2 key from first mate protectPOWsConv { Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); Commands->Add_Objective( 600, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_07, NULL, IDS_Enc_Obj_Primary_M04_07 ); Commands->Add_Radar_Marker ( 601, Commands->Get_Position( Commands->Find_Object ( M04_SHIPS_FIRST_MATE_JDG )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, obj, 0, 1, 2 );//this sets a small delay before havoc responds GameObject * firstmate = Commands->Find_Object ( M04_SHIPS_FIRST_MATE_JDG ); if (firstmate != NULL) { Vector3 firstmateLocation = Commands->Get_Position(firstmate); Commands->Set_Objective_HUD_Info_Position( 600, 93, "POG_M04_1_07.tga", IDS_POG_ACQUIRE, firstmateLocation ); } } else if (action_id == protectPOWsConv) //give protect prisoner objective { Commands->Add_Objective( 800, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_06, NULL, IDS_Enc_Obj_Primary_M04_06 ); Commands->Add_Radar_Marker ( 801, Vector3 (2.55f, -5.29f, -16.96f), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Vector3 subLocation (-0.401f, 3.878f, -8.850f); Commands->Set_Objective_HUD_Info_Position( 800, 99, "POG_M04_1_06.tga", IDS_POG_PROTECT, subLocation ); } } break; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { /********************************************************************************************************** The following are params for when the individual objectives are activated and announced ***********************************************************************************************************/ if (type == 0) { if (param == 1)//this will play a twiddler of Havoc accepting the objective { Commands->Debug_Message ( "**********************controller should be playing havoc affirmative twiddler now\n" ); Vector3 playerPosition = Commands->Get_Position (STAR); Commands->Create_Sound ( "M04_Havoc_Affirmative_Twiddler", playerPosition, obj); } else if (param == 2)//this will play a twiddler of Havoc having finished the objective { //Commands->Create_Sound ( "Havoc Finished Objective Twiddler", Vector3 (0,0,0), obj); } else if (param == announce_prisoner_objective) { Commands->Debug_Message ( "**********************starting mission start conversation\n" ); missionIntroConv = Commands->Create_Conversation( "M04_Mission_Start_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missionIntroConv, false, false ); ///Commands->Join_Conversation( STAR, missionIntroConv, false, false ); Commands->Start_Conversation( missionIntroConv, missionIntroConv ); Commands->Monitor_Conversation (obj, missionIntroConv); prisoner_primary_active = true; //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); //Commands->Send_Custom_Event( obj, obj, 0, 1, 2 );//this sets a small delay before havoc responds mission_started = true; //Commands->Send_Custom_Event( obj, obj, 0, attach_havocs_script, 0 ); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 0, 0 ); } } else if (param == announce_prison_guard_objective) { prisonKeyIntroConv = Commands->Create_Conversation( "M04_Add_PrisonKey_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, prisonKeyIntroConv, false, false ); Commands->Start_Conversation( prisonKeyIntroConv, prisonKeyIntroConv ); Commands->Monitor_Conversation (obj, prisonKeyIntroConv); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 2, 0 ); } //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); Commands->Send_Custom_Event( obj, obj, 0, 1, 2 );//this sets a small delay before havoc responds //Commands->Send_Custom_Event( obj, obj, 0, tell_where_guard_is, 5 ); } /*else if (param == attach_havocs_script) { if (STAR) { Commands->Attach_Script(STAR, "M04_Havocs_Script_JDG", ""); } else { Commands->Send_Custom_Event( obj, obj, 0, attach_havocs_script, 1 ); } }*/ else if (param == announce_engine_room_objective) { engineIntroConv = Commands->Create_Conversation( "M04_Add_EngineRoom_Objective_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, engineIntroConv, false, false ); //Commands->Join_Conversation( STAR, engineIntroConv, false, false ); Commands->Start_Conversation( engineIntroConv, engineIntroConv ); Commands->Monitor_Conversation (obj, engineIntroConv); } else if (param == announce_missile_room_objective)// { missileConv = Commands->Create_Conversation( "M04_Add_MissileRoom_Objective_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missileConv, false, false ); Commands->Start_Conversation( missileConv, missileConv ); Commands->Monitor_Conversation (obj, missileConv); missile_primary_active = true; GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 1, 0 ); } } else if (param == announce_torpedo_room_objective) { torpedo_primary_active = true; //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); Commands->Add_Objective( 400, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_04, NULL, IDS_Enc_Obj_Primary_M04_04 ); Commands->Add_Radar_Marker ( 401, Commands->Get_Position( Commands->Find_Object ( 100409 )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Add_Radar_Marker ( 402, Commands->Get_Position( Commands->Find_Object ( 100410 )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, obj, 0, 1, 2 );//this sets a small delay before havoc responds GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 5, 0 ); } } else if (param == announce_apache_objective) { Commands->Create_Sound ( "00-n042e", Vector3 (0,0,0), obj); Commands->Add_Objective( 500, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M04_03, NULL, IDS_Enc_Obj_Secondary_M04_03 ); Commands->Set_Objective_Radar_Blip_Object(500, sender ); Commands->Set_Objective_HUD_Info( 500, 95, "POG_M04_2_02.tga", IDS_POG_DESTROY ); } else if (param == announce_first_mate_objective && first_mate_primary_active != true && first_mate_primary_triggered == false)// { first_mate_primary_triggered = true; first_mate_primary_active = true; firstmateConv = Commands->Create_Conversation( "M04_Add_FirstMate_Objective_JDG", 100, 1000, false); Commands->Join_Conversation( NULL, firstmateConv, false, false ); Commands->Start_Conversation( firstmateConv, firstmateConv ); Commands->Monitor_Conversation (obj, firstmateConv); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 3, 0 ); } } else if (param == announce_captain_objective)//M04_Add_Captains_Key_Objective_Conversation { int captainConv = Commands->Create_Conversation( "M04_Add_Captains_Key_Objective_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, captainConv, false, false ); Commands->Start_Conversation( captainConv, captainConv ); captain_primary_active = true; //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); Commands->Add_Objective( 700, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M04_05, NULL, IDS_Enc_Obj_Primary_M04_05 ); Commands->Add_Radar_Marker ( 701, Commands->Get_Position( Commands->Find_Object ( M04_SHIPS_CAPTAIN_JDG )), RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, obj, 0, 1, 4 );//this sets a small delay before havoc responds GameObject * captain = Commands->Find_Object ( M04_SHIPS_CAPTAIN_JDG ); if (captain != NULL) { Vector3 captainLocation = Commands->Get_Position(captain); Commands->Set_Objective_HUD_Info_Position( 700, 94, "POG_M04_1_05.tga", IDS_POG_ACQUIRE, captainLocation ); } GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 4, 0 ); } } else if (param == announce_get_back_to_sub)// { protectPOWsConv = Commands->Create_Conversation( "M04_Protect_The_Prisoners_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, protectPOWsConv, false, false ); Commands->Start_Conversation( protectPOWsConv, protectPOWsConv ); Commands->Monitor_Conversation (obj, protectPOWsConv); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 6, 0 ); } //Commands->Create_Sound ( "00-n040e", Vector3 (0,0,0), obj); } /********************************************************************************************************** The following are params for when the individual objectives are completed. ***********************************************************************************************************/ else if (param == completed_prisoner_rescue) { prisoner_primary_active = false; Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 100, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Clear_Radar_Marker ( 101 ); Commands->Clear_Radar_Marker ( 102 ); Commands->Clear_Radar_Marker ( 103 ); Commands->Send_Custom_Event( obj, obj, 0, 2, 2 );//this sets a small delay before havoc responds GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 0, 0 ); } } else if (param == completed_get_the_key) { Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 110, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Clear_Radar_Marker ( 111 ); int cargo_conv1 = Commands->Create_Conversation( "M04_NowGoFreeThePrisoners_Conversation", 100, 1000, false); //Commands->Join_Conversation( NULL, cargo_conv1, false, false, false); Commands->Join_Conversation( STAR, cargo_conv1, false, false, false ); Commands->Start_Conversation( cargo_conv1, cargo_conv1 ); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 2, 0 ); } } else if (param == completed_engine_room_objective) { //Commands->Create_Sound ( "00-n050e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 200, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Create_Object ( "POW_Armor_100", Vector3 (0.039f, -85.758f, -14.999f)); Commands->Create_Object ( "POW_Health_100", Vector3 (0.014f, -98.215f, -14.999f)); Commands->Create_Object ( "POW_GrenadeLauncher_Player", Vector3 (0.020f, -89.237f, -14.999f)); Commands->Create_Object ( "POW_GrenadeLauncher_Player", Vector3 (0.050f, -92.541f, -14.999f)); Commands->Create_Object ( "POW_GrenadeLauncher_Player", Vector3 (0.023f, -95.280f, -14.999f)); } else if (param == completed_missile_room_objective) { missile_primary_active = false; Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 300, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Send_Custom_Event( obj, obj, 0, 2, 2 );//this sets a small delay before havoc responds GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 1, 0 ); } } else if (param == completed_torpedo_room_objective) { torpedo_primary_active = false; Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 400, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Send_Custom_Event( obj, obj, 0, 2, 2 );//this sets a small delay before havoc responds GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 5, 0 ); } } else if (param == completed_apache_objective) { Commands->Create_Sound ( "00-n050e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 500, OBJECTIVE_STATUS_ACCOMPLISHED ); } else if (param == completed_first_mate_objective) { first_mate_primary_triggered = true; first_mate_primary_active = false; Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 600, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Clear_Radar_Marker ( 601 ); //Commands->Send_Custom_Event( obj, obj, 0, 2, 2 );//this sets a small delay before havoc responds GameObject * shipCaptain = Commands->Find_Object ( M04_SHIPS_CAPTAIN_JDG ); if (shipCaptain != NULL) { Commands->Send_Custom_Event( obj, obj, 0, announce_captain_objective, 6 ); } else if (shipCaptain == NULL) { //Commands->Send_Custom_Event( obj, obj, 0, announce_captain_objective, 6 ); Commands->Send_Custom_Event( obj, obj, 0, completed_captain_objective, 6 ); } GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 3, 0 ); } } else if (param == completed_captain_objective) { captain_primary_active = false; //Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Set_Objective_Status( 700, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Clear_Radar_Marker ( 701 ); Commands->Send_Custom_Event( obj, obj, 0, 2, 2 );//this sets a small delay before havoc responds GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_REMOVE_OBJECTIVE_POG_JDG, 4, 0 ); } if (prisoner_primary_active == false) { int reminderConv = Commands->Create_Conversation( "M04_Rally_Round_The_Sub_Boy_Conversation", 50, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); GameObject * objectiveReminder = Commands->Find_Object ( 105760 ); if (objectiveReminder != NULL) { Commands->Send_Custom_Event( obj, objectiveReminder, M01_ADD_OBJECTIVE_POG_JDG, 6, 0 ); } } else if (prisoner_primary_active == true) { int reminderConv = Commands->Create_Conversation( "M04_Mission_Start_Conversation", 50, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } } else if (param == M01_END_MISSION_PASS_JDG) { Commands->Create_Sound ( "00-n048e", Vector3 (0,0,0), obj); Commands->Mission_Complete ( true ); } else if (param == M01_DO_END_MISSION_CHECK_JDG) { if ((mission_started == true) && (captain_primary_active == false) && (first_mate_primary_active == false) && (torpedo_primary_active == false) && (missile_primary_active == false) && (prisoner_primary_active == false)) { //Commands->Send_Custom_Event( obj, Commands->Find_Object (101194), 0, M01_START_ACTING_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_END_MISSION_PASS_JDG, 0 ); } } /********************************************************************************************************** The following are params for when the individual missiles and whatnot get acted on or destroyed. ***********************************************************************************************************/ else if (param == missile_01_sabotaged)// { //Commands->Clear_Radar_Marker ( 301 ); number_missiles_sabotaged++; if (number_missiles_sabotaged == 1) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_01_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 2) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_02_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 3) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_03_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged >= 4) { Commands->Send_Custom_Event( obj, obj, 0, completed_missile_room_objective, 0 ); GameObject * bigSamZone = Commands->Find_Object ( 104942 ); if (bigSamZone != NULL) { Commands->Send_Custom_Event( obj, bigSamZone, 0, M01_START_ACTING_JDG, 0 ); } } } else if (param == missile_02_sabotaged) { //Commands->Clear_Radar_Marker ( 302 ); number_missiles_sabotaged++; if (number_missiles_sabotaged == 1) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_01_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 2) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_02_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 3) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_03_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged >= 4) { Commands->Send_Custom_Event( obj, obj, 0, completed_missile_room_objective, 0 ); GameObject * bigSamZone = Commands->Find_Object ( 104942 ); if (bigSamZone != NULL) { Commands->Send_Custom_Event( obj, bigSamZone, 0, M01_START_ACTING_JDG, 0 ); } } } else if (param == missile_03_sabotaged) { //Commands->Clear_Radar_Marker ( 303 ); number_missiles_sabotaged++; if (number_missiles_sabotaged == 1) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_01_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 2) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_02_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 3) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_03_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged >= 4) { Commands->Send_Custom_Event( obj, obj, 0, completed_missile_room_objective, 0 ); GameObject * bigSamZone = Commands->Find_Object ( 104942 ); if (bigSamZone != NULL) { Commands->Send_Custom_Event( obj, bigSamZone, 0, M01_START_ACTING_JDG, 0 ); } } } else if (param == missile_04_sabotaged) { //Commands->Clear_Radar_Marker ( 304 ); number_missiles_sabotaged++; if (number_missiles_sabotaged == 1) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_01_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 2) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_02_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged == 3) { int missile_conv1 = Commands->Create_Conversation( "M04_MissileRack_03_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_missiles_sabotaged >= 4) { Commands->Send_Custom_Event( obj, obj, 0, completed_missile_room_objective, 0 ); GameObject * bigSamZone = Commands->Find_Object ( 104942 ); if (bigSamZone != NULL) { Commands->Send_Custom_Event( obj, bigSamZone, 0, M01_START_ACTING_JDG, 0 ); } } } else if (param == engine_room_01_sabotaged) { number_engines_sabotaged++; if (number_engines_sabotaged == 1) { Commands->Create_Sound ( "M04DSGN_DSGN0040I1EVAG_SND", Vector3 (0,0,0), obj); } else if (number_engines_sabotaged == 2) { Commands->Create_Sound ( "M04DSGN_DSGN0090I1EVAN_SND", Vector3 (0,0,0), obj);//intruder detected } else if (number_engines_sabotaged == 3) { Commands->Create_Sound ( "M04DSGN_DSGN0094I1EVAN_SND", Vector3 (0,0,0), obj);//engine failure emiment } else if (number_engines_sabotaged >= 4) { Commands->Create_Sound ( "M04DSGN_DSGN0095I1EVAN_SND", Vector3 (0,0,0), obj);//engine off line Commands->Send_Custom_Event( obj, obj, 0, completed_engine_room_objective, 0 ); } } else if (param == engine_room_02_sabotaged) { number_engines_sabotaged++; if (number_engines_sabotaged == 1) { Commands->Create_Sound ( "M04DSGN_DSGN0040I1EVAG_SND", Vector3 (0,0,0), obj); } else if (number_engines_sabotaged == 2) { Commands->Create_Sound ( "M04DSGN_DSGN0090I1EVAN_SND", Vector3 (0,0,0), obj);//intruder detected } else if (number_engines_sabotaged == 3) { Commands->Create_Sound ( "M04DSGN_DSGN0094I1EVAN_SND", Vector3 (0,0,0), obj);//engine failure emiment } else if (number_engines_sabotaged >= 4) { Commands->Create_Sound ( "M04DSGN_DSGN0095I1EVAN_SND", Vector3 (0,0,0), obj);//engine off line Commands->Send_Custom_Event( obj, obj, 0, completed_engine_room_objective, 0 ); } } else if (param == engine_room_03_sabotaged) { number_engines_sabotaged++; if (number_engines_sabotaged == 1) { Commands->Create_Sound ( "M04DSGN_DSGN0040I1EVAG_SND", Vector3 (0,0,0), obj); } else if (number_engines_sabotaged == 2) { Commands->Create_Sound ( "M04DSGN_DSGN0090I1EVAN_SND", Vector3 (0,0,0), obj);//intruder detected } else if (number_engines_sabotaged == 3) { Commands->Create_Sound ( "M04DSGN_DSGN0094I1EVAN_SND", Vector3 (0,0,0), obj);//engine failure emiment } else if (number_engines_sabotaged >= 4) { Commands->Create_Sound ( "M04DSGN_DSGN0095I1EVAN_SND", Vector3 (0,0,0), obj);//engine off line Commands->Send_Custom_Event( obj, obj, 0, completed_engine_room_objective, 0 ); } } else if (param == engine_room_04_sabotaged) { number_engines_sabotaged++; if (number_engines_sabotaged == 1) { Commands->Create_Sound ( "M04DSGN_DSGN0040I1EVAG_SND", Vector3 (0,0,0), obj); } else if (number_engines_sabotaged == 2) { Commands->Create_Sound ( "M04DSGN_DSGN0090I1EVAN_SND", Vector3 (0,0,0), obj);//intruder detected } else if (number_engines_sabotaged == 3) { Commands->Create_Sound ( "M04DSGN_DSGN0094I1EVAN_SND", Vector3 (0,0,0), obj);//engine failure emiment } else if (number_engines_sabotaged >= 4) { Commands->Create_Sound ( "M04DSGN_DSGN0095I1EVAN_SND", Vector3 (0,0,0), obj);//engine off line Commands->Send_Custom_Event( obj, obj, 0, completed_engine_room_objective, 0 ); } } else if (param == torpedo_01_sabotaged) { Commands->Clear_Radar_Marker ( 401 ); number_torpedos_sabotaged++; if (number_torpedos_sabotaged < 2) { int missile_conv1 = Commands->Create_Conversation( "M04_Torpedo_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_torpedos_sabotaged >= 2) { Commands->Send_Custom_Event( obj, obj, 0, completed_torpedo_room_objective, 0 ); } } else if (param == torpedo_02_sabotaged) { Commands->Clear_Radar_Marker ( 402 ); number_torpedos_sabotaged++; if (number_torpedos_sabotaged < 2) { int missile_conv1 = Commands->Create_Conversation( "M04_Torpedo_Sabotaged_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, missile_conv1, false, false, false); Commands->Start_Conversation( missile_conv1, missile_conv1 ); } else if (number_torpedos_sabotaged >= 2) { Commands->Send_Custom_Event( obj, obj, 0, completed_torpedo_room_objective, 0 ); } } } } }; /***************************************************************************************************************** The following are the scripts for the dudes in the sub bay when the mission first starts. *****************************************************************************************************************/ DECLARE_SCRIPT(M04_PointGuard_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } }; DECLARE_SCRIPT(M04_A01_Sniper_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-0.238f, 0.743f, 5.034f), WALK, .25f ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { Commands->Action_Reset ( obj, 100 ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100167; params.WaypointStartID = 100168; params.WaypointEndID = 100169; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100171; params.WaypointStartID = 100172; params.WaypointEndID = 100175; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100177; params.WaypointStartID = 100178; params.WaypointEndID = 100179; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_04_JDG) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100181; params.WaypointStartID = 100182; params.WaypointEndID = 100183; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_05_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_05_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_05_JDG) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100167; params.WaypointStartID = 100168; params.WaypointEndID = 100169; Commands->Action_Goto( obj, params ); } } } }; DECLARE_SCRIPT(M04_A01_PatrolGuy_01_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } }; /********************************************************************************************************* The following scripts all deal with the first time through the cargo and missile rooms. *************************************************************************************************************/ DECLARE_SCRIPT(M04_MissileRoom_EnterZone_Left_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 600, 0 );//have leftside guard come in Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 200, 0 );//put missile room guys to 50% priority GameObject * zone02 = Commands->Find_Object (100583);//stays if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } GameObject * zone04 = Commands->Find_Object (100585); if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } } } }; DECLARE_SCRIPT(M04_MissileRoom_EnterZone_Right_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 500, 0 );//have rightside guard come in Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 200, 0 );//put missile room guys to 50% priority GameObject * zone02 = Commands->Find_Object (100583);//stays if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } GameObject * zone04 = Commands->Find_Object (100585);//stays if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } } } }; DECLARE_SCRIPT(M04_CargoMissileRooms_Dude_Controller_JDG, "")//this guys ID number is M04_CARGOHOLD_CONTROLLER_JDG 100558 { int missileRoomguardOne_ID; int missileRoomguardTwo_ID; int guardFive_ID; int upperGuard01_ID; int upperGuard02_ID; //int cargo_conv1; REGISTER_VARIABLES() { SAVE_VARIABLE( missileRoomguardOne_ID, 1 ); SAVE_VARIABLE( missileRoomguardTwo_ID, 2 ); SAVE_VARIABLE( guardFive_ID, 3 ); SAVE_VARIABLE( upperGuard01_ID, 4 ); SAVE_VARIABLE( upperGuard02_ID, 5 ); //SAVE_VARIABLE( cargo_conv1, 6 ); } void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100) { GameObject *guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); GameObject *guardTwo = Commands->Find_Object ( M04_CARGO_TALKGUY_02_JDG ); GameObject *guardThree = Commands->Find_Object ( M04_CARGO_TALKGUY_03_JDG ); if ((guardOne != NULL) && (guardTwo != NULL) && (guardThree != NULL))// { //cargo_conv1 = Commands->Create_Conversation( "M04_CargoHold_Conversation_01", 45, 1000, true); //Commands->Join_Conversation( guardOne, cargo_conv1, false, false, false); //Commands->Join_Conversation( guardTwo, cargo_conv1, false, false, false ); //Commands->Start_Conversation( cargo_conv1, cargo_conv1 ); //Commands->Monitor_Conversation( obj, cargo_conv1); } GameObject *guardSix = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-14.44f, -40.82f, -9.00f)); Commands->Attach_Script(guardSix, "M04_CargoHold_Blackhand_02_JDG", "");//M01_Hunt_The_Player_JDG GameObject *missileRoomguardOne = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-13.38f, -53.56f, -15.00f)); Commands->Attach_Script(missileRoomguardOne, "M04_MissileRoom_Guard_01_JDG", ""); GameObject *missileRoomguardTwo = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(13.37f, -61.28f, -15.00f)); Commands->Attach_Script(missileRoomguardTwo, "M04_MissileRoom_Guard_02_JDG", ""); GameObject *missileRoomUpperguardOne = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(9.485f, -66.975f, -9.00f)); Commands->Attach_Script(missileRoomUpperguardOne, "M04_MissileRoom_UpperGuard_01_JDG", ""); Commands->Set_Facing ( missileRoomUpperguardOne, 85 ); upperGuard01_ID = Commands->Get_ID ( missileRoomUpperguardOne ); GameObject *missileRoomUpperguardTwo = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-9.456f, -61.862f, -9.00f)); Commands->Attach_Script(missileRoomUpperguardTwo, "M04_MissileRoom_UpperGuard_02_JDG", ""); Commands->Set_Facing ( missileRoomUpperguardTwo, 95 ); upperGuard02_ID = Commands->Get_ID ( missileRoomUpperguardTwo ); missileRoomguardOne_ID = Commands->Get_ID ( missileRoomguardOne ); missileRoomguardTwo_ID = Commands->Get_ID ( missileRoomguardTwo ); } else if (param == 200)//this sets the missile guards priority to 50 probably from 100 { GameObject *missileRoomguardOne = Commands->Find_Object ( missileRoomguardOne_ID ); GameObject *missileRoomguardTwo = Commands->Find_Object ( missileRoomguardTwo_ID ); if (missileRoomguardOne != NULL) { Commands->Send_Custom_Event( obj, missileRoomguardOne, 200, 50, 0 ); } if (missileRoomguardTwo != NULL) { Commands->Send_Custom_Event( obj, missileRoomguardTwo, 200, 50, 0 ); } } else if (param == 300)//this is when one of the missile room guards dies { float reinforceka = Commands->Get_Random ( 0.5, 2.5 ); if ((reinforceka >= 0.5) && (reinforceka < 1.5)) { Commands->Trigger_Spawner( 100579 ); Commands->Trigger_Spawner( 100581 ); } else { Commands->Trigger_Spawner( 100581 ); } } else if (param == 500)//user is going through the right side door into missile room { GameObject *upperGuard01 = Commands->Find_Object ( upperGuard01_ID ); GameObject *upperGuard02 = Commands->Find_Object ( upperGuard02_ID ); if (upperGuard01 != NULL) { Commands->Send_Custom_Event( obj, upperGuard01, 0, M01_START_ATTACKING_01_JDG, 0 ); } if (upperGuard02 != NULL) { Commands->Send_Custom_Event( obj, upperGuard02, 0, M01_START_ACTING_JDG, 0 ); } } else if (param == 600)//user is going through the left side door into missile room { GameObject *upperGuard01 = Commands->Find_Object ( upperGuard01_ID ); GameObject *upperGuard02 = Commands->Find_Object ( upperGuard02_ID ); if (upperGuard01 != NULL) { Commands->Send_Custom_Event( obj, upperGuard01, 0, M01_START_ACTING_JDG, 0 ); } if (upperGuard02 != NULL) { Commands->Send_Custom_Event( obj, upperGuard02, 0, M01_START_ATTACKING_01_JDG, 0 ); } } else if (param == 800)//Officer has ragged on grunts--tell them to salute { GameObject * guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); if (guardOne != NULL) { float delayTimer = Commands->Get_Random ( 0, 1.5f ); Commands->Send_Custom_Event( obj, guardOne, 0, 100, delayTimer ); } GameObject * guardTwo = Commands->Find_Object ( M04_CARGO_TALKGUY_02_JDG ); if (guardTwo != NULL) { float delayTimer = Commands->Get_Random ( 0, 1.5f ); Commands->Send_Custom_Event( obj, guardTwo, 0, 100, delayTimer ); } GameObject * guardThree = Commands->Find_Object ( M04_CARGO_TALKGUY_03_JDG ); if (guardThree != NULL) { float delayTimer = Commands->Get_Random ( 0, 1.5f ); Commands->Send_Custom_Event( obj, guardThree, 0, 100, delayTimer ); } } } /*void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == cargo_conv1) { GameObject *blackHand01 = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackHand01 != NULL) { Commands->Debug_Message ( "**********************cargo conv 01 is over--sending custom to blackhand guy\n" ); Commands->Send_Custom_Event( obj, blackHand01, 0, M01_START_ACTING_JDG, 0 ); } } } }*/ }; DECLARE_SCRIPT(M04_MissileRoom_UpperGuard_01_JDG, "")//left side { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); //Commands->Innate_Soldier_Enable_Actions ( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG)//player has entered area--back peddle towards the engine room { Vector3 gotoSpot (4.302f, -67.224f, -9); ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( gotoSpot, RUN, .25f ); params.MoveBackup = true; Commands->Action_Goto( obj, params ); } else if (param == M01_START_ATTACKING_01_JDG)//player has entered area--attack him { Commands->Set_Innate_Is_Stationary ( obj, false ); //Commands->Innate_Soldier_Enable_Actions ( obj, true ); } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == M01_WALKING_WAYPATH_01_JDG)//you've reached your final guard spot--goto stationary { Commands->Attach_Script(obj, "M01_Hunt_The_Player_JDG", ""); //Commands->Set_Innate_Is_Stationary ( obj, true ); } } }; DECLARE_SCRIPT(M04_MissileRoom_UpperGuard_02_JDG, "")//right side { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); //Commands->Innate_Soldier_Enable_Actions ( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG)//player has entered area--back peddle towards the engine room { Vector3 gotoSpot (-4.336f, -66.975f, -9); ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( gotoSpot, RUN, .25f ); params.MoveBackup = true; Commands->Action_Goto( obj, params ); } else if (param == M01_START_ATTACKING_01_JDG)//player has entered area--attack him { Commands->Set_Innate_Is_Stationary ( obj, false ); //Commands->Innate_Soldier_Enable_Actions ( obj, true ); } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == M01_WALKING_WAYPATH_01_JDG)//you've reached your final guard spot--goto stationary { Commands->Attach_Script(obj, "M01_Hunt_The_Player_JDG", ""); //Commands->Set_Innate_Is_Stationary ( obj, true ); } } }; DECLARE_SCRIPT(M04_CargoHold_TalkGuy01_JDG, "")//M04_CARGO_TALKGUY_01_JDG 101463 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Killed( GameObject * obj, GameObject * killer ) { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { Commands->Send_Custom_Event ( obj, blackhand, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been ragged on--salute then carry on { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( blackhand, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_01_JDG); params.Set_Animation("H_A_J19A", false ); Commands->Action_Play_Animation ( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; Vector3 myGotoSpot (-9.192f, 15.344f, -8.998f); if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_02_JDG); params.Set_Animation("H_A_J19S", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_03_JDG); params.Set_Animation("H_A_J19C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myGotoSpot, WALK, 3, false ); Commands->Action_Goto ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Soldier_Home_Location ( obj, myGotoSpot, 10 ); } } } }; DECLARE_SCRIPT(M04_CargoHold_TalkGuy02_JDG, "")//M04_CARGO_TALKGUY_02_JDG 101464 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Killed( GameObject * obj, GameObject * killer ) { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { Commands->Send_Custom_Event ( obj, blackhand, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been ragged on--salute then carry on { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( blackhand, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_01_JDG); params.Set_Animation("H_A_J19A", false ); Commands->Action_Play_Animation ( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; Vector3 myGotoSpot (11.168f, 19.847f, -15); if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_02_JDG); params.Set_Animation("H_A_J19S", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_03_JDG); params.Set_Animation("H_A_J19C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myGotoSpot, WALK, 3, false ); Commands->Action_Goto ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Soldier_Home_Location ( obj, myGotoSpot, 10 ); } } } }; DECLARE_SCRIPT(M04_CargoHold_TalkGuy03_JDG, "")//M04_CARGO_TALKGUY_03_JDG 101465 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject *guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); if (guardOne != NULL) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( guardOne, 0, 0, true ); Commands->Action_Attack ( obj, params ); } } void Killed( GameObject * obj, GameObject * killer ) { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { Commands->Send_Custom_Event ( obj, blackhand, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been ragged on--salute then carry on { GameObject *blackhand = Commands->Find_Object ( M04_CARGO_BLACKHAND_01_JDG ); if (blackhand != NULL) { params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( blackhand, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_01_JDG); params.Set_Animation("H_A_J19A", false ); Commands->Action_Play_Animation ( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; Vector3 myGotoSpot (-0.099f, -71.767f, -15); if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_02_JDG); params.Set_Animation("H_A_J19S", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_02_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_03_JDG); params.Set_Animation("H_A_J19C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myGotoSpot, WALK, 3, false ); Commands->Action_Goto ( obj, params ); } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Soldier_Home_Location ( obj, myGotoSpot, 10 ); } } } }; DECLARE_SCRIPT(M04_MissileRoom_Guard_01_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100555; params.WaypointStartID = 100556; params.WaypointEndID = 100557; Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 300, 0 );//tell controller youre dead } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100541; params.WaypointStartID = 100542; params.WaypointEndID = 100544; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100546; params.WaypointStartID = 100547; params.WaypointEndID = 100548; Commands->Action_Goto( obj, params ); } else if (action_id == 104 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 105 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100550; params.WaypointStartID = 100551; params.WaypointEndID = 100553; Commands->Action_Goto( obj, params ); } else if (action_id == 106 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 107 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100555; params.WaypointStartID = 100556; params.WaypointEndID = 100557; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_MissileRoom_Guard_02_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100546; params.WaypointStartID = 100547; params.WaypointEndID = 100548; Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 300, 0 );//tell controller you're dead } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100550; params.WaypointStartID = 100551; params.WaypointEndID = 100553; Commands->Action_Goto( obj, params ); } if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 50, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100555; params.WaypointStartID = 100556; params.WaypointEndID = 100557; Commands->Action_Goto( obj, params ); } if (action_id == 104 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 105 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100541; params.WaypointStartID = 100542; params.WaypointEndID = 100544; Commands->Action_Goto( obj, params ); } if (action_id == 106 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 107 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 100546; params.WaypointStartID = 100547; params.WaypointEndID = 100548; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_CargoHold_Blackhand_01_JDG, "")//M04_CARGO_BLACKHAND_01_JDG 101534 { int cargo_conv2; bool idle; REGISTER_VARIABLES() { SAVE_VARIABLE( cargo_conv2, 1 ); SAVE_VARIABLE( idle, 2 ); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); idle = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_START_ACTING_JDG) { idle = false; Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Is_Stationary ( obj, false ); GameObject *guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); if (guardOne != NULL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( guardOne, WALK, 3.0f ); Commands->Action_Goto( obj, params ); } else { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 20 ); } } else if (param == M01_START_ATTACKING_01_JDG && idle == true) { idle = false; Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 75, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( STAR, RUN, 1 ); Commands->Action_Goto( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { /*GameObject *guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); if (guardOne != NULL) { cargo_conv2 = Commands->Create_Conversation( "M04_CargoHold_Conversation_02", 50, 1000, true); Commands->Join_Conversation( obj, cargo_conv2, false, false ); Commands->Join_Conversation( guardOne, cargo_conv2, false, false ); Commands->Start_Conversation( cargo_conv2, cargo_conv2 ); Commands->Monitor_Conversation( obj, cargo_conv2); }*/ } else if (action_id == M01_WALKING_WAYPATH_02_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 20 ); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == cargo_conv2) { GameObject *guardOne = Commands->Find_Object ( M04_CARGO_TALKGUY_01_JDG ); GameObject *guardTwo = Commands->Find_Object ( M04_CARGO_TALKGUY_02_JDG ); GameObject *guardThree = Commands->Find_Object ( M04_CARGO_TALKGUY_03_JDG ); if (guardOne != NULL) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, guardOne, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } if (guardTwo != NULL) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, guardTwo, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } if (guardThree != NULL) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event ( obj, guardThree, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3 (10.075f, -44.802f, -15), WALK, 1.5f ); Commands->Action_Goto( obj, params ); } } } }; DECLARE_SCRIPT(M04_CargoHold_Blackhand_02_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 101018; params.WaypointStartID = 101019; params.WaypointEndID = 101022; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 101024; params.WaypointStartID = 101025; params.WaypointEndID = 101028; Commands->Action_Goto( obj, params ); } if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 101024; params.WaypointStartID = 101028; params.WaypointEndID = 101025; Commands->Action_Goto( obj, params ); } if (action_id == 104 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } if (action_id == 105 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, 1.5f ); params.WaypathID = 101018; params.WaypointStartID = 101022; params.WaypointEndID = 101019; Commands->Action_Goto( obj, params ); } } }; /**************************************************************************************************************** The following scripts deal with the engine room--first time through ****************************************************************************************************************/ DECLARE_SCRIPT(M04_EngineRoom_EnterZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 430, 0 );//tell objective controller to announce objective Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 700, 0 );//tell cargo/missile contoller to turn off spawners GameObject * zone01 = Commands->Find_Object (100425);//stays if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone04 = Commands->Find_Object (100428);//stays if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } } } }; DECLARE_SCRIPT(M04_EngineRoom_BuildingController_JDG, "")//M04_ENGINEROOM_BUILDING_CONTROLLER_JDG 150001 { int targetsDestroyed; int engineroom_sound01; int engineroom_sound02; int engineroom_sound03; int engineroom_sound04; int engineroom_sound05; int engineroom_sound06; int engineroom_sound07; int engineroom_sound08; int engineroom_sound09; int engineroom_sound10; int engineroom_sound11; int engineroom_sound12; int engineroom_sound13; int engineroom_sound14; REGISTER_VARIABLES() { SAVE_VARIABLE( targetsDestroyed, 1 ); SAVE_VARIABLE( engineroom_sound01, 2 ); SAVE_VARIABLE( engineroom_sound02, 3 ); SAVE_VARIABLE( engineroom_sound03, 4 ); SAVE_VARIABLE( engineroom_sound04, 5 ); SAVE_VARIABLE( engineroom_sound05, 6 ); SAVE_VARIABLE( engineroom_sound06, 7 ); SAVE_VARIABLE( engineroom_sound07, 8 ); SAVE_VARIABLE( engineroom_sound08, 9 ); SAVE_VARIABLE( engineroom_sound09, 10 ); SAVE_VARIABLE( engineroom_sound10, 11 ); SAVE_VARIABLE( engineroom_sound11, 12 ); SAVE_VARIABLE( engineroom_sound12, 13 ); SAVE_VARIABLE( engineroom_sound13, 14 ); SAVE_VARIABLE( engineroom_sound14, 15 ); } void Created( GameObject * obj ) { targetsDestroyed = 0; engineroom_sound01 = Commands->Create_Sound ( "SFX.Machine_Turbine_01", Vector3 (5.970f, -104.759f, -15.143f), obj ); engineroom_sound02 = Commands->Create_Sound ( "SFX.Machine_Turbine_01_offset2", Vector3 (-6.021f, -104.445f, -15.157f), obj ); engineroom_sound03 = Commands->Create_Sound ( "SFX.Ship_Amb_Engineroom", Vector3 (-0.942f, -74.017f, -11.840f), obj ); engineroom_sound04 = Commands->Create_Sound ( "SFX.Steam_Med_Pressure_01_offset1", Vector3 (-9.838f, -76.426f, -13.498f), obj ); engineroom_sound05 = Commands->Create_Sound ( "Ship_Engine_01", Vector3 (-10.846f, -94.205f, -13.432f), obj ); engineroom_sound06 = Commands->Create_Sound ( "Ship_Engine_01", Vector3 (0.359f, -131.034f, 2.580f), obj ); engineroom_sound07 = Commands->Create_Sound ( "Ship_Engine_01_offset1", Vector3 (9.045f, -96.538f, -13.366f), obj ); engineroom_sound08 = Commands->Create_Sound ( "Ship_Engine_02", Vector3 (9.192f, -89.680f, -12.902f), obj ); engineroom_sound09 = Commands->Create_Sound ( "Ship_Engine_02", Vector3 (3.033f, -92.739f, 16.208f), obj ); engineroom_sound10 = Commands->Create_Sound ( "Ship_Engine_03", Vector3 (-5.870f, -84.200f, -13.423f), obj ); engineroom_sound11 = Commands->Create_Sound ( "Ship_Engine_03", Vector3 (7.588f, -83.956f, -13.481f), obj ); engineroom_sound12 = Commands->Create_Sound ( "Steam_Med_Pressure_01", Vector3 (9.726f, -78.736f, -14.079f), obj ); engineroom_sound13 = Commands->Create_Sound ( "SFX.Machine_Turbine_01", Vector3 (-0.757f, -60.372f, -7.924f), obj ); engineroom_sound14 = Commands->Create_Sound ( "Roomtone_Industrial_04_verb", Vector3 (8.568f, -67.182f, -6.454f), obj ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG) { targetsDestroyed++; if (targetsDestroyed == 4) { Commands->Stop_Sound ( engineroom_sound01, true); Commands->Stop_Sound ( engineroom_sound02, true); Commands->Stop_Sound ( engineroom_sound03, true); Commands->Stop_Sound ( engineroom_sound04, true); Commands->Stop_Sound ( engineroom_sound05, true); Commands->Stop_Sound ( engineroom_sound06, true); Commands->Stop_Sound ( engineroom_sound07, true); Commands->Stop_Sound ( engineroom_sound08, true); Commands->Stop_Sound ( engineroom_sound09, true); Commands->Stop_Sound ( engineroom_sound10, true); Commands->Stop_Sound ( engineroom_sound11, true); Commands->Stop_Sound ( engineroom_sound12, true); Commands->Stop_Sound ( engineroom_sound13, true); Commands->Stop_Sound ( engineroom_sound14, true); engineroom_sound01 = Commands->Create_Sound ( "SFX.Klaxon_Alert_02", Vector3 (-2.309f, -94.553f, -11.050f), obj ); engineroom_sound02 = Commands->Create_Sound ( "SFX.Klaxon_Alert_04", Vector3 (-0.715f, -88.220f, -10.745f), obj ); engineroom_sound03 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_01", Vector3 (9.731f, -95.172f, -11.028f), obj ); engineroom_sound04 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_01", Vector3 (-2.976f, -91.511f, -12.275f), obj ); engineroom_sound05 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_02", Vector3 (3.918f, -84.200f, -11.625f), obj ); engineroom_sound06 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_02", Vector3 (-9.033f, -96.617f, -12.678f), obj ); engineroom_sound07 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_03", Vector3 (2.750f, -93.408f, -12.047f), obj ); engineroom_sound08 = Commands->Create_Sound ( "SFX.Ship_Engine_Broken_03", Vector3 (-7.275f, -83.744f, -12.941f), obj ); engineroom_sound09 = Commands->Create_Sound ( "Ship_Engine_01", Vector3 (6.854f, -75.227f, -14.270f), obj ); engineroom_sound10 = Commands->Create_Sound ( "Ship_Engine_02", Vector3 (-9.464f, -76.808f, -15.745f), obj ); Commands->Debug_Message ( "**********************all engine room targets destroyed--applying damage to engine room\n" ); //Commands->Set_Health ( obj, 1 ); Commands->Apply_Damage( obj, 1000, "BlamoKiller", STAR ); Commands->Create_2D_Sound ( "SFX.Ship_Engine_Stop" ); //Commands->Create_2D_Sound ( "M04_EngineRoom_Alarm" ); Commands->Enable_Spawner( M04_ENGINEROOM_SPAWNER_01_JDG, true ); Commands->Enable_Spawner( M04_ENGINEROOM_SPAWNER_02_JDG, true ); GameObject * engineer = Commands->Find_Object ( M04_ENGINEROOM_CHIEF_ENGINEER_JDG ); GameObject * jimmy = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); GameObject * johnny = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); GameObject * bobby = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); GameObject * williams = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG);//M01_MODIFY_YOUR_ACTION_02_JDG if (engineer != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, engineer, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } if (jimmy != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, jimmy, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (johnny != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, johnny, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (bobby != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, bobby, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (williams != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, williams, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } GameObject* guard01 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_01_JDG ); if (guard01 != NULL) { Commands->Send_Custom_Event( obj, guard01, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject* guard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (guard02 != NULL) { Commands->Send_Custom_Event( obj, guard02, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject* hunterController = Commands->Find_Object ( M04_ENGINEROOM_HUNTING_CONTROLLER_JDG ); if (hunterController != NULL) { Commands->Send_Custom_Event( obj, hunterController, 0, M01_START_ACTING_JDG, 0 ); } } } } } }; DECLARE_SCRIPT(M04_EngineRoom_ChiefEngineer_JDG, "")// M04_ENGINEROOM_CHIEF_ENGINEER_JDG 101762 { typedef enum { IDLE, GOING_TO_WILLIAMS_01, GOING_TO_BOBBY_01, GOING_TO_JIMMY_01, GOING_TO_JOHNNY, GOING_TO_BOBBY_02, GOING_TO_JIMMY_02, GOING_TO_WILLIAMS_02, ALERTED, FINISHED, } M04EngineRoom_Location; M04EngineRoom_Location chiefs_location; bool williams_is_dead; bool bobby_is_dead; bool johnny_is_dead; bool jimmy_is_dead; REGISTER_VARIABLES() { SAVE_VARIABLE( williams_is_dead, 1 ); SAVE_VARIABLE( bobby_is_dead, 2 ); SAVE_VARIABLE( johnny_is_dead, 3 ); SAVE_VARIABLE( jimmy_is_dead, 4 ); SAVE_VARIABLE( chiefs_location, 5 ); } void Created( GameObject * obj ) { williams_is_dead = false; bobby_is_dead = false; johnny_is_dead = false; jimmy_is_dead = false; Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); chiefs_location = IDLE; Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG) { GameObject * jimmy = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); GameObject * johnny = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); GameObject * bobby = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); GameObject * williams = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG); if (sender == jimmy) { jimmy_is_dead = true; } else if (sender == johnny) { johnny_is_dead = true; } else if (sender == bobby) { bobby_is_dead = true; } else if (sender == williams) { williams_is_dead = true; } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//someone's missing--look around then goto innate { params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_J21C", false ); Commands->Action_Play_Animation ( obj, params ); chiefs_location = ALERTED; } else if (param == M01_PICK_A_NEW_LOCATION_JDG) { Vector3 jimmys_location (7.6f, -107.2f, -15); Vector3 johnnys_location (-2.5f, -102.8f, -15); Vector3 bobbys_location (-0.6f, -74.4f, -18); Vector3 williams_location (5.8f, -82, -18); if (chiefs_location == IDLE) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( williams_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_WILLIAMS_01; } else if (chiefs_location == GOING_TO_WILLIAMS_01) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( bobbys_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_BOBBY_01; } else if (chiefs_location == GOING_TO_BOBBY_01) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( jimmys_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_JIMMY_01; } else if (chiefs_location == GOING_TO_JIMMY_01) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( johnnys_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_JOHNNY; } else if (chiefs_location == GOING_TO_JOHNNY) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( bobbys_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_BOBBY_02; } else if (chiefs_location == GOING_TO_BOBBY_02) { params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( jimmys_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_JIMMY_02; } else if (chiefs_location == GOING_TO_JIMMY_02) { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( williams_location, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = GOING_TO_WILLIAMS_02; } else if (chiefs_location == GOING_TO_WILLIAMS_02) { Vector3 gotoPosition (-0.82f, -91.56f, -15); params.Set_Basic( this, 50, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( gotoPosition, WALK, 0.5f ); Commands->Action_Goto( obj, params ); chiefs_location = FINISHED; } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; GameObject * jimmy = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); GameObject * johnny = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); GameObject * bobby = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); GameObject * williams = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG); if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { Vector3 gotoPosition (-0.82f, -91.56f, -15); params.Set_Basic( this, 80, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( gotoPosition, RUN, 0.5f ); Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG) { Vector3 gotoPosition (-0.82f, -91.56f, -15); Commands->Set_Innate_Soldier_Home_Location ( obj, gotoPosition, 10 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "TargetHasBeenEngaged_2", myPosition, obj ); GameObject * jimmy = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); GameObject * johnny = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); GameObject * bobby = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); GameObject * williams = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG); if (jimmy != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, jimmy, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (johnny != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, johnny, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (bobby != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, bobby, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (williams != NULL) { float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, williams, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } } else if (action_id == M01_WALKING_WAYPATH_01_JDG) { if (chiefs_location == GOING_TO_WILLIAMS_01) { if (williams != NULL && williams_is_dead == false) { //int williams01 = Commands->Create_Conversation( "M04_EngineRoom_Williams_01_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, williams01, false, true, true ); //Commands->Join_Conversation( williams, williams01, false, true, true ); //Commands->Start_Conversation( williams01, williams01 ); //Commands->Monitor_Conversation( obj, williams01 ); } else { chiefs_location = ALERTED; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_BOBBY_01) { if (bobby != NULL && bobby_is_dead == false) { //int bobby01 = Commands->Create_Conversation( "M04_EngineRoom_Bobby_01_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, bobby01, false, true, true ); //Commands->Join_Conversation( bobby, bobby01, false, true, true ); //Commands->Start_Conversation( bobby01, bobby01 ); //Commands->Monitor_Conversation( obj, bobby01 ); } else { chiefs_location = ALERTED;// Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_JIMMY_01) { if (jimmy != NULL && jimmy_is_dead == false) { //int jimmy01 = Commands->Create_Conversation( "M04_EngineRoom_Jimmy_01_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, jimmy01, false, true, true ); //Commands->Join_Conversation( jimmy, jimmy01, false, true, true ); //Commands->Start_Conversation( jimmy01, jimmy01 ); //Commands->Monitor_Conversation( obj, jimmy01 ); } else { chiefs_location = ALERTED;//GOING_TO_JIMMY_01 Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_JOHNNY) { if (johnny != NULL && johnny_is_dead == false) { //int johnny01 = Commands->Create_Conversation( "M04_EngineRoom_Tech04_01_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, johnny01, false, true, true ); //Commands->Join_Conversation( johnny, johnny01, false, true, true ); //Commands->Start_Conversation( johnny01, johnny01 ); //Commands->Monitor_Conversation( obj, johnny01 ); } else { chiefs_location = ALERTED;//GOING_TO_JIMMY_01 Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_BOBBY_02) { if (bobby != NULL && bobby_is_dead == false) { //int bobby01 = Commands->Create_Conversation( "M04_EngineRoom_Bobby_02_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, bobby01, false, true, true ); //Commands->Join_Conversation( bobby, bobby01, false, true, true ); //Commands->Start_Conversation( bobby01, bobby01 ); //Commands->Monitor_Conversation( obj, bobby01 ); } else { chiefs_location = ALERTED;// Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_JIMMY_02) { if (jimmy != NULL && jimmy_is_dead == false) { //int jimmy01 = Commands->Create_Conversation( "M04_EngineRoom_Jimmy_02_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, jimmy01, false, true, true ); //Commands->Join_Conversation( jimmy, jimmy01, false, true, true ); //Commands->Start_Conversation( jimmy01, jimmy01 ); //Commands->Monitor_Conversation( obj, jimmy01 ); } else { chiefs_location = ALERTED;//GOING_TO_JIMMY_01 Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (chiefs_location == GOING_TO_WILLIAMS_02) { if (williams != NULL && williams_is_dead == false) { //int williams01 = Commands->Create_Conversation( "M04_EngineRoom_Williams_02_Conversation", 50, 50, true); //Commands->Join_Conversation( obj, williams01, false, true, true ); //Commands->Join_Conversation( williams, williams01, false, true, true ); //Commands->Start_Conversation( williams01, williams01 ); //Commands->Monitor_Conversation( obj, williams01 ); } else { chiefs_location = ALERTED; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 1 ); GameObject * jimmy = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); GameObject * johnny = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); GameObject * bobby = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); GameObject * williams = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG); if (chiefs_location == GOING_TO_WILLIAMS_01) { if (williams != NULL && williams_is_dead == false) { Commands->Send_Custom_Event( obj, williams, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_BOBBY_01) { if (bobby != NULL && bobby_is_dead == false) { Commands->Send_Custom_Event( obj, bobby, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_JIMMY_01) { if (jimmy != NULL && jimmy_is_dead == false) { Commands->Send_Custom_Event( obj, jimmy, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_JOHNNY) { if (johnny != NULL && johnny_is_dead == false) { Commands->Send_Custom_Event( obj, johnny, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_BOBBY_02) { if (bobby != NULL && bobby_is_dead == false) { Commands->Send_Custom_Event( obj, bobby, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_JIMMY_02) { if (jimmy != NULL && jimmy_is_dead == false) { Commands->Send_Custom_Event( obj, jimmy, 0, M01_START_ACTING_JDG, 0.25f ); } } else if (chiefs_location == GOING_TO_WILLIAMS_02) { if (williams != NULL && williams_is_dead == false) { Commands->Send_Custom_Event( obj, williams, 0, M01_START_ACTING_JDG, 0.25f ); } } } } }; DECLARE_SCRIPT(M04_EngineRoom_PrisonLift_EnterZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Vector3 spawnSpot (-0.512f, -95.434f, 0); GameObject * liftEngineer = Commands->Create_Object ( "Nod_Engineer_0", spawnSpot ); Commands->Attach_Script(liftEngineer, "M04_EngineRoom_LiftEngineer_JDG", ""); GameObject * zone01 = Commands->Find_Object (101121); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone02 = Commands->Find_Object (101122); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } GameObject * zone03 = Commands->Find_Object (101123); if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } } } }; DECLARE_SCRIPT(M04_EngineRoom_LiftEngineer_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 100, 101 ); params.Set_Movement( Vector3(-0.19f, -105.53f, -9), RUN, 1 ); Commands->Action_Goto( obj, params ); } }; DECLARE_SCRIPT(M04_EngineRoom_Start_Guard_Conversation_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { GameObject * prisonGuard01 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_01_JDG ); GameObject * prisonGuard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (prisonGuard01 != NULL) { Commands->Send_Custom_Event( obj, prisonGuard01, 0, M01_START_ACTING_JDG, 0 ); } if (prisonGuard02 != NULL) { Commands->Send_Custom_Event( obj, prisonGuard02, 0, M01_START_ACTING_JDG, 0 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_EngineRoom_Prison_Guard_01_JDG, "")//M04_ENGINEROOM_PRISONGUARD_01_JDG 101988 { int haze_prisoner_conv; int counter; bool engineDestroyed; REGISTER_VARIABLES() { SAVE_VARIABLE(engineDestroyed, 1); SAVE_VARIABLE(haze_prisoner_conv, 2); SAVE_VARIABLE(counter, 3); } void Created( GameObject * obj ) { engineDestroyed = false; Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); counter = 0; GameObject * prisoner = Commands->Find_Object ( 100011 ); if (prisoner != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( prisoner, 0, 0, true ); Commands->Action_Attack ( obj, params ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { Commands->Set_Innate_Is_Stationary ( obj, false ); GameObject* guard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (guard02 != NULL) { Commands->Send_Custom_Event( obj, guard02, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } void Killed( GameObject * obj, GameObject * killer ) { GameObject* prisoner01 = Commands->Find_Object ( M04_PRISON_PRISONER_01_JDG ); if (prisoner01 != NULL) { Commands->Send_Custom_Event( obj, prisoner01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject* guard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (guard02 != NULL) { Commands->Send_Custom_Event( obj, guard02, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { if (param == M01_START_ACTING_JDG && engineDestroyed == false)//controller is telling you to start acting { if (obj) { if (counter >= 3) { counter = 0; } GameObject* guard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (obj && guard02 != NULL ) { char *conversations[3] = { "M04_PrisonHazing_Conversation_01", "M04_PrisonHazing_Conversation_02", "M04_PrisonHazing_Conversation_03", //"M04_PrisonHazing_Conversation_04", }; haze_prisoner_conv = Commands->Create_Conversation( conversations[counter], 65, 100, true); Commands->Join_Conversation( obj, haze_prisoner_conv, false, false ); Commands->Join_Conversation( guard02, haze_prisoner_conv, false, false ); Commands->Start_Conversation( haze_prisoner_conv, haze_prisoner_conv ); Commands->Monitor_Conversation( obj, haze_prisoner_conv ); counter++; } } } else if (param == M01_START_ACTING_JDG && engineDestroyed == true)//controller is telling you to start acting--engines destroyed { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); Commands->Set_Innate_Is_Stationary ( obj, false ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//guard two has been killed/injured M01_MODIFY_YOUR_ACTION_JDG { if (obj) { Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Is_Stationary ( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 10, 0, true ); Commands->Action_Attack ( obj, params ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//the engine has been destroyed--enable foostep hearing { engineDestroyed = true; Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == haze_prisoner_conv) { if ( obj) { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 1 );//pick a new conversation } } } break; } } }; DECLARE_SCRIPT(M04_EngineRoom_Prison_Guard_02_JDG, "")//M04_ENGINEROOM_PRISONGUARD_02_JDG 101989 { bool engineDestroyed; REGISTER_VARIABLES() { SAVE_VARIABLE(engineDestroyed, 1); } void Created( GameObject * obj ) { engineDestroyed = false; Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); GameObject * prisoner = Commands->Find_Object ( M04_PRISON_PRISONER_01_JDG ); if (prisoner != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, 999); params.Set_Attack( prisoner, 0, 0, true ); Commands->Action_Attack ( obj, params ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { Commands->Set_Innate_Is_Stationary ( obj, false ); GameObject* guard01 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_01_JDG ); if (guard01 != NULL) { Commands->Send_Custom_Event( obj, guard01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } void Killed( GameObject * obj, GameObject * killer ) { GameObject* prisoner01 = Commands->Find_Object ( M04_PRISON_PRISONER_01_JDG ); if (prisoner01 != NULL) { Commands->Send_Custom_Event( obj, prisoner01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject* guard01 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_01_JDG ); if (guard01 != NULL) { Commands->Send_Custom_Event( obj, guard01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG && engineDestroyed == false)//controller is telling you to start acting { } else if (param == M01_START_ACTING_JDG && engineDestroyed == true)//controller is telling you to start acting--engines destroyed { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); Commands->Set_Innate_Is_Stationary ( obj, false ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//guard one has been killed/injured { if (obj) { Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Is_Stationary ( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 10, 0, true ); Commands->Action_Attack ( obj, params ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//the engine has been destroyed--enable foostep hearing { engineDestroyed = true; Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); } } }; DECLARE_SCRIPT(M04_EngineRoom_TalkToPrisoners_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { bool playerHasLev01Card = Commands->Has_Key( STAR, 1 ); if (playerHasLev01Card == false) { GameObject * prisoner01 = Commands->Find_Object (M04_PRISON_PRISONER_01_JDG); if (prisoner01 != NULL) { Commands->Send_Custom_Event( obj, prisoner01, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 );//tell prisoner 3 that Havoc is close by } Commands->Destroy_Object ( obj ); } else { Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M04_EngineRoom_Prisoner_01_JDG, "")//this guys ID number is M04_PRISON_PRISONER_01_JDG 100011 { bool prison_guard_01_dead; bool prison_guard_02_dead; bool firstTimeDamaged; bool freedYet; bool seenHavoc; int its_gdi_conv; int wave_counter; int medlab_conv; REGISTER_VARIABLES() { SAVE_VARIABLE(prison_guard_01_dead, 1); SAVE_VARIABLE(prison_guard_02_dead, 2); SAVE_VARIABLE(firstTimeDamaged, 3); SAVE_VARIABLE(freedYet, 4); SAVE_VARIABLE(seenHavoc, 5); SAVE_VARIABLE(its_gdi_conv, 6); SAVE_VARIABLE(wave_counter, 7); SAVE_VARIABLE(medlab_conv, 8); } void Created( GameObject * obj ) { wave_counter = 0; seenHavoc = false; firstTimeDamaged = true; prison_guard_01_dead = false; prison_guard_02_dead = false; freedYet = false; Commands->Set_Innate_Is_Stationary ( obj, true); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR ) { int myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); if (firstTimeDamaged == true) { Commands->Create_Sound ( "00-N066E", Vector3 (0,0,0), obj );//you are firing on a friendly unit firstTimeDamaged = false; ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_J21C", false ); Commands->Action_Play_Animation ( obj, params ); //Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Create_Sound ( "M04 PanicGuy 01 Twiddler", myPosition, obj ); } } } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { ActionParamsStruct params; if (param == M01_IVE_BEEN_KILLED_JDG)//prison guard one is dead { GameObject * prisonGuard01 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_01_JDG ); GameObject * prisonGuard02 = Commands->Find_Object ( M04_ENGINEROOM_PRISONGUARD_02_JDG ); if (sender == prisonGuard01) { prison_guard_01_dead = true; Commands->Send_Custom_Event( obj, obj, 0, M01_DO_DAMAGE_CHECK_JDG, 1 ); } if (sender == prisonGuard02) { prison_guard_02_dead = true; Commands->Send_Custom_Event( obj, obj, 0, M01_DO_DAMAGE_CHECK_JDG, 1 ); } } else if (param == M01_DO_DAMAGE_CHECK_JDG)//check if both are dead yet { if ((prison_guard_01_dead == true) && (prison_guard_02_dead == true) && freedYet == false && seenHavoc == false) { seenHavoc = true; ActionParamsStruct params; params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 1 ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { its_gdi_conv = Commands->Create_Conversation( "M04_Is_That_a_GDI_Soldier", 100, 100, false); Commands->Join_Conversation( obj, its_gdi_conv, false, true, true ); Commands->Join_Conversation( STAR, its_gdi_conv, false, true, true ); Commands->Start_Conversation( its_gdi_conv, its_gdi_conv ); Commands->Monitor_Conversation( obj, its_gdi_conv ); } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG && wave_counter <= 4)// { params.Set_Basic( this, 100, M01_MODIFY_YOUR_ACTION_03_JDG); params.Set_Animation( "H_A_J01C", false );//this is animation for hanging head down Commands->Action_Play_Animation (obj, params); wave_counter++; } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG && wave_counter < 100)//playre is in first talk zone--start conversation { Commands->Action_Reset ( obj, 100 ); wave_counter = 100; medlab_conv = Commands->Create_Conversation( "M04_Prisoner_Guard_is_in_Medlab_Conversation", 100, 100, false); Commands->Join_Conversation( obj, medlab_conv, false, true, true ); Commands->Join_Conversation( STAR, medlab_conv, false, true, true ); Commands->Start_Conversation( medlab_conv, medlab_conv ); Commands->Monitor_Conversation( obj, medlab_conv ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been freed--cheer you ungrateful bastard { freedYet = true; char *animationName = M01_Choose_Cheer_Animation ( ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "M01_GDI_Thanks_Twiddler", myPosition, obj ); } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL)//prisoner one is at his hazing spot { params.Set_Basic( this, 100, 102); params.Set_Animation( "H_A_J06C", false );//this is animation for hanging head down Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Destroy_Object ( obj ); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { firstTimeDamaged = true; } else if (action_id == M01_MODIFY_YOUR_ACTION_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 1 ); } else if (action_id == its_gdi_conv && complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 1 ); } else if (action_id == medlab_conv && complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { GameObject * objectiveController = Commands->Find_Object ( M04_OBJECTIVE_CONTROLLER_JDG ); if (objectiveController != NULL) { Commands->Send_Custom_Event( obj, objectiveController, 0, 401, 1 ); } } } }; DECLARE_SCRIPT(M04_EngineRoom_Prisoner_02_JDG, "")//this guys ID number is M04_PRISON_PRISONER_02_JDG 101196 { bool firstTimeDamaged; REGISTER_VARIABLES() { SAVE_VARIABLE(firstTimeDamaged, 1); } void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Loiters_Allowed( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_7002", true ); Commands->Action_Play_Animation ( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { int myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); if (firstTimeDamaged == true) { Commands->Create_Sound ( "00-N066E", Vector3 (0,0,0), obj );//you are firing on a friendly unit firstTimeDamaged = false; } } } }; /*DECLARE_SCRIPT(M04_EngineRoom_Prisoner_02_JDG, "")//this guys ID number is M04_PRISON_PRISONER_02_JDG 101196 { bool firstTimeDamaged; REGISTER_VARIABLES() { SAVE_VARIABLE(firstTimeDamaged, 1); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true); firstTimeDamaged = true; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { int myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); if (firstTimeDamaged == true) { Commands->Create_Sound ( "00-N066E", Vector3 (0,0,0), obj );//you are firing on a friendly unit firstTimeDamaged = false; ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_J21C", false ); Commands->Action_Play_Animation ( obj, params ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "M04 PanicGuy 01 Twiddler", myPosition, obj ); } } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been freed--cheer you ungrateful bastard { char *animationName = M01_Choose_Cheer_Animation ( ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "M01_GDI_Thanks_Twiddler", myPosition, obj ); } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Destroy_Object ( obj ); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { firstTimeDamaged = true; } } };*/ DECLARE_SCRIPT(M04_EngineRoom_Prisoner_03_JDG, "")//this guys ID number is M04_PRISON_PRISONER_03_JDG 100013 { bool firstTimeDamaged; bool freedYet; REGISTER_VARIABLES() { SAVE_VARIABLE(freedYet, 1); SAVE_VARIABLE(firstTimeDamaged, 2); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true); firstTimeDamaged = true; freedYet = false; ActionParamsStruct params; params.Set_Basic( this, 100, 102); params.Set_Animation( "H_A_J13B", true );//this is animation for looping pushups Commands->Action_Play_Animation (obj, params); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { ActionParamsStruct params; if (obj && damager == STAR) { int myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); if (firstTimeDamaged == true) { Commands->Create_Sound ( "00-N066E", Vector3 (0,0,0), obj );//you are firing on a friendly unit firstTimeDamaged = false; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_J21C", false ); Commands->Action_Play_Animation ( obj, params ); //Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Create_Sound ( "M04 PanicGuy 01 Twiddler", myPosition, obj ); } } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { ActionParamsStruct params; if (param == 3000) { Commands->Action_Reset ( obj, 100 ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( STAR, 0, 0, true); Commands->Action_Attack(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 2 ); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//ask havco if he has the key yet { if (freedYet == false) { int key_conv = Commands->Create_Conversation( "M04_DoYouHaveTheKey_Conversation", 100, 1000, false); Commands->Join_Conversation( obj, key_conv, false, false, false); Commands->Join_Conversation( STAR, key_conv, false, false, false); Commands->Start_Conversation( key_conv, key_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//you've been freed--cheer you ungrateful bastard { freedYet = true; char *animationName = M01_Choose_Cheer_Animation ( ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); //Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Create_Sound ( "M01_GDI_Thanks_Twiddler", myPosition, obj ); } } void Poked( GameObject * obj, GameObject * poker ) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( STAR, 0, 0, true); Commands->Action_Attack(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 1 ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Destroy_Object ( obj ); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { firstTimeDamaged = true; } } }; DECLARE_SCRIPT(M04_Prison_CellDoor_Zone_JDG, "") { void Created( GameObject * obj ) { Commands->Static_Anim_Phys_Goto_Frame ( M04_PRISON_DOOR_JDG, 0, "SHP_DOORP01.SHP_DOORP01" );//182085 } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { } } } void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { bool playerHasPrisonKey = Commands->Has_Key( STAR, 1 ); if (playerHasPrisonKey == true) { GameObject *prisoner01 = Commands->Find_Object (M04_PRISON_PRISONER_01_JDG); GameObject *prisoner02 = Commands->Find_Object (M04_PRISON_PRISONER_02_JDG); GameObject *prisoner03 = Commands->Find_Object (M04_PRISON_PRISONER_03_JDG); if (prisoner01 != NULL) { Commands->Destroy_Object ( prisoner01 ); } if (prisoner02 != NULL) { Commands->Destroy_Object ( prisoner02 ); } if (prisoner03 != NULL) { Commands->Destroy_Object ( prisoner03 ); } Commands->Set_Position ( STAR, Vector3(-7.478f, -80.231f, -0.000) ); Commands->Set_Facing ( STAR, -125 ); Commands->Control_Enable ( STAR, false ); Commands->Set_Is_Rendered( STAR, false ); GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", "X4A_MIDTRO.txt"); Commands->Static_Anim_Phys_Goto_Frame ( M04_PRISON_DOOR_JDG, 6, "SHP_DOORP01.SHP_DOORP01" ); Commands->Destroy_Object ( obj );//cleaning up this zone } else { GameObject * prisoner03 = Commands->Find_Object (M04_PRISON_PRISONER_03_JDG); if (prisoner03 != NULL) { Commands->Send_Custom_Event( obj, prisoner03, 0, 3000, 0 );//tell prisoner 3 that Havoc is close by } } } } }; /********************************************************************************************************** The following scripts all deal with the aft deck on the way to kill the first mate. ***********************************************************************************************************/ DECLARE_SCRIPT(M04_AftDeck_InnerSanctum_Entry_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Create_Sound ( "00-n060e", Commands->Get_Position ( obj ), obj );//updating radar flags Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 4000, 0 );//tell aft deck controller that player is moving forward GameObject *zone02 = Commands->Find_Object ( 100648 ); if (zone02 != NULL) { Commands->Destroy_Object (zone02); } } } }; DECLARE_SCRIPT(M04_AftDeck_InnerSanctum_02_Entry_Zone_JDG, "")//player is almost to secondary bridge { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Create_Sound ( "00-n060e", Commands->Get_Position ( obj ), obj );//updating radar flags Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 5000, 0 );//tell aft deck controller that player is moving forward Commands->Destroy_Object ( obj ); //clean up the zone } } }; DECLARE_SCRIPT(M04_AftDeck_02_Controller_JDG, "")//this guys number is M04_AFT_DECK_CONTROLLER_JDG 100624 { int number_of_guys_killed; int prisoner_reinforcements; int patrolGuy01_ID; int patrolGuy02_ID ; int pointGuard01_ID; int pointGuard02_ID; int BHpatrolGuy_ID; int prisonGuard01_ID; int prisonGuard02_ID; int lockerRoompatrolGuy01_ID; int lockerRoompatrolGuy02_ID; int leftBarracksTalkGuy01_ID; int leftBarracksTalkGuy02_ID; int leftBarracksTalkGuy03_ID; int rightBarrackspatrolGuy_ID; int blackHandPointGuard01_ID; int blackHandPointGuard02_ID; int miniGunnerGuard01_ID; int miniGunnerGuard02_ID; int miniGunnerGuard03_ID; int blackHandMateGuard01_ID; int blackHandMateGuard02_ID; int blackHandMateGuard03_ID; int blackHandMateGuard04_ID; REGISTER_VARIABLES() { SAVE_VARIABLE( number_of_guys_killed, 1 ); SAVE_VARIABLE( prisoner_reinforcements, 2 ); SAVE_VARIABLE( patrolGuy01_ID, 3 ); SAVE_VARIABLE( patrolGuy02_ID, 4 ); SAVE_VARIABLE( pointGuard01_ID, 5 ); SAVE_VARIABLE( pointGuard02_ID, 6 ); SAVE_VARIABLE( BHpatrolGuy_ID, 7 ); SAVE_VARIABLE( prisonGuard01_ID, 8 ); SAVE_VARIABLE( prisonGuard02_ID, 9 ); SAVE_VARIABLE( lockerRoompatrolGuy01_ID, 10 ); SAVE_VARIABLE( lockerRoompatrolGuy02_ID, 11 ); SAVE_VARIABLE( leftBarracksTalkGuy01_ID, 12 ); SAVE_VARIABLE( leftBarracksTalkGuy02_ID, 13 ); SAVE_VARIABLE( leftBarracksTalkGuy03_ID, 14 ); SAVE_VARIABLE( rightBarrackspatrolGuy_ID, 15 ); SAVE_VARIABLE( blackHandPointGuard01_ID, 16 ); SAVE_VARIABLE( blackHandPointGuard02_ID, 17 ); SAVE_VARIABLE( miniGunnerGuard01_ID, 18 ); SAVE_VARIABLE( miniGunnerGuard02_ID, 19 ); SAVE_VARIABLE( miniGunnerGuard03_ID, 20 ); SAVE_VARIABLE( blackHandMateGuard01_ID, 21 ); SAVE_VARIABLE( blackHandMateGuard02_ID, 22 ); SAVE_VARIABLE( blackHandMateGuard03_ID, 23 ); SAVE_VARIABLE( blackHandMateGuard04_ID, 24 ); } void Created( GameObject * obj ) { number_of_guys_killed = 0; prisoner_reinforcements = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//recieved custom from enter zone to start scenario { GameObject *patrolGuy01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-.90f, -127.01f, 3.00f)); Commands->Attach_Script(patrolGuy01, "M04_AftDeck_02_PatrolGuy_01_JDG", ""); GameObject *patrolGuy02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(6.64f, -116.10f, 3.00f)); Commands->Attach_Script(patrolGuy02, "M04_AftDeck_02_PatrolGuy_02_JDG", ""); GameObject *pointGuard01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-14.09f, -108.50f, 3.00f)); Commands->Attach_Script(pointGuard01, "M04_AftDeck_02_Pointguard_JDG", ""); GameObject *pointGuard02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(13.83f, -108.00f, 3.00f)); Commands->Attach_Script(pointGuard02, "M04_AftDeck_02_Pointguard_JDG", ""); GameObject *BHpatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(8.51f, -108.05f, 6.00f)); Commands->Attach_Script(BHpatrolGuy, "M04_AftDeck_02_Blackhand_PatrolGuy_JDG", ""); GameObject *prisonGuard01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(9.80f, -72.88f, 0)); Commands->Attach_Script(prisonGuard01, "M04_PointGuard_JDG", ""); GameObject *prisonGuard02 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-9.39f, -72.49f, 0)); Commands->Attach_Script(prisonGuard02, "M04_PointGuard_JDG", ""); patrolGuy01_ID = Commands->Get_ID ( patrolGuy01 );; patrolGuy02_ID = Commands->Get_ID ( patrolGuy02 ); pointGuard01_ID = Commands->Get_ID ( pointGuard01 ); pointGuard02_ID = Commands->Get_ID ( pointGuard02 ); BHpatrolGuy_ID = Commands->Get_ID ( BHpatrolGuy ); prisonGuard01_ID = Commands->Get_ID ( prisonGuard01 ); prisonGuard02_ID = Commands->Get_ID ( prisonGuard02 ); } else if (param == 200)//someone's been killed { number_of_guys_killed++; if ((number_of_guys_killed == 2) ) { //Commands->Create_Sound ( "ThereHeIs", Vector3(8.51f, -108.05f, 6.00f), obj ); Commands->Send_Custom_Event( obj, obj, 0, 2000, 2 );//play second dialog line "call reinforcements" } if ((number_of_guys_killed >= 2) && (number_of_guys_killed <= 5) ) { GameObject *reinforceGuy02 = Commands->Trigger_Spawner( 100630 ); Commands->Attach_Script(reinforceGuy02, "M04_AftDeck_Reinforcement_JDG", ""); float motto_reinforce_ka = Commands->Get_Random ( 0.5, 2.5 ); if ((motto_reinforce_ka >= 0.5) && (motto_reinforce_ka < 1.5) ) { float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 1000, delayTimer );//spawn 2 more guys } } } else if (param == 1000)//spawn 2 more guys after short delay { if ((number_of_guys_killed >= 2) && (number_of_guys_killed <= 5) ) { GameObject *reinforceGuy01 = Commands->Trigger_Spawner( 100629 ); GameObject *reinforceGuy02 = Commands->Trigger_Spawner( 100630 ); Commands->Attach_Script(reinforceGuy01, "M04_AftDeck_Reinforcement_JDG", ""); Commands->Attach_Script(reinforceGuy02, "M04_AftDeck_Reinforcement_JDG", ""); } } else if (param == 2000)//play dialog line "call reinforcements" { //Commands->Create_Sound ( "CallReinforcements", Vector3(8.51f, -108.05f, 6.00f), obj ); } else if ((param == 3000) && (prisoner_reinforcements <= 5) )//prisoners have been rescued--release the hounds { prisoner_reinforcements++; GameObject *reinforceGuy01 = NULL; GameObject *reinforceGuy02 = NULL; reinforceGuy01 = Commands->Trigger_Spawner( 100629 ); reinforceGuy02 = Commands->Trigger_Spawner( 100630 ); Commands->Attach_Script(reinforceGuy01, "M04_AftDeck_Reinforcement_JDG", ""); Commands->Attach_Script(reinforceGuy02, "M04_AftDeck_Reinforcement_JDG", ""); } else if (param == 4000) //player is moving up toward first mate { GameObject *lockerRoompatrolGuy01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(2.53f, -76.81f, 6.00f)); Commands->Attach_Script(lockerRoompatrolGuy01, "M04_Aft_LockerRoom_PatrolGuy01_JDG", ""); GameObject *lockerRoompatrolGuy02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-1.65f, -76.81f, 6.00f)); Commands->Attach_Script(lockerRoompatrolGuy02, "M04_Aft_LockerRoom_PatrolGuy02_JDG", ""); GameObject *leftBarracksTalkGuy01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(11.01f, -103.69f, 6.00f)); Commands->Attach_Script(leftBarracksTalkGuy01, "M04_Aft_LeftBarracks_TalkGuy_JDG", ""); Commands->Set_Facing ( leftBarracksTalkGuy01, 160); GameObject *leftBarracksTalkGuy02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(9.25f, -100.55f, 6.00f)); Commands->Attach_Script(leftBarracksTalkGuy02, "M04_Aft_LeftBarracks_TalkGuy_JDG", ""); Commands->Set_Facing ( leftBarracksTalkGuy02, -75); GameObject *leftBarracksTalkGuy03 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(9.33f, -103.77f, 6.00f)); Commands->Attach_Script(leftBarracksTalkGuy03, "M04_Aft_LeftBarracks_TalkGuy_JDG", ""); Commands->Set_Facing ( leftBarracksTalkGuy03, 60); GameObject *rightBarrackspatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-9.33f, -102.35f, 6.00f)); Commands->Attach_Script(rightBarrackspatrolGuy, "M04_Aft_RightBarracks_PatrolGuy_JDG", ""); lockerRoompatrolGuy01_ID = Commands->Get_ID ( lockerRoompatrolGuy01 ); lockerRoompatrolGuy02_ID = Commands->Get_ID ( lockerRoompatrolGuy02 ); leftBarracksTalkGuy01_ID = Commands->Get_ID ( leftBarracksTalkGuy01 ); leftBarracksTalkGuy02_ID = Commands->Get_ID ( leftBarracksTalkGuy02 ); leftBarracksTalkGuy03_ID = Commands->Get_ID ( leftBarracksTalkGuy03 ); rightBarrackspatrolGuy_ID = Commands->Get_ID ( rightBarrackspatrolGuy ); } else if (param == 5000) //player is almost at first mate { GameObject *blackHandPointGuard02 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(9.13f, -86.51f, 9.00f)); Commands->Set_Facing ( blackHandPointGuard02, -90); GameObject *miniGunnerGuard01 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(-9.25f, -76.39f, 9.00f)); GameObject *miniGunnerGuard02 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(0.46f, -75.99f, 9.00f)); GameObject *miniGunnerGuard03 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(11.11f, -76.49f, 9.00f)); GameObject *blackHandMateGuard01 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(3.24f, -79.21f, 12.00f)); Commands->Attach_Script(blackHandMateGuard01, "M04_Aft_FirstMateBodyguard_JDG", ""); Commands->Set_Facing ( blackHandMateGuard01, 0); GameObject *blackHandMateGuard02 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(3.85f, -85.44f, 12.00f)); Commands->Attach_Script(blackHandMateGuard02, "M04_Aft_FirstMateBodyguard_JDG", ""); Commands->Set_Facing ( blackHandMateGuard02, 0); GameObject *blackHandMateGuard03 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(-4.25f, -85.21f, 12.00f)); Commands->Attach_Script(blackHandMateGuard03, "M04_Aft_FirstMateBodyguard_JDG", ""); Commands->Set_Facing ( blackHandMateGuard03, 175); GameObject *blackHandMateGuard04 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(-4.19f, -79.31f, 12.00f)); Commands->Attach_Script(blackHandMateGuard04, "M04_Aft_FirstMateBodyguard_JDG", ""); Commands->Set_Facing ( blackHandMateGuard04, 175); blackHandPointGuard02_ID = Commands->Get_ID ( blackHandPointGuard02 ); miniGunnerGuard01_ID = Commands->Get_ID ( miniGunnerGuard01 ); miniGunnerGuard02_ID = Commands->Get_ID ( miniGunnerGuard02 ); miniGunnerGuard03_ID = Commands->Get_ID ( miniGunnerGuard03 ); blackHandMateGuard01_ID = Commands->Get_ID ( blackHandMateGuard01 ); blackHandMateGuard02_ID = Commands->Get_ID ( blackHandMateGuard02 ); blackHandMateGuard03_ID = Commands->Get_ID ( blackHandMateGuard03 ); blackHandMateGuard04_ID = Commands->Get_ID ( blackHandMateGuard04 ); } else if (param == 5500) //tell body guards to goto innate { GameObject *blackHandMateGuard01 = Commands->Find_Object ( blackHandMateGuard01_ID ); if (blackHandMateGuard01 != NULL) { Commands->Send_Custom_Event( obj, blackHandMateGuard01, 0, 100, 0 ); } GameObject *blackHandMateGuard02 = Commands->Find_Object ( blackHandMateGuard02_ID ); if (blackHandMateGuard02 != NULL) { Commands->Send_Custom_Event( obj, blackHandMateGuard02, 0, 100, 0 ); } GameObject *blackHandMateGuard03 = Commands->Find_Object ( blackHandMateGuard03_ID ); if (blackHandMateGuard03 != NULL) { Commands->Send_Custom_Event( obj, blackHandMateGuard03, 0, 100, 0 ); } GameObject *blackHandMateGuard04 = Commands->Find_Object ( blackHandMateGuard04_ID ); if (blackHandMateGuard04 != NULL) { Commands->Send_Custom_Event( obj, blackHandMateGuard04, 0, 100, 0 ); } } else if (param == 6000) //player is leaving the aft deck...clean up any remaing soldiers { GameObject *patrolGuy01 = Commands->Find_Object ( patrolGuy01_ID ); if (patrolGuy01 != NULL) { Commands->Destroy_Object ( patrolGuy01 ); } GameObject *patrolGuy02 = Commands->Find_Object ( patrolGuy02_ID ); if (patrolGuy02 != NULL) { Commands->Destroy_Object ( patrolGuy02 ); } GameObject *pointGuard01 = Commands->Find_Object ( pointGuard01_ID ); if (pointGuard01 != NULL) { Commands->Destroy_Object ( pointGuard01 ); } GameObject *pointGuard02 = Commands->Find_Object ( pointGuard02_ID ); if (pointGuard02 != NULL) { Commands->Destroy_Object ( pointGuard02 ); } GameObject *BHpatrolGuy = Commands->Find_Object ( BHpatrolGuy_ID ); if (BHpatrolGuy != NULL) { Commands->Destroy_Object ( BHpatrolGuy ); } GameObject *prisonGuard01 = Commands->Find_Object ( prisonGuard01_ID ); if (prisonGuard01 != NULL) { Commands->Destroy_Object ( prisonGuard01 ); } GameObject *prisonGuard02 = Commands->Find_Object ( prisonGuard02_ID ); if (prisonGuard02 != NULL) { Commands->Destroy_Object ( prisonGuard02 ); } GameObject *lockerRoompatrolGuy01 = Commands->Find_Object ( lockerRoompatrolGuy01_ID ); if (lockerRoompatrolGuy01 != NULL) { Commands->Destroy_Object ( lockerRoompatrolGuy01 ); } GameObject *lockerRoompatrolGuy02 = Commands->Find_Object ( lockerRoompatrolGuy02_ID ); if (lockerRoompatrolGuy02 != NULL) { Commands->Destroy_Object ( lockerRoompatrolGuy02 ); } GameObject *leftBarracksTalkGuy01 = Commands->Find_Object ( leftBarracksTalkGuy01_ID ); if (leftBarracksTalkGuy01 != NULL) { Commands->Destroy_Object ( leftBarracksTalkGuy01 ); } GameObject *leftBarracksTalkGuy02 = Commands->Find_Object ( leftBarracksTalkGuy02_ID ); if (leftBarracksTalkGuy02 != NULL) { Commands->Destroy_Object ( leftBarracksTalkGuy02 ); } GameObject *leftBarracksTalkGuy03 = Commands->Find_Object ( leftBarracksTalkGuy03_ID ); if (leftBarracksTalkGuy03 != NULL) { Commands->Destroy_Object ( leftBarracksTalkGuy03 ); } GameObject *rightBarrackspatrolGuy = Commands->Find_Object ( rightBarrackspatrolGuy_ID ); if (rightBarrackspatrolGuy != NULL) { Commands->Destroy_Object ( rightBarrackspatrolGuy ); } GameObject *blackHandPointGuard01 = Commands->Find_Object ( blackHandPointGuard01_ID ); if (blackHandPointGuard01 != NULL) { Commands->Destroy_Object ( blackHandPointGuard01 ); } GameObject *blackHandPointGuard02 = Commands->Find_Object ( blackHandPointGuard02_ID ); if (blackHandPointGuard02 != NULL) { Commands->Destroy_Object ( blackHandPointGuard02 ); } GameObject *miniGunnerGuard01 = Commands->Find_Object ( miniGunnerGuard01_ID ); if (miniGunnerGuard01 != NULL) { Commands->Destroy_Object ( miniGunnerGuard01 ); } GameObject *miniGunnerGuard02 = Commands->Find_Object ( miniGunnerGuard02_ID ); if (miniGunnerGuard02 != NULL) { Commands->Destroy_Object ( miniGunnerGuard02 ); } GameObject *miniGunnerGuard03 = Commands->Find_Object ( miniGunnerGuard03_ID ); if (miniGunnerGuard03 != NULL) { Commands->Destroy_Object ( miniGunnerGuard03 ); } GameObject *blackHandMateGuard01 = Commands->Find_Object ( blackHandMateGuard01_ID ); if (blackHandMateGuard01 != NULL) { Commands->Destroy_Object ( blackHandMateGuard01 ); } GameObject *blackHandMateGuard02 = Commands->Find_Object ( blackHandMateGuard02_ID ); if (blackHandMateGuard02 != NULL) { Commands->Destroy_Object ( blackHandMateGuard02 ); } GameObject *blackHandMateGuard03 = Commands->Find_Object ( blackHandMateGuard03_ID ); if (blackHandMateGuard03 != NULL) { Commands->Destroy_Object ( blackHandMateGuard03 ); } GameObject *blackHandMateGuard04 = Commands->Find_Object ( blackHandMateGuard04_ID ); if (blackHandMateGuard04 != NULL) { Commands->Destroy_Object ( blackHandMateGuard04 ); } GameObject *reinforceGuy01 = Commands->Trigger_Spawner( 100724 ); GameObject *reinforceGuy02 = Commands->Trigger_Spawner( 100725 ); GameObject *reinforceGuy03 = Commands->Trigger_Spawner( 100579 ); GameObject *reinforceGuy04 = Commands->Trigger_Spawner( 100581 ); Commands->Attach_Script(reinforceGuy01, "M04_AftDeck_Reinforcement_JDG", ""); Commands->Attach_Script(reinforceGuy02, "M04_AftDeck_Reinforcement_JDG", ""); Commands->Attach_Script(reinforceGuy03, "M04_AftDeck_Reinforcement_JDG", ""); Commands->Attach_Script(reinforceGuy04, "M04_AftDeck_Reinforcement_JDG", ""); } } }; DECLARE_SCRIPT(M04_Aft_FirstMateBodyguard_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable( obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//here comes the player--goto innate { if (obj) { Commands->Innate_Enable(obj); Commands->Set_Innate_Aggressiveness ( obj, .50f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 1.0f ); } } } }; DECLARE_SCRIPT(M04_SecondaryBridge_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_SHIPS_FIRST_MATE_JDG), 0, 100, 0 );//tell first mate to start hearing stuff //Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 1000, 0 );//tell objective controller to play battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 5500, 0 );//tell bodyguards to goto innate GameObject * zone01 = Commands->Find_Object ( 100684 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//clean up the two zones } GameObject * zone02 = Commands->Find_Object ( 100686 ); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//clean up the two zones } } } }; DECLARE_SCRIPT(M04_Player_Is_Leaving_Aft_Deck_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 6000, 0 );//tell aft deck controller to clean up any remaining soldiers GameObject * zone01 = Commands->Find_Object ( 100726 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//clean up the two zones } GameObject * zone02 = Commands->Find_Object ( 100727 ); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//clean up the two zones } } } }; DECLARE_SCRIPT(M04_Aft_RightBarracks_PatrolGuy_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100667; params.WaypointStartID = 100668; params.WaypointEndID = 100669; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100671; params.WaypointStartID = 100672; params.WaypointEndID = 100673; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100667; params.WaypointStartID = 100668; params.WaypointEndID = 100669; Commands->Action_Goto( obj, params );; } } }; DECLARE_SCRIPT(M04_Aft_LeftBarracks_TalkGuy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Vector3 goto_spot = Commands->Get_Position( obj ); params.Set_Basic(this, 45, 100); params.Set_Movement( goto_spot, .750f, .25f ); Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, 100 ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } } }; DECLARE_SCRIPT(M04_Aft_LockerRoom_PatrolGuy01_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100649; params.WaypointStartID = 100650; params.WaypointEndID = 100651; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100653; params.WaypointStartID = 100654; params.WaypointEndID = 100655; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100657; params.WaypointStartID = 100658; params.WaypointEndID = 100659; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_Aft_LockerRoom_PatrolGuy02_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE( curr_action_id, 1 ); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100661; params.WaypointStartID = 100662; params.WaypointEndID = 100663; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100657; params.WaypointStartID = 100658; params.WaypointEndID = 100659; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100653; params.WaypointStartID = 100654; params.WaypointEndID = 100655; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_AftDeck_Reinforcement_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Vector3 player_location = Commands->Get_Position ( STAR ); params.Set_Basic( this, 45, 100 ); params.Set_Movement( player_location, 1.0f, 7.0f ); Commands->Action_Goto( obj, params ); Commands->Grant_Key( obj, 1, true ); Commands->Grant_Key( obj, 2, true ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell aft deck controller that you've been killed } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; Vector3 player_location = Commands->Get_Position ( STAR ); params.Set_Basic( this, 50, 100 ); params.Set_Movement( player_location, 1.0f, 7.0f ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_AftDeck_02_PatrolGuy_01_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100249; params.WaypointStartID = 100250; params.WaypointEndID = 100251; Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell aft deck controller that you've been killed } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 101 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100253; params.WaypointStartID = 100254; params.WaypointEndID = 100255; Commands->Action_Goto( obj, params ); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100249; params.WaypointStartID = 100250; params.WaypointEndID = 100251; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_AftDeck_02_PatrolGuy_02_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100238; params.WaypointStartID = 100239; params.WaypointEndID = 100242; Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell aft deck controller that you've been killed } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 101 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100244; params.WaypointStartID = 100245; params.WaypointEndID = 100247; Commands->Action_Goto( obj, params ); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100238; params.WaypointStartID = 100239; params.WaypointEndID = 100242; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_AftDeck_02_Blackhand_PatrolGuy_JDG, "") { void Created( GameObject * obj ) { float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 100, delayTimer ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell aft deck controller that you've been killed } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { Vector3 look_to_spot(-0.69f, -128.52f, 4.05f); Vector3 present_location = Commands->Get_Position ( obj );; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 500 ); params.Set_Movement( present_location, .20f, .25f ); params.Set_Attack (look_to_spot, 0,0, true); Commands->Action_Attack( obj, params); float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 101, delayTimer ); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 500 ); params.Set_Movement( present_location, .20f, .25f ); params.Set_Attack (look_to_spot, 0,0, true); Commands->Action_Attack( obj, params); float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 102, delayTimer ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 500 ); params.Set_Movement( present_location, .20f, .25f ); params.Set_Attack (look_to_spot, 0,0, true); Commands->Action_Attack( obj, params); float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 103, delayTimer ); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { ActionParamsStruct params; params.Set_Basic( this, 45, 500 ); params.Set_Movement( present_location, .20f, .25f ); params.Set_Attack (look_to_spot, 0,0, true); Commands->Action_Attack( obj, params); float delayTimer = Commands->Get_Random ( 2, 5 ); Commands->Send_Custom_Event( obj, obj, 0, 100, delayTimer ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//recieved custom to goto next waypath { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100607; params.WaypointStartID = 100608; params.WaypointEndID = 100609; Commands->Action_Goto( obj, params ); } else if (param == 101)//recieved custom to goto next waypath { ActionParamsStruct params; params.Set_Basic( this, 45, 101 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100611; params.WaypointStartID = 100612; params.WaypointEndID = 100613; Commands->Action_Goto( obj, params ); } else if (param == 102)//recieved custom to goto next waypath { ActionParamsStruct params; params.Set_Basic( this, 45, 102 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100615; params.WaypointStartID = 100616; params.WaypointEndID = 100617; Commands->Action_Goto( obj, params ); } else if (param == 103)//recieved custom to goto next waypath { ActionParamsStruct params; params.Set_Basic( this, 45, 103 ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100619; params.WaypointStartID = 100620; params.WaypointEndID = 100621; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_AftDeck_02_Pointguard_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell aft deck controller that you've been killed } }; DECLARE_SCRIPT(M04_AftDeck_02_Entry_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Create_Sound ( "00-n060e", Commands->Get_Position ( obj ), obj );//updating radar flags Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 100, 0 );//tell aft deck controller to start scenario GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-9.160f, -89.962f, 9.000f)); Commands->Attach_Script(sniperTarget01, "M04_Doorway_Enterer_JDG", "-0.091 -107.613 6"); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(9.194f, -77.535f, 3)); Commands->Attach_Script(sniperTarget02, "M04_Doorway_Enterer_JDG", "14.657 -94.107 3"); GameObject * surpriseApache = Commands->Create_Object ( "Nod_Apache", Vector3(-50.075f, 8.732f, 5.534f)); Commands->Attach_Script(surpriseApache, "M04_Surprise_Apache_JDG", ""); Commands->Destroy_Object ( obj ); //clean up the zone } } }; DECLARE_SCRIPT(M04_Surprise_Apache_JDG, "") { void Created( GameObject * obj ) { Commands->Disable_Physical_Collisions ( obj ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), .15f, 10 ); params.WaypathID = 104437; params.MovePathfind = false; //params.WaypointStartID = 104439; //params.WaypointEndID = 101276; Commands->Action_Goto( obj, params ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { Commands->Destroy_Object ( obj ); } } }; /************************************************************************************************************* The following are all the temp scripts for the apache hanger *************************************************************************************************************/ DECLARE_SCRIPT(M04_Apache_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_APACHE_CONTROLLER_JDG), 0, 100, 0 );//tell apache controller to place actors GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-10.057f, 81.803f, -15)); Commands->Attach_Script(sniperTarget01, "M04_Doorway_Enterer_JDG", "-12.689 69.327 -15"); GameObject * huntercontroller = Commands->Find_Object (M04_ENGINEROOM_HUNTING_CONTROLLER_JDG); if (huntercontroller != NULL) { Commands->Send_Custom_Event( obj, huntercontroller, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * zone02 = Commands->Find_Object (200006); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//clean up these zones } GameObject * zone03 = Commands->Find_Object (200008); if (zone03 != NULL) { Commands->Destroy_Object ( zone03 );//clean up these zones } } } }; DECLARE_SCRIPT(M04_ApacheRoom_Controller_JDG, "")//this guys ID number is M04_APACHE_CONTROLLER_JDG 200586 { int m04apache_ID; REGISTER_VARIABLES() { SAVE_VARIABLE(m04apache_ID, 1); } void Created( GameObject * obj ) { m04apache_ID = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//recieved custom from enter zones--here comes the player(s) { GameObject *m04apache = Commands->Create_Object ( "NOD_Apache", Vector3(1.469f, 50.814f, -14.00f)); Commands->Attach_Script(m04apache, "M04_ApacheRoom_Apache_JDG", ""); Commands->Set_Facing ( m04apache, -125 ); GameObject *m04apacheSniper01 = Commands->Create_Object ( "Nod_MiniGunner_2SF", Vector3(-13.728f, 63.244f, -9.003f)); Commands->Attach_Script(m04apacheSniper01, "M04_ApacheRoom_Sniper01_JDG", ""); GameObject *m04apacheSniper02 = Commands->Create_Object ( "Nod_MiniGunner_2SF", Vector3(13.45f, 33.93f, -9.003f)); Commands->Attach_Script(m04apacheSniper02, "M04_ApacheRoom_Sniper02_JDG", ""); m04apache_ID = Commands->Get_ID ( m04apache ); GameObject * tailgun01 = Commands->Find_Object (M04_ROCKET_EMPLACEMENT_01_JDG); GameObject * tailgun02 = Commands->Find_Object (M04_ROCKET_EMPLACEMENT_02_JDG); if (tailgun01 != NULL) { Commands->Send_Custom_Event( obj, tailgun01, M01_MODIFY_YOUR_ACTION_JDG, m04apache_ID, 0 ); } if (tailgun02 != NULL) { Commands->Send_Custom_Event( obj, tailgun02, M01_MODIFY_YOUR_ACTION_JDG, m04apache_ID, 0 ); } } else if (param == 200)//recieved custom from trigger zone--tell apache to take off and attack player { Commands->Send_Custom_Event( obj, Commands->Find_Object (m04apache_ID), 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } }; DECLARE_SCRIPT(M04_ApacheRoom_Sniper01_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE(curr_action_id, 1); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200592; params.WaypointStartID = 200593; params.WaypointEndID = 200594; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200596; params.WaypointStartID = 200597; params.WaypointEndID = 200598; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200592; params.WaypointStartID = 200593; params.WaypointEndID = 200594; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_ApacheRoom_Sniper02_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE(curr_action_id, 1); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200601; params.WaypointStartID = 200602; params.WaypointEndID = 200603; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200605; params.WaypointStartID = 200606; params.WaypointEndID = 200607; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 200601; params.WaypointStartID = 200602; params.WaypointEndID = 200603; Commands->Action_Goto( obj, params ); } } }; /*********************************************************************************************************** The following are the initial scripts for the fore deck ***********************************************************************************************************/ DECLARE_SCRIPT(M04_ForeDeck_RocketGuy_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } }; DECLARE_SCRIPT(M04_ForeDeck_Initial_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 100, 0 );//tell ForeDeck controller that player(s) is approaching GameObject * zone01 = Commands->Find_Object (100784); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//clean up these zones } GameObject * zone06 = Commands->Find_Object (100789); if (zone06 != NULL) { Commands->Destroy_Object ( zone06 );//clean up these zones } } } }; DECLARE_SCRIPT(M04_MedLab_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_PRISON_WARDEN_JDG), 0, 100, 0 );//tell prison warden to start acting Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_MEDLAB_TECHNICIAN_JDG), 0, 100, 0 );//tell medlab tech to start acting GameObject * zone01 = Commands->Find_Object (101054); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//clean up these zones } GameObject * zone02 = Commands->Find_Object (101055); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//clean up these zones } } } }; DECLARE_SCRIPT(M04_ForeDeck_Reinforcement_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Vector3 players_position = Commands->Get_Position ( STAR ); params.Set_Basic( this, 50, 100 ); params.Set_Movement( players_position, 1.0f, .25f ); Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 players_position = Commands->Get_Position ( STAR ); params.Set_Basic( this, 50, 100 ); params.Set_Movement( players_position, 1.0f, .25f ); Commands->Action_Goto( obj, params ); } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M04_ForeDeck_MapRoom_Guard01_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 200, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M04_ForeDeck_MapRoom_Guard02_JDG, "") { int curr_action_id; REGISTER_VARIABLES() { SAVE_VARIABLE(curr_action_id, 1); } void Created( GameObject * obj ) { ActionParamsStruct params; curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100842; params.WaypointStartID = 100843; params.WaypointEndID = 100845; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 101 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100842; params.WaypointStartID = 100845; params.WaypointEndID = 100843; Commands->Action_Goto( obj, params ); } else if (action_id == 102 && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); curr_action_id++; params.Set_Basic( this, 45, curr_action_id ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == 103 && complete_reason == ACTION_COMPLETE_NORMAL) { curr_action_id = 100; params.Set_Basic( this, 45, curr_action_id ); params.Set_Movement( Vector3(0,0,0), .20f, .25f ); params.WaypathID = 100842; params.WaypointStartID = 100843; params.WaypointEndID = 100845; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_ForeDeck_TorpedoRoom_Guard_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 15 ); } }; /************************************************************************************************************* The following scripts are for the foredeck. They include both the messhalls and the captain's encounter. *************************************************************************************************************/ DECLARE_SCRIPT(M04_ForeDeck_Controller_JDG, "")//this guys ID number is M04_FORE_DECK_CONTROLLER_JDG 100790 { int active_soldier_count; int total_mess_reinforcements; int total_BHmess_reinforcements; int torpedoRoomGuard_ID; int mapRoomGuard01_ID; int mapRoomGuard02_ID; int closetGuy01_ID; int BH_messhall_guy01_ID; int BH_messhall_guy02_ID; int BH_messhall_guy03_ID; int BH_messhall_guy04_ID; int BH_messhall_guy05_ID; REGISTER_VARIABLES() { SAVE_VARIABLE(active_soldier_count, 1); SAVE_VARIABLE(total_mess_reinforcements, 2); SAVE_VARIABLE(total_BHmess_reinforcements, 3); SAVE_VARIABLE(torpedoRoomGuard_ID, 4); SAVE_VARIABLE(mapRoomGuard01_ID, 5); SAVE_VARIABLE(mapRoomGuard02_ID, 6); SAVE_VARIABLE(closetGuy01_ID, 7); SAVE_VARIABLE(BH_messhall_guy01_ID, 8); SAVE_VARIABLE(BH_messhall_guy02_ID, 9); SAVE_VARIABLE(BH_messhall_guy03_ID, 10); SAVE_VARIABLE(BH_messhall_guy04_ID, 11); SAVE_VARIABLE(BH_messhall_guy05_ID, 12); } void Created( GameObject * obj ) { active_soldier_count = 0; total_mess_reinforcements = 0; total_BHmess_reinforcements = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//recieved custom from enter zones--here comes the player(s) { Commands->Create_Sound ( "00-n060e", Commands->Get_Position ( obj ), obj ); GameObject *torpedoRoomGuard = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(-.44f, 90.39f, -15.01f)); Commands->Attach_Script(torpedoRoomGuard, "M04_ForeDeck_TorpedoRoom_Guard_JDG", ""); GameObject *mapRoomGuard01 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(5.99f, 91.56f, -6.0f)); Commands->Attach_Script(mapRoomGuard01, "M04_ForeDeck_MapRoom_Guard01_JDG", ""); GameObject *mapRoomGuard02 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(-6.46f, 92.67f, -6.0f)); Commands->Attach_Script(mapRoomGuard02, "M04_ForeDeck_MapRoom_Guard02_JDG", ""); active_soldier_count = 3; torpedoRoomGuard_ID = Commands->Get_ID ( torpedoRoomGuard ); mapRoomGuard01_ID = Commands->Get_ID ( mapRoomGuard01 ); mapRoomGuard02_ID = Commands->Get_ID ( mapRoomGuard02 ); } else if (param == 200)//someone's been killed...spawn reinforcements if needed { active_soldier_count--; total_BHmess_reinforcements++; if (( active_soldier_count <= 6) && (total_BHmess_reinforcements < 4)) { GameObject *foreDeckReinforcement01 = Commands->Trigger_Spawner(100853); GameObject *foreDeckReinforcement02 = Commands->Trigger_Spawner(100854); active_soldier_count++; active_soldier_count++; Commands->Attach_Script(foreDeckReinforcement01, "M04_ForeDeck_Reinforcement_JDG", ""); Commands->Attach_Script(foreDeckReinforcement02, "M04_ForeDeck_Reinforcement_JDG", ""); } } else if (param == 300)//player is going up to grunt's mess hall { active_soldier_count = active_soldier_count + 4; Commands->Send_Custom_Event( obj, obj, 0, 301, 2 ); } else if (param == 301)//play "proceed with caution" warning { Commands->Create_Sound ( "00-c164e", Commands->Get_Position ( obj ), obj );//proceed with caution } else if (param == 500)//player is moving toward captain from grunt mess hall { //find any guys from torpedo or map room and clean them up if needed GameObject * torpedoGuy_01 = Commands->Find_Object (torpedoRoomGuard_ID); if (torpedoGuy_01 != NULL) { Commands->Destroy_Object ( torpedoGuy_01 ); active_soldier_count--; } GameObject * mapGuy_01 = Commands->Find_Object (mapRoomGuard01_ID); if (mapGuy_01 != NULL) { Commands->Destroy_Object ( mapGuy_01 ); active_soldier_count--; } GameObject * mapGuy_02 = Commands->Find_Object (mapRoomGuard02_ID); if (mapGuy_02 != NULL) { Commands->Destroy_Object ( mapGuy_02 ); active_soldier_count--; } //put down the closet surprise guy GameObject *closetGuy01 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(-3.361f, 79.633f, 3.0f)); Commands->Attach_Script(closetGuy01, "M04_ForeDeck_ClosetSurprise_Guy_JDG", ""); closetGuy01_ID = Commands->Get_ID ( closetGuy01 ); //put down the 5 BH mess hall guys GameObject * BH_messhall_guy01 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(5.89f, 88.47f, 6.0f)); Commands->Attach_Script(BH_messhall_guy01, "M04_BH_MessHall_Guy_JDG", ""); Commands->Set_Facing ( BH_messhall_guy01, -135 ); GameObject * BH_messhall_guy02 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(5.30f, 87.52f, 6.0f)); Commands->Attach_Script(BH_messhall_guy02, "M04_BH_MessHall_Guy_JDG", ""); Commands->Set_Facing ( BH_messhall_guy02, -155 ); GameObject * BH_messhall_guy03 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(2.64f, 88.12f, 6.0f)); Commands->Attach_Script(BH_messhall_guy03, "M04_BH_MessHall_Guy_JDG", ""); Commands->Set_Facing ( BH_messhall_guy03, -135 ); GameObject * BH_messhall_guy04 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(2.08f, 87.44f, 6.0f)); Commands->Attach_Script(BH_messhall_guy04, "M04_BH_MessHall_Guy_JDG", ""); Commands->Set_Facing ( BH_messhall_guy04, -140 ); GameObject * BH_messhall_guy05 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(-0.38f, 87.29f, 6.0f)); Commands->Attach_Script(BH_messhall_guy05, "M04_BH_MessHall_Guy_JDG", ""); Commands->Set_Facing ( BH_messhall_guy05, -110 ); BH_messhall_guy01_ID = Commands->Get_ID ( BH_messhall_guy01 ); BH_messhall_guy02_ID = Commands->Get_ID ( BH_messhall_guy02 ); BH_messhall_guy03_ID = Commands->Get_ID ( BH_messhall_guy03 ); BH_messhall_guy04_ID = Commands->Get_ID ( BH_messhall_guy04 ); BH_messhall_guy05_ID = Commands->Get_ID ( BH_messhall_guy05 ); } else if (param == 505)//time for homey to come out of the closet { Commands->Send_Custom_Event( obj, Commands->Find_Object (closetGuy01_ID), 0, 100, 0 ); } else if (param == 650)//received param from BH messhall enter zone--tell BH guys its okay to react now { GameObject * BH_messhall_guy01 = Commands->Find_Object ( BH_messhall_guy01_ID); GameObject * BH_messhall_guy02 = Commands->Find_Object ( BH_messhall_guy02_ID); GameObject * BH_messhall_guy03 = Commands->Find_Object ( BH_messhall_guy03_ID); GameObject * BH_messhall_guy04 = Commands->Find_Object ( BH_messhall_guy04_ID); GameObject * BH_messhall_guy05 = Commands->Find_Object ( BH_messhall_guy05_ID); if (BH_messhall_guy01 != NULL) { Commands->Send_Custom_Event( obj, BH_messhall_guy01, 0, 600, 0 ); } if (BH_messhall_guy02 != NULL) { Commands->Send_Custom_Event( obj, BH_messhall_guy02, 0, 600, 0 ); } if (BH_messhall_guy03 != NULL) { Commands->Send_Custom_Event( obj, BH_messhall_guy03, 0, 600, 0 ); } if (BH_messhall_guy04 != NULL) { Commands->Send_Custom_Event( obj, BH_messhall_guy04, 0, 600, 0 ); } if (BH_messhall_guy05 != NULL) { Commands->Send_Custom_Event( obj, BH_messhall_guy05, 0, 600, 0 ); } } else if (param == 700)//player is approaching main bridge--put down captain's bodyguards { GameObject *captains_bodyguard_01 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(-17.79f, 85.49f, 13.13f)); Commands->Attach_Script(captains_bodyguard_01, "M04_Captains_Bodyguard_JDG", ""); GameObject *captains_bodyguard_02 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(-15.26f, 79.5f, 13.13f)); Commands->Attach_Script(captains_bodyguard_02, "M04_Captains_Bodyguard_JDG", ""); GameObject *captains_bodyguard_03 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(17.79f, 85.49f, 13.13f)); Commands->Attach_Script(captains_bodyguard_03, "M04_Captains_Bodyguard_JDG", ""); GameObject *captains_bodyguard_04 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(15.26f, 79.5f, 13.13f)); Commands->Attach_Script(captains_bodyguard_04, "M04_Captains_Bodyguard_JDG", ""); GameObject *captains_bodyguard_05 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(-8.67f, 81.66f, 13.13f)); Commands->Attach_Script(captains_bodyguard_05, "M04_Captains_Bodyguard_JDG", ""); GameObject *captains_bodyguard_06 = Commands->Create_Object ( "Nod_FlameThrower_1Off", Vector3(8.67f, 81.66f, 13.13f)); Commands->Attach_Script(captains_bodyguard_06, "M04_Captains_Bodyguard_JDG", ""); } } }; DECLARE_SCRIPT(M04_Captains_Bodyguard_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 2 ); } void Killed( GameObject * obj, GameObject * killer ) { float reinforce_ka = Commands->Get_Random ( 0.5f, 3.5f ); if ((reinforce_ka >= 0.5) && (reinforce_ka < 1.5)) { GameObject * captains_bodyguard_reinforceguy = Commands->Trigger_Spawner( 100918 ); Commands->Attach_Script(captains_bodyguard_reinforceguy, "M04_Captains_Bodyguard_Reinforcement_JDG", ""); } else if ((reinforce_ka >= 1.5) && (reinforce_ka < 2.0)) { GameObject * captains_bodyguard_reinforceguy = Commands->Trigger_Spawner( 100918 ); GameObject * captains_bodyguard_reinforceguy02 = Commands->Trigger_Spawner( 100919 ); Commands->Attach_Script(captains_bodyguard_reinforceguy, "M04_Captains_Bodyguard_Reinforcement_JDG", ""); Commands->Attach_Script(captains_bodyguard_reinforceguy02, "M04_Captains_Bodyguard_Reinforcement02_JDG", ""); } } }; DECLARE_SCRIPT(M04_Captains_Bodyguard_Reinforcement_JDG, "") { bool engaged; REGISTER_VARIABLES() { SAVE_VARIABLE(engaged, 1); } void Created( GameObject * obj ) { engaged = false; ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), 1.0f, .25f ); params.WaypathID = 100927; params.WaypointStartID = 100928; params.WaypointEndID = 100932; Commands->Action_Goto( obj, params ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { if (engaged == false) { engaged = true; Commands->Action_Reset ( obj, 100 ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 players_position = Commands->Get_Position ( STAR ); Commands->Action_Reset ( obj, 0 ); params.Set_Basic( this, 45, 100 ); params.Set_Movement( players_position, 1.0f, .25f ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_Captains_Bodyguard_Reinforcement02_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, 100 ); params.Set_Movement( Vector3(0,0,0), 1.0f, .25f ); params.WaypathID = 100920; params.WaypointStartID = 100921; params.WaypointEndID = 100925; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 players_position = Commands->Get_Position ( STAR ); Commands->Action_Reset ( obj, 0 ); params.Set_Basic( this, 45, 100 ); params.Set_Movement( players_position, 1.0f, .25f ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_Captains_Bridge_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 700, 0 );//tell foredeck controller that player is approaching main bridge Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_SHIPS_CAPTAIN_JDG), 0, 100, 0 );//this tells captain to turn on hearing Commands->Create_Sound ( "00-n060e", Commands->Get_Position ( obj ), obj );//updating radar flags GameObject *zone01 = Commands->Find_Object (100876); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } } } }; DECLARE_SCRIPT(M04_BH_MessHall_Trigger_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 650, 0 );//tell foredeck controller that player is entering BH messhall Commands->Create_Sound ( "00-c164e", Commands->Get_Position ( obj ), obj );//proceed with caution //clean up this zone GameObject *zone01 = Commands->Find_Object (100873); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } } } }; DECLARE_SCRIPT(M04_BH_MessHall_Guy_JDG, "") { bool ok_to_react; REGISTER_VARIABLES() { SAVE_VARIABLE(ok_to_react, 1); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); ok_to_react = false; ActionParamsStruct params;//M04 Nod Alert Twiddler Vector3 look_position = Commands->Get_Position ( Commands->Find_Object ( 100455 ) ); params.Set_Basic(this, 89, 100); params.Set_Attack(look_position, 0, 0, false); Commands->Action_Attack(obj, params); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } } void Killed( GameObject * obj, GameObject * killer ) { float reinforce_ka = Commands->Get_Random ( 0.5f, 2.5f ); if ((reinforce_ka >= 0.5) && (reinforce_ka < 1.5)) { GameObject * BH_messhall_reinforceguy = Commands->Trigger_Spawner( 100875 ); Commands->Attach_Script(BH_messhall_reinforceguy, "M04_ForeDeck_Reinforcement_03_JDG", ""); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (ok_to_react == true) { if (obj) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 600)//recieved custom from controller--you can react to gunshots now { ok_to_react = true; } } }; DECLARE_SCRIPT(M04_ForeDeck_ClosetSurprise_Guy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable( obj ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//recieved custom from enter zones--here comes the player(s) { if (obj) { Commands->Innate_Enable(obj); ActionParamsStruct params; params.Set_Basic( this, 100, 100 ); params.Set_Movement( Vector3(0,0,0), .750f, .25f ); params.WaypathID = 100864; params.WaypointStartID = 100865; params.WaypointEndID = 100867; Commands->Action_Goto( obj, params ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == 100 && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 players_position = Commands->Get_Position ( STAR ); params.Set_Basic( this, 45, 100 ); params.Set_Movement( players_position, 1.0f, .25f ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_ForeDeck_ClosetSurprise_Trigger_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 505, 0 );//tell foredeck controller that player is leaving mess hall GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", Vector3(8.937f, 83.264f, 6.000f)); Commands->Attach_Script(sniperTarget01, "M04_Doorway_Enterer_JDG", "8.149 76.787 3.000"); GameObject *zone01 = Commands->Find_Object (100869); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject *zone02 = Commands->Find_Object (100870); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } } } }; DECLARE_SCRIPT(M04_GruntMessHall_Exit_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 500, 0 );//tell foredeck controller that player is leaving mess hall GameObject *zone01 = Commands->Find_Object (100857); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } } } }; DECLARE_SCRIPT(M04_GruntMessHall_Entry_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_FORE_DECK_CONTROLLER_JDG), 0, 300, 0 );//tell foredeck controller that player is entering mess hall GameObject *zone01 = Commands->Find_Object (100459); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject *zone02 = Commands->Find_Object (100460); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } } } }; /********************************************************************************************************** The following are the scripts and controller for the end fire fight. **********************************************************************************************************/ DECLARE_SCRIPT(M04_Firefight_Start_Battle_Music_JDG, "") { bool playerHasLevel3Keycard; REGISTER_VARIABLES() { SAVE_VARIABLE( playerHasLevel3Keycard, 1 ); } void Created( GameObject * obj ) { playerHasLevel3Keycard = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 100)//level 3 keycard acquired { playerHasLevel3Keycard = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR && playerHasLevel3Keycard == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_END_FIREFIGHT_CONTROLLER_JDG), 0, 100, 0 ); } } }; DECLARE_SCRIPT(M04_Firefight_NodGuys, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_END_FIREFIGHT_CONTROLLER_JDG), 0, 666, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M04_PostFirstMate_SamRoom_PatrolGuy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101208; params.WaypointStartID = 101209; params.WaypointEndID = 101210; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101212; params.WaypointStartID = 101213; params.WaypointEndID = 101214; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101216; params.WaypointStartID = 101217; params.WaypointEndID = 101218; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101220; params.WaypointStartID = 101221; params.WaypointEndID = 101222; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101208; params.WaypointStartID = 101209; params.WaypointEndID = 101210; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_PostFirstMate_MissileRoom_PatrolGuy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100550; params.WaypointStartID = 100551; params.WaypointEndID = 100553; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 60, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100555; params.WaypointStartID = 100556; params.WaypointEndID = 100557; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100541; params.WaypointStartID = 100542; params.WaypointEndID = 100544; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100546; params.WaypointStartID = 100547; params.WaypointEndID = 100548; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100550; params.WaypointStartID = 100551; params.WaypointEndID = 100553; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_PostFirstMate_OfficerQuarters_PatrolGuy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101237; params.WaypointStartID = 101238; params.WaypointEndID = 101241; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101243; params.WaypointStartID = 101244; params.WaypointEndID = 101247; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101237; params.WaypointStartID = 101238; params.WaypointEndID = 101241; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_PostFirstMate_FrontDeck_PatrolGuy01_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101250; params.WaypointStartID = 101251; params.WaypointEndID = 101255; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101250; params.WaypointStartID = 101255; params.WaypointEndID = 101251; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101250; params.WaypointStartID = 101251; params.WaypointEndID = 101255; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_PostFirstMate_FrontDeck_PatrolGuy02_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101258; params.WaypointStartID = 101259; params.WaypointEndID = 101263; Commands->Action_Goto( obj, params ); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101258; params.WaypointStartID = 101263; params.WaypointEndID = 101259; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 101258; params.WaypointStartID = 101259; params.WaypointEndID = 101263; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M04_EnterCargoBay_BottomRight_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 100, 0 ); GameObject * zone01 = Commands->Find_Object (100497); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone03 = Commands->Find_Object (100499); if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } } } }; DECLARE_SCRIPT(M04_EnterCargoBay_TopLeft_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_CARGOHOLD_CONTROLLER_JDG), 0, 100, 0 ); GameObject * zone01 = Commands->Find_Object (100497); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone03 = Commands->Find_Object (100499); if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } } } }; DECLARE_SCRIPT(M04_RocketEmplacement_01_JDG, "")//103461 { int apache_id; bool secondary_apache_spawned; REGISTER_VARIABLES() { SAVE_VARIABLE(apache_id, 1); SAVE_VARIABLE(secondary_apache_spawned, 2); } void Created( GameObject * obj ) { secondary_apache_spawned = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_MODIFY_YOUR_ACTION_JDG) { apache_id = param; } else if (type == CUSTOM_EVENT_VEHICLE_ENTERED) { Commands->Debug_Message ( "***************************player has entered tailgun 01--send custom to apache\n" ); GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event ( obj, apache, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); } else if (secondary_apache_spawned == false) { secondary_apache_spawned = true; Vector3 spawnSpot (-5.496f, -52.198f, 22.300f); GameObject * secondaryapache = Commands->Create_Object ( "NOD_Apache", spawnSpot ); Commands->Attach_Script(secondaryapache, "M04_SecondaryApache01_JDG", ""); } } } }; DECLARE_SCRIPT(M04_SecondaryApache01_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (0,0,0), 1.0f, 5); params.WaypathID = 103531; Commands->Action_Goto(obj, params); } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawnSpot (-3.732f, -59.579f, 2.704f); Commands->Create_Object ( "POW_Armor_100", spawnSpot ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_SecondaryApache02_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (0,0,0), 1.0f, 1); params.WaypathID = 103608; Commands->Action_Goto(obj, params); } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawnSpot (-3.701f, -55.248f, 2.704f); Commands->Create_Object ( "POW_Health_100", spawnSpot ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_RocketEmplacement_02_JDG, "")//103462 { int apache_id; bool secondary_apache_spawned; REGISTER_VARIABLES() { SAVE_VARIABLE(apache_id, 1); SAVE_VARIABLE(secondary_apache_spawned, 2); } void Created( GameObject * obj ) { secondary_apache_spawned = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_MODIFY_YOUR_ACTION_JDG) { apache_id = param; } else if (type == CUSTOM_EVENT_VEHICLE_ENTERED) { Commands->Debug_Message ( "***************************player has entered tailgun 02--send custom to apache\n" ); GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event ( obj, apache, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); } else if (secondary_apache_spawned == false) { secondary_apache_spawned = true; Vector3 spawnSpot (13.267f, -52.984f, 22.650f); GameObject * secondaryapache = Commands->Create_Object ( "NOD_Apache", spawnSpot ); Commands->Attach_Script(secondaryapache, "M04_SecondaryApache02_JDG", ""); } } } }; DECLARE_SCRIPT(M04_EngineRoom_Stationary_Tech_JDG, "Console_ID :int") { int myConsole_id; bool deadYet; REGISTER_VARIABLES() { SAVE_VARIABLE( deadYet, 1 ); SAVE_VARIABLE( myConsole_id, 2 ); } void Created( GameObject * obj ) { deadYet = false; myConsole_id = Get_Int_Parameter("Console_ID"); Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Set_Loiters_Allowed( obj, false ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, 1 ); } void Killed( GameObject * obj, GameObject * killer ) { deadYet = true; GameObject * engineer = Commands->Find_Object ( M04_ENGINEROOM_CHIEF_ENGINEER_JDG ); if (engineer != NULL) { Commands->Send_Custom_Event ( obj, engineer, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0 && deadYet == false)// { if (param == M01_START_ACTING_JDG) { GameObject * myConsole = Commands->Find_Object ( myConsole_id ); if (myConsole != NULL) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( myConsole, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } else { Commands->Debug_Message ( "**********************startionary tech cannot find his console\n" ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 50, M01_DOING_ANIMATION_01_JDG); params.Set_Animation( "H_A_CON2", false ); Commands->Action_Play_Animation (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { Commands->Action_Reset ( obj, 100 ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//M04 PanicGuy 01 Twiddler { Commands->Innate_Disable(obj); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack (obj, params); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 1 ); } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG) { //Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Create_Sound ( "M04 PanicGuy 01 Twiddler", myPosition, obj ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_DOING_ANIMATION_03_JDG); params.Set_Animation ("H_A_HOST_L1A", false); Commands->Action_Play_Animation (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG)//stand back up then start hunting player { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_DOING_ANIMATION_05_JDG); params.Set_Animation ("H_A_HOST_L2C", false); Commands->Action_Play_Animation (obj, params); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 50, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG) { GameObject * myConsole = Commands->Find_Object ( myConsole_id ); if (myConsole != NULL) { params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( myConsole, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 0.5f ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } else if (action_id == M01_DOING_ANIMATION_03_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_04_JDG); params.Set_Animation ("H_A_HOST_L2A", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_04_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_04_JDG); params.Set_Animation ("H_A_HOST_L2B", true); Commands->Action_Play_Animation (obj, params); float delayTimer = Commands->Get_Random ( 10, 30 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, delayTimer ); } else if (action_id == M01_DOING_ANIMATION_05_JDG) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_06_JDG); params.Set_Animation ("H_A_HOST_L1C", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_06_JDG) { if (obj) { Commands->Innate_Enable(obj); Commands->Attach_Script(obj, "M01_Hunt_The_Player_JDG", ""); } } } } }; DECLARE_SCRIPT(M04_Catwalk_Enter_Zone_01_JDG, "")//this guy comes out level 2 door { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-14.594f, 27.717f, -9)); Commands->Attach_Script(sniperTarget01, "M04_Doorway_Enterer_JDG", "-9.3 8.9 -9"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_Catwalk_Enter_Zone_02_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(12.913f, -27.628f, -9)); Commands->Attach_Script(sniperTarget01, "M04_Doorway_Enterer_JDG", "10.868 -6.359 -9"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_Doorway_Enterer_JDG, "first_location:vector3") { Vector3 runToPosition; Vector3 leavePosition; REGISTER_VARIABLES() { SAVE_VARIABLE(runToPosition, 1); SAVE_VARIABLE(leavePosition, 2); } void Created( GameObject * obj ) { runToPosition = Get_Vector3_Parameter("first_location"); leavePosition = Commands->Get_Position ( obj ); Commands->Enable_Hibernation( obj, false ); Commands->Grant_Key( obj, 1, true ); Commands->Grant_Key( obj, 2, true ); Commands->Grant_Key( obj, 3, true ); ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( runToPosition, WALK, 1); Commands->Action_Goto ( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Vector3 powerupSpawnLocation = Commands->Get_Position (obj ); powerupSpawnLocation.Z += 0.75f; char *powerups[2] = {//this is a list of potential powerups to be dropped by sniper target guys "POW_Health_100", "POW_Armor_100", }; int random = Commands->Get_Random_Int(0, 2); //GameObject *spawn_effect = Commands->Create_Object( "Spawner Created Special Effect", powerupSpawnLocation ); //if (spawn_effect) //{ // Commands->Attach_Script( spawn_effect, "M00_Create_Anim_Effect_DAY", "C4_EX1A.C4_EX1A"); //} Commands->Create_Object ( powerups[random], powerupSpawnLocation ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; switch (complete_reason) { case ACTION_COMPLETE_NORMAL: { switch (action_id) { case M01_WALKING_WAYPATH_01_JDG: { char *animationName = M01_Choose_Search_Animation ( ); params.Set_Basic( this, 45, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } break; case M01_DOING_ANIMATION_01_JDG: { ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( leavePosition, WALK, 1); Commands->Action_Goto ( obj, params ); } break; case M01_WALKING_WAYPATH_02_JDG: { Commands->Enable_Hibernation( obj, true ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } break; } } break; } } }; DECLARE_SCRIPT(M04_Hunter_Controller_JDG, "")//M04_ENGINEROOM_HUNTING_CONTROLLER_JDG { int hunter_01_id; int hunter_02_id; int hunter_03_id; bool messagePlayed; REGISTER_VARIABLES() { SAVE_VARIABLE(hunter_01_id, 1); SAVE_VARIABLE(hunter_02_id, 2); SAVE_VARIABLE(hunter_03_id, 3); SAVE_VARIABLE(messagePlayed, 4); } void Created( GameObject * obj ) { hunter_01_id = NULL; hunter_02_id = NULL; hunter_03_id = NULL; messagePlayed = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { GameObject *hunter_01 = Commands->Find_Object ( hunter_01_id ); if (hunter_01 == NULL) { messagePlayed = false; Vector3 hunter01_spawnlocation (-13.523f, 48.665f, -9.003f); GameObject *hunter_01 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", hunter01_spawnlocation ); hunter_01_id = Commands->Get_ID ( hunter_01 ); Commands->Attach_Script(hunter_01, "M04_Hunter_JDG", ""); } GameObject *hunter_02 = Commands->Find_Object ( hunter_02_id ); if (hunter_02 == NULL) { Vector3 hunter02_spawnlocation (11.943f, 42.201f, -15.000f); GameObject *hunter_02 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", hunter02_spawnlocation ); hunter_02_id = Commands->Get_ID ( hunter_02 ); Commands->Attach_Script(hunter_02, "M04_Hunter_JDG", ""); } GameObject *hunter_03 = Commands->Find_Object ( hunter_03_id ); if (hunter_03 == NULL) { Vector3 hunter03_spawnlocation (3.834f, 60.196f, -15.000f); GameObject *hunter_03 = Commands->Create_Object ( "Nod_Minigunner_2SF_AutoRifle", hunter03_spawnlocation ); hunter_03_id = Commands->Get_ID ( hunter_03 ); Commands->Attach_Script(hunter_03, "M04_Hunter_JDG", ""); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { if (messagePlayed == false) { messagePlayed = true; int conv = Commands->Create_Conversation( "M04_Eva_WarnsAboutHunters_Conversation", 30, 50, false); Commands->Join_Conversation( NULL, conv, false, false, false ); Commands->Start_Conversation( conv, conv ); } } else if (param == M01_GOTO_IDLE_JDG) { Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M04_Hunter_JDG, "") { float myPriority; REGISTER_VARIABLES() { SAVE_VARIABLE(myPriority, 1); } void Created( GameObject * obj ) { if (STAR) { Commands->Grant_Key( obj, 1, true ); Commands->Grant_Key( obj, 2, true ); myPriority = 85; Commands->Enable_Hibernation( obj, false ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 5 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { ActionParamsStruct params; params.Set_Basic( this, myPriority, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( STAR, RUN, 5 ); Commands->Action_Goto( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 5 ); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//monitor how close you are to player { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float distanceFromStar = Commands->Get_Distance ( myPosition, playerPosition ); if (distanceFromStar <= 40)//******play eva warning conversation here***** { myPriority = 45; GameObject * hunterController = Commands->Find_Object ( M04_ENGINEROOM_HUNTING_CONTROLLER_JDG ); if (hunterController != NULL) { Commands->Send_Custom_Event( obj, hunterController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else { myPriority = 100; } Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 5 ); } } } void Destroyed( GameObject * obj ) { GameObject * myController = Commands->Find_Object ( M04_ENGINEROOM_HUNTING_CONTROLLER_JDG ); if (myController != NULL) { Commands->Send_Custom_Event( obj, myController, 0, M01_START_ACTING_JDG, 1 ); } } }; /*DECLARE_SCRIPT(M04_Hunter_JDG, "MyLeaders_ID :int") { void Created( GameObject * obj ) { int leaders_id = Get_Int_Parameter("MyLeaders_ID"); if (leaders_id == 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 5 ); } GameObject * leader = Commands->Find_Object ( leaders_id ); Commands->Grant_Key( obj, 1, true ); Commands->Grant_Key( obj, 2, true ); Commands->Enable_Hibernation( obj, false ); if (leader != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( leader, RUN, 2 ); params.AttackActive = false; params.MoveFollow= true; Commands->Action_Attack( obj, params ); } else { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( STAR, RUN, 5 ); params.AttackActive = false; Commands->Action_Attack( obj, params ); } Commands->Start_Timer ( obj, this, 120, M01_GOTO_IDLE_JDG ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (obj) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( STAR, RUN, 10 ); params.Set_Attack( STAR, 50, 0, true ); params.AttackActive = true; Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_01_JDG, params, true, true ); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//monitor how close you are to player { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float distanceFromStar = Commands->Get_Distance ( myPosition, playerPosition ); if (distanceFromStar <= 40)//******play eva warning conversation here***** { int conv = Commands->Create_Conversation( "M04_Eva_WarnsAboutHunters_Conversation", 100, 50, false); Commands->Join_Conversation( NULL, conv, false, false, false ); Commands->Start_Conversation( conv, conv ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 5 ); } } } } void Destroyed( GameObject * obj ) { GameObject * myController = Commands->Find_Object ( M04_ENGINEROOM_HUNTING_CONTROLLER_JDG ); if (myController != NULL) { Commands->Send_Custom_Event( obj, myController, 0, M01_START_ACTING_JDG, 1 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Timer_Expired( GameObject * obj, int timer_id ) { if (timer_id == M01_GOTO_IDLE_JDG) { //Commands->Enable_Hibernation( obj, true ); Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float distanceFromStar = Commands->Get_Distance ( myPosition, playerPosition ); if (distanceFromStar >= 150) { bool visible = Commands->Is_Object_Visible( obj, STAR ); if (visible != true) { Commands->Apply_Damage( obj, 100000, "BlamoKiller", NULL ); } else { Commands->Start_Timer ( obj, this, 20, M01_GOTO_IDLE_JDG ); } } else { Commands->Start_Timer ( obj, this, 20, M01_GOTO_IDLE_JDG ); } } } };*/ DECLARE_SCRIPT(M04_Front_ofThe_Boat_Population_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 3 ); } }; DECLARE_SCRIPT(M04_Cooks_Script_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Set_Player_Type (obj, SCRIPT_PLAYERTYPE_NOD ); } }; DECLARE_SCRIPT(M04_Prison_Keycard_CheckZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * prisonGuard01 = Commands->Find_Object (M04_ENGINEROOM_PRISONGUARD_01_JDG); GameObject * prisonGuard02 = Commands->Find_Object (M04_ENGINEROOM_PRISONGUARD_02_JDG); if (prisonGuard01 != NULL) { Commands->Destroy_Object ( prisonGuard01 ); } if (prisonGuard02 != NULL) { Commands->Destroy_Object ( prisonGuard02 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_TiberiumHold_EntryZone_and_Controller_JDG, "")//this guys ID number is M04_TIBERIUM_HOLD_CONTROLLER_JDG 100572 { bool entered; bool ok_to_clean_up; int cargo_conv1; REGISTER_VARIABLES() { SAVE_VARIABLE( entered, 1 ); SAVE_VARIABLE( ok_to_clean_up, 2 ); SAVE_VARIABLE( cargo_conv1, 3 ); } void Created( GameObject * obj ) { entered = false; ok_to_clean_up = false; } void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR && (ok_to_clean_up == true)) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 6000, 0 );//tell aft deck controller to clean up any remaining soldiers } if ( enterer == STAR && (entered == false)) { entered = true; if (STAR != NULL) { cargo_conv1 = Commands->Create_Conversation( "M04_TiberiumHold_Entry_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, cargo_conv1, false, false, false); //Commands->Join_Conversation( STAR, cargo_conv1, false, false, false ); Commands->Start_Conversation( cargo_conv1, cargo_conv1 ); } GameObject * cryochamber = Commands->Find_Object (M04_TIBERIUM_CRYOCHAMBER_JDG); if (cryochamber != NULL) { Commands->Send_Custom_Event( obj, cryochamber, 0, M01_START_ACTING_JDG, 0 ); } GameObject *visceroidGuy01 = Commands->Find_Object (M04_TIBERIUM_HOLD_TECH01_JDG); if (visceroidGuy01 != NULL) { Commands->Send_Custom_Event( obj, visceroidGuy01, 0, M01_START_ACTING_JDG, 3 ); } } } }; DECLARE_SCRIPT(M04_TibHold_MutantChamber_JDG, "") { int cryoShakeCounter; bool released; REGISTER_VARIABLES() { SAVE_VARIABLE( cryoShakeCounter, 1 ); SAVE_VARIABLE( released, 2 ); } void Created( GameObject * obj ) { Commands->Set_Animation_Frame ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", 0 ); cryoShakeCounter = 0; released = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myHealth = Commands->Get_Health ( obj ); if (myHealth <= 10) { Commands->Set_Health ( obj, 0.25f ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Animation_Complete( GameObject * obj, const char * animation_name ) { if (cryoShakeCounter < 10) { Commands->Set_Animation ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", false, NULL, 0, 9 ); cryoShakeCounter++; } else { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Set_Animation ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", false, NULL, 0, 9 ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG && released == false) { released = true; Commands->Set_Animation ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", false, NULL, 0, 15 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Toxic", myPosition, NULL ); Vector3 spawnLocation (-14.4f, -112.2f, -9); GameObject * realMutant = Commands->Create_Object ( "Mutant_0_Mutant", spawnLocation ); Commands->Attach_Script(realMutant, "M04_TibHold_RealMutant_JDG", ""); GameObject * simpleMutant = Commands->Find_Object (M04_TIBERIUM_SIMPLEMUTANT_JDG); if (simpleMutant != NULL) { Commands->Destroy_Object ( simpleMutant ); } float myFacing = Commands->Get_Facing ( obj ); GameObject *destroyedVersion = Commands->Create_Object ( "Simple_Large_CryoChamber_Destroyed", myPosition ); Commands->Set_Facing ( destroyedVersion, myFacing ); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M04_TibHold_SimpleMutant_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation_Frame ( obj, "S_A_HUMAN.H_A_822A", 15 ); } }; /*DECLARE_SCRIPT(M11_MutantCrypt_Spawner03_Guy_JDG, "") { typedef enum { IDLE, ATTACKING, DEAD, } M11_Mutant_State; M11_Mutant_State myState; REGISTER_VARIABLES() { SAVE_VARIABLE(myState, 1); } void Created( GameObject * obj ) { myState = IDLE; float delayTimer = Commands->Get_Random ( 10, 20 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, delayTimer ); Commands->Send_Custom_Event ( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 0 ); } void Killed( GameObject * obj, GameObject * killer ) { myState = DEAD; GameObject * mutantController = Commands->Find_Object ( M11_MUTANT_CRYPT_SPAWNER_CONTROLLER_JDG ); if (mutantController != NULL) { Commands->Send_Custom_Event ( obj, mutantController, 0, M01_SPAWNER_IS_DEAD_JDG, 0 ); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (obj && enemy == STAR && myState == IDLE)// { myState = ATTACKING; char *soundName = M11_Choose_Mutant_Alerted_Sound ( ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( soundName, myPosition, obj ); Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); Commands->Create_Logical_Sound (obj, M11_MUTANT_IS_NEARBY_JDG, myPosition, 50 ); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if ( sound.Type == M11_MUTANT_IS_NEARBY_JDG ) { Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG) { if (obj && myState == IDLE) { char *soundName = M11_Choose_Mutant_Idle_Sound ( ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( soundName, myPosition, obj ); float delayTimer = Commands->Get_Random ( 10, 20 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, delayTimer ); } else if (obj && myState != DEAD) { char *soundName = M11_Choose_Mutant_Attack_Sound ( ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( soundName, myPosition, obj ); float delayTimer = Commands->Get_Random ( 0, 10 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, delayTimer ); } } else if (obj && param == M01_PICK_A_NEW_LOCATION_JDG) { ActionParamsStruct params; params.Set_Basic(this, 80, M01_PICK_A_NEW_LOCATION_JDG); params.Set_Movement( Vector3(-15.128f, 17.965f, -63.748f), .1f, 1 ); Commands->Action_Goto( obj, params ); } else if (obj && param == M01_HUNT_THE_PLAYER_JDG) { if (STAR) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement(STAR, 2, 1); Commands->Action_Goto ( obj, params ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (obj && action_id == M01_PICK_A_NEW_LOCATION_JDG) { ActionParamsStruct params; params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), .1f, 1 ); int random = Commands->Get_Random_Int(0, 4); if (random == 0) { params.WaypathID = 100076; params.WaypointStartID = 100077; params.WaypointEndID = 100085; } else if (random == 1) { params.WaypathID = 100087; params.WaypointStartID = 100088; params.WaypointEndID = 100096; } else if (random == 3) { params.WaypathID = 100076; params.WaypointStartID = 100085; params.WaypointEndID = 100077; } else { params.WaypathID = 100087; params.WaypointStartID = 100096; params.WaypointEndID = 100088; } Commands->Action_Goto( obj, params ); } else if (obj && action_id == M01_WALKING_WAYPATH_01_JDG) { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 60, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } else if (obj && action_id == M01_DOING_ANIMATION_01_JDG) { ActionParamsStruct params; params.Set_Basic(this, 80, M01_PICK_A_NEW_LOCATION_JDG); params.Set_Movement( Vector3(-15.128f, 17.965f, -63.748f), .1f, 1 ); Commands->Action_Goto( obj, params ); } else if (obj && action_id == M01_HUNT_THE_PLAYER_JDG) { if (STAR) { char *soundName = M11_Choose_Mutant_Attack_Sound ( ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( soundName, myPosition, obj ); char *animationName = M11_Choose_Mutant_Attack_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); Commands->Apply_Damage( STAR, 5, "TiberiumRaw", obj ); Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } } } };*/ DECLARE_SCRIPT(M04_TibHold_RealMutant_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation(obj, false ); char *mutantAnimations[4] = { "S_A_HUMAN.H_A_A0A0_L02", "S_A_HUMAN.H_A_A0A0_L04", "S_A_HUMAN.H_A_J11C", "S_A_HUMAN.H_A_J21C", }; int random = Commands->Get_Random_Int(0, 4); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( mutantAnimations[random], false ); Commands->Action_Play_Animation ( obj, params ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (obj && param == M01_HUNT_THE_PLAYER_JDG) { if (STAR) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_HAVOC_JDG); params.Set_Movement(STAR, 1, 0.5f); Commands->Action_Goto ( obj, params ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, 1.0f, 0.5f ); Commands->Action_Goto (obj, params); } else if (action_id == M01_GOING_TO_HAVOC_JDG) { if (obj && STAR) { char *soundName = M11_Choose_Mutant_Attack_Sound ( ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( soundName, myPosition, obj ); char *animationName = M11_Choose_Mutant_Attack_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); Commands->Apply_Damage( STAR, 5, "TiberiumRaw", obj ); Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } } } }; DECLARE_SCRIPT(M04_TibHold_MutantChambers_Controller_JDG, "")//M04_TIBERIUM_CHAMBERCONTROLLER_JDG 104113 { int mutantChamber01_id; int mutantChamber02_id; int mutantChamber03_id; int mutantChamber04_id; int mutant01_id; int mutant02_id; int mutant03_id; int mutant04_id; REGISTER_VARIABLES() { SAVE_VARIABLE( mutantChamber01_id, 1 ); SAVE_VARIABLE( mutantChamber02_id, 2 ); SAVE_VARIABLE( mutantChamber03_id, 3 ); SAVE_VARIABLE( mutantChamber04_id, 4 ); SAVE_VARIABLE( mutant01_id, 5 ); SAVE_VARIABLE( mutant02_id, 6 ); SAVE_VARIABLE( mutant03_id, 7 ); SAVE_VARIABLE( mutant04_id, 8 ); } void Created( GameObject * obj ) { Vector3 mutantChamber01_Position (12.322f, -113.537f, -9); float mutantChamber01_Facing = 155; Vector3 mutantChamber02_Position (5.007f, -111.035f, -9); float mutantChamber02_Facing = -90; Vector3 mutantChamber03_Position (-5.646f, -113.485f, -9); float mutantChamber03_Facing = -90; Vector3 mutantChamber04_Position (-11.817f, -111.029f, -9); float mutantChamber04_Facing = -90; Vector3 mutant01_Position (12.330f, -113.560f, -8.224f); float mutant01_Facing = 65; Vector3 mutant02_Position (4.999f, -111.061f, -8.254f); float mutant02_Facing = -175; Vector3 mutant03_Position (-5.614f, -113.500f, -8.263f); float mutant03_Facing = 180; Vector3 mutant04_Position (-11.767f, -111.026f, -8.257f); float mutant04_Facing = 180; GameObject * mutantChamber01 = Commands->Create_Object ( "Simple_Large_CryoChamber", mutantChamber01_Position ); Commands->Set_Facing ( mutantChamber01, mutantChamber01_Facing ); Commands->Attach_Script(mutantChamber01, "M04_TibHold_MutantChamber_NoThreat_JDG", ""); GameObject * mutantChamber02 = Commands->Create_Object ( "Simple_Large_CryoChamber", mutantChamber02_Position ); Commands->Set_Facing ( mutantChamber02, mutantChamber02_Facing ); Commands->Attach_Script(mutantChamber02, "M04_TibHold_MutantChamber_NoThreat_JDG", ""); GameObject * mutantChamber03 = Commands->Create_Object ( "Simple_Large_CryoChamber", mutantChamber03_Position ); Commands->Set_Facing ( mutantChamber03, mutantChamber03_Facing ); Commands->Attach_Script(mutantChamber03, "M04_TibHold_MutantChamber_NoThreat_JDG", ""); GameObject * mutantChamber04 = Commands->Create_Object ( "Simple_Large_CryoChamber", mutantChamber04_Position ); Commands->Set_Facing ( mutantChamber04, mutantChamber04_Facing ); Commands->Attach_Script(mutantChamber04, "M04_TibHold_MutantChamber_NoThreat_JDG", ""); GameObject * mutant01 = Commands->Create_Object ( "M11_Mutant_1_Simple", mutant01_Position ); Commands->Set_Facing ( mutant01, mutant01_Facing ); Commands->Attach_Script(mutant01, "M04_TibHold_Mutant_NoThreat_JDG", ""); GameObject * mutant02 = Commands->Create_Object ( "M11_Mutant_1_Simple", mutant02_Position ); Commands->Set_Facing ( mutant02, mutant02_Facing ); Commands->Attach_Script(mutant02, "M04_TibHold_Mutant_NoThreat_JDG", ""); GameObject * mutant03 = Commands->Create_Object ( "M11_Mutant_1_Simple", mutant03_Position ); Commands->Set_Facing ( mutant03, mutant03_Facing ); Commands->Attach_Script(mutant03, "M04_TibHold_Mutant_NoThreat_JDG", ""); GameObject * mutant04 = Commands->Create_Object ( "M11_Mutant_1_Simple", mutant04_Position ); Commands->Set_Facing ( mutant04, mutant04_Facing ); Commands->Attach_Script(mutant04, "M04_TibHold_Mutant_NoThreat_JDG", ""); mutantChamber01_id = Commands->Get_ID ( mutantChamber01 ); mutantChamber02_id = Commands->Get_ID ( mutantChamber02 ); mutantChamber03_id = Commands->Get_ID ( mutantChamber03 ); mutantChamber04_id = Commands->Get_ID ( mutantChamber04 ); mutant01_id = Commands->Get_ID ( mutant01 ); mutant02_id = Commands->Get_ID ( mutant02 ); mutant03_id = Commands->Get_ID ( mutant03 ); mutant04_id = Commands->Get_ID ( mutant04 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG)//a chamber's been destroyed--do swap and whatnot { Commands->Debug_Message ( "***************************Mutant chamber received custom that non-destroyed version has been killed\n" ); GameObject * mutantChamber01 = Commands->Find_Object ( mutantChamber01_id ); GameObject * mutantChamber02 = Commands->Find_Object ( mutantChamber02_id ); GameObject * mutantChamber03 = Commands->Find_Object ( mutantChamber03_id ); GameObject * mutantChamber04 = Commands->Find_Object ( mutantChamber04_id ); Vector3 chamberPosition = Commands->Get_Position ( sender ); float chamberFacing = Commands->Get_Facing ( sender ); GameObject *destroyedVersion = Commands->Create_Object ( "Simple_Large_CryoChamber_Destroyed", chamberPosition ); Commands->Set_Facing ( destroyedVersion, chamberFacing ); Commands->Destroy_Object ( sender ); GameObject * simpleMutant = NULL; if (sender == mutantChamber01) { simpleMutant = Commands->Find_Object ( mutant01_id ); } else if (sender == mutantChamber02) { simpleMutant = Commands->Find_Object ( mutant02_id ); } else if (sender == mutantChamber03) { simpleMutant = Commands->Find_Object ( mutant03_id ); } else if (sender == mutantChamber04) { simpleMutant = Commands->Find_Object ( mutant04_id ); } if (simpleMutant != NULL) { Commands->Send_Custom_Event( obj, simpleMutant, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M04_TibHold_MutantChamber_NoThreat_JDG, "") { bool switched; REGISTER_VARIABLES() { SAVE_VARIABLE( switched, 1 ); } void Created( GameObject * obj ) { switched = false; Commands->Set_Animation_Frame ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", 0 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myHealth = Commands->Get_Health ( obj ); if (obj && switched == true) { Commands->Set_Health ( obj, 0.25f ); } else if (obj && myHealth <= 10 && switched == false) { switched = true; Commands->Set_Animation ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", false, NULL, 0, 15 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Toxic", myPosition, NULL ); Commands->Set_Health ( obj, 0.25f ); GameObject * myController = Commands->Find_Object ( M04_TIBERIUM_CHAMBERCONTROLLER_JDG ); if (myController != NULL) { Commands->Debug_Message ( "***************************Mutant chamber sending custom that non-destroyed version has been killed\n" ); Commands->Send_Custom_Event( obj, myController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } else { Commands->Set_Animation ( obj, "DSP_CRYOBIG2.DSP_CRYOBIG2", false, NULL, 0, 9 ); } } }; DECLARE_SCRIPT(M04_TibHold_Mutant_NoThreat_JDG, "") { float myMaxHealth; REGISTER_VARIABLES() { SAVE_VARIABLE( myMaxHealth, 1 ); } void Created( GameObject * obj ) { myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Animation_Frame ( obj, "S_A_HUMAN.H_A_822A", 15 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { Commands->Set_Health ( obj, myMaxHealth ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG)//your chamber's been destroyed--do swap and whatnot { Commands->Set_Animation ( obj, "S_C_Human.H_C_Tubedie", false, NULL, 0, 22 ); } } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_C_Human.H_C_Tubedie") == 0) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_Visceroid_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, 1.0f, 1 ); Commands->Action_Goto (obj, params); int cargo_conv1 = Commands->Create_Conversation( "M04_TiberiumHold_Visceroid_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, cargo_conv1, false, false, false); //Commands->Join_Conversation( STAR, cargo_conv1, false, false, false ); Commands->Start_Conversation( cargo_conv1, cargo_conv1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); GameObject * myTarget = Commands->Find_Closest_Soldier ( myPosition, 0, 10, true ); if (myTarget != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( myTarget, 1.0f, 3 ); Commands->Action_Goto (obj, params); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_GOING_TO_HAVOC_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); GameObject * myTarget = Commands->Find_Closest_Soldier ( myPosition, 0, 10, true ); if (myTarget != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( myTarget, 5, 0, true ); Commands->Action_Attack (obj, params); } Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 2 ); } } }; DECLARE_SCRIPT(M04_Visceroid_Dude_01_JDG, "")//M04_TIBERIUM_HOLD_TECH01_JDG 102147 { int spill_conv1; REGISTER_VARIABLES() { SAVE_VARIABLE( spill_conv1, 1 ); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { GameObject *visceroidGuy02 = Commands->Find_Object (M04_TIBERIUM_HOLD_TECH02_JDG); if (obj && visceroidGuy02 != NULL) { spill_conv1 = Commands->Create_Conversation( "M04_Tiberium_Tech_Conversation", 30, 20, true); Commands->Join_Conversation( obj, spill_conv1, false, false, false); Commands->Join_Conversation( visceroidGuy02, spill_conv1, false, false, false ); Commands->Start_Conversation( spill_conv1, spill_conv1 ); Commands->Monitor_Conversation( obj, spill_conv1); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == spill_conv1) { GameObject *visceroidGuy02 = Commands->Find_Object (M04_TIBERIUM_HOLD_TECH02_JDG); if (visceroidGuy02 != NULL) { Commands->Send_Custom_Event( obj, visceroidGuy02, 0, M01_START_ACTING_JDG, 2 ); } Commands->Set_Innate_Is_Stationary ( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3 (-9.622f, -5.406f, -15), WALK, 5, false ); Commands->Action_Goto ( obj, params ); } } else if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { Commands->Set_Innate_Soldier_Home_Location (obj, Vector3 (-9.622f, -5.406f, -15), 10 ); } } } }; DECLARE_SCRIPT(M04_Visceroid_Dude_02_JDG, "")//M04_TIBERIUM_HOLD_TECH02_JDG 102148 { bool first_time_damaged; REGISTER_VARIABLES() { SAVE_VARIABLE( first_time_damaged, 1 ); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); first_time_damaged = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_A0A0_L28A", false ); Commands->Action_Play_Animation ( obj, params ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); myPosition.Z += 0.25f; Commands->Create_Explosion ( "Explosion_Barrel_Toxic", myPosition, NULL );// GameObject * visceroid = Commands->Create_Object ( "Visceroid", myPosition ); Commands->Attach_Script(visceroid, "M04_Visceroid_JDG", ""); Commands->Destroy_Object ( obj ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_DOING_ANIMATION_01_JDG) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_A0A0_L28B", true ); Commands->Action_Play_Animation ( obj, params ); } } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { Commands->Set_Health (obj, 0.25f ); if (first_time_damaged == true) { first_time_damaged = false; ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "H_A_601A", false ); Commands->Action_Play_Animation ( obj, params ); float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } }; DECLARE_SCRIPT(M04_Keycard_01_Script_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 590, 2 ); } } }; DECLARE_SCRIPT(M04_Keycard_02_Script_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 510, 4 ); //Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 1001, 2 );//tell objective controller to go back to regular background music Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_TIBERIUM_HOLD_CONTROLLER_JDG) , 0, 2000, 0);//this custom tells the tib zone that its okay clean up aft deck soldiers next time entered GameObject *zone02 = Commands->Find_Object (100438);//stays--subbay door if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } GameObject *zone04 = Commands->Find_Object (100440);//stays--subbay door if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } GameObject *zone06 = Commands->Find_Object (100442);//stays--yellow door by prison if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } GameObject *zone01 = Commands->Find_Object (104762);//stays-- yellow door by big sam if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } } } }; DECLARE_SCRIPT(M04_Keycard_03_Script_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 520, 4 ); //Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 470, 8 ); //Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 1001, 2 );//tell objective controller to go back to regular background music //controller to start action Commands->Send_Custom_Event( obj, Commands->Find_Object (101126), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101127), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101128), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101129), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101130), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101131), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101132), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101133), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101134), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101135), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101136), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Send_Custom_Event( obj, Commands->Find_Object (101137), 0, 100, 0 );//tells subbay zones to okay battle music Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(0.084f, 95.837f, 3) ); Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(-1.983f, 72.772f, 0) ); Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(9.840f, 89.533f, 0) ); Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(11.822f, 39.659f, -15) ); Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(-13.725f, 38.871f, -9) ); Commands->Create_Object ( "Nod_Minigunner_2SF_Shotgun", Vector3(-10.606f, 32.021f, 0) ); } } }; DECLARE_SCRIPT(M04_Ships_Captain_JDG, "")//this guys ID number is M04_SHIPS_CAPTAIN_JDG 100401 { #define STATIONARY_DELAY_TIMER 0x1234553 void Created( GameObject * obj ) { Commands->Start_Timer ( obj, this, 1, STATIONARY_DELAY_TIMER ); } void Timer_Expired( GameObject * obj, int timer_id ) { if (timer_id == STATIONARY_DELAY_TIMER) { Commands->Set_Innate_Is_Stationary ( obj, true ); } } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawn_location = Commands->Get_Position ( obj ); spawn_location.Z = spawn_location.Z + 0.25f; Commands->Create_Object ( "M04_L03_Keycard", spawn_location ); } }; DECLARE_SCRIPT(M04_Ships_FirstMate_JDG, "")//this guys ID number is M04_SHIPS_FIRST_MATE_JDG 100400 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawn_location = Commands->Get_Position ( obj ); spawn_location.Z = spawn_location.Z + 0.25f; Commands->Create_Object ( "M04_L02_Keycard", spawn_location ); //putting down patrol guys for trip back towards captain GameObject * samRoomPatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(11.503f, -51.722f, 2.704f)); Commands->Attach_Script(samRoomPatrolGuy, "M04_PostFirstMate_SamRoom_PatrolGuy_JDG", ""); GameObject * missileRoomPatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(13.213f, -53.008f, -15.0f)); Commands->Attach_Script(missileRoomPatrolGuy, "M04_PostFirstMate_MissileRoom_PatrolGuy_JDG", ""); GameObject * subBayPatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(12.527f, 19.447f, -15.0f)); Commands->Attach_Script(subBayPatrolGuy, "M04_Front_ofThe_Boat_Population_JDG", ""); GameObject * officerQuartersPatrolGuy = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(8.342f, 80.0f, 3.0f)); Commands->Attach_Script(officerQuartersPatrolGuy, "M04_PostFirstMate_OfficerQuarters_PatrolGuy_JDG", ""); GameObject * foreDeckPatrolGuy01 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(0.345f, 106.479f, 3.001f)); Commands->Attach_Script(foreDeckPatrolGuy01, "M04_PostFirstMate_FrontDeck_PatrolGuy01_JDG", ""); GameObject * foreDeckPatrolGuy02 = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-13.320f, 71.885f, 0)); Commands->Attach_Script(foreDeckPatrolGuy02, "M04_PostFirstMate_FrontDeck_PatrolGuy02_JDG", ""); } }; DECLARE_SCRIPT(M04_Prison_Warden_JDG, "")//this guys ID is M04_PRISON_WARDEN_JDG 100399 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * medTech = Commands->Find_Object ( M04_MEDLAB_TECHNICIAN_JDG); if (medTech != NULL) { ActionParamsStruct params; params.Set_Basic( this, 90, M01_START_ATTACKING_01_JDG ); params.Set_Attack( medTech, 0, 0, true); Commands->Action_Attack(obj, params); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } void Custom (GameObject* obj, int type, int param, GameObject* sender) { ActionParamsStruct params; if (param == 100)//warden has received custom to start acting { GameObject *medTech = Commands->Find_Object ( M04_MEDLAB_TECHNICIAN_JDG); if (obj && medTech != NULL) { int medlabConversation = Commands->Create_Conversation( "M04_MedLab_Conversation", 80, 50, true); Commands->Join_Conversation( obj, medlabConversation, true, true, true ); Commands->Join_Conversation( medTech, medlabConversation, true, true, true ); Commands->Start_Conversation( medlabConversation, medlabConversation ); } } } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawn_location = Commands->Get_Position ( obj ); spawn_location.Z = spawn_location.Z + 0.25f; Commands->Create_Object ( "M04_L01_Keycard", spawn_location ); } }; DECLARE_SCRIPT(M04_MedLab_Tech_JDG, "")//this guys ID is M04_MEDLAB_TECHNICIAN_JDG 101202 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_NOD ); GameObject * prisonGuard = Commands->Find_Object ( M04_PRISON_WARDEN_JDG ); if (prisonGuard != NULL) { ActionParamsStruct params; params.Set_Basic( this, 90, M01_START_ATTACKING_01_JDG ); params.Set_Attack( prisonGuard, 0, 0, true); Commands->Action_Attack(obj, params); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { //Commands->Action_Reset ( obj, 100 ); ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3 (5.3f, -83.6f, 3.000f), RUN, 1 ); Commands->Action_Goto( obj, params ); } else if (param == 100) { GameObject * prisonGuard = Commands->Find_Object ( M04_PRISON_WARDEN_JDG ); if (prisonGuard != NULL) { Commands->Action_Reset ( obj, 100 ); Vector3 wardenLocation = Commands->Get_Position ( prisonGuard ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Face_Location( wardenLocation, 2 ); Commands->Action_Face_Location ( obj, params ); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Animation ("H_A_A0C0", true); Commands->Action_Play_Animation (obj, params); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, 0 ); } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (obj && enemy == STAR) { Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, 0 ); } } }; /**************************************************************************************************************** The Following are all the scripts associated with the objectives...including controller ****************************************************************************************************************/ DECLARE_SCRIPT(M04_Prisoners_Rescued_Controller_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == 1) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_END_FIREFIGHT_CONTROLLER_JDG), 0, 1, 2 );//telling firefight controller to allow end firefight Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 500, 2 ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_AFT_DECK_CONTROLLER_JDG), 0, 3000, 2 );//tell aft deck controller that prisoners have been rescued Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 410, 6 ); Commands->Set_Position ( STAR, Vector3(2.542f, -80.526f, 0) ); Commands->Set_Facing ( STAR, -125 ); Commands->Control_Enable ( STAR, true ); Commands->Set_Is_Rendered( STAR, true ); } } } }; DECLARE_SCRIPT(M04_MissileRoom_ObjectiveZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 440, 0 );//tell objective controller to announce missile objective GameObject *zone01 = Commands->Find_Object (100429);//stays if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject *zone03 = Commands->Find_Object (100431);//stays if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } } } }; DECLARE_SCRIPT(M04_Announce_Keycard_02_Objective_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 410, 5 ); GameObject *zone02 = Commands->Find_Object (100438);//stays if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } GameObject *zone04 = Commands->Find_Object (100440);//stays if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } GameObject *zone06 = Commands->Find_Object (100442);//stays also add 104762 if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } GameObject *zone01 = Commands->Find_Object (104762);//stays if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } } } }; DECLARE_SCRIPT(M04_EngineRoom_SniperScript_JDG, "") { void Created( GameObject * obj ) { int easy = 0; int currentDifficulty = Commands->Get_Difficulty_Level( ); if (currentDifficulty == easy) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_MissileRoom_Target01_JDG, "")//100420 { bool poked_yet; Vector3 myPosition; bool pokable; int sabotageSound; int timesSoundPlayed; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( pokable, 3 ); SAVE_VARIABLE( sabotageSound, 4 ); SAVE_VARIABLE( timesSoundPlayed, 5 ); } void Created( GameObject * obj ) { timesSoundPlayed = 0; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); pokable = false; poked_yet = false; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", 1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == sabotageSound) { timesSoundPlayed++; if (timesSoundPlayed >= 4) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); } } } else if (type == 0) { if (param == M01_START_ACTING_JDG) { if (poked_yet == false) { pokable = true; Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); } } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false && pokable == true) { if (STAR != NULL) { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 100, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 );//104693 Commands->Set_Obj_Radar_Blip_Shape ( obj, -1 ); Commands->Set_Obj_Radar_Blip_Color ( obj, -1 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 300, 0 ); } } } } }; DECLARE_SCRIPT(M04_MissileRoom_Target02_JDG, "")//100421 { bool poked_yet; Vector3 myPosition; bool pokable; int sabotageSound; int timesSoundPlayed; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( pokable, 3 ); SAVE_VARIABLE( sabotageSound, 4 ); SAVE_VARIABLE( timesSoundPlayed, 5 ); } void Created( GameObject * obj ) { timesSoundPlayed = 0; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); pokable = false; poked_yet = false; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", 1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == sabotageSound) { timesSoundPlayed++; if (timesSoundPlayed >= 4) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); } } } else if (type == 0) { if (param == M01_START_ACTING_JDG) { if (poked_yet == false) { pokable = true; Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); } } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false && pokable == true) { if (STAR != NULL) { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 110, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Set_Obj_Radar_Blip_Shape ( obj, -1 ); Commands->Set_Obj_Radar_Blip_Color ( obj, -1 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 300, 0 ); } } } } }; DECLARE_SCRIPT(M04_MissileRoom_Target03_JDG, "")//100422 { bool poked_yet; Vector3 myPosition; bool pokable; int sabotageSound; int timesSoundPlayed; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( pokable, 3 ); SAVE_VARIABLE( sabotageSound, 4 ); SAVE_VARIABLE( timesSoundPlayed, 5 ); } void Created( GameObject * obj ) { timesSoundPlayed = 0; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); pokable = false; poked_yet = false; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", 1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == sabotageSound) { timesSoundPlayed++; if (timesSoundPlayed >= 4) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); } } } else if (type == 0) { if (param == M01_START_ACTING_JDG) { if (poked_yet == false) { pokable = true; Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); } } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false && pokable == true) { if (STAR != NULL) { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 120, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Set_Obj_Radar_Blip_Shape ( obj, -1 ); Commands->Set_Obj_Radar_Blip_Color ( obj, -1 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 300, 0 ); } } } } }; DECLARE_SCRIPT(M04_MissileRoom_Target04_JDG, "")//100423 { bool poked_yet; Vector3 myPosition; bool pokable; int sabotageSound; int timesSoundPlayed; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( pokable, 3 ); SAVE_VARIABLE( sabotageSound, 4 ); SAVE_VARIABLE( timesSoundPlayed, 5 ); } void Created( GameObject * obj ) { timesSoundPlayed = 0; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); pokable = false; poked_yet = false; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", 1 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == sabotageSound) { timesSoundPlayed++; if (timesSoundPlayed >= 4) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); } } } else if (type == 0) { if (param == M01_START_ACTING_JDG) { if (poked_yet == false) { pokable = true; Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); } } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false && pokable == true) { if (STAR != NULL) { sabotageSound = Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Monitor_Sound ( obj, sabotageSound ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4MISSRACK.DSP_L4MISSRACK", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 130, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Set_Obj_Radar_Blip_Shape ( obj, -1 ); Commands->Set_Obj_Radar_Blip_Color ( obj, -1 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 300, 0 ); } } } } }; DECLARE_SCRIPT(M04_EngineRoom_Target01_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Fuel", myPosition, obj ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 300, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 200, 0 ); } GameObject * engineBuildingController = Commands->Find_Object (M04_ENGINEROOM_BUILDING_CONTROLLER_JDG); if (engineBuildingController != NULL) { Commands->Send_Custom_Event( obj, engineBuildingController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * myOperator = Commands->Find_Object (M04_ENGINEROOM_TECH_04_JDG); if (myOperator != NULL) { Commands->Send_Custom_Event( obj, myOperator, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M04_EngineRoom_Target02_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Fuel", myPosition, obj ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 310, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 200, 0 ); } GameObject * engineBuildingController = Commands->Find_Object (M04_ENGINEROOM_BUILDING_CONTROLLER_JDG); if (engineBuildingController != NULL) { Commands->Send_Custom_Event( obj, engineBuildingController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * myOperator = Commands->Find_Object (M04_ENGINEROOM_TECH_01_JDG); if (myOperator != NULL) { Commands->Send_Custom_Event( obj, myOperator, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M04_EngineRoom_Target03_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Fuel", myPosition, obj ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 320, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 200, 0 ); } GameObject * engineBuildingController = Commands->Find_Object (M04_ENGINEROOM_BUILDING_CONTROLLER_JDG); if (engineBuildingController != NULL) { Commands->Send_Custom_Event( obj, engineBuildingController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * myOperator = Commands->Find_Object (M04_ENGINEROOM_TECH_02_JDG); if (myOperator != NULL) { Commands->Send_Custom_Event( obj, myOperator, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M04_EngineRoom_Target04_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Fuel", myPosition, obj ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 330, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 200, 0 ); } GameObject * engineBuildingController = Commands->Find_Object (M04_ENGINEROOM_BUILDING_CONTROLLER_JDG); if (engineBuildingController != NULL) { Commands->Send_Custom_Event( obj, engineBuildingController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * myOperator = Commands->Find_Object (M04_ENGINEROOM_TECH_03_JDG); if (myOperator != NULL) { Commands->Send_Custom_Event( obj, myOperator, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M04_ApacheRoom_Second_EntryZone_TopFloor_JDG, "")//105011 105012 { int apache_id; bool commandClearance; REGISTER_VARIABLES() { SAVE_VARIABLE( apache_id, 1 ); SAVE_VARIABLE( commandClearance, 2 ); } void Created( GameObject * obj ) { apache_id = NULL; commandClearance = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//apache is sending you his id { apache_id = Commands->Get_ID ( sender ); } else if (param == M01_START_ACTING_JDG) { commandClearance = true; } } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if (commandClearance == true) { GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event( obj, apache, 0, M01_MODIFY_YOUR_ACTION_07_JDG, 0 ); } GameObject * zone01 = Commands->Find_Object ( 105011 ); GameObject * zone02 = Commands->Find_Object ( 105012 ); GameObject * zone03 = Commands->Find_Object ( 105081 ); GameObject * zone04 = Commands->Find_Object ( 105082 ); GameObject * zone05 = Commands->Find_Object ( 105083 ); GameObject * zone06 = Commands->Find_Object ( 105084 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } if (zone05 != NULL) { Commands->Destroy_Object ( zone05 ); } if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } } } } }; DECLARE_SCRIPT(M04_ApacheRoom_Second_EntryZone_MiddleFloor_JDG, "")//105081 105082 { int apache_id; bool commandClearance; REGISTER_VARIABLES() { SAVE_VARIABLE( apache_id, 1 ); SAVE_VARIABLE( commandClearance, 2 ); } void Created( GameObject * obj ) { apache_id = NULL; commandClearance = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//apache is sending you his id { apache_id = Commands->Get_ID ( sender ); } else if (param == M01_START_ACTING_JDG) { commandClearance = true; } } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if (commandClearance == true) { GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event( obj, apache, 0, M01_MODIFY_YOUR_ACTION_08_JDG, 0 ); } GameObject * zone01 = Commands->Find_Object ( 105011 ); GameObject * zone02 = Commands->Find_Object ( 105012 ); GameObject * zone03 = Commands->Find_Object ( 105081 ); GameObject * zone04 = Commands->Find_Object ( 105082 ); GameObject * zone05 = Commands->Find_Object ( 105083 ); GameObject * zone06 = Commands->Find_Object ( 105084 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } if (zone05 != NULL) { Commands->Destroy_Object ( zone05 ); } if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } } } } }; DECLARE_SCRIPT(M04_ApacheRoom_Second_EntryZone_BottomFloor_JDG, "")//105083 105084 { int apache_id; bool commandClearance; REGISTER_VARIABLES() { SAVE_VARIABLE( apache_id, 1 ); SAVE_VARIABLE( commandClearance, 2 ); } void Created( GameObject * obj ) { apache_id = NULL; commandClearance = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//apache is sending you his id { apache_id = Commands->Get_ID ( sender ); } else if (param == M01_START_ACTING_JDG) { commandClearance = true; } } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if (commandClearance == true) { GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event( obj, apache, 0, M01_MODIFY_YOUR_ACTION_09_JDG, 0 ); } GameObject * zone01 = Commands->Find_Object ( 105011 ); GameObject * zone02 = Commands->Find_Object ( 105012 ); GameObject * zone03 = Commands->Find_Object ( 105081 ); GameObject * zone04 = Commands->Find_Object ( 105082 ); GameObject * zone05 = Commands->Find_Object ( 105083 ); GameObject * zone06 = Commands->Find_Object ( 105084 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } if (zone03 != NULL) { Commands->Destroy_Object ( zone03 ); } if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } if (zone05 != NULL) { Commands->Destroy_Object ( zone05 ); } if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } } } } }; DECLARE_SCRIPT(M04_Apache_GoBackToHangar_EntryZone_JDG, "")//105085 { int apache_id; bool commandClearance; REGISTER_VARIABLES() { SAVE_VARIABLE( apache_id, 1 ); } void Created( GameObject * obj ) { apache_id = NULL; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//apache is sending you his id { apache_id = Commands->Get_ID ( sender ); } } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * apache = Commands->Find_Object ( apache_id ); if (apache != NULL) { Commands->Send_Custom_Event( obj, apache, 0, M01_MODIFY_YOUR_ACTION_06_JDG, 0 );//tell helicopter to go wait above hangar } } } }; DECLARE_SCRIPT(M04_ApacheRoom_Apache_JDG, "") { bool objective_active; bool fighting_rocket_turrets; bool waitingInAmbush; bool fightingInHangar; REGISTER_VARIABLES() { SAVE_VARIABLE(objective_active, 1); SAVE_VARIABLE(fighting_rocket_turrets, 2); SAVE_VARIABLE(waitingInAmbush, 3); SAVE_VARIABLE(fightingInHangar, 4); } void Created( GameObject * obj ) { fightingInHangar = false; waitingInAmbush = false; fighting_rocket_turrets = false; Commands->Enable_Hibernation( obj, false ); objective_active = false; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 2 ); GameObject * zone01 = Commands->Find_Object ( 105011 ); GameObject * zone02 = Commands->Find_Object ( 105012 ); GameObject * zone03 = Commands->Find_Object ( 105081 ); GameObject * zone04 = Commands->Find_Object ( 105082 ); GameObject * zone05 = Commands->Find_Object ( 105083 ); GameObject * zone06 = Commands->Find_Object ( 105084 ); GameObject * zone07 = Commands->Find_Object ( 105085 ); if (zone01 != NULL) { Commands->Send_Custom_Event( obj, zone01, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone02 != NULL) { Commands->Send_Custom_Event( obj, zone02, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone03 != NULL) { Commands->Send_Custom_Event( obj, zone03, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone04 != NULL) { Commands->Send_Custom_Event( obj, zone04, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone05 != NULL) { Commands->Send_Custom_Event( obj, zone05, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone06 != NULL) { Commands->Send_Custom_Event( obj, zone06, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } if (zone07 != NULL) { Commands->Send_Custom_Event( obj, zone07, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { Vector3 spawnSpot_01; Vector3 spawnSpot_02; Vector3 spawnSpot_03; Vector3 spawnSpot_04; Vector3 spawnSpot_05; Vector3 spawnSpot_06; if (objective_active == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 560, 0 ); } if (fighting_rocket_turrets == true) { spawnSpot_01.Set (8.677f, -50.970f, 2.954f); spawnSpot_02.Set (4.673f, -51.027f, 2.954f); spawnSpot_03.Set (1.000f, -51.069f, 3.004f); //spawnSpot_04.Set (-2.019f, -51.078f, 3.104f); spawnSpot_05.Set (-4.850f, -51.075f, 3.104f); spawnSpot_06.Set (-7.130f, -51.057f, 3.204f); } else { spawnSpot_01.Set (4.535f, 92.136f, 3.001f); spawnSpot_02.Set (1.191f, 92.178f, 3.001f); spawnSpot_03.Set (-1.902f, 92.156f, 3.001f); //spawnSpot_04.Set (3.983f, 94.662f, 3.001f); spawnSpot_05.Set (1.366f, 94.766f, 3.001f); spawnSpot_06.Set (-1.817f, 94.600f, 3.001f); } Commands->Create_Object ( "POW_RocketLauncher_Player", spawnSpot_01 ); Commands->Create_Object ( "POW_GrenadeLauncher_Player", spawnSpot_02 ); Commands->Create_Object ( "POW_ChemSprayer_Player", spawnSpot_03 ); //Commands->Create_Object ( "POW_Shotgun_Player", spawnSpot_04 ); Commands->Create_Object ( "POW_AutoRifle_Player", spawnSpot_05 ); Commands->Create_Object ( "POW_Chaingun_Player", spawnSpot_06 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG)//recieved custom from controller--take off and attack player { objective_active = true; Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 460, 0 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (0,0,0), 1.0f, 0.25f); params.WaypathID = 101264; params.WaypointStartID = 101265; params.WaypointEndID = 101266; Commands->Action_Goto(obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//now please leave the hanger { Commands->Disable_Physical_Collisions ( obj ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(Vector3 (0,0,0), 1.0f, 0.25f); params.WaypathSplined = false; params.WaypathID = 200611; params.WaypointStartID = 200612; params.WaypointEndID = 101324; Commands->Action_Goto(obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG)//now please cirlce the ship { Commands->Enable_Collisions ( obj ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.Set_Movement(Vector3 (0,0,0), 1.0f, 0.25f); params.WaypathID = 101267; params.WaypointStartID = 101268; Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_03_JDG, params, false, true ); } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG)//player is in tailun 02--go fight him { fighting_rocket_turrets = true; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.Set_Movement(Vector3 (-50.839f, -58.626f, 6.053f), 1.0f, 5); Commands->Action_Attack (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG)//player is in tailun 01--go fight him { fighting_rocket_turrets = true; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.Set_Movement(Vector3 (50.153f, -59.665f, 1.7f), 1.0f, 5); Commands->Action_Attack (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_06_JDG)//player is in blackhand area--go wait at hangar { Commands->Debug_Message ( "***************************apache has received custom to go back to hangar\n" ); waitingInAmbush = true; Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_04_JDG);//going to above hangar params.Set_Movement(Vector3 (2.310f, 50.897f, 56.500f), 1.0f, 5); params.MovePathfind = false; Commands->Action_Goto (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_07_JDG && waitingInAmbush == true && fightingInHangar == false)//player is on top floor hangar--spring the trap { Commands->Debug_Message ( "***************************apache has received custom that player is on top floor hangar\n" ); waitingInAmbush = false; fightingInHangar = true; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_05_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.MovePathfind = false; params.Set_Movement(Vector3 (1.971f, 49.491f, 1.618f), 1.0f, 5); Commands->Action_Attack (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_08_JDG && waitingInAmbush == true && fightingInHangar == false)//player is on middle floor hangar--spring the trap { Commands->Debug_Message ( "***************************apache has received custom that player is on middle floor hangar\n" ); waitingInAmbush = false; fightingInHangar = true; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_05_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.MovePathfind = false; params.Set_Movement(Vector3 (1.971f, 49.491f, -7.482f), 1.0f, 5); Commands->Action_Attack (obj, params); } else if (param == M01_MODIFY_YOUR_ACTION_09_JDG && waitingInAmbush == true && fightingInHangar == false)//player is on bottom floor hangar--spring the trap { Commands->Debug_Message ( "***************************apache has received custom that player is on bottom floor hangar\n" ); waitingInAmbush = false; fightingInHangar = true; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_05_JDG); params.Set_Attack( STAR, 1000, 0, true ); params.MovePathfind = false; params.Set_Movement(Vector3 (1.971f, 49.491f, -11.432f), 1.0f, 5); Commands->Action_Attack (obj, params); } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( STAR, 1000, 0, true ); Commands->Action_Attack(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 3 ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement(Vector3 (0,0,0), 1.0f, 0.25f); params.WaypathID = 101267; params.WaypointStartID = 101268; params.AttackActive = false; Commands->Action_Attack(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { //you are now waiting above the hangar Commands->Debug_Message ( "***************************apache should now be waiting over hangar\n" ); GameObject * zone01 = Commands->Find_Object ( 105011 );//these are the enter zones for going back through the apache hangar GameObject * zone02 = Commands->Find_Object ( 105012 ); GameObject * zone03 = Commands->Find_Object ( 105081 ); GameObject * zone04 = Commands->Find_Object ( 105082 ); GameObject * zone05 = Commands->Find_Object ( 105083 ); GameObject * zone06 = Commands->Find_Object ( 105084 ); if (zone01 != NULL) { Commands->Send_Custom_Event( obj, zone01, 0, M01_START_ACTING_JDG, 0 ); } if (zone02 != NULL) { Commands->Send_Custom_Event( obj, zone02, 0, M01_START_ACTING_JDG, 0 ); } if (zone03 != NULL) { Commands->Send_Custom_Event( obj, zone03, 0, M01_START_ACTING_JDG, 0 ); } if (zone04 != NULL) { Commands->Send_Custom_Event( obj, zone04, 0, M01_START_ACTING_JDG, 0 ); } if (zone05 != NULL) { Commands->Send_Custom_Event( obj, zone05, 0, M01_START_ACTING_JDG, 0 ); } if (zone06 != NULL) { Commands->Send_Custom_Event( obj, zone06, 0, M01_START_ACTING_JDG, 0 ); } } } }; DECLARE_SCRIPT(M04_CargoHold_Stationary_Officer_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } }; DECLARE_SCRIPT(M04_Firefight_Prisoner, "") { float last_health; bool rallying; bool pokable; bool warningPlayed; REGISTER_VARIABLES() { SAVE_VARIABLE(last_health, 1); SAVE_VARIABLE(rallying, 2); SAVE_VARIABLE(pokable, 3); SAVE_VARIABLE(warningPlayed, 3); } void Created( GameObject * obj ) { warningPlayed = false; pokable = false; rallying = false; Vector3 home_spot = Commands->Get_Position ( obj); Commands->Set_Innate_Soldier_Home_Location ( obj, home_spot, 2.0f ); last_health = Commands->Get_Health ( obj ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myCurrentHealth = Commands->Get_Health ( obj ); float myMaxHealth = Commands->Get_Max_Health ( obj ); if (((myCurrentHealth/myMaxHealth) * 100 ) <= 50) { if (warningPlayed == false) { Commands->Set_HUD_Help_Text ( IDS_M04DSGN_DSGN0204I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); warningPlayed = true; int medlabConversation = Commands->Create_Conversation( "M04_POW_Health_Warning_Conversation", 100, 50, false); Commands->Join_Conversation( NULL, medlabConversation, false, true ); //Commands->Join_Conversation( medTech, medlabConversation, false, true ); Commands->Start_Conversation( medlabConversation, medlabConversation ); } } if (damager == STAR) { Commands->Set_Health ( obj, last_health ); } else if (obj) { last_health = Commands->Get_Health ( obj ); } } void Poked( GameObject * obj, GameObject * poker ) { if (rallying == false && pokable == true) { Commands->Enable_HUD_Pokable_Indicator ( obj, false ); int medlabConversation = Commands->Create_Conversation( "M04_Firefight_POW_Poke_Conversation", 100, 50, false); Commands->Join_Conversation( STAR, medlabConversation, false, true ); //Commands->Join_Conversation( medTech, medlabConversation, false, true ); Commands->Start_Conversation( medlabConversation, medlabConversation ); Commands->Send_Custom_Event( obj, obj, 0, 667, 2 ); } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Set_HUD_Help_Text ( IDS_M04DSGN_DSGN0205I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_END_FIREFIGHT_CONTROLLER_JDG), 0, 10, 0 );//tell controller you've been killed } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == 1)//you are prisoner #3--you are now pokable { Commands->Enable_HUD_Pokable_Indicator ( obj, true ); pokable = true; } else if (param == 666)//everybody rally in front of the sub { rallying = true; ActionParamsStruct params; Vector3 rally_spot (-8.57f,-0.72f,-9.00f); params.Set_Basic(this, 50, 100); params.Set_Movement(rally_spot, 0.75f, 1.0f); Commands->Action_Goto (obj, params); Commands->Set_Innate_Soldier_Home_Location ( obj, rally_spot, 1.0f ); Commands->Send_Custom_Event( obj, obj, 0, 666, 1 ); } else if (param == 667)//everybody rally in front of the sub { rallying = true; ActionParamsStruct params; Vector3 rally_spot (-8.57f,-0.72f,-9.00f); params.Set_Basic(this, 100, 100); params.Set_Movement(rally_spot, RUN, 1.0f); Commands->Action_Goto (obj, params); Commands->Set_Innate_Soldier_Home_Location ( obj, rally_spot, 1.0f ); Commands->Send_Custom_Event( obj, obj, 0, 666, 1 ); } } } }; DECLARE_SCRIPT(M04_Firefight_Controller_JDG, "")//this guys ID number is M04_END_FIREFIGHT_CONTROLLER_JDG 100948 { int spawned_nod_guys; int prisonerOne_ID; int prisonerTwo_ID; int prisonerThree_ID; int missionIntroConv; bool prisoners_rescued; bool missionIntroConv_playing; REGISTER_VARIABLES() { SAVE_VARIABLE(spawned_nod_guys, 1); SAVE_VARIABLE(prisonerOne_ID, 2); SAVE_VARIABLE(prisonerTwo_ID, 3); SAVE_VARIABLE(prisonerThree_ID, 4); SAVE_VARIABLE(prisoners_rescued, 5); SAVE_VARIABLE(missionIntroConv, 6); SAVE_VARIABLE(missionIntroConv_playing, 7); } void Created( GameObject * obj ) { spawned_nod_guys = 0; prisoners_rescued = false; missionIntroConv_playing = false; } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: // { if (action_id == missionIntroConv) //rescue prisoners here { missionIntroConv_playing = false; } } break; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == 1)//player has freed prisoners--give clearance for end firefight { prisoners_rescued = true; } else if (param == 10)//one of the prisoners has been killed...give lose message { Commands->Create_Sound ( "00-n100e", Commands->Get_Position ( obj ), obj );//your mission is a failure Commands->Send_Custom_Event( obj, obj, 0, 11, 3 );//send custom to fail mission } else if (param == 11)//a prisoner has been killed, fail the mission { Commands->Mission_Complete ( false ); } else if (param == 20)//tell POWs to gather at sub { GameObject *prisonerOne = Commands->Find_Object (prisonerOne_ID); if (prisonerOne != NULL) { Commands->Send_Custom_Event( obj, prisonerOne, 0, 666, 0 ); } GameObject *prisonerTwo = Commands->Find_Object (prisonerTwo_ID); if (prisonerTwo != NULL) { Commands->Send_Custom_Event( obj, prisonerTwo, 0, 666, 0 ); } GameObject *prisonerThree = Commands->Find_Object (prisonerThree_ID); if (prisonerThree != NULL) { Commands->Send_Custom_Event( obj, prisonerThree, 0, 666, 0 );// } int medlabConversation = Commands->Create_Conversation( "M04_Rally_Round_The_Sub_Boy_Conversation", 100, 50, false); Commands->Join_Conversation( NULL, medlabConversation, false, true ); //Commands->Join_Conversation( medTech, medlabConversation, false, true ); Commands->Start_Conversation( medlabConversation, medlabConversation ); } else if (param == 100 )//player has picked up the level 3 key card...place actors and give alert { if (prisoners_rescued == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 470, 0 ); GameObject * zone01 = Commands->Find_Object (101126);//stays if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone04 = Commands->Find_Object (101129);//stays if (zone04 != NULL) { Commands->Destroy_Object ( zone04 ); } GameObject * zone06 = Commands->Find_Object (101131);//stays if (zone06 != NULL) { Commands->Destroy_Object ( zone06 ); } GameObject * zone10 = Commands->Find_Object (101135);//stays if (zone10 != NULL) { Commands->Destroy_Object ( zone10 ); } GameObject * zone12 = Commands->Find_Object (101137);//stays if (zone12 != NULL) { Commands->Destroy_Object ( zone12 ); } int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float delayTimer; if (currentDifficulty == hard) { delayTimer = 90; //put down the 3 prisoners in their siege spots GameObject *prisonerOne = Commands->Create_Object ( "GDI_Prisoner_v0b", Vector3(-8.58f, 0.06f,-9.0f)); Commands->Attach_Script(prisonerOne, "M04_Firefight_Prisoner", ""); GameObject *prisonerTwo = Commands->Create_Object ( "GDI_Prisoner_v1b", Vector3(-14.70f, -9.84f,-9.0f)); Commands->Attach_Script(prisonerTwo, "M04_Firefight_Prisoner", ""); GameObject *prisonerThree = Commands->Create_Object ( "GDI_Prisoner_v2b", Vector3(8.99f, -1.80f,-9.0f)); Commands->Attach_Script(prisonerThree, "M04_Firefight_Prisoner", ""); Commands->Send_Custom_Event( obj, prisonerThree, 0, 1, 0 );//tell this guy he is pokable prisonerOne_ID = Commands->Get_ID ( prisonerOne ); prisonerTwo_ID = Commands->Get_ID ( prisonerTwo ); prisonerThree_ID = Commands->Get_ID ( prisonerThree ); } else if (currentDifficulty == medium) { delayTimer = 45; //put down the 3 prisoners in their siege spots GameObject *prisonerOne = Commands->Create_Object ( "GDI_Prisoner_v0b", Vector3(-8.58f, 0.06f,-9.0f)); Commands->Attach_Script(prisonerOne, "M04_Firefight_Prisoner", ""); GameObject *prisonerTwo = Commands->Create_Object ( "GDI_Prisoner_v1b", Vector3(-14.70f, -9.84f,-9.0f)); Commands->Attach_Script(prisonerTwo, "M04_Firefight_Prisoner", ""); GameObject *prisonerThree = Commands->Create_Object ( "GDI_Prisoner_v2b", Vector3(8.99f, -1.80f,-9.0f)); Commands->Attach_Script(prisonerThree, "M04_Firefight_Prisoner", ""); Commands->Send_Custom_Event( obj, prisonerThree, 0, 1, 0 );//tell this guy he is pokable prisonerOne_ID = Commands->Get_ID ( prisonerOne ); prisonerTwo_ID = Commands->Get_ID ( prisonerTwo ); prisonerThree_ID = Commands->Get_ID ( prisonerThree ); } else { delayTimer = 5; //put down the 3 prisoners in their siege spots GameObject *prisonerOne = Commands->Create_Object ( "GDI_Prisoner_v0b", Vector3(-8.58f, 0.06f,-9.0f)); Commands->Attach_Script(prisonerOne, "M04_Firefight_Prisoner", ""); GameObject *prisonerTwo = Commands->Create_Object ( "GDI_Prisoner_v1b", Vector3(-14.70f, -9.84f,-9.0f)); Commands->Attach_Script(prisonerTwo, "M04_Firefight_Prisoner", ""); GameObject *prisonerThree = Commands->Create_Object ( "GDI_Prisoner_v2b", Vector3(-12.061f, -7.909f,-9.0f)); Commands->Attach_Script(prisonerThree, "M04_Firefight_Prisoner", ""); prisonerOne_ID = Commands->Get_ID ( prisonerOne ); prisonerTwo_ID = Commands->Get_ID ( prisonerTwo ); prisonerThree_ID = Commands->Get_ID ( prisonerThree ); } Commands->Send_Custom_Event( obj, obj, 0, 20, delayTimer );//tell prisoners to gather at sub Commands->Send_Custom_Event( obj, obj, 0, 110, 1 );//give verbal alert //the following 3 customs tell the end-mission zone what the prisoner's ID numbers are GameObject * rallyZone = Commands->Find_Object (101194); if (rallyZone != NULL) { Commands->Send_Custom_Event( obj, rallyZone, 1, prisonerOne_ID, 0 ); Commands->Send_Custom_Event( obj, rallyZone, 2, prisonerTwo_ID, 0 ); Commands->Send_Custom_Event( obj, rallyZone, 3, prisonerThree_ID, 0 ); Commands->Send_Custom_Event( obj, rallyZone, 0, M01_START_ACTING_JDG, 0 ); } else { Commands->Debug_Message ( "***************************firefight controller cannot find rally zone\n" ); } //trigger the first three spawners GameObject * nodGuy01 = Commands->Trigger_Spawner( 100938 ); Commands->Attach_Script(nodGuy01, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy01, 2, true ); Commands->Grant_Key( nodGuy01, 3, true ); GameObject * nodGuy02 = Commands->Trigger_Spawner( 100952 ); Commands->Attach_Script(nodGuy02, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy02, 2, true ); Commands->Grant_Key( nodGuy02, 3, true ); GameObject * nodGuy03 = Commands->Trigger_Spawner( 100951 ); Commands->Attach_Script(nodGuy03, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy03, 2, true ); Commands->Grant_Key( nodGuy03, 3, true ); spawned_nod_guys = 3; } else if (missionIntroConv_playing == false)//remind player to go rescue the prisoners { missionIntroConv_playing = true; missionIntroConv = Commands->Create_Conversation( "M04_Mission_Start_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missionIntroConv, false, false ); ///Commands->Join_Conversation( STAR, missionIntroConv, false, false ); Commands->Start_Conversation( missionIntroConv, missionIntroConv ); Commands->Monitor_Conversation (obj, missionIntroConv); } } else if (param == 110)//announce that our ally is under attack { //Commands->Create_Sound ( "00-d404e", Commands->Get_Position ( obj ), obj );//updating radar flags..temp placeholder } else if (param == 666)//a nod attacker has been killed { float doko_ni_reinforceka = Commands->Get_Random ( 0.5f, 3.5f ); if ((doko_ni_reinforceka >= 0.5) && (doko_ni_reinforceka < 1.5) && (spawned_nod_guys < 15)) { GameObject * nodGuy01 = Commands->Trigger_Spawner( 100938 ); Commands->Attach_Script(nodGuy01, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy01, 2, true ); Commands->Grant_Key( nodGuy01, 3, true ); } else if ((doko_ni_reinforceka >= 1.5) && (doko_ni_reinforceka < 2.5) && (spawned_nod_guys < 15)) { GameObject * nodGuy02 = Commands->Trigger_Spawner( 100952 ); Commands->Attach_Script(nodGuy02, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy02, 2, true ); Commands->Grant_Key( nodGuy02, 3, true ); } else if ((doko_ni_reinforceka >= 2.5) && (doko_ni_reinforceka < 3.5) && (spawned_nod_guys < 15)) { GameObject * nodGuy03 = Commands->Trigger_Spawner( 100951 ); Commands->Attach_Script(nodGuy03, "M04_Firefight_NodGuys", ""); Commands->Grant_Key( nodGuy03, 2, true ); Commands->Grant_Key( nodGuy03, 3, true ); } /*if (spawned_nod_guys == 8) { GameObject *prisonerOne = Commands->Find_Object (prisonerOne_ID); if (prisonerOne != NULL) { Commands->Send_Custom_Event( obj, prisonerOne, 0, 666, 0 ); } GameObject *prisonerTwo = Commands->Find_Object (prisonerTwo_ID); if (prisonerTwo != NULL) { Commands->Send_Custom_Event( obj, prisonerTwo, 0, 666, 0 ); } GameObject *prisonerThree = Commands->Find_Object (prisonerThree_ID); if (prisonerThree != NULL) { Commands->Send_Custom_Event( obj, prisonerThree, 0, 666, 0 ); } Commands->Create_Sound ( "00-d406e", Commands->Get_Position ( obj ), obj ); }*/ spawned_nod_guys++; } } }; DECLARE_SCRIPT(M04_Firefight_RallyZone, "")//this guys ID number is 101194 { bool ok_to_end; int prisoner01_ID; int prisoner02_ID; int prisoner03_ID; bool prisoner01_at_rallypoint; bool prisoner02_at_rallypoint; bool prisoner03_at_rallypoint; bool player_at_rallypoint; REGISTER_VARIABLES() { SAVE_VARIABLE(ok_to_end, 1); SAVE_VARIABLE(prisoner01_ID, 2); SAVE_VARIABLE(prisoner02_ID, 3); SAVE_VARIABLE(prisoner03_ID, 4); SAVE_VARIABLE(prisoner01_at_rallypoint, 5); SAVE_VARIABLE(prisoner02_at_rallypoint, 6); SAVE_VARIABLE(prisoner03_at_rallypoint, 7); SAVE_VARIABLE(player_at_rallypoint, 8); } void Created( GameObject * obj ) { ok_to_end = false; player_at_rallypoint = false; int currentDifficulty = Commands->Get_Difficulty_Level( ); int easy = 0; if (currentDifficulty == easy) { prisoner01_at_rallypoint = true; prisoner02_at_rallypoint = true; prisoner03_at_rallypoint = true; } else { prisoner01_at_rallypoint = true; prisoner02_at_rallypoint = true; prisoner03_at_rallypoint = false; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 1) { prisoner01_ID = param; } else if (type == 2) { prisoner02_ID = param; } else if (type == 3) { prisoner03_ID = param; } else if (param == M01_START_ACTING_JDG) { ok_to_end = true; } } void Entered( GameObject * obj, GameObject * enterer ) { GameObject *prisoner01 = Commands->Find_Object ( prisoner01_ID ); GameObject *prisoner02 = Commands->Find_Object ( prisoner02_ID ); GameObject *prisoner03 = Commands->Find_Object ( prisoner03_ID ); if (enterer == STAR) { //if (ok_to_end == true) //{ player_at_rallypoint = true; //} //else //{ // Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, M01_DO_END_MISSION_CHECK_JDG, 0 ); //} } else if (enterer == prisoner01) { prisoner01_at_rallypoint = true; } else if (enterer == prisoner02) { prisoner02_at_rallypoint = true; } else if (enterer == prisoner03) { prisoner03_at_rallypoint = true; } if ((player_at_rallypoint == true) && (prisoner01_at_rallypoint == true) && (prisoner02_at_rallypoint == true) && (prisoner03_at_rallypoint == true)) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, M01_DO_END_MISSION_CHECK_JDG, 0 ); } } void Exited( GameObject * obj, GameObject * exiter ) { GameObject *prisoner01 = Commands->Find_Object ( prisoner01_ID ); GameObject *prisoner02 = Commands->Find_Object ( prisoner01_ID ); GameObject *prisoner03 = Commands->Find_Object ( prisoner01_ID ); if (exiter == STAR) { player_at_rallypoint = false; } else if ( exiter == prisoner01) { prisoner01_at_rallypoint = false; } else if ( exiter == prisoner02) { prisoner02_at_rallypoint = false; } else if ( exiter == prisoner03) { prisoner03_at_rallypoint = false; } } }; DECLARE_SCRIPT(M04_Mutant_UpdateDisc_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Reveal_Encyclopedia_Character ( 27 ); Commands->Set_HUD_Help_Text ( IDS_M00EVAG_DSGN0104I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } }; DECLARE_SCRIPT(M04_TorpedoRoom_Target01_JDG, "")//DSP_L4TORPEDO { bool poked_yet; Vector3 myPosition; int animationCount; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( animationCount, 3 ); } void Created( GameObject * obj ) { Commands->Enable_HUD_Pokable_Indicator ( obj, true ); poked_yet = false; animationCount = 0; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4TORPEDO.DSP_L4TORPEDO", 0 ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "DSP_L4TORPEDO.DSP_L4TORPEDO") == 0) { animationCount++; if (animationCount >= 2) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { Commands->Set_Animation ( obj, "DSP_L4TORPEDO.DSP_L4TORPEDO", false); } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false) { if (STAR != NULL) { Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4TORPEDO.DSP_L4TORPEDO", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 200, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 400, 0 ); } } } } }; DECLARE_SCRIPT(M04_TorpedoRoom_Target02_JDG, "")//DSP_L4TORPEDOR { bool poked_yet; Vector3 myPosition; int animationCount; REGISTER_VARIABLES() { SAVE_VARIABLE( poked_yet, 1 ); SAVE_VARIABLE( myPosition, 2 ); SAVE_VARIABLE( animationCount, 3 ); } void Created( GameObject * obj ) { Commands->Enable_HUD_Pokable_Indicator ( obj, true ); poked_yet = false; animationCount = 0; myPosition = Commands->Get_Position ( obj ); Commands->Set_Animation_Frame ( obj, "DSP_L4TORPEDOR.DSP_L4TORPEDOR", 0 ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "DSP_L4TORPEDOR.DSP_L4TORPEDOR") == 0) { animationCount++; if (animationCount >= 2) { Commands->Create_Sound ("SFX.Electric_Fire_02", myPosition, obj ); } else { Commands->Set_Animation ( obj, "DSP_L4TORPEDOR.DSP_L4TORPEDOR", false); } } } void Poked( GameObject * obj, GameObject * poker ) { if (poked_yet == false) { if (STAR != NULL) { Commands->Create_Sound ("SFX.L04_Sabotage", myPosition, obj ); Commands->Enable_HUD_Pokable_Indicator ( obj, false ); poked_yet = true; Commands->Set_Animation ( obj, "DSP_L4TORPEDOR.DSP_L4TORPEDOR", false); Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 210, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, 400, 0 ); } } } } }; DECLARE_SCRIPT(M04_Pog_Controller_JDG, "")//104693 { bool missile_target01_poked; bool missile_target02_poked; bool missile_target03_poked; bool missile_target04_poked; bool missile_target01_active; bool missile_target02_active; bool missile_target03_active; bool missile_target04_active; bool engineroom_target01_active; bool engineroom_target02_active; bool engineroom_target03_active; bool engineroom_target04_active; bool torpedo_target01_active; bool torpedo_target02_active; bool torpedo_target01_poked; bool torpedo_target02_poked; REGISTER_VARIABLES() { SAVE_VARIABLE( missile_target01_poked, 1 ); SAVE_VARIABLE( missile_target02_poked, 2 ); SAVE_VARIABLE( missile_target03_poked, 3 ); SAVE_VARIABLE( missile_target04_poked, 4 ); SAVE_VARIABLE( missile_target01_active, 5 ); SAVE_VARIABLE( missile_target02_active, 6 ); SAVE_VARIABLE( missile_target03_active, 7 ); SAVE_VARIABLE( missile_target04_active, 8 ); SAVE_VARIABLE( engineroom_target01_active, 9 ); SAVE_VARIABLE( engineroom_target02_active, 10 ); SAVE_VARIABLE( engineroom_target03_active, 11 ); SAVE_VARIABLE( engineroom_target04_active, 12 ); SAVE_VARIABLE( torpedo_target01_active, 13 ); SAVE_VARIABLE( torpedo_target02_active, 14 ); SAVE_VARIABLE( torpedo_target01_poked, 15 ); SAVE_VARIABLE( torpedo_target02_poked, 16 ); } void Created( GameObject * obj ) { missile_target01_poked = false; missile_target02_poked = false; missile_target03_poked = false; missile_target04_poked = false; missile_target01_active = false; missile_target02_active = false; missile_target03_active = false; missile_target04_active = false; engineroom_target01_active = false; engineroom_target02_active = false; engineroom_target03_active = false; engineroom_target04_active = false; torpedo_target01_active = false; torpedo_target02_active = false; torpedo_target01_poked = false; torpedo_target02_poked = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_ADD_OBJECTIVE_POG_JDG) { if (param == 200)//add first pog for engine room { GameObject * engineroom_target01 = Commands->Find_Object ( 100419 ); GameObject * engineroom_target02 = Commands->Find_Object ( 100416 ); GameObject * engineroom_target03 = Commands->Find_Object ( 100418 ); GameObject * engineroom_target04 = Commands->Find_Object ( 100417 ); if (engineroom_target01 != NULL) { engineroom_target01_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target01 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target02 != NULL) { engineroom_target02_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target02 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target03 != NULL) { engineroom_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target03 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target04 != NULL) { engineroom_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target04 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } } else if (param == 300)//add first pog for missile room { if (missile_target01_poked == false) { GameObject * missile_target01 = Commands->Find_Object ( 100421 ); if (missile_target01 != NULL) { missile_target01_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target01 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target02_poked == false) { GameObject * missile_target02 = Commands->Find_Object ( 100422 ); if (missile_target02 != NULL) { missile_target02_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target02 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target03_poked == false) { GameObject * missile_target03 = Commands->Find_Object ( 100423 ); if (missile_target03 != NULL) { missile_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target03 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target04_poked == false) { GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (missile_target04 != NULL) { missile_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target04 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } } else if (param == 400)//add first pog for torpedo room { GameObject * torpedo_target01 = Commands->Find_Object ( 100410 ); if (torpedo_target01 != NULL) { torpedo_target01_active = true; Vector3 pogLocation = Commands->Get_Position ( torpedo_target01 ); Commands->Set_Objective_HUD_Info_Position( 400, 91, "POG_M04_1_04.tga", IDS_POG_SABOTAGE, pogLocation ); } } } else if (type == M01_CHANGE_OBJECTIVE_POG_JDG) { if (param == 200)//an engineroom target has been destroyed--change pog over { GameObject * engineroom_target01 = Commands->Find_Object ( 100419 ); GameObject * engineroom_target02 = Commands->Find_Object ( 100416 ); GameObject * engineroom_target03 = Commands->Find_Object ( 100418 ); GameObject * engineroom_target04 = Commands->Find_Object ( 100417 ); if (sender == engineroom_target01) { if (engineroom_target01_active == true) { engineroom_target01_active = false; Commands->Set_Objective_HUD_Info( 200, -1, "POG_M04_2_01.tga", IDS_POG_DESTROY ); if (engineroom_target02 != NULL) { engineroom_target02_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target02 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target03 != NULL) { engineroom_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target03 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target04 != NULL) { engineroom_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target04 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } } } else if (sender == engineroom_target02) { if (engineroom_target02_active == true) { engineroom_target02_active = false; Commands->Set_Objective_HUD_Info( 200, -1, "POG_M04_2_01.tga", IDS_POG_DESTROY ); if (engineroom_target03 != NULL) { engineroom_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target03 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } else if (engineroom_target04 != NULL) { engineroom_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target04 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } } } else if (sender == engineroom_target03) { if (engineroom_target03_active == true) { engineroom_target03_active = false; Commands->Set_Objective_HUD_Info( 200, -1, "POG_M04_2_01.tga", IDS_POG_DESTROY ); if (engineroom_target04 != NULL) { engineroom_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( engineroom_target04 ); Commands->Set_Objective_HUD_Info_Position( 200, 92, "POG_M04_2_01.tga", IDS_POG_DESTROY, pogLocation ); } } } else if (sender == engineroom_target04) { if (engineroom_target04_active == true) { engineroom_target04_active = false; Commands->Set_Objective_HUD_Info( 200, -1, "POG_M04_2_01.tga", IDS_POG_DESTROY ); } } } else if (param == 300)//missile room target has been poked--see who it is and take action { GameObject * missile_target01 = Commands->Find_Object ( 100421 ); GameObject * missile_target02 = Commands->Find_Object ( 100422 ); GameObject * missile_target03 = Commands->Find_Object ( 100423 ); GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (sender == missile_target01) { missile_target01_poked = true; } else if (sender == missile_target02) { missile_target02_poked = true; } else if (sender == missile_target03) { missile_target03_poked = true; } else if (sender == missile_target04) { missile_target04_poked = true; } if (missile_target01_poked == true && missile_target01_active == true)//done with #1 light up next one { Commands->Set_Objective_HUD_Info( 300, -1, "POG_M04_1_03.tga", IDS_POG_SABOTAGE ); if (missile_target02_poked == false) { GameObject * missile_target02 = Commands->Find_Object ( 100422 ); if (missile_target02 != NULL) { missile_target02_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target02 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target03_poked == false) { GameObject * missile_target03 = Commands->Find_Object ( 100423 ); if (missile_target03 != NULL) { missile_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target03 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target04_poked == false) { GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (missile_target04 != NULL) { missile_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target04 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } } else if (missile_target02_poked == true && missile_target02_active == true)//done with #2 light up next one { Commands->Set_Objective_HUD_Info( 300, -1, "POG_M04_1_03.tga", IDS_POG_SABOTAGE ); if (missile_target03_poked == false) { GameObject * missile_target03 = Commands->Find_Object ( 100423 ); if (missile_target03 != NULL) { missile_target03_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target03 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } else if (missile_target04_poked == false) { GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (missile_target04 != NULL) { missile_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target04 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } } else if (missile_target03_poked == true && missile_target03_active == true)//done with #3 light up next one { Commands->Set_Objective_HUD_Info( 300, -1, "POG_M04_1_03.tga", IDS_POG_SABOTAGE ); if (missile_target04_poked == false) { GameObject * missile_target04 = Commands->Find_Object ( 100420 ); if (missile_target04 != NULL) { missile_target04_active = true; Vector3 pogLocation = Commands->Get_Position ( missile_target04 ); Commands->Set_Objective_HUD_Info_Position( 300, 91, "POG_M04_1_03.tga", IDS_POG_SABOTAGE, pogLocation ); } } } } else if (param == 400)//torpedo target has been poked--see who it is and take action { GameObject * torpedo_target01 = Commands->Find_Object ( 100410 ); GameObject * torpedo_target02 = Commands->Find_Object ( 100409 ); if (sender == torpedo_target01) { torpedo_target01_poked = true; } if (sender == torpedo_target02) { torpedo_target02_poked = true; } if (torpedo_target01_poked == true ) { GameObject * torpedo_target02 = Commands->Find_Object ( 100409 ); if (torpedo_target02 != NULL && torpedo_target02_poked == false) { torpedo_target02_active = true; Vector3 pogLocation = Commands->Get_Position ( torpedo_target02 ); Commands->Set_Objective_HUD_Info_Position( 400, 91, "POG_M04_1_04.tga", IDS_POG_SABOTAGE, pogLocation ); } else { Vector3 pogLocation = Commands->Get_Position ( torpedo_target02 ); Commands->Set_Objective_HUD_Info_Position( 400, -1, "POG_M04_1_04.tga", IDS_POG_SABOTAGE, pogLocation ); } } } } } }; DECLARE_SCRIPT(M04_Start_TorpedoObjective_Zone_JDG, "")//105238 105239 { bool conversationPlaying; int missionIntroConv; REGISTER_VARIABLES() { SAVE_VARIABLE( conversationPlaying, 1 ); SAVE_VARIABLE( missionIntroConv, 2 ); } void Created( GameObject * obj ) { conversationPlaying = false; } void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR && conversationPlaying == false)//M04_Add_Torpedo_Objective_Conversation { conversationPlaying = true; missionIntroConv = Commands->Create_Conversation( "M04_Add_Torpedo_Objective_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missionIntroConv, false, false ); Commands->Start_Conversation( missionIntroConv, missionIntroConv ); Commands->Monitor_Conversation (obj, missionIntroConv); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == missionIntroConv)//conversation is over, now add objective and pogs { Commands->Send_Custom_Event( obj, Commands->Find_Object (M04_OBJECTIVE_CONTROLLER_JDG), 0, 450, 0 ); GameObject * pogController = Commands->Find_Object ( 104693 ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, 400, 0 ); } GameObject * zone01 = Commands->Find_Object ( 105238 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 ); } GameObject * zone02 = Commands->Find_Object ( 105239 ); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } } } break; } } }; DECLARE_SCRIPT(M04_TorpedoRoom_EnterZone_JDG, "")// 105240 { void Entered( GameObject * obj, GameObject * enterer ) { if ( enterer == STAR ) { int missionIntroConv = Commands->Create_Conversation( "M04_Poke_The_Torpedos_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missionIntroConv, false, false ); Commands->Start_Conversation( missionIntroConv, missionIntroConv ); GameObject *zone02 = Commands->Find_Object (105240); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 ); } } } }; DECLARE_SCRIPT(M04_BigSam_EntryZone_JDG, "")//104942 { bool missilesSabotaged; REGISTER_VARIABLES() { SAVE_VARIABLE(missilesSabotaged, 1); } void Created( GameObject * obj ) { missilesSabotaged = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if (missilesSabotaged == true) { GameObject * bigSam = Commands->Find_Object ( 104873 ); if (bigSam != NULL) { Commands->Send_Custom_Event( obj, bigSam, 0, M01_START_ACTING_JDG, 1 ); Commands->Destroy_Object ( obj );//one time only zone--cleaning up } } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { missilesSabotaged = true; } } } }; DECLARE_SCRIPT(M04_BigSam_Script_JDG, "")//104873 { int civWarning; int missileStuckSound; void Created( GameObject * obj ) { Commands->Set_Animation_Frame ( obj, "DSP_L4GIANTGUN.DSP_L4GIANTGUN", 0 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == civWarning) { Commands->Set_Animation ( obj, "DSP_L4GIANTGUN.DSP_L4GIANTGUN", false, NULL, 0, 119 ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ATTACKING_01_JDG, 10 ); } else if (param == missileStuckSound) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.AttackActive = false; Commands->Action_Attack ( obj, params ); Vector3 explosion01_spot (0.122f, -57.477f, 13.000f);// Commands->Create_Explosion ("Explosion_SAM_Site", explosion01_spot, NULL ); Commands->Set_Animation ( obj, "DSP_L4GIANTGUN.DSP_L4GIANTGUN", false, NULL, 120, 200 ); Commands->Set_Health ( obj, 0.25f ); } } else if (type == 0) { if (param == M01_START_ACTING_JDG )//missiles sabotaged/player entered room...start destruction sequence { civWarning = Commands->Create_2D_Sound ( "M04DSGN_DSGN0087I1EVAN_SND" ); Commands->Monitor_Sound ( obj, civWarning ); } else if (param == M01_START_ATTACKING_01_JDG ) { Vector3 myTarget = Commands->Get_Position ( obj ); myTarget.X += Commands->Get_Random(-30.0f, 30.0f); myTarget.Y += Commands->Get_Random(-30.0f, 30.0f); myTarget.Z += Commands->Get_Random(0, 30.0f); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ATTACKING_02_JDG, 3 ); } else if (param == M01_START_ATTACKING_02_JDG ) { missileStuckSound = Commands->Create_2D_Sound ( "Metal_Thunk_03" ); Commands->Monitor_Sound ( obj, missileStuckSound ); } } } }; DECLARE_SCRIPT(M04_PlaySound_OnZoneEntry_OneTime_JDG, "SoundName:string") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { const char * sound_name = Get_Parameter("SoundName"); Vector3 playersPosition = Commands->Get_Position ( obj ); Vector3 speaker01_Position = playersPosition; Vector3 speaker02_Position = playersPosition; Vector3 speaker03_Position = playersPosition; speaker01_Position.X += Commands->Get_Random(-10,10); speaker01_Position.Y += Commands->Get_Random(-10,10); speaker01_Position.Z += Commands->Get_Random(-10,10); speaker02_Position.X += Commands->Get_Random(-10,10); speaker02_Position.Y += Commands->Get_Random(-10,10); speaker02_Position.Z += Commands->Get_Random(-10,10); speaker03_Position.X += Commands->Get_Random(-10,10); speaker03_Position.Y += Commands->Get_Random(-10,10); speaker03_Position.Z += Commands->Get_Random(-10,10); Commands->Create_Sound ( sound_name, speaker01_Position, NULL ); Commands->Create_Sound ( sound_name, speaker02_Position, NULL ); Commands->Create_Sound ( sound_name, speaker03_Position, NULL ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M04_Objective_Reminder_Controller_JDG, "")//105760 { bool prisoner_primaryActive; bool missile_primaryActive; bool l01keycard_primaryActive; bool l02keycard_primaryActive; bool l03keycard_primaryActive; bool torpedo_primaryActive; bool escape_primaryActive; bool commandClearance; REGISTER_VARIABLES() { SAVE_VARIABLE( prisoner_primaryActive, 1 ); SAVE_VARIABLE( missile_primaryActive, 2 ); SAVE_VARIABLE( l01keycard_primaryActive, 3 ); SAVE_VARIABLE( l02keycard_primaryActive, 4 ); SAVE_VARIABLE( l03keycard_primaryActive, 5 ); SAVE_VARIABLE( torpedo_primaryActive, 6 ); SAVE_VARIABLE( escape_primaryActive, 7 ); SAVE_VARIABLE( commandClearance, 8 ); } void Created( GameObject * obj ) { prisoner_primaryActive = false; missile_primaryActive = false; l01keycard_primaryActive = false; l02keycard_primaryActive = false; l03keycard_primaryActive = false; torpedo_primaryActive = false; escape_primaryActive = false; commandClearance = true; Commands->Send_Custom_Event( obj, obj, 1, 1, 90 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_ADD_OBJECTIVE_POG_JDG) { if (param == 0)//rescue the prisoner objective added { prisoner_primaryActive = true; } else if (param == 1)//sabotage the missile rack objective added { missile_primaryActive = true; } else if (param == 2)//get the level 01 keycard { l01keycard_primaryActive = true; } else if (param == 3)//get the level 02 keycard { l02keycard_primaryActive = true; } else if (param == 4)//get the level 03 keycard { l03keycard_primaryActive = true; } else if (param == 5)//sabotage the torpedo racks { torpedo_primaryActive = true; } else if (param == 6)//escape with the prisoners { escape_primaryActive = true; } commandClearance = false; Commands->Send_Custom_Event( obj, obj, 1, 2, 15 ); } else if (type == M01_REMOVE_OBJECTIVE_POG_JDG) { if (param == 0)//rescue the prisoner objective added { prisoner_primaryActive = false; } else if (param == 1)//sabotage the missile rack objective added { missile_primaryActive = false; } else if (param == 2)//get the level 01 keycard { l01keycard_primaryActive = false; } else if (param == 3)//get the level 02 keycard { l02keycard_primaryActive = false; } else if (param == 4)//get the level 03 keycard { l03keycard_primaryActive = false; } else if (param == 5)//sabotage the missile racks { torpedo_primaryActive = false; } else if (param == 6)//escape with the prisoners { escape_primaryActive = false; } } else if (type == 1) { if (param == 1)//give reminder message { if (missile_primaryActive == true && commandClearance == true) {//M04_Add_MissileRoom_Objective_Conversation int reminderConv = Commands->Create_Conversation( "M04_Add_MissileRoom_Objective_Conversation", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (torpedo_primaryActive == true && commandClearance == true) {//M04_Add_Torpedo_Objective_Conversation int reminderConv = Commands->Create_Conversation( "M04_Add_Torpedo_Objective_Conversation", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (l01keycard_primaryActive == true && commandClearance == true) {//M04_Add_PrisonKey_Objective int reminderConv = Commands->Create_Conversation( "M04_Add_PrisonKey_Objective", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (prisoner_primaryActive == true && commandClearance == true) {//M04_Mission_Start_Conversation int reminderConv = Commands->Create_Conversation( "M04_Mission_Start_Conversation", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (l03keycard_primaryActive == true && commandClearance == true) {//M04_Add_Captains_Key_Objective_Conversation int reminderConv = Commands->Create_Conversation( "M04_Add_Captains_Key_Objective_Conversation", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (l02keycard_primaryActive == true && commandClearance == true) {//M04_Add_FirstMate_Objective_JDG int reminderConv = Commands->Create_Conversation( "M04_Add_FirstMate_Objective_JDG", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } else if (escape_primaryActive == true && commandClearance == true) {//M04_Rally_Round_The_Sub_Boy_Conversation int reminderConv = Commands->Create_Conversation( "M04_Rally_Round_The_Sub_Boy_Conversation", 10, 1000, false); Commands->Join_Conversation( NULL, reminderConv, false, false ); Commands->Start_Conversation( reminderConv, reminderConv ); } Commands->Send_Custom_Event( obj, obj, 1, 1, 90 ); } if (param == 2)//give reminder message { commandClearance = true; } } } };