/* ** 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 * Mission01.cpp * * DESCRIPTION * Mission 1 scripts * * PROGRAMMER * Design Team * * VERSION INFO * $Author: Joe_g $ * $Revision: 268 $ * $Modtime: 1/23/02 12:00p $ * $Archive: /Commando/Code/Scripts/Mission01.cpp $ * ******************************************************************************/ #include "scripts.h" #include #include "toolkit.h" #include "mission1.h" DECLARE_SCRIPT(M01_Mission_Controller_JDG, "")//this guys ID number is 100376 { typedef enum { IDLE, ACTIVE, UNDER_ATTACK, DESTROYED, } M01_Building_State; typedef enum { LANDING_BEACH, INSIDE_GDI_CON, AT_GDI_BASE, INSIDE_GDI_POWERPLANT, BY_HAND_OF_NOD, INSIDE_HAND_OF_NOD, BY_REFINERY, INSIDE_REFINERY, BY_COMM_CENTER, INSIDE_COMM_CENTER, BY_TUNNEL, INSIDE_TUNNEL, BY_WATERFALL, INSIDE_WATERFALL, AT_SNIPER_SCENARIO, } M01_Location; bool is_startup; bool first_time_in_handofnod; bool first_time_in_hon_gruntlevel; bool first_time_in_hon_dojolevel; bool first_time_poking_gate_lock; bool players_first_time_by_commcenter; bool first_time_at_barn; bool gate_objective_done; bool church_guard_is_dead; bool loveshack_guard_is_dead; bool player_has_an_escort; bool clergy_are_boarding; bool church_pickup_chinook_is_on_its_way; bool player_has_unlocked_pen; bool radar_is_scrambled; bool unlock_gate_objective_active; bool commcenter_sam_objective_active; bool prisoners_are_freed; bool m01_hon_spawned_guy_01_alive; bool m01_hon_spawned_guy_02_alive; bool m01_hon_spawned_guy_03_alive; bool turret_01_is_dead; bool turret_02_is_dead; bool medium_tank_spawned; bool barn_prisoner_01_is_dead; bool barn_prisoner_02_is_dead; bool barn_prisoner_03_is_dead; bool barn_objective_active; bool kane_and_no2_conv01_active; bool kane_and_no2_conv02_active; bool kane_and_havoc_conv_active; bool m01_bridgeWeather_is_Set; bool m01_nodBase_weather_is_Set; bool missionStart; bool barn_objective_failed; bool barn_announcement_active; bool barn_objective_ended; bool turret_objective_over; bool final_conv_played; int m01_church_interior_nun02_ID; int m01_whack_a_mole_guy_ID; int m01_hon_spawned_guy_01_ID; int m01_hon_spawned_guy_02_ID; int m01_hon_spawned_guy_03_ID; int m01_medium_tank_ID; int m01_hon_spawners_tally; int m01_hon_total_spawners_tally; int m01_HON_SpawnRate; int new_turretbeach_engineers; int kane_ID; int eva_comm_center_line_01; int eva_comm_center_line_02; int eva_comm_center_line_03; int eva_comm_center_line_04; int eva_comm_center_line_05; int billy_conv; int babushka_conv; int start_conv; int start_conv2; int kane_and_no2_conv01; int kane_and_no2_conv02; int kane_and_havoc_conv; int lockes_hon_mct_conv1; int lockes_hon_mct_conv2; int barnEvac_conv; int barnfailed_conv; int civ3_conv; int missionIntro; int endMission_conv; int unlocked_gate_conv; int turrets_conv; int players_escorts_ID; int havocs_targets_ID; int m01_hon_chinook_guys_killed; int dead_barn_guard_tally; int dead_barn_prisoner_tally; //new stuff bool firstNodCommanderKilled; int loveshack_conv; bool loveshack_conv_playing; int priest_conv; bool priest_conv_playing; int interior_nun_conv; bool interior_nun_conv_playing; bool player_has_reached_grunt_level; bool civs_scattered; bool commcenter_sam_destroyed; M01_Building_State hand_of_nod_state, comm_center_state; M01_Location players_location; REGISTER_VARIABLES() { SAVE_VARIABLE(is_startup, 1); SAVE_VARIABLE(first_time_in_handofnod, 2); SAVE_VARIABLE(first_time_in_hon_gruntlevel, 3); SAVE_VARIABLE(first_time_in_hon_dojolevel, 4); SAVE_VARIABLE(first_time_poking_gate_lock, 5); SAVE_VARIABLE(players_first_time_by_commcenter, 6); SAVE_VARIABLE(first_time_at_barn, 7); SAVE_VARIABLE(gate_objective_done, 8); SAVE_VARIABLE(church_guard_is_dead, 9); SAVE_VARIABLE(loveshack_guard_is_dead, 10); SAVE_VARIABLE(player_has_an_escort, 11); SAVE_VARIABLE(clergy_are_boarding, 12); SAVE_VARIABLE(church_pickup_chinook_is_on_its_way, 13); SAVE_VARIABLE(player_has_unlocked_pen, 14); SAVE_VARIABLE(radar_is_scrambled, 15); SAVE_VARIABLE(unlock_gate_objective_active, 16); SAVE_VARIABLE(commcenter_sam_objective_active, 17); SAVE_VARIABLE(prisoners_are_freed, 18); SAVE_VARIABLE(m01_hon_spawned_guy_01_alive, 19); SAVE_VARIABLE(m01_hon_spawned_guy_02_alive, 20); SAVE_VARIABLE(m01_hon_spawned_guy_03_alive, 21); SAVE_VARIABLE(turret_01_is_dead, 22); SAVE_VARIABLE(turret_02_is_dead, 23); SAVE_VARIABLE(medium_tank_spawned, 24); SAVE_VARIABLE(barn_prisoner_01_is_dead, 25); SAVE_VARIABLE(barn_prisoner_02_is_dead, 26); SAVE_VARIABLE(barn_prisoner_03_is_dead, 27); SAVE_VARIABLE(barn_objective_active, 28); SAVE_VARIABLE(kane_and_no2_conv01_active, 29); SAVE_VARIABLE(kane_and_no2_conv02_active, 30); SAVE_VARIABLE(kane_and_havoc_conv_active, 31); SAVE_VARIABLE(m01_bridgeWeather_is_Set, 32); SAVE_VARIABLE(m01_nodBase_weather_is_Set, 33); SAVE_VARIABLE(missionStart, 34); SAVE_VARIABLE(barn_objective_failed, 35); SAVE_VARIABLE(barn_announcement_active, 36); SAVE_VARIABLE(barn_objective_ended, 37); SAVE_VARIABLE(turret_objective_over, 38); SAVE_VARIABLE(final_conv_played, 39); SAVE_VARIABLE(m01_church_interior_nun02_ID, 40); SAVE_VARIABLE(m01_whack_a_mole_guy_ID, 41); SAVE_VARIABLE(m01_hon_spawned_guy_01_ID, 42); SAVE_VARIABLE(m01_hon_spawned_guy_02_ID, 43); SAVE_VARIABLE(m01_hon_spawned_guy_03_ID, 44); SAVE_VARIABLE(m01_medium_tank_ID, 45); SAVE_VARIABLE(m01_hon_spawners_tally, 46); SAVE_VARIABLE(m01_hon_total_spawners_tally, 47); SAVE_VARIABLE(m01_HON_SpawnRate, 48); SAVE_VARIABLE(new_turretbeach_engineers, 49); SAVE_VARIABLE(kane_ID, 50); SAVE_VARIABLE(eva_comm_center_line_01, 51); SAVE_VARIABLE(eva_comm_center_line_02, 52); SAVE_VARIABLE(eva_comm_center_line_03, 53); SAVE_VARIABLE(eva_comm_center_line_04, 54); SAVE_VARIABLE(eva_comm_center_line_05, 55); SAVE_VARIABLE(billy_conv, 56); SAVE_VARIABLE(babushka_conv, 57); SAVE_VARIABLE(start_conv, 58); SAVE_VARIABLE(start_conv2, 59); SAVE_VARIABLE(kane_and_no2_conv01, 60); SAVE_VARIABLE(kane_and_no2_conv02, 61); SAVE_VARIABLE(kane_and_havoc_conv, 62); SAVE_VARIABLE(lockes_hon_mct_conv1, 63); SAVE_VARIABLE(lockes_hon_mct_conv2, 64); SAVE_VARIABLE(barnEvac_conv, 65); SAVE_VARIABLE(barnfailed_conv, 66); SAVE_VARIABLE(civ3_conv, 67); SAVE_VARIABLE(missionIntro, 68); SAVE_VARIABLE(endMission_conv, 69); SAVE_VARIABLE(unlocked_gate_conv, 70); SAVE_VARIABLE(turrets_conv, 71); SAVE_VARIABLE(players_escorts_ID, 72); SAVE_VARIABLE(havocs_targets_ID, 73); SAVE_VARIABLE(m01_hon_chinook_guys_killed, 74); SAVE_VARIABLE(dead_barn_guard_tally, 75); SAVE_VARIABLE(dead_barn_prisoner_tally, 76); SAVE_VARIABLE(hand_of_nod_state, 77); SAVE_VARIABLE(comm_center_state, 78); SAVE_VARIABLE(players_location, 79); SAVE_VARIABLE(firstNodCommanderKilled, 80); SAVE_VARIABLE(loveshack_conv, 81); SAVE_VARIABLE(loveshack_conv_playing, 82); SAVE_VARIABLE(priest_conv, 83); SAVE_VARIABLE(priest_conv_playing, 84);// SAVE_VARIABLE(interior_nun_conv, 85); SAVE_VARIABLE(interior_nun_conv_playing, 86); SAVE_VARIABLE(player_has_reached_grunt_level, 87); SAVE_VARIABLE(civs_scattered, 88); SAVE_VARIABLE(commcenter_sam_destroyed, 89); } void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); hand_of_nod_state = IDLE; comm_center_state = IDLE; players_location = LANDING_BEACH; is_startup = true; first_time_in_handofnod = true; first_time_in_hon_gruntlevel = true; first_time_in_hon_dojolevel = true; first_time_poking_gate_lock = true; players_first_time_by_commcenter = true; first_time_at_barn = true; missionStart = true; church_guard_is_dead = false; loveshack_guard_is_dead = false; player_has_an_escort = false; church_pickup_chinook_is_on_its_way = false; clergy_are_boarding = false; player_has_unlocked_pen = false; radar_is_scrambled = false; unlock_gate_objective_active = false; commcenter_sam_objective_active = false; prisoners_are_freed = false; m01_hon_spawned_guy_01_alive = false; m01_hon_spawned_guy_02_alive = false; m01_hon_spawned_guy_03_alive = false; turret_01_is_dead = false; turret_02_is_dead = false; medium_tank_spawned = false; barn_prisoner_01_is_dead = false; barn_prisoner_02_is_dead = false; barn_prisoner_03_is_dead = false; barn_objective_active = false; kane_and_no2_conv01_active = false; kane_and_no2_conv02_active = false; kane_and_havoc_conv_active = false; m01_bridgeWeather_is_Set = false; m01_nodBase_weather_is_Set = false; barn_objective_failed = false; barn_announcement_active = false; barn_objective_ended = false; turret_objective_over = false; final_conv_played = false; gate_objective_done = false; firstNodCommanderKilled = false; loveshack_conv_playing = false; priest_conv_playing = false; interior_nun_conv_playing = false; player_has_reached_grunt_level = false; civs_scattered = false; commcenter_sam_destroyed = false; m01_hon_chinook_guys_killed = 0; m01_hon_spawners_tally = 0; m01_hon_total_spawners_tally = 0; new_turretbeach_engineers = 0; dead_barn_guard_tally = 0; dead_barn_prisoner_tally = 0; m01_HON_SpawnRate = 14; players_escorts_ID = 0; havocs_targets_ID = 0; //Commands->Set_Clouds (0.25f, 0.25f, 0); Commands->Set_Wind (0, 0, 0, 0); Commands->Set_Rain (0, 0, true); Commands->Set_Lightning (0.25f, 0.75f, 1, 0, 0.10f, 0); //putting datalink updates here Commands->Reveal_Encyclopedia_Character ( 19 );//gdi minigunner Commands->Reveal_Encyclopedia_Character ( 21 );//gdi minigunner officer Commands->Reveal_Encyclopedia_Character ( 14 );//gdi grenadier Commands->Reveal_Encyclopedia_Character ( 38 );//nod minigunner Commands->Reveal_Encyclopedia_Character ( 18 );//Lt Maus -- whoever that is Commands->Reveal_Encyclopedia_Character ( 16 );//General Locke Commands->Reveal_Encyclopedia_Character ( 39 );//sakura Commands->Reveal_Encyclopedia_Character ( 13 );//hotwire Commands->Reveal_Encyclopedia_Character ( 15 );//patch Commands->Reveal_Encyclopedia_Character ( 22 );//deadeye Commands->Reveal_Encyclopedia_Character ( 26 );//gunner Commands->Reveal_Encyclopedia_Character ( 24 );//gdi rocket guy Commands->Reveal_Encyclopedia_Character ( 25 );//gdi rocket guy officer Commands->Reveal_Encyclopedia_Character ( 23 );//gdi POW Commands->Reveal_Encyclopedia_Weapon ( 14 );//pistol Commands->Reveal_Encyclopedia_Weapon ( 20 );//sniper rifle Commands->Reveal_Encyclopedia_Weapon ( 5 );//remote c4 Commands->Reveal_Encyclopedia_Vehicle ( 18 );//orca Commands->Reveal_Encyclopedia_Vehicle ( 19 );//gdi transport helicopter Commands->Reveal_Encyclopedia_Building ( 4 );//gdi powerplant Commands->Reveal_Encyclopedia_Building ( 2 );//gdi con yard } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == eva_comm_center_line_01) { eva_comm_center_line_02 = Commands->Create_Sound ( "00-N002E", Vector3 (0,0,0), obj );//please stand by Commands->Monitor_Sound ( obj, eva_comm_center_line_02 ); } else if (param == eva_comm_center_line_02) { eva_comm_center_line_03 = Commands->Create_Sound ( "00-N026E", Vector3 (0,0,0), obj );//transmitting Commands->Monitor_Sound ( obj, eva_comm_center_line_03 ); } else if (param == eva_comm_center_line_03) { eva_comm_center_line_04 = Commands->Create_Sound ( "00-N028E", Vector3 (0,0,0), obj );//receiving Commands->Monitor_Sound ( obj, eva_comm_center_line_04 ); } else if (param == eva_comm_center_line_04) { eva_comm_center_line_05 = Commands->Create_Sound ( "00-N030E", Vector3 (0,0,0), obj );//data acquisition complete Commands->Monitor_Sound ( obj, eva_comm_center_line_05 ); } else if (param == eva_comm_center_line_05) { Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_UNLOCK_GATE_OBJECTIVE_JDG, 0 ); player_has_unlocked_pen = true; } } else if (type == 0) { switch (param) { case 0://mission is over--end pass { Commands->Mission_Complete ( true ); } break; case M01_HON_HAS_BEEN_DESTROYED_JDG://Hand of Nod has been destroyed { Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_HON_OBJECTIVE_PASS_JDG, 2 ); float pick_a_sound = Commands->Get_Random ( 0.5f, 2.5f ); if (pick_a_sound >= 0.5 && pick_a_sound < 1.5) { Commands->Create_Sound ( "EVA_Enemy_Structure_Destroyed", Vector3 (0,0,0), obj); } else { Commands->Create_Sound ( "EVA_Nod_Structure_Destroyed", Vector3 (0,0,0), obj); } hand_of_nod_state = DESTROYED; Commands->Give_Points( STAR, 5000, false ); GameObject * honCafeteriaGuy01 = Commands->Find_Object ( M01_HON_CAFETERIA_EATING_GUY_ID ); if (honCafeteriaGuy01 != NULL) { Commands->Send_Custom_Event( obj, honCafeteriaGuy01, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honCafeteriaGuy02 = Commands->Find_Object ( M01_HON_CAFETERIA_WALKING_GUY_ID ); if (honCafeteriaGuy02 != NULL) { Commands->Send_Custom_Event( obj, honCafeteriaGuy02, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honJudoGuy01 = Commands->Find_Object ( M01_HON_CAFETERIA_JUDO_GUY_ID ); if (honJudoGuy01 != NULL) { Commands->Send_Custom_Event( obj, honJudoGuy01, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDormGuy01 = Commands->Find_Object ( M01_HON_DORMROOM_MINIGUNNER_ID ); if (honDormGuy01 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy01, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDormGuy02 = Commands->Find_Object ( M01_HON_DORMROOM_ROCKET_GUY_ID ); if (honDormGuy02 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy02, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDormGuy03 = Commands->Find_Object ( M01_HON_DORMROOM_CHEM_GUY_ID ); if (honDormGuy03 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy03, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDormGuy04 = Commands->Find_Object ( M01_HON_DORMROOM_FLAME_GUY_ID ); if (honDormGuy04 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy04, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDormGuy05 = Commands->Find_Object ( M01_HON_DORMROOM_CRAPPER_ID ); if (honDormGuy05 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy05, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDojoSensei = Commands->Find_Object ( M01_HON_DOJO_SENSEI_JDG ); if (honDojoSensei != NULL) { Commands->Send_Custom_Event( obj, honDojoSensei, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDojoCiv01 = Commands->Find_Object ( M01_HON_DOJO_CIV_01_JDG ); if (honDojoCiv01 != NULL) { Commands->Send_Custom_Event( obj, honDojoCiv01, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDojoCiv02 = Commands->Find_Object ( M01_HON_DOJO_CIV_02_JDG ); if (honDojoCiv02 != NULL) { Commands->Send_Custom_Event( obj, honDojoCiv02, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * honDojoCiv03 = Commands->Find_Object ( M01_HON_DOJO_CIV_03_JDG ); if (honDojoCiv03 != NULL) { Commands->Send_Custom_Event( obj, honDojoCiv03, 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, 0 ); } if (players_location != INSIDE_HAND_OF_NOD) { if (player_has_reached_grunt_level == false) { GameObject * m01_hon_evacuator_guy01 = Commands->Trigger_Spawner( M01_HON_FRONTDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy01, "M01_HON_FrontDoor_Evacuator_JDG", ""); GameObject * m01_hon_evacuator_guy02 = Commands->Trigger_Spawner( M01_HON_FRONTDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy02, "M01_HON_FrontDoor_Evacuator_JDG", ""); GameObject * m01_hon_evacuator_guy03 = Commands->Trigger_Spawner( M01_HON_FRONTDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy03, "M01_HON_FrontDoor_Evacuator_JDG", ""); GameObject * m01_hon_evacuator_guy04 = Commands->Trigger_Spawner( M01_HON_BACKDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy04, "M01_HON_BackDoor_Evacuator_JDG", ""); GameObject * m01_hon_evacuator_guy05 = Commands->Trigger_Spawner( M01_HON_BACKDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy05, "M01_HON_BackDoor_Evacuator_JDG", ""); GameObject * m01_hon_evacuator_guy06 = Commands->Trigger_Spawner( M01_HON_BACKDOOR_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_hon_evacuator_guy06, "M01_HON_BackDoor_Evacuator_JDG", ""); } } } break; case M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG://Comm Center has been destroyed { if (players_location != INSIDE_COMM_CENTER) { GameObject * m01_commcenter_evacuator_guy01 = Commands->Trigger_Spawner( M01_COMMCENTER_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_commcenter_evacuator_guy01, "M01_CommCenter_Evacuator_JDG", ""); GameObject * m01_commcenter_evacuator_guy02 = Commands->Trigger_Spawner( M01_COMMCENTER_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_commcenter_evacuator_guy02, "M01_CommCenter_Evacuator_JDG", ""); GameObject * m01_commcenter_evacuator_guy03 = Commands->Trigger_Spawner( M01_COMMCENTER_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_commcenter_evacuator_guy03, "M01_CommCenter_Evacuator_JDG", ""); GameObject * m01_commcenter_evacuator_guy04 = Commands->Trigger_Spawner( M01_COMMCENTER_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_commcenter_evacuator_guy04, "M01_CommCenter_Evacuator_JDG", ""); GameObject * m01_commcenter_evacuator_guy05 = Commands->Trigger_Spawner( M01_COMMCENTER_DESTROYED_SPAWNER_JDG ); Commands->Attach_Script(m01_commcenter_evacuator_guy05, "M01_CommCenter_Evacuator_JDG", ""); } if (player_has_unlocked_pen == false) { Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_UNLOCK_GATE_OBJECTIVE_JDG, 0 ); player_has_unlocked_pen = true; } if (radar_is_scrambled == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_UNSCRAMBLE_THE_RADAR_JDG, 0 ); } float pick_a_sound = Commands->Get_Random ( 0.5f, 2.5f ); if (pick_a_sound >= 0.5 && pick_a_sound < 1.5) { Commands->Create_Sound ( "EVA_Enemy_Structure_Destroyed", Vector3 (0,0,0), obj); } else if (pick_a_sound >= 1.5 && pick_a_sound <= 2.5) { Commands->Create_Sound ( "EVA_Nod_Structure_Destroyed", Vector3 (0,0,0), obj); } comm_center_state = DESTROYED; } break; case M01_PLAYER_IS_INSIDE_HON_JDG://Player is inside HON--kill rain sounds { players_location = INSIDE_HAND_OF_NOD; GameObject * soundController = Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ); if (soundController != NULL) { Commands->Send_Custom_Event( obj, soundController, 0, M01_TURN_OFF_OUTSIDE_AMBIENTS_JDG, 0 ); Commands->Send_Custom_Event( obj, soundController, 0, M01_PLAYER_IS_INSIDE_HON_JDG, 0 ); } if (first_time_in_handofnod == true) { first_time_in_handofnod = false; Commands->Send_Custom_Event( obj, obj, 0, M01_HON_CUE_WARROOM_LEVEL_ACTORS_JDG, 0 ); } } break; case M01_PLAYER_IS_OUTSIDE_HON_JDG://Player is outside HON--restart rain sounds { players_location = BY_HAND_OF_NOD; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_ON_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG://Player is inside Comm Center--kill rain sounds--start internal pagings { players_location = INSIDE_COMM_CENTER; GameObject * soundController = Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ); if (soundController != NULL) { Commands->Send_Custom_Event( obj, soundController, 0, M01_TURN_OFF_OUTSIDE_AMBIENTS_JDG, 0 ); Commands->Send_Custom_Event( obj, soundController, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * baseCommander = Commands->Find_Object ( M01_COMMCENTER_BASE_COMMANDER_JDG ); if (baseCommander != NULL) { Commands->Send_Custom_Event( obj, baseCommander, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * baseScapeGoat = Commands->Find_Object ( M01_COMMCENTER_BASE_SCAPEGOAT_JDG ); if (baseScapeGoat != NULL) { Commands->Send_Custom_Event( obj, baseScapeGoat, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * upstairsTech = Commands->Find_Object ( M01_COMMCENTER_UPSTAIRS_TECH_JDG ); if (upstairsTech != NULL) { Commands->Send_Custom_Event( obj, upstairsTech, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * warroomTech01 = Commands->Find_Object ( M01_COMMCENTER_WAROOM_TECH_01_JDG ); if (warroomTech01 != NULL) { Commands->Send_Custom_Event( obj, warroomTech01, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * warroomTech02 = Commands->Find_Object ( M01_COMMCENTER_WAROOM_TECH_02_JDG ); if (warroomTech02 != NULL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_COMMCENTER_WAROOM_TECH_02_JDG ), 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * mainframeTech = Commands->Find_Object ( M01_COMMCENTER_COMPUTERROOM_TECH_JDG ); if (mainframeTech != NULL) { Commands->Send_Custom_Event( obj, mainframeTech, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } GameObject * upstairsGuard = Commands->Find_Object ( M01_COMMCENTER_UPSTAIRS_GUARD_JDG ); if (upstairsGuard != NULL) { Commands->Send_Custom_Event( obj, upstairsGuard, 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } } break; case M01_PLAYER_IS_OUTSIDE_COMM_CENTER_JDG://Player is outside Comm Center--restart rain sounds { players_location = BY_COMM_CENTER; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_ON_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_INSIDE_TUNNEL_JDG://Player is inside TUNNEL leading to tailgun run--stop rain sounds { players_location = INSIDE_TUNNEL; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_OFF_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_OUTSIDE_TUNNEL_JDG://Player is outside TUNNEL--restart rain sounds { players_location = BY_TUNNEL; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_ON_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_INSIDE_WATERFALL_JDG://Player is inside WATERFALL cave--stop rain sounds { players_location = INSIDE_WATERFALL; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_OFF_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_OUTSIDE_WATERFALL_JDG://Player is outside WATERFALL cave--restart rain sounds { players_location = BY_WATERFALL; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_TURN_ON_OUTSIDE_AMBIENTS_JDG, 0 ); } break; case M01_PLAYER_IS_IN_HON_GRUNT_LEVEL_JDG://Player is entering Grunt level--cue actors { player_has_reached_grunt_level = true; if ((hand_of_nod_state != DESTROYED) && (first_time_in_hon_gruntlevel == true)) { first_time_in_hon_gruntlevel = false; GameObject * honCafeteriaGuy01 = Commands->Find_Object ( M01_HON_CAFETERIA_EATING_GUY_ID ); if (honCafeteriaGuy01 != NULL) { Commands->Send_Custom_Event( obj, honCafeteriaGuy01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honCafeteriaGuy02 = Commands->Find_Object ( M01_HON_CAFETERIA_WALKING_GUY_ID ); if (honCafeteriaGuy02 != NULL) { Commands->Send_Custom_Event( obj, honCafeteriaGuy02, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honJudoGuy01 = Commands->Find_Object ( M01_HON_CAFETERIA_JUDO_GUY_ID ); if (honJudoGuy01 != NULL) { Commands->Send_Custom_Event( obj, honJudoGuy01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honDormGuy01 = Commands->Find_Object ( M01_HON_DORMROOM_MINIGUNNER_ID ); if (honDormGuy01 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honDormGuy02 = Commands->Find_Object ( M01_HON_DORMROOM_ROCKET_GUY_ID ); if (honDormGuy02 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy02, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honDormGuy03 = Commands->Find_Object ( M01_HON_DORMROOM_CHEM_GUY_ID ); if (honDormGuy03 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy03, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honDormGuy04 = Commands->Find_Object ( M01_HON_DORMROOM_FLAME_GUY_ID ); if (honDormGuy04 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy04, 0, M01_START_ACTING_JDG, 0 ); } GameObject * honDormGuy05 = Commands->Find_Object ( M01_HON_DORMROOM_CRAPPER_ID ); if (honDormGuy05 != NULL) { Commands->Send_Custom_Event( obj, honDormGuy05, 0, M01_START_ACTING_JDG, 0 ); } } } break; case M01_PLAYER_IS_IN_HON_DOJO_JDG://Player is entering DOJO--cue actors { if ((hand_of_nod_state != DESTROYED) && (first_time_in_hon_dojolevel == true)) { first_time_in_hon_dojolevel = false; if (Commands->Find_Object ( M01_HON_DOJO_SENSEI_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_SENSEI_JDG ), 0, M01_START_ACTING_JDG, 0 ); } } } break; case M01_HON_SAMSITE_HAS_BEEN_DESTROYED_JDG://hand of nod sam site has been destroyed--duh! { //Commands->Set_Objective_Status( M01_HON_SAM_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); GameObject * handOfNod = Commands->Find_Object ( M01_HAND_OF_NOD_JDG ); float handOfNodHealth = Commands->Get_Health ( handOfNod ); if (handOfNodHealth > 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_REINFORCEMENTS_JDG, 3 ); float delayTimer_A = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_HON_REINFORCEMENTS_A_JDG, delayTimer_A ); float delayTimer_B = Commands->Get_Random ( 2, 4 ); Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_HON_REINFORCEMENTS_B_JDG, delayTimer_B ); } } break; case M01_COMMCENTER_SAMSITE_HAS_BEEN_DESTROYED_JDG://Comm Center sam site has been destroyed--duh! { commcenter_sam_destroyed = true; if (commcenter_sam_objective_active == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_PASS_COMM_SAM_OBJECTIVE_JDG, 0 ); } if (player_has_unlocked_pen == true) { unlocked_gate_conv = Commands->Create_Conversation( "M01_Remove_Unlock_Gate_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, unlocked_gate_conv, false, false ); Commands->Start_Conversation( unlocked_gate_conv, unlocked_gate_conv ); Commands->Monitor_Conversation( obj, unlocked_gate_conv ); } //Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_REINFORCEMENTS_JDG, 5 ); Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_COMMCENTER_REINFORCEMENTS_JDG, 10 ); } break; case M01_ANNOUNCE_AIRSTRIKE_JDG://EVA announces incoming airstrike { Commands->Create_Sound ( "00-N036E", Vector3 (0,0,0), obj); } break; case M01_ANNOUNCE_REINFORCEMENTS_JDG://EVA announces incoming reinforcements { Commands->Create_Sound ( "00-N180E", Vector3 (0,0,0), obj); } break; case M01_SEND_COMMCENTER_REINFORCEMENTS_JDG://Starting Elie drop off animation at Comm Center { GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-296.388f, 497.455f, 29.122f)); Commands->Set_Facing(chinook_obj1, -130.00f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_GDI_CommCenter_TroopDrop.txt"); } break; case M01_SEND_HON_REINFORCEMENTS_A_JDG://Starting Elie drop off animation at Hand of Nod { GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-147.1f, 558.8f, 4.4f)); Commands->Set_Facing(chinook_obj1, -130.00f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_GDI_HON_TroopDrop01a.txt"); } break; case M01_SEND_HON_REINFORCEMENTS_B_JDG://Starting Elie drop off animation at Hand of Nod { GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-154.679f, 519.009f, 4.97f)); Commands->Set_Facing(chinook_obj1, 130.00f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_GDI_HON_TroopDrop01b.txt"); } break; case M01_HON_CHINOOK_GUY_HAS_BEEN_KILLED_JDG://a reinforcement guy's been killed--spawn more if needed { m01_hon_chinook_guys_killed++; if (m01_hon_chinook_guys_killed == 3) { Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_REINFORCEMENTS_JDG, 3 ); float pick_a_chinook = Commands->Get_Random ( 0.5f, 2.5f ); if (pick_a_chinook >= 0.5 && pick_a_chinook < 1.5) { float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_HON_REINFORCEMENTS_A_JDG, delayTimer ); } else { float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_HON_REINFORCEMENTS_B_JDG, delayTimer ); } } } break; case M01_PLAYER_IS_APPROACHING_CHURCH_JDG://cue church actors { if (m01_bridgeWeather_is_Set == false) { m01_bridgeWeather_is_Set = true; //Commands->Set_Clouds (0.75f, 0.75f, 30); Commands->Set_Wind (60, 3.0f, 0.5f, 15); Commands->Set_Rain (0.75f, 30, false); Commands->Set_Lightning (0.5f, 0.25f, 0.75f, 10, 0.33f, 5); Vector3 spawnLocation (-98.937f, 380.721f, 20.022f); GameObject * harvester = Commands->Create_Object ( "Nod_Harvester", spawnLocation ); Commands->Attach_Script(harvester, "M01_HarvesterScript_New_JDG", ""); GameObject * chemGuy01 = Commands->Find_Object ( 103270 ); if (chemGuy01 != NULL) { Commands->Send_Custom_Event( obj, chemGuy01, 0, M01_START_ACTING_JDG, 5 ); } } int church_upadate = Commands->Create_Conversation( "M01_Add_Church_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, church_upadate, false, false ); //Commands->Join_Conversation( STAR, church_upadate, false, false ); Commands->Start_Conversation( church_upadate, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_CHURCH_OBJECTIVE_JDG, 8 ); GameObject * loveshackGuard = Commands->Find_Object ( M01_CHURCH_LOVESHACK_MINIGUNNER_ID ); if (loveshackGuard != NULL) { Commands->Send_Custom_Event( obj, loveshackGuard, 0, M01_START_ACTING_JDG, 0 ); } GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); if (loveshackNun != NULL) { Commands->Send_Custom_Event( obj, loveshackNun, 0, M01_START_ACTING_JDG, 0 ); } GameObject * exteriorGuard = Commands->Find_Object ( M01_CHURCH_EXTERIOR_MINIGUNNER_ID ); if (exteriorGuard != NULL) { Commands->Send_Custom_Event( obj, exteriorGuard, 0, M01_START_ACTING_JDG, 0 ); } GameObject * balconyGuard = Commands->Find_Object ( M01_CHURCH_BALCONY_MINIGUNNER_ID ); if (balconyGuard != NULL) { Commands->Send_Custom_Event( obj, balconyGuard, 0, M01_START_ACTING_JDG, 0 ); } GameObject * rectoryGuard = Commands->Find_Object ( M01_CHURCH_GUARD_MINIGUNNER_ID ); if (rectoryGuard != NULL) { Commands->Send_Custom_Event( obj, rectoryGuard, 0, M01_START_ACTING_JDG, 0 ); } GameObject * churchNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); if (churchNun != NULL) { Commands->Send_Custom_Event( obj, churchNun, 0, M01_START_ACTING_JDG, 0 ); } GameObject * churchPriest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if (churchPriest != NULL) { Commands->Send_Custom_Event( obj, churchPriest, 0, M01_START_ACTING_JDG, 0 ); } } break; case M01_ADD_CHURCH_OBJECTIVE_JDG://Loveshack guard is dead--let nun know { Commands->Add_Objective( M01_CHURCH_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_05, NULL, IDS_Enc_Obj_Secondary_M01_05 ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_CHURCH_OBJECTIVE_JDG, 0 ); } GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); if (loveshackNun != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( loveshackNun, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( loveshackNun, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } GameObject * churchNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); if (churchNun != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( churchNun, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( churchNun, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } GameObject * churchPriest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if (churchPriest != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( churchPriest, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( churchPriest, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } } break; case M01_CLEAR_FIRST_NOD_COMMANDER_PASS_JDG://guard tower commander is destroyed--clear objective { Commands->Set_Objective_Status( M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); firstNodCommanderKilled = true; } break; case M01_CLEAR_HON_OBJECTIVE_PASS_JDG://HON is destroyed--clear objective { Commands->Set_Objective_Status( M01_HON_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); } break; case M01_CLEAR_CHURCH_OBJECTIVE_PASS_JDG://player has rescued clergy { Commands->Set_Objective_Status( M01_CHURCH_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); } break; case M01_CLEAR_CHURCH_OBJECTIVE_FAIL_JDG://player has rescued clergy { Commands->Set_Objective_Status( M01_CHURCH_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } break; case M01_LOVESHACK_GUARD_IS_DEAD_JDG://Loveshack guard is dead--let nun know { loveshack_guard_is_dead = true; GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); if (loveshackNun != NULL) { float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, loveshackNun, 0, M01_LOVESHACK_GUARD_IS_DEAD_JDG, delayTimer ); } if ((loveshack_guard_is_dead == true) && (church_guard_is_dead == true) && (church_pickup_chinook_is_on_its_way == false)) { GameObject * churchEvacController = Commands->Find_Object ( 103394 ); if (churchEvacController != NULL) { Commands->Send_Custom_Event( obj, churchEvacController, 0, M01_START_ACTING_JDG, 3 );//giving clearance to havoc exit zone for conversation } church_pickup_chinook_is_on_its_way = true; } } break; case M01_CHURCH_GUARD_IS_DEAD_JDG://inner guard is dead--let nuns & prist know { church_guard_is_dead = true; GameObject * churchNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); if (churchNun != NULL) { float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, churchNun, 0, M01_CHURCH_GUARD_IS_DEAD_JDG, delayTimer ); } GameObject * churchPriest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if (churchPriest != NULL) { float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, churchPriest, 0, M01_CHURCH_GUARD_IS_DEAD_JDG, delayTimer ); } if ((loveshack_guard_is_dead == true) && (church_guard_is_dead == true) && (church_pickup_chinook_is_on_its_way == false)) { church_pickup_chinook_is_on_its_way = true; GameObject * churchEvacController = Commands->Find_Object ( 103394 ); if (churchEvacController != NULL) { Commands->Send_Custom_Event( obj, churchEvacController, 0, M01_START_ACTING_JDG, 3 );//giving clearance to havoc exit zone for conversation } } } break; case M01_CHURCH_CLERGY_HAS_BOARDED_JDG://when all clergy have boarded--tell chinook to take off { if (Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ) || (Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID )) || (Commands->Find_Object ( m01_church_interior_nun02_ID )) || (Commands->Find_Object ( M01_CHURCH_PRIEST_ID ))) { Commands->Send_Custom_Event( obj, obj, 0, M01_CHURCH_CLERGY_HAS_BOARDED_JDG, 2 ); } else { if ((clergy_are_boarding == false)) { clergy_are_boarding = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_CHURCH_OBJECTIVE_PASS_JDG, 2 ); } } } break; case M01_CARD_CARRIER_HAS_BEEN_KILLED_JDG://a card carrier has been killed--drop necessary card { bool playerHasLevel01KeyCard = Commands->Has_Key( STAR, 1 );; bool playerHasLevel02KeyCard = Commands->Has_Key( STAR, 2 );; bool playerHasLevel03KeyCard = Commands->Has_Key( STAR, 3 );; if (playerHasLevel01KeyCard == false) { Vector3 spawn_location = Commands->Get_Position ( sender ); spawn_location.Z = spawn_location.Z + 0.75f; GameObject * keycard01 = Commands->Create_Object ( "Level_01_Keycard", spawn_location ); Commands->Attach_Script(keycard01, "M01_KeyCard01_Script_JDG", ""); } else if (playerHasLevel02KeyCard == false) { Vector3 spawn_location = Commands->Get_Position ( sender ); spawn_location.Z = spawn_location.Z + 0.75f; Commands->Create_Object ( "Level_02_Keycard", spawn_location ); } else if (playerHasLevel03KeyCard == false) { Vector3 spawn_location = Commands->Get_Position ( sender ); spawn_location.Z = spawn_location.Z + 0.75f; Commands->Create_Object ( "Level_03_Keycard", spawn_location ); } else { Vector3 spawn_location = Commands->Get_Position ( sender ); spawn_location.Z = spawn_location.Z + 0.75f; Commands->Create_Object ( "POW_Health_100", spawn_location ); } } break; case M01_GDI_GUY_HAS_BEEN_POKED_JDG://player has poked a GDI soldier--if player is alone assign escort { int poked_guys_ID = Commands->Get_ID ( sender ); if (player_has_an_escort == false) { Commands->Send_Custom_Event( obj, sender, 0, M01_PLEASE_START_ESCORTING_PLAYER_JDG, 0 ); players_escorts_ID = poked_guys_ID; player_has_an_escort = true; } else if (player_has_an_escort == true) { if (poked_guys_ID == players_escorts_ID)//this guy is escorting player--tell him to hold position { Commands->Send_Custom_Event( obj, sender, 0, M01_PLEASE_STOP_ESCORTING_PLAYER_JDG, 0 ); player_has_an_escort = false; } } } break; case M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG://player's escort has been killed--reset escort parameters { player_has_an_escort = false; } break; case M01_PLAYER_IS_ATTACKING_ME_JDG://if player is being escorted--tell escort who havoc's target is { if (player_has_an_escort == true) { havocs_targets_ID = Commands->Get_ID ( sender ); float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( players_escorts_ID ), M01_PLAYER_IS_ATTACKING_ME_JDG, havocs_targets_ID, delayTimer ); } } break; case M01_PLAYER_IS_LEAVING_CHURCH_01_JDG://if havoc has escort--tell them to go somewhere else { if (player_has_an_escort == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( players_escorts_ID ), 0, M01_PLAYER_IS_LEAVING_CHURCH_01_JDG, 0 ); } } break; case M01_PLAYER_IS_LEAVING_CHURCH_02_JDG://if havoc has escort--tell them to go somewhere else { if (player_has_an_escort == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( players_escorts_ID ), 0, M01_PLAYER_IS_LEAVING_CHURCH_02_JDG, 0 ); } } break; case M01_PLAYER_IS_LEAVING_HON_01_JDG://if havoc has escort--tell them to go somewhere else { if (player_has_an_escort == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( players_escorts_ID ), 0, M01_PLAYER_IS_LEAVING_HON_01_JDG, 0 ); } } break; case M01_PLAYER_IS_LEAVING_HON_02_JDG://if havoc has escort--tell them to go somewhere else { if (player_has_an_escort == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( players_escorts_ID ), 0, M01_PLAYER_IS_LEAVING_HON_02_JDG, 0 ); } } break; case M01_PLAYER_IS_CROSSING_THE_BRIDGE_JDG://havoc is crossing bridge for first time--cue driveby actors { if (m01_bridgeWeather_is_Set == false) { m01_bridgeWeather_is_Set = true; //Commands->Set_Clouds (0.75f, 0.75f, 30); Commands->Set_Wind (60, 3.0f, 0.5f, 15); Commands->Set_Rain (0.75f, 30, false); Commands->Set_Lightning (0.5f, 0.25f, 0.75f, 10, 0.33f, 5); Vector3 spawnLocation (-98.937f, 380.721f, 20.022f); GameObject * harvester = Commands->Create_Object ( "Nod_Harvester", spawnLocation ); Commands->Attach_Script(harvester, "M01_HarvesterScript_New_JDG", ""); GameObject * chemGuy01 = Commands->Find_Object ( 103270 ); if (chemGuy01 != NULL) { Commands->Send_Custom_Event( obj, chemGuy01, 0, M01_START_ACTING_JDG, 5 ); } } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_CHURCH_CHINOOK_JDG, 10 ); GameObject * churchAreaCommander = Commands->Find_Object ( M01_CHURCHAREA_NOD_COMMANDER_JDG ); if (churchAreaCommander != NULL) { Commands->Send_Custom_Event( obj, churchAreaCommander, 0, M01_START_ACTING_JDG, 0 ); } } break; case M01_PLAYER_IS_CROSSING_THE_BRIDGE_VIA_CAVE_JDG://havoc is crossing bridge for first time--cue actors driveby actors { if (m01_bridgeWeather_is_Set == false) { m01_bridgeWeather_is_Set = true; //Commands->Set_Clouds (0.75f, 0.75f, 30); Commands->Set_Wind (60, 3.0f, 0.5f, 15); Commands->Set_Rain (0.75f, 30, false); Commands->Set_Lightning (0.5f, 0.25f, 0.75f, 10, 0.33f, 5); Vector3 spawnLocation (-98.937f, 380.721f, 20.022f); GameObject * harvester = Commands->Create_Object ( "Nod_Harvester", spawnLocation ); Commands->Attach_Script(harvester, "M01_HarvesterScript_New_JDG", ""); GameObject * chemGuy01 = Commands->Find_Object ( 103270 ); if (chemGuy01 != NULL) { Commands->Send_Custom_Event( obj, chemGuy01, 0, M01_START_ACTING_JDG, 5 ); } } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_CHURCH_CHINOOK_JDG, 10 ); GameObject * churchAreaCommander = Commands->Find_Object ( M01_CHURCHAREA_NOD_COMMANDER_JDG ); if (churchAreaCommander != NULL) { Commands->Send_Custom_Event( obj, churchAreaCommander, 0, M01_START_ACTING_JDG, 0 ); } } break; case M01_SPAWN_TIB_CAVE_HELICOPTER_JDG://player is in tib cave--spawn surprise helicopter { GameObject * m01_tiberium_cave_helicopter = Commands->Create_Object ( "NOD_Apache", Vector3(-40.708f, 375.387f, 30.275f) ); Commands->Set_Facing ( m01_tiberium_cave_helicopter, -30 ); Commands->Attach_Script(m01_tiberium_cave_helicopter, "M01_Tiberium_Cave_Helicopter_JDG", ""); } break; case M01_ANNOUNCE_HON_OBJECTIVE_JDG://player is approaching hand of nod--give objective { if (m01_nodBase_weather_is_Set == false) { m01_nodBase_weather_is_Set = true; //Commands->Set_Clouds (1.0f, 1.0f, 15); Commands->Set_Wind (60, 5.0f, 1.0f, 15); Commands->Set_Rain (1.0f, 15, false); Commands->Set_Lightning (0.5f, 0, 0.25f, 0, 1, 15); } int hand_of_nod_conv = Commands->Create_Conversation( "M01_Add_HON_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, hand_of_nod_conv, false, false ); Commands->Start_Conversation( hand_of_nod_conv, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_HON_OBJECTIVE_JDG, 10 ); } break; case M01_ADD_HON_OBJECTIVE_JDG://adding objective { Commands->Add_Objective( M01_HON_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_07, NULL, IDS_Enc_Obj_Secondary_M01_07 ); Commands->Set_Objective_Radar_Blip( M01_HON_OBJECTIVE_JDG, Vector3 (-179.3f, 541.9f, 3.518f) ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_HON_OBJECTIVE_JDG, 0 ); } } break; case M01_KILL_THE_COMM_JDG://apply damage to COMM CENTER { if (comm_center_state != DESTROYED) { Commands->Apply_Damage( Commands->Find_Object ( M01_COMM_CENTER_JDG ), 100000000, "BlamoKiller", obj ); } } break; case M01_KILL_THE_HON_JDG://apply damage to HON { if (hand_of_nod_state != DESTROYED) { Commands->Apply_Damage( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ), 100000000, "BlamoKiller", obj ); } } break; case M01_PLAYER_HAS_POKED_COMM_CENTER_PCT_JDG: { if (player_has_unlocked_pen == false)//player is poking PCT--play EVA messages { eva_comm_center_line_01 = Commands->Create_Sound ( "00-N000E", Vector3 (0,0,0), obj );//accessing Commands->Monitor_Sound ( obj, eva_comm_center_line_01 ); //Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_UNLOCK_GATE_OBJECTIVE_JDG, 0 ); //player_has_unlocked_pen = true; } } break; case M01_PLAYER_HAS_POKED_PEN_GATE_JDG: { if (player_has_unlocked_pen != true) { if (first_time_poking_gate_lock == true) { first_time_poking_gate_lock = false; int prisoner_conv = Commands->Create_Conversation( "M01_Add_Unlock_Gate_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, prisoner_conv, false, false ); Commands->Start_Conversation( prisoner_conv, prisoner_conv ); } else { Commands->Create_Sound ( "00-N008E", Vector3 (0,0,0), obj );//access denied } } else if (gate_objective_done == false) { gate_objective_done = true; Commands->Set_Objective_Status( M01_OPEN_THE_GATE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Static_Anim_Phys_Goto_Last_Frame (M01_COMMCENTER_DETENTION_GATE_JDG, NULL ); //Vector3 gatePosition = Commands->Get_Position ( Commands->Find_Object ( M01_COMMCENTER_DETENTION_GATE_JDG ) ); //Vector3 gatePosition = Commands->Get_Position ( STAR ); Vector3 gatePosition (-313.060f, 575.220f, 28.513f); Commands->Create_Sound ( "Gate_Down_01", gatePosition, obj ); if (Commands->Find_Object ( M01_COMMCENTER_SAM_JDG )) { Commands->Create_Logical_Sound ( obj, M01_DETENTION_GATE_IS_DOWN_JDG, Vector3 (-315.383f, 572.805f, 27.623f), 50.0f ); Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_COMMCENTER_SAM_OBJECTIVE_JDG, 0 ); } else { Commands->Create_Logical_Sound ( obj, M01_DETENTION_GATE_DOWN_SAM_DEAD_JDG, Vector3 (-315.383f, 572.805f, 27.623f), 50.0f ); } if (prisoners_are_freed == false) { Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_PRISONERS_PASS_JDG, 0 ); prisoners_are_freed = true; } } } break; case M01_ANNOUNCE_COMMCENTER_SAM_OBJECTIVE_JDG: { int comm_sam_conv = Commands->Create_Conversation( "M01_Add_Comm_SAM_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, comm_sam_conv, false, false ); //Commands->Join_Conversation( STAR, comm_sam_conv, false, false ); Commands->Start_Conversation( comm_sam_conv, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_COMM_SAM_OBJECTIVE_JDG, 6 ); commcenter_sam_objective_active = true; } break; case M01_ADD_COMM_SAM_OBJECTIVE_JDG: { GameObject * commSamSite = Commands->Find_Object ( M01_COMMCENTER_SAM_JDG ); if (commSamSite != NULL) { Commands->Add_Objective( M01_COMM_SAM_OBJECTIVE_JDG, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M01_04, NULL, IDS_Enc_Obj_Primary_M01_04 ); Commands->Set_Objective_Radar_Blip_Object( M01_COMM_SAM_OBJECTIVE_JDG, commSamSite ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_COMM_SAM_OBJECTIVE_JDG, 0 ); } } } break; case M01_ANNOUNCE_UNLOCK_GATE_OBJECTIVE_JDG: { int unlock_gate_conv = Commands->Create_Conversation( "M01_Add_Unlock_Gate_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, unlock_gate_conv, false, false ); Commands->Start_Conversation( unlock_gate_conv, 0 ); } break; case M01_ADD_UNLOCK_GATE_OBJECTIVE_JDG: { Vector3 pogMarker (-296.505f, 521.090f, 27.090f); Commands->Add_Objective( M01_UNLOCK_GATE_OBJECTIVE_JDG, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M01_02, NULL, IDS_Enc_Obj_Primary_M01_02 ); Commands->Set_Objective_HUD_Info_Position( M01_UNLOCK_GATE_OBJECTIVE_JDG, 93, "POG_M01_1_02.tga", IDS_POG_HACK, pogMarker ); unlock_gate_objective_active = true; //Vector3 green (0,1,0); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Primary_M01_02, TEXT_COLOR_OBJECTIVE_PRIMARY ); GameObject * invisibleCrate = Commands->Find_Object ( 107809 ); if (invisibleCrate != NULL) { Commands->Send_Custom_Event( obj, invisibleCrate, 0, M01_COMM_SAM_OBJECTIVE_JDG, 0 ); } } break; case M01_CLEAR_UNLOCK_GATE_OBJECTIVE_JDG: { if (commcenter_sam_destroyed == true) { unlocked_gate_conv = Commands->Create_Conversation( "M01_Remove_Unlock_Gate_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, unlocked_gate_conv, false, false ); Commands->Start_Conversation( unlocked_gate_conv, unlocked_gate_conv ); Commands->Monitor_Conversation( obj, unlocked_gate_conv ); } else if (commcenter_sam_destroyed == false)// { Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_COMMCENTER_SAM_OBJECTIVE_JDG, 0 ); } if (unlock_gate_objective_active == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_PASS_UNLOCK_GATE_OBJECTIVE_JDG, 6 ); } } break; case M01_PASS_UNLOCK_GATE_OBJECTIVE_JDG: { Commands->Set_Objective_Status( M01_UNLOCK_GATE_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); } break; case M01_PASS_COMM_SAM_OBJECTIVE_JDG: { Commands->Set_Objective_Status( M01_COMM_SAM_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); commcenter_sam_objective_active = false; if (prisoners_are_freed == true) { Commands->Create_Logical_Sound ( obj, M01_DETENTION_GATE_DOWN_SAM_DEAD_JDG, Vector3 (-315.383f, 572.805f, 27.623f), 50.0f ); Commands->Send_Custom_Event( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 60 ); } } break; case M01_SCRAMBLE_THE_RADAR_JDG: { if (players_first_time_by_commcenter == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103099 ), 0, M01_START_ACTING_JDG, 0 );//telling propaganda to start up players_first_time_by_commcenter = false; int radar_conv = Commands->Create_Conversation( "M01_Radar_Scrambled_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, radar_conv, false, false, false ); Commands->Join_Conversation( NULL, radar_conv, false, false, false ); Commands->Start_Conversation( radar_conv, radar_conv ); } if ((radar_is_scrambled == false) && (comm_center_state != DESTROYED) ) { radar_is_scrambled = true; Commands->Enable_Radar ( false ); } } break; case M01_UNSCRAMBLE_THE_RADAR_JDG: { if (radar_is_scrambled == true) { Commands->Enable_Radar ( true); radar_is_scrambled = false; } } break; case M01_ANNOUNCE_PRISONER_OBJECTIVE_JDG: { int prisoner_conv = Commands->Create_Conversation( "M01_Add_Unlock_Gate_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, prisoner_conv, false, false ); Commands->Start_Conversation( prisoner_conv, prisoner_conv ); Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_UNLOCK_GATE_OBJECTIVE_JDG, 10 ); Commands->Set_Objective_Status( M01_PRISONER_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); } break; case M01_CLEAR_PRISONERS_PASS_JDG://prisoners have been freed { Commands->Send_Custom_Event( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 0 ); } break; case M01_DO_END_MISSION_CHECK_JDG://see if any primary objectives are active { if ( (commcenter_sam_objective_active != true) && (prisoners_are_freed == true) ) { //Commands->Set_Clouds (0, 0, 5); Commands->Set_Wind (0, 0, 0, 5); Commands->Set_Rain (0, 5, false); Commands->Set_Lightning (0, 0, 0, 0, 0, 5); if (final_conv_played == false) { final_conv_played = true; //GameObject * evacController01 = Commands->Find_Object ( 103380 ); //GameObject * evacController02 = Commands->Find_Object ( 103381 ); //if (evacController01 != NULL) //{ // Commands->Send_Custom_Event( obj, evacController01, 0, M01_START_ACTING_JDG, 0 ); //} //if (evacController02 != NULL) //{ // Commands->Send_Custom_Event( obj, evacController02, 0, M01_START_ACTING_JDG, 0 ); //} GameObject * detentionPenCiv01 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_01_JDG ); GameObject * detentionPenCiv02 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_02_JDG ); GameObject * detentionPenCiv03 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_03_JDG ); GameObject * detentionPenGDI01 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_01_JDG ); GameObject * detentionPenGDI02 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_02_JDG ); GameObject * detentionPenGDI03 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_03_JDG ); if (detentionPenCiv01 != NULL) { Commands->Destroy_Object ( detentionPenCiv01 ); } if (detentionPenCiv02 != NULL) { Commands->Destroy_Object ( detentionPenCiv02 ); } if (detentionPenCiv03 != NULL) { Commands->Destroy_Object ( detentionPenCiv03 ); } if (detentionPenGDI01 != NULL) { Commands->Destroy_Object ( detentionPenGDI01 ); } if (detentionPenGDI02 != NULL) { Commands->Destroy_Object ( detentionPenGDI02 ); } if (detentionPenGDI03 != NULL) { Commands->Destroy_Object ( detentionPenGDI03 ); } Vector3 newPosition (51.023f, -35.918f, 0.246f); Commands->Set_Position ( STAR, newPosition ); Commands->Set_Is_Rendered( obj, false ); GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller1, "Test_Cinematic", "X1Z_Finale.txt"); Commands->Send_Custom_Event( obj, obj, 0, M01_END_MISSION_PASS_JDG, 20 ); } } } break; case M01_END_MISSION_PASS_JDG://see if any primary objectives are active { GameObject * propagandaController = Commands->Find_Object ( 103099 ); if (propagandaController != NULL) { Commands->Send_Custom_Event( obj, propagandaController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } Commands->Mission_Complete ( true ); } break; case M01_SPAWN_WHACK_A_MOLE_GUY_JDG: { GameObject * m01_whack_a_mole_guy = Commands->Create_Object ( "Nod_MiniGunner_1Off", Vector3(-198.088f, 525.828f, 10.035f) ); Commands->Attach_Script(m01_whack_a_mole_guy, "M01_Whack_A_Mole_Minigunner_JDG", ""); m01_whack_a_mole_guy_ID = Commands->Get_ID ( m01_whack_a_mole_guy ); } break; case M01_CHANGE_WHACK_A_MOLE_GUY_JDG: { GameObject * whackAmole = Commands->Find_Object ( m01_whack_a_mole_guy_ID ); if (whackAmole != NULL) { Commands->Send_Custom_Event( obj, whackAmole, 0, M01_CHANGE_WHACK_A_MOLE_GUY_JDG, 0 ); } } break; case M01_HON_SPAWNS_MINIGUNNER_JDG: { if (hand_of_nod_state != DESTROYED) { m01_HON_SpawnRate = 21; if (m01_hon_total_spawners_tally <= 6) { if ((m01_hon_spawned_guy_01_alive == false) && (players_location != INSIDE_HAND_OF_NOD)) { GameObject * m01_hon_spawned_guy_01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-212.6f, 541.1f, 4)); Commands->Attach_Script(m01_hon_spawned_guy_01, "M01_HON_Easy_Spawned_Guy_01_JDG", ""); m01_hon_spawned_guy_01_ID = Commands->Get_ID ( m01_hon_spawned_guy_01 ); m01_hon_spawned_guy_01_alive = true; m01_hon_spawners_tally++; m01_hon_total_spawners_tally++; } else if ((m01_hon_spawned_guy_02_alive == false) && (players_location != INSIDE_HAND_OF_NOD)) { GameObject * m01_hon_spawned_guy_02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-217.2f, 540.2f, 4) ); Commands->Attach_Script(m01_hon_spawned_guy_02, "M01_HON_Easy_Spawned_Guy_02_JDG", ""); m01_hon_spawned_guy_02_ID = Commands->Get_ID ( m01_hon_spawned_guy_02 ); m01_hon_spawned_guy_02_alive = true; m01_hon_spawners_tally++; m01_hon_total_spawners_tally++; } else if ((m01_hon_spawned_guy_03_alive == false) && (players_location != INSIDE_HAND_OF_NOD)) { GameObject * m01_hon_spawned_guy_03 = Commands->Create_Object ( "Nod_FlameThrower_0", Vector3(-217.6f, 533.6f, 4)); Commands->Attach_Script(m01_hon_spawned_guy_03, "M01_HON_Easy_Spawned_Guy_03_JDG", ""); m01_hon_spawned_guy_03_ID = Commands->Get_ID ( m01_hon_spawned_guy_03 ); m01_hon_spawned_guy_03_alive = true; m01_hon_spawners_tally++; m01_hon_total_spawners_tally++; } } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNS_MINIGUNNER_JDG, m01_HON_SpawnRate ); } } break; case M01_HON_SPAWNER_IN_POSITION_JDG: { if (m01_hon_spawners_tally == 3) { GameObject * honSpawn01 = Commands->Find_Object ( m01_hon_spawned_guy_01_ID ); if (honSpawn01 != NULL) { Commands->Send_Custom_Event( obj, honSpawn01, 0, M01_HUNT_THE_PLAYER_JDG, 0 ); m01_hon_spawned_guy_01_alive = false; m01_hon_spawned_guy_01_ID = NULL; } GameObject * honSpawn02 = Commands->Find_Object ( m01_hon_spawned_guy_02_ID ); if (honSpawn02 != NULL) { Commands->Send_Custom_Event( obj, honSpawn02, 0, M01_HUNT_THE_PLAYER_JDG, 0 ); m01_hon_spawned_guy_02_alive = false; m01_hon_spawned_guy_02_ID = NULL; } GameObject * honSpawn03 = Commands->Find_Object ( m01_hon_spawned_guy_03_ID ); if (honSpawn03 != NULL) { Commands->Send_Custom_Event( obj, honSpawn03, 0, M01_HUNT_THE_PLAYER_JDG, 0 ); m01_hon_spawned_guy_03_alive = false; m01_hon_spawned_guy_03_ID = NULL; } m01_hon_spawners_tally = 0; } } break; case M01_HON_SPAWNER_01_IS_DEAD_JDG: { m01_hon_spawned_guy_01_alive = false; m01_hon_spawners_tally--; } break; case M01_HON_SPAWNER_02_IS_DEAD_JDG: { m01_hon_spawned_guy_02_alive = false; m01_hon_spawners_tally--; } break; case M01_HON_SPAWNER_03_IS_DEAD_JDG: { m01_hon_spawned_guy_03_alive = false; m01_hon_spawners_tally--; } break; case M01_HON_SPAWNER_IS_DEAD_JDG: { m01_hon_total_spawners_tally--; } break; case M01_CUE_LOVESHACK_NUN_CONVERSATION_JDG: { GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); if (loveshackNun != NULL && (church_guard_is_dead != true)) { if (loveshack_conv_playing == false) { loveshack_conv_playing = true; loveshack_conv = Commands->Create_Conversation( "M01_Locke_ChurchReminder_Conversation", 45, 1000, true); Commands->Join_Conversation( NULL, loveshack_conv, false, false ); //Commands->Join_Conversation( STAR, loveshack_conv, false, false ); Commands->Start_Conversation( loveshack_conv, loveshack_conv ); Commands->Monitor_Conversation( obj, loveshack_conv ); } } } break; case M01_CUE_PRIEST_CONVERSATION_JDG: { GameObject * priest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if (priest != NULL && (loveshack_guard_is_dead != true)) { if (priest_conv_playing == false) { priest_conv_playing = true; priest_conv = Commands->Create_Conversation( "M01_PriestReminder_Conversation", 100, 1000, false); Commands->Join_Conversation( priest, priest_conv, false, true, true ); Commands->Join_Conversation( STAR, priest_conv, false, false, false ); Commands->Start_Conversation( priest_conv, priest_conv ); Commands->Monitor_Conversation( obj, priest_conv ); } } } break; case M01_CUE_INTERIOR_NUN_CONVERSATION_JDG: { GameObject * interiorNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); if (interiorNun != NULL && (loveshack_guard_is_dead != true)) { if (interior_nun_conv_playing == false) { interior_nun_conv_playing = true; interior_nun_conv = Commands->Create_Conversation( "M01_Interior_Nun_Conversation", 100, 1000, false); Commands->Join_Conversation( interiorNun, interior_nun_conv, false, true, true ); Commands->Join_Conversation( STAR, interior_nun_conv, false, false, false); Commands->Start_Conversation( interior_nun_conv, interior_nun_conv); Commands->Monitor_Conversation( obj, interior_nun_conv ); } } } break; case M01_TURRET_HAS_BEEN_DESTROYED_JDG: { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 == NULL) { turret_01_is_dead = true; } GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 == NULL) { turret_02_is_dead = true; } if ((turret_01_is_dead == true) && (turret_02_is_dead == true) ) { Commands->Send_Custom_Event( obj, obj, 0, M01_END_TURRETS_OBJECTIVE_PASS_JDG, 0 ); } } break; case M01_SPAWN_THE_MEDIUM_TANK_JDG: { if (medium_tank_spawned == false) { //Commands->Create_Sound ( "00-N180E", Vector3 (0,0,0), obj); medium_tank_spawned = true; //GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(-85.808f, 125.455f, 3.927f)); //Commands->Set_Facing ( controller1, 180 ); //Commands->Attach_Script(controller1, "Test_Cinematic", "X1I_GDI_Drop_MediumTank.txt"); //GameObject *controller2 = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); //Commands->Attach_Script(controller2, "Test_Cinematic", "X1D_Hover_MTank.txt"); } } break; case M01_ADD_BARN_COMMANDER_OBJECTIVE_JDG: { GameObject * barnCommander = Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ); if (barnCommander != NULL ) { Commands->Add_Objective( M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_01, NULL, IDS_Enc_Obj_Secondary_M01_01 ); Commands->Set_Obj_Radar_Blip_Shape ( barnCommander, RADAR_BLIP_SHAPE_OBJECTIVE ); // Set to -1 to reset default Commands->Set_Obj_Radar_Blip_Color ( barnCommander, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG, 0 ); } if (firstNodCommanderKilled == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_CLEAR_FIRST_NOD_COMMANDER_PASS_JDG, 3 ); } } } break; case M01_PLAYER_APPROACHING_BARN_AREA_JDG: { if (first_time_at_barn == true) { first_time_at_barn = false; GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { Commands->Send_Custom_Event( obj, turret01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { Commands->Send_Custom_Event( obj, turret02, 0, M01_START_ACTING_JDG, 0 ); } GameObject * turretGunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (turretGunboat != NULL) { Commands->Send_Custom_Event( obj, turretGunboat, 0, M01_START_ACTING_JDG, 0 ); } GameObject * turretEngineer = Commands->Find_Object ( M01_TURRETBEACH_ENGINEER_ID ); if (turretEngineer != NULL) { Commands->Send_Custom_Event( obj, turretEngineer, 0, M01_START_ACTING_JDG, 0 ); } Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_TURRETS_OBJECTIVE_JDG, 0 ); GameObject * barnAreaCommander = Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_02_JDG ); if (barnAreaCommander != NULL) { Commands->Send_Custom_Event( obj, barnAreaCommander, 0, M01_START_ACTING_JDG, 5 ); } //Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_BARN_CHINOOK_JDG, 30 ); //Setting new weather values for barn area //Commands->Set_Clouds (0.5f, 0.5f, 120); Commands->Set_Wind (60, 1.0f, 0.5f, 120); Commands->Set_Rain (0.5f, 120, false); } } break; case M01_PLAYER_IS_APPROACHING_TAILGUN_ALLEY_JDG: { GameObject * tailgunCommander = Commands->Find_Object ( M01_TAILGUNAREA_NOD_COMMANDER_JDG); if (tailgunCommander != NULL) { Commands->Send_Custom_Event( obj, tailgunCommander, 0, M01_START_ACTING_JDG, 8 ); } GameObject * artilleryController = Commands->Find_Object ( M01_GDIBASE_ARTILLERY_CONTROLLER_ID); if (artilleryController != NULL) { Commands->Send_Custom_Event( obj, artilleryController, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * lightTank = Commands->Find_Object ( M01_TAILGUNAREA_NOD_LIGHTTANK_JDG); if (lightTank != NULL) { Commands->Send_Custom_Event( obj, lightTank, 0, M01_START_ACTING_JDG, 0 ); } } break; case M01_PLAYER_APPROACHING_GDI_BASE_AREA_JDG: { GameObject * artilleryController = Commands->Find_Object ( M01_GDIBASE_ARTILLERY_CONTROLLER_ID); if (artilleryController != NULL) { Commands->Send_Custom_Event( obj, artilleryController, 0, M01_START_ACTING_JDG, 0 ); } } break; case M01_ANNOUNCE_TURRETS_OBJECTIVE_JDG: { turrets_conv = Commands->Create_Conversation( "M01_Add_Turrets_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, turrets_conv, false, false ); Commands->Join_Conversation( NULL, turrets_conv, false, false ); Commands->Start_Conversation( turrets_conv, turrets_conv ); Commands->Monitor_Conversation( obj, turrets_conv ); } break; case M01_ADD_TURRETS_OBJECTIVE_JDG: { Commands->Add_Objective( M01_TURRETS_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_02, NULL, IDS_Enc_Obj_Secondary_M01_02 ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_TURRETS_OBJECTIVE_JDG, 0 ); } GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( turret01, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( turret01, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( turret02, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( turret02, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } int c4_conv = Commands->Create_Conversation( "M01_Locke_Sending_C4_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, c4_conv, false, false ); Commands->Start_Conversation( c4_conv, c4_conv ); Vector3 airdropPosition (-82.786f, 113.665f, 2.221f); GameObject *controller = Commands->Create_Object("Invisible_Object", airdropPosition); Commands->Attach_Script(controller, "Test_Cinematic", "X1D_GTower_FlareDrop.txt"); } break; case M01_END_TURRETS_OBJECTIVE_FAIL_JDG: { if (turret_objective_over == false) { turret_objective_over = true; Commands->Set_Objective_Status( M01_TURRETS_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } } break; case M01_END_TURRETS_OBJECTIVE_PASS_JDG: { if (turret_objective_over == false) { turret_objective_over = true; GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (gunboat != NULL) { Commands->Send_Custom_Event( obj, gunboat, 0, M01_END_TURRETS_OBJECTIVE_PASS_JDG, 0 ); int turrets_conv_02 = Commands->Create_Conversation( "M01_Remove_Turrets_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, turrets_conv_02, false, false ); Commands->Start_Conversation( turrets_conv_02, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_PASS_TURRETS_OBJECTIVE_JDG, 5 ); } else { //turrets_hummVee_conv = Commands->Create_Conversation( "M01_Locke_GiveHummVee_Conversation", 100, 1000, false); //Commands->Join_Conversation( NULL, turrets_hummVee_conv, false, false ); //Commands->Join_Conversation( STAR, turrets_hummVee_conv, false, false ); //Commands->Start_Conversation( turrets_hummVee_conv, turrets_hummVee_conv ); //Commands->Monitor_Conversation( obj, turrets_hummVee_conv ); Commands->Send_Custom_Event( obj, obj, 0, M01_PASS_TURRETS_OBJECTIVE_JDG, 5 ); } } } break; case M01_PASS_TURRETS_OBJECTIVE_JDG: { Commands->Set_Objective_Status( M01_TURRETS_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SPAWN_THE_MEDIUM_TANK_JDG, 0 ); } break; /*case M01_START_BARN_OBJECTIVE_JDG: { Commands->Send_Custom_Event( obj, obj, 0, M01_ANNOUNCE_BARN_OBJECTIVE_JDG, 0 ); } break; case M01_ANNOUNCE_BARN_OBJECTIVE_JDG: { if (barn_announcement_active == false) { int barn_conv = Commands->Create_Conversation( "M01_Add_Barn_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, barn_conv, false, false ); Commands->Join_Conversation( STAR, barn_conv, false, false ); Commands->Start_Conversation( barn_conv, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_BARN_OBJECTIVE_JDG, 6 ); barn_announcement_active = true; GameObject * barnObjectiveZone = Commands->Find_Object ( M01_BARN_OBJECTIVE_ZONE_ID ); if (barnObjectiveZone != NULL) { Commands->Destroy_Object ( barnObjectiveZone ); } } } break;*/ /*case M01_ADD_BARN_OBJECTIVE_JDG: { if (barn_objective_active == false) { barn_objective_active = true; Commands->Add_Objective( M01_BARN_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_03, NULL, IDS_Enc_Obj_Secondary_M01_03 ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_BARN_OBJECTIVE_JDG, 0 ); } GameObject * barnPrisoner01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); if (barnPrisoner01 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner01, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner01, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } GameObject * barnPrisoner02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); if (barnPrisoner02 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner02, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner02, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } GameObject * barnPrisoner03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if (barnPrisoner03 != NULL) { Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner03, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner03, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); } } } break;*/ case M01_END_BARN_OBJECTIVE_JDG: { if (barn_objective_failed != true && civs_scattered == false) { civs_scattered = true; //Commands->Send_Custom_Event( obj, obj, 0, M01_CHANGE_BARN_OBJECTIVE_JDG, 5 ); GameObject * barnPrisoner01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); if (barnPrisoner01 != NULL) { //Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner01, RADAR_BLIP_SHAPE_OBJECTIVE ); //Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner01, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, barnPrisoner01, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject * barnPrisoner02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); if (barnPrisoner02 != NULL) { //Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner02, RADAR_BLIP_SHAPE_OBJECTIVE ); //Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner02, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, barnPrisoner02, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject * barnPrisoner03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if (barnPrisoner03 != NULL) { //Commands->Set_Obj_Radar_Blip_Shape ( barnPrisoner03, RADAR_BLIP_SHAPE_OBJECTIVE ); //Commands->Set_Obj_Radar_Blip_Color ( barnPrisoner03, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE ); Commands->Send_Custom_Event( obj, barnPrisoner03, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } break; /*case M01_CHANGE_BARN_OBJECTIVE_JDG: { if (barn_objective_failed != true) { int roundupcivs_conv = Commands->Create_Conversation( "M01_Add_Barn_Roundup_Objective", 100, 1000, false); Commands->Join_Conversation( NULL, roundupcivs_conv, false, false ); Commands->Start_Conversation( roundupcivs_conv, roundupcivs_conv ); Commands->Set_Objective_Status( M01_BARN_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Add_Objective( M01_BARN_ROUNDUP_OBJECTIVE_JGD, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_04, NULL, IDS_Enc_Obj_Secondary_M01_04 ); GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_BARN_ROUNDUP_OBJECTIVE_JGD, 0 ); } } } break;*/ case M01_END_BARN_ROUNDUP_OBJECTIVE_JDG: { if (barn_objective_ended == false) { barn_objective_ended = true; /*if (barn_objective_failed == true) { Commands->Set_Objective_Status( M01_BARN_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); Commands->Set_Objective_Status( M01_BARN_ROUNDUP_OBJECTIVE_JGD, OBJECTIVE_STATUS_FAILED ); barnfailed_conv = Commands->Create_Conversation( "M01_Locke_3CivsDead_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, barnfailed_conv, false, false ); Commands->Join_Conversation( STAR, barnfailed_conv, false, false ); Commands->Start_Conversation( barnfailed_conv, barnfailed_conv ); Commands->Monitor_Conversation( obj, barnfailed_conv ); }*/ if (barn_objective_failed != true) { //Commands->Set_Objective_Status( M01_BARN_ROUNDUP_OBJECTIVE_JGD, OBJECTIVE_STATUS_ACCOMPLISHED ); //barnfailed_conv = Commands->Create_Conversation( "M01_AirDrop_Conversation", 100, 1000, false); //Commands->Join_Conversation( NULL, barnfailed_conv, false, false ); //Commands->Start_Conversation( barnfailed_conv, barnfailed_conv ); //Commands->Monitor_Conversation( obj, barnfailed_conv ); } } } break; case M01_TURRET_BEACH_ENGINEER_IS_DEAD_JDG: { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if ( (turret01 != NULL) || (turret02 != NULL) ) { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj );//enemy aircraft detected GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-93.689f, 52.850f, -1.95f)); Commands->Set_Facing(chinook_obj1, 60.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_Nod_TurretBeach_TroopDrop.txt"); } } break; case M01_CUE_BILLYS_CONVERSATION_JDG: { GameObject * barnPrisoner02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); if ( barnPrisoner02 != NULL && barn_prisoner_02_is_dead != true) //this is billy { billy_conv = Commands->Create_Conversation( "M01_Billys_Conversation", 100, 1000, true); Commands->Join_Conversation( barnPrisoner02, billy_conv, true, true ); Commands->Join_Conversation( STAR, billy_conv, false, true, true ); Commands->Join_Conversation( NULL, billy_conv, false, false ); Commands->Start_Conversation( billy_conv, billy_conv ); Commands->Monitor_Conversation( obj, billy_conv ); } } break; case M01_CUE_BABUSHKA_CONVERSATION_JDG: { GameObject * barnPrisoner01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); GameObject * barnPrisoner03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if ( barnPrisoner01 != NULL && barn_prisoner_01_is_dead != true) //this is babushka { babushka_conv = Commands->Create_Conversation( "M01_Barn_Babushka_Conversation", 100, 1000, true); Commands->Join_Conversation( barnPrisoner01, babushka_conv, true, true, true ); Commands->Join_Conversation( STAR, babushka_conv, false, false, false ); Commands->Join_Conversation( NULL, babushka_conv, false, false, false ); Commands->Start_Conversation( babushka_conv, babushka_conv ); Commands->Monitor_Conversation( obj, babushka_conv ); Commands->Send_Custom_Event( obj, barnPrisoner01, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); if ( barnPrisoner03 != NULL && barn_prisoner_03_is_dead != true) //this is babushka { Commands->Send_Custom_Event( obj, barnPrisoner03, 0, M01_MODIFY_YOUR_ACTION_11_JDG, 0 ); } } else if ( barnPrisoner03 != NULL && barn_prisoner_03_is_dead != true) //this is babushka { civ3_conv = Commands->Create_Conversation( "M01_Civ03_Conversation", 100, 1000, true); Commands->Join_Conversation( barnPrisoner03, civ3_conv, true, true, true ); Commands->Join_Conversation( STAR, civ3_conv, false, false, false ); Commands->Join_Conversation( NULL, civ3_conv, false, true, true ); Commands->Start_Conversation( civ3_conv, civ3_conv ); Commands->Monitor_Conversation( obj, civ3_conv ); } } break; case M01_BARN_GUARD_IS_DEAD_JDG: { dead_barn_guard_tally++; if (dead_barn_guard_tally >= 4) { Commands->Send_Custom_Event( obj, obj, 0, M01_END_BARN_OBJECTIVE_JDG, 0 ); } } break; case M01_CIVILIAN_KILLED_JDG: { /*if (sender == Commands->Find_Object ( M01_BARN_PRISONER_01_ID ))//this is babushka { barn_prisoner_01_is_dead = true; dead_barn_prisoner_tally++; } else if (sender == Commands->Find_Object ( M01_BARN_PRISONER_02_ID ))//this is billy { barn_prisoner_02_is_dead = true; dead_barn_prisoner_tally++; } else if (sender == Commands->Find_Object ( M01_BARN_PRISONER_03_ID ))//this is pierre { barn_prisoner_03_is_dead = true; dead_barn_prisoner_tally++; } if (dead_barn_prisoner_tally > 2) { barn_objective_failed = true; Commands->Send_Custom_Event( obj, obj, 0, M01_END_BARN_ROUNDUP_OBJECTIVE_JDG, 0 ); }*/ } break; case M01_KILL_THE_GDI_POWER_PLANT_JDG: { Commands->Debug_Message ( "***************************Starting the GDI base encounter\n" ); if (missionStart == true) { missionStart = false; } //GameObject * crashed_orca = Commands->Find_Object ( 103121 ); //if (crashed_orca != NULL) //{ // Commands->Send_Custom_Event( obj, crashed_orca, 0, M01_START_ACTING_JDG, 0 ); //} } break; case M01_DO_DAMAGE_CHECK_JDG://a building has been damaged--take appropriate action { if (sender == Commands->Find_Object(M01_HAND_OF_NOD_JDG))//hand of nod under attack--refinery okay--send engineer { GameObject * honEngineer = Commands->Find_Object ( M01_HON_REPAIR_ENGINEER_ID ); if (honEngineer != NULL) { Commands->Send_Custom_Event( obj, honEngineer, 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } else if (sender == Commands->Find_Object(M01_COMM_CENTER_JDG)) { GameObject * commEngineer = Commands->Find_Object ( M01_COMM_CENTER_ENGINEER_ID ); if (commEngineer != NULL) { Commands->Send_Custom_Event( obj, commEngineer, 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } break; case M01_CUE_KANE_AND_NUMBER2_CONVERSATION_JDG://player is in comm center--cue kane encounter { GameObject * holograph = Commands->Find_Object ( 157978 ); if (holograph != NULL) { GameObject * kane = Commands->Create_Object_At_Bone ( holograph, "Nod_Kane_HologramHead", "KANEBONE" ); Commands->Attach_To_Object_Bone( kane, holograph, "KANEBONE" ); Commands->Set_Loiters_Allowed( kane, false ); kane_ID = Commands->Get_ID ( kane ); GameObject * commBaseCommander = Commands->Find_Object ( M01_COMMCENTER_BASE_COMMANDER_JDG ); if (commBaseCommander != NULL) { kane_and_no2_conv01_active = true; kane_and_no2_conv01 = Commands->Create_Conversation( "M01_Kane_and_Number02_Conversation_01", 100, 1000, true); Commands->Join_Conversation( kane, kane_and_no2_conv01, false, true ); Commands->Join_Conversation( commBaseCommander, kane_and_no2_conv01, false, true ); Commands->Start_Conversation( kane_and_no2_conv01, kane_and_no2_conv01 ); } } } break; case M01_CUE_KANE_AND_HAVOC_CONVERSATION_JDG://player is in comm center war room--cue kane encounter { if (kane_and_no2_conv01_active == true) { } else if (kane_and_no2_conv02_active == true) { } if (kane_and_havoc_conv_active == false) { GameObject * kane = Commands->Find_Object ( kane_ID ); if (kane != NULL) { kane_and_havoc_conv_active = true; kane_and_havoc_conv = Commands->Create_Conversation( "M01_Kane_and_Havoc_Conversation", 100, 1000, false); Commands->Join_Conversation( kane, kane_and_havoc_conv, false, true ); Commands->Join_Conversation( STAR, kane_and_havoc_conv, false, false ); Commands->Start_Conversation( kane_and_havoc_conv, kane_and_havoc_conv ); Commands->Monitor_Conversation( obj, kane_and_havoc_conv ); } } } break; case M01_SEND_BARN_CHINOOK_JDG://havoc is in barn area--send reinforcements { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj );//enemy aircraft detected GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-87.561f, 114.225f, 1.874f)); Commands->Set_Facing(chinook_obj1, 0.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_EasyNodChinook01.txt"); } break; case M01_SEND_GUARD_TOWER_CHINOOK_JDG://havoc is at GDI guard tower { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj ); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(12.703f, 84.163f, 1.898f)); Commands->Set_Facing(chinook_obj1, -130.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_EasyNodChinook01.txt"); } break; case M01_SEND_TAILGUN_CHINOOK_JDG://havoc is in tailgun area--send reinforcementsM01_SEND_CHURCH_CHINOOK_JDG { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj );//enemy aircraft detected GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-7.831f, 292.034f, 2.665f)); Commands->Set_Facing(chinook_obj1, 0.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_EasyNodChinook01.txt"); } break; case M01_SEND_CHURCH_CHINOOK_JDG://havoc is in church area--send reinforcements { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj );//enemy aircraft detected GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-91.898f, 424.178f, 20.761f)); Commands->Set_Facing(chinook_obj1, 0.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_EasyNodChinook.txt"); } break; case M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG://havoc has found one of the barn civs--send in the chinook { GameObject * barnEvacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (barnEvacController != NULL) { Commands->Send_Custom_Event( obj, barnEvacController, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } } break; } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == billy_conv) { Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } else if (action_id == babushka_conv) { Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); GameObject * barnPrisoner01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); if ( barnPrisoner01 != NULL && barn_prisoner_01_is_dead != true) //this is babushka { Commands->Send_Custom_Event( obj, barnPrisoner01, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); }//int } else if (action_id == civ3_conv) { Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } else if (action_id == turrets_conv) { Commands->Send_Custom_Event( obj, obj, 0, M01_ADD_TURRETS_OBJECTIVE_JDG, 0 ); } //else if (action_id == turrets_hummVee_conv) //send in the humm vee //{ //GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-96.744f, 138.498f, 1)); //Commands->Set_Facing(chinook_obj1, 60.0f); //Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "XG_M01_HumveeDrop.txt"); //} else if (action_id == barnfailed_conv) { //int honAlerted_conv = Commands->Create_Conversation( "M01_HandOfNod_Alerted_Conversation", 100, 1000, false); //Commands->Join_Conversation( NULL, honAlerted_conv, false, false ); //Commands->Join_Conversation( STAR, honAlerted_conv, false, false ); //Commands->Start_Conversation( honAlerted_conv, honAlerted_conv ); } else if (action_id == kane_and_no2_conv01) { kane_and_no2_conv01_active = false; GameObject * securityCamera = Commands->Find_Object ( M01_COMMCENTER_CEILING_CAMERA_JDG); if (securityCamera != NULL) { Commands->Send_Custom_Event( obj, securityCamera, 0, M01_START_ATTACKING_01_JDG, 0 ); } } else if (action_id == kane_and_no2_conv02) { kane_and_no2_conv02_active = false; } else if (action_id == kane_and_havoc_conv) { GameObject * kane = Commands->Find_Object ( kane_ID); if (kane != NULL) { Commands->Destroy_Object ( kane ); } } else if (action_id == unlocked_gate_conv) // { Vector3 radarMarker (-310.727f, 571.824f, 28.484f); Commands->Add_Objective( M01_OPEN_THE_GATE_JDG, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M01_03, NULL, IDS_Enc_Obj_Primary_M01_03 ); Commands->Set_Objective_Radar_Blip( M01_OPEN_THE_GATE_JDG, radarMarker ); Commands->Set_Objective_HUD_Info_Position( M01_OPEN_THE_GATE_JDG, 95, "POG_M01_1_03.tga", IDS_POG_OPEN, radarMarker ); //Vector3 green (0,1,0); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Primary_M01_03, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (action_id == endMission_conv) { Commands->Create_2D_Sound ( "00-N048E" );//eva primary accomplished Commands->Send_Custom_Event( obj, obj, 0, M01_END_MISSION_PASS_JDG, 3 ); } else if (action_id == loveshack_conv) { loveshack_conv_playing = false; } else if (action_id == priest_conv) { priest_conv_playing = false; } else if (action_id == interior_nun_conv) { interior_nun_conv_playing = false; } } break; } } }; DECLARE_SCRIPT(M01_HON_Medlab_DropOff_Guy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Enable_Hibernation( obj, false ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.H_A_TroopDrop") == 0) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (0,0,0), RUN, 1); params.WaypathID = 125265; 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) { Commands->Destroy_Object ( obj ); } else { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (0,0,0), RUN, 1); params.WaypathID = 125265; Commands->Action_Goto(obj, params); } } }; DECLARE_SCRIPT(M01_Hand_of_Nod_Building_Script_JDG, "") { int memorial_sound; REGISTER_VARIABLES() { SAVE_VARIABLE(memorial_sound, 1); } void Created( GameObject * obj ) { Vector3 memorialSpot (-195.053f, 533.737f, 10.953f); memorial_sound = Commands->Create_Sound ( "m01eval_dsgn0254r1ncxk_snd", memorialSpot, obj ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Stop_Sound ( memorial_sound, true ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_HAS_BEEN_DESTROYED_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_HON_HAS_BEEN_DESTROYED_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103371 ), 0, M01_HON_HAS_BEEN_DESTROYED_JDG, 0 );//this is the final escort zone Commands->Create_Object ( "POW_Medal_Armor", Vector3 (-180.312f, 541.400f, 3.518f) ); Commands->Create_Object ( "POW_Medal_Health", Vector3 (-178.349f, 541.471f, 3.518f) ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj ) { GameObject * myEngineer = Commands->Find_Object ( M01_HON_REPAIR_ENGINEER_ID ); if (myEngineer != NULL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_DO_DAMAGE_CHECK_JDG, 0 ); if (damager == myEngineer) { float MyMaxHealth = Commands->Get_Max_Health ( obj ); float MyMaxShield = Commands->Get_Max_Shield_Strength ( obj ); Commands->Set_Health ( obj, MyMaxHealth ); Commands->Set_Shield_Strength ( obj, MyMaxShield ); } } } } }; DECLARE_SCRIPT(M01_Flyover_Generic_Script_JDG, "") { void Created( GameObject * obj ) { Commands->Disable_Physical_Collisions ( obj ); Commands->Enable_Hibernation( obj, false ); Commands->Enable_Cinematic_Freeze( obj, false ); float MyMaxHealth = Commands->Get_Max_Health ( obj ); float fudgeFactor = Commands->Get_Random ( .05f, 1.0f); float myNewHealth = MyMaxHealth * fudgeFactor; float MyMaxShield = Commands->Get_Max_Shield_Strength ( obj ); float fudgeFactor2 = Commands->Get_Random ( .05f, 1.0f); float myNewShield = MyMaxShield * fudgeFactor2; Commands->Set_Health ( obj, myNewHealth ); Commands->Set_Shield_Strength ( obj, myNewShield ); } }; DECLARE_SCRIPT(M01_Ambient_Sound_Controller_JDG, "") { enum { play_destroyed_building_sound = 101, pick_refinery_sound, play_refinery_klaxon, play_refinery_sound, pick_commcenter_sound, play_commcenter_klaxon, play_commcenter_sound, }; typedef enum { ACTIVE, DESTROYED, } M01_Building_State; typedef enum { INSIDE_GDI_CON, INSIDE_GDI_POWERPLANT, INSIDE_HAND_OF_NOD, INSIDE_REFINERY, INSIDE_COMM_CENTER, OUTSIDE, } M01_Location; M01_Building_State hand_of_nod_state, comm_center_state; M01_Location players_location; int building_sound; int destroyed_building_sound; int klaxon; int sound; bool outside_ambients_playing; bool building_ambients_playing; bool destroyed_building_ambients_playing; REGISTER_VARIABLES() { SAVE_VARIABLE(hand_of_nod_state, 1); SAVE_VARIABLE(comm_center_state, 2); SAVE_VARIABLE(players_location, 3); SAVE_VARIABLE(building_sound, 4); SAVE_VARIABLE(destroyed_building_sound, 5); SAVE_VARIABLE(klaxon, 6); SAVE_VARIABLE(sound, 7); SAVE_VARIABLE(outside_ambients_playing, 8); SAVE_VARIABLE(building_ambients_playing, 9); SAVE_VARIABLE(destroyed_building_ambients_playing, 10); } void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); hand_of_nod_state = ACTIVE; comm_center_state = ACTIVE; klaxon = 0; sound = 0; outside_ambients_playing = false; building_ambients_playing = false; destroyed_building_ambients_playing = false; players_location = OUTSIDE; Commands->Send_Custom_Event( obj, obj, 0, M01_TURN_ON_OUTSIDE_AMBIENTS_JDG, 0 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ((param == M01_TURN_ON_OUTSIDE_AMBIENTS_JDG) && (outside_ambients_playing == false)) { players_location = OUTSIDE; outside_ambients_playing = true; if (building_ambients_playing == true /*&& building_sound != NULL*/) { Commands->Stop_Sound ( building_sound, true ); } building_ambients_playing = false; destroyed_building_ambients_playing = false; } else if ((param == M01_TURN_OFF_OUTSIDE_AMBIENTS_JDG) && (outside_ambients_playing == true)) { outside_ambients_playing = false; } else if ((param == M01_HON_HAS_BEEN_DESTROYED_JDG))//Hand of Nod has been destroyed { hand_of_nod_state = DESTROYED; } else if ((param == M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG))//Comm Center has been destroyed { comm_center_state = DESTROYED; } else if (param == M01_PLAYER_IS_INSIDE_GDI_CON_JDG) { players_location = INSIDE_GDI_CON; } else if (param == M01_PLAYER_IS_INSIDE_GDI_POWERPLANT_JDG) { players_location = INSIDE_GDI_POWERPLANT; } else if (param == M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG) { players_location = INSIDE_COMM_CENTER; if ((comm_center_state == ACTIVE) && (building_ambients_playing != true) ) { Commands->Debug_Message ( "**********************turning on active Comm Center ambient noise\n" ); building_sound = Commands->Create_Sound ("CC_Ambient_M01", Vector3 (0,0,0), obj ); building_ambients_playing = true; float delayTimer = Commands->Get_Random ( 5, 10 ); Commands->Send_Custom_Event( obj, obj, 0, pick_commcenter_sound, delayTimer ); } } else if (param == M01_PLAYER_IS_INSIDE_HON_JDG) { players_location = INSIDE_HAND_OF_NOD; if ((hand_of_nod_state == ACTIVE) && (building_ambients_playing != true) ) { building_ambients_playing = true; } } else if ((param == play_commcenter_klaxon) && (players_location == INSIDE_COMM_CENTER) && (comm_center_state != DESTROYED)) { char *klaxonNames[2] = { "Klaxon Warning", "Klaxon Info" }; char *klaxonName = klaxonNames[klaxon]; GameObject * star = Commands->Get_A_Star (Vector3(0.0f,0.0f,0.0f)); if ( star != NULL ) { Vector3 playerPosition = Commands->Get_Position ( star ); float x_factor = Commands->Get_Random(-5,5); float y_factor = Commands->Get_Random(-5,5); playerPosition.X += x_factor; playerPosition.Y += y_factor; playerPosition.Z += 3; Commands->Create_Sound ( klaxonName, playerPosition, obj ); Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 1.5 ); } } else if ((param == play_commcenter_sound) && (players_location == INSIDE_COMM_CENTER) && (comm_center_state != DESTROYED)) { char *sounds[15] = { "01-I022E", "01-I028E", "01-I030E", "01-I032E", "01-I034E", "01-I036E", "01-I038E", "01-I040E", "01-I042E", "01-I044E", "01-I046E", "01-I048E", "01-I050E", "01-I062E", "01-I066E" }; char *soundName = sounds[sound]; GameObject * star = Commands->Get_A_Star (Vector3(0.0f,0.0f,0.0f)); if ( star != NULL ) { Vector3 playerPosition = Commands->Get_Position ( star ); float x_factor = Commands->Get_Random(-5,5); float y_factor = Commands->Get_Random(-5,5); playerPosition.X += x_factor; playerPosition.Y += y_factor; playerPosition.Z += 3; Commands->Create_Sound ( soundName, playerPosition, obj ); float delayTimer = Commands->Get_Random ( 10, 25 ); Commands->Send_Custom_Event( obj, obj, 0, pick_commcenter_sound, delayTimer ); } } else if ((param == pick_commcenter_sound) && (players_location == INSIDE_COMM_CENTER) && (comm_center_state != DESTROYED)) { float lineNumber = Commands->Get_Random ( 0.5f, 15.5f); if ((lineNumber >= 0.5) && (lineNumber < 1.5)) { sound = 0; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 1.5) && (lineNumber < 2.5)) { sound = 1; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 2.5) && (lineNumber < 3.5)) { sound = 2; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 3.5) && (lineNumber < 4.5)) { klaxon = 1; sound = 3; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 4.5) && (lineNumber < 5.5)) { sound = 4; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 5.5) && (lineNumber < 6.5)) { klaxon = 1; sound = 5; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 6.5) && (lineNumber < 7.5)) { klaxon = 1; sound = 6; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 7.5) && (lineNumber < 8.5)) { klaxon = 0; sound = 7; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 8.5) && (lineNumber < 9.5)) { sound = 8; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 9.5) && (lineNumber < 10.5)) { klaxon = 0; sound = 9; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 10.5) && (lineNumber < 11.5)) { klaxon = 0; sound = 10; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 11.5) && (lineNumber < 12.5)) { klaxon = 1; sound = 11; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_klaxon, 0 ); } else if ((lineNumber >= 12.5) && (lineNumber < 13.5)) { Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else if ((lineNumber >= 13.5) && (lineNumber < 14.5)) { sound = 13; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } else { sound = 14; Commands->Send_Custom_Event( obj, obj, 0, play_commcenter_sound, 0 ); } } } }; DECLARE_SCRIPT(M01_Entering_Church_Area_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_APPROACHING_CHURCH_JDG, 0 ); if (Commands->Find_Object ( 100801 ))//these are the three zones leading to the church--clean them up { Commands->Destroy_Object ( Commands->Find_Object ( 100801 ) ); } if (Commands->Find_Object ( 100802 )) { Commands->Destroy_Object ( Commands->Find_Object ( 100802 ) ); } if (Commands->Find_Object ( 100803 )) { Commands->Destroy_Object ( Commands->Find_Object ( 100803 ) ); } } } }; DECLARE_SCRIPT(M01_Hand_Of_Nod_Interior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_INSIDE_HON_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Hand_Of_Nod_Exterior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_OUTSIDE_HON_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Comm_Center_Interior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Comm_Center_Exterior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_OUTSIDE_COMM_CENTER_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Tunnel_Interior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_INSIDE_TUNNEL_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Tunnel_Exterior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_OUTSIDE_TUNNEL_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Waterfall_Interior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_INSIDE_WATERFALL_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Waterfall_Exterior_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_OUTSIDE_WATERFALL_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Player_is_Leaving_GDI_Base_Zone, "") { bool firstEntry; REGISTER_VARIABLES() { SAVE_VARIABLE(firstEntry, 1); } void Created( GameObject * obj ) { firstEntry = true; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (firstEntry == true) { firstEntry = false; GameObject * barnSpawnerController = Commands->Find_Object (M01_GDIBASE_SPAWNER_CONTROLLER_JDG); if (barnSpawnerController != NULL) { Commands->Send_Custom_Event( obj, barnSpawnerController, 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_APPROACHING_BARN_AREA_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Player_is_Entering_GDI_Base_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_APPROACHING_GDI_BASE_AREA_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Lose_Any_Church_Escorts_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_LEAVING_CHURCH_01_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Lose_Any_Church_Escorts_Zone_02, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_LEAVING_CHURCH_02_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Lose_Any_HON_Escorts_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_LEAVING_HON_01_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Lose_Any_HON_Escorts_Zone_02, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_LEAVING_HON_02_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Announce_Prisoner_Objective_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_ANNOUNCE_PRISONER_OBJECTIVE_JDG, 0 ); Commands->Destroy_Object ( obj );//this is a one-time only zone--clean it up } } }; DECLARE_SCRIPT(M01_Scramble_Radar_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SCRAMBLE_THE_RADAR_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_UnScramble_Radar_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_UNSCRAMBLE_THE_RADAR_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_HON_Commander_Guy, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG), 0, M01_CARD_CARRIER_HAS_BEEN_KILLED_JDG, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M01_COMM_Commander_Guy, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG), 0, M01_CARD_CARRIER_HAS_BEEN_KILLED_JDG, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M01_HandOfNod_SAMSite_Script, "")//M01_HON_SAM_SITE_JDG==100031 { void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == (STAR)) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M01_MISSION_CONTROLLER_JDG), 0, M01_HON_SAMSITE_HAS_BEEN_DESTROYED_JDG, 5 ); } }; DECLARE_SCRIPT(M01_Destroyed_SAMSITE_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Vector3 my_target = Commands->Get_Position ( obj ); my_target.Z -= -5; params.Set_Basic( this, 100, 20 ); params.Set_Attack( my_target, 0, 0, true ); params.AttackCheckBlocked = true; Commands->Action_Attack (obj, params); } }; DECLARE_SCRIPT(M01_CommCenter_Evacuator_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 2.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-286.904f, 557.896f, 27.616f); } else { evac_spot.Set(-318.149f, 530.868f, 27.971f); } float x_factor = Commands->Get_Random(-5,5); float y_factor = Commands->Get_Random(-5,5); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 2 ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//Tech is at workstation--face monitor { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_FrontDoor_Evacuator_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Commands->Enable_Hibernation( obj, false ); params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_PICK_A_NEW_LOCATION_JDG); params.Set_Movement( Vector3(-150.3f, 532.0f, 4.2f), 1.0f, 0.25f ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_PICK_A_NEW_LOCATION_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 3.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else { evac_spot.Set(-163.828f, 515.290f, 4.258f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); Commands->Action_Goto( obj, params ); } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//Tech is evac'd allow hibernation { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_BackDoor_Evacuator_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; evac_spot.Set(-221.947f, 515.124f, 4.012f); float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//Tech is evac'd allow hibernation { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Dorm_Crapper_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, -120 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); //params.Set_Basic(this, 60, 100); //params.Set_Animation ("H_A_V22A", true); //Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); Commands->Action_Goto( obj, params ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { GameObject * star = Commands->Get_A_Star (Vector3(0.0f,0.0f,0.0f)); if ( star != NULL ) { int players_ID_number = Commands->Get_ID ( star ); params.Set_Basic( this, 90, 50 ); params.Set_Movement( Commands->Find_Object ( players_ID_number ), .8f, 1.5f ); params.MoveFollow = true; Commands->Action_Goto( obj, params ); } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG), 0, M01_CARD_CARRIER_HAS_BEEN_KILLED_JDG, 0 );//tell controller you've been killed } }; DECLARE_SCRIPT(M01_HON_Dorm_FlameGuy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, 90 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 60, 100); params.Set_Animation ("H_A_601A", true); Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); Commands->Action_Goto( obj, params ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Dorm_ChemGuy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, -90 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 60, 100); params.Set_Animation ("H_A_613A", true); Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); Commands->Action_Goto( obj, params ); } } } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { ActionParamsStruct params; if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Dorm_RocketGuy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, -90 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 60, 100); params.Set_Animation ("H_A_601A", true); Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 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_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Dorm_MiniGunner_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, 180 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 60, 100); params.Set_Animation ("H_A_442A", true); Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 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_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Cafeteria_Eating_Guy_JDG, "") { int enemy_detected; REGISTER_VARIABLES() { SAVE_VARIABLE( enemy_detected, 1 ); } void Created( GameObject * obj ) { enemy_detected = 0; Commands->Innate_Disable(obj); Commands->Set_Facing ( obj, -125 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 60, 100); params.Set_Animation ("H_A_V11A", true); Commands->Action_Play_Animation (obj, params); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 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_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_HON_Cafeteria_Walking_Guy_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering Grunt level--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100661; params.WaypointStartID = 100662; params.WaypointEndID = 100663; Commands->Action_Goto( obj, params ); } } else if ((param == M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG))//Your building has been destroyed--evacuate { if (obj) { Commands->Innate_Enable( obj ); Commands->Enable_Hibernation( obj, false ); Vector3 evac_spot; float evac_location = Commands->Get_Random ( 0.5, 4.5f ); if (evac_location >= 0.5 && evac_location < 1.5) { evac_spot.Set(-156.637f, 553.163f, 4.295f); } else if (evac_location >= 1.5 && evac_location < 2.5) { evac_spot.Set(-145.746f, 531.964f, 4.271f); } else if (evac_location >= 2.5 && evac_location < 3.5) { evac_spot.Set(-163.828f, 515.290f, 4.258f); } else { evac_spot.Set(-221.947f, 515.124f, 4.012f); } float x_factor = Commands->Get_Random(-10,10); float y_factor = Commands->Get_Random(-10,10); evac_spot.X += x_factor; evac_spot.Y += y_factor; params.Set_Basic(this, M01_EVAC_PRIORITY_JDG, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evac_spot, 1.0f, 3 ); 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) { params.Set_Basic(this, 45, M01_FACING_SPECIFIED_DIRECTION_01_JDG); params.Set_Face_Location( Vector3(-170.179f, 520.595f, 5.999f), 1 ); Commands->Action_Face_Location ( obj, params ); } else if (action_id == M01_FACING_SPECIFIED_DIRECTION_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic(this, 45, M01_DOING_ANIMATION_01_JDG); params.Set_Animation ("H_A_J17C", 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), .35f, .25f ); params.WaypathID = 100674; params.WaypointStartID = 100676; params.WaypointEndID = 100682; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic(this, 45, M01_DOING_ANIMATION_02_JDG); params.Set_Animation ("H_A_V42A", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Vector3 sitspot(-176.299f, 532.229f, -4.6f); Commands->Set_Position ( obj, sitspot ); Commands->Set_Facing ( obj, 60 ); params.Set_Basic(this, 45, 100); params.Set_Animation ("H_A_V11A", true); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_Hand_Of_Nod_Grunt_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_IN_HON_GRUNT_LEVEL_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Hand_Of_Nod_Dojo_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_IN_HON_DOJO_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Church_LoveShack_MiniGunner_JDG, "")//M01_CHURCH_LOVESHACK_MINIGUNNER_ID 101305 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Innate_Enable( obj ); ActionParamsStruct params; params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( STAR, RUN, 5 ); params.Set_Attack( STAR, 15, 0, true ); Commands->Action_Attack ( obj, params ); } } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * conversationZone = Commands->Find_Object ( 103392 ); if (conversationZone != NULL) { Commands->Destroy_Object ( conversationZone ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_LOVESHACK_GUARD_IS_DEAD_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG), 0, M01_CARD_CARRIER_HAS_BEEN_KILLED_JDG, 0 );//tell controller you've been killed } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { Commands->Innate_Enable( obj ); params.Set_Basic(this, 85, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, 2 ); params.WaypathID = 100760; params.WaypointStartID = 100761; params.WaypointEndID = 100769; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Church_Exterior_MiniGunner_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), .2f, .25f ); params.WaypathID = 100771; params.WaypointStartID = 100772; params.WaypointEndID = 100776; Commands->Action_Goto( obj, params ); } } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Innate_Enable( obj ); ActionParamsStruct params; params.Set_Basic(this, 100, 0); params.Set_Movement( STAR, WALK, 5 ); params.Set_Attack( STAR, 15, 0, true ); 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)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100778; params.WaypointStartID = 100779; params.WaypointEndID = 100782; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100778; params.WaypointStartID = 100782; params.WaypointEndID = 100779; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_04_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100771; params.WaypointStartID = 100776; params.WaypointEndID = 100772; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100771; params.WaypointStartID = 100772; params.WaypointEndID = 100776; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Church_Balcony_MiniGunner_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { if (obj) { Commands->Innate_Enable( obj ); params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100784; params.WaypointStartID = 100785; params.WaypointEndID = 100786; 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)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100788; params.WaypointStartID = 100789; params.WaypointEndID = 100790; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100792; params.WaypointStartID = 100793; params.WaypointEndID = 100794; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_04_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100796; params.WaypointStartID = 100797; params.WaypointEndID = 100799; Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//minigunner is at animation point--choose and do animation { 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)//minigunner is done with animation--keep moving { params.Set_Basic(this, 45, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100784; params.WaypointStartID = 100785; params.WaypointEndID = 100786; Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Announce_Hand_of_Nod_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", "X1A_Apache_Orca_Chase_01.txt"); GameObject * buggyController = Commands->Find_Object ( 103367 ); if (buggyController != NULL) { Commands->Send_Custom_Event( obj, buggyController, 0, M01_START_ACTING_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_ANNOUNCE_HON_OBJECTIVE_JDG, 0 ); Commands->Destroy_Object ( obj);//this is a 1-time only zone--cleaning up } } }; DECLARE_SCRIPT(M01_Announce_Barn_Objective_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_START_BARN_OBJECTIVE_JDG, 0 ); Commands->Destroy_Object ( obj);//this is a 1-time only zone--cleaning up } } }; DECLARE_SCRIPT(M01_Tiberium_Cave_Helicopter_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; Commands->Innate_Disable(obj); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Movement( Vector3(-42.883f, 376.457f, 18.025f), 0.005f, 0.25f ); params.AttackActive = false; params.AttackCheckBlocked = false; params.MovePathfind = false; Commands->Action_Attack (obj, params); float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG ) { params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Movement( Vector3(-42.883f, 376.457f, 18.025f), 0.05f, 0.25f ); params.AttackActive = true; params.AttackCheckBlocked = false; params.MovePathfind = false; params.Set_Attack (STAR, 100, 0, true); Commands->Modify_Action (obj, M01_START_ACTING_JDG, params); float delayTimer = Commands->Get_Random ( 1, 2 ); 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_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 1.0f, 0.75f ); params.WaypathID = 100964; params.WaypointStartID = 100965; params.WaypointEndID = 101366; params.WaypathSplined = true; params.AttackActive = true; params.AttackCheckBlocked = true; params.MovePathfind = false; params.Set_Attack (STAR, 100, 0, true); Commands->Action_Attack (obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 15 ); } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG ) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Player_Is_Crossing_Bridge_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_CROSSING_THE_BRIDGE_JDG, 0 ); if ( Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } //this is a one-time only zone--cleaning up if (Commands->Find_Object ( 100922 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100922 )); } if (Commands->Find_Object ( 100934 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100934 )); } if (Commands->Find_Object ( 100972 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100972 )); } } } }; DECLARE_SCRIPT(M01_Player_Is_Crossing_Bridge_Via_Cave_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_CROSSING_THE_BRIDGE_VIA_CAVE_JDG, 0 ); if ( Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } //this is a one-time only zone--cleaning up if (Commands->Find_Object ( 100922 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100922 )); } if (Commands->Find_Object ( 100934 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100934 )); } if (Commands->Find_Object ( 100972 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100972 )); } } } }; DECLARE_SCRIPT(M01_Player_Is_Crossing_Bridge_Via_Church_Zone, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_CROSSING_THE_BRIDGE_JDG, 0 ); if ( Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } //this is a one-time only zone--cleaning up if (Commands->Find_Object ( 100922 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100922 )); } if (Commands->Find_Object ( 100934 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100934 )); } if (Commands->Find_Object ( 100972 ))//clean up all zones associated with the driveby scenario { Commands->Destroy_Object ( Commands->Find_Object ( 100972 )); } } } }; DECLARE_SCRIPT(M01_Flamethrower_Point_Guard_JDG, "") { Vector3 myPosition; float myFacing; float leftFacing; float rightFacing; REGISTER_VARIABLES() { SAVE_VARIABLE(myPosition, 1); SAVE_VARIABLE(myFacing, 2); SAVE_VARIABLE(leftFacing, 3); SAVE_VARIABLE(rightFacing, 4); } void Created( GameObject * obj ) { myPosition = Commands->Get_Position ( obj ); myFacing = Commands->Get_Facing ( obj ); leftFacing = myFacing - 45; rightFacing = myFacing + 45; Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 20.0f ); Commands->Set_Innate_Aggressiveness ( obj, 0.5f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.5f ); float delayTimer = Commands->Get_Random ( 5, 10 ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_PICK_A_NEW_LOCATION_JDG) { float atarashiLookSpot = Commands->Get_Random ( leftFacing, rightFacing ); float delayTimer = Commands->Get_Random ( 5, 10 ); params.Set_Basic( this, 45, 20 ); params.Set_Face_Location( myPosition, DEG_TO_RAD(atarashiLookSpot), delayTimer ); Commands->Action_Face_Location ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if ((sound.Type == SOUND_TYPE_BULLET_HIT) || (sound.Type == SOUND_TYPE_GUNSHOT)) { Commands->Set_Innate_Is_Stationary ( obj, false ); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { Commands->Set_Innate_Is_Stationary ( obj, false ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_MiniGunner_Point_Guard_JDG, "") { /*Vector3 myPosition; REGISTER_VARIABLES() { SAVE_VARIABLE(myPosition, 1); } void Created( GameObject * obj ) { myPosition.Set (Commands->Get_Position ( obj )); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 3 ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { int current_difficulty = Commands->Get_Difficulty_Level(); int easy = 0; int medium = 1; int hard = 2; if (current_difficulty == easy) { Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, M01_EASY_DIFFICULTY_HOMERANGE_JDG ); Commands->Set_Innate_Aggressiveness ( obj, M01_EASY_DIFFICULTY_AGGRESSION_JDG ); Commands->Set_Innate_Take_Cover_Probability ( obj, M01_EASY_DIFFICULTY_TAKECOVER_JDG ); } else if (current_difficulty == medium) { Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, M01_MEDIUM_DIFFICULTY_HOMERANGE_JDG ); Commands->Set_Innate_Aggressiveness ( obj, M01_MEDIUM_DIFFICULTY_AGGRESSION_JDG ); Commands->Set_Innate_Take_Cover_Probability ( obj, M01_MEDIUM_DIFFICULTY_TAKECOVER_JDG ); } else if (current_difficulty == hard) { Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, M01_HARD_DIFFICULTY_HOMERANGE_JDG ); Commands->Set_Innate_Aggressiveness ( obj, M01_HARD_DIFFICULTY_AGGRESSION_JDG ); Commands->Set_Innate_Take_Cover_Probability ( obj, M01_HARD_DIFFICULTY_TAKECOVER_JDG ); } }*/ }; DECLARE_SCRIPT(M01_HON_Easy_Spawned_Guy_01_JDG, "") { bool hunting; bool fighting; REGISTER_VARIABLES() { SAVE_VARIABLE(hunting, 1); SAVE_VARIABLE(fighting, 2); } void Created( GameObject * obj ) { hunting = false; fighting = false; Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 85, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-218.772f, 510.932f, 4.017f), RUN, 0.05f ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); if (fighting == false) { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); fighting = true; } } } } void Killed( GameObject * obj, GameObject * killer ) { if (hunting != true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_01_IS_DEAD_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_IS_DEAD_JDG, 0 ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR && fighting == false) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Aggressiveness ( obj, 0.25f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.75f ); Commands->Enable_Hibernation( obj, true ); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR && fighting == false) { Vector3 playersPosition = Commands->Get_Position ( STAR ); if (sound.Type == SOUND_TYPE_GUNSHOT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Gunshots_Heard ( obj, playersPosition ); } else if (sound.Type == SOUND_TYPE_BULLET_HIT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Bullet_Heard ( obj, playersPosition ); } } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_HUNT_THE_PLAYER_JDG ) { if (obj && STAR) { hunting = true; Vector3 playersPosition = Commands->Get_Position ( STAR ); params.Set_Basic(this, 45, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement( playersPosition, RUN, 5, false ); Commands->Action_Goto( obj, params ); } Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 30 ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_HUNT_THE_PLAYER_JDG && (complete_reason == ACTION_COMPLETE_PATH_BAD_START || complete_reason == ACTION_COMPLETE_PATH_BAD_DEST || complete_reason == ACTION_COMPLETE_MOVE_NO_PROGRESS_MADE)) { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } } }; DECLARE_SCRIPT(M01_HON_Easy_Spawned_Guy_02_JDG, "") { bool hunting; bool fighting; REGISTER_VARIABLES() { SAVE_VARIABLE(hunting, 1); SAVE_VARIABLE(fighting, 2); } void Created( GameObject * obj ) { hunting = false; fighting = false; Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 85, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-224.418f, 510.944f, 4.006f), RUN, 0.05f ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); if (fighting == false) { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); fighting = true; } } } } void Killed( GameObject * obj, GameObject * killer ) { if (hunting != true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_02_IS_DEAD_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_IS_DEAD_JDG, 0 ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR && fighting == false) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Aggressiveness ( obj, 0.25f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.75f ); Commands->Enable_Hibernation( obj, true ); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR && fighting == false) { Vector3 playersPosition = Commands->Get_Position ( STAR ); if (sound.Type == SOUND_TYPE_GUNSHOT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Gunshots_Heard ( obj, playersPosition ); } else if (sound.Type == SOUND_TYPE_BULLET_HIT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Bullet_Heard ( obj, playersPosition ); } } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_HUNT_THE_PLAYER_JDG ) { if (obj && STAR) { hunting = true; Vector3 playersPosition = Commands->Get_Position ( STAR ); params.Set_Basic(this, 45, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement( playersPosition, RUN, 5, false ); Commands->Action_Goto( obj, params ); } Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 30 ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_HUNT_THE_PLAYER_JDG && (complete_reason == ACTION_COMPLETE_PATH_BAD_START || complete_reason == ACTION_COMPLETE_PATH_BAD_DEST || complete_reason == ACTION_COMPLETE_MOVE_NO_PROGRESS_MADE)) { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } } }; DECLARE_SCRIPT(M01_HON_Easy_Spawned_Guy_03_JDG, "") { bool hunting; bool fighting; REGISTER_VARIABLES() { SAVE_VARIABLE(hunting, 1); SAVE_VARIABLE(fighting, 2); } void Created( GameObject * obj ) { hunting = false; fighting = false; Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 85, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-221.754f, 514.833f, 4.015f), RUN, 0.05f ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR ) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); if (fighting == false) { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); fighting = true; } } } } void Killed( GameObject * obj, GameObject * killer ) { if (hunting != true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_03_IS_DEAD_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_IS_DEAD_JDG, 0 ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR && fighting == false) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Set_Innate_Aggressiveness ( obj, 0.25f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.75f ); Commands->Enable_Hibernation( obj, true ); } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR && fighting == false) { Vector3 playersPosition = Commands->Get_Position ( STAR ); if (sound.Type == SOUND_TYPE_GUNSHOT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Gunshots_Heard ( obj, playersPosition ); } else if (sound.Type == SOUND_TYPE_BULLET_HIT) { fighting = true; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Bullet_Heard ( obj, playersPosition ); } } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_HUNT_THE_PLAYER_JDG ) { if (obj && STAR) { hunting = true; Vector3 playersPosition = Commands->Get_Position ( STAR ); params.Set_Basic(this, 45, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement( playersPosition, RUN, 5, false ); Commands->Action_Goto( obj, params ); } Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 30 ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_HUNT_THE_PLAYER_JDG && (complete_reason == ACTION_COMPLETE_PATH_BAD_START || complete_reason == ACTION_COMPLETE_PATH_BAD_DEST || complete_reason == ACTION_COMPLETE_MOVE_NO_PROGRESS_MADE)) { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } else if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNER_IN_POSITION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Whack_A_Mole_Enter_Zone_JDG, "")//this guys ID is 101209 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SPAWN_WHACK_A_MOLE_GUY_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101207 ), 0, M01_SPAWN_WHACK_A_MOLE_GUY_JDG, 0 ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Whack_A_Mole_Exit_Zone_JDG, "")//this guys ID is 101207 { bool okayToAct; REGISTER_VARIABLES() { SAVE_VARIABLE(okayToAct, 1); } void Created( GameObject * obj ) { okayToAct = false; } void Custom(GameObject * obj, int type, int param, GameObject * sender) { if (param == M01_SPAWN_WHACK_A_MOLE_GUY_JDG ) { okayToAct = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR && okayToAct == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CHANGE_WHACK_A_MOLE_GUY_JDG, 0 ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Whack_A_Mole_Minigunner_JDG, "") { typedef enum { Left_To_Right, Right_To_Left, } Walking_State; bool invincible; bool attacked; float base_health; float speed; int points_given; Walking_State Whack_a_Mole_State; REGISTER_VARIABLES() { SAVE_VARIABLE(invincible, 1); SAVE_VARIABLE(attacked, 2); SAVE_VARIABLE(base_health, 3); SAVE_VARIABLE(speed, 4); SAVE_VARIABLE(points_given, 5); SAVE_VARIABLE(Whack_a_Mole_State, 6); } void Created( GameObject * obj ) { //Commands->Innate_Disable(obj); invincible = false; attacked = false; base_health = Commands->Get_Max_Health ( obj ); speed = 0.3f; points_given = 1; ActionParamsStruct params; params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), speed, 0.25f ); params.WaypathID = 101221; Commands->Action_Goto( obj, params ); Whack_a_Mole_State = Right_To_Left; } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_CHANGE_WHACK_A_MOLE_GUY_JDG ) { if (obj) { invincible = false; Commands->Innate_Enable(obj); } } else if (param == M01_DOING_ANIMATION_01_JDG ) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_J21C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (param == M01_PICK_A_NEW_LOCATION_JDG ) { Commands->Action_Reset ( obj, 100 ); if (Whack_a_Mole_State == Right_To_Left) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), speed, 0.25f ); params.WaypathID = 101210; Commands->Action_Goto( obj, params ); Whack_a_Mole_State = Left_To_Right; } else if (Whack_a_Mole_State == Left_To_Right) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), speed, 0.25f ); params.WaypathID = 101221; Commands->Action_Goto( obj, params ); Whack_a_Mole_State = Right_To_Left; } } else if (param == M01_HUNT_THE_PLAYER_JDG ) { if (obj) { invincible = false; Commands->Innate_Enable(obj); Commands->Grant_Key( obj, 1, true ); params.Set_Basic(this, 45, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement( STAR, WALK, 5 ); params.Set_Attack( STAR, 15, 0, true ); Commands->Action_Attack ( obj, params ); } } } 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->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 0 ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { if (attacked == false) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), speed, 0.25f ); params.WaypathID = 101221; Commands->Action_Goto( obj, params ); Whack_a_Mole_State = Right_To_Left; } else if (attacked == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 0 ); } } else if (action_id == M01_WALKING_WAYPATH_01_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { params.Set_Basic( this, 45, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), speed, 0.25f ); params.WaypathID = 101210; Commands->Action_Goto( obj, params ); Whack_a_Mole_State = Left_To_Right; } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR && invincible == true) { if (obj) { attacked = true; Commands->Set_Health ( obj, base_health ); points_given = 2 * points_given; speed = speed + .1; if (speed > 1) { speed = 1; } Commands->Give_Points( damager, points_given, false ); Commands->Send_Custom_Event( obj, obj, 0, M01_DOING_ANIMATION_01_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_Left_Interrogation_Room_Enter_Zone_JDG, "")//this guys ID is 101354 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (Commands->Find_Object ( M01_HON_INTERROGATION_ROOM_GUY_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_INTERROGATION_ROOM_GUY_ID ), 0, M01_PLAYER_ENTERING_LEFT_INTEROG_ROOM_JDG, 0 ); } if (Commands->Find_Object ( 101354 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101354 ) );//cleaning up the 2 interogation room zones } if (Commands->Find_Object ( 101355 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101355 ) ); } } } }; DECLARE_SCRIPT(M01_Right_Interrogation_Room_Enter_Zone_JDG, "")//this guys ID is 101355 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (Commands->Find_Object ( M01_HON_INTERROGATION_ROOM_GUY_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_INTERROGATION_ROOM_GUY_ID ), 0, M01_PLAYER_ENTERING_RIGHT_INTEROG_ROOM_JDG, 0 ); } if (Commands->Find_Object ( 101354 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101354 ) );//cleaning up the 2 interogation room zones } if (Commands->Find_Object ( 101355 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101355 ) ); } } } }; DECLARE_SCRIPT(M01_Interrogation_Room_L03_Keycard_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_NONE ); } }; DECLARE_SCRIPT(M01_Interrogation_Room_Surprise_Guy_JDG, "")//this guys ID is 101357 { Vector3 myPostion; bool onGuard; REGISTER_VARIABLES() { SAVE_VARIABLE(myPostion, 1); SAVE_VARIABLE(onGuard, 2); } void Created( GameObject * obj ) { Commands->Innate_Disable(obj); onGuard = true; } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { ActionParamsStruct params; if (onGuard == true) { if (obj) { Commands->Innate_Enable( obj ); Commands->Create_Sound ( "Huh_2", Commands->Get_Position ( obj ), obj ); float delayTimer = Commands->Get_Random ( 0.5f, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); onGuard = false; if (Commands->Find_Object ( 101354 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101354 ) );//cleaning up the 2 interogation room zones } if (Commands->Find_Object ( 101355 )) { Commands->Destroy_Object ( Commands->Find_Object ( 101355 ) ); } } } else { } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if (param == M01_PLAYER_ENTERING_LEFT_INTEROG_ROOM_JDG ) { myPostion.Set (-182.199f, 529.167f, -31.130f); params.Set_Basic( this, 80, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myPostion, 0.75f, 0.05f ); Commands->Action_Goto( obj, params ); onGuard = false; } else if (param == M01_PLAYER_ENTERING_RIGHT_INTEROG_ROOM_JDG ) { myPostion.Set (-182.753f, 539.906f, -31.130f); params.Set_Basic( this, 80, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myPostion, 0.75f, 0.05f ); Commands->Action_Goto( obj, params ); onGuard = false; } else if (param == M01_MODIFY_YOUR_ACTION_JDG ) { if (obj) { Commands->Grant_Key( obj, 1, true ); Commands->Grant_Key( obj, 2, true ); Commands->Grant_Key( obj, 3, true ); Commands->Innate_Enable( obj ); params.Set_Basic( this, 80, M01_HUNT_THE_PLAYER_JDG ); params.Set_Attack( STAR, 20, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; 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) { Commands->Create_Sound ( "TargetHasBeenEngaged_2", myPostion, obj ); params.Set_Basic( this, 80, M01_HUNT_THE_PLAYER_JDG ); params.Set_Attack( STAR, 20, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 1, 3 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } }; DECLARE_SCRIPT(M01_Medium_Tank_Tunnel_Squish_Guy_JDG, "") { void Created( GameObject * obj ) { Vector3 myPositon = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPositon, 10.0f ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_MEDIUM_TANK_IS_HERE_JDG ) { Commands->Set_Innate_Is_Stationary ( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 1.0f, .25f ); params.WaypathID = 101554; params.WaypointStartID = 101561; Commands->Action_Goto( obj, params ); Commands->Create_3D_Sound_At_Bone ( "M01_Nod_HupHup", obj, "ROOTTRANSFORM" ); } } }; DECLARE_SCRIPT(M01_Billys_Conversation_Zone_JDG, "")//this guys ID is 101661 { bool okay_to_play_conversation; bool playerEntered; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_play_conversation, 1); SAVE_VARIABLE(playerEntered, 2); } void Created( GameObject * obj ) { okay_to_play_conversation = false; playerEntered = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//billy is in position--give okay for conversation { okay_to_play_conversation = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CUE_BILLYS_CONVERSATION_JDG, 0 ); } else if ((param == M01_CUE_BILLYS_CONVERSATION_JDG))//see if billy and havoc are present { if (playerEntered == true && okay_to_play_conversation == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_BILLYS_CONVERSATION_JDG, 0 ); GameObject * babushkaZone = Commands->Find_Object ( 101662 ); GameObject * billyZone = Commands->Find_Object ( 101661 ); if (babushkaZone != NULL) { Commands->Destroy_Object ( babushkaZone );//this is one-time only zone--cleaning up } if (billyZone != NULL) { Commands->Destroy_Object ( billyZone );//this is one-time only zone--cleaning up } } } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { playerEntered = false; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { playerEntered = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CUE_BILLYS_CONVERSATION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Tank_Entering_Tunnel_Zone_JDG, "")//this guys ID is { int gdi_medium_tank; REGISTER_VARIABLES() { SAVE_VARIABLE(gdi_medium_tank, 1); } void Created( GameObject * obj ) { gdi_medium_tank = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_MEDIUM_TANK_IS_HERE_JDG ) { gdi_medium_tank = param; } } void Entered( GameObject * obj, GameObject * enterer ) { /*GameObject * lightTank = Commands->Find_Object ( M01_TAILGUNAREA_NOD_LIGHTTANK_JDG ); if (lightTank != NULL && enterer == lightTank) { Commands->Send_Custom_Event( obj, lightTank, 0, M01_GOTO_IDLE_JDG, 0 ); Vector3 newTankPosition (14.208f, 225.943f, 4.0f); Commands->Set_Position ( lightTank, newTankPosition ); }*/ if (enterer == Commands->Find_Object ( gdi_medium_tank )) { if ( Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_01_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_01_ID ), 0, M01_MEDIUM_TANK_IS_HERE_JDG, 0 ); } if ( Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_02_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_02_ID ), 0, M01_MEDIUM_TANK_IS_HERE_JDG, 0 ); } if ( Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_03_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TANK_TUNNEL_SQUISH_GUY_03_ID ), 0, M01_MEDIUM_TANK_IS_HERE_JDG, 0 ); } Commands->Destroy_Object ( obj );//one time zone--cleaning up } } }; DECLARE_SCRIPT(M01_Player_Is_Entering_Tailgun_Alley_JDG, "")//this guys ID is 101692 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { int tankWarning = Commands->Create_Conversation( "M01_Announce_LightTank_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, tankWarning, false, false ); Commands->Join_Conversation( NULL, tankWarning, false, false ); //Commands->Join_Conversation( STAR, tankWarning, false, false ); Commands->Start_Conversation( tankWarning, tankWarning ); if ( Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_APPROACHING_TAILGUN_ALLEY_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_01_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_01_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_02_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_02_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_03_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_03_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( 101718 ))//this is the backway enter zone { Commands->Destroy_Object ( Commands->Find_Object ( 101718 ) ); } Commands->Destroy_Object ( obj );//one time zone--cleaning up } } }; DECLARE_SCRIPT(M01_Player_Is_Entering_Tailgun_Alley_Backway_JDG, "")//this guys ID is 101691 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if ( Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_APPROACHING_TAILGUN_ALLEY_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_01_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_01_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_02_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_02_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUN_03_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_03_ID ), 0, M01_START_ACTING_JDG, 0 ); } if ( Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( 101692 ))//this is the enter zone in the tunnel { Commands->Destroy_Object ( Commands->Find_Object ( 101692 ) ); } Commands->Destroy_Object ( obj );//one time zone--cleaning up } } }; DECLARE_SCRIPT(M01_TailGunner_01_JDG, "")//M01_TAILGUNNER_01_ID 101470 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); if ( Commands->Find_Object ( M01_TAILGUN_01_ID )) { ActionParamsStruct params; Vector3 tailgunPosition = Commands->Get_Position ( Commands->Find_Object ( M01_TAILGUN_01_ID ) ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( tailgunPosition, .25f, .25f ); Commands->Action_Goto( obj, params ); } } void Killed( GameObject * obj, GameObject * killer ) { if ( Commands->Find_Object ( M01_TAILGUN_01_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_01_ID ), 0, M01_YOUR_OPERATOR_IS_DEAD_JDG, 0 ); } } 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_WALKING_WAYPATH_02_JDG ); Commands->Action_Enter_Exit ( obj, params ); } } }; DECLARE_SCRIPT(M01_TailGunner_02_JDG, "")//M01_TAILGUNNER_02_ID 101471 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); if ( Commands->Find_Object ( M01_TAILGUN_02_ID )) { ActionParamsStruct params; Vector3 tailgunPosition = Commands->Get_Position ( Commands->Find_Object ( M01_TAILGUN_02_ID ) ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( tailgunPosition, .25f, .25f ); Commands->Action_Goto( obj, params ); } } void Killed( GameObject * obj, GameObject * killer ) { if ( Commands->Find_Object ( M01_TAILGUN_02_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_02_ID ), 0, M01_YOUR_OPERATOR_IS_DEAD_JDG, 0 ); } } 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_WALKING_WAYPATH_02_JDG ); Commands->Action_Enter_Exit ( obj, params ); } } }; DECLARE_SCRIPT(M01_TailGunner_03_JDG, "")//M01_TAILGUNNER_03_ID 101472 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); if ( Commands->Find_Object ( M01_TAILGUN_03_ID )) { ActionParamsStruct params; Vector3 tailgunPosition = Commands->Get_Position ( Commands->Find_Object ( M01_TAILGUN_03_ID ) ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( tailgunPosition, .25f, .35f ); Commands->Action_Goto( obj, params ); } } void Killed( GameObject * obj, GameObject * killer ) { if ( Commands->Find_Object ( M01_TAILGUN_03_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUN_03_ID ), 0, M01_YOUR_OPERATOR_IS_DEAD_JDG, 0 ); } } 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_WALKING_WAYPATH_02_JDG ); Commands->Action_Enter_Exit ( obj, params ); } } }; DECLARE_SCRIPT(M01_TailGun_01_JDG, "")//M01_TAILGUN_01_ID 100243 { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG ) { params.Set_Basic( this, 100, M01_HUNT_THE_PLAYER_JDG ); params.Set_Attack( STAR, 50, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } }; DECLARE_SCRIPT(M01_TailGun_02_JDG, "")//M01_TAILGUN_02_ID 100244 { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG ) { params.Set_Basic( this, 100, M01_HUNT_THE_PLAYER_JDG ); params.Set_Attack( STAR, 50, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } }; DECLARE_SCRIPT(M01_TailGun_03_JDG, "")//M01_TAILGUN_03_ID 100245 { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG ) { params.Set_Basic( this, 100, M01_HUNT_THE_PLAYER_JDG ); params.Set_Attack( STAR, 50, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } }; DECLARE_SCRIPT(M01_Tailgun_02_SpawnApache_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", "X1A_Tailgun_Apache_02.txt"); Commands->Destroy_Object ( obj );//this is a one-time zone--cleaning up } } }; DECLARE_SCRIPT(M01_Civ_To_Minigunner_Guy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; if (Commands->Find_Object (M01_COMMCENTER_BASE_SCAPEGOAT_JDG)) { Vector3 myGotoSpot = Commands->Get_Position ( Commands->Find_Object (M01_COMMCENTER_BASE_SCAPEGOAT_JDG) ); params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myGotoSpot, RUN, 20 ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Comm_Base_Commander_JDG, "")//this guys ID is M01_COMMCENTER_BASE_COMMANDER_JDG 101936 { bool enemyEngaged; REGISTER_VARIABLES() { SAVE_VARIABLE(enemyEngaged, 1); } void Created( GameObject * obj ) { Commands->Innate_Disable(obj); enemyEngaged = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR && enemyEngaged == false) { enemyEngaged = true; Commands->Innate_Enable(obj); Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); Commands->Enable_Hibernation( obj, true ); //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_KANE_AND_HAVOC_CONVERSATION_JDG, 0 ); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR && enemyEngaged == false) { enemyEngaged = true; Commands->Innate_Enable(obj); Commands->Action_Reset ( obj, 100 ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); Commands->Enable_Hibernation( obj, true ); //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_KANE_AND_HAVOC_CONVERSATION_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (killer == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_KANE_AND_HAVOC_CONVERSATION_JDG, 0 ); Vector3 spawn_location = Commands->Get_Position ( obj ); spawn_location.Z = spawn_location.Z + 0.75f; bool player_has_level02_card = Commands->Has_Key( STAR, 2 ); if (player_has_level02_card == false) { Commands->Create_Object ( "Level_02_Keycard", spawn_location ); } } } }; /*DECLARE_SCRIPT(M01_Comm_Base_Scapegoat_JDG, "")//this guys ID is M01_COMMCENTER_BASE_SCAPEGOAT_JDG 101938 { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } }; DECLARE_SCRIPT(M01_Comm_Ceiling_Camera_JDG, "")//this guys ID is M01_COMMCENTER_CEILING_CAMERA_JDG 101937 { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( Commands->Find_Object (M01_COMMCENTER_BASE_SCAPEGOAT_JDG), 0, 0, true ); Commands->Action_Attack( obj, params ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_START_ATTACKING_01_JDG: //kane has told you to kill the scapegoat { if (Commands->Find_Object (M01_COMMCENTER_BASE_SCAPEGOAT_JDG)) { params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( Commands->Find_Object (M01_COMMCENTER_BASE_SCAPEGOAT_JDG), 100, 0, true ); Commands->Action_Attack( obj, params ); } } break; } } };*/ DECLARE_SCRIPT(M01_Comm_Stationary_Tech_JDG, "") { //these guys IDs are M01_COMMCENTER_UPSTAIRS_TECH_JDG 101168 //M01_COMMCENTER_WAROOM_TECH_01_JDG 101170 //M01_COMMCENTER_WAROOM_TECH_02_JDG 101171 Vector3 myLocation; REGISTER_VARIABLES() { SAVE_VARIABLE(myLocation, 1); } void Created( GameObject * obj ) { myLocation = Commands->Get_Position ( obj ); Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG: { Commands->Innate_Enable(obj); Commands->Set_Innate_Aggressiveness ( obj, 0.15f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 1.0f ); params.Set_Basic(this, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myLocation, WALK, 0 ); Commands->Action_Goto( obj, params ); } break; } } 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, 30, M01_DOING_ANIMATION_01_JDG); params.Set_Animation( "H_A_CON2", 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, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myLocation, WALK, 0 ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Comm_ComputerRoom_Tech_JDG, "")//this guys ID is M01_COMMCENTER_COMPUTERROOM_TECH_JDG 101172 { Vector3 myLocation; REGISTER_VARIABLES() { SAVE_VARIABLE(myLocation, 1); } void Created( GameObject * obj ) { myLocation = Commands->Get_Position ( obj ); Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG: { Commands->Innate_Enable(obj); Commands->Set_Innate_Aggressiveness ( obj, 0.15f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 1.0f ); params.Set_Basic(this, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myLocation, WALK, 0 ); Commands->Action_Goto( obj, params ); } break; } } 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, 30, M01_DOING_ANIMATION_01_JDG); params.Set_Animation( "H_A_CON2", 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, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( myLocation, WALK, 0 ); Commands->Action_Goto( obj, params ); } } }; DECLARE_SCRIPT(M01_Comm_Upstairs_Guard_JDG, "")//this guys ID is M01_COMMCENTER_UPSTAIRS_GUARD_JDG 101946 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_PLAYER_IS_INSIDE_COMM_CENTER_JDG: { Commands->Innate_Enable(obj); Commands->Set_Innate_Aggressiveness ( obj, 0.75f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.5f ); params.Set_Basic(this, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3 (0,0,0), WALK, 0 ); params.WaypathID = 101940; params.WaypointStartID = 101944; params.WaypointEndID = 101941; Commands->Action_Goto( obj, params ); } break; } } 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) { float delayTimer = Commands->Get_Random ( 1, 10 ); Commands->Start_Timer(obj, this, delayTimer, M01_WALKING_WAYPATH_01_JDG); } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { float delayTimer = Commands->Get_Random ( 1, 10 ); Commands->Start_Timer(obj, this, delayTimer, M01_WALKING_WAYPATH_02_JDG); } } void Timer_Expired(GameObject * obj, int timer_id) { ActionParamsStruct params; switch (timer_id) { case M01_WALKING_WAYPATH_01_JDG: { params.Set_Basic(this, 30, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement( Vector3 (0,0,0), WALK, 0 ); params.WaypathID = 101940; params.WaypointStartID = 101944; params.WaypointEndID = 101941; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_02_JDG: { params.Set_Basic(this, 30, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3 (0,0,0), WALK, 0 ); params.WaypathID = 101940; params.WaypointStartID = 101941; params.WaypointEndID = 101944; Commands->Action_Goto( obj, params ); } break; } } }; DECLARE_SCRIPT(M01_Comm_Base_Commander_Conv_Start_Zone_JDG, "")//this guys ID is 101947 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_KANE_AND_NUMBER2_CONVERSATION_JDG, 0 ); GameObject * zone01 = Commands->Find_Object ( 101947 ); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//this is a one-time only zone--cleaning up } GameObject * zone02 = Commands->Find_Object ( 111809 ); if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//this is a one-time only zone--cleaning up } } } }; DECLARE_SCRIPT(M01_Comm_Kane_n_Havoc_Conv_Start_Zone_JDG, "")//this guys ID is 101947 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_KANE_AND_HAVOC_CONVERSATION_JDG, 0 ); Commands->Destroy_Object ( obj );//this is one-time only zone--cleaning up } } }; DECLARE_SCRIPT(M01_HON_MCT_Placeholder_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_KILL_THE_HON_JDG, 0 ); } }; DECLARE_SCRIPT(M01_Comm_MCT_Placeholder_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_KILL_THE_COMM_JDG, 0 ); } }; DECLARE_SCRIPT(M01_GDI_Toolshed_PatrolGuy_JDG, "") { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 30, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102153; params.WaypointStartID = 102154; params.WaypointEndID = 102157; Commands->Action_Goto( obj, params ); } 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_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_01_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102159; params.WaypointStartID = 102160; params.WaypointEndID = 102168; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_02_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_02_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102176; params.WaypointStartID = 102177; params.WaypointEndID = 102183; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_03_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_03_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102176; params.WaypointStartID = 102183; params.WaypointEndID = 102177; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_04_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_04_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102159; params.WaypointStartID = 102168; params.WaypointEndID = 102160; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_05_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_05_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_05_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102153; params.WaypointStartID = 102157; params.WaypointEndID = 102154; Commands->Action_Goto( obj, params ); } break; case M01_WALKING_WAYPATH_06_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 30, M01_DOING_ANIMATION_06_JDG ); params.Set_Animation (animationName, false); Commands->Action_Play_Animation (obj, params); } break; case M01_DOING_ANIMATION_06_JDG: { params.Set_Basic( this, 30, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, .05f ); params.WaypathID = 102153; params.WaypointStartID = 102154; params.WaypointEndID = 102157; Commands->Action_Goto( obj, params ); } break; } } break; } } }; DECLARE_SCRIPT(M01_GDI_Base_Spawner_Controller_JDG, "")//this guys ID is M01_GDIBASE_SPAWNER_CONTROLLER_JDG { int active_unit_count; REGISTER_VARIABLES() { SAVE_VARIABLE(active_unit_count, 1); } void Created( GameObject * obj ) { active_unit_count = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_SPAWNER_IS_DEAD_JDG: { active_unit_count--; Commands->Send_Custom_Event( obj, obj, 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); Commands->Debug_Message ( "***************************GDI Base spawner has recieved custom that someone is dead\n" ); } break; case M01_SPAWNER_SPAWN_PLEASE_JDG: { Commands->Enable_Hibernation( obj, false ); int currentDifficulty = Commands->Get_Difficulty_Level( ); int easy = 0; int medium = 1; int hard = 2; if (currentDifficulty == easy) { if (active_unit_count == 0) { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_A_JDG ); active_unit_count++; Commands->Debug_Message ( "***************************GDI Base spawner has spawned an easy guy\n" ); } } else if (currentDifficulty == medium) { if (active_unit_count < 2) { int random = Commands->Get_Random(0.5f, 2.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_A_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_B_JDG ); active_unit_count++; } Commands->Debug_Message ( "***************************GDI Base spawner has spawned a medium guy\n" ); } } else if (currentDifficulty == hard) { if (active_unit_count < 3) { int random = Commands->Get_Random(0.5f, 3.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_A_JDG ); active_unit_count++; } else if ((random >= 1.5f) && (random < 2.5f)) { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_B_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_GDIBASE_SPAWNER_C_JDG ); active_unit_count++; } Commands->Debug_Message ( "***************************GDI Base spawner has spawned a hard guy\n" ); } } Commands->Send_Custom_Event( obj, obj, 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 10 ); } break; case M01_QUIT_SPAWNING_PLEASE_JDG: { if (Commands->Find_Object (M01_GDIBASE_SPAWNER_A_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_GDIBASE_SPAWNER_A_JDG) ); } if (Commands->Find_Object (M01_GDIBASE_SPAWNER_B_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_GDIBASE_SPAWNER_B_JDG) ); } if (Commands->Find_Object (M01_GDIBASE_SPAWNER_C_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_GDIBASE_SPAWNER_C_JDG) ); } Commands->Destroy_Object ( obj ); } break; } } }; DECLARE_SCRIPT(M01_GDI_Base_Spawner_Guy_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { if (Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG )) { Commands->Debug_Message ( "***************************GDI Base/barn area spawner has been killed--sending custom\n" ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_GDIBASE_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_IS_DEAD_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Tailgun_Run_Spawner_Controller_JDG, "")//this guys ID is M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG { int active_unit_count; bool startup; REGISTER_VARIABLES() { SAVE_VARIABLE(active_unit_count, 1); SAVE_VARIABLE(startup, 2); } void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); active_unit_count = 0; startup = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_SPAWNER_IS_DEAD_JDG: { active_unit_count--; Commands->Send_Custom_Event( obj, obj, 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } break; case M01_SPAWNER_SPAWN_PLEASE_JDG: { int currentDifficulty = Commands->Get_Difficulty_Level( ); int easy = 0; int medium = 1; int hard = 2; if (startup == true) { startup = false; if (currentDifficulty == easy) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); active_unit_count++; } else if (currentDifficulty == medium) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_B_JDG ); active_unit_count += 2; } else if (currentDifficulty == hard) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_B_JDG ); Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_C_JDG ); active_unit_count += 3; } } else { if (currentDifficulty == easy) { if (active_unit_count == 0) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); active_unit_count++; } } else if (currentDifficulty == medium) { if (active_unit_count < 2) { int random = Commands->Get_Random(0.5f, 2.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_B_JDG ); active_unit_count++; } } } else if (currentDifficulty == hard) { if (active_unit_count < 3) { int random = Commands->Get_Random(0.5f, 3.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_A_JDG ); active_unit_count++; } else if ((random >= 1.5f) && (random < 2.5f)) { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_B_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_TAILGUNRUN_SPAWNER_C_JDG ); active_unit_count++; } } } } } break; case M01_QUIT_SPAWNING_PLEASE_JDG: { if (Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_A_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_A_JDG) ); } if (Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_B_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_B_JDG) ); } if (Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_C_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_TAILGUNRUN_SPAWNER_C_JDG) ); } Commands->Destroy_Object ( obj ); } break; } } }; DECLARE_SCRIPT(M01_TailgunRun_Spawner_Guy_JDG, "")//Innate_Disable)(GameObject* object);(*Innate_Enable)(GameObject* object); { void Killed( GameObject * obj, GameObject * killer ) { if (Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG )) { Commands->Debug_Message ( "***************************taigun run area spawner has been killed--sending custom\n" ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_TAILGUNRUN_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_IS_DEAD_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_ChurchArea_Spawner_Controller_JDG, "")//this guys ID is M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG { int active_unit_count; bool startup; REGISTER_VARIABLES() { SAVE_VARIABLE(active_unit_count, 1); SAVE_VARIABLE(startup, 2); } void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); active_unit_count = 0; startup = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_SPAWNER_IS_DEAD_JDG: { active_unit_count--; Commands->Send_Custom_Event( obj, obj, 0, M01_SPAWNER_SPAWN_PLEASE_JDG, 0 ); } break; case M01_SPAWNER_SPAWN_PLEASE_JDG: { int currentDifficulty = Commands->Get_Difficulty_Level( ); int easy = 0; int medium = 1; int hard = 2; if (startup == true) { startup = false; if (currentDifficulty == easy) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); active_unit_count++; } else if (currentDifficulty == medium) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_B_JDG ); active_unit_count += 2; } else if (currentDifficulty == hard) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_B_JDG ); Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_C_JDG ); active_unit_count += 3; } } else { if (currentDifficulty == easy) { if (active_unit_count == 0) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); active_unit_count++; } } else if (currentDifficulty == medium) { if (active_unit_count < 2) { int random = Commands->Get_Random(0.5f, 2.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_B_JDG ); active_unit_count++; } } } else if (currentDifficulty == hard) { if (active_unit_count < 3) { int random = Commands->Get_Random(0.5f, 3.5f); if ((random >= 0.5f) && (random < 1.5f)) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_A_JDG ); active_unit_count++; } else if ((random >= 1.5f) && (random < 2.5f)) { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_B_JDG ); active_unit_count++; } else { Commands->Trigger_Spawner( M01_CHURCHAREA_SPAWNER_C_JDG ); active_unit_count++; } } } } } break; case M01_QUIT_SPAWNING_PLEASE_JDG: { if (Commands->Find_Object (M01_CHURCHAREA_SPAWNER_A_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_CHURCHAREA_SPAWNER_A_JDG) ); } if (Commands->Find_Object (M01_CHURCHAREA_SPAWNER_B_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_CHURCHAREA_SPAWNER_B_JDG) ); } if (Commands->Find_Object (M01_CHURCHAREA_SPAWNER_C_JDG)) { Commands->Destroy_Object ( Commands->Find_Object (M01_CHURCHAREA_SPAWNER_C_JDG) ); } Commands->Destroy_Object ( obj ); } break; } } }; DECLARE_SCRIPT(M01_ChurchArea_Spawner_Guy_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { if (Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG )) { Commands->Debug_Message ( "***************************church area spawner has been killed--sending custom\n" ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG ), 0, M01_SPAWNER_IS_DEAD_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Turn_on_the_Hand_of_Nod_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if ( Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_CHURCHAREA_SPAWNER_CONTROLLER_JDG ), 0, M01_QUIT_SPAWNING_PLEASE_JDG, 0 ); } if ( Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_HON_SPAWNS_MINIGUNNER_JDG, 0 ); } if (obj) { Commands->Destroy_Object ( obj);//this is a one-time only zone--cleaning up } } } }; /*DECLARE_SCRIPT(M01_BarnArea_NOD_Commander_JDG, "")//M01_BARNAREA_NOD_COMMANDER_02_JDG 102476 { bool deadYet; bool firstTimeDamaged; REGISTER_VARIABLES() { SAVE_VARIABLE(deadYet, 1); SAVE_VARIABLE(firstTimeDamaged, 2); } void Created( GameObject * obj ) { deadYet = false; firstTimeDamaged = true; Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 10 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR && deadYet == false && firstTimeDamaged == true) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { 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 ); } } } } void Killed( GameObject * obj, GameObject * killer ) { deadYet = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { switch (param) { case M01_START_ACTING_JDG: //set timer--then call in next reinforcements { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, 0 ); } break; case M01_MODIFY_YOUR_ACTION_JDG://here comes player start calling in reinforcements { if (obj) { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float delayTimer; if (currentDifficulty == hard) { delayTimer = 60; } else if (currentDifficulty == medium) { delayTimer = 90; } else { delayTimer = 120; } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_BARN_CHINOOK_JDG, delayTimer ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } break; case M01_SEND_BARN_CHINOOK_JDG: //here comes player start calling in reinforcements { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SEND_BARN_CHINOOK_JDG, 0 ); } } break; case M01_CALL_IN_REINFORCEMENTS_JDG: //here comes player start calling in reinforcements { if (obj && deadYet == false) { GameObject * nodCommanderDialogController = Commands->Find_Object ( 103398 ); if (nodCommanderDialogController != NULL) { Commands->Send_Custom_Event( obj, nodCommanderDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } float delayTimer = Commands->Get_Random ( 15, 30 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, delayTimer ); } } break; } } } };*/ DECLARE_SCRIPT(M01_TailgunRun_NOD_Commander_JDG, "")//this guys ID is M01_TAILGUNAREA_NOD_COMMANDER_JDG 102358 { bool deadYet; bool firstTimeDamaged; bool playerSeen; REGISTER_VARIABLES() { SAVE_VARIABLE(deadYet, 1); SAVE_VARIABLE(firstTimeDamaged, 2); SAVE_VARIABLE(playerSeen, 2); } void Created( GameObject * obj ) { deadYet = false; firstTimeDamaged = true; playerSeen = false; Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR && deadYet == false && firstTimeDamaged == true) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 35) { firstTimeDamaged = false; char *animationName = M01_Choose_Duck_Animation(); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { playerSeen = true; } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR) { if (/*sound.Type == SOUND_TYPE_GUNSHOT ||*/ sound.Type == SOUND_TYPE_BULLET_HIT) { if (obj) { if (deadYet == false && playerSeen == false) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { //firstTimeDamaged = false; char *animationName = M01_Choose_Duck_Animation(); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } } } void Killed( GameObject * obj, GameObject * killer ) { deadYet = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { switch (param) { case M01_START_ACTING_JDG: //set timer--then call in next reinforcements { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, 0 ); } break; case M01_MODIFY_YOUR_ACTION_JDG://here comes player start calling in reinforcements { if (obj) { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float delayTimer; if (currentDifficulty == hard) { delayTimer = 60; } else if (currentDifficulty == medium) { delayTimer = 90; } else { delayTimer = 120; } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_TAILGUN_CHINOOK_JDG, delayTimer ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } break; case M01_SEND_TAILGUN_CHINOOK_JDG: //here comes player start calling in reinforcements { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SEND_TAILGUN_CHINOOK_JDG, 0 ); } } break; case M01_CALL_IN_REINFORCEMENTS_JDG: //here comes player start calling in reinforcements { if (obj && deadYet == false) { GameObject * nodCommanderDialogController = Commands->Find_Object ( 103398 ); if (nodCommanderDialogController != NULL) { Commands->Send_Custom_Event( obj, nodCommanderDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } float delayTimer = Commands->Get_Random ( 15, 30 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, delayTimer ); } } break; } } } }; DECLARE_SCRIPT(M01_ChurchArea_NOD_Commander_JDG, "")//M01_CHURCHAREA_NOD_COMMANDER_JDG 102357 { bool deadYet; bool firstTimeDamaged; bool playerSeen; REGISTER_VARIABLES() { SAVE_VARIABLE(deadYet, 1); SAVE_VARIABLE(firstTimeDamaged, 2); SAVE_VARIABLE(playerSeen, 3); } void Created( GameObject * obj ) { deadYet = false; firstTimeDamaged = true; playerSeen = false; Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR && deadYet == false && firstTimeDamaged == true && playerSeen == false) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { firstTimeDamaged = false; char *animationName = M01_Choose_Duck_Animation(); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { playerSeen = true; } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR) { if (/*sound.Type == SOUND_TYPE_GUNSHOT ||*/ sound.Type == SOUND_TYPE_BULLET_HIT) { if (obj) { if (deadYet == false && playerSeen == false) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { //firstTimeDamaged = false; char *animationName = M01_Choose_Duck_Animation(); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } } } void Killed( GameObject * obj, GameObject * killer ) { deadYet = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { switch (param) { case M01_START_ACTING_JDG: //set timer--then call in next reinforcements { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, 0 ); } break; case M01_MODIFY_YOUR_ACTION_JDG://here comes player start calling in reinforcements { if (obj) { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float delayTimer; if (currentDifficulty == hard) { delayTimer = 60; } else if (currentDifficulty == medium) { delayTimer = 90; } else { delayTimer = 120; } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_CHURCH_CHINOOK_JDG, delayTimer ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } break; case M01_SEND_CHURCH_CHINOOK_JDG: //here comes player start calling in reinforcements { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SEND_CHURCH_CHINOOK_JDG, 0 ); } } break; case M01_CALL_IN_REINFORCEMENTS_JDG: //here comes player start calling in reinforcements { if (obj && deadYet == false) { GameObject * nodCommanderDialogController = Commands->Find_Object ( 103398 ); if (nodCommanderDialogController != NULL) { Commands->Send_Custom_Event( obj, nodCommanderDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } float delayTimer = Commands->Get_Random ( 15, 30 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, delayTimer ); } } break; } } } }; DECLARE_SCRIPT(M01_GDI_Base_Artillery_Controller_JDG, "")//M01_GDIBASE_ARTILLERY_CONTROLLER_ID 102294 { Vector3 locs[35]; Vector3 sound_location; int last; int bomb_sound; float delayTimerMin; float delayTimerMax; bool command_clearance; REGISTER_VARIABLES() { SAVE_VARIABLE(sound_location, 1); SAVE_VARIABLE(last, 2); SAVE_VARIABLE(bomb_sound, 3); SAVE_VARIABLE(command_clearance, 4); SAVE_VARIABLE(delayTimerMin, 5); SAVE_VARIABLE(delayTimerMax, 6); } void Created( GameObject * obj ) { locs[0] = Vector3(96.983f, -75.433f, -7.894f); locs[1] = Vector3(64.778f,-70.692f, -7.917f ); locs[2] = Vector3(39.923f, -55.085f, -6.986f); locs[3] = Vector3(64.088f, -51.238f, -1.130f); locs[4] = Vector3(90.243f, -42.054f, 7.820f); locs[5] = Vector3(101.932f, -22.724f, 3.892f); locs[6] = Vector3(110.260f, 6.870f, 11.455f); locs[7] = Vector3(104.993f, 34.865f, 7.102f); locs[8] = Vector3(88.132f, 31.827f, 9.156f); locs[9] = Vector3(82.538f, -2.162f, 7.260f); locs[10] = Vector3(73.697f, 10.886f, 10.622f); locs[11] = Vector3(61.373f, -9.328f, 9.156f); locs[12] = Vector3(45.354f, -11.552f, 7.243f); locs[13] = Vector3(53.740f, -1.580f, 13.105f); locs[14] = Vector3(53.059f, 17.069f, 13.105f); locs[15] = Vector3(24.016f, 8.417f, 7.113f); locs[16] = Vector3(22.190f, -4.718f, 10.245f); locs[17] = Vector3(1.074f, -48.981f, -1.604f); locs[18] = Vector3(-17.956f, -48.856f, 3.441f); locs[19] = Vector3(-46.404f, -26.827f, 6.827f); locs[20] = Vector3(-40.934f, -20.838f, 2.387f); locs[21] = Vector3(9.578f, -17.054f, 7.419f); locs[22] = Vector3(-6.474f, -17.783f, 5.052f); locs[23] = Vector3(-8.360f, -6.935f, 11.862f); locs[24] = Vector3(5.836f, -4.874f, 17.664f); locs[25] = Vector3(-40.130f, -1.333f, 6.052f); locs[26] = Vector3(-43.953f, 5.812f, 14.117f); locs[27] = Vector3(-50.261f, 32.361f, 5.410f); locs[28] = Vector3(-50.813f, 48.439f, 11.585f); locs[29] = Vector3(-40.847f, 60.449f, 5.454f); locs[30] = Vector3(-36.209f, 68.892f, 14.059f); locs[31] = Vector3(-14.355f, 40.254f, 3.190f); locs[32] = Vector3(9.023f, 39.898f, 4.112f); locs[33] = Vector3(-5.525f, 41.241f, 12.043f); locs[34] = Vector3(24.496f, 52.051f, 9.968f); last = 40; delayTimerMin = 20; delayTimerMax = 30; command_clearance = true; Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 2 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_PICK_A_NEW_LOCATION_JDG: { if (command_clearance == true) { int random = int(Commands->Get_Random(0, 35-WWMATH_EPSILON)); while (random == last) { random = int(Commands->Get_Random(0, 35-WWMATH_EPSILON)); } last = random; sound_location = locs[random]; sound_location.Z += 10; bomb_sound = Commands->Create_Sound ( "Bomb_Falling_Sound_Twiddler", sound_location, obj ); Commands->Monitor_Sound ( obj, bomb_sound ); } } break; case M01_GOTO_IDLE_JDG: { command_clearance = false; if (sender == Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ))//your "commander" is dead--destroy yourself { Commands->Destroy_Object ( obj ); } } break; case M01_START_ACTING_JDG: { command_clearance = true; Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 2 ); } break; } if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == bomb_sound) { Vector3 explosion_location = sound_location; explosion_location.Z -= 10; Commands->Create_Explosion("Ground Explosions Twiddler", explosion_location); float delayTimer = Commands->Get_Random ( delayTimerMin, delayTimerMax ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } } } }; DECLARE_SCRIPT(M01_Nod_GuardTower_01_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-148.379f, 342.954f, 9.656f)); Commands->Attach_Script(sniperTarget01, "M01_GuardTower_Sniper_Target_JDG", "-157.390 363.504 10.695, 148.379 342.954 9.656"); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-149.930f, 338.900f, 9.170f)); Commands->Attach_Script(sniperTarget02, "M01_GuardTower_Sniper_Target_JDG", "-158.760 357.590 10.695, -149.930 338.900 9.170"); GameObject * sniperTarget03 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-146.812f, 339.745f, 9.345f)); Commands->Attach_Script(sniperTarget03, "M01_GuardTower_Sniper_Target_JDG", "-162.892 357.941 10.655, -146.812 339.745 9.345"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Nod_GuardTower_02_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-153.944f, 602.434f, 4.226f)); Commands->Attach_Script(sniperTarget01, "M01_GuardTower_Sniper_Target_JDG", "-141.665 573.039 4.409, -153.944 602.434 4.226"); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-156.672f, 605.082f, 4.163f)); Commands->Attach_Script(sniperTarget02, "M01_GuardTower_Sniper_Target_JDG", "-138.653 576.128 4.889, -156.672 605.082 4.163"); GameObject * sniperTarget03 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-160.792f, 606.559f, 4.075f)); Commands->Attach_Script(sniperTarget03, "M01_GuardTower_Sniper_Target_JDG", "-143.313 580.514 4.337, -160.792 606.559 4.075"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Nod_GuardTower_03_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-254.164f, 564.968f, 30.630f)); Commands->Attach_Script(sniperTarget01, "M01_GuardTower_Sniper_Target_JDG", "-221.487 556.431 25.927, -254.164 564.968 30.630"); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-253.935f, 561.105f, 30.922f)); Commands->Attach_Script(sniperTarget02, "M01_GuardTower_Sniper_Target_JDG", "-221.169 561.729 25.662, -253.935 561.105 30.922"); GameObject * sniperTarget03 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-257.185f, 562.242f, 30.540f)); Commands->Attach_Script(sniperTarget03, "M01_GuardTower_Sniper_Target_JDG", "-225.770 558.924 26.635, -257.185 562.242 30.540"); GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(-200.897f, 533.210f, 19.5f)); Commands->Attach_Script(controller1, "Test_Cinematic", "X1I_HON_Medlab_Chinook.txt"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GuardTower_Sniper_Target_JDG, "wave_location:vector3, delete_location:vector3") { Vector3 runToPosition; Vector3 leavePosition; REGISTER_VARIABLES() { SAVE_VARIABLE(runToPosition, 1); SAVE_VARIABLE(leavePosition, 2); } void Created( GameObject * obj ) { runToPosition = Get_Vector3_Parameter("wave_location"); leavePosition = Get_Vector3_Parameter("delete_location"); Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( runToPosition, RUN, 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 Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_FACING_SPECIFIED_DIRECTION_01_JDG) { char *animationName = M01_Choose_Search_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } 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: { 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_FACING_SPECIFIED_DIRECTION_01_JDG, 1 ); } break; case M01_DOING_ANIMATION_01_JDG: { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( leavePosition, RUN, 5); Commands->Action_Goto ( obj, params ); } break; case M01_WALKING_WAYPATH_02_JDG: { Commands->Destroy_Object ( obj ); } break; } } break; } } }; DECLARE_SCRIPT(M01_Gunboat_Spawn_Hovercraft_Zone_JDG, "")//this guys id is 102500 { /*bool okay_to_trigger; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_trigger, 1); } void Created( GameObject * obj ) { okay_to_trigger = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { okay_to_trigger = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if (okay_to_trigger == true) { if (enterer == Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SPAWN_THE_MEDIUM_TANK_JDG, 0 ); } } }*/ }; DECLARE_SCRIPT(M01_BasalBuilding_Population_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); float myHomeRadius = Commands->Get_Random ( 2, 10 ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, myHomeRadius ); } }; DECLARE_SCRIPT(M01_HarvesterScript_New_JDG, "") { int animation_count; bool damagedYet; bool deadYet; REGISTER_VARIABLES() { SAVE_VARIABLE(animation_count, 1); SAVE_VARIABLE(damagedYet, 2); SAVE_VARIABLE(deadYet, 3); } void Created( GameObject * obj ) { animation_count = 0; damagedYet = false; deadYet = false; ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); Vector3 loc (-103.5f, 375.6f, 19.0f); loc.X += Commands->Get_Random(-1.0f, 1.0f); loc.Y += Commands->Get_Random(-1.0f, 1.0f); params.Set_Movement(loc, 0.25f, 1); Commands->Action_Goto(obj, params); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damager == STAR) { if (damagedYet == false) { if (deadYet == false) { Commands->Send_Custom_Event ( obj, obj, 0, M01_START_ACTING_JDG, 0.25 ); } damagedYet = true; } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { if (deadYet == false) { int lockeHarvester = Commands->Create_Conversation( "M01_Add_Harvester_Objective", 100, 1000, true); Commands->Join_Conversation( NULL, lockeHarvester, false, false ); Commands->Start_Conversation( lockeHarvester, lockeHarvester ); } } } } void Killed( GameObject * obj, GameObject * killer ) { deadYet = true; Commands->Create_Sound ( "EVA_Nod_Unit_Destroyed", Vector3 (0,0,0), obj); Vector3 HarvesterDeathSpot (-93.9f, 426.6f, 21.0f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", HarvesterDeathSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); } void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { animation_count = 0; Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", false); } } void Animation_Complete(GameObject * obj, const char *anim) { if (animation_count <= 2) { Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", false); animation_count++; } else { Gather_Tiberium(); } } void Gather_Tiberium(void) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); Vector3 loc (-103.5f, 375.6f, 19.0f); loc.X += Commands->Get_Random(-3.0f, 3.0f); loc.Y += Commands->Get_Random(-3.0f, 3.0f); params.Set_Movement(loc, 0.25f, 2); Commands->Action_Goto(Owner(), params); } }; DECLARE_SCRIPT(M01_TibField_Guard01_New_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG) { GameObject * chemGuy01 = Commands->Find_Object ( 103270 ); GameObject * chemGuy02 = Commands->Find_Object ( 103271 ); GameObject * chemGuy03 = Commands->Find_Object ( 103272 ); if (chemGuy01 != NULL) { if (chemGuy02 != NULL) { if (chemGuy03 != NULL) { int tibFieldConv = Commands->Create_Conversation( "M01_TiberiumField_Conversation", 80, 25, true); Commands->Join_Conversation( chemGuy01, tibFieldConv); Commands->Join_Conversation( chemGuy02, tibFieldConv); Commands->Join_Conversation( chemGuy03, tibFieldConv); Commands->Start_Conversation( tibFieldConv, tibFieldConv ); } } } } } }; DECLARE_SCRIPT(M01_Barn_Babushkas_Conversation_Zone_JDG, "")//this guys ID is 101662 { bool okay_to_play_conversation; bool playerEntered; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_play_conversation, 1); SAVE_VARIABLE(playerEntered, 2); } void Created( GameObject * obj ) { okay_to_play_conversation = false; playerEntered = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//babushka is in position--give okay for conversation { okay_to_play_conversation = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CUE_BABUSHKA_CONVERSATION_JDG, 0 ); } else if (param == M01_CUE_BABUSHKA_CONVERSATION_JDG) { if (playerEntered == true && okay_to_play_conversation == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_BABUSHKA_CONVERSATION_JDG, 0 ); GameObject * babushkaZone = Commands->Find_Object ( 101662 ); GameObject * billyZone = Commands->Find_Object ( 101661 ); if (babushkaZone != NULL) { Commands->Destroy_Object ( babushkaZone );//this is one-time only zone--cleaning up } if (billyZone != NULL) { Commands->Destroy_Object ( billyZone );//this is one-time only zone--cleaning up } } } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { playerEntered = false; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { playerEntered = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CUE_BABUSHKA_CONVERSATION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Barn_Point_Guard_01_JDG, "")//this guys ID is 101439 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR) { Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); if (Commands->Find_Object ( 101658 )) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101658 ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 );//this is sent to his nearby buddy } } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_BARN_GUARD_IS_DEAD_JDG, 0 ); } }; DECLARE_SCRIPT(M01_Barn_Point_Guard_02_JDG, "")//this guys ID is 101658 { bool retreating; REGISTER_VARIABLES() { SAVE_VARIABLE(retreating, 1); } void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); retreating = false; Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 2.0f ); } /*void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_PLAYER_IS_ATTACKING_ME_JDG) { Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic(this, 60, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3 (-44.8f, 117.8f, 2.6f), .8f, 1 ); params.Set_Attack( STAR, 15, 0, true ); Commands->Action_Attack ( obj, params ); } }*/ void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR) { if (obj && retreating == false) { if (Commands->Get_Health (obj) > 0) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "WereOutGunned_2", myPosition, obj ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); //ActionParamsStruct params; //params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); //params.Set_Movement( Commands->Find_Object ( M01_BARN_PRISONER_01_ID ), 1, 5 ); //params.Set_Attack( STAR, 50, 0, true ); //Commands->Action_Attack ( obj, params ); retreating = true; } } } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_BARN_GUARD_IS_DEAD_JDG, 0 ); } }; DECLARE_SCRIPT(M01_Barn_Door_Guard_JDG, "")//this guys ID is M01_BARN_DOOR_GUARD_ID 101512 { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5.0f ); } //void Damaged( GameObject * obj, GameObject * damager, float amount ) //{ // Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_START_BARN_OBJECTIVE_JDG, 0 ); //} void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_BARN_GUARD_IS_DEAD_JDG, 0 ); } }; DECLARE_SCRIPT(M01_Barn_Talk_Guard_01_JDG, "")//this guys ID is M01_BARN_TALK_GUARD_01_ID 103318 { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5.0f ); } //void Damaged( GameObject * obj, GameObject * damager, float amount ) //{ // Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_START_BARN_OBJECTIVE_JDG, 0 ); //} void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_BARN_GUARD_IS_DEAD_JDG, 0 ); } }; DECLARE_SCRIPT(M01_BarnArea_AI_ExitZone_JDG, "")//112015 -- tunnel 112016 -- shack { int hovercraftGuyId; REGISTER_VARIABLES() { SAVE_VARIABLE(hovercraftGuyId, 1); } void Created( GameObject * obj ) { hovercraftGuyId = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_ROPE_IS_SENDING_ID_JDG) { hovercraftGuyId = param; } } void Entered( GameObject * obj, GameObject * enterer ) { GameObject * hovercraftGuy = Commands->Find_Object ( hovercraftGuyId ); if (hovercraftGuy != NULL && enterer == hovercraftGuy) { Commands->Send_Custom_Event( obj, hovercraftGuy, 0, M01_HOLD_YOUR_POSITION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_TurretBeach_GDI_Guy_01_JDG, "")// { int turretbeach_conv; REGISTER_VARIABLES() { SAVE_VARIABLE(turretbeach_conv, 1); } void Created( GameObject * obj ) { int myId = Commands->Get_ID ( obj ); GameObject * myExitZone01 = Commands->Find_Object ( 112015 ); GameObject * myExitZone02 = Commands->Find_Object ( 112016 ); if (myExitZone01 != NULL) { Commands->Send_Custom_Event( obj, myExitZone01, M01_ROPE_IS_SENDING_ID_JDG, myId, 0 ); } if (myExitZone02 != NULL) { Commands->Send_Custom_Event( obj, myExitZone02, M01_ROPE_IS_SENDING_ID_JDG, myId, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_HOLD_YOUR_POSITION_JDG) { ActionParamsStruct params; Commands->Action_Reset ( obj, 100 ); Vector3 myGuardSpot (-49.146f, 201.741f, 1.590f); params.Set_Basic( this, 55, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myGuardSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); Commands->Set_Innate_Soldier_Home_Location ( obj, myGuardSpot, 5 ); } } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.H_A_X1E_Run") == 0) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_HUNT_THE_PLAYER_JDG); params.Set_Movement(STAR, RUN, 6); Commands->Action_Goto(obj, params); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_HUNT_THE_PLAYER_JDG) { turretbeach_conv = Commands->Create_Conversation( "M01_TurretBeach_TurnOverTank_Conversation", 100, 50, true); Commands->Join_Conversation( obj, turretbeach_conv, true, true ); Commands->Start_Conversation( turretbeach_conv, turretbeach_conv ); Commands->Monitor_Conversation (obj, turretbeach_conv); } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == turretbeach_conv) { params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (-49.7f, 109.7f, 2.0f), RUN, 0.5f); Commands->Action_Goto(obj, params); } } else if (action_id == M01_WALKING_WAYPATH_01_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 10 ); } } }; DECLARE_SCRIPT(M01_TurretBeach_GDI_Guy_02_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.H_A_X1E_Run") == 0) { ActionParamsStruct params; GameObject * nearbyTailgun = Commands->Find_Object ( 101448 ); if (nearbyTailgun != NULL) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(nearbyTailgun, RUN, 0.5f); Commands->Action_Goto(obj, params); } else { params.Set_Basic(this, 80, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (-65.4f, 204.6f, 3.7f), RUN, 0.5f); Commands->Action_Goto(obj, params); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 10 ); } } }; DECLARE_SCRIPT(M01_DetentionPen_CivDeathMonitor, "") { bool damagedYet; REGISTER_VARIABLES() { SAVE_VARIABLE(damagedYet, 1); } void Created( GameObject * obj ) { damagedYet = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damagedYet == false) { damagedYet = true; Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0512I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0513I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Mission_Complete ( false ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103380 ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_GOING_TO_EVAC_SPOT02_JDG: { Vector3 myEvacSpot = Commands->Get_Position ( Commands->Find_Object ( 103380 ) ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT02_JDG); params.Set_Movement(myEvacSpot, RUN, 0.25f); Commands->Action_Goto(obj, params); } break; } } }; DECLARE_SCRIPT(M01_DetentionPen_GDIDeathMonitor, "") { bool damagedYet; REGISTER_VARIABLES() { SAVE_VARIABLE(damagedYet, 1); } void Created( GameObject * obj ) { damagedYet = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj && damagedYet == false) { damagedYet = true; Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0512I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0513I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Mission_Complete ( false ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103380 ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_GOING_TO_EVAC_SPOT02_JDG: { Vector3 myEvacSpot = Commands->Get_Position ( Commands->Find_Object ( 103381 ) ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT02_JDG); params.Set_Movement(myEvacSpot, RUN, 0.25f); Commands->Action_Goto(obj, params); } break; } } }; DECLARE_SCRIPT(M01_DetentionPen_Evac_Controller01_JDG, "")//103380 { //civGuy01 = 101929 //civGuy02 = 101930 //civGuy03 = 101931 int evac_waypath_id; int evac_helicopter_id; int deadPrisonerTally; REGISTER_VARIABLES() { SAVE_VARIABLE(evac_waypath_id, 1); SAVE_VARIABLE(evac_helicopter_id, 2); SAVE_VARIABLE(deadPrisonerTally, 3); } void Created( GameObject * obj ) { deadPrisonerTally = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG)//prisoner have been freed--call in air evac { GameObject * civGuy01 = Commands->Find_Object ( 101929 ); GameObject * civGuy02 = Commands->Find_Object ( 101930 ); GameObject * civGuy03 = Commands->Find_Object ( 101931 ); if ((civGuy01 != NULL) || (civGuy02 != NULL) || (civGuy03 != NULL) ) { //Vector3 evacPosition = Commands->Get_Position ( obj ); //GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); //Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_Detention_EvacAnim.txt"); } } else if (param == M01_CIVILIAN_KILLED_JDG) { deadPrisonerTally++; if (deadPrisonerTally == 1) { Commands->Mission_Complete ( false ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//civs are on board--send aircraft away { GameObject * evacChopper = Commands->Find_Object ( evac_helicopter_id ); GameObject * evacWaypath = Commands->Find_Object ( evac_waypath_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event ( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacWaypath != NULL) { Commands->Send_Custom_Event ( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_DetentionCiv_Air_Evac_Waypath_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_TransprtBone.XG_EV1_PathA") == 0) { Commands->Set_Animation ( obj, "XG_TransprtBone.XG_EV1_Pathloop", true ); } else if (stricmp(anim, "XG_TransprtBone.XG_EV1_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Set_Animation ( obj, "XG_TransprtBone.XG_EV1_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_DetentionCiv_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV1_trnsA") == 0) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV1_trnsloop", true ); Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); GameObject * civGuy01 = Commands->Find_Object ( 101929 ); GameObject * civGuy02 = Commands->Find_Object ( 101930 ); GameObject * civGuy03 = Commands->Find_Object ( 101931 ); if (civGuy01 != NULL) { Commands->Send_Custom_Event ( obj, civGuy01, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (civGuy02 != NULL) { Commands->Send_Custom_Event ( obj, civGuy02, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (civGuy03 != NULL) { Commands->Send_Custom_Event ( obj, civGuy03, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } } else if (stricmp(anim, "v_GDI_trnspt.XG_EV1_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV1_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * civGuy01 = Commands->Find_Object ( 101929 ); GameObject * civGuy02 = Commands->Find_Object ( 101930 ); GameObject * civGuy03 = Commands->Find_Object ( 101931 ); if ((civGuy01 != NULL) || (civGuy02 != NULL) || (civGuy03 != NULL) ) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else { GameObject * civController = Commands->Find_Object ( 103380 ); if (civController != NULL) { Commands->Send_Custom_Event ( obj, civController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } break; } } }; DECLARE_SCRIPT(M01_DetentionPen_Evac_Controller02_JDG, "")//103381 { //gdiGuy01 = 101926 //gdiGuy02 = 101927 //gdiGuy03 = 101928 int evac_waypath_id; int evac_helicopter_id; REGISTER_VARIABLES() { SAVE_VARIABLE(evac_waypath_id, 1); SAVE_VARIABLE(evac_helicopter_id, 2); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG)//prisoner have been freed--call in air evac { GameObject * civGuy01 = Commands->Find_Object ( 101929 ); GameObject * civGuy02 = Commands->Find_Object ( 101930 ); GameObject * civGuy03 = Commands->Find_Object ( 101931 ); if ((civGuy01 != NULL) || (civGuy02 != NULL) || (civGuy03 != NULL) ) { //Vector3 evacPosition = Commands->Get_Position ( obj ); //GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); //Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_Detention_EvacAnim.txt"); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//civs are on board--send aircraft away { GameObject * evacChopper = Commands->Find_Object ( evac_helicopter_id ); GameObject * evacWaypath = Commands->Find_Object ( evac_waypath_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event ( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacWaypath != NULL) { Commands->Send_Custom_Event ( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_DetentionGDI_Air_Evac_Waypath_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_TransprtBone.XG_EV1_PathA") == 0) { Commands->Set_Animation ( obj, "XG_TransprtBone.XG_EV1_Pathloop", true ); } else if (stricmp(anim, "XG_TransprtBone.XG_EV1_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Set_Animation ( obj, "XG_TransprtBone.XG_EV1_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_DetentionGDI_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV1_trnsA") == 0) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV1_trnsloop", true ); Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); GameObject * GDIGuy01 = Commands->Find_Object ( 101926 ); GameObject * GDIGuy02 = Commands->Find_Object ( 101927 ); GameObject * GDIGuy03 = Commands->Find_Object ( 101928 ); if (GDIGuy01 != NULL) { Commands->Send_Custom_Event ( obj, GDIGuy01, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (GDIGuy02 != NULL) { Commands->Send_Custom_Event ( obj, GDIGuy02, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (GDIGuy03 != NULL) { Commands->Send_Custom_Event ( obj, GDIGuy03, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } } else if (stricmp(anim, "v_GDI_trnspt.XG_EV1_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV1_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * GDIGuy01 = Commands->Find_Object ( 101926 ); GameObject * GDIGuy02 = Commands->Find_Object ( 101927 ); GameObject * GDIGuy03 = Commands->Find_Object ( 101928 ); if ((GDIGuy01 != NULL) || (GDIGuy02 != NULL) || (GDIGuy03 != NULL) ) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else { GameObject * civController = Commands->Find_Object ( 103381 ); if (civController != NULL) { Commands->Send_Custom_Event ( obj, civController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } break; } } }; DECLARE_SCRIPT(M01_Nod_Chinook_Reinforcement_Guy_JDG, "")// { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Vector3 offset; offset.X = Commands->Get_Random(1, 3); offset.Y = Commands->Get_Random(1, 3); offset.Z = 0; ActionParamsStruct params; params.Set_Basic(this, 100, 10); params.Set_Movement(Commands->Get_Position(obj) + offset, 1.0f, 0.25f); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_HUNT_THE_PLAYER_JDG, 1 ); } } }; DECLARE_SCRIPT(M01_Hunt_The_Player_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); Commands->Start_Timer ( obj, this, 60, M01_GOTO_IDLE_JDG ); Commands->Start_Timer ( obj, this, 5, M01_HUNT_THE_PLAYER_JDG ); ActionParamsStruct params; params.Set_Basic( this, 45, M01_FACING_SPECIFIED_DIRECTION_01_JDG ); params.Set_Movement( STAR, RUN, 1, false ); Commands->Action_Goto ( obj, params ); } 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 >= 80) { 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 ); } } else if (timer_id == M01_HUNT_THE_PLAYER_JDG) { if (obj) { ActionParamsStruct params; params.Set_Basic( this, 45, M01_FACING_SPECIFIED_DIRECTION_01_JDG ); params.Set_Movement( STAR, RUN, 1, false ); Commands->Action_Goto ( obj, params ); Commands->Start_Timer ( obj, this, 5, M01_HUNT_THE_PLAYER_JDG ); } } } }; DECLARE_SCRIPT(M01_HON_Escorts_Warroom_MCT_Commander_JDG, "")//103373 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG)//here come the mct escorts--run into mct room { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myHomeSpot(-181.1f, 541.4f, 3.5f); ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(myHomeSpot, RUN, 0.25f); 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->Set_Innate_Is_Stationary ( obj, true ); ActionParamsStruct params; params.Set_Basic(this, 45, M01_START_ATTACKING_01_JDG); params.Set_Attack( STAR, 50, 0, false ); Commands->Action_Attack (obj, params); } } }; DECLARE_SCRIPT(M01_HON_Escorts_Warroom_MCT_Protector01_JDG, "")//103374 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } }; DECLARE_SCRIPT(M01_HON_Escorts_Warroom_MCT_Protector02_JDG, "")//103375 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } }; DECLARE_SCRIPT(M01_HON_Engineer02_JDG, "")//101948 { bool repairSoundPlaying; REGISTER_VARIABLES() { SAVE_VARIABLE(repairSoundPlaying, 1); } void Created( GameObject * obj ) { repairSoundPlaying = false; Commands->Set_Innate_Is_Stationary ( obj, true ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_PLAYER_IS_ATTACKING_ME_JDG) { Commands->Enable_Hibernation( obj, false ); Vector3 myRepairSpot (-178.925f, 542.943f, 4.932f); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myRepairSpot, 10, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Start_Timer ( obj, this, 2, M01_START_ACTING_JDG ); } } void Timer_Expired( GameObject * obj, int timer_id ) { if (timer_id == M01_START_ACTING_JDG) { Commands->Enable_Hibernation( obj, true ); Commands->Action_Reset ( obj, 100 ); Vector3 repair_sound_spot (-175.074f, 533.086f, 19.327f); GameObject * handOfNod = Commands->Find_Object ( M01_HAND_OF_NOD_JDG ); float hon_max_health = Commands->Get_Max_Health ( handOfNod ); float hon_max_shield = Commands->Get_Max_Shield_Strength ( handOfNod ); float hon_current_health = Commands->Get_Health ( handOfNod ); if (hon_current_health > 0) { Commands->Set_Health ( handOfNod, hon_max_health ); Commands->Set_Shield_Strength ( handOfNod, hon_max_shield ); if (repairSoundPlaying == false) { Commands->Create_Sound ( "CnC_Healer_Sound", repair_sound_spot, obj ); repairSoundPlaying = true; Commands->Start_Timer ( obj, this, 5, M01_GOTO_IDLE_JDG ); } } } else if (timer_id == M01_GOTO_IDLE_JDG) { repairSoundPlaying = false; } } }; DECLARE_SCRIPT(M01_HON_Chinook_Spawned_Soldier_03_GDI_JDG, "") { int buggy_id; REGISTER_VARIABLES() { SAVE_VARIABLE(buggy_id, 1); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Vector3 myHomeSpot(-209.853f, 505.532f, 4.017f);//going to hand of nod backside ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(myHomeSpot, RUN, 3); Commands->Action_Goto(obj, params); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { GameObject * buggyController = Commands->Find_Object ( 103367 ); if (buggyController != NULL) { Commands->Send_Custom_Event ( obj, buggyController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_MODIFY_YOUR_ACTION_JDG) { buggy_id = param; GameObject * buggy = Commands->Find_Object ( buggy_id ); if (buggy != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( buggy, 20, 3, true ); Commands->Action_Attack( obj, params ); } } } }; DECLARE_SCRIPT(M01_HON_Chinook_Spawned_Soldier_04_GDI_JDG, "") { int buggy_id; REGISTER_VARIABLES() { SAVE_VARIABLE(buggy_id, 1); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Vector3 myHomeSpot(-204.157f, 508.650f, 4.017f);//going to hand of nod backside ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(myHomeSpot, RUN, 3); Commands->Action_Goto(obj, params); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == M01_MODIFY_YOUR_ACTION_JDG) { buggy_id = param; GameObject * buggy = Commands->Find_Object ( buggy_id ); if (buggy != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( buggy, 20, 3, true ); Commands->Action_Attack( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == M01_WALKING_WAYPATH_01_JDG) { GameObject * buggyController = Commands->Find_Object ( 103367 ); if (buggyController != NULL) { Commands->Send_Custom_Event ( obj, buggyController, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_BuggyNew_Controller_JDG, "")//this guys id is 103367 { int buggy_id; bool gdi_minigunner_01_inPlace; bool gdi_minigunner_02_inPlace; REGISTER_VARIABLES() { SAVE_VARIABLE(buggy_id, 1); SAVE_VARIABLE(gdi_minigunner_01_inPlace, 2); SAVE_VARIABLE(gdi_minigunner_02_inPlace, 3); } void Created( GameObject * obj ) { gdi_minigunner_01_inPlace = false; gdi_minigunner_02_inPlace = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_START_ACTING_JDG) { Vector3 spawnLocation (-233.946f, 494.424f, 5.234f); GameObject *buggy = Commands->Create_Object("Nod_Buggy", spawnLocation); Commands->Set_Facing ( buggy, -135 ); Commands->Attach_Script(buggy, "M01_BuggyScript_New_JDG", ""); buggy_id = Commands->Get_ID ( buggy ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { gdi_minigunner_01_inPlace = true; int minigunner01_id = Commands->Get_ID ( sender ); GameObject *buggy = Commands->Find_Object ( buggy_id ); if (buggy != NULL) { Commands->Send_Custom_Event ( obj, buggy, M01_MODIFY_YOUR_ACTION_02_JDG, minigunner01_id, 0 ); Commands->Send_Custom_Event ( obj, sender, M01_MODIFY_YOUR_ACTION_JDG, buggy_id, 0 ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { gdi_minigunner_02_inPlace = true; int minigunner02_id = Commands->Get_ID ( sender ); GameObject *buggy = Commands->Find_Object ( buggy_id ); if (buggy != NULL) { Commands->Send_Custom_Event ( obj, buggy, M01_MODIFY_YOUR_ACTION_03_JDG, minigunner02_id, 0 ); Commands->Send_Custom_Event ( obj, sender, M01_MODIFY_YOUR_ACTION_JDG, buggy_id, 0 ); } } } }; DECLARE_SCRIPT(M01_BuggyScript_New_JDG, "") { int minigunner01_id; int minigunner02_id; REGISTER_VARIABLES() { SAVE_VARIABLE(minigunner01_id, 1); SAVE_VARIABLE(minigunner02_id, 2); } void Created( GameObject * obj ) { Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, true ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.WaypointStartID = 103290; params.AttackActive = false; Commands->Action_Attack( obj, params ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 2 ); float myMaxHealth = Commands->Get_Max_Health ( obj ); float myNewHealth = myMaxHealth / 2; Commands->Set_Health ( obj, myNewHealth ); float myMaxShield = Commands->Get_Max_Shield_Strength ( obj ); float myNewShield = myMaxShield / 2; Commands->Set_Shield_Strength ( obj, myNewShield ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Create_Sound ( "EVA_Nod_Unit_Destroyed", Vector3 (0,0,0), obj); Vector3 buggyDeathSpot (-217.0f, 499.4f, 4.0f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", buggyDeathSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); } 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_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.AttackActive = false; Commands->Action_Attack( obj, params ); Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 1 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == M01_MODIFY_YOUR_ACTION_02_JDG) { minigunner01_id = param; Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); } else if (type == M01_MODIFY_YOUR_ACTION_03_JDG) { minigunner02_id = param; Commands->Send_Custom_Event ( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.Set_Attack( STAR, 50, 2, true ); Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_01_JDG, params, false, true ); } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG) { GameObject * minigunner01 = Commands->Find_Object ( minigunner01_id ); GameObject * minigunner02 = Commands->Find_Object ( minigunner02_id ); if (minigunner01 != NULL) { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.Set_Attack( minigunner01, 50, 2, true ); Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_01_JDG, params, false, true ); } else if (minigunner02 != NULL) { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.Set_Attack( minigunner02, 50, 2, true ); Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_01_JDG, params, false, true ); } else { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), 0.5f, 5 ); params.WaypathID = 103289; params.Set_Attack( STAR, 50, 2, true ); Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_01_JDG, params, false, true ); } } } }; DECLARE_SCRIPT(M01_Priest_Conversation_Zone_JDG, "")//this guys ID is 103395 M01_PriestReminder_Conversation { bool okay_to_play_conversation; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_play_conversation, 1); } void Created( GameObject * obj ) { okay_to_play_conversation = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//priest is in position--give okay for conversation { okay_to_play_conversation = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (okay_to_play_conversation == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_PRIEST_CONVERSATION_JDG, 0 ); Commands->Destroy_Object ( obj );//this is one-time only zone--cleaning up } } } }; DECLARE_SCRIPT(M01_Loveshack_Nun_Conversation_Zone_JDG, "")//this guys ID is 101368 { bool okay_to_play_conversation; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_play_conversation, 1); } void Created( GameObject * obj ) { okay_to_play_conversation = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//nun is in position--give okay for conversation { okay_to_play_conversation = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (okay_to_play_conversation == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_LOVESHACK_NUN_CONVERSATION_JDG, 0 ); Commands->Destroy_Object ( obj );//this is one-time only zone--cleaning up } } } }; DECLARE_SCRIPT(M01_Interior_Nun_Conversation_Zone_JDG, "")//this guys ID is #101370 { bool okay_to_play_conversation; REGISTER_VARIABLES() { SAVE_VARIABLE(okay_to_play_conversation, 1); } void Created( GameObject * obj ) { okay_to_play_conversation = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ((param == M01_START_ACTING_JDG))//nun is in position--give okay for conversation { okay_to_play_conversation = true; } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { if (okay_to_play_conversation == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_INTERIOR_NUN_CONVERSATION_JDG, 0 ); Commands->Destroy_Object ( obj );//this is one-time only zone--cleaning up } } } }; DECLARE_SCRIPT(M01_Church_Guard_MiniGunner_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { if (obj) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( STAR, WALK, 5 ); params.Set_Attack( STAR, 15, 0, true ); Commands->Action_Attack ( obj, params ); } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CHURCH_GUARD_IS_DEAD_JDG, 0 ); GameObject * havocExitZone = Commands->Find_Object ( 103393 ); if (havocExitZone != NULL) { Commands->Send_Custom_Event( obj, havocExitZone, 0, M01_CHURCH_GUARD_IS_DEAD_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Church_Loveshack_InterrogationConv_Zone_JDG, "")//103392 { bool conversation_triggered; REGISTER_VARIABLES() { SAVE_VARIABLE(conversation_triggered, 1); } void Created( GameObject * obj ) { conversation_triggered = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR && conversation_triggered == false) { conversation_triggered = true; GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); GameObject * loveshackGuard = Commands->Find_Object ( M01_CHURCH_LOVESHACK_MINIGUNNER_ID ); if ((loveshackNun != NULL) && (loveshackGuard != NULL)) { int loveshackConv = Commands->Create_Conversation( "M01_Loveshack_Conversation_JDG", 90, 50, true); Commands->Join_Conversation( loveshackGuard, loveshackConv, false, true, true ); Commands->Join_Conversation( loveshackNun, loveshackConv, false, true, true ); Commands->Start_Conversation( loveshackConv, loveshackConv ); } Commands->Destroy_Object ( obj );//cleaning up this zone } } }; DECLARE_SCRIPT(M01_GDI_Escort_Conversation_Controller_GDI, "")//103396 { bool first_time_at_escort_limit; REGISTER_VARIABLES() { SAVE_VARIABLE(first_time_at_escort_limit, 1); } void Created( GameObject * obj ) { first_time_at_escort_limit = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//gdi escort has been poked to follow player { int random = Commands->Get_Random_Int(0, 3); if (random == 0) { int pokeYesConv01 = Commands->Create_Conversation( "M01_GDI_Escort_Yes01", 90, 50, true); Commands->Join_Conversation( STAR, pokeYesConv01, false, false, false ); Commands->Join_Conversation( sender, pokeYesConv01, false, false, false ); Commands->Start_Conversation( pokeYesConv01, pokeYesConv01 ); } else if (random == 1) { int pokeYesConv01 = Commands->Create_Conversation( "M01_GDI_Escort_Yes02", 90, 50, true); Commands->Join_Conversation( STAR, pokeYesConv01, false, false, false ); Commands->Join_Conversation( sender, pokeYesConv01, false, false, false ); Commands->Start_Conversation( pokeYesConv01, pokeYesConv01 ); } else { int pokeYesConv01 = Commands->Create_Conversation( "M01_GDI_Escort_Yes03", 90, 50, true); Commands->Join_Conversation( STAR, pokeYesConv01, false, false, false ); Commands->Join_Conversation( sender, pokeYesConv01, false, false, false ); Commands->Start_Conversation( pokeYesConv01, pokeYesConv01 ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//gdi escort has been poked to stop following player { } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG)//gdi escort has reached his escort limits { if (first_time_at_escort_limit == true) { first_time_at_escort_limit = false; int pokeLimitConv01 = Commands->Create_Conversation( "M01_GDI_Escort_MustStayHere01", 90, 50, true); Commands->Join_Conversation( sender, pokeLimitConv01, false, false, false ); Commands->Join_Conversation( STAR, pokeLimitConv01, false, false, false ); Commands->Start_Conversation( pokeLimitConv01, pokeLimitConv01 ); } else { int pokeLimitConv01 = Commands->Create_Conversation( "M01_GDI_Escort_MustStayHere02", 90, 50, true); Commands->Join_Conversation( sender, pokeLimitConv01, false, false, false ); Commands->Join_Conversation( STAR, pokeLimitConv01, false, false, false ); Commands->Start_Conversation( pokeLimitConv01, pokeLimitConv01 ); } } } }; DECLARE_SCRIPT(M01_CHURCH_Chinook_Spawned_Soldier01_GDI, "") { typedef enum { ESCORTING, NOT_ESCORTING, } M01_State; M01_State thisGuysState; int initialEscortConv; REGISTER_VARIABLES() { SAVE_VARIABLE(thisGuysState, 1); SAVE_VARIABLE(initialEscortConv, 2); } void Created( GameObject * obj ) { thisGuysState = NOT_ESCORTING; } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_GDI_GUY_HAS_BEEN_POKED_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (thisGuysState == ESCORTING) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(STAR, RUN, 5); 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) { if (obj && STAR) { initialEscortConv = Commands->Create_Conversation( "M01_FirstEscort_Conversation", 100, 50, true); Commands->Join_Conversation( obj, initialEscortConv, true, true, true ); Commands->Join_Conversation( STAR, initialEscortConv, true, true, true ); Commands->Start_Conversation( initialEscortConv, initialEscortConv ); Commands->Monitor_Conversation (obj, initialEscortConv); } } if (action_id == M01_GOING_TO_HAVOC_JDG && thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == initialEscortConv) { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 0 ); } } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if ((param == M01_PICK_A_NEW_LOCATION_JDG) && (thisGuysState != ESCORTING) ) { Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 6.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-139.048f, 318.861f, 9.066f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-81.160f, 333.117f, 10.131f); } else if (pick_my_home_spot >= 2.5 && pick_my_home_spot < 3.5) { homeSpot.Set (-138.786f, 388.250f, 15.093f); } else if (pick_my_home_spot >= 3.5 && pick_my_home_spot < 4.5) { homeSpot.Set (-140.785f, 348.389f, 21.931f); } else if (pick_my_home_spot >= 4.5 && pick_my_home_spot < 5.5) { homeSpot.Set (-140.792f, 342.980f, 10.387f); } else { homeSpot.Set (-126.169f, 335.223f, 8.997f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 10 ); params.Set_Basic(this, 50, M01_PICK_A_NEW_LOCATION_JDG); params.Set_Movement(homeSpot, RUN, 3); Commands->Action_Goto(obj, params); float delayTimer = Commands->Get_Random ( 10, 60 ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } else if (param == M01_PLEASE_START_ESCORTING_PLAYER_JDG) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); thisGuysState = ESCORTING; } else if (param == M01_PLEASE_STOP_ESCORTING_PLAYER_JDG) { Commands->Action_Reset ( obj, 100 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); thisGuysState = NOT_ESCORTING; } else if ((type == M01_PLAYER_IS_ATTACKING_ME_JDG) && (thisGuysState == ESCORTING) ) { GameObject * myTarget = Commands->Find_Object ( param ); if (myTarget != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( myTarget, RUN, 5 ); params.AttackActive = true; params.Set_Attack (myTarget, 50, 0, true); Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } else if ((param == M01_PLAYER_IS_LEAVING_CHURCH_01_JDG) && (thisGuysState == ESCORTING)) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); thisGuysState = NOT_ESCORTING; Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 3.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-160.217f, 446.353f, 34.976f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-173.371f, 437.383f, 29.711f); } else { homeSpot.Set (-138.958f, 435.696f, 27.001f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 3 ); params.Set_Basic(this, 50, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(homeSpot, WALK, 3); Commands->Action_Goto(obj, params); } else if ((param == M01_PLAYER_IS_LEAVING_CHURCH_02_JDG) && (thisGuysState == ESCORTING)) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); thisGuysState = NOT_ESCORTING; Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 3.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-36.192f, 319.671f, 5.226f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-49.614f, 363.304f, 10.816f); } else { homeSpot.Set (-66.361f, 339.288f, 8.772f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 3 ); params.Set_Basic(this, 50, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(homeSpot, WALK, 3); Commands->Action_Goto(obj, params); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { ActionParamsStruct params; if (thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( enemy, RUN, 5 ); params.Set_Attack( enemy, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { ActionParamsStruct params; if (damager != NULL) { int attackersType = Commands->Get_Player_Type ( damager ); if (attackersType != SCRIPT_PLAYERTYPE_NOD) { } else { if (thisGuysState == ESCORTING && damager != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( damager, RUN, 5 ); params.Set_Attack( damager, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } } } }; DECLARE_SCRIPT(M01_CHURCH_Chinook_Spawned_Soldier02_GDI, "") { typedef enum { ESCORTING, NOT_ESCORTING, } M01_State; M01_State thisGuysState; REGISTER_VARIABLES() { SAVE_VARIABLE(thisGuysState, 1); } void Created( GameObject * obj ) { thisGuysState = NOT_ESCORTING; } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_GDI_GUY_HAS_BEEN_POKED_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (thisGuysState == ESCORTING) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 0 ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_GOING_TO_HAVOC_JDG && thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if ((param == M01_PICK_A_NEW_LOCATION_JDG) && (thisGuysState != ESCORTING) ) { Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 6.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-139.048f, 318.861f, 9.066f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-81.160f, 333.117f, 10.131f); } else if (pick_my_home_spot >= 2.5 && pick_my_home_spot < 3.5) { homeSpot.Set (-138.786f, 388.250f, 15.093f); } else if (pick_my_home_spot >= 3.5 && pick_my_home_spot < 4.5) { homeSpot.Set (-140.785f, 348.389f, 21.931f); } else if (pick_my_home_spot >= 4.5 && pick_my_home_spot < 5.5) { homeSpot.Set (-140.792f, 342.980f, 10.387f); } else { homeSpot.Set (-126.169f, 335.223f, 8.997f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 10 ); params.Set_Basic(this, 50, M01_PICK_A_NEW_LOCATION_JDG); params.Set_Movement(homeSpot, RUN, 3); Commands->Action_Goto(obj, params); float delayTimer = Commands->Get_Random ( 10, 60 ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } else if (param == M01_PLEASE_START_ESCORTING_PLAYER_JDG) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); thisGuysState = ESCORTING; } else if (param == M01_PLEASE_STOP_ESCORTING_PLAYER_JDG) { Commands->Action_Reset ( obj, 100 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); thisGuysState = NOT_ESCORTING; } else if ((type == M01_PLAYER_IS_ATTACKING_ME_JDG) && (thisGuysState == ESCORTING) ) { GameObject * myTarget = Commands->Find_Object ( param ); if (myTarget != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( myTarget, RUN, 5 ); params.AttackActive = true; params.Set_Attack (myTarget, 50, 0, true); Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } else if ((param == M01_PLAYER_IS_LEAVING_CHURCH_01_JDG) && (thisGuysState == ESCORTING)) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); thisGuysState = NOT_ESCORTING; Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 3.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-160.217f, 446.353f, 34.976f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-173.371f, 437.383f, 29.711f); } else { homeSpot.Set (-138.958f, 435.696f, 27.001f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 3 ); params.Set_Basic(this, 50, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(homeSpot, WALK, 3); Commands->Action_Goto(obj, params); } else if ((param == M01_PLAYER_IS_LEAVING_CHURCH_02_JDG) && (thisGuysState == ESCORTING)) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); thisGuysState = NOT_ESCORTING; Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 3.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-36.192f, 319.671f, 5.226f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-49.614f, 363.304f, 10.816f); } else { homeSpot.Set (-66.361f, 339.288f, 8.772f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 3 ); params.Set_Basic(this, 50, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(homeSpot, WALK, 3); Commands->Action_Goto(obj, params); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { ActionParamsStruct params; if (thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( enemy, RUN, 5 ); params.Set_Attack( enemy, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { ActionParamsStruct params; if (damager != NULL) { int attackersType = Commands->Get_Player_Type ( damager ); if (attackersType != SCRIPT_PLAYERTYPE_NOD) { } else { if (thisGuysState == ESCORTING && damager != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( damager, RUN, 5 ); params.Set_Attack( damager, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } } } }; DECLARE_SCRIPT(M01_COMM_Chinook_Spawned_Soldier_GDI, "") { typedef enum { ESCORTING, NOT_ESCORTING, } M01_State; M01_State thisGuysState; REGISTER_VARIABLES() { SAVE_VARIABLE(thisGuysState, 1); } void Created( GameObject * obj ) { thisGuysState = NOT_ESCORTING; } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_GDI_GUY_HAS_BEEN_POKED_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (thisGuysState == ESCORTING) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYERS_ESCORT_HAS_BEEN_KILLED_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 0 ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_GOING_TO_HAVOC_JDG && thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); } } } void Custom(GameObject * obj, int type, int param, GameObject * sender) { ActionParamsStruct params; if ((param == M01_PICK_A_NEW_LOCATION_JDG) && (thisGuysState == NOT_ESCORTING) ) { Vector3 homeSpot; Commands->Action_Reset ( obj, 100 ); float pick_my_home_spot = Commands->Get_Random ( 0.5f, 6.5f ); if (pick_my_home_spot >= 0.5 && pick_my_home_spot < 1.5) { homeSpot.Set (-277.309f, 468.428f, 18.553f); } else if (pick_my_home_spot >= 1.5 && pick_my_home_spot < 2.5) { homeSpot.Set (-271.237f, 535.962f, 27.935f); } else if (pick_my_home_spot >= 2.5 && pick_my_home_spot < 3.5) { homeSpot.Set (-247.278f, 563.557f, 30.610f); } else if (pick_my_home_spot >= 3.5 && pick_my_home_spot < 4.5) { homeSpot.Set (-296.349f, 583.760f, 27.739f); } else if (pick_my_home_spot >= 4.5 && pick_my_home_spot < 5.5) { homeSpot.Set (-313.597f, 568.022f, 27.740f); } else { homeSpot.Set (-301.160f, 523.405f, 16.583f); } Commands->Set_Innate_Soldier_Home_Location ( obj, homeSpot, 10 ); params.Set_Basic(this, 50, 20); params.Set_Movement(homeSpot, RUN, 3); Commands->Action_Goto(obj, params); float delayTimer = Commands->Get_Random ( 10, 60 ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, delayTimer ); } else if (param == M01_PLEASE_START_ESCORTING_PLAYER_JDG) { GameObject * escortDialogController = Commands->Find_Object ( 103396 ); if (escortDialogController != NULL) { Commands->Send_Custom_Event( obj, escortDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( STAR, RUN + 0.2f, 2 ); Commands->Action_Attack (obj, params); thisGuysState = ESCORTING; } else if (param == M01_PLEASE_STOP_ESCORTING_PLAYER_JDG) { Commands->Action_Reset ( obj, 100 ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); thisGuysState = NOT_ESCORTING; } else if ((type == M01_PLAYER_IS_ATTACKING_ME_JDG) && (thisGuysState == ESCORTING) ) { GameObject * myTarget = Commands->Find_Object ( param ); if (myTarget != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( myTarget, RUN, 5 ); params.AttackActive = true; params.Set_Attack (myTarget, 50, 0, true); Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); Commands->Debug_Message ( "**********************Player's escort has received orders to attack havocs target\n" ); } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { ActionParamsStruct params; if (thisGuysState == ESCORTING) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( enemy, RUN, 5 ); params.Set_Attack( enemy, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { ActionParamsStruct params; if (damager != NULL) { int attackersType = Commands->Get_Player_Type ( damager ); if (attackersType != SCRIPT_PLAYERTYPE_NOD) { } else { if (thisGuysState == ESCORTING && damager != NULL) { params.Set_Basic( this, 100, M01_GOING_TO_HAVOC_JDG ); params.Set_Movement( damager, RUN, 5 ); params.Set_Attack( damager, 50, 0, true ); params.AttackActive = true; params.AttackCheckBlocked = true; Commands->Modify_Action ( obj, M01_GOING_TO_HAVOC_JDG, params, true, true ); } } } } }; DECLARE_SCRIPT(M01_Barn_Truck_JDG, "")// { void Killed( GameObject * obj, GameObject * killer ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Vehicle", myPosition, NULL ); } }; DECLARE_SCRIPT(M01_GDIBase_EvacMonitor_JDG, "")//M01_GDIBASE_EVAC_MONITOR_JDG { int unitsEvacuated; REGISTER_VARIABLES() { SAVE_VARIABLE(unitsEvacuated, 1); } void Created( GameObject * obj ) { unitsEvacuated = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_GOING_TO_EVAC_SPOT_JDG) { unitsEvacuated++; if (unitsEvacuated == 4) { int airdrop_conv = Commands->Create_Conversation( "M01_AirDrop_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, airdrop_conv, false, false ); Commands->Start_Conversation( airdrop_conv, airdrop_conv ); Vector3 airDropSpot (-32.247f, 36.075f, 0.547f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", airDropSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_ChurchArea_EvacMonitor_JDG, "")//M01_CHURCHAREA_EVAC_MONITOR_JDG { int unitsEvacuated; REGISTER_VARIABLES() { SAVE_VARIABLE(unitsEvacuated, 1); } void Created( GameObject * obj ) { unitsEvacuated = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_GOING_TO_EVAC_SPOT_JDG) { unitsEvacuated++; if (unitsEvacuated == 3) { int airdrop_conv = Commands->Create_Conversation( "M01_AirDrop_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, airdrop_conv, false, false ); Commands->Start_Conversation( airdrop_conv, airdrop_conv ); Vector3 airDropSpot (-158.807f, 351.532f, 10.353f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", airDropSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_MovieProjector_JDG, "")//103942 {// bool destroyed; REGISTER_VARIABLES() { SAVE_VARIABLE(destroyed, 1); } void Created( GameObject * obj ) { destroyed = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR && destroyed == false) { destroyed = true; Commands->Set_Animation ( obj, "DSP_PROJECTOR.DSP_PROJECTOR", false, NULL, 0, 9 ); GameObject * propagandaController = Commands->Find_Object ( 103099 ); if (propagandaController != NULL) { Commands->Send_Custom_Event( obj, propagandaController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Explosion ( "Explosion_Barrel_Fuel", myPosition, NULL ); } Commands->Set_Health ( obj, 0.25f ); } }; DECLARE_SCRIPT(M01_Propaganda_Sounds_Controller_JDG, "")//this guys ID is 103099 { int last; int displayScreen_ID; int monitor_sound01; int monitor_sound02; int monitor_sound03; bool destroyed; int propaganda_number; bool soundPlaying; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); SAVE_VARIABLE(displayScreen_ID, 2); SAVE_VARIABLE(monitor_sound01, 3); SAVE_VARIABLE(destroyed, 4); SAVE_VARIABLE(propaganda_number, 5); SAVE_VARIABLE(soundPlaying, 6); SAVE_VARIABLE(monitor_sound02, 7); SAVE_VARIABLE(monitor_sound03, 8); } void Created(GameObject * obj) { last = 0; displayScreen_ID = 0; monitor_sound01 = 0; monitor_sound02 = 0; monitor_sound03 = 0; destroyed = false; propaganda_number = 0; soundPlaying = false; } void Custom(GameObject * obj, int type, int param, GameObject * sender) { if (type == 0) { if (obj && param == M01_MODIFY_YOUR_ACTION_JDG) { soundPlaying = false; GameObject * oldDisplayScreen = Commands->Find_Object ( displayScreen_ID); if (oldDisplayScreen != NULL) { Commands->Destroy_Object ( oldDisplayScreen ); } Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 2 ); } //if (obj && type == CUSTOM_EVENT_SOUND_ENDED ) //{ // if (obj && param == monitor_sound01) //{ //} //} else if (param == M01_START_ACTING_JDG && destroyed == false) { char *propaganda_screen[10] = { "M01_Propaganda_Screen_01", "M01_Propaganda_Screen_02", "M01_Propaganda_Screen_03", "M01_Propaganda_Screen_04", "M01_Propaganda_Screen_05", "M01_Propaganda_Screen_06", "M01_Propaganda_Screen_07", "M01_Propaganda_Screen_08", "M01_Propaganda_Screen_10", "M01_Propaganda_Screen_11", }; char *propaganda_sound[10] = { "M01NCXS_DSGN0270I1NCXS_SND", "M01NCXS_DSGN0271I1NCXS_SND", "M01NCXS_DSGN0272I1NCXS_SND", "M01NCXS_DSGN0273I1NCXS_SND", "M01NCXS_DSGN0279I1NCXS_SND", "M01NCXS_DSGN0275I1NCXS_SND", "M01NCXS_DSGN0276I1NCXS_SND", "M01NCXS_DSGN0277I1NCXS_SND", "M01NCXS_DSGN0278I1NCXS_SND", "M01NCXS_DSGN0274I1NCXS_SND", }; Vector3 propagandaSpeaker01 (-319.283f, 589.265f, 35.385f); Vector3 propagandaSpeaker02 (-277.730f, 581.935f, 35.724f); Vector3 propagandaSpeaker03 (-296.269f, 612.473f, 35.468f); propaganda_number++;// = Commands->Get_Random_Int(0, 11); if (propaganda_number >= 10) { propaganda_number = 0; } GameObject * displayScreen = Commands->Create_Object ( propaganda_screen[propaganda_number], Vector3 (0,0,0) ); displayScreen_ID = Commands->Get_ID ( displayScreen ); monitor_sound03 = Commands->Create_Sound ( propaganda_sound[propaganda_number], propagandaSpeaker01, obj ); monitor_sound02 = Commands->Create_Sound ( propaganda_sound[propaganda_number], propagandaSpeaker02, obj ); monitor_sound01 = Commands->Create_Sound ( propaganda_sound[propaganda_number], propagandaSpeaker03, obj ); //Commands->Monitor_Sound ( obj, monitor_sound01 ); soundPlaying = true; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 10 ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//projector is dead--stop playing propaganda stuff { destroyed = true; GameObject * oldDisplayScreen = Commands->Find_Object ( displayScreen_ID); if (oldDisplayScreen != NULL) { Commands->Destroy_Object ( oldDisplayScreen ); } if (soundPlaying == true) { Commands->Stop_Sound ( monitor_sound01, true ); Commands->Stop_Sound ( monitor_sound02, true ); Commands->Stop_Sound ( monitor_sound03, true ); } Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_BackPath_NodGuy_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * gdiBaseCommander = Commands->Find_Object ( 106050 ); if (gdiBaseCommander != NULL) { ActionParamsStruct params; params.Set_Basic( this, 75, M01_START_ACTING_JDG ); params.Set_Attack( gdiBaseCommander, 30, 5, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } }; DECLARE_SCRIPT(M01_Comm_Repair_Engineer_JDG, "")//this guys ID is M01_COMM_CENTER_ENGINEER_ID 101949 { int healer_sound; bool healing; REGISTER_VARIABLES() { SAVE_VARIABLE(healer_sound, 1); SAVE_VARIABLE(healing, 2); } void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); healing = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == CUSTOM_EVENT_SOUND_ENDED ) { if (param == healer_sound) { healing = false; } } else if (type == 0) { if (param == M01_PLAYER_IS_ATTACKING_ME_JDG && healing == false) { healing = true; Commands->Enable_Hibernation( obj, false ); Vector3 myRepairSpot (-301.382f, 551.366f, 18.205f); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myRepairSpot, 30, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Start_Timer ( obj, this, 2, M01_START_ACTING_JDG ); } } } void Timer_Expired( GameObject * obj, int timer_id ) { if (timer_id == M01_START_ACTING_JDG) { Commands->Enable_Hibernation( obj, true ); Commands->Action_Reset ( obj, 100 ); GameObject * commCenter = Commands->Find_Object ( M01_COMM_CENTER_JDG ); Vector3 repair_sound_spot (-297.633f, 532.144f, 35.458f); float commCenter_max_health = Commands->Get_Max_Health ( commCenter );; float commCenter_max_shield = Commands->Get_Max_Shield_Strength ( commCenter ); float commCenter_current_health = Commands->Get_Health ( commCenter ); if (commCenter_current_health > 0) { Commands->Set_Health ( commCenter, commCenter_max_health ); Commands->Set_Shield_Strength ( commCenter, commCenter_max_shield ); healer_sound = Commands->Create_Sound ( "CnC_Healer_Sound", repair_sound_spot, obj ); Commands->Monitor_Sound ( obj, healer_sound ); } } } }; DECLARE_SCRIPT(M01_Comm_Center_Building_Script_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_AMBIENT_SOUND_CONTROLLER_JDG ), 0, M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG, 0 ); GameObject * mainframe = Commands->Find_Object ( 107809 ); if (mainframe != NULL) { Commands->Send_Custom_Event( obj, mainframe, 0, M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG, 0 ); } GameObject * gateTutorialZone = Commands->Find_Object ( 120844 ); if (gateTutorialZone != NULL) { Commands->Send_Custom_Event( obj, gateTutorialZone, 0, M01_START_ACTING_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { GameObject * myEngineer = Commands->Find_Object ( M01_COMM_CENTER_ENGINEER_ID ); if (myEngineer != NULL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_DO_DAMAGE_CHECK_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_PaintballRoom_ChatterController_JDG, "")//107554 { int nodguy01_id;// int nodguy02_id; int nodguy03_id; int nodguy04_id; int nodguy05_id; int nodguy06_id; bool nodguy01_dead; bool nodguy02_dead; bool nodguy03_dead; bool nodguy04_dead; bool nodguy05_dead; bool nodguy06_dead; bool acting; REGISTER_VARIABLES() { SAVE_VARIABLE(nodguy01_id, 1); SAVE_VARIABLE(nodguy02_id, 2); SAVE_VARIABLE(nodguy03_id, 3); SAVE_VARIABLE(nodguy04_id, 4); SAVE_VARIABLE(nodguy05_id, 5); SAVE_VARIABLE(nodguy06_id, 6); SAVE_VARIABLE(nodguy01_dead, 7); SAVE_VARIABLE(nodguy02_dead, 8); SAVE_VARIABLE(nodguy03_dead, 9); SAVE_VARIABLE(nodguy04_dead, 10); SAVE_VARIABLE(nodguy05_dead, 11); SAVE_VARIABLE(nodguy06_dead, 12); SAVE_VARIABLE(acting, 13); } void Created( GameObject * obj ) { nodguy01_id = 102001; nodguy02_id = 101998; nodguy03_id = 102000; nodguy04_id = 101999; nodguy05_id = 102002; nodguy06_id = 102003; nodguy01_dead = false; nodguy02_dead = false; nodguy03_dead = false; nodguy04_dead = false; nodguy05_dead = false; nodguy06_dead = false; acting = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG && acting == false) { acting = true; if (nodguy01_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } else if (nodguy01_dead == true) { if (nodguy02_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } } if (nodguy03_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, delayTimer ); } else if (nodguy03_dead == true) { if (nodguy04_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, delayTimer ); } } if (nodguy05_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_05_JDG, delayTimer ); } else if (nodguy05_dead == true) { if (nodguy06_dead == false) { float delayTimer = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_06_JDG, delayTimer ); } } } else if (param == M01_IVE_BEEN_KILLED_JDG) { GameObject * nodguy01 = Commands->Find_Object ( nodguy01_id ); GameObject * nodguy02 = Commands->Find_Object ( nodguy02_id ); GameObject * nodguy03 = Commands->Find_Object ( nodguy03_id ); GameObject * nodguy04 = Commands->Find_Object ( nodguy04_id ); GameObject * nodguy05 = Commands->Find_Object ( nodguy05_id ); GameObject * nodguy06 = Commands->Find_Object ( nodguy06_id ); if (sender == nodguy01) { nodguy01_dead = true; } else if (sender == nodguy02) { nodguy02_dead = true; } else if (sender == nodguy03) { nodguy03_dead = true; } else if (sender == nodguy04) { nodguy04_dead = true; } else if (sender == nodguy05) { nodguy05_dead = true; } else if (sender == nodguy06) { nodguy06_dead = true; } } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { GameObject * nodguy01 = Commands->Find_Object ( nodguy01_id ); if (nodguy01 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_02", 95, 20, true); Commands->Join_Conversation( nodguy01, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { GameObject * nodguy02 = Commands->Find_Object ( nodguy02_id ); if (nodguy02 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_02", 95, 20, true); Commands->Join_Conversation( nodguy02, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG) { GameObject * nodguy03 = Commands->Find_Object ( nodguy03_id ); if (nodguy03 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_01", 95, 20, true); Commands->Join_Conversation( nodguy03, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG) { GameObject * nodguy04 = Commands->Find_Object ( nodguy04_id ); if (nodguy04 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_01", 95, 20, true); Commands->Join_Conversation( nodguy04, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG) { GameObject * nodguy05 = Commands->Find_Object ( nodguy05_id ); if (nodguy05 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_03", 95, 20, true); Commands->Join_Conversation( nodguy05, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } else if (param == M01_MODIFY_YOUR_ACTION_06_JDG) { GameObject * nodguy06 = Commands->Find_Object ( nodguy06_id ); if (nodguy06 != NULL) { int paintball_alert_conv = Commands->Create_Conversation( "M01_Paintball_Intruder_Conversation_03", 95, 20, true); Commands->Join_Conversation( nodguy06, paintball_alert_conv); Commands->Start_Conversation( paintball_alert_conv, paintball_alert_conv ); } } } } }; DECLARE_SCRIPT(M01_HON_Paintball_Team_01_JDG, "")//this is the grunt team { int enemySniperId; float myAggressiveness; float myCoverProbability; float myTimerMax; float myTimerMin; float myHomeRange; Vector3 myPosition; bool retreating; bool starEncountered; REGISTER_VARIABLES() { SAVE_VARIABLE(enemySniperId, 1); SAVE_VARIABLE(myAggressiveness, 2); SAVE_VARIABLE(myCoverProbability, 3); SAVE_VARIABLE(myTimerMax, 4); SAVE_VARIABLE(myTimerMin, 5); SAVE_VARIABLE(myHomeRange, 6); SAVE_VARIABLE(myPosition, 7); SAVE_VARIABLE(retreating, 8); SAVE_VARIABLE(starEncountered, 9); } void Created( GameObject * obj ) { enemySniperId = 102001; retreating = false; starEncountered = false; int myIdNumber = Commands->Get_ID ( obj ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_RENEGADE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_NOD ); if (myIdNumber == 101998)//team one sniper { } else { myPosition = Commands->Get_Position ( obj ); myTimerMin = 5; myTimerMax = 10; myAggressiveness = Commands->Get_Random ( 0, 0.5f ); myCoverProbability = Commands->Get_Random ( 0.5f, 1 ); myHomeRange = Commands->Get_Random ( 0, 20 ); Commands->Set_Innate_Aggressiveness ( obj, myAggressiveness ); Commands->Set_Innate_Take_Cover_Probability ( obj, myCoverProbability ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, myHomeRange ); float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * convController = Commands->Find_Object ( 107554 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { starEncountered = true; GameObject * convController = Commands->Find_Object ( 107554 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_START_ACTING_JDG, 0 ); } } else if (damager == Commands->Find_Object ( enemySniperId )) { retreating = true; Commands->Set_Innate_Aggressiveness ( obj, 0.2f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 1 ); float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_02_JDG ); if (starEncountered == false) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } } else { if (starEncountered == false) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } } } void Timer_Expired( GameObject * obj, int timer_id ) { switch (timer_id) { case M01_MODIFY_YOUR_ACTION_JDG: { if (retreating == false) { myAggressiveness = Commands->Get_Random ( 0, 0.5f ); myCoverProbability = Commands->Get_Random ( 0.5f, 1 ); myHomeRange = Commands->Get_Random ( 0, 20 ); Commands->Set_Innate_Aggressiveness ( obj, myAggressiveness ); Commands->Set_Innate_Take_Cover_Probability ( obj, myCoverProbability ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, myHomeRange ); float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } } break; case M01_MODIFY_YOUR_ACTION_02_JDG: { retreating = false; float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } break; } } }; DECLARE_SCRIPT(M01_HON_Paintball_Team_02_JDG, "")//this is the officer team { int enemySniperId; float myAggressiveness; float myCoverProbability; float myTimerMax; float myTimerMin; float myHomeRange; Vector3 myPosition; bool retreating; bool starEncountered; REGISTER_VARIABLES() { SAVE_VARIABLE(enemySniperId, 1); SAVE_VARIABLE(myAggressiveness, 2); SAVE_VARIABLE(myCoverProbability, 3); SAVE_VARIABLE(myTimerMax, 4); SAVE_VARIABLE(myTimerMin, 5); SAVE_VARIABLE(myHomeRange, 6); SAVE_VARIABLE(myPosition, 7); SAVE_VARIABLE(retreating, 8); SAVE_VARIABLE(starEncountered, 9); } void Created( GameObject * obj ) { enemySniperId= 101998; retreating = false; starEncountered = false; int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == 102001)//team two sniper { } else { myPosition = Commands->Get_Position ( obj ); myTimerMin = 5; myTimerMax = 10; myAggressiveness = Commands->Get_Random ( 0.75f, 1 ); myCoverProbability = Commands->Get_Random ( 0, 0.25f ); myHomeRange = Commands->Get_Random ( 0, 20 ); Commands->Set_Innate_Aggressiveness ( obj, myAggressiveness ); Commands->Set_Innate_Take_Cover_Probability ( obj, myCoverProbability ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, myHomeRange ); float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { starEncountered = true; } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * convController = Commands->Find_Object ( 107554 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { starEncountered = true; GameObject * convController = Commands->Find_Object ( 107554 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_START_ACTING_JDG, 0 ); } } else if (damager == Commands->Find_Object ( enemySniperId )) { retreating = true; Commands->Set_Innate_Aggressiveness ( obj, 0.2f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 1.0f ); float delayTimer = Commands->Get_Random ( 1, 3 ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_02_JDG ); if (starEncountered == false) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } } else { if (starEncountered == false) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } } } void Timer_Expired( GameObject * obj, int timer_id ) { switch (timer_id) { case M01_MODIFY_YOUR_ACTION_JDG: { if (retreating == false) { myAggressiveness = Commands->Get_Random ( 0.75f, 1 ); myCoverProbability = Commands->Get_Random ( 0, 0.25f ); myHomeRange = Commands->Get_Random ( 0, 20 ); Commands->Set_Innate_Aggressiveness ( obj, myAggressiveness ); Commands->Set_Innate_Take_Cover_Probability ( obj, myCoverProbability ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, myHomeRange ); float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } } break; case M01_MODIFY_YOUR_ACTION_02_JDG: { retreating = false; float delayTimer = Commands->Get_Random ( myTimerMin, myTimerMax ); Commands->Start_Timer ( obj, this, delayTimer, M01_MODIFY_YOUR_ACTION_JDG ); } break; } } }; DECLARE_SCRIPT(M01_HON_Dojo_Trainer_JDG, "")//this guys ID is M01_HON_DOJO_SENSEI_JDG 102051 { int dojo_conv; bool first_time; bool handOfNodDead; REGISTER_VARIABLES() { SAVE_VARIABLE(dojo_conv, 1); SAVE_VARIABLE(first_time, 2); SAVE_VARIABLE(handOfNodDead, 3); } void Created( GameObject * obj ) { handOfNodDead = false; first_time = true; Commands->Innate_Disable(obj); //Commands->Set_Innate_Is_Stationary ( obj, true ); } void Killed( GameObject * obj, GameObject * killer ) { if (handOfNodDead == false) { if (Commands->Find_Object (M01_HON_DOJO_CIV_01_JDG)) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_01_JDG ), 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_02_JDG)) { float delayTimer2 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_02_JDG ), 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer2 ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_03_JDG)) { float delayTimer3 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_03_JDG ), 0, M01_MODIFY_YOUR_ACTION_02_JDG, delayTimer3 ); } } else { if (Commands->Find_Object (M01_HON_DOJO_CIV_01_JDG)) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_01_JDG ), 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, delayTimer ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_02_JDG)) { float delayTimer2 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_02_JDG ), 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, delayTimer2 ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_03_JDG)) { float delayTimer3 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_03_JDG ), 0, M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG, delayTimer3 ); } } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR && first_time == true) { first_time = false; if (Commands->Find_Object (M01_HON_DOJO_CIV_01_JDG)) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_01_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, delayTimer ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_02_JDG)) { float delayTimer2 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_02_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, delayTimer2 ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_03_JDG)) { float delayTimer3 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_03_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, delayTimer3 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_START_ACTING_JDG: //here comes the player--start your routine { //Commands->Set_Innate_Is_Stationary ( obj, false ); //Commands->Innate_Enable(obj); Commands->Set_Innate_Aggressiveness ( obj, 0.50f ); Commands->Set_Innate_Take_Cover_Probability ( obj, 0.5f ); Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, false ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, false ); dojo_conv = Commands->Create_Conversation( "M01_Dojo_Sensei_Conversation", 100, 1000, true); Commands->Join_Conversation( obj, dojo_conv, false, true ); Commands->Start_Conversation( dojo_conv, dojo_conv ); Commands->Monitor_Conversation( obj, dojo_conv); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 5 ); } break; case M01_MODIFY_YOUR_ACTION_JDG: //turn your sight and hearing back on M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG { Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); } break; case M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG: //turn your sight and hearing back on M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG { handOfNodDead = true; Commands->Innate_Enable(obj); Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, true ); Commands->Innate_Soldier_Enable_Footsteps_Heard ( obj, true ); } break; } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == dojo_conv)//your initial conv is over--tell civs to do pushups { if (Commands->Find_Object (M01_HON_DOJO_CIV_01_JDG)) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_01_JDG ), 0, M01_START_ACTING_JDG, delayTimer ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_02_JDG)) { float delayTimer2 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_02_JDG ), 0, M01_START_ACTING_JDG, delayTimer2 ); } if (Commands->Find_Object (M01_HON_DOJO_CIV_03_JDG)) { float delayTimer3 = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_HON_DOJO_CIV_03_JDG ), 0, M01_START_ACTING_JDG, delayTimer3 ); } } } break; } } }; DECLARE_SCRIPT(M01_HON_Dojo_Civ_01_JDG, "") { /*#define M01_HON_DOJO_CIV_01_JDG 102048 #define M01_HON_DOJO_CIV_02_JDG 102049 #define M01_HON_DOJO_CIV_03_JDG 102050*/ int i_am; int dojo_civ_01; int dojo_civ_02; int dojo_civ_03; int pushups_done; int thanks_conv; REGISTER_VARIABLES() { SAVE_VARIABLE(i_am, 1); SAVE_VARIABLE(dojo_civ_01, 2); SAVE_VARIABLE(dojo_civ_02, 3); SAVE_VARIABLE(dojo_civ_03, 4); SAVE_VARIABLE(pushups_done, 5); SAVE_VARIABLE(thanks_conv, 6); } void Created( GameObject * obj ) { dojo_civ_01 = 102048;//babushka dojo_civ_02 = 102049;//billy dojo_civ_03 = 102050;//farmerjohn pushups_done = 0; Commands->Innate_Disable(obj); int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == dojo_civ_01) { i_am = dojo_civ_01; } else if (myIdNumber == dojo_civ_02) { i_am = dojo_civ_02; } else if (myIdNumber == dojo_civ_03) { i_am = dojo_civ_03; } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_START_ACTING_JDG: //you've been told to do pushups--DO THEM! { params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG );//this is animation of guy going into pushup position params.Set_Animation( "H_A_J13A", false ); Commands->Action_Play_Animation ( obj, params ); } break; case M01_MODIFY_YOUR_ACTION_JDG: //you're done with pushups--report to the armory { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(0,0,0), WALK, 2 ); params.WaypathID = 102056; params.WaypointStartID = 102058; params.WaypointEndID = 102062; Commands->Action_Goto( obj, params ); } break; case M01_PLAYER_IS_ATTACKING_ME_JDG: //your guard is alerted to Havoc--stop whatever you are doing { Commands->Action_Reset ( obj, 100 ); Vector3 myPosition = Commands->Get_Position ( obj ); myPosition.X += Commands->Get_Random ( 0.5f, 1 ); myPosition.Y += Commands->Get_Random ( 0.5f, 2 ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( myPosition, WALK, 0 ); params.MoveCrouched = true; Commands->Action_Goto( obj, params ); } break; case M01_MODIFY_YOUR_ACTION_02_JDG: //your guard is dead--flock Havoc and say thanks { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_03_JDG ); params.Set_Look( STAR, 5 ); Commands->Action_Face_Location ( obj, params ); float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, delayTimer ); } break; case M01_MODIFY_YOUR_ACTION_03_JDG: //play thanks conv { if (obj) { Commands->Join_Conversation( obj, thanks_conv, false, true, true ); Commands->Join_Conversation( STAR, thanks_conv, false, false, false ); Commands->Start_Conversation( thanks_conv, thanks_conv ); Commands->Monitor_Conversation( obj, thanks_conv ); } } break; case M01_MODIFY_YOUR_ACTION_04_JDG: //play thanks conv { if (i_am == dojo_civ_01)//babushka { thanks_conv = Commands->Create_Conversation( "M01_Dojo_Babushka_Thanks_Conversation", 100, 1000, true); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } else if (i_am == dojo_civ_02) { thanks_conv = Commands->Create_Conversation( "M01_Dojo_Billy_Thanks_Conversation", 100, 1000, true); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 2 ); } else { thanks_conv = Commands->Create_Conversation( "M01_Dojo_FarmerJohn_Thanks_Conversation", 100, 1000, true); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 4 ); } } break; case M01_PICK_A_NEW_LOCATION_JDG: //see how far you are from havoc { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float myDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (myDistance > 75) { bool starVisible = Commands->Is_Object_Visible( STAR, obj ); if (starVisible == true) { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 10 ); } else { Commands->Destroy_Object ( obj ); } } else { Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 10 ); } } break; case M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG: //turn your sight and hearing back on M01_YOUR_BUILDING_HAS_BEEN_DESTROYED_JDG { Commands->Action_Reset ( obj, 100 ); Vector3 newGotoSpot(-54.512f, 183.109f, 0.774f);//this is at the landing beach params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( newGotoSpot, RUN, 5 ); Commands->Action_Goto( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 10 );//do distance check from star } break; } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == thanks_conv) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "M01_GDI_Thanks_Twiddler", myPosition, obj ); Vector3 newGotoSpot(-54.512f, 183.109f, 0.774f);//this is at the landing beach params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement( newGotoSpot, RUN, 5 ); Commands->Action_Goto( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_PICK_A_NEW_LOCATION_JDG, 10 );//do distance check from star } } break; case ACTION_COMPLETE_NORMAL: { switch (action_id) { case M01_DOING_ANIMATION_01_JDG: { if (pushups_done < 2) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG );//this is pushup animation animation params.Set_Animation( "H_A_J13B", false ); Commands->Action_Play_Animation ( obj, params ); pushups_done++; } else { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG );//this is guy standing up params.Set_Animation( "H_A_J13C", false ); Commands->Action_Play_Animation ( obj, params ); } } break; case M01_DOING_ANIMATION_02_JDG: { char *animationName = M01_Choose_Idle_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG );//this is guy standing up params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } break; case M01_DOING_ANIMATION_03_JDG: { if (i_am == dojo_civ_01) { float delayTimer = Commands->Get_Random ( 0, 1 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } else if (i_am == dojo_civ_02) { float delayTimer2 = Commands->Get_Random ( 1, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer2 ); } else if (i_am == dojo_civ_03) { float delayTimer3 = Commands->Get_Random ( 2, 3 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer3 ); } } break; case M01_WALKING_WAYPATH_01_JDG: { params.Set_Basic( this, 100, M01_DOING_ANIMATION_04_JDG );//this is guy placing C$ params.Set_Animation( "H_A_J12C", false ); Commands->Action_Play_Animation ( obj, params ); } break; case M01_DOING_ANIMATION_04_JDG: { Vector3 myPosition = Commands->Get_Position ( obj ); GameObject *newsoldier = Commands->Create_Object("Nod_MiniGunner_0", myPosition); Commands->Attach_Script(newsoldier, "M01_Civ_To_Minigunner_Guy_JDG", ""); Commands->Destroy_Object ( obj ); } break; } } break; } } }; DECLARE_SCRIPT(M01_Nod_GuardTower_Tailgun_JDG, "")//100246 { void Created( GameObject * obj ) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( STAR, 30, 1, true); Commands->Action_Attack(obj, params); } }; DECLARE_SCRIPT(M01_Comm_Mainframe_PogZone_01_JDG, "")//108024 {//target location () void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Vector3 radarMarker (-293.163f, 499.787f, 19.959f); Commands->Set_Objective_HUD_Info_Position( M01_UNLOCK_GATE_OBJECTIVE_JDG, 93, "POG_M01_1_02.tga", IDS_POG_ACCESS, radarMarker ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Comm_Mainframe_PogZone_02_JDG, "")//108026 {//target location () void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Vector3 radarMarker (-292.135f, 522.740f, 16.448f); Commands->Set_Objective_HUD_Info_Position( M01_UNLOCK_GATE_OBJECTIVE_JDG, 93, "POG_M01_1_02.tga", IDS_POG_ACCESS, radarMarker ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Comm_Mainframe_PogZone_03_JDG, "")//108028 {//target location () void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Vector3 radarMarker (-314.578f, 517.124f, 16.447f); Commands->Set_Objective_HUD_Info_Position( M01_UNLOCK_GATE_OBJECTIVE_JDG, 93, "POG_M01_1_02.tga", IDS_POG_ACCESS, radarMarker ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Comm_Center_Player_Terminal_Zone, "")//107809 { bool poked; bool commCenterDead; REGISTER_VARIABLES() { SAVE_VARIABLE(poked, 1); SAVE_VARIABLE(commCenterDead, 2); } void Created( GameObject * obj ) { commCenterDead = false; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); Commands->Display_Health_Bar( obj, false ); poked = false; } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR && poked == false) { if (commCenterDead == false) { poked = true; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_HAS_POKED_COMM_CENTER_PCT_JDG, 0 ); Commands->Set_Obj_Radar_Blip_Shape ( obj, -1 ); Commands->Set_Obj_Radar_Blip_Color ( obj, -1 ); GameObject * gateTutorialZone = Commands->Find_Object ( 120844 ); if (gateTutorialZone != NULL) { Commands->Send_Custom_Event( obj, gateTutorialZone, 0, M01_START_ACTING_JDG, 0 ); } Commands->Enable_HUD_Pokable_Indicator ( obj, false ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_COMM_SAM_OBJECTIVE_JDG) { Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE ); } else if (param == M01_COMM_CENTER_HAS_BEEN_DESTROYED_JDG)//comm center has been destroyed { commCenterDead = true; Commands->Enable_HUD_Pokable_Indicator ( obj, false ); } } } }; DECLARE_SCRIPT(M01_Objective_Pog_Controller_JDG, "")//M01_MISSION_POG_CONTROLLER_JDG 105828 { int missionIntro; int escKeyConv; REGISTER_VARIABLES() { SAVE_VARIABLE(missionIntro, 1); SAVE_VARIABLE(escKeyConv, 2); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { switch (complete_reason) { case ACTION_COMPLETE_CONVERSATION_ENDED: { if (action_id == missionIntro) //add first objective pog here { Vector3 prisonerPenLocation (-312.725f, 575.887f, 27.221f); Commands->Add_Objective( M01_PRISONER_OBJECTIVE_JDG, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M01_01, NULL, IDS_Enc_Obj_Primary_M01_01 ); Commands->Set_Objective_Radar_Blip( M01_PRISONER_OBJECTIVE_JDG, prisonerPenLocation ); Commands->Set_Objective_HUD_Info_Position( M01_PRISONER_OBJECTIVE_JDG, 80, "POG_M01_1_01.tga", IDS_POG_LOCATE, prisonerPenLocation ); Commands->Set_HUD_Help_Text ( IDS_M00DSGN_DSGN1004I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); escKeyConv = Commands->Create_Conversation( "M01_Press_ESC_For_Objectives_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, escKeyConv, false, false ); Commands->Start_Conversation( escKeyConv, escKeyConv ); Commands->Monitor_Conversation( obj, escKeyConv ); } else if (action_id == escKeyConv) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0516I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } break; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG) { missionIntro = Commands->Create_Conversation( "M01_Start_Mission_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, missionIntro, false, false ); //Commands->Join_Conversation( STAR, missionIntro, false, false ); Commands->Start_Conversation( missionIntro, missionIntro ); Commands->Monitor_Conversation( obj, missionIntro );//M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG } if (param == M01_MODIFY_YOUR_ACTION_JDG) { escKeyConv = Commands->Create_Conversation( "M01_Press_ESC_For_Objectives_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, escKeyConv, false, false ); Commands->Start_Conversation( escKeyConv, escKeyConv ); Commands->Monitor_Conversation( obj, escKeyConv ); } } else if (type == M01_ADD_OBJECTIVE_POG_JDG) { if (param == M01_GDI_BASE_POW_OBJECTIVE_JDG) { Vector3 initialCaptainLocation (47.128f, 36.584f, -0.930f); Commands->Add_Objective( M01_GDI_BASE_POW_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_06, NULL, IDS_Enc_Obj_Secondary_M01_06 ); Commands->Set_Objective_Radar_Blip( M01_GDI_BASE_POW_OBJECTIVE_JDG, initialCaptainLocation ); Commands->Set_Objective_HUD_Info_Position( M01_GDI_BASE_POW_OBJECTIVE_JDG, 85, "POG_M01_2_08.tga", IDS_POG_RESCUE, initialCaptainLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_M00DSGN_DSGN1005I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 2 ); } else if (param == M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG) { GameObject * barnCommander = Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ); if (barnCommander != NULL) { Vector3 commanderPosition = Commands->Get_Position ( barnCommander ); Commands->Set_Objective_HUD_Info_Position( M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG, 86, "POG_M01_2_01.tga", IDS_POG_ELIMINATE, commanderPosition ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_FIRST_NOD_COMMANDER_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_01, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } else if (param == M01_TURRETS_OBJECTIVE_JDG) { Vector3 turretsLocation; GameObject * turret01 = Commands->Find_Object ( 101434 ); GameObject * turret02 = Commands->Find_Object ( 101435 ); if (turret01 != NULL) { turretsLocation.Set (-83.916f, 91.667f, 2.807f); } else if (turret02 != NULL) { turretsLocation.Set (-105.024f, 113.658f, 1.872f); } Commands->Set_Objective_HUD_Info_Position( M01_TURRETS_OBJECTIVE_JDG, 91, "POG_M01_2_02.tga", IDS_POG_DESTROY, turretsLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_TURRETS_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_02, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (param == M01_BARN_OBJECTIVE_JDG) { Vector3 barnLocation (-49.910f, 183.860f, 0.774f); Commands->Set_Objective_HUD_Info_Position( M01_BARN_OBJECTIVE_JDG, 92, "POG_M01_2_03.tga", IDS_POG_RESCUE, barnLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_BARN_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_03, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (param == M01_BARN_ROUNDUP_OBJECTIVE_JGD) { Vector3 barnLocation (-54.786f, 213.816f, 6.453f); Commands->Set_Objective_HUD_Info_Position( M01_BARN_ROUNDUP_OBJECTIVE_JGD, 93, "POG_M01_2_04.tga", IDS_POG_EVACUATE, barnLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_BARN_ROUNDUP_OBJECTIVE_JGD, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_04, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (param == M01_CHURCH_OBJECTIVE_JDG)// { Vector3 churchLocation = Commands->Get_Position ( Commands->Find_Object ( M01_CHURCH_PRIEST_ID ) ); Commands->Set_Objective_HUD_Info_Position( M01_CHURCH_OBJECTIVE_JDG, 94, "POG_M01_2_06.tga", IDS_POG_RESCUE, churchLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_CHURCH_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_05, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (param == M01_HON_OBJECTIVE_JDG) { Vector3 mctLocation (-179.3f, 541.9f, 3.518f); Commands->Set_Objective_HUD_Info_Position( M01_HON_OBJECTIVE_JDG, 95, "POG_M02_2_01.tga", IDS_POG_DESTROY, mctLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_HON_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_07, TEXT_COLOR_OBJECTIVE_PRIMARY ); } else if (param == M01_COMM_SAM_OBJECTIVE_JDG) { Vector3 samLocation (-337.169f, 549.232f, 31.949f); Commands->Set_Objective_HUD_Info_Position( M01_COMM_SAM_OBJECTIVE_JDG, 96, "POG_M01_1_04.tga", IDS_POG_DESTROY, samLocation ); //Vector3 green (0,1,0); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Primary_M01_04, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } else if (type == M01_CHANGE_OBJECTIVE_POG_JDG) { GameObject * captDuncan = Commands->Find_Object ( 106050 ); if (captDuncan != NULL) { if (param == M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG) { //Commands->Set_Objective_Status( M01_GDI_BASE_POW_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); Commands->Add_Objective( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M01_08, NULL, IDS_Enc_Obj_Secondary_M01_08 ); Vector3 realCaptainLocation (109.959f, 97.340f, 8.923f); Commands->Set_Objective_HUD_Info_Position( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, 91, "POG_M01_2_05.tga", IDS_POG_CONTACT, realCaptainLocation ); Commands->Set_Objective_Radar_Blip( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, realCaptainLocation ); //Commands->Send_Custom_Event( obj, obj, M01_REMOVE_OBJECTIVE_POG_JDG, M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, SECONDARY_POG_DELAY ); GameObject * triggerZone03 = Commands->Find_Object ( 106052 ); if (triggerZone03 != NULL) { Commands->Send_Custom_Event( obj, triggerZone03, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } //Vector3 blue (0,0,1); Commands->Set_HUD_Help_Text ( IDS_Enc_ObjTitle_Secondary_M01_08, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } else if (param == M01_TURRETS_OBJECTIVE_JDG) { Vector3 turretsLocation; GameObject * turret02 = Commands->Find_Object ( 101435 ); if (turret02 != NULL) { turretsLocation.Set (-105.024f, 113.658f, 1.872f); } Commands->Set_Objective_HUD_Info_Position( M01_TURRETS_OBJECTIVE_JDG, 91, "POG_M01_2_02.tga", IDS_POG_DESTROY, turretsLocation ); } } } }; DECLARE_SCRIPT(M01_GDIBase_FirstChinook_Script_JDG, "")// { void Killed( GameObject * obj, GameObject * killer ) { GameObject * gdiGuy01 = Commands->Find_Object ( 104685 ); if (gdiGuy01 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy01, 0, M01_MODIFY_YOUR_ACTION_07_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Church_EvacController_JDG, "")//103394 { int evac_waypath_id; int evac_helicopter_id; int evac_rope_id; int protectCivsConv; int deadCivs; bool transportCalled; REGISTER_VARIABLES() { SAVE_VARIABLE(evac_waypath_id, 1); SAVE_VARIABLE(evac_helicopter_id, 2); SAVE_VARIABLE(evac_rope_id, 3); SAVE_VARIABLE(protectCivsConv, 4); SAVE_VARIABLE(deadCivs, 5); SAVE_VARIABLE(transportCalled, 6); } void Created( GameObject * obj ) { deadCivs = 0; transportCalled = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ((param == M01_START_ACTING_JDG))//civs have been freed--play protect civs conversation { protectCivsConv = Commands->Create_Conversation( "M01_Protect_Clergy_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, protectCivsConv, false, false ); //Commands->Join_Conversation( STAR, protectCivsConv, false, false ); Commands->Start_Conversation( protectCivsConv, protectCivsConv ); Commands->Monitor_Conversation (obj, protectCivsConv); } else if (param == M01_EVERYONES_ON_BOARD_JDG)//civs are on board--send aircraft away { GameObject * evacChopper = Commands->Find_Object ( evac_helicopter_id ); GameObject * evacWaypath = Commands->Find_Object ( evac_waypath_id ); GameObject * evacRope = Commands->Find_Object ( evac_rope_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event ( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacWaypath != NULL) { Commands->Send_Custom_Event ( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacRope != NULL) { Commands->Send_Custom_Event ( obj, evacRope, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (param == M01_CIVILIAN_KILLED_JDG) { deadCivs++; if (deadCivs == 3) { Commands->Send_Custom_Event ( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CLEAR_CHURCH_OBJECTIVE_FAIL_JDG, 0 ); } } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//chopper is sending you his ID { evac_helicopter_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************chopper id received.....%d\n",evac_helicopter_id ); } else if (param == M01_WAYPATH_IS_SENDING_ID_JDG)//waypath is sending you his ID { evac_waypath_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************waypath id received.....%d\n", evac_waypath_id ); } else if (param == M01_ROPE_IS_SENDING_ID_JDG)//rope is sending you his ID { evac_rope_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************rope id received.....%d\n", evac_rope_id ); } else if (param == M01_GIVE_ME_A_ROPE_JDG)//someone is waiting--pull him up { Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject * troopbone = Commands->Create_Object("Invisible_Object", evacPosition ); Commands->Set_Model ( troopbone, "XG_EV5_troopBN" ); Commands->Attach_Script(troopbone, "M01_Evac_TroopBone_JDG", ""); Commands->Innate_Disable(sender); Commands->Attach_To_Object_Bone( sender, troopbone, "Troop_L" ); if(troopbone) { Commands->Set_Animation ( troopbone, "XG_EV5_troopBN.XG_EV5_troopBN", false); } else { Commands->Debug_Message("troopbone not created yet"); } Commands->Set_Animation ( sender, "S_A_Human.XG_EV5_troop", false ); } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == protectCivsConv) { if (transportCalled == false) { transportCalled = true; Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_ChurchArea_EvacAnim.txt"); } GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-140.9f, 320.2f, 8.5f)); Commands->Set_Facing(chinook_obj1, -54.0f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_GDI_Church_TroopDrop.txt"); Commands->Create_Sound ( "00-N180E", Vector3 (0,0,0), obj); } } } }; DECLARE_SCRIPT(M01_ChurchArea_Air_Evac_Rope_JDG, "") { void Created( GameObject * obj ) { Commands->Debug_Message ( "**********************script attached to evac rope\n" ); Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( 103394 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_ROPE_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************rope has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeZ", false ); } break; } } }; DECLARE_SCRIPT(M01_ChurchArea_Air_Evac_Waypath_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( 103394 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_WAYPATH_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************waypath has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_ChurchArea_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsA", false ); Commands->Debug_Message ( "**********************script attached to evac chopper\n" ); Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); GameObject * myController = Commands->Find_Object ( 103394 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsA") == 0) { Commands->Debug_Message ( "**********************chopper has finished entry anim\n" ); Vector3 evacLocation = Commands->Get_Position ( obj ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsL", true ); GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); GameObject * churchNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); GameObject * priest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if (loveshackNun != NULL) { Commands->Send_Custom_Event( obj, loveshackNun, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } if (churchNun != NULL) { Commands->Send_Custom_Event( obj, churchNun, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } if (priest != NULL) { Commands->Send_Custom_Event( obj, priest, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************helicopter has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * loveshackNun = Commands->Find_Object ( M01_CHURCH_LOVESHACK_NUN_ID ); GameObject * churchNun = Commands->Find_Object ( M01_CHURCH_INTERIOR_NUN_ID ); GameObject * priest = Commands->Find_Object ( M01_CHURCH_PRIEST_ID ); if ((loveshackNun != NULL) || (churchNun != NULL) || (priest != NULL)) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else { Commands->Debug_Message ( "*******************************all barn civs on board--about to send cutom to controller\n" ); GameObject * controller = Commands->Find_Object ( 103394 ); if (controller != NULL) { Commands->Send_Custom_Event ( obj, controller, 0, M01_EVERYONES_ON_BOARD_JDG, 0 ); Commands->Debug_Message ( "*******************************all barn civs on board--sent cutom to controller\n" ); } } } break; } } }; DECLARE_SCRIPT(M01_Church_Priest_JDG, "") { int lucky_charms; int prayerSound; REGISTER_VARIABLES() { SAVE_VARIABLE(lucky_charms, 1); SAVE_VARIABLE(prayerSound, 1); } void Created( GameObject * obj ) { Commands->Innate_Disable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); prayerSound = Commands->Create_Sound ( "MX1DSGN_DSGN0020I1DSGN_SND", myPosition, obj ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Stop_Sound ( prayerSound, true ); Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103394 ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_PRIEST_CONVERSATION_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { params.Set_Basic( this, 90, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("H_A_Host_L2b", true); Commands->Action_Play_Animation (obj, params); Commands->Start_Sound ( prayerSound ); } else if ((param == M01_CHURCH_GUARD_IS_DEAD_JDG))//Your guard is dead--do something { Commands->Stop_Sound ( prayerSound, true ); Commands->Enable_Hibernation( obj, false ); params.Set_Basic( this, 90, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("H_A_Host_L2c", false); Commands->Action_Play_Animation (obj, params); } else if ((param == M01_GOING_TO_EVAC_SPOT_JDG))//your ride is here--go get in { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 starPosition = Commands->Get_Position ( STAR ); float distance = Commands->Get_Distance ( myPosition, starPosition ); if (distance <= 15) { lucky_charms = Commands->Create_Conversation( "M01_Priest_LuckyCharms_Conversation", 100, 1000, false); Commands->Join_Conversation( obj, lucky_charms, false, true, true ); Commands->Join_Conversation( STAR, lucky_charms, false, false, false ); Commands->Start_Conversation( lucky_charms, lucky_charms ); Commands->Monitor_Conversation( obj, lucky_charms ); } else { Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( 103394 ) ); params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 0.5f ); Commands->Action_Goto( obj, params ); } //ActionParamsStruct params; //Commands->Action_Reset ( obj, 100 ); //params.Set_Basic(this, 100, M01_PICK_A_NEW_LOCATION_JDG); //params.Set_Movement( STAR, RUN, 8 ); //Commands->Action_Goto( obj, params ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { 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 )//civ is standing up after guard is dead { params.Set_Basic( this, 90, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation ("H_A_Host_L1b", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG)//civ is standing up after guard is dead { params.Set_Basic( this, 90, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation ("H_A_Host_L1c", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_03_JDG)//civ is standing up after guard is dead { params.Set_Basic( this, 90, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3 (-135.571f, 340.213f, 9.608f), 0.9f, 0.5f ); Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG)//civ is standing up after guard is dead { Commands->Enable_Hibernation( obj, true ); if (Commands->Find_Object ( 103395 ))//this is your conversation zone { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103395 ), 0, M01_START_ACTING_JDG, 0 ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//Nun is by chinook--play getting on anim { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CHURCH_CLERGY_HAS_BOARDED_JDG, 1 ); Commands->Give_Points( STAR, 2000, false ); 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); GameObject * airdropController = Commands->Find_Object ( M01_CHURCHAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( 103394 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_PICK_A_NEW_LOCATION_JDG)//priest is by Havoc--cue lucky charms conversation { //lucky_charms = Commands->Create_Conversation( "M01_Priest_LuckyCharms_Conversation", 100, 1000, false); //Commands->Join_Conversation( obj, lucky_charms, true, true ); //Commands->Start_Conversation( lucky_charms, lucky_charms ); //Commands->Monitor_Conversation( obj, lucky_charms ); } else if (action_id == M01_DOING_ANIMATION_04_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//priest is by Havoc--cue lucky charms conversation { Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( 103394 ) ); params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 0.5f ); Commands->Action_Goto( obj, params ); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED)//priest is by Havoc--cue lucky charms conversation { if (action_id == lucky_charms) { params.Set_Basic(this, 100, M01_DOING_ANIMATION_04_JDG); params.Set_Animation ("H_A_J12C", false); Commands->Action_Play_Animation (obj, params); Vector3 spawnPosition = Commands->Get_Position ( obj ); spawnPosition.Z += 0.75f; int spawn_count = 1; while (spawn_count <= 1) { spawnPosition.X += Commands->Get_Random( -2.0f , 2.0f); spawnPosition.Y += Commands->Get_Random( -2.0f , 2.0f); GameObject *luckycharm; luckycharm = Commands->Create_Object ( "POW_Data_Disc", spawnPosition ); Commands->Attach_Script(luckycharm, "M01_Priest_Datadisc_JDG", ""); spawn_count++; } } } } }; DECLARE_SCRIPT(M01_Church_Interior_Nun_JDG, "") { bool following_player; int prayerSound; REGISTER_VARIABLES() { SAVE_VARIABLE(following_player, 1); SAVE_VARIABLE(prayerSound, 2); } void Created( GameObject * obj ) { Commands->Innate_Disable(obj); following_player = false; Vector3 myPosition = Commands->Get_Position ( obj ); prayerSound = Commands->Create_Sound ( "MX1DSGN_DSGN0021I1DSGN_SND", myPosition, obj ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Stop_Sound ( prayerSound, true ); Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103394 ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { params.Set_Basic( this, 90, 0 ); params.Set_Animation ("S_A_Human.H_A_Host_L2b", true); Commands->Action_Play_Animation (obj, params); Commands->Start_Sound ( prayerSound ); } else if ((param == M01_CHURCH_GUARD_IS_DEAD_JDG))//Your guard is dead--do something { Commands->Stop_Sound ( prayerSound, true ); Commands->Enable_Hibernation( obj, false ); params.Set_Basic( this, 90, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("S_A_Human.H_A_Host_L2c", false); Commands->Action_Play_Animation (obj, params); } else if ((param == M01_GOING_TO_EVAC_SPOT_JDG))//your ride is here--go get in { Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( 103394 ) ); ActionParamsStruct params; Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { 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)//civ is standing up after guard is dead { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation ("S_A_Human.H_A_Host_L1b", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_02_JDG)//civ is standing up after guard is dead { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation ("S_A_Human.H_A_Host_L1c", false); Commands->Action_Play_Animation (obj, params); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "MX1DSGN_DSGN0022I1DSGN_SND", myPosition, obj ); } else if (action_id == M01_DOING_ANIMATION_03_JDG)//civ is standing up after guard is dead { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3 (-136.738f, 325.073f, 8.167f), RUN, 0.50f ); Commands->Action_Goto( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG)//Nun is by chinook--play getting on anim { Commands->Enable_Hibernation( obj, true ); if (Commands->Find_Object ( 101370 ))//this is your conversation zone { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101370 ), 0, M01_START_ACTING_JDG, 1 ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG )//Nun is by chinook--play getting on anim { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CHURCH_CLERGY_HAS_BOARDED_JDG, 1 ); Commands->Give_Points( STAR, 2000, false ); 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); GameObject * airdropController = Commands->Find_Object ( M01_CHURCHAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( 103394 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } } } void Poked( GameObject * obj, GameObject * poker ) { ActionParamsStruct params; if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_INTERIOR_NUN_CONVERSATION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Church_LoveShack_Nun_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj); Commands->Send_Custom_Event( obj, Commands->Find_Object ( 103394 ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); GameObject * conversationZone = Commands->Find_Object ( 103392 ); if (conversationZone != NULL) { Commands->Destroy_Object ( conversationZone ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if ((param == M01_START_ACTING_JDG))//Player is entering church area--cue actors { params.Set_Basic(this, 90, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 100750; params.WaypointStartID = 100753; params.WaypointEndID = 100758; Commands->Action_Goto( obj, params ); } else if ((param == M01_LOVESHACK_GUARD_IS_DEAD_JDG))//Your guard is dead--follow havoc { Commands->Enable_Hibernation( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3 (0,0,0), RUN, 1.0f ); params.WaypathID = 103383; params.WaypointStartID = 103384; params.WaypointEndID = 103390; Commands->Action_Goto( obj, params ); } else if ((param == M01_GOING_TO_EVAC_SPOT_JDG))//your ride is here--go get in { Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( 103394 ) ); ActionParamsStruct params; Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { 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_GOING_TO_EVAC_SPOT_JDG )//Nun is by chinook--play getting on anim { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CHURCH_CLERGY_HAS_BOARDED_JDG, 1 ); Commands->Give_Points( STAR, 2000, false ); 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 ); GameObject * airdropController = Commands->Find_Object ( M01_CHURCHAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( 103394 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_WALKING_WAYPATH_02_JDG )//nun is at hide spot--play animation--cue havoc talk zone { Commands->Enable_Hibernation( obj, true ); if (Commands->Find_Object ( 101368 ))//this is your conversation zone { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101368 ), 0, M01_START_ACTING_JDG, 1 ); } } } } void Poked( GameObject * obj, GameObject * poker ) { if (poker == STAR) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_LOVESHACK_NUN_CONVERSATION_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_BarnArea_Air_Evac_Rope_JDG, "") { void Created( GameObject * obj ) { Commands->Debug_Message ( "**********************script attached to evac rope\n" ); Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_ROPE_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************rope has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeZ", false ); } break; } } }; DECLARE_SCRIPT(M01_BarnArea_Air_Evac_Waypath_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_WAYPATH_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************waypath has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_BarnArea_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsA", false ); Commands->Debug_Message ( "**********************script attached to evac chopper\n" ); Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); GameObject * myController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } GameObject * barnCiv01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); GameObject * barnCiv02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); GameObject * barnCiv03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if (barnCiv01 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv01, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } if (barnCiv02 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv02, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } if (barnCiv03 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv03, 0, M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsA") == 0) { Commands->Debug_Message ( "**********************chopper has finished entry anim\n" ); Vector3 evacLocation = Commands->Get_Position ( obj ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsL", true ); GameObject * barnCiv01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); GameObject * barnCiv02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); GameObject * barnCiv03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if (barnCiv01 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv01, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (barnCiv02 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv02, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } if (barnCiv03 != NULL) { Commands->Send_Custom_Event ( obj, barnCiv03, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 2 ); } Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************helicopter has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * barnCiv01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); GameObject * barnCiv02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); GameObject * barnCiv03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if ((barnCiv01 != NULL)||(barnCiv02 != NULL)||(barnCiv03 != NULL)) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 1 ); } else { Commands->Debug_Message ( "*******************************all barn civs on board--about to send cutom to controller\n" ); GameObject * controller = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (controller != NULL) { Commands->Send_Custom_Event ( obj, controller, 0, M01_EVERYONES_ON_BOARD_JDG, 0 ); Commands->Debug_Message ( "*******************************all barn civs on board--sent cutom to controller\n" ); } GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event( obj, missionController, 0, M01_END_BARN_ROUNDUP_OBJECTIVE_JDG, 0 ); } } } break; } } }; DECLARE_SCRIPT(M01_Barn_Prisoner_01_JDG, "")//this guys ID is M01_BARN_PRISONER_01_ID 101442--this is female { bool talkingToHavoc; bool chinookOnWay; REGISTER_VARIABLES() { SAVE_VARIABLE(talkingToHavoc, 1); SAVE_VARIABLE(chinookOnWay, 2); } void Created( GameObject * obj ) { talkingToHavoc = false; chinookOnWay = false; Commands->Innate_Disable(obj); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2B", true ); Commands->Action_Play_Animation ( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) // { Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj ); //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); if (talkingToHavoc == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CUE_BABUSHKA_CONVERSATION_JDG, 2 ); } GameObject * evacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_CIVILIAN_KILLED_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG)//babushka runs to hide spot { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG)//you are now talking to havoc in your shed { talkingToHavoc = true; } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG)//your havoc conversation is now over { talkingToHavoc = false; } else if (param == M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG)//your ride is on the way--disable hibernation { chinookOnWay = true; Commands->Enable_Hibernation( obj, false ); } else if (param == M01_GOING_TO_EVAC_SPOT02_JDG) { Commands->Enable_Hibernation(obj, false ); Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ) ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_GDI ); //Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_NEUTRAL ); GameObject * babushkazone = Commands->Find_Object ( 101662 ); if (babushkazone != NULL)//kill babushka talk zone { Commands->Destroy_Object ( babushkazone ); } } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { 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_WALKING_WAYPATH_02_JDG)//civ is at hiding spot--crouch { Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Attack (STAR, 0, 0, true); params.Set_Animation ("S_A_HUMAN.H_A_A0C0", true); Commands->Action_Play_Animation (obj, params); if (Commands->Find_Object ( 101662 ))//sending custom to babushka conversation zone--okay to play conversation { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101662 ), 0, M01_START_ACTING_JDG, 0 ); } if (chinookOnWay == false) { Commands->Enable_Hibernation( obj, true ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//civ is at evac chopper--get on { 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 ); //Commands->Give_Points( STAR, 2000, false ); GameObject * airdropController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_DOING_ANIMATION_02_JDG )//pow guy is standingup { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L1C", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//play the Havoc conversation { Commands->Enable_Hibernation( obj, false ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(-51.0f, 214.2f, 5.5f), 1.0f, 0.5f ); Commands->Action_Goto( obj, params ); } } } }; DECLARE_SCRIPT(M01_Barn_Prisoner_02_JDG, "")//this guys ID is M01_BARN_PRISONER_02_ID 101444--this is Billy { bool chinookOnWay; REGISTER_VARIABLES() { SAVE_VARIABLE(chinookOnWay, 1); } void Created( GameObject * obj ) { chinookOnWay = false; Commands->Innate_Disable(obj); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2B", true ); Commands->Action_Play_Animation ( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj ); //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); GameObject * evacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_CIVILIAN_KILLED_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG)//goto your hiding spot { Commands->Enable_Hibernation( obj, false ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (param == M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG)//your ride is on the way--disable hibernation { chinookOnWay = true; Commands->Enable_Hibernation( obj, false ); } else if (param == M01_GOING_TO_EVAC_SPOT02_JDG) { Commands->Enable_Hibernation(obj, false ); Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ) ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); GameObject * billyszone = Commands->Find_Object ( 101661 ); if (billyszone != NULL)//kill billy's talk zone { Commands->Destroy_Object ( billyszone ); } } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { 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_WALKING_WAYPATH_01_JDG)//billys at his hide spot { if (Commands->Find_Object ( 101661 ))//sending custom to billys conversation zone--okay to play conversation { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101661 ), 0, M01_START_ACTING_JDG, 0 ); } if (chinookOnWay == false) { Commands->Enable_Hibernation( obj, true ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//civ is at evac chopper--get on { 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); Commands->Give_Points( STAR, 2000, false ); GameObject * airdropController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_DOING_ANIMATION_02_JDG )//pow guy is standingup { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L1C", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//play the Havoc conversation { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-73.572f, 138.013f, 0.329f), RUN, .5f ); Commands->Action_Goto( obj, params ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_GDI ); //Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_NEUTRAL ); } } } }; DECLARE_SCRIPT(M01_Barn_Prisoner_03_JDG, "")//this guys ID is M01_BARN_PRISONER_03_ID 101443--this is pierre { bool chinookOnWay; REGISTER_VARIABLES() { SAVE_VARIABLE(chinookOnWay, 1); } void Created( GameObject * obj ) { chinookOnWay = false; //Commands->Innate_Disable(obj); Commands->Set_Innate_Is_Stationary ( obj, true ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2B", true ); Commands->Action_Play_Animation ( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { Commands->Create_Sound ( "EVA_Civilian_Killed", Vector3 (0,0,0), obj ); //Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_CIVILIAN_KILLED_JDG, 0 ); GameObject * evacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_CIVILIAN_KILLED_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_JDG)//guy runs to back shed { Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Enable_Hibernation( obj, false ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L2C", false ); Commands->Action_Play_Animation ( obj, params ); }//M01_MODIFY_YOUR_ACTION_11_JDG else if (param == M01_MODIFY_YOUR_ACTION_11_JDG)//babushka is talking ot havoc--turn and face him { Commands->Action_Reset ( obj, 100 ); //ActionParamsStruct params; //params.Set_Basic(this, 100, M01_MODIFY_YOUR_ACTION_JDG); //params.Set_Look( STAR, 15 ); //params.Set_Attack( STAR, 0, 0, true ); //Commands->Action_Attack ( obj, params ); //Commands->Action_Face_Location ( obj, params ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_MODIFY_YOUR_ACTION_JDG); //params.Set_Look( STAR, 15 ); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); } else if (param == M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG)//your ride is on the way--disable hibernation { chinookOnWay = true; Commands->Enable_Hibernation( obj, false ); Commands->Set_Innate_Is_Stationary ( obj, false ); } else if (param == M01_GOING_TO_EVAC_SPOT02_JDG) { Commands->Debug_Message ( "***************************barn civ 3 has received evac chopper call--should now be going to evac spot\n" ); Commands->Enable_Hibernation(obj, false ); Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 evacSpot = Commands->Get_Position ( Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ) ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_GOING_TO_EVAC_SPOT_JDG); params.Set_Movement( evacSpot, 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)//civ is at hiding spot--crouch { Commands->Set_Innate_Is_Stationary ( obj, true ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_MODIFY_YOUR_ACTION_JDG); params.Set_Look( STAR, 15 ); //params.Set_Attack( STAR, 0, 0, true ); //Commands->Action_Attack ( obj, params ); Commands->Action_Face_Location ( obj, params ); if (Commands->Find_Object ( 101662 ))//sending custom to babushka conversation zone--okay to play conversation { Commands->Send_Custom_Event( obj, Commands->Find_Object ( 101662 ), 0, M01_START_ACTING_JDG, 0 ); } if (chinookOnWay == false) { Commands->Enable_Hibernation( obj, true ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG )//civ is at evac chopper--get on { 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 ); //Commands->Give_Points( STAR, 2000, false ); GameObject * airdropController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( M01_BARNAREA_EVAC_MONITOR_JDG ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_DOING_ANIMATION_02_JDG )//pow guy is standingup { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "S_A_HUMAN.H_A_HOST_L1C", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//play the Havoc conversation { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( Vector3(-56.8f, 213.2f, 5.5f), 1.0f, 0.5f ); Commands->Action_Goto( obj, params ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_GDI ); //Commands->Set_Obj_Radar_Blip_Shape ( obj, RADAR_BLIP_SHAPE_OBJECTIVE ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_NEUTRAL ); } } } }; DECLARE_SCRIPT(M01_GDIBasePOW_Air_Evac_Rope_JDG, "") { void Created( GameObject * obj ) { Commands->Debug_Message ( "**********************script attached to evac rope\n" ); Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_ROPE_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************rope has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeZ", false ); } break; } } }; DECLARE_SCRIPT(M01_GDIBasePOW_Air_Evac_Waypath_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_WAYPATH_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************waypath has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_Evac_TroopBone_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_troopBN.XG_EV5_troopBN") == 0) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GDIBaseCommander_Air_Evac_Waypath_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( 106694 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************waypath has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathZ", false ); } break; } } }; DECLARE_SCRIPT(M01_GDIBaseCommander_Air_Evac_Rope_JDG, "") { void Created( GameObject * obj ) { Commands->Debug_Message ( "**********************script attached to evac rope\n" ); Commands->Enable_Hibernation( obj, false ); GameObject * myController = Commands->Find_Object ( 106694 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeZ") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************rope has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeZ", false ); } break; } } }; DECLARE_SCRIPT(M01_TriggerZone_GDIBase_BaseCommander_JDG, "")//106267 and 106268 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * gdiBaseCommander = Commands->Find_Object ( 106050 ); if (gdiBaseCommander != NULL) { Commands->Send_Custom_Event( obj, gdiBaseCommander, 0, M01_START_ACTING_JDG, 0 ); } GameObject * zone01 = Commands->Find_Object ( 106267 );//trigger zone 01 for base commander if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//this is a one-time only zone--cleaning up } GameObject * zone02 = Commands->Find_Object ( 106268 );//trigger zone 02 for base commander if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//this is a one-time only zone--cleaning up } GameObject * zone03 = Commands->Find_Object ( 105615 );//trigger zone 01 for this is the path lets go if (zone03 != NULL) { Commands->Destroy_Object ( zone03 );//this is a one-time only zone--cleaning up } GameObject * zone04 = Commands->Find_Object ( 113733 );//trigger zone 02 for this is the path lets go if (zone04 != NULL) { Commands->Destroy_Object ( zone04 );//this is a one-time only zone--cleaning up } GameObject * pow01 = Commands->Find_Object ( 103328 ); GameObject * pow02 = Commands->Find_Object ( 103327 ); if (pow01 != NULL && pow02 != NULL) { Commands->Set_Objective_Status( M01_GDI_BASE_POW_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } if (pow01 != NULL) { Commands->Destroy_Object ( pow01 ); } if (pow02 != NULL) { Commands->Destroy_Object ( pow02 ); } GameObject * pow_guard01 = Commands->Find_Object ( 103334 ); if (pow_guard01 != NULL) { Commands->Destroy_Object ( pow_guard01 ); } GameObject * pow_guard02 = Commands->Find_Object ( 103329 ); if (pow_guard02 != NULL) { Commands->Destroy_Object ( pow_guard02 ); } GameObject * pow_guard03 = Commands->Find_Object ( 103330 ); if (pow_guard03 != NULL) { Commands->Destroy_Object ( pow_guard03 ); } GameObject * pow_guard04 = Commands->Find_Object ( 103332 ); if (pow_guard04 != NULL) { Commands->Destroy_Object ( pow_guard04 ); } GameObject * pow_triggerzone = Commands->Find_Object ( 114348 );// if (pow_triggerzone != NULL) { Commands->Destroy_Object ( pow_triggerzone ); } GameObject * gdi_minigunner_escort = Commands->Find_Object ( 104685 );//M01_GDI_BASE_POWS_OVER_JDG if (gdi_minigunner_escort != NULL) { Commands->Send_Custom_Event( obj, gdi_minigunner_escort, 0, M01_GDI_BASE_POWS_OVER_JDG, 0 ); Commands->Send_Custom_Event( obj, gdi_minigunner_escort, 0, M01_WALKING_WAYPATH_05_JDG, 0 ); } //GameObject * gdi_grenadier_escort = Commands->Find_Object ( 104686 ); //if (gdi_grenadier_escort != NULL) //{ // Commands->Send_Custom_Event( obj, gdi_grenadier_escort, 0, M01_GDI_BASE_POWS_OVER_JDG, 0 ); //} } } }; DECLARE_SCRIPT(M01_GDIBase_FirstChinookFlamethrowerGuy_JDG, "") { void Created( GameObject * obj ) { GameObject * gdiGuy01 = Commands->Find_Object ( 104685 ); GameObject * gdiGuy02 = Commands->Find_Object ( 104686 ); if (gdiGuy01 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy01, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); } if (gdiGuy02 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy02, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); } } }; /*DECLARE_SCRIPT(M01_GDIBase_SecondChinookFlamethrowerGuy_JDG, "") { void Created( GameObject * obj ) { GameObject * powController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (powController != NULL) { Commands->Send_Custom_Event( obj, powController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.h_a_troopdrop") == 0) { Vector3 myHomeSpot (-22.604f, 25.125f, 1.605f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_START_ATTACKING_03_JDG); params.Set_Movement(myHomeSpot, RUN, 5); Commands->Action_Attack (obj, params); Commands->Set_Innate_Soldier_Home_Location ( obj, myHomeSpot, 10 ); } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * powController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (powController != NULL) { Commands->Send_Custom_Event( obj, powController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_GDIBase_SecondChinookMinigunnerGuy_JDG, "") { void Created( GameObject * obj ) { GameObject * powController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (powController != NULL) { Commands->Send_Custom_Event( obj, powController, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.h_a_troopdrop") == 0) { Vector3 myHomeSpot (-16.144f, 19.274f, 2.312f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_START_ATTACKING_03_JDG); params.Set_Movement(myHomeSpot, RUN, 2); Commands->Action_Attack (obj, params); Commands->Set_Innate_Soldier_Home_Location ( obj, myHomeSpot, 10 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG) { params.Set_Basic(this, 100, M01_START_ATTACKING_03_JDG); params.Set_Movement(STAR, RUN, 5); params.Set_Attack( STAR, 15, 1, true ); Commands->Action_Attack (obj, params); } } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * powController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (powController != NULL) { Commands->Send_Custom_Event( obj, powController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } };*/ DECLARE_SCRIPT(M01_TibCave_StartZone_JDG, "")//108922 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * visceroid01 = Commands->Find_Object ( 106908 ); GameObject * visceroid02 = Commands->Find_Object ( 106909 ); GameObject * visceroid03 = Commands->Find_Object ( 106907 ); GameObject * visceroidNodGuy01 = Commands->Find_Object ( 106910 ); GameObject * visceroidNodGuy02 = Commands->Find_Object ( 106911 ); if (visceroid01 != NULL) { Commands->Send_Custom_Event ( obj, visceroid01, 0, M01_START_ACTING_JDG, 0 ); } if (visceroid02 != NULL) { Commands->Send_Custom_Event ( obj, visceroid02, 0, M01_START_ACTING_JDG, 0 ); } if (visceroid03 != NULL) { Commands->Send_Custom_Event ( obj, visceroid03, 0, M01_START_ACTING_JDG, 0 ); } if (visceroidNodGuy01 != NULL) { Commands->Send_Custom_Event ( obj, visceroidNodGuy01, 0, M01_START_ACTING_JDG, 0 ); } if (visceroidNodGuy02 != NULL) { Commands->Send_Custom_Event ( obj, visceroidNodGuy02, 0, M01_START_ACTING_JDG, 1 ); } Commands->Destroy_Object ( obj );//one time zone--cleaning up } } }; DECLARE_SCRIPT(M01_Visceroid01_JDG, "")//106908 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Innate_Enable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); GameObject * nodguy01 = Commands->Find_Object ( 106910 ); if (nodguy01 != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( nodguy01, 10, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } } }; DECLARE_SCRIPT(M01_Visceroid02_JDG, "")//106909 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Innate_Enable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); GameObject * nodguy01 = Commands->Find_Object ( 106910 ); if (nodguy01 != NULL) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( nodguy01, 10, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } } }; DECLARE_SCRIPT(M01_Visceroid03_JDG, "")//106907 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Innate_Enable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( STAR, 10, 0, true ); params.Set_Movement( STAR, RUN, 2 ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } }; DECLARE_SCRIPT(M01_Visceroid_NodGuy01_JDG, "")//106910 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Innate_Enable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); Commands->Create_Sound ( "MX1DSGN_DSGN0017I1DSGN_SND", myPosition, obj ); GameObject * visceroid01 = Commands->Find_Object ( 106908 ); if (visceroid01 != NULL) { ActionParamsStruct params; params.Set_Basic( this, 90, M01_START_ACTING_JDG ); params.Set_Attack( visceroid01, 25, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } } }; DECLARE_SCRIPT(M01_Visceroid_NodGuy02_JDG, "")//106911 { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Innate_Enable(obj); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); Commands->Create_Sound ( "MX1DSGN_DSGN0018I1DSGN_SND", myPosition, obj ); GameObject * visceroid01 = Commands->Find_Object ( 106908 ); if (visceroid01 != NULL) { ActionParamsStruct params; params.Set_Basic( this, 90, M01_START_ACTING_JDG ); params.Set_Attack( visceroid01, 25, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } } }; DECLARE_SCRIPT(M01_Tiberium_Cave_Spawn_Helicopter_Zone_JDG, "")//M01_TIB_TUNNEL_HELICOPTER_ZONE_JDG...this guys ID is 100955 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SPAWN_TIB_CAVE_HELICOPTER_JDG, 0 ); int apacheConv = Commands->Create_Conversation( "M01_Announce_Apache_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, apacheConv, false, false ); Commands->Join_Conversation( STAR, apacheConv, false, false ); Commands->Start_Conversation( apacheConv, apacheConv ); GameObject * tunnelGuy = Commands->Find_Object ( 103274 ); if (tunnelGuy != NULL) { Commands->Send_Custom_Event( obj, tunnelGuy, 0, M01_START_ACTING_JDG, 0 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_TiberiumCave_UpThere_NodGuy_JDG, "")//103274 { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } 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_START_ACTING_JDG ); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack (obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 3 ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Create_Sound ( "MX1DSGN_DSGN0019I1DSGN_SND", myPosition, obj ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( STAR, 50, 0, true ); Commands->Action_Attack (obj, params); } } } }; DECLARE_SCRIPT(M01_Detention_GuardTower_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * detentionCiv01 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_01_JDG ); if (detentionCiv01 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * detentionCiv02 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_02_JDG ); if (detentionCiv02 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv02, 0, M01_START_ACTING_JDG, 0 ); } GameObject * detentionCiv03 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_03_JDG ); if (detentionCiv03 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv03, 0, M01_START_ACTING_JDG, 0 ); } GameObject * detentionGDI01 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_01_JDG ); if (detentionGDI01 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI01, 0, M01_START_ACTING_JDG, 0 ); } GameObject * detentionGDI02 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_02_JDG ); if (detentionGDI02 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI02, 0, M01_START_ACTING_JDG, 0 ); } GameObject * detentionGDI03 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_03_JDG ); if (detentionGDI03 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI03, 0, M01_START_ACTING_JDG, 0 ); } } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { GameObject * detentionCiv01 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_01_JDG ); if (detentionCiv01 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv01, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * detentionCiv02 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_02_JDG ); if (detentionCiv02 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv02, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * detentionCiv03 = Commands->Find_Object ( M01_DETENTION_CIVILIAN_03_JDG ); if (detentionCiv03 != NULL) { Commands->Send_Custom_Event( obj, detentionCiv03, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * detentionGDI01 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_01_JDG ); if (detentionGDI01 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI01, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * detentionGDI02 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_02_JDG ); if (detentionGDI02 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI02, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * detentionGDI03 = Commands->Find_Object ( M01_DETENTION_GDI_GUY_03_JDG ); if (detentionGDI03 != NULL) { Commands->Send_Custom_Event( obj, detentionGDI03, 0, M01_GOTO_IDLE_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_PrisonPen_POW_JDG, "") { bool okayToReact; bool heardHavocAlert; bool gateIsDown; bool sam_is_destroyed; int pow_guy01_id;//101927 REGISTER_VARIABLES() { SAVE_VARIABLE(okayToReact, 1); SAVE_VARIABLE(heardHavocAlert, 2); SAVE_VARIABLE(gateIsDown, 3); SAVE_VARIABLE(sam_is_destroyed, 4); SAVE_VARIABLE(pow_guy01_id, 5); } void Created( GameObject * obj ) { Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_GDI ); pow_guy01_id = 101927; okayToReact = false; heardHavocAlert = false; gateIsDown = false; sam_is_destroyed = false; Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, false ); Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); } void Killed( GameObject * obj, GameObject * killer ) { } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_START_ACTING_JDG: { Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, true ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, true ); okayToReact = true; } break; case M01_GOTO_IDLE_JDG: { Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); okayToReact = false; } break; case M01_FACING_SPECIFIED_DIRECTION_01_JDG: { Commands->Innate_Disable(obj); params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG ); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 0.25f, 2.5f ); Commands->Send_Custom_Event( obj, obj, 0, M01_DOING_ANIMATION_01_JDG, delayTimer ); } break; case M01_DOING_ANIMATION_01_JDG: { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } break; } } void Poked( GameObject * obj, GameObject * poker ) { if (gateIsDown == true) { if (sam_is_destroyed == false) { int apacheConv = Commands->Create_Conversation( "M01_Detention_GDI_Poke_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, false, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_02_JDG) { GameObject * gdipow01 = Commands->Find_Object ( pow_guy01_id );// if (obj == gdipow01) { Commands->Set_Innate_Is_Stationary ( obj, true ); int apacheConv = Commands->Create_Conversation( "M01_Detention_GDI_Hello_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, false, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } } else if (action_id == M01_DOING_ANIMATION_01_JDG) { GameObject * gdipow01 = Commands->Find_Object ( pow_guy01_id ); if (obj == gdipow01) { params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3 (-297.801f, 572.799f, 27.458f), RUN, 1); Commands->Action_Goto ( obj, params ); } } else if (action_id == M01_WALKING_WAYPATH_03_JDG) { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG) { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); GameObject * gdipow01 = Commands->Find_Object ( pow_guy01_id ); if (obj == gdipow01) { int apacheConv = Commands->Create_Conversation( "M01_Detention_GDI_Evac_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, true, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } } else if (action_id == M01_DOING_ANIMATION_03_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_04_JDG) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_DO_END_MISSION_CHECK_JDG, 5 ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( Vector3 (-328.136f, 548.518f, 30.044f), RUN, 3); Commands->Action_Goto ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_05_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event( obj, missionController, 0, M01_DO_END_MISSION_CHECK_JDG, 5 ); } } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { ActionParamsStruct params; if (sound.Type == M01_DETENTION_GATE_IS_DOWN_JDG && gateIsDown == false) { gateIsDown = true; Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Action_Reset ( obj, 100 ); GameObject * commCenterSamSite = Commands->Find_Object ( M01_COMMCENTER_SAM_JDG ); if (commCenterSamSite != NULL) { Vector3 myGotoSpot; int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == M01_DETENTION_GDI_GUY_01_JDG) { myGotoSpot.Set (-312.413f, 577.030f, 27.567f); } else if (myIdNumber == M01_DETENTION_GDI_GUY_02_JDG) { myGotoSpot.Set (-311.138f, 578.398f, 27.687f); } else { myGotoSpot.Set (-309.667f, 576.016f, 27.753f); } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( myGotoSpot, RUN, 0.5f); Commands->Action_Goto ( obj, params ); } } else if (sound.Type == M01_DETENTION_GATE_DOWN_SAM_DEAD_JDG) { sam_is_destroyed = true; Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Action_Reset ( obj, 100 ); Vector3 myGotoSpot; int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == M01_DETENTION_GDI_GUY_01_JDG) { myGotoSpot.Set (-312.413f, 577.030f, 27.567f); } else if (myIdNumber == M01_DETENTION_GDI_GUY_02_JDG) { myGotoSpot.Set (-311.138f, 578.398f, 27.687f); } else { myGotoSpot.Set (-309.667f, 576.016f, 27.753f); } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement( myGotoSpot, RUN, 0.5f); Commands->Action_Goto ( obj, params ); } else if (sound.Creator == STAR && okayToReact == true && heardHavocAlert == false) { if (sound.Type == SOUND_TYPE_GUNSHOT) { heardHavocAlert = true; Commands->Send_Custom_Event( obj, obj, 0, M01_FACING_SPECIFIED_DIRECTION_01_JDG, 0 ); } else if (sound.Type == SOUND_TYPE_BULLET_HIT) { heardHavocAlert = true; Commands->Send_Custom_Event( obj, obj, 0, M01_FACING_SPECIFIED_DIRECTION_01_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_PrisonPen_Civilian_JDG, "") { Vector3 wanderSpot[10]; int gdi_pow_id; int my_id; int prisoner_2_id; int prisoner_3_id; int last; float loiterTimeMin; float loiterTimeMax; bool okayToReact; bool heardHavocAlert; bool gateIsDown; bool sam_is_destroyed; REGISTER_VARIABLES() { SAVE_VARIABLE(gdi_pow_id, 1); SAVE_VARIABLE(my_id, 2); SAVE_VARIABLE(prisoner_2_id, 3); SAVE_VARIABLE(prisoner_3_id, 4); SAVE_VARIABLE(last, 5); SAVE_VARIABLE(loiterTimeMin, 6); SAVE_VARIABLE(loiterTimeMax, 7); SAVE_VARIABLE(okayToReact, 8); SAVE_VARIABLE(heardHavocAlert, 9); SAVE_VARIABLE(gateIsDown, 10); SAVE_VARIABLE(sam_is_destroyed, 11); } void Created( GameObject * obj ) { okayToReact = false; heardHavocAlert = false; gateIsDown = false; sam_is_destroyed = false; Commands->Innate_Soldier_Enable_Enemy_Seen ( obj, false ); Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); wanderSpot[0].Set (-313.881f, 589.854f, 27.457f); wanderSpot[1].Set (-303.287f, 587.881f, 27.457f); wanderSpot[2].Set (-296.290f, 595.483f, 27.458f); wanderSpot[3].Set (-295.055f, 589.244f, 27.458f); wanderSpot[4].Set (-309.122f, 578.526f, 27.741f); wanderSpot[5].Set (-299.833f, 578.027f, 27.735f); wanderSpot[6].Set (-297.657f, 571.844f, 27.458f); wanderSpot[7].Set (-289.746f, 578.258f, 27.781f); wanderSpot[8].Set (-280.325f, 579.701f, 27.458f); wanderSpot[9].Set (-286.094f, 585.007f, 27.720f); loiterTimeMin = 5; loiterTimeMax = 30; last = 20; gdi_pow_id = 101927; my_id = Commands->Get_ID ( obj ); if (my_id == 101929) { prisoner_2_id = 101930; prisoner_3_id = 101931; } else if (my_id == 101930) { prisoner_2_id = 101929; prisoner_3_id = 101931; } else if (my_id == 101931) { prisoner_2_id = 101929; prisoner_3_id = 101930; } Commands->Start_Timer ( obj, this, 5, M01_PICK_A_NEW_LOCATION_JDG ); } void Timer_Expired(GameObject * obj, int timer_id) { ActionParamsStruct params; int random = int(Commands->Get_Random(0, 13-WWMATH_EPSILON)); while (random == last) { random = int(Commands->Get_Random(0, 13-WWMATH_EPSILON)); } if (random <= 9) { Vector3 shinGotoSpot = wanderSpot[random]; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( shinGotoSpot, WALK, 1 ); Commands->Action_Goto( obj, params ); loiterTimeMin = 5; loiterTimeMax = 30; } else if (random == 10 && Commands->Find_Object ( prisoner_2_id )) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Commands->Find_Object ( prisoner_2_id ), WALK, 2 ); Commands->Action_Goto( obj, params ); loiterTimeMin = 5; loiterTimeMax = 30; } else if (random == 11 && Commands->Find_Object ( prisoner_3_id )) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Commands->Find_Object ( prisoner_3_id ), WALK, 2 ); Commands->Action_Goto( obj, params ); loiterTimeMin = 5; loiterTimeMax = 30; } else { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Commands->Find_Object ( gdi_pow_id ), WALK, 2 ); Commands->Action_Goto( obj, params ); loiterTimeMin = 1; loiterTimeMax = 3; } last = random; } void Poked( GameObject * obj, GameObject * poker ) { if (gateIsDown == true) { if (sam_is_destroyed == false) { GameObject * babushka = Commands->Find_Object ( M01_DETENTION_CIVILIAN_01_JDG ); GameObject * pierre = Commands->Find_Object ( M01_DETENTION_CIVILIAN_02_JDG ); GameObject * farmerJohn = Commands->Find_Object ( M01_DETENTION_CIVILIAN_03_JDG ); if (obj == babushka) { int apacheConv = Commands->Create_Conversation( "M01_Detention_Babushka_Poke_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, false, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } else if (obj == pierre) { int apacheConv = Commands->Create_Conversation( "M01_Detention_Pierre_Poke_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, false, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } else if (obj == farmerJohn) { int apacheConv = Commands->Create_Conversation( "M01_Detention_FarmerJohn_Poke_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, false, true, true ); Commands->Start_Conversation( apacheConv, apacheConv ); } } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_START_ACTING_JDG: { Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, true ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, true ); okayToReact = true; } break; case M01_GOTO_IDLE_JDG: { Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); okayToReact = false; } break; case M01_FACING_SPECIFIED_DIRECTION_01_JDG: { Commands->Innate_Disable(obj); params.Set_Basic( this, 100, M01_FACING_SPECIFIED_DIRECTION_01_JDG ); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack ( obj, params ); float delayTimer = Commands->Get_Random ( 1.25f, 3.5f ); Commands->Send_Custom_Event( obj, obj, 0, M01_DOING_ANIMATION_01_JDG, delayTimer ); } break; case M01_DOING_ANIMATION_01_JDG: { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } break; } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { ActionParamsStruct params; if (sound.Type == M01_DETENTION_GATE_IS_DOWN_JDG && gateIsDown == false) { gateIsDown = true; Commands->Action_Reset ( obj, 100 ); GameObject * commCenterSamSite = Commands->Find_Object ( M01_COMMCENTER_SAM_JDG ); if (commCenterSamSite != NULL) { Vector3 myGotoSpot; int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == M01_DETENTION_CIVILIAN_01_JDG)//babushka { myGotoSpot.Set (-303.867f, 579.217f, 27.604f); } else if (myIdNumber == M01_DETENTION_CIVILIAN_02_JDG)//pierre { myGotoSpot.Set (-304.901f, 575.936f, 27.724f); } else//farmer john { myGotoSpot.Set (-304.887f, 582.889f, 27.457f); } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( myGotoSpot, RUN, 0.5f); Commands->Action_Goto ( obj, params ); } } else if (sound.Type == M01_DETENTION_GATE_DOWN_SAM_DEAD_JDG ) { sam_is_destroyed = true; Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Action_Reset ( obj, 100 ); Vector3 myGotoSpot; int myIdNumber = Commands->Get_ID ( obj ); if (myIdNumber == M01_DETENTION_CIVILIAN_01_JDG)//babushka { myGotoSpot.Set (-303.867f, 579.217f, 27.604f); } else if (myIdNumber == M01_DETENTION_CIVILIAN_02_JDG)//pierre { myGotoSpot.Set (-304.901f, 575.936f, 27.724f); } else//farmer john { myGotoSpot.Set (-304.887f, 582.889f, 27.457f); } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( myGotoSpot, RUN, 0.5f); Commands->Action_Goto ( obj, params ); } else if (sound.Creator == STAR && okayToReact == true && heardHavocAlert == false) { if (sound.Type == SOUND_TYPE_GUNSHOT) { Commands->Send_Custom_Event( obj, obj, 0, M01_FACING_SPECIFIED_DIRECTION_01_JDG, 0 ); heardHavocAlert = true; } else if (sound.Type == SOUND_TYPE_BULLET_HIT) { Commands->Send_Custom_Event( obj, obj, 0, M01_FACING_SPECIFIED_DIRECTION_01_JDG, 0 ); heardHavocAlert = true; } } } 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) { float delayTimer = Commands->Get_Random ( loiterTimeMin, loiterTimeMax ); Commands->Start_Timer(obj, this, delayTimer, 0); } else if (action_id == M01_WALKING_WAYPATH_02_JDG) { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG)//civ is running to gate { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, 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) { Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG) { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_04_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params );//M01_Detention_Babushka_Evac_Conversation01 GameObject * babushka = Commands->Find_Object ( M01_DETENTION_CIVILIAN_01_JDG ); if (obj == babushka) { int apacheConv = Commands->Create_Conversation( "M01_Detention_Babushka_Evac_Conversation01", 100, 1000, false); Commands->Join_Conversation( obj, apacheConv, true, true, true ); Commands->Join_Conversation( STAR, apacheConv, false, false, false ); Commands->Start_Conversation( apacheConv, apacheConv ); } } else if (action_id == M01_DOING_ANIMATION_04_JDG) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_DO_END_MISSION_CHECK_JDG, 5 ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement( Vector3 (-328.136f, 548.518f, 30.044f), RUN, 3); Commands->Action_Goto ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_05_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event( obj, missionController, 0, M01_DO_END_MISSION_CHECK_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_BarnArea_NOD_Commander_Trigger_Zone_JDG, "")//M01_BARNAREA_NOD_COMMANDER_JDG { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR ) { GameObject * firstFieldCommander = Commands->Find_Object (M01_BARNAREA_NOD_COMMANDER_JDG); if (firstFieldCommander != NULL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ), 0, M01_START_ACTING_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_ADD_BARN_COMMANDER_OBJECTIVE_JDG, 5 ); } GameObject * zone01 = Commands->Find_Object (102361); GameObject * zone02 = Commands->Find_Object (103343); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//one time zone } if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//one time zone } } } }; DECLARE_SCRIPT(M01_GDI_GuardTower_NOD_Commander_JDG, "")//M01_BARNAREA_NOD_COMMANDER_JDG { int guardTowerIntro; bool deadYet; bool introConvPlaying; bool firstTimeDamaged; bool playerSeen; REGISTER_VARIABLES() { SAVE_VARIABLE(guardTowerIntro, 1); SAVE_VARIABLE(deadYet, 2); SAVE_VARIABLE(introConvPlaying, 3); SAVE_VARIABLE(firstTimeDamaged, 4); SAVE_VARIABLE(playerSeen, 5); } void Created( GameObject * obj ) { introConvPlaying = false; firstTimeDamaged = true; playerSeen = false; deadYet = false; Commands->Set_Innate_Is_Stationary ( obj, true ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { if (damager == STAR && deadYet == false && firstTimeDamaged == true) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { char *animationName = M01_Choose_Duck_Animation(); firstTimeDamaged = false; ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR) { playerSeen = true; } } void Sound_Heard( GameObject * obj, const CombatSound & sound ) { if (sound.Creator == STAR) { if (/*sound.Type == SOUND_TYPE_GUNSHOT ||*/ sound.Type == SOUND_TYPE_BULLET_HIT) { if (obj) { if (deadYet == false && playerSeen == false) { Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float playerDistance = Commands->Get_Distance ( myPosition, playerPosition ); if (playerDistance >= 15) { char *animationName = M01_Choose_Duck_Animation(); //firstTimeDamaged = false; ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } } } } } } void Killed( GameObject * obj, GameObject * killer ) { if (introConvPlaying == true) { Commands->Stop_Conversation( guardTowerIntro ); } GameObject * zone01 = Commands->Find_Object (102361); GameObject * zone02 = Commands->Find_Object (103343); if (zone01 != NULL) { Commands->Destroy_Object ( zone01 );//one time zone } if (zone02 != NULL) { Commands->Destroy_Object ( zone02 );//one time zone } deadYet = true; GameObject * artilleryController = Commands->Find_Object ( M01_GDIBASE_ARTILLERY_CONTROLLER_ID ); if (artilleryController != NULL) { Commands->Send_Custom_Event( obj, artilleryController, 0, M01_GOTO_IDLE_JDG, 0 ); } GameObject * objectiveController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (objectiveController != NULL) { Commands->Send_Custom_Event( obj, objectiveController, 0, M01_CLEAR_FIRST_NOD_COMMANDER_PASS_JDG, 5 ); } if (STAR) { int guardTowerOutro = Commands->Create_Conversation( "M01_GuardTower_Outro_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, guardTowerOutro, false, false ); //Commands->Join_Conversation( STAR, guardTowerOutro, false, false ); Commands->Start_Conversation( guardTowerOutro, guardTowerOutro ); } 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == guardTowerIntro) { introConvPlaying = false; } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { switch (param) { case M01_START_ACTING_JDG: //here comes player start calling in reinforcements { GameObject * zone01 = Commands->Find_Object (102361); GameObject * zone02 = Commands->Find_Object (103343); if (sender == zone01) { Commands->Debug_Message ( "**********************Nod gdi tower commander has recieved command to start acting\n" ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, 2 ); } else if (sender == zone02) { Commands->Debug_Message ( "**********************Nod gdi tower commander has recieved command to start acting\n" ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 20 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, 20 ); } if (STAR && deadYet == false) { introConvPlaying = true; guardTowerIntro = Commands->Create_Conversation( "M01_GuardTower_Intro_Conversation", 95, 1000, true); Commands->Join_Conversation( NULL, guardTowerIntro, false, false ); //Commands->Join_Conversation( STAR, guardTowerIntro, false, false ); Commands->Start_Conversation( guardTowerIntro, guardTowerIntro ); Commands->Monitor_Conversation( obj, guardTowerIntro ); } } break; case M01_MODIFY_YOUR_ACTION_JDG://set timer--then call in next reinforcements { if (obj) { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float delayTimer; if (currentDifficulty == hard) { delayTimer = 60; } else if (currentDifficulty == medium) { delayTimer = 90; } else { delayTimer = 120; } Commands->Send_Custom_Event( obj, obj, 0, M01_SEND_GUARD_TOWER_CHINOOK_JDG, delayTimer ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer ); } } break; case M01_SEND_GUARD_TOWER_CHINOOK_JDG: //here comes player start calling in reinforcements { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SEND_GUARD_TOWER_CHINOOK_JDG, 0 ); } } break; case M01_CALL_IN_REINFORCEMENTS_JDG: //here comes player start calling in reinforcements { if (obj && deadYet == false) { GameObject * nodCommanderDialogController = Commands->Find_Object ( 103398 ); if (nodCommanderDialogController != NULL) { Commands->Debug_Message ( "**********************Nod gdi tower commander is sending custom to dialog controller\n" ); Commands->Send_Custom_Event( obj, nodCommanderDialogController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } float delayTimer = Commands->Get_Random ( 15, 30 ); Commands->Send_Custom_Event( obj, obj, 0, M01_CALL_IN_REINFORCEMENTS_JDG, delayTimer ); } } break; } } } }; DECLARE_SCRIPT(M01_Nod_Commander_Conversation_Controller_GDI, "")// 103398 { bool first_call; int initialCommanderConv; REGISTER_VARIABLES() { SAVE_VARIABLE(first_call, 1); SAVE_VARIABLE(initialCommanderConv, 2); } void Created( GameObject * obj ) { first_call = true; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//nod commander is calling in reinforcements { GameObject * guardTower01Commander = Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ); if (sender == guardTower01Commander && first_call == true) { first_call = false; initialCommanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv04", 100, 300, true); Commands->Join_Conversation( sender, initialCommanderConv, false, false, false ); Commands->Start_Conversation( initialCommanderConv, initialCommanderConv ); Commands->Monitor_Conversation( obj, initialCommanderConv ); } else { int random = Commands->Get_Random_Int(0, 5); if (random == 0) { int commanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv01", 90, 200, true); Commands->Join_Conversation( sender, commanderConv, false, false, false ); Commands->Start_Conversation( commanderConv, commanderConv ); } else if (random == 1) { int commanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv02", 90, 200, true); Commands->Join_Conversation( sender, commanderConv, false, false, false ); Commands->Start_Conversation( commanderConv, commanderConv ); } else if (random == 2) { int commanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv03", 90, 200, true); Commands->Join_Conversation( sender, commanderConv, false, false, false ); Commands->Start_Conversation( commanderConv, commanderConv ); } else if (random == 3) { int commanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv04", 90, 200, true); Commands->Join_Conversation( sender, commanderConv, false, false, false ); Commands->Start_Conversation( commanderConv, commanderConv ); } else { int commanderConv = Commands->Create_Conversation( "M01_Nod_Commander_Conv05", 90, 200, true); Commands->Join_Conversation( sender, commanderConv, false, false, false ); Commands->Start_Conversation( commanderConv, commanderConv ); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (action_id == initialCommanderConv) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_SEND_GUARD_TOWER_CHINOOK_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_GDIBase_LightTank_PastTunnelZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { GameObject * lightTank = Commands->Find_Object ( M01_TAILGUNAREA_NOD_LIGHTTANK_JDG ); if (enterer == lightTank) { Commands->Send_Custom_Event( obj, lightTank, 0, M01_GOTO_IDLE_JDG, 0 ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_KeyCard01_Script_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { int lockeKeycard = Commands->Create_Conversation( "M01_First_Keycard_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, lockeKeycard, false, false ); Commands->Start_Conversation( lockeKeycard, lockeKeycard ); } } }; DECLARE_SCRIPT(M01_GDIBase_AI_ExitZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { GameObject * gdiFollower = Commands->Find_Object ( 104686 ); GameObject * gdiCommander = Commands->Find_Object ( 106050 ); GameObject * gdiLeader = Commands->Find_Object ( 104685 ); GameObject * pow01 = Commands->Find_Object ( 103327 ); GameObject * pow02 = Commands->Find_Object ( 103328 ); if (enterer == gdiFollower) { if (gdiFollower != NULL) { Commands->Send_Custom_Event( obj, gdiFollower, 0, M01_HOLD_YOUR_POSITION_JDG, 0 ); } } else if (enterer == gdiCommander) { if (gdiCommander != NULL)// { Commands->Send_Custom_Event( obj, gdiCommander, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); //Commands->Set_Objective_Status( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } if (gdiFollower != NULL) { Commands->Send_Custom_Event( obj, gdiFollower, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } if (gdiLeader != NULL) { Commands->Send_Custom_Event( obj, gdiLeader, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } } else if (enterer == pow01) { if (pow01 != NULL) { Commands->Send_Custom_Event( obj, pow01, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } if (pow02 != NULL) { Commands->Send_Custom_Event( obj, pow02, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_GDIBase_LightTank_JDG, "")//M01_TAILGUNAREA_NOD_LIGHTTANK_JDG 102435 { void Killed( GameObject * obj, GameObject * killer ) { int tankReward = Commands->Create_Conversation( "M01_TankReward_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, tankReward, false, false ); //Commands->Join_Conversation( STAR, tankReward, false, false ); Commands->Start_Conversation( tankReward, tankReward ); Vector3 tankDeathSpot (4.2f, 279.8f, 3.2f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", tankDeathSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); Vector3 myPosition = Commands->Get_Position ( obj ); myPosition.Z += 0.25f; Commands->Create_Object ( "POW_Medal_Armor", myPosition ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; switch (param) { case M01_START_ACTING_JDG: { if (STAR) { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float tankSpeed; if (currentDifficulty == hard) { tankSpeed = 0.6f; } else if (currentDifficulty == medium) { tankSpeed = 0.4f; } else { tankSpeed = 0.2f; } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), tankSpeed, 2 ); params.WaypathID = 102233; //params.WaypointStartID = 102235; params.AttackCheckBlocked = false; params.AttackActive = false; Commands->Action_Attack( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 3 ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 3 ); } } break; case M01_MODIFY_YOUR_ACTION_03_JDG: { int currentDifficulty = Commands->Get_Difficulty_Level( ); int medium = 1; int hard = 2; float tankSpeed; float tankRange; float tankAccuracy; if (currentDifficulty == hard) { tankSpeed = 0.5f; tankRange = 100; tankAccuracy = 0; } else if (currentDifficulty == medium) { tankSpeed = 0.3f; tankRange = 75; tankAccuracy = 1; } else { tankSpeed = 0.1f; tankRange = 50; tankAccuracy = 3; } params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( Vector3(0,0,0), tankSpeed, 2 ); params.WaypathID = 102233; //params.WaypointStartID = 102235; params.Set_Attack( STAR, tankRange, tankAccuracy, true ); params.AttackActive = true; Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_02_JDG, params ); } break; } } }; DECLARE_SCRIPT(M01_GDIBase_BackPath_NodGuy_JDG, "")//103337 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Set_Innate_Is_Stationary ( obj, false ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(Vector3 (57.651f, 54.752f, -0.449f), RUN, 1); 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) { Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, 20 ); params.Set_Attack( STAR, 50, 3, true ); params.AttackCheckBlocked = true; Commands->Action_Attack (obj, params); } } }; DECLARE_SCRIPT(M01_Sinking_Gunboat_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation ( obj, "V_GDI_GBOAT.XG_GBOAT_SINK", false, NULL, 0, 60 ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "V_GDI_GBOAT.XG_GBOAT_SINK") == 0) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_PlayerEntering_BarnArea_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject *gunboatController = Commands->Find_Object ( M01_TURRETBEACH_CONTROLLER_ID ); if (gunboatController != NULL) { Commands->Send_Custom_Event ( obj, gunboatController, 0, M01_START_ACTING_JDG, 0 ); } GameObject *hovercraftController = Commands->Find_Object ( 121630 ); if (hovercraftController != NULL) { Commands->Send_Custom_Event ( obj, hovercraftController, 0, M01_START_ACTING_JDG, 10 ); } } } }; DECLARE_SCRIPT(M01_PlayerLeaving_BarnArea_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject *gunboatController = Commands->Find_Object ( M01_TURRETBEACH_CONTROLLER_ID ); if (gunboatController != NULL) { Commands->Send_Custom_Event ( obj, gunboatController, 0, M01_GOTO_IDLE_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_Barn_EntryZone_JDG, "")//113734 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR)// { GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event ( obj, missionController, 0, M01_END_BARN_OBJECTIVE_JDG, 0 ); Commands->Destroy_Object ( obj );//one time zone--cleaning up } } } }; DECLARE_SCRIPT(M01_GDI_BaseCommander_Backside_EntryZone_JDG, "")//113733 { bool entered; REGISTER_VARIABLES() { SAVE_VARIABLE(entered, 1); } void Created( GameObject * obj ) { entered = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR && entered == false) { entered = true; GameObject * gdiBaseLeaderGuy = Commands->Find_Object ( 104685 );// if (gdiBaseLeaderGuy != NULL) { Commands->Send_Custom_Event ( obj, gdiBaseLeaderGuy, 0, M01_MODIFY_YOUR_ACTION_10_JDG, 0 ); Commands->Destroy_Object ( obj );//one time zone--cleaning up } } } }; DECLARE_SCRIPT(M01_Obelisk_UpdateDisc_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Reveal_Encyclopedia_Building ( 12 ); Commands->Set_HUD_Help_Text ( IDS_M00EVAG_DSGN0104I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } }; DECLARE_SCRIPT(M01_BarnArea_EvacMonitor_JDG, "")//M01_BARNAREA_EVAC_MONITOR_JDG { int unitsEvacuated; int evac_helicopter_id; int evac_waypath_id; int evac_rope_id; bool transportCalled; int barnAirdrop_conv; bool failed; REGISTER_VARIABLES() { SAVE_VARIABLE(unitsEvacuated, 1); SAVE_VARIABLE(evac_helicopter_id, 2); SAVE_VARIABLE(evac_waypath_id, 3); SAVE_VARIABLE(evac_rope_id, 4); SAVE_VARIABLE(transportCalled, 5); SAVE_VARIABLE(barnAirdrop_conv, 6); SAVE_VARIABLE(failed, 7); } void Created( GameObject * obj ) { unitsEvacuated = 0; transportCalled = false; failed = false; } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == barnAirdrop_conv) { int honAlerted_conv = Commands->Create_Conversation( "M01_HandOfNod_Alerted_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, honAlerted_conv, false, false ); //Commands->Join_Conversation( STAR, honAlerted_conv, false, false ); Commands->Start_Conversation( honAlerted_conv, honAlerted_conv ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) // { if (param == M01_CIVILIAN_KILLED_JDG)// { GameObject * civ01 = Commands->Find_Object ( M01_BARN_PRISONER_01_ID ); GameObject * civ02 = Commands->Find_Object ( M01_BARN_PRISONER_02_ID ); GameObject * civ03 = Commands->Find_Object ( M01_BARN_PRISONER_03_ID ); if (sender == civ01) { failed = true; } else if (sender == civ02) { failed = true; } else if (sender == civ03) { failed = true; } } else if (param == M01_GOING_TO_EVAC_SPOT_JDG) { unitsEvacuated++; if (unitsEvacuated == 3 && failed == false) { barnAirdrop_conv = Commands->Create_Conversation( "M01_AirDrop_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, barnAirdrop_conv, false, false ); Commands->Start_Conversation( barnAirdrop_conv, barnAirdrop_conv ); Commands->Monitor_Conversation( obj, barnAirdrop_conv ); Vector3 airDropSpot (-0.923f, 143.580f, 0.647f); GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", airDropSpot); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1D_GDIPowerUpDrop.txt"); } } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//chopper is sending you his ID { evac_helicopter_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************chopper id received.....%d\n",evac_helicopter_id ); } else if (param == M01_WAYPATH_IS_SENDING_ID_JDG)//waypath is sending you his ID { evac_waypath_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************waypath id received.....%d\n", evac_waypath_id ); } else if (param == M01_ROPE_IS_SENDING_ID_JDG)//rope is sending you his ID { evac_rope_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************rope id received.....%d\n", evac_rope_id ); } else if (param == M01_GIVE_ME_A_ROPE_JDG)//someone is waiting--pull him up { Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject * troopbone = Commands->Create_Object("Invisible_Object", evacPosition ); Commands->Set_Model ( troopbone, "XG_EV5_troopBN" ); Commands->Attach_Script(troopbone, "M01_Evac_TroopBone_JDG", ""); Commands->Innate_Disable(sender); Commands->Attach_To_Object_Bone( sender, troopbone, "Troop_L" ); if(troopbone) { Commands->Set_Animation ( troopbone, "XG_EV5_troopBN.XG_EV5_troopBN", false); } else { Commands->Debug_Message("troopbone not created yet"); } Commands->Set_Animation ( sender, "S_A_Human.XG_EV5_troop", false ); } else if (param == M01_SEND_BARN_CIVILIANS_RESCUE_CHINOOK_JDG)//a gdi guy is waiting for evac--call in a helicopter { if (transportCalled == false) { transportCalled = true; Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_BarnArea_EvacAnim.txt"); } } else if (param == M01_EVERYONES_ON_BOARD_JDG)//chinook is ready to go--give clearance { Commands->Debug_Message ( "*******************************all barn civs on board--custom received by controller\n" ); GameObject *evacWaypath = Commands->Find_Object ( evac_waypath_id ); if (evacWaypath != NULL) { Commands->Send_Custom_Event( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject *evacChopper = Commands->Find_Object ( evac_helicopter_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject *evacRope = Commands->Find_Object ( evac_rope_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event( obj, evacRope, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (failed == true) { int honAlerted_conv = Commands->Create_Conversation( "M01_HandOfNod_Alerted_Conversation", 100, 1000, false); Commands->Join_Conversation( NULL, honAlerted_conv, false, false ); //Commands->Join_Conversation( STAR, honAlerted_conv, false, false ); Commands->Start_Conversation( honAlerted_conv, honAlerted_conv ); } } } }; DECLARE_SCRIPT(M01_HON_RedKey_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { bool playerHasRedKey = Commands->Has_Key( STAR, 3 ); if (playerHasRedKey == false) { Vector3 keyCardLocation (-168.195f, 527.489f, -31.130f); Commands->Create_Object ( "Level_03_Keycard", keyCardLocation ); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_Comm_Center_Pen_Gate, "") { bool samDead; REGISTER_VARIABLES() { SAVE_VARIABLE(samDead, 1); } void Created( GameObject * obj ) { samDead = false; Commands->Enable_HUD_Pokable_Indicator ( obj, true ); } void Poked( GameObject * obj, GameObject * poker ) // { if (poker == STAR && samDead == true) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_HAS_POKED_PEN_GATE_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_COMMCENTER_SAMSITE_HAS_BEEN_DESTROYED_JDG) { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 5 ); } else if (param == M01_START_ACTING_JDG) { samDead = true; } } } }; DECLARE_SCRIPT(M01_CommCenter_SAMSite_Script, "") { void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == (STAR)) { if (obj) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Killed( GameObject * obj, GameObject * killer ) { Commands->Send_Custom_Event( obj, Commands->Find_Object (M01_MISSION_CONTROLLER_JDG), 0, M01_COMMCENTER_SAMSITE_HAS_BEEN_DESTROYED_JDG, 0 ); GameObject * detentionGate = Commands->Find_Object ( 101117 ); if (detentionGate != NULL) { Commands->Send_Custom_Event( obj, detentionGate, 0, M01_COMMCENTER_SAMSITE_HAS_BEEN_DESTROYED_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Commander_Shack_Zone_JDG, "")//115985 { bool commanderAlive; bool playerinZone; bool commandClearance; bool convStarted; REGISTER_VARIABLES() { SAVE_VARIABLE(commanderAlive, 1); SAVE_VARIABLE(playerinZone, 2); SAVE_VARIABLE(commandClearance, 3); SAVE_VARIABLE(convStarted, 4); } void Created( GameObject * obj ) { commanderAlive = true; playerinZone = false; commandClearance = false; convStarted = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { playerinZone = true; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); GameObject * convController = Commands->Find_Object ( 125857 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { playerinZone = false; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { commandClearance = true; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } else if (param == M01_IVE_BEEN_KILLED_JDG) { commanderAlive = false; } else if (param == M01_MODIFY_YOUR_ACTION_JDG && convStarted == false) { if (playerinZone == true && commanderAlive == true && commandClearance == true)//M01_MODIFY_YOUR_ACTION_JDG { GameObject * gdiCommander = Commands->Find_Object ( 106050); if (gdiCommander != NULL) { convStarted = true; Commands->Send_Custom_Event( obj, gdiCommander, 0, M01_MODIFY_YOUR_ACTION_JDG, 1 ); } } else { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0.25f ); } } } } }; DECLARE_SCRIPT(M01_TurretBeach_Engineer_JDG, "")//this guys ID is M01_TURRETBEACH_ENGINEER_ID 101654 { bool working_here_boss; bool first_time; float last_health; bool killedYet; bool turret01_dead; bool turret02_dead; REGISTER_VARIABLES() { SAVE_VARIABLE(working_here_boss, 1); SAVE_VARIABLE(first_time, 2); SAVE_VARIABLE(killedYet, 3); SAVE_VARIABLE(turret01_dead, 4); SAVE_VARIABLE(turret02_dead, 5); } void Created( GameObject * obj ) { turret01_dead = false; turret02_dead = false; killedYet = false; working_here_boss = false; first_time = true; Commands->Innate_Disable(obj); last_health = Commands->Get_Max_Health ( obj ); } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (enemy == STAR && working_here_boss == false) { if (obj) { Commands->Action_Reset ( obj, 100 ); Commands->Innate_Enable(obj); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); } } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { int damager_id = Commands->Get_ID ( damager ); if (damager_id != NULL) { Commands->Debug_Message ( "***************************engineers damager is ID %d\n", damager_id ); } else { Commands->Debug_Message ( "***************************engineers damager is NULL\n" ); } GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (damager == gunboat) { Commands->Set_Health ( obj, last_health ); } else if (damager == STAR) { if (obj) { last_health = Commands->Get_Health ( obj ); if (first_time == true) { working_here_boss = false; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Enable(obj); ActionParamsStruct params; params.Set_Basic(this, 100, M01_DOING_ANIMATION_03_JDG); params.Set_Animation( "H_A_862A", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); first_time = false; } else { working_here_boss = false; Commands->Action_Reset ( obj, 100 ); Commands->Innate_Enable(obj); Commands->Innate_Force_State_Enemy_Seen ( obj, STAR ); } } } } void Killed( GameObject * obj, GameObject * killer ) { killedYet = true; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_TURRET_BEACH_ENGINEER_IS_DEAD_JDG, 5 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_START_ACTING_JDG) { Commands->Debug_Message ( "***************************original engineer custom received--start acting\n" ); Commands->Enable_Hibernation( obj, false ); } else if (param == M01_GOTO_IDLE_JDG) { Commands->Debug_Message ( "***************************original engineer custom received--STOP acting\n" ); Commands->Enable_Hibernation( obj, true ); } else if (param == M01_PLAYER_IS_ATTACKING_ME_JDG) { if (working_here_boss == false) { Commands->Debug_Message ( "***************************engineers has received custom to go heal turret\n" ); Commands->Innate_Disable(obj); Commands->Action_Reset ( obj, 100 ); GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); float turret01_health = 0; float turret02_health = 0; if (turret01 != NULL) { turret01_health = Commands->Get_Health ( turret01 ); } if (turret02 != NULL) { turret02_health = Commands->Get_Health ( turret02 ); } if ((turret02_health > turret01_health) && (turret01_health > 0)) { if (turret01 != NULL && turret01_dead == false) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3 (-86.5f, 95.5f, 2.3f), 1.0f, 0.5f, false ); params.MovePathfind = false; Commands->Action_Goto ( obj, params ); working_here_boss = true; } } else if ((turret01_health > turret02_health) && (turret02_health > 0)) { if (turret02 != NULL && turret02_dead == false) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement( Vector3 (-101.5f, 111.7f, 2.3f), 1.0f, 0.5f, false ); params.MovePathfind = false; Commands->Action_Goto ( obj, params ); working_here_boss = true; } } else { Commands->Send_Custom_Event( obj, sender, 0, M01_BUSY_TRY_AGAIN_JDG, 1 ); } } else if (working_here_boss == true) { Commands->Send_Custom_Event( obj, sender, 0, M01_BUSY_TRY_AGAIN_JDG, 1 ); } } else if (param == M01_START_ATTACKING_01_JDG) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL && killedYet == false && turret01_dead == false) { Vector3 sound_position = Commands->Get_Position ( turret01 ); Commands->Create_Sound ( "CnC_Healer_Sound", sound_position, obj ); float turretMaxHealth = Commands->Get_Max_Health ( turret01 ); Commands->Set_Health ( turret01, turretMaxHealth ); } Commands->Debug_Message ( "***************************turret engineer has fixed turret one--going back to hiding spot\n" ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3 (-91.1f, 106.562f, 1.7f), 1.0f, 0.25f, false ); params.MovePathfind = false; Commands->Action_Goto ( obj, params ); } else if (param == M01_START_ATTACKING_02_JDG) { GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL && killedYet == false && turret02_dead == false) { Vector3 sound_position = Commands->Get_Position ( turret02 ); Commands->Create_Sound ( "CnC_Healer_Sound", sound_position, obj ); float turretMaxHealth = Commands->Get_Max_Health ( turret02 ); Commands->Set_Health ( turret02, turretMaxHealth ); } Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3 (-91.1f, 106.562f, 1.7f), 1.0f, 0.25f, false ); params.MovePathfind = false; Commands->Action_Goto ( obj, params ); } else if (param == M01_TURRET_HAS_BEEN_DESTROYED_JDG) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (sender == turret01) { turret01_dead = true; } if (sender == turret02) { turret02_dead = true; } } } 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)//engineer is at damaged turret 01--play fixing animation { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( turret01, 50, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_01_JDG, 1.5f ); } } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//engineer is at damaged turret 02--play fixing animation { GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { params.Set_Basic(this, 100, M01_START_ATTACKING_02_JDG); params.Set_Attack( turret02, 50, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_02_JDG, 0.5f ); } } else if (action_id == M01_DOING_ANIMATION_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//engineer has been damaged look around { char *animationName = M01_Choose_Duck_Animation(); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 60, M01_DOING_ANIMATION_04_JDG); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { working_here_boss = false; //Commands->Enable_Hibernation( obj, true ); } } }; DECLARE_SCRIPT(M01_TurretBeach_Chinook_Spawned_Soldier_NOD, "") { bool killedYet; bool atTurretsYet; REGISTER_VARIABLES() { SAVE_VARIABLE(killedYet, 1); SAVE_VARIABLE(atTurretsYet, 2); } void Created( GameObject * obj ) { killedYet = false; atTurretsYet = false; GameObject *gunboatController = Commands->Find_Object ( M01_TURRETBEACH_CONTROLLER_ID ); if (gunboatController != NULL) { Commands->Send_Custom_Event ( obj, gunboatController, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } GameObject *turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { Commands->Send_Custom_Event ( obj, turret01, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } GameObject *turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { Commands->Send_Custom_Event ( obj, turret02, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { GameObject *turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject *turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret01 != NULL || turret02 != NULL) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement(Vector3 (0,0,0), RUN, 1); params.WaypathID = 109629; Commands->Action_Goto(obj, params); Commands->Send_Custom_Event ( obj, obj, 0, M01_WALKING_WAYPATH_03_JDG, 5 ); } else { ActionParamsStruct params; params.Set_Basic(this, 45, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement(Vector3 (0,0,0), RUN, 1); params.WaypathID = 109629; Commands->Action_Goto(obj, params); //Commands->Send_Custom_Event ( obj, obj, 0, M01_WALKING_WAYPATH_03_JDG, 5 ); } } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (damager == STAR) { Commands->Innate_Enable(obj); } } void Killed( GameObject * obj, GameObject * killer ) { killedYet = true; Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_TURRET_BEACH_ENGINEER_IS_DEAD_JDG, 5 ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_WALKING_WAYPATH_03_JDG && atTurretsYet == false) { GameObject *turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject *turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret01 != NULL || turret02 != NULL) { //ActionParamsStruct params; //params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); //params.Set_Movement(Vector3 (0,0,0), RUN, 1); //params.WaypathID = 109629; //Commands->Action_Goto(obj, params); Commands->Send_Custom_Event ( obj, obj, 0, M01_WALKING_WAYPATH_03_JDG, 5 ); } else { Commands->Action_Reset ( obj, 100 ); //ActionParamsStruct params; //params.Set_Basic(this, 45, M01_WALKING_WAYPATH_03_JDG); //params.Set_Movement(Vector3 (0,0,0), RUN, 1); //params.WaypathID = 109629; //Commands->Action_Goto(obj, params); //Commands->Send_Custom_Event ( obj, obj, 0, M01_WALKING_WAYPATH_03_JDG, 5 ); } } else if (param == M01_START_ACTING_JDG) { Commands->Debug_Message ( "***************************new engineer custom received--start acting\n" ); Commands->Enable_Hibernation( obj, false ); Commands->Send_Custom_Event( obj, obj, 0, M01_CHECK_TURRETS_HEALTH_JDG, 1 ); } else if (param == M01_GOTO_IDLE_JDG) { Commands->Debug_Message ( "***************************new engineer custom received--STOP acting\n" ); Commands->Enable_Hibernation( obj, true ); } else if (param == M01_CHECK_TURRETS_HEALTH_JDG) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); float turret01_health = 0; float turret02_health = 0; if (turret01 != NULL) { turret01_health = Commands->Get_Health ( turret01 ); } if (turret02 != NULL) { turret02_health = Commands->Get_Health ( turret02 ); } if (turret01_health < turret02_health) { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3 (-86.5f, 95.5f, 2.3f), 1.0f, 0.5f, false ); //params.MovePathfind = false; Commands->Action_Goto ( obj, params ); } if (turret02_health < turret01_health) { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement( Vector3 (-101.5f, 111.7f, 2.3f), 1.0f, 0.5f, false ); //params.MovePathfind = false; Commands->Action_Goto ( obj, params ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_CHECK_TURRETS_HEALTH_JDG, 1 ); } } else if (param == M01_START_ATTACKING_01_JDG) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL && killedYet == false) { Vector3 sound_position = Commands->Get_Position ( turret01 ); Commands->Create_Sound ( "CnC_Healer_Sound", sound_position, obj ); float turretMaxHealth = Commands->Get_Max_Health ( turret01 ); Commands->Set_Health ( turret01, turretMaxHealth ); } Commands->Debug_Message ( "***************************turret engineer has fixed turret one--going back to hiding spot\n" ); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3 (-91.1f, 106.562f, 1.7f), 1.0f, 0.25f, false ); params.MovePathfind = false; Commands->Action_Goto ( obj, params ); } else if (param == M01_START_ATTACKING_02_JDG) { GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL && killedYet == false) { Vector3 sound_position = Commands->Get_Position ( turret02 ); Commands->Create_Sound ( "CnC_Healer_Sound", sound_position, obj ); float turretMaxHealth = Commands->Get_Max_Health ( turret02 ); Commands->Set_Health ( turret02, turretMaxHealth ); } Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3 (-91.1f, 106.562f, 1.7f), 1.0f, 0.25f, false ); params.MovePathfind = false; 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)//engineer is at damaged turret 01--play fixing animation { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( turret01, 50, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } } else if (action_id == M01_WALKING_WAYPATH_02_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//engineer is at damaged turret 02--play fixing animation { GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { params.Set_Basic(this, 100, M01_START_ATTACKING_02_JDG); params.Set_Attack( turret02, 50, 0, false ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_02_JDG, 0.5f ); } } else if (action_id == M01_DOING_ANIMATION_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL)//engineer has been damaged look around { char *animationName = M01_Choose_Duck_Animation(); Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 60, M01_DOING_ANIMATION_04_JDG); params.Set_Animation( animationName, false ); Commands->Action_Play_Animation ( obj, params ); } else if (action_id == M01_WALKING_WAYPATH_03_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { atTurretsYet = true; Commands->Send_Custom_Event( obj, obj, 0, M01_CHECK_TURRETS_HEALTH_JDG, 1 ); } else if (action_id == M01_WALKING_WAYPATH_05_JDG && complete_reason == ACTION_COMPLETE_NORMAL) { Commands->Send_Custom_Event( obj, obj, 0, M01_CHECK_TURRETS_HEALTH_JDG, 1 ); } } }; DECLARE_SCRIPT(M01_FP_NodBase_Dogfight_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[28] = { //these are the level 01 dogfights "X1A_Apache_Orca_Chase_01.txt", "X1A_Apache_Orca_Chase_02.txt", "X1A_Apache_Orca_Chase_03.txt", "X1A_Apache_Orca_Chase_04.txt", //this is a low level flyover in nod base //it goes from the refinery to the waterfall N->S //chinooks look kinda odd on this one "X1A_Solo_Orca_01.txt", "X1A_Solo_Orca_01.txt", "X1A_Solo_Orca_01.txt", "X1A_Solo_Orca_01.txt", "X1A_Solo_Orca_01.txt", "X1A_Solo_Apache_01.txt", "X1A_Solo_Apache_01.txt", "X1A_Solo_Apache_01.txt", "X1A_Solo_Apache_01.txt", "X1A_Solo_Apache_01.txt", "X1A_Solo_Nod_Chinook_01.txt", "X1A_Solo_GDI_Chinook_01.txt", //this is a low level flyover in nod base //it goes from the waterfall to the refinery S->N "X1A_Solo_Orca_02.txt", "X1A_Solo_Apache_02.txt", "X1A_Solo_Apache_02.txt", "X1A_Solo_Apache_02.txt", "X1A_Solo_Apache_02.txt", "X1A_Solo_Apache_02.txt", "X1A_Solo_Nod_Chinook_02.txt", "X1A_Solo_Nod_Chinook_02.txt", "X1A_Solo_Nod_Chinook_02.txt", "X1A_Solo_Nod_Chinook_02.txt", "X1A_Solo_Nod_Chinook_02.txt", "X1A_Solo_GDI_Chinook_02.txt", }; int random = Commands->Get_Random_Int(0, 28); while (random == last) { random = Commands->Get_Random_Int(0, 28); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_BaseToBase_NorthSouth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[28] = { //this is a low level traffic lane from nod comm to gdi ocean-- N->S "X1A_Solo_Orca_03.txt", "X1A_Solo_Apache_03.txt", "X1A_Solo_Apache_03.txt", "X1A_Solo_Apache_03.txt", "X1A_Solo_Apache_03.txt", "X1A_Solo_Apache_03.txt", "X1A_Solo_Nod_Chinook_03.txt", "X1A_Solo_Nod_Chinook_03.txt", "X1A_Solo_Nod_Chinook_03.txt", "X1A_Solo_Nod_Chinook_03.txt", "X1A_Solo_Nod_Chinook_03.txt", "X1A_Solo_GDI_Chinook_03.txt", "X1A_Solo_NodCargo_03.txt", "X1A_Solo_A10_03.txt", //this is a low level traffic lane from nod refinery to gdi ocean-- N->S "X1A_Solo_Orca_04.txt", "X1A_Solo_Apache_04.txt", "X1A_Solo_Apache_04.txt", "X1A_Solo_Apache_04.txt", "X1A_Solo_Apache_04.txt", "X1A_Solo_Apache_04.txt", "X1A_Solo_Nod_Chinook_04.txt", "X1A_Solo_Nod_Chinook_04.txt", "X1A_Solo_Nod_Chinook_04.txt", "X1A_Solo_Nod_Chinook_04.txt", "X1A_Solo_Nod_Chinook_04.txt", "X1A_Solo_GDI_Chinook_04.txt", "X1A_Solo_NodCargo_04.txt", "X1A_Solo_A10_04.txt", }; int random = Commands->Get_Random_Int(0, 28); while (random == last) { random = Commands->Get_Random_Int(0, 28); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_BaseToBase_SouthNorth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { last = 21; GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", "X1A_Solo_NodCargo_06.txt"); Commands->Start_Timer(obj, this, 60.0f, 0); } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[56] = { //this is a low level traffic lane from gdi ocean to nod comm center-- S->N "X1A_Solo_Orca_05.txt", "X1A_Solo_Orca_05.txt", "X1A_Solo_Orca_05.txt", "X1A_Solo_Orca_05.txt", "X1A_Solo_Orca_05.txt", "X1A_Solo_Apache_05.txt", "X1A_Solo_Nod_Chinook_05.txt", "X1A_Solo_GDI_Chinook_05.txt", "X1A_Solo_GDI_Chinook_05.txt", "X1A_Solo_GDI_Chinook_05.txt", "X1A_Solo_GDI_Chinook_05.txt", "X1A_Solo_GDI_Chinook_05.txt", "X1A_Solo_NodCargo_05.txt", "X1A_Solo_A10_05.txt", //this is a low level traffic lane from gdi ocean to nod refinery-- S->N "X1A_Solo_Orca_06.txt", "X1A_Solo_Orca_06.txt", "X1A_Solo_Orca_06.txt", "X1A_Solo_Orca_06.txt", "X1A_Solo_Orca_06.txt", "X1A_Solo_Apache_06.txt", "X1A_Solo_Nod_Chinook_06.txt", "X1A_Solo_GDI_Chinook_06.txt", "X1A_Solo_GDI_Chinook_06.txt", "X1A_Solo_GDI_Chinook_06.txt", "X1A_Solo_GDI_Chinook_06.txt", "X1A_Solo_GDI_Chinook_06.txt", "X1A_Solo_NodCargo_06.txt", "X1A_Solo_A10_06.txt", //this is a low/med level traffic lane from gdi ocean to nod refinery-- S->N "X1A_Solo_Orca_07.txt", "X1A_Solo_Orca_07.txt", "X1A_Solo_Orca_07.txt", "X1A_Solo_Orca_07.txt", "X1A_Solo_Orca_07.txt", "X1A_Solo_Apache_07.txt", "X1A_Solo_Nod_Chinook_07.txt", "X1A_Solo_GDI_Chinook_07.txt", "X1A_Solo_GDI_Chinook_07.txt", "X1A_Solo_GDI_Chinook_07.txt", "X1A_Solo_GDI_Chinook_07.txt", "X1A_Solo_GDI_Chinook_07.txt", "X1A_Solo_NodCargo_07.txt", "X1A_Solo_A10_07.txt", //this is a low level traffic lane from gdi ocean to nod comm center-- S->N "X1A_Solo_Orca_08.txt", "X1A_Solo_Orca_08.txt", "X1A_Solo_Orca_08.txt", "X1A_Solo_Orca_08.txt", "X1A_Solo_Orca_08.txt", "X1A_Solo_Apache_08.txt", "X1A_Solo_GDI_Chinook_08.txt", "X1A_Solo_GDI_Chinook_08.txt", "X1A_Solo_GDI_Chinook_08.txt", "X1A_Solo_GDI_Chinook_08.txt", "X1A_Solo_GDI_Chinook_08.txt", "X1A_Solo_Nod_Chinook_08.txt", "X1A_Solo_NodCargo_08.txt", "X1A_Solo_A10_08.txt", }; int random = Commands->Get_Random_Int(0, 56); while (random == last) { random = Commands->Get_Random_Int(0, 56); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_NodBase_EastWest_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[72] = { //this is a flyover at nod base it goes from the comm to the refinery-- E->W "X1A_Solo_Orca_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Apache_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_Nod_Chinook_09.txt", "X1A_Solo_GDI_Chinook_09.txt", "X1A_Solo_NodCargo_09.txt", "X1A_Solo_A10_09.txt", //this is a flyover at nod base it goes from the comm to the refinery-- E->W "X1A_Solo_Orca_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Apache_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_Nod_Chinook_10.txt", "X1A_Solo_GDI_Chinook_10.txt", "X1A_Solo_NodCargo_10.txt", "X1A_Solo_A10_10.txt", //this is a flyover at nod base it goes from the comm to the refinery-- E->W "X1A_Solo_Orca_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Apache_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_Nod_Chinook_11.txt", "X1A_Solo_GDI_Chinook_11.txt", "X1A_Solo_NodCargo_11.txt", "X1A_Solo_A10_11.txt", }; int random = Commands->Get_Random_Int(0, 72); while (random == last) { random = Commands->Get_Random_Int(0, 72); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_NodBase_WestEast_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[48] = { //this is a flyover at nod base it goes from the refinery to the comm W->E "X1A_Solo_Orca_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Apache_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_Nod_Chinook_12.txt", "X1A_Solo_GDI_Chinook_12.txt", "X1A_Solo_NodCargo_12.txt", "X1A_Solo_A10_12.txt", //this is a flyover at nod base it goes from the refinery to the comm W->E "X1A_Solo_Orca_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Apache_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_Nod_Chinook_13.txt", "X1A_Solo_GDI_Chinook_13.txt", "X1A_Solo_NodCargo_13.txt", "X1A_Solo_A10_13.txt", }; int random = Commands->Get_Random_Int(0, 48); while (random == last) { random = Commands->Get_Random_Int(0, 48); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_NodBase_NorthSouth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[48] = { //this is a flyover at nod base it goes from the comm to the waterfall N->S "X1A_Solo_Orca_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Apache_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_Nod_Chinook_14.txt", "X1A_Solo_GDI_Chinook_14.txt", "X1A_Solo_NodCargo_14.txt", "X1A_Solo_A10_14.txt", //this is a flyover at nod base it goes from the comm to the waterfall N->S "X1A_Solo_Orca_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Apache_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_Nod_Chinook_15.txt", "X1A_Solo_GDI_Chinook_15.txt", "X1A_Solo_NodCargo_15.txt", "X1A_Solo_A10_15.txt", }; int random = Commands->Get_Random_Int(0, 48); while (random == last) { random = Commands->Get_Random_Int(0, 48); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_NodBase_SouthNorth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[48] = { //this is a flyover at nod base it goes from guard tower 01 to the comm center S-N "X1A_Solo_Orca_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Apache_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_Nod_Chinook_16.txt", "X1A_Solo_GDI_Chinook_16.txt", "X1A_Solo_NodCargo_16.txt", "X1A_Solo_A10_16.txt", //this is a flyover at nod base it goes from guard tower 01 to the comm center S-N "X1A_Solo_Orca_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Apache_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_Nod_Chinook_17.txt", "X1A_Solo_GDI_Chinook_17.txt", "X1A_Solo_NodCargo_17.txt", "X1A_Solo_A10_17.txt", }; int random = Commands->Get_Random_Int(0, 48); while (random == last) { random = Commands->Get_Random_Int(0, 48); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_GDIOcean_NorthSouth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[28] = { //this is a GDI ocean traffic lane N->S "X1A_Solo_Orca_18.txt", "X1A_Solo_Orca_18.txt", "X1A_Solo_Orca_18.txt", "X1A_Solo_Orca_18.txt", "X1A_Solo_Orca_18.txt", "X1A_Solo_Apache_18.txt", "X1A_Solo_Nod_Chinook_18.txt", "X1A_Solo_GDI_Chinook_18.txt", "X1A_Solo_GDI_Chinook_18.txt", "X1A_Solo_GDI_Chinook_18.txt", "X1A_Solo_GDI_Chinook_18.txt", "X1A_Solo_GDI_Chinook_18.txt", "X1A_Solo_NodCargo_18.txt", "X1A_Solo_A10_18.txt", //this is a GDI ocean traffic lane N->S "X1A_Solo_Orca_19.txt", "X1A_Solo_Orca_19.txt", "X1A_Solo_Orca_19.txt", "X1A_Solo_Orca_19.txt", "X1A_Solo_Orca_19.txt", "X1A_Solo_Apache_19.txt", "X1A_Solo_Nod_Chinook_19.txt", "X1A_Solo_GDI_Chinook_19.txt", "X1A_Solo_GDI_Chinook_19.txt", "X1A_Solo_GDI_Chinook_19.txt", "X1A_Solo_GDI_Chinook_19.txt", "X1A_Solo_GDI_Chinook_19.txt", "X1A_Solo_NodCargo_19.txt", "X1A_Solo_A10_19.txt", }; int random = Commands->Get_Random_Int(0, 28); while (random == last) { random = Commands->Get_Random_Int(0, 28); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_FP_GDIOcean_SouthNorth_Contoller_JDG, "") { int last; REGISTER_VARIABLES() { SAVE_VARIABLE(last, 1); } void Created(GameObject * obj) { Commands->Start_Timer(obj, this, 60.0f, 0); last = 21; } void Timer_Expired(GameObject * obj, int timer_id) { char *flyovers[26] = { //this is a GDI ocean traffic lane S->N "X1A_Solo_Orca_20.txt", "X1A_Solo_Orca_20.txt", "X1A_Solo_Orca_20.txt", "X1A_Solo_Orca_20.txt", "X1A_Solo_Orca_20.txt", "X1A_Solo_Apache_20.txt", "X1A_Solo_Nod_Chinook_20.txt", "X1A_Solo_GDI_Chinook_20.txt", "X1A_Solo_GDI_Chinook_20.txt", "X1A_Solo_GDI_Chinook_20.txt", "X1A_Solo_GDI_Chinook_20.txt", "X1A_Solo_GDI_Chinook_20.txt", "X1A_Solo_A10_20.txt", //this is a GDI ocean traffic lane S->N "X1A_Solo_Orca_21.txt", "X1A_Solo_Orca_21.txt", "X1A_Solo_Orca_21.txt", "X1A_Solo_Orca_21.txt", "X1A_Solo_Orca_21.txt", "X1A_Solo_Apache_21.txt", "X1A_Solo_Nod_Chinook_21.txt", "X1A_Solo_GDI_Chinook_21.txt", "X1A_Solo_GDI_Chinook_21.txt", "X1A_Solo_GDI_Chinook_21.txt", "X1A_Solo_GDI_Chinook_21.txt", "X1A_Solo_GDI_Chinook_21.txt", "X1A_Solo_A10_21.txt", }; int random = Commands->Get_Random_Int(0, 26); while (random == last) { random = Commands->Get_Random_Int(0, 26); } GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]); float delayTimer = Commands->Get_Random ( 30, 60 ); Commands->Start_Timer(obj, this, delayTimer, 0); last = random; } }; DECLARE_SCRIPT(M01_Deco_LightTanks_JDG, "")//119424 119426 119425 { void Created( GameObject * obj ) { Vector3 myTarget (-27.746f, 52.823f, 1.071f); ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( myTarget, 100, 3, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ATTACKING_01_JDG) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( STAR, 100, 8, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else if (param == M01_START_ATTACKING_02_JDG) { if (obj) { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } } } } }; DECLARE_SCRIPT(M01_Airstrike_Controller_JDG, "")//121041 { int decoTank01_id; int decoTank02_id; int decoTank03_id; REGISTER_VARIABLES() { SAVE_VARIABLE(decoTank01_id, 1); SAVE_VARIABLE(decoTank02_id, 2); SAVE_VARIABLE(decoTank03_id, 3); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == 0)//airstrike text file is sendyou the command to play explosions { GameObject * realtank = Commands->Find_Object ( 120022 ); if (realtank != NULL) { Commands->Send_Custom_Event( obj, realtank, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } GameObject * tank01 = Commands->Find_Object ( decoTank01_id ); GameObject * tank02 = Commands->Find_Object ( decoTank02_id ); GameObject * tank03 = Commands->Find_Object ( decoTank03_id ); if (tank01 != NULL) { Commands->Send_Custom_Event( obj, tank01, 0, M01_START_ATTACKING_02_JDG, 0.5f ); } if (tank02 != NULL) { Commands->Send_Custom_Event( obj, tank02, 0, M01_START_ATTACKING_02_JDG, 0.75f ); } if (tank03 != NULL) { Commands->Send_Custom_Event( obj, tank03, 0, M01_START_ATTACKING_02_JDG, 1.0f ); } } else if (param == M01_START_ACTING_JDG) { Vector3 tank01Spot (-12.175f, 68.280f, 3.009f); Vector3 tank02Spot (-14.948f, 61.305f, 3.259f); Vector3 tank03Spot (-22.011f, 66.635f, 2.959f); GameObject * decoTank01 = Commands->Create_Object ( "Nod_Light_Tank_Dec", tank01Spot ); Commands->Set_Facing ( decoTank01, -145 ); GameObject * decoTank02 = Commands->Create_Object ( "Nod_Light_Tank_Dec", tank02Spot ); Commands->Set_Facing ( decoTank02, -150 ); GameObject * decoTank03 = Commands->Create_Object ( "Nod_Light_Tank_Dec", tank03Spot ); Commands->Set_Facing ( decoTank03, -115 ); Commands->Attach_Script(decoTank01, "M01_Deco_LightTanks_JDG", ""); Commands->Attach_Script(decoTank02, "M01_Deco_LightTanks_JDG", ""); Commands->Attach_Script(decoTank03, "M01_Deco_LightTanks_JDG", ""); decoTank01_id = Commands->Get_ID ( decoTank01 ); decoTank02_id = Commands->Get_ID ( decoTank02 ); decoTank03_id = Commands->Get_ID ( decoTank03 ); } else if (param == M01_START_ATTACKING_01_JDG) { GameObject * tank01 = Commands->Find_Object ( decoTank01_id ); GameObject * tank02 = Commands->Find_Object ( decoTank02_id ); GameObject * tank03 = Commands->Find_Object ( decoTank03_id ); if (tank01 != NULL) { Commands->Send_Custom_Event( obj, tank01, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } if (tank02 != NULL) { Commands->Send_Custom_Event( obj, tank02, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } if (tank03 != NULL) { Commands->Send_Custom_Event( obj, tank03, 0, M01_START_ATTACKING_01_JDG, 0.5f ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_01_JDG, 0 ); GameObject * chinook_obj3 = Commands->Create_Object ( "Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(chinook_obj3, "Test_Cinematic", "X1G_A-10_Strike.txt"); } } } }; DECLARE_SCRIPT(M01_GDIBase_RealLightTank_JDG, "")//120022 {//waypath 120218 void Killed( GameObject * obj, GameObject * killer ) { //int airdrop_conv = Commands->Create_Conversation( "M01_AirDrop_Conversation", 100, 1000, false); //Commands->Join_Conversation( NULL, airdrop_conv, false, false ); //Commands->Start_Conversation( airdrop_conv, airdrop_conv ); } 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_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), .7f, 10 ); params.WaypathID = 120218; //params.AttackActive = false; Commands->Action_Goto( obj, params ); GameObject * airstrikeController = Commands->Find_Object ( 121041 ); if (airstrikeController != NULL) { Commands->Send_Custom_Event( obj, airstrikeController, 0, M01_START_ACTING_JDG, 0 ); Commands->Send_Custom_Event( obj, airstrikeController, 0, M01_MODIFY_YOUR_ACTION_JDG, 15 ); } } else if (param == M01_START_ATTACKING_01_JDG) { if (obj) { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } } } } 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 ) { params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( STAR, 100, 10, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); //Commands->Send_Custom_Event( obj, obj, 0, M01_START_ATTACKING_02_JDG, 4 ); } } } }; DECLARE_SCRIPT(M01_RealLightTank_TriggerZone_JDG, "") { bool entered; REGISTER_VARIABLES() { SAVE_VARIABLE(entered, 1); } void Created( GameObject * obj ) { entered = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (entered == false) { if (enterer == STAR) { entered = true; GameObject * lightTank = Commands->Find_Object ( 120022 );//00-N036E if (lightTank != NULL) { Commands->Send_Custom_Event( obj, lightTank, 0, M01_START_ACTING_JDG, 0 ); //Commands->Create_2D_Sound ( "00-N036E" ); } } } } }; DECLARE_SCRIPT(M01_First_AutoRifle_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { int pressEnterConv = Commands->Create_Conversation( "M01_Press_Enter_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressEnterConv, false, false ); Commands->Start_Conversation( pressEnterConv, pressEnterConv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0520I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } }; DECLARE_SCRIPT(M01_Announce_First_ObjectiveZone_JDG, "")//116380 { void Created( GameObject * obj ) { int pressF1Conv = Commands->Create_Conversation( "M01_Press_F1_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressF1Conv, false, false ); Commands->Start_Conversation( pressF1Conv, pressF1Conv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0515I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); GameObject * chinook_obj3 = Commands->Create_Object ( "Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(chinook_obj3, "Test_Cinematic", "X1H_Hover_Troop.txt"); } void Entered( GameObject * obj, GameObject * enterer ) //M01_Press_F1_Conversation { if (enterer == STAR) { GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, 0, M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, 0 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_SniperRifle_01_JDG, "")//on powerplant { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { GameObject * c4TextController = Commands->Find_Object ( 117188 ); if (c4TextController != NULL) { Commands->Send_Custom_Event( obj, c4TextController, 2, 1, 0 ); } GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3(-53.217f, -68.049f, 13.701f)); Commands->Attach_Script(sniperTarget01, "M01_SniperRifle_01_Target_JDG", ""); } } }; DECLARE_SCRIPT(M01_SniperRifle_01_Target_JDG, "")//on lighthouse { void Created( GameObject * obj ) { Commands->Attach_Script(obj, "M00_Soldier_Powerup_Disable", ""); Commands->Enable_Hibernation( obj, false ); ActionParamsStruct params; params.Set_Basic(this, 90, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(0,0,0), WALK, .25f ); params.WaypathID = 118434; 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 ) { Commands->Enable_Hibernation( obj, true ); Commands->Set_Innate_Is_Stationary ( obj, true ); } } } }; DECLARE_SCRIPT(M01_SniperRifle_02_JDG, "")//in guard tower 01 { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { GameObject * c4TextController = Commands->Find_Object ( 117188 ); if (c4TextController != NULL) { Commands->Send_Custom_Event( obj, c4TextController, 2, 1, 0 ); } } } }; DECLARE_SCRIPT(M01_SniperRifle_02_AirdropZone_JDG, "")//in guard tower 01 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Create_Sound ( "M01EVAG_DSGN0268I1EVAG_SND", Vector3 (0,0,0), obj );//enemy aircraft detected GameObject * chinook_obj3 = Commands->Create_Object ( "Invisible_Object", Vector3(-12.031f, -42.150f, -1.252f)); Commands->Set_Facing(chinook_obj3, -45.0f); Commands->Attach_Script(chinook_obj3, "Test_Cinematic", "X1I_GDIBasePrimaryNodChinook.txt"); Commands->Destroy_Object (obj ); } } }; DECLARE_SCRIPT(M01_C4_TutorialScript_JDG, "")// { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { GameObject * c4TextController = Commands->Find_Object ( 117188 ); if (c4TextController != NULL) { Commands->Send_Custom_Event( obj, c4TextController, 1, 1, 0 ); } } } }; DECLARE_SCRIPT(M01_Use_Ladder_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) //M01_Press_F1_Conversation { if (enterer == STAR) { int pressF1Conv = Commands->Create_Conversation( "M01_Press_E_For_Ladders_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressF1Conv, false, false ); Commands->Start_Conversation( pressF1Conv, pressF1Conv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0514I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } }; DECLARE_SCRIPT(M01_AccessDenied_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) //M01_Press_F1_Conversation { if (enterer == STAR) { int pressF1Conv = Commands->Create_Conversation( "M01_Lockdown_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressF1Conv, false, false ); Commands->Start_Conversation( pressF1Conv, pressF1Conv ); //Commands->Set_HUD_Help_Text ( IDS_M00EVAG_DSGN0039I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); } } }; DECLARE_SCRIPT(M01_GDIBase_FirstChinookMinigunnerGuy_JDG, "") { void Created( GameObject * obj ) { Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } }; DECLARE_SCRIPT(M01_QuickSave_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0525I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GDIBaseCommander_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsA", false ); Commands->Debug_Message ( "**********************script attached to evac chopper\n" ); Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); GameObject * myController = Commands->Find_Object ( 106694 ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsA") == 0) { Commands->Debug_Message ( "**********************chopper has finished entry anim\n" ); Vector3 evacLocation = Commands->Get_Position ( obj ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsL", true ); GameObject * gdiBaseCommander = Commands->Find_Object ( 106050 ); if (gdiBaseCommander != NULL) { Commands->Send_Custom_Event( obj, gdiBaseCommander, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * gdiBaseMinigunner = Commands->Find_Object ( 116382 ); if (gdiBaseMinigunner != NULL) { Commands->Send_Custom_Event( obj, gdiBaseMinigunner, 0, M01_GOING_TO_EVAC_SPOT_JDG, 3 ); } GameObject * gdiBaseGrenadier = Commands->Find_Object ( 116383 ); if (gdiBaseGrenadier != NULL) { Commands->Send_Custom_Event( obj, gdiBaseGrenadier, 0, M01_GOING_TO_EVAC_SPOT_JDG, 6 ); } Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************helicopter has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * gdiBaseCommander = Commands->Find_Object ( 106050 ); GameObject * gdiBaseMinigunner = Commands->Find_Object ( 116382 ); GameObject * gdiBaseGrenadier = Commands->Find_Object ( 116383 ); if ((gdiBaseCommander != NULL) || (gdiBaseMinigunner != NULL) || (gdiBaseGrenadier != NULL)) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 1 ); } else { GameObject * controller = Commands->Find_Object ( 106694 ); if (controller != NULL) { Commands->Send_Custom_Event ( obj, controller, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 0 ); } } } break; } } }; DECLARE_SCRIPT(M01_GDIBaseCommander_EvacController_JDG, "")//106694 { bool evacing; int evac_waypath_id; int evac_helicopter_id; int evac_rope_id; REGISTER_VARIABLES() { SAVE_VARIABLE(evacing, 1); SAVE_VARIABLE(evac_waypath_id, 2); SAVE_VARIABLE(evac_helicopter_id, 3); SAVE_VARIABLE(evac_rope_id, 4); } void Created( GameObject * obj ) { evacing = false; Commands->Enable_Hibernation( obj, false ); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0)// { if (param == M01_START_ACTING_JDG)//gdi commander is done giving ion beacon--start evac scenario { GameObject * gdiBaseCommander = Commands->Find_Object ( 106050 ); GameObject * gdiBaseMinigunner = Commands->Find_Object ( 116382 ); GameObject * gdiBaseGrenadier = Commands->Find_Object ( 116383 ); if (gdiBaseCommander != NULL) { Commands->Send_Custom_Event( obj, gdiBaseCommander, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } if (gdiBaseMinigunner != NULL) { Commands->Send_Custom_Event( obj, gdiBaseMinigunner, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } if (gdiBaseGrenadier != NULL) { Commands->Send_Custom_Event( obj, gdiBaseGrenadier, 0, M01_GOTO_YOUR_EVAC_SPOT_JDG, 0 ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG && evacing == false)//one of your guys is at his wait spot--call in chopper { evacing = true; Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_GDIBaseCommander_EvacAnim.txt"); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG && evacing == true)//everyone is on or dead--give take off orders { GameObject * evacChopper = Commands->Find_Object ( evac_helicopter_id ); GameObject * evacWaypath = Commands->Find_Object ( evac_waypath_id ); GameObject * evacRope = Commands->Find_Object ( evac_rope_id ); if (evacChopper != NULL) { Commands->Debug_Message ( "**********************sending custom to chopper to leave.....%d\n",evac_helicopter_id ); Commands->Send_Custom_Event ( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacWaypath != NULL) { Commands->Debug_Message ( "**********************sending custom to waypath to leave.....%d\n",evac_waypath_id ); Commands->Send_Custom_Event ( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (evacRope != NULL) { Commands->Debug_Message ( "**********************sending custom to rope to leave.....%d\n",evac_rope_id ); Commands->Send_Custom_Event ( obj, evacRope, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG)//chopper is sending you his ID { evac_helicopter_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************chopper id received.....%d\n",evac_helicopter_id ); } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG)//waypath is sending you his ID { evac_waypath_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************waypath id received.....%d\n", evac_waypath_id ); } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG)//rope is sending you his ID { evac_rope_id = Commands->Get_ID ( sender ); Commands->Debug_Message ( "**********************rope id received.....%d\n", evac_rope_id ); } else if (param == M01_GIVE_ME_A_ROPE_JDG)//someone is waiting--pull him up { Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject * troopbone = Commands->Create_Object("Invisible_Object", evacPosition ); Commands->Set_Model ( troopbone, "XG_EV5_troopBN" ); Commands->Attach_Script(troopbone, "M01_Evac_TroopBone_JDG", ""); Commands->Innate_Disable(sender); Commands->Attach_To_Object_Bone( sender, troopbone, "Troop_L" ); if(troopbone) { Commands->Set_Animation ( troopbone, "XG_EV5_troopBN.XG_EV5_troopBN", false); } else { Commands->Debug_Message("troopbone not created yet"); } Commands->Set_Animation ( sender, "S_A_Human.XG_EV5_troop", false ); } } } }; DECLARE_SCRIPT(M01_Base_Nod_Minigunner_JDG, "")//116384 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } }; DECLARE_SCRIPT(M01_POW_Nod_Minigunner01_JDG, "")//116388 { void Created( GameObject * obj ) { Commands->Set_Innate_Is_Stationary ( obj, true ); } void Killed( GameObject * obj, GameObject * killer ) { GameObject * pow01 = Commands->Find_Object ( 116386 ); if (pow01 != NULL) { Commands->Send_Custom_Event( obj, pow01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_GDIBase_POWEncounter02_Controller_JDG, "")//M01_GDIBASE_POWSCENE02_MONITOR_JDG 103331 { bool transportCalled; bool powGuy01isDead; bool powGuy02isDead; bool objective_failed; int evac_waypath_id; int evac_helicopter_id; int evac_rope_id; REGISTER_VARIABLES() { SAVE_VARIABLE(transportCalled, 1); SAVE_VARIABLE(powGuy01isDead, 2); SAVE_VARIABLE(powGuy02isDead, 3); SAVE_VARIABLE(objective_failed, 4); SAVE_VARIABLE(evac_waypath_id, 5); SAVE_VARIABLE(evac_helicopter_id, 6); SAVE_VARIABLE(evac_rope_id, 7); } void Created( GameObject * obj ) { powGuy01isDead = false; powGuy02isDead = false; objective_failed = false; transportCalled = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (param == M01_IVE_BEEN_KILLED_JDG)//one of the gt1 guys has been killed..see who it is { GameObject * pow01 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY01_JDG ); GameObject * pow02 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY02_JDG ); if (sender == pow01) { powGuy01isDead = true; } if (sender == pow02) { powGuy02isDead = true; } if (powGuy01isDead == true && powGuy02isDead == true) { Commands->Set_Objective_Status( M01_GDI_BASE_POW_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); objective_failed = true; } } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//chopper is sending you his ID { evac_helicopter_id = Commands->Get_ID ( sender ); //Commands->Debug_Message ( "**********************chopper id received.....%d\n",evac_helicopter_id ); } else if (param == M01_WAYPATH_IS_SENDING_ID_JDG)//waypath is sending you his ID { evac_waypath_id = Commands->Get_ID ( sender ); //Commands->Debug_Message ( "**********************waypath id received.....%d\n", evac_waypath_id ); } else if (param == M01_ROPE_IS_SENDING_ID_JDG)//rope is sending you his ID { evac_rope_id = Commands->Get_ID ( sender ); //Commands->Debug_Message ( "**********************rope id received.....%d\n", evac_rope_id ); } else if (param == M01_GIVE_ME_A_ROPE_JDG)//someone is waiting--pull him up { Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject * troopbone = Commands->Create_Object("Invisible_Object", evacPosition ); Commands->Set_Model ( troopbone, "XG_EV5_troopBN" ); Commands->Attach_Script(troopbone, "M01_Evac_TroopBone_JDG", ""); Commands->Innate_Disable(sender); Commands->Attach_To_Object_Bone( sender, troopbone, "Troop_L" ); if(troopbone) { Commands->Set_Animation ( troopbone, "XG_EV5_troopBN.XG_EV5_troopBN", false); } else { Commands->Debug_Message("troopbone not created yet"); } Commands->Set_Animation ( sender, "S_A_Human.XG_EV5_troop", false ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//a gdi guy is waiting for evac--call in a helicopter { if (transportCalled == false) { transportCalled = true; Vector3 evacPosition = Commands->Get_Position ( obj ); GameObject *controller = Commands->Create_Object("Invisible_Object", evacPosition); Commands->Attach_Script(controller, "Test_Cinematic", "XG_M01_GDIBasePow_EvacAnim.txt"); } } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG)//chinook is ready to go--give clearance { GameObject *evacWaypath = Commands->Find_Object ( evac_waypath_id ); if (evacWaypath != NULL) { Commands->Send_Custom_Event( obj, evacWaypath, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject *evacChopper = Commands->Find_Object ( evac_helicopter_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event( obj, evacChopper, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject *evacRope = Commands->Find_Object ( evac_rope_id ); if (evacChopper != NULL) { Commands->Send_Custom_Event( obj, evacRope, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } if (objective_failed != true) { Commands->Set_Objective_Status( M01_GDI_BASE_POW_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); } } } }; DECLARE_SCRIPT(M01_GDIBasePOW_Air_Evac_Chopper_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsA", false ); Commands->Debug_Message ( "**********************script attached to evac chopper\n" ); Commands->Set_Shield_Type ( obj, "Blamo" ); Commands->Enable_Hibernation( obj, false ); Commands->Disable_Physical_Collisions ( obj ); Commands->Send_Custom_Event ( obj, obj, 0, M01_GOTO_IDLE_JDG, 3 ); GameObject * myController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (myController != NULL) { Commands->Send_Custom_Event ( obj, myController, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsA") == 0) { Commands->Debug_Message ( "**********************chopper has finished entry anim\n" ); Vector3 evacLocation = Commands->Get_Position ( obj ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsL", true ); GameObject * gdiGuy01 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY01_JDG ); GameObject * gdiGuy02 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY02_JDG ); if (gdiGuy01 != NULL) { Commands->Send_Custom_Event ( obj, gdiGuy01, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 3 ); } if (gdiGuy02 != NULL) { Commands->Send_Custom_Event ( obj, gdiGuy02, 0, M01_GOING_TO_EVAC_SPOT02_JDG, 0 ); } Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsz") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { switch (param) { case M01_MODIFY_YOUR_ACTION_JDG: { Commands->Debug_Message ( "*******************************helicopter has received custom to goto exit anim\n" ); Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsz", false ); } break; case M01_GOTO_IDLE_JDG: { Commands->Enable_Collisions ( obj ); } break; case M01_DO_END_MISSION_CHECK_JDG: { GameObject * gdiGuy01 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY01_JDG ); GameObject * gdiGuy02 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY02_JDG ); if ((gdiGuy01 != NULL)||(gdiGuy02 != NULL)) { Commands->Send_Custom_Event ( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 2 ); } else { GameObject * controller = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (controller != NULL) { Commands->Send_Custom_Event ( obj, controller, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 0 ); } } } break; } } }; DECLARE_SCRIPT(M01_ConDropZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(54.835f, -3.011f, 13.105f)); Commands->Set_Facing ( controller1, 45 ); Commands->Attach_Script(controller1, "Test_Cinematic", "X01_ConYardDrop.txt"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_ConYard_Dropoff_Dude_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.H_A_TroopDrop") == 0) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_C130_Dropoff_Dude_JDG, "") { void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_a_Human.H_A_X5D_ParaT_1") == 0) { Commands->Destroy_Object ( obj ); } else if (stricmp(anim, "S_a_Human.H_A_X5D_ParaT_2") == 0) { Commands->Destroy_Object ( obj ); } else if (stricmp(anim, "S_a_Human.H_A_X5D_ParaT_3") == 0) { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Base_GDI_Fodder_JDG, "") { void Created( GameObject * obj ) { Vector3 myTarget (72.223f, -24.751f, -0.296f); ActionParamsStruct params; Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); float delayTimer = Commands->Get_Random ( 10, 15 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, delayTimer );//kill yourself } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//kill yourself { Commands->Apply_Damage( obj, 10000, "BlamoKiller", NULL ); } } } }; DECLARE_SCRIPT(M01_Base_StartZone_JDG, "")//119628 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * minigunner = Commands->Find_Object ( 116382 ); GameObject * grenadier = Commands->Find_Object ( 116383 ); if (minigunner != NULL) { Commands->Send_Custom_Event( obj, minigunner, 0, M01_START_ATTACKING_01_JDG, 0 );//tell minigunner to greet havoc } if (grenadier != NULL) { Commands->Send_Custom_Event( obj, grenadier, 0, M01_START_ATTACKING_01_JDG, 0 );//tell grenadier to greet havoc } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Nod_Truck_JDG, "") { void Created( GameObject * obj ) { Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_NEUTRAL ); Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_NOD ); } }; DECLARE_SCRIPT(M01_C4_Tutorial_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * c4TextController = Commands->Find_Object ( 117188 ); if (c4TextController != NULL) { Commands->Send_Custom_Event( obj, c4TextController, 1, 1, 0 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Mainframe_Tutorial_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0527I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GateSwitch_Tutorial_Zone_JDG, "")//120844 { bool command_clearance; REGISTER_VARIABLES() { SAVE_VARIABLE(command_clearance, 1); } void Created( GameObject * obj ) { command_clearance = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR && command_clearance == true) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0528I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { command_clearance = true; } } } }; DECLARE_SCRIPT(M01_BarnArea_NOD_Commander_Trigger_Zone02_JDG, "")//103343 { bool entered; REGISTER_VARIABLES() { SAVE_VARIABLE(entered, 1); } void Created( GameObject * obj ) { entered = false; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR && entered == false) { entered = true; GameObject * firstFieldCommander = Commands->Find_Object (M01_BARNAREA_NOD_COMMANDER_JDG); if (firstFieldCommander != NULL) { Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_BARNAREA_NOD_COMMANDER_JDG ), 0, M01_START_ACTING_JDG, 0 ); Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_ADD_BARN_COMMANDER_OBJECTIVE_JDG, 5 ); } } } }; DECLARE_SCRIPT(M01_TurretBeach_Turret_01_Script_JDG, "")//M01_TURRETBEACH_TURRET_01_ID 101434 { int engineer_id; int fodderHovercraft_ID; REGISTER_VARIABLES() { SAVE_VARIABLE(engineer_id, 1); SAVE_VARIABLE(fodderHovercraft_ID, 2); } void Created( GameObject * obj ) { engineer_id = M01_TURRETBEACH_ENGINEER_ID; } void Killed( GameObject * obj, GameObject * killer ) //M01_IVE_BEEN_KILLED_JDG { GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, M01_TURRETS_OBJECTIVE_JDG, 0 ); } GameObject * turretEngineer = Commands->Find_Object ( engineer_id ); if (turretEngineer != NULL) { Commands->Send_Custom_Event( obj, turretEngineer, 0, M01_TURRET_HAS_BEEN_DESTROYED_JDG, 0 ); } Commands->Send_Custom_Event( obj, Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ), 0, M01_TURRET_HAS_BEEN_DESTROYED_JDG, 5 ); Vector3 myPositon = Commands->Get_Position ( obj ); float myFacing = Commands->Get_Facing ( obj ); GameObject * destroyedTurret = Commands->Create_Object ( "Nod_Turret_Destroyed", myPositon); Commands->Set_Facing ( destroyedTurret, myFacing ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { GameObject * turretEngineer = Commands->Find_Object ( engineer_id ); if (damager != NULL && damager == turretEngineer) { float myMaxHealth = Commands->Get_Max_Health ( obj ); Commands->Set_Health ( obj, myMaxHealth ); } else if (turretEngineer != NULL) { Commands->Send_Custom_Event( obj, turretEngineer, 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (gunboat != NULL) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( gunboat, 3000, 3, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } else if (param == M01_BUSY_TRY_AGAIN_JDG)//engineer is busy--call back in 2 seconds { GameObject * turretEngineer = Commands->Find_Object ( engineer_id ); if (turretEngineer != NULL) { Commands->Send_Custom_Event( obj, turretEngineer, 0, M01_PLAYER_IS_ATTACKING_ME_JDG, 1 ); } } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//new engineer is actually sending id { engineer_id = Commands->Get_ID ( sender ); } } else if (type == M01_FODDER_HOVERCRAFT_IS_HERE) { fodderHovercraft_ID = param; GameObject * fodderHovercraft = Commands->Find_Object ( fodderHovercraft_ID ); if (fodderHovercraft != NULL) { Commands->Action_Reset ( obj, 100 ); ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ATTACKING_01_JDG); params.Set_Attack( fodderHovercraft, 3000, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_START_ATTACKING_01_JDG)//hovercraft is dead...go back to attacking gunboat { GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (gunboat != NULL) { ActionParamsStruct params; params.Set_Basic(this, 100, M01_START_ACTING_JDG); params.Set_Attack( gunboat, 3000, 3, true ); params.AttackCheckBlocked = false; Commands->Action_Attack ( obj, params ); } } } }; DECLARE_SCRIPT(M01_GunboatAction_Controller_JDG, "")//M01_TURRETBEACH_CONTROLLER_ID { bool active; int engineer_id; REGISTER_VARIABLES() { SAVE_VARIABLE(active, 1); SAVE_VARIABLE(engineer_id, 2); } void Created( GameObject * obj ) { active = false; engineer_id = M01_TURRETBEACH_ENGINEER_ID; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { if (active == false) { active = true; GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); GameObject * engineer = Commands->Find_Object ( engineer_id ); //GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); if (gunboat != NULL) { Commands->Send_Custom_Event ( obj, gunboat, 0, M01_START_ACTING_JDG, 0 ); } if (engineer != NULL) { Commands->Send_Custom_Event ( obj, engineer, 0, M01_START_ACTING_JDG, 0 ); } } } else if (param == M01_GOTO_IDLE_JDG)//M01_CHOPPER_IS_SENDING_ID_JDG { if (active == true) { active = false; GameObject * gunboat = Commands->Find_Object ( M01_TURRETBEACH_GUNBOAT_ID ); GameObject * engineer = Commands->Find_Object ( engineer_id ); if (gunboat != NULL) { Commands->Send_Custom_Event ( obj, gunboat, 0, M01_GOTO_IDLE_JDG, 0 ); } if (engineer != NULL) { Commands->Send_Custom_Event ( obj, engineer, 0, M01_GOTO_IDLE_JDG, 0 ); } } } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//new engineer is actually sending ID { engineer_id = Commands->Get_ID ( sender ); } } } }; DECLARE_SCRIPT(M01_Initial_Gunboat_Script_JDG, "")//M01_TURRETBEACH_GUNBOAT_ID 101477 { bool firstHealthWarningPlayed; bool secondHealthWarningPlayed; Vector3 myPosition; float myFacing; REGISTER_VARIABLES() { SAVE_VARIABLE(firstHealthWarningPlayed, 1); SAVE_VARIABLE(secondHealthWarningPlayed, 2); SAVE_VARIABLE(myPosition, 3); SAVE_VARIABLE(myFacing, 4); } void Created( GameObject * obj ) { firstHealthWarningPlayed = false; secondHealthWarningPlayed = false; myPosition = Commands->Get_Position ( obj ); myFacing = Commands->Get_Facing ( obj ); ActionParamsStruct params; params.Set_Basic(this, 90, M01_WALKING_WAYPATH_02_JDG); //params.Set_Movement( Vector3(0,0,0), .1f, 3 ); //params.WaypathID = 101497; params.AttackActive = false; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } void Killed( GameObject * obj, GameObject * killer ) // { GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event( obj, missionController, 0, M01_END_TURRETS_OBJECTIVE_FAIL_JDG, 0 ); } GameObject * sinkingGunboat = Commands->Create_Object ( "M01_GDI_Gunboat", myPosition ); Commands->Set_Facing ( sinkingGunboat, myFacing ); Commands->Attach_Script(sinkingGunboat, "M01_Sinking_Gunboat_JDG", ""); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { if (obj) { float myCurrentHealth = Commands->Get_Health (obj); float myMaxHealth = Commands->Get_Max_Health (obj); float healthPercentage = (myCurrentHealth/myMaxHealth) * 100; if (myCurrentHealth <= 10) { Commands->Set_Health ( obj, 10 ); } if (healthPercentage <= 50) { if (secondHealthWarningPlayed == false) { secondHealthWarningPlayed = true; int gunboatHealthWarning02 = Commands->Create_Conversation( "M01_Gunboat_HealthWarning_02", 100, 1000, false); Commands->Join_Conversation( NULL, gunboatHealthWarning02, false, false ); Commands->Join_Conversation( NULL, gunboatHealthWarning02, false, false ); Commands->Join_Conversation( STAR, gunboatHealthWarning02, false, false ); Commands->Start_Conversation( gunboatHealthWarning02, gunboatHealthWarning02 ); } } else if (healthPercentage <= 75) { if (firstHealthWarningPlayed == false) { firstHealthWarningPlayed = true; int gunboatHealthWarning01 = Commands->Create_Conversation( "M01_Gunboat_HealthWarning_01", 100, 1000, false); Commands->Join_Conversation( NULL, gunboatHealthWarning01, false, false ); Commands->Join_Conversation( NULL, gunboatHealthWarning01, false, false ); Commands->Start_Conversation( gunboatHealthWarning01, gunboatHealthWarning01 ); } } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (param == M01_MODIFY_YOUR_ACTION_03_JDG) { params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); //params.Set_Movement( Vector3(0,0,0), .2f, 6 ); //params.WaypathID = 101497; float pickTarget = Commands->Get_Random ( 0.5f, 2.5f ); if (pickTarget >= 0.5f && pickTarget < 1.5f) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret01 != NULL) { Vector3 myTarget = Commands->Get_Position ( turret01 ); myTarget.Z += 2; params.Set_Attack( myTarget, 2000, 0, true ); } else if (turret02 != NULL) { Vector3 myTarget = Commands->Get_Position ( turret02 ); myTarget.Z += 2; params.Set_Attack( myTarget, 2000, 0, true ); } } else { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { Vector3 myTarget = Commands->Get_Position ( turret02 ); myTarget.Z += 2; params.Set_Attack( myTarget, 2000, 0, true ); } else if (turret01 != NULL) { Vector3 myTarget = Commands->Get_Position ( turret01 ); myTarget.Z += 2; params.Set_Attack( myTarget, 2000, 0, true ); } } params.AttackActive = true; params.AttackCheckBlocked = false; Commands->Modify_Action (obj, M01_WALKING_WAYPATH_02_JDG, params); float delayTimer = Commands->Get_Random ( 4, 6 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, delayTimer ); } else if (param == M01_START_ACTING_JDG) { Commands->Debug_Message ( "***************************gunboat custom received--start acting\n" ); Commands->Enable_Hibernation( obj, false ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); //params.Set_Movement( Vector3(0,0,0), .2f, 6 ); //params.WaypathID = 101497; params.AttackActive = false; Commands->Modify_Action (obj, M01_WALKING_WAYPATH_02_JDG, params); float delayTimer = Commands->Get_Random ( 0, 2 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, delayTimer ); } else if (param == M01_GOTO_IDLE_JDG) { Commands->Debug_Message ( "***************************gunboat custom received--STOP acting\n" ); Commands->Enable_Hibernation( obj, true ); } else if (param == M01_END_TURRETS_OBJECTIVE_PASS_JDG) { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement( Vector3(0,0,0), .7f, 10 ); params.WaypathID = 103454; Commands->Action_Goto( obj, params ); GameObject * tankZone = Commands->Find_Object ( 102500 ); if (tankZone != NULL) { Commands->Send_Custom_Event( obj, tankZone, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (action_id == M01_WALKING_WAYPATH_03_JDG)//gunboat is at end of final waypath--delete it { Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GDIBase_BaseCommander_JDG, "")//106050 Capt Duncan { int gdi04conv01; bool gaveIonBeacon; int gdi04conv02; bool powsRescued; REGISTER_VARIABLES() { SAVE_VARIABLE(gdi04conv01, 1); SAVE_VARIABLE(gaveIonBeacon, 2); SAVE_VARIABLE(gdi04conv02, 3); SAVE_VARIABLE(powsRescued, 4); } void Created( GameObject * obj ) { Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_GDI ); powsRescued = false; gaveIonBeacon = false; Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_NEUTRAL ); } void Killed( GameObject * obj, GameObject * killer ) { if (gaveIonBeacon == false) { Commands->Set_Objective_Status( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } GameObject * shackzone = Commands->Find_Object ( 115985 ); if (shackzone != NULL) { Commands->Send_Custom_Event( obj, shackzone, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * pow01 = Commands->Find_Object ( 116386 ); if (pow01 != NULL) { Commands->Apply_Damage( pow01, 10000, "Steel", NULL ); } GameObject * pow02 = Commands->Find_Object ( 116385 ); if (pow02 != NULL) { Commands->Apply_Damage( pow02, 10000, "Steel", NULL ); } GameObject * baseMinigunner = Commands->Find_Object ( 116382 ); if (baseMinigunner != NULL) { Commands->Send_Custom_Event( obj, baseMinigunner, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } GameObject * baseGrenadier = Commands->Find_Object ( 116383 ); if (baseGrenadier != NULL) { Commands->Send_Custom_Event( obj, baseGrenadier, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } Vector3 nodGuy01_spot (28.566f, 29.790f, 1.792f); Vector3 nodGuy02_spot (65.899f, 46.347f, -0.294f); Vector3 nodGuy03_spot (24.776f, 44.863f, 0.708f); GameObject * nodGuy01 = Commands->Create_Object ( "Nod_MiniGunner_0", nodGuy01_spot ); GameObject * nodGuy02 = Commands->Create_Object ( "Nod_MiniGunner_0", nodGuy02_spot ); GameObject * nodGuy03 = Commands->Create_Object ( "Nod_MiniGunner_0", nodGuy03_spot ); Commands->Set_Innate_Soldier_Home_Location ( nodGuy01, nodGuy01_spot, 10 ); Commands->Set_Innate_Soldier_Home_Location ( nodGuy02, nodGuy02_spot, 10 ); Commands->Set_Innate_Soldier_Home_Location ( nodGuy03, nodGuy03_spot, 10 ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float myHealth = Commands->Get_Health ( obj ); if (myHealth <= 10) { Commands->Set_Health ( obj, 10 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_START_ACTING_JDG) { Commands->Set_Player_Type ( obj, SCRIPT_PLAYERTYPE_GDI ); Commands->Send_Custom_Event( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 1 );// } else if (param == M01_GDI_BASE_POWS_RESCUED_JDG) { powsRescued = true; } else if (param == M01_DO_END_MISSION_CHECK_JDG) { GameObject * nodGuy01 = Commands->Find_Object ( 101399 ); GameObject * nodGuy02 = Commands->Find_Object ( 103335 ); GameObject * nodGuy03 = Commands->Find_Object ( 103340 ); GameObject * nodGuy04 = Commands->Find_Object ( 102185 ); if ( (nodGuy01 == NULL) && (nodGuy02 == NULL) && (nodGuy03 == NULL) && (nodGuy04 == NULL) ) { GameObject * letsgozone = Commands->Find_Object ( 105615 ); if (letsgozone != NULL) { Commands->Destroy_Object ( letsgozone ); } GameObject * shackzone = Commands->Find_Object ( 115985 ); if (shackzone != NULL) { Commands->Send_Custom_Event( obj, shackzone, 0, M01_START_ACTING_JDG, 0 ); } } else { Commands->Send_Custom_Event( obj, obj, 0, M01_DO_END_MISSION_CHECK_JDG, 0.25f ); } } else if (param == M01_GOTO_YOUR_EVAC_SPOT_JDG)// { Commands->Enable_Hibernation( obj, false ); Commands->Action_Reset ( obj, 100 ); Vector3 myHomeSpot (55.9f, 40.3f, -0.2f); params.Set_Basic( this, 100, M01_GOTO_YOUR_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } else if (param == M01_GOING_TO_EVAC_SPOT_JDG)//your ride is here--go get in { Commands->Action_Reset ( obj, 100 ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL) { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myHomeSpot = Commands->Get_Position ( myEvacController ); params.Set_Basic( this, 100, M01_GOING_TO_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//havoc has saved you--start conversation { gdi04conv01 = Commands->Create_Conversation( "M01_GDI04_Conversation_01", 100, 1000, false); Commands->Join_Conversation( obj, gdi04conv01, false, true, true ); Commands->Join_Conversation( STAR, gdi04conv01, false, false, false ); Commands->Start_Conversation( gdi04conv01, gdi04conv01 ); Commands->Monitor_Conversation( obj, gdi04conv01 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == gdi04conv01) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("H_A_J12C", false); Commands->Action_Play_Animation (obj, params);// Commands->Set_Objective_Status( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_STATUS_ACCOMPLISHED ); /*GameObject * POW01 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY01_JDG ); if (POW01 != NULL) { Commands->Send_Custom_Event( obj, POW01, 0, M01_CAPT_DUNCAN_HAS_BEEN_FOUND_JDG, 0 ); } GameObject * POW02 = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_POWGUY02_JDG ); if (POW02 != NULL) { Commands->Send_Custom_Event( obj, POW02, 0, M01_CAPT_DUNCAN_HAS_BEEN_FOUND_JDG, 0 ); }*/ } if (action_id == gdi04conv02) { GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL) { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_START_ACTING_JDG, 0 ); } } } else if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_02_JDG) { } else if (action_id == M01_DOING_ANIMATION_01_JDG) { Vector3 myPostion (114.848f, 95.401f, 8.923f); Commands->Create_Object ( "POW_IonCannonBeacon_Player", myPostion ); gaveIonBeacon = true; gdi04conv02 = Commands->Create_Conversation( "M01_GDI04_Conversation_02", 100, 1000, false); Commands->Join_Conversation( obj, gdi04conv02, false, true, true ); Commands->Join_Conversation( STAR, gdi04conv02, false, false, false ); Commands->Start_Conversation( gdi04conv02, gdi04conv02 ); Commands->Monitor_Conversation( obj, gdi04conv02 ); } else if (action_id == M01_GOTO_YOUR_EVAC_SPOT_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to call in a chopper { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//start load animation here { 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); Commands->Give_Points( STAR, 2000, false ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { if (gaveIonBeacon == false) { Commands->Set_Objective_Status( M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, OBJECTIVE_STATUS_FAILED ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_Base_GDI_Grenadier_JDG, "")//116383 { float currentHealth; bool invincible; bool ducanRescued; bool headingDownBackPath; bool still_in_GDI_Base; bool damagedByNod; REGISTER_VARIABLES() { SAVE_VARIABLE(currentHealth, 1); SAVE_VARIABLE(invincible, 2); SAVE_VARIABLE(ducanRescued, 3); SAVE_VARIABLE(headingDownBackPath, 4); SAVE_VARIABLE(still_in_GDI_Base, 5); SAVE_VARIABLE(damagedByNod, 6); } void Created( GameObject * obj ) //this guy starts in the guard tower firing over at the conyard { damagedByNod = false; still_in_GDI_Base = true; invincible = true; ducanRescued = false; currentHealth = Commands->Get_Health ( obj ); Commands->Set_Innate_Is_Stationary ( obj, true ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 10 );//in 2 seconds run to a new position } void Damaged( GameObject * obj, GameObject * damager, float amount ) { GameObject * nodGuy01 = Commands->Find_Object ( 116388 ); GameObject * nodGuy02 = Commands->Find_Object ( 116387 ); if (damager == nodGuy01 || damager == nodGuy02) { if (damagedByNod == false) { damagedByNod = true; Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_04_JDG, 0 ); } } if (invincible == true) { //Commands->Set_Health ( obj, currentHealth ); float myCurrentHealth = Commands->Get_Health ( obj ); if (myCurrentHealth <= 10) { Commands->Set_Health ( obj, 10 ); } } else if (obj && damager == obj) { Commands->Set_Health ( obj, currentHealth ); } else if (obj) { currentHealth = Commands->Get_Health ( obj ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//run over next to ladder { Vector3 newPosition (38.873f, -42.180f, -0.432f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement(newPosition, RUN, 1); Commands->Action_Goto ( obj, params ); } else if (param == M01_START_ATTACKING_01_JDG)//player is at top of ladders...check if nod minigunner is still alive { GameObject * nodMinigunner = Commands->Find_Object ( 116384 ); if (nodMinigunner != NULL) { params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Attack( nodMinigunner, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else { Commands->Action_Reset ( obj, 100 ); } } else if (param == M01_START_ACTING_JDG)// { Commands->Action_Reset ( obj, 100 ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_02_JDG); params.Set_Attack( STAR, 0, 0, true ); Commands->Action_Attack (obj, params); float delayTimer = Commands->Get_Random ( 1, 2 ); 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 ); } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG) { //invincible = false; Vector3 newPosition (26.767f, 18.529f, 3.139f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement(newPosition, RUN, 1); Commands->Action_Goto ( obj, params ); } else if (param == M01_GOTO_YOUR_EVAC_SPOT_JDG) { Commands->Enable_Hibernation( obj, false ); //evacing = true; ducanRescued = true; Commands->Action_Reset ( obj, 100 ); Vector3 myHomeSpot (41.3f, 27.4f, -0.2f); params.Set_Basic( this, 100, M01_GOTO_YOUR_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } else if (param == M01_GOING_TO_EVAC_SPOT_JDG)//your ride is here--go get in { Commands->Action_Reset ( obj, 100 ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL) { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myHomeSpot = Commands->Get_Position ( myEvacController ); params.Set_Basic( this, 100, M01_GOING_TO_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } } else if (param == M01_MODIFY_YOUR_ACTION_06_JDG && ducanRescued == false)//Head down the path { still_in_GDI_Base = false; Commands->Action_Reset ( obj, 100 ); headingDownBackPath = true; Vector3 newGotoSpot (111.210f, 85.507f, 8.934f); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(newGotoSpot, RUN, 1); params.AttackActive = false; Commands->Action_Attack (obj, params); } else if (param == M01_IVE_BEEN_KILLED_JDG) { if (still_in_GDI_Base == true) { invincible = false; Commands->Apply_Damage( obj, 100000, "Steel", NULL ); } } else if (param == M01_WALKING_WAYPATH_04_JDG) { GameObject * nodguy02 = Commands->Find_Object ( 116387 ); if (nodguy02 != NULL) { Vector3 myNewSpot (53.363f, 54.018f, -0.439f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement(myNewSpot, RUN, 1); params.Set_Attack( nodguy02, 20, 0, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else { Vector3 myNewSpot (53.363f, 54.018f, -0.439f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement(myNewSpot, RUN, 1); Commands->Action_Goto (obj, params); } } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (headingDownBackPath == true) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(enemy, WALK, 5); params.Set_Attack( enemy, 1000, 0, true ); params.AttackActive = true; Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_06_JDG, params, true, true ); } } 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) { Vector3 myTarget (28.449f, -23.325f, 3.032f); Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else 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_GOTO_YOUR_EVAC_SPOT_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to call in a chopper { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//start load animation here { 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_WALKING_WAYPATH_03_JDG)//you're over by the pows now...check if nod guy 02 is still alive { Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_04_JDG, 0 ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG)//your target is dead...make sure you go over to path { Vector3 myNewSpot (53.363f, 54.018f, -0.439f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement(myNewSpot, RUN, 1); Commands->Action_Goto (obj, params); } else if (action_id == M01_WALKING_WAYPATH_05_JDG)//you're by path entrance...goto stationary { Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_WALKING_WAYPATH_06_JDG)//you just killed a back path guy...continue your journey { Vector3 newGotoSpot (111.210f, 85.507f, 8.934f); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(newGotoSpot, RUN, 1); params.AttackActive = false; Commands->Action_Attack (obj, params); } } } }; DECLARE_SCRIPT(M01_MediumTank_ReminderZone_JDG, "")//122848 { bool commandClearance; bool player_in_tank; int reminderConv; int tank_id; int reminders; REGISTER_VARIABLES() { SAVE_VARIABLE(commandClearance, 1); SAVE_VARIABLE(player_in_tank, 2); SAVE_VARIABLE(tank_id, 3); SAVE_VARIABLE(reminders, 4); } void Created( GameObject * obj ) { commandClearance = false; player_in_tank = false; reminders = 0; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { if (commandClearance == true) { if (player_in_tank == true)// { } else { int tunnelConv = Commands->Create_Conversation( "M01_TunnelTank_Reminder_Conversation", 100, 30, false ); Commands->Join_Conversation( NULL, tunnelConv, false, true, true ); Commands->Start_Conversation( tunnelConv, tunnelConv ); Commands->Destroy_Object ( obj ); } } } } void Timer_Expired( GameObject * obj, int timer_id ) { if (player_in_tank == false) { reminders++; if (reminders == 1) { GameObject * mediumTank = Commands->Find_Object ( tank_id ); if (mediumTank != NULL) { reminderConv = Commands->Create_Conversation( "M01_GetInTheTank_01_Conversation", 100, 30, false ); Commands->Join_Conversation( NULL, reminderConv, false, true, true ); Commands->Start_Conversation( reminderConv, reminderConv ); Commands->Monitor_Conversation( obj, reminderConv ); } } else if (reminders == 2) { GameObject * mediumTank = Commands->Find_Object ( tank_id ); if (mediumTank != NULL) { reminderConv = Commands->Create_Conversation( "M01_GetInTheTank_02_Conversation", 100, 30, false ); Commands->Join_Conversation( NULL, reminderConv, false, true, true ); Commands->Start_Conversation( reminderConv, reminderConv ); Commands->Monitor_Conversation( obj, reminderConv ); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == reminderConv) { Commands->Start_Timer ( obj, this, 30, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG)//tank is here { commandClearance = true; Commands->Start_Timer ( obj, this, 10, 0 ); tank_id = Commands->Get_ID ( obj ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG)//player is in the tank { player_in_tank = true; } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//player is out of the tank { player_in_tank = false; } } } }; DECLARE_SCRIPT(M01_Base_POW01_JDG, "")//116386 { int deadGuards; bool pokable; REGISTER_VARIABLES() { SAVE_VARIABLE(deadGuards, 1); SAVE_VARIABLE(pokable, 2); } void Created( GameObject * obj ) { deadGuards = 0; Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_GDI ); Commands->Set_Loiters_Allowed( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_HOST_L2B", true ); Commands->Action_Play_Animation ( obj, params ); pokable = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float currentHealth = Commands->Get_Health ( obj ); if (currentHealth <= 10) { Commands->Set_Health ( obj, 10 ); } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * evacController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { Commands->Destroy_Object ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) //M01_POW02_Conversation_01 { ActionParamsStruct params; if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG) { deadGuards++; if (deadGuards == 2) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_HOST_L2C", false ); Commands->Action_Play_Animation ( obj, params ); GameObject * pow02 = Commands->Find_Object ( 116385 ); if (pow02 != NULL) { Commands->Send_Custom_Event( obj, pow02, 0, M01_START_ACTING_JDG, 1 ); } Vector3 airdropPosition (55.062f, 60.164f, -1); GameObject *controller = Commands->Create_Object("Invisible_Object", airdropPosition); Commands->Set_Facing ( controller, -45 ); Commands->Attach_Script(controller, "Test_Cinematic", "X1D_GDIPOW_FlareDrop.txt"); } } else if (param == M01_GOING_TO_EVAC_SPOT02_JDG) { Commands->Enable_Hibernation( obj, false ); Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myEvacSpot = Commands->Get_Position ( Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ) ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( myEvacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); } else if (param == M01_GOTO_INNATE_JDG) { pokable = false; Commands->Enable_HUD_Pokable_Indicator ( obj, false ); } } } 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_02_JDG )//pow guy is standingup { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "H_A_HOST_L1C", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//play the Havoc conversation { GameObject * convController = Commands->Find_Object ( 121237 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_START_ACTING_JDG, 0 ); } } else if (action_id == M01_WALKING_WAYPATH_02_JDG)//gdi guy is at evac chopper--delete him { GameObject * airdropController = Commands->Find_Object ( M01_GDIBASE_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_Base_POW02_JDG, "")//116385 { bool pokable; int pow02conv01; REGISTER_VARIABLES() { SAVE_VARIABLE(pokable, 1); SAVE_VARIABLE(pow02conv01, 2); } void Created( GameObject * obj ) { Commands->Set_Obj_Radar_Blip_Color ( obj, RADAR_BLIP_COLOR_GDI ); Commands->Set_Loiters_Allowed( obj, false ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation( "H_A_HOST_L2B", true ); Commands->Action_Play_Animation ( obj, params ); pokable = false; } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float currentHealth = Commands->Get_Health ( obj ); if (currentHealth <= 10) { Commands->Set_Health ( obj, 10 ); } } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { Commands->Destroy_Object ( obj ); } } void Killed( GameObject * obj, GameObject * killer ) { GameObject * evacController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) //M01_POW02_Conversation_01 { ActionParamsStruct params; if (type == 0) { if (param == M01_START_ACTING_JDG) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation( "H_A_HOST_L2C", false ); Commands->Action_Play_Animation ( obj, params ); } else if (param == M01_GOING_TO_EVAC_SPOT02_JDG) { Commands->Enable_Hibernation( obj, false ); Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myEvacSpot = Commands->Get_Position ( Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ) ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( myEvacSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); } else if (param == M01_GOTO_INNATE_JDG) { pokable = false; Commands->Enable_HUD_Pokable_Indicator ( obj, false ); } } } 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_02_JDG )//pow guy is standingup { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation( "H_A_HOST_L1C", false ); Commands->Action_Play_Animation ( obj, params ); Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//pow guy is standingup -- do cheer anim { char *animationName = M01_Choose_Cheer_Animation ( ); params.Set_Basic( this, 100, 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 )//pow guy is standingup -- play havoc anim if pow01 is dead { GameObject * pow01 = Commands->Find_Object ( 116386 ); if (pow01 == NULL) { GameObject * convController = Commands->Find_Object ( 121237 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_START_ACTING_JDG, 0 ); } } } else if (action_id == M01_WALKING_WAYPATH_02_JDG)//gdi guy is at evac chopper--delete him { GameObject * airdropController = Commands->Find_Object ( M01_GDIBASE_EVAC_MONITOR_JDG ); if (airdropController != NULL) { Commands->Send_Custom_Event( obj, airdropController, 0, M01_GOING_TO_EVAC_SPOT_JDG, 0 ); } GameObject * myEvacController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_GDIBase_POW_Conversation_Controller_JDG, "")//121237 { bool convPlayed; int pow02conv01; REGISTER_VARIABLES() { SAVE_VARIABLE(convPlayed, 1); SAVE_VARIABLE(pow02conv01, 2); } void Created( GameObject * obj ) { convPlayed = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) //M01_POW02_Conversation_01 { ActionParamsStruct params; if (type == 0) { if (param == M01_START_ACTING_JDG && convPlayed == false) { convPlayed = true; GameObject * pow01 = Commands->Find_Object ( 116386 ); GameObject * pow02 = Commands->Find_Object ( 116385 ); if (sender == pow01 && pow01 != NULL) { pow02conv01 = Commands->Create_Conversation( "M01_POW02_Conversation_01", 100, 1000, false ); Commands->Join_Conversation( pow01, pow02conv01, false, true, true ); Commands->Join_Conversation( STAR, pow02conv01, false, false, false ); Commands->Start_Conversation( pow02conv01, pow02conv01 ); Commands->Monitor_Conversation( obj, pow02conv01 ); } else if (sender == pow02 && pow02 != NULL) { pow02conv01 = Commands->Create_Conversation( "M01_POW02_Conversation_01", 100, 1000, false ); Commands->Join_Conversation( pow02, pow02conv01, false, true, true ); Commands->Join_Conversation( STAR, pow02conv01, false, false, false ); Commands->Start_Conversation( pow02conv01, pow02conv01 ); Commands->Monitor_Conversation( obj, pow02conv01 ); } if (pow01 != NULL)//M01_GOTO_INNATE_JDG { Commands->Send_Custom_Event( obj, pow01, 0, M01_GOTO_INNATE_JDG, 0 ); } if (pow02 != NULL) { Commands->Send_Custom_Event( obj, pow02, 0, M01_GOTO_INNATE_JDG, 0 ); } } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { ActionParamsStruct params; if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == pow02conv01) { GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event( obj, pogController, M01_CHANGE_OBJECTIVE_POG_JDG, M01_GDI_BASE_COMMANDER_OBJECTIVE_JDG, 0 ); } GameObject * evacController = Commands->Find_Object ( M01_GDIBASE_POWSCENE02_MONITOR_JDG ); if (evacController != NULL) { Commands->Send_Custom_Event( obj, evacController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject * gdiMinigunner = Commands->Find_Object ( 116382 ); if (gdiMinigunner != NULL) { Commands->Send_Custom_Event( obj, gdiMinigunner, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 2 ); //this tells him to start the "this is the path" routine } GameObject * backPathZone = Commands->Find_Object ( 121433 ); if (backPathZone != NULL) { Commands->Send_Custom_Event( obj, backPathZone, 0, M01_START_ACTING_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_GDI_BeachGuy01_JDG, "") { void Created( GameObject * obj ) { Commands->Innate_Disable(obj); ActionParamsStruct params; Commands->Enable_Hibernation( obj, false ); params.Set_Basic(this, 100, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement( Vector3(36.231f, 28.471f, 0.131f), RUN, 2 ); Commands->Action_Goto( obj, params ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { float currentHealth = Commands->Get_Health ( obj ); if (currentHealth <= 10 && damager == STAR) { Commands->Set_Health ( obj, 10 ); } } 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) { Commands->Apply_Damage( obj, 10000, "STEEL", NULL ); } } } }; DECLARE_SCRIPT(M01_Announce_TankAirstrikeZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * missionController = Commands->Find_Object ( M01_MISSION_CONTROLLER_JDG ); if (missionController != NULL) { Commands->Send_Custom_Event( obj, missionController, 0, M01_ANNOUNCE_AIRSTRIKE_JDG, 0 ); } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GDI_GuardTower_02_Enter_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3()); Commands->Attach_Script(sniperTarget01, "M01_GuardTower_Sniper_Target_JDG", "-90.385 124.308 1.610, -79.477 139.201 0.947"); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3()); Commands->Attach_Script(sniperTarget02, "M01_GuardTower_Sniper_Target_JDG", "-85.499 117.221 1.915, -79.477 139.201 0.947"); GameObject * sniperTarget03 = Commands->Create_Object ( "Nod_MiniGunner_0", Vector3()); Commands->Attach_Script(sniperTarget03, "M01_GuardTower_Sniper_Target_JDG", "-93.364 113.202 1.701, -79.477 139.201 0.947"); Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_GDI_GuardTower02_SniperRifle_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) //sniper rifle has been picked up--spawn the actors { GameObject * c4TextController = Commands->Find_Object ( 117188 ); if (c4TextController != NULL) { Commands->Send_Custom_Event( obj, c4TextController, 2, 1, 0 ); } Vector3 spawnLocation01 (-79.182f, 141.927f, 1.763f); GameObject * sniperTarget01 = Commands->Create_Object ( "Nod_MiniGunner_0", spawnLocation01); Commands->Attach_Script(sniperTarget01, "M01_GuardTower02_Sniper_Target01_JDG", ""); } } }; DECLARE_SCRIPT(M01_GuardTower02_Sniper_Target01_JDG, "") { int guy02_id; int sniperConv; bool acting; REGISTER_VARIABLES() { SAVE_VARIABLE(guy02_id, 1); SAVE_VARIABLE(sniperConv, 2); SAVE_VARIABLE(acting, 3); } void Created( GameObject * obj ) { acting = true; Commands->Enable_Hibernation( obj, false ); Vector3 spawnLocation02 (-93.882f, 110.504f, 1.644f); GameObject * sniperTarget02 = Commands->Create_Object ( "Nod_MiniGunner_0", spawnLocation02); Commands->Attach_Script(sniperTarget02, "M01_GuardTower02_Sniper_Target02_JDG", ""); Commands->Send_Custom_Event( obj, sniperTarget02, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 1 ); guy02_id = Commands->Get_ID ( sniperTarget02 ); Vector3 myGotoSpot (-92.496f, 117.750f, 1.752f); ActionParamsStruct params; params.Set_Basic( this, 80, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myGotoSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { GameObject * reinforceController = Commands->Find_Object ( 123645 ); if (reinforceController != NULL) { Commands->Send_Custom_Event( obj, reinforceController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } if (acting == true) { GameObject * guy02 = Commands->Find_Object ( guy02_id ); if (guy02 != NULL) { Commands->Send_Custom_Event( obj, guy02, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG)//your buddy's been capped--do look around anim { Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("H_A_A0A0_L21", 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_WALKING_WAYPATH_01_JDG )//youre now in middle of field--start conversation { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * guy02 = Commands->Find_Object ( guy02_id ); if (guy02 != NULL) { sniperConv = Commands->Create_Conversation( "M01_SniperTower_Conversation", 100, 80, true); Commands->Join_Conversation( obj, sniperConv, false, true, true ); Commands->Join_Conversation( guy02, sniperConv, false, true, true ); Commands->Start_Conversation( sniperConv, sniperConv ); Commands->Monitor_Conversation( obj, sniperConv ); } } else if (action_id == M01_WALKING_WAYPATH_02_JDG )//youre now at the tailguns--allow hibernation { Commands->Enable_Hibernation( obj, true ); } else if (action_id == M01_DOING_ANIMATION_01_JDG )//youre looked around--now set curent position as home spot { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == sniperConv )//conversation is over--go away { acting = false; Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myGotoSpot (46.749f, 197.062f, 6.211f); ActionParamsStruct params; params.Set_Basic( this, 50, M01_WALKING_WAYPATH_02_JDG ); params.Set_Movement( myGotoSpot, RUN, 1 ); Commands->Action_Goto( obj, params ); GameObject * guy02 = Commands->Find_Object ( guy02_id ); if (guy02 != NULL) { Commands->Send_Custom_Event( obj, guy02, 0, M01_START_ACTING_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_GuardTower02_Sniper_TowerZone_JDG, "")//123645 { bool player_in_zone; int targets_killed; REGISTER_VARIABLES() { SAVE_VARIABLE(player_in_zone, 1); SAVE_VARIABLE(targets_killed, 2); } void Created( GameObject * obj ) { player_in_zone = false; targets_killed = 0; } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { player_in_zone = true; } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { player_in_zone = false; } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG)//a sniper targets been killed--check player position and spawn new target if needed { if (player_in_zone == true) { targets_killed++; if (targets_killed == 1) { Vector3 spawnLocation02 (-51.423f, 126.198f, 2.537f); GameObject * new_sniperTarget = Commands->Create_Object ( "Nod_MiniGunner_0", spawnLocation02); Commands->Attach_Script(new_sniperTarget, "M01_GuardTower02_NewSniperTarget_JDG", ""); } else if (targets_killed == 2) { } } } } } }; DECLARE_SCRIPT(M01_GuardTower02_NewSniperTarget_JDG, "") { void Created( GameObject * obj ) { Commands->Enable_Hibernation( obj, false ); Vector3 runToPosition (-67.347f, 118.048f, 2.641f); ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( runToPosition, 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 )//now look over at Havoc { 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_FACING_SPECIFIED_DIRECTION_01_JDG, 1 ); } else if (action_id == M01_DOING_ANIMATION_02_JDG )//now do neck chop anim { params.Set_Basic( this, 100, M01_DOING_ANIMATION_03_JDG ); params.Set_Animation ("H_A_A0A0_L56", false); Commands->Action_Play_Animation (obj, params); } else if (action_id == M01_DOING_ANIMATION_03_JDG )//now go attack havoc { params.Set_Basic( this, 50, M01_FACING_SPECIFIED_DIRECTION_01_JDG ); params.Set_Attack( STAR, 20, 0, true ); params.Set_Movement( STAR, RUN, 5); Commands->Action_Attack ( obj, params ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_FACING_SPECIFIED_DIRECTION_01_JDG) { params.Set_Basic( this, 100, M01_DOING_ANIMATION_02_JDG ); params.Set_Animation ("H_A_A0A0_L34", false); Commands->Action_Play_Animation (obj, params); } } } }; DECLARE_SCRIPT(M01_GuardTower02_Sniper_Target02_JDG, "") { int guy01_id; bool acting; REGISTER_VARIABLES() { SAVE_VARIABLE(guy01_id, 1); SAVE_VARIABLE(acting, 2); } void Created( GameObject * obj ) { acting = true; Commands->Enable_Hibernation( obj, false ); Vector3 myGotoSpot (-92.927f, 115.587f, 1.847f); ActionParamsStruct params; params.Set_Basic( this, 80, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myGotoSpot, WALK, 1 ); Commands->Action_Goto( obj, params ); } void Killed( GameObject * obj, GameObject * killer ) { GameObject * reinforceController = Commands->Find_Object ( 123645 ); if (reinforceController != NULL) { Commands->Send_Custom_Event( obj, reinforceController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } if (acting == true) { GameObject * guy01 = Commands->Find_Object ( guy01_id ); if (guy01 != NULL) { Commands->Send_Custom_Event( obj, guy01, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } 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 )//youre now in middle of field--start conversation { Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_DOING_ANIMATION_01_JDG )//youre looked around--now set curent position as home spot { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myPosition = Commands->Get_Position ( obj ); Commands->Set_Innate_Soldier_Home_Location ( obj, myPosition, 5 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_START_ACTING_JDG) { acting = false; Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myGotoSpot (-79.399f, 112.473f, 2.373f); params.Set_Basic( this, 50, M01_WALKING_WAYPATH_01_JDG ); params.Set_Movement( myGotoSpot, WALK, 1 ); Commands->Action_Goto( obj, params ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//your buddy's been capped--do look around anim { Commands->Action_Reset ( obj, 100 ); params.Set_Basic( this, 100, M01_DOING_ANIMATION_01_JDG ); params.Set_Animation ("H_A_A0A0_L21", false); Commands->Action_Play_Animation (obj, params); } else if (param == M01_CHOPPER_IS_SENDING_ID_JDG)//guy 1 is actually sending his id { guy01_id = Commands->Get_ID ( sender ); } } } }; DECLARE_SCRIPT(M01_TurnOff_TankReminder_Zone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * tankReminderZone = Commands->Find_Object ( 122848 ); if (tankReminderZone != NULL) { Commands->Destroy_Object ( tankReminderZone ); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_HON_Escorts_Warroom_MCT_ZoneController_JDG, "")//103378 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * mctCommander = Commands->Find_Object ( 103373 ); GameObject * mctProtector01 = Commands->Find_Object ( 103374 ); GameObject * mctProtector02 = Commands->Find_Object ( 103375 ); if (mctCommander != NULL) { Commands->Send_Custom_Event ( obj, mctCommander, 0, M01_START_ACTING_JDG, 0 ); if ((mctProtector01 != NULL) && (mctProtector02 != NULL)) { int protectMct_conv = Commands->Create_Conversation( "M01_Protect_The_MCT", 100, 1000, true); Commands->Join_Conversation( mctProtector02, protectMct_conv, false, false ); Commands->Join_Conversation( mctProtector01, protectMct_conv, false, false ); Commands->Start_Conversation( protectMct_conv, protectMct_conv ); } } Commands->Destroy_Object ( obj ); } } }; DECLARE_SCRIPT(M01_HON_Chinook_Spawned_Soldier_01_GDI_JDG, "") { bool player_in_warroom; bool at_final_destination; bool escorting; int dialogs_said; int dialogs_said_to_havoc; REGISTER_VARIABLES() { SAVE_VARIABLE(player_in_warroom, 1); SAVE_VARIABLE(at_final_destination, 2); SAVE_VARIABLE(escorting, 3); SAVE_VARIABLE(dialogs_said, 4); SAVE_VARIABLE(dialogs_said_to_havoc, 5); } void Created( GameObject * obj ) { dialogs_said = 0; dialogs_said_to_havoc = 0; player_in_warroom = false; at_final_destination = false; escorting = true; Commands->Enable_Hibernation( obj, false ); Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_ROPE_IS_SENDING_ID_JDG, 0 ); } GameObject * MCT_talkZone = Commands->Find_Object ( 124260 ); if (MCT_talkZone != NULL) { Commands->Send_Custom_Event( obj, MCT_talkZone, 0, M01_ROPE_IS_SENDING_ID_JDG, 0 ); } } //Vector3 myGotoLocation (-187.848f, 526.480f, 3.518f); void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_01_JDG, 0 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 5 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (escorting == true) { GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (obj && type == 0) { if (param == M01_WALKING_WAYPATH_01_JDG && player_in_warroom == false) { float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { Vector3 myGotoLocation (-187.848f, 526.480f, 3.518f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(myGotoLocation, RUN, 1); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_01_JDG, 5 ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } else if (param == M01_START_ACTING_JDG && at_final_destination == false) { player_in_warroom = true; float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { Vector3 myGotoLocation (-181.084f, 541.058f, 3.518f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(myGotoLocation, WALK, 1); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 5 ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } else if (param == M01_GOTO_INNATE_JDG)//escort scenario is over--go to top of HON and goto innate { escorting = false; Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Enable_Hibernation( obj, true ); Vector3 myGotoLocation (-181.163f, 534.529f, 10.034f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement(myGotoLocation, RUN, 5); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 5 ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG && escorting == true)//pick a sound to play { /*Vector3 myPosition = Commands->Get_Position ( obj ); Vector3 playerPosition = Commands->Get_Position ( STAR ); float distance = Commands->Get_Distance ( myPosition, playerPosition ); if (distance <= 8) { if (dialogs_said_to_havoc == 0) { Commands->Create_Sound ( "MX1DSGN_DSGN0024I1DSGN_SND", myPosition, obj );//follow us inside } else if (dialogs_said_to_havoc == 1) { Commands->Create_Sound ( "MX1DSGN_DSGN0027I1DSGN_SND", myPosition, obj );//this way sir } dialogs_said_to_havoc++; if (dialogs_said_to_havoc >= 2) { dialogs_said_to_havoc = 1; } } else { if (dialogs_said == 0) { Commands->Create_Sound ( "MX1DSGN_DSGN0025I1DSGN_SND", myPosition, obj );//lets do it } else if (dialogs_said == 1) { Commands->Create_Sound ( "MX1DSGN_DSGN0026I1DSGN_SND", myPosition, obj ); } else if (dialogs_said == 2) { Commands->Create_Sound ( "MX1DSGN_DSGN0028I1DSGN_SND", myPosition, obj ); } dialogs_said++; if (dialogs_said >= 3) { dialogs_said = 0; } } Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 5 );*/ } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_02_JDG) { float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { at_final_destination = true; Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * MCTspeechZone = Commands->Find_Object ( 124260 ); if (MCTspeechZone != NULL) { Commands->Send_Custom_Event( obj, MCTspeechZone, 0, M01_START_ACTING_JDG, 0 ); } } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_HON_Chinook_Spawned_Soldier_02_GDI_JDG, "") { bool player_in_warroom; bool at_final_destination; bool escorting; REGISTER_VARIABLES() { SAVE_VARIABLE(player_in_warroom, 1); SAVE_VARIABLE(at_final_destination, 2); SAVE_VARIABLE(escorting, 3); } void Created( GameObject * obj ) { player_in_warroom = false; at_final_destination = false; escorting = true; Commands->Enable_Hibernation( obj, false ); Commands->Innate_Soldier_Enable_Gunshot_Heard ( obj, false ); Commands->Innate_Soldier_Enable_Bullet_Heard ( obj, false ); GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_WAYPATH_IS_SENDING_ID_JDG, 0 ); } GameObject * MCT_talkZone = Commands->Find_Object ( 124260 ); if (MCT_talkZone != NULL) { Commands->Send_Custom_Event( obj, MCT_talkZone, 0, M01_WAYPATH_IS_SENDING_ID_JDG, 0 ); } } //Vector3 myGotoLocation (-188.670f, 530.083f, 3.518f); void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "s_a_human.h_a_troopdrop") == 0) { Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_01_JDG, 0 ); } } void Killed( GameObject * obj, GameObject * killer ) { if (escorting == true) { GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (obj && type == 0) { if (param == M01_WALKING_WAYPATH_01_JDG && player_in_warroom == false) { float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { Vector3 myGotoLocation (-188.670f, 530.083f, 3.518f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_01_JDG); params.Set_Movement(myGotoLocation, RUN, 1); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_01_JDG, 5 ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } else if (param == M01_START_ACTING_JDG && at_final_destination == false) { player_in_warroom = true; float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { Vector3 myGotoLocation (-179.440f, 535.697f, 3.518f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_02_JDG); params.Set_Movement(myGotoLocation, WALK, 0); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 5 ); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } else if (param == M01_GOTO_INNATE_JDG)//escort scenario is over--go to top of HON and goto innate { escorting = false; Commands->Set_Innate_Is_Stationary ( obj, false ); Commands->Enable_Hibernation( obj, true ); Vector3 myGotoLocation (-178.263f, 528.363f, 10.034f); ActionParamsStruct params; params.Set_Basic(this, 60, M01_WALKING_WAYPATH_03_JDG); params.Set_Movement(myGotoLocation, RUN, 5); Commands->Action_Goto(obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 5 ); } } } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_NORMAL) { if (action_id == M01_WALKING_WAYPATH_02_JDG) { float handOfNodHealth = Commands->Get_Health ( Commands->Find_Object ( M01_HAND_OF_NOD_JDG ) ); if (handOfNodHealth > 0) { at_final_destination = true; Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * MCTspeechZone = Commands->Find_Object ( 124260 ); if (MCTspeechZone != NULL) { Commands->Send_Custom_Event( obj, MCTspeechZone, 0, M01_START_ACTING_JDG, 0 ); } } else { Commands->Send_Custom_Event( obj, obj, 0, M01_GOTO_INNATE_JDG, 0 ); } } } } }; DECLARE_SCRIPT(M01_GiveMCTSpeech_Zone_JDG, "")//124260 { bool commandClearance; bool player_in_warroom; int gdiGuy01_id; int gdiGuy02_id; bool convPlaying; int hon_gdi_guy_conv1; REGISTER_VARIABLES() { SAVE_VARIABLE(commandClearance, 1); SAVE_VARIABLE(player_in_warroom, 2); SAVE_VARIABLE(gdiGuy01_id, 3); SAVE_VARIABLE(gdiGuy02_id, 4); SAVE_VARIABLE(convPlaying, 5); SAVE_VARIABLE(hon_gdi_guy_conv1, 6); } void Created( GameObject * obj ) { player_in_warroom = false; commandClearance = false; convPlaying = false; gdiGuy01_id = 0; gdiGuy02_id = 0; } void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason ) { if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == hon_gdi_guy_conv1) { GameObject * gdiGuy01 = Commands->Find_Object ( gdiGuy01_id ); GameObject * gdiGuy02 = Commands->Find_Object ( gdiGuy02_id ); if (gdiGuy01 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy01, 0, M01_GOTO_INNATE_JDG, 0 ); } if (gdiGuy02 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy02, 0, M01_GOTO_INNATE_JDG, 0 ); } Commands->Destroy_Object ( obj ); } } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (obj && type == 0) { if (param == M01_ROPE_IS_SENDING_ID_JDG)//gdi guy 01 is actually sending his id { gdiGuy01_id = Commands->Get_ID ( sender ); } else if (param == M01_WAYPATH_IS_SENDING_ID_JDG)//gdi guy 02 is actually sending his id { gdiGuy02_id = Commands->Get_ID ( sender ); } else if (param == M01_START_ACTING_JDG) { commandClearance = true; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { if (commandClearance == true && player_in_warroom == true) { GameObject * gdiGuy01 = Commands->Find_Object ( gdiGuy01_id ); GameObject * gdiGuy02 = Commands->Find_Object ( gdiGuy02_id ); if (gdiGuy01 != NULL && convPlaying == false) { convPlaying = true; hon_gdi_guy_conv1 = Commands->Create_Conversation( "M01_GDI_HON_MCT", 100, 1000, false); Commands->Join_Conversation( gdiGuy01, hon_gdi_guy_conv1, false, true, true ); Commands->Join_Conversation( STAR, hon_gdi_guy_conv1, false, false, false ); Commands->Start_Conversation( hon_gdi_guy_conv1, hon_gdi_guy_conv1 ); Commands->Monitor_Conversation( obj, hon_gdi_guy_conv1 ); } else if (gdiGuy02 != NULL && convPlaying == false) { convPlaying = true; hon_gdi_guy_conv1 = Commands->Create_Conversation( "M01_GDI_HON_MCT", 100, 1000, false); Commands->Join_Conversation( gdiGuy02, hon_gdi_guy_conv1, false, true, true ); Commands->Join_Conversation( STAR, hon_gdi_guy_conv1, false, false, false ); Commands->Start_Conversation( hon_gdi_guy_conv1, hon_gdi_guy_conv1 ); Commands->Monitor_Conversation( obj, hon_gdi_guy_conv1 ); } } } } } void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { player_in_warroom = true; Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } void Exited( GameObject * obj, GameObject * exiter ) { if (exiter == STAR) { player_in_warroom = false; } } }; DECLARE_SCRIPT(M01_Havoc_In_WarroomZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_PLAYER_IS_INSIDE_REFINERY_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_Havoc_Out_WarroomZone_JDG, "") { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { GameObject * HON_MonitorZone = Commands->Find_Object ( 124044 ); if (HON_MonitorZone != NULL) { Commands->Send_Custom_Event( obj, HON_MonitorZone, 0, M01_PLAYER_IS_OUTSIDE_REFINERY_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_HON_WarroomController_JDG, "")//124044 { int gdiGuy01_id; int gdiGuy02_id; bool player_in_warroom; bool scenario_over; int dead_soldier_tally; REGISTER_VARIABLES() { SAVE_VARIABLE(gdiGuy01_id, 1); SAVE_VARIABLE(gdiGuy02_id, 2); SAVE_VARIABLE(player_in_warroom, 3); SAVE_VARIABLE(scenario_over, 4); SAVE_VARIABLE(dead_soldier_tally, 5); } void Created( GameObject * obj ) { gdiGuy01_id = 0; gdiGuy02_id = 0; player_in_warroom = false; scenario_over = false; dead_soldier_tally = 0; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (obj && type == 0) { if (param == M01_ROPE_IS_SENDING_ID_JDG)//gdi guy 01 is actually sending his id { gdiGuy01_id = Commands->Get_ID ( sender ); } else if (param == M01_WAYPATH_IS_SENDING_ID_JDG)//gdi guy 02 is actually sending his id { gdiGuy02_id = Commands->Get_ID ( sender ); } else if (param == M01_PLAYER_IS_INSIDE_REFINERY_JDG)//player is actually in warroom { player_in_warroom = true; } else if (param == M01_PLAYER_IS_OUTSIDE_REFINERY_JDG)//player just left the warroom { player_in_warroom = false; } else if (param == M01_IVE_BEEN_KILLED_JDG) { dead_soldier_tally++; if (dead_soldier_tally == 2) { dead_soldier_tally = 0; GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-147.1f, 558.8f, 4.4f)); Commands->Set_Facing(chinook_obj1, -130.00f); Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X1I_GDI_HON_TroopDrop01a.txt"); } } } } void Entered( GameObject * obj, GameObject * enterer ) { GameObject * gdiGuy01 = Commands->Find_Object ( gdiGuy01_id ); GameObject * gdiGuy02 = Commands->Find_Object ( gdiGuy02_id ); if (enterer == gdiGuy01) { if (player_in_warroom == false) { Commands->Apply_Damage( gdiGuy01, 10000.0f, "STEEL"); } else if (gdiGuy01 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy01, 0, M01_START_ACTING_JDG, 0 ); } } else if (enterer == gdiGuy02) { if (player_in_warroom == false) { Commands->Apply_Damage( gdiGuy02, 10000.0f, "STEEL"); } else if (gdiGuy02 != NULL) { Commands->Send_Custom_Event( obj, gdiGuy02, 0, M01_START_ACTING_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_Medium_Tank01_JDG, "") { void Created( GameObject * obj ) { GameObject * hovercraftExplosionController = Commands->Find_Object ( 121839 ); if (hovercraftExplosionController != NULL) { Commands->Send_Custom_Event( obj, hovercraftExplosionController, 0, M01_MEDIUM_TANK_IS_HERE_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_CantBring_MediumTank_ThroughHereZone_JDG, "") { bool player_in_tank; int tank_id; REGISTER_VARIABLES() { SAVE_VARIABLE(player_in_tank, 1); SAVE_VARIABLE(tank_id, 2); } void Created( GameObject * obj ) { player_in_tank = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG ) { player_in_tank = true; } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG ) { player_in_tank = false; } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG )//medium tank is sending his id { tank_id = Commands->Get_ID ( sender ); } } } void Entered( GameObject * obj, GameObject * enterer ) { GameObject * tank = Commands->Find_Object ( tank_id ); if (enterer == tank) { if (player_in_tank == true)//M01_Must_Leave_Tank_Conversation { int hoofit_conv = Commands->Create_Conversation( "M01_Must_Leave_Tank_Conversation", 100, 100, true); Commands->Join_Conversation( NULL, hoofit_conv, true, true ); Commands->Start_Conversation( hoofit_conv, hoofit_conv ); Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_Medium_Tank_JDG, "") { bool firstTimeEntered; REGISTER_VARIABLES() { SAVE_VARIABLE(firstTimeEntered, 1); } void Created( GameObject * obj ) { Commands->Create_Sound ( "m00evag_dsgn0009i1evag_snd", Vector3 (0,0,0), obj); firstTimeEntered = true; int m01_medium_tank_ID = Commands->Get_ID ( obj ); GameObject * tunnelZone = Commands->Find_Object ( M01_TANK_TUNNEL_ZONE_ID ); if (tunnelZone != NULL) { Commands->Send_Custom_Event( obj, tunnelZone, M01_MEDIUM_TANK_IS_HERE_JDG, m01_medium_tank_ID, 0 ); } GameObject * honSamSite = Commands->Find_Object ( M01_HON_SAM_SITE_JDG ); if (honSamSite != NULL) { Commands->Send_Custom_Event( obj, honSamSite, M00_CUSTOM_SAM_SITE_IGNORE, m01_medium_tank_ID, 0 ); } GameObject * fodderHovercraftController = Commands->Find_Object ( 121630 ); if (fodderHovercraftController != NULL) { Commands->Destroy_Object ( fodderHovercraftController ); } GameObject * tankReminderZone = Commands->Find_Object ( 122848 ); if (tankReminderZone != NULL) { Commands->Send_Custom_Event( obj, tankReminderZone, 0, M01_START_ACTING_JDG, 0 ); } GameObject * tankBarrierZone = Commands->Find_Object ( 125661 ); if (tankBarrierZone != NULL) { Commands->Send_Custom_Event( obj, tankBarrierZone, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) // { if (type == CUSTOM_EVENT_VEHICLE_ENTERED ) { if (firstTimeEntered == true) { firstTimeEntered = false; Vector3 guy01Position (40.286f, 151.346f, 2.107f); Vector3 guy02Position (47.476f, 163.355f, 2.458f); Vector3 guy03Position (59.446f, 175.107f, -0.453f); GameObject * tunnelGuy01 = Commands->Create_Object ( "Nod_Minigunner_0", guy01Position ); GameObject * tunnelGuy02 = Commands->Create_Object ( "Nod_Minigunner_0", guy02Position ); GameObject * tunnelGuy03 = Commands->Create_Object ( "Nod_Minigunner_0", guy03Position ); Commands->Attach_Script(tunnelGuy01, "M01_Medium_Tank_Tunnel_Squish_Guy_JDG", ""); Commands->Attach_Script(tunnelGuy02, "M01_Medium_Tank_Tunnel_Squish_Guy_JDG", ""); Commands->Attach_Script(tunnelGuy03, "M01_Medium_Tank_Tunnel_Squish_Guy_JDG", ""); Commands->Action_Reset ( obj, 100 ); } GameObject * tankReminderZone = Commands->Find_Object ( 122848 ); if (tankReminderZone != NULL) { Commands->Send_Custom_Event( obj, tankReminderZone, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } GameObject * tankBarrierZone = Commands->Find_Object ( 125661 ); if (tankBarrierZone != NULL) { Commands->Send_Custom_Event( obj, tankBarrierZone, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (type == CUSTOM_EVENT_VEHICLE_EXITED ) { GameObject * tankReminderZone = Commands->Find_Object ( 122848 ); if (tankReminderZone != NULL) { Commands->Send_Custom_Event( obj, tankReminderZone, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 0 ); } GameObject * tankBarrierZone = Commands->Find_Object ( 125661 ); if (tankBarrierZone != NULL) { Commands->Send_Custom_Event( obj, tankBarrierZone, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 0 ); } } } }; DECLARE_SCRIPT(M01_TurretBeach_FodderHovercraft_Controller_JDG, "")//121630 M01_START_ACTING_JDG { int hovercraft_ID; bool hovercraftAlive; REGISTER_VARIABLES() { SAVE_VARIABLE(hovercraftAlive, 1); SAVE_VARIABLE(hovercraft_ID, 2); } void Created( GameObject * obj ) { hovercraftAlive = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG && hovercraftAlive == false)//turret objective has been added--start bringing in hovercraft { GameObject * oldHovercraft = Commands->Find_Object ( hovercraft_ID ); if (oldHovercraft == NULL) { hovercraftAlive = true; GameObject * hovercraft = Commands->Create_Object ( "Invisible_Object", Vector3 (0,0,0)); Commands->Attach_Script(hovercraft, "Test_Cinematic", "X1D_FodderHover_MTank.txt"); } else { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 5 ); } } else if (param == M01_IVE_BEEN_KILLED_JDG) { hovercraftAlive = false; Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 15 ); } else if (param == 0)//hovercraft is sending you its ID { hovercraft_ID = Commands->Get_ID ( sender ); hovercraftAlive = true; GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); if (turret01 != NULL) { Commands->Send_Custom_Event( obj, turret01, M01_FODDER_HOVERCRAFT_IS_HERE, hovercraft_ID, 1 ); } GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret02 != NULL) { Commands->Send_Custom_Event( obj, turret02, M01_FODDER_HOVERCRAFT_IS_HERE, hovercraft_ID, 1 ); } //Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 15 ); } } } }; DECLARE_SCRIPT(M01_Hovercraft_Explosion_Controller_JDG, "")//121839 { int tank_id; REGISTER_VARIABLES() { SAVE_VARIABLE(tank_id, 1); } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_MEDIUM_TANK_IS_HERE_JDG)//medium tank is sending its id { tank_id = Commands->Get_ID ( sender ); } else if (param == M01_IVE_BEEN_KILLED_JDG)//hovercraft has been destroyed--delete tank and play explosion { GameObject * mediumTank = Commands->Find_Object ( tank_id ); if (mediumTank != NULL) { //Commands->Destroy_Object ( mediumTank ); Commands->Apply_Damage( mediumTank, 100000, "Steel", NULL ); } } } } }; DECLARE_SCRIPT(M01_FodderHovercraft_Script_JDG, "") { void Created( GameObject * obj ) { GameObject * fodderHovercraftController = Commands->Find_Object ( 121630 ); if (fodderHovercraftController != NULL) { Commands->Send_Custom_Event( obj, fodderHovercraftController, 0, 0, 0 ); } //GameObject * hovercraftExplosionController = Commands->Find_Object ( 121839 ); //if (hovercraftExplosionController != NULL) //{ // Commands->Send_Custom_Event( obj, hovercraftExplosionController, 0, M01_CHOPPER_IS_SENDING_ID_JDG, 0 ); //} float delayTimer = Commands->Get_Random ( 5, 8 ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, delayTimer ); } void Damaged( GameObject * obj, GameObject * damager, float amount ) { //GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); //GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); //if ((damager == turret01) || (damager == turret02)) //{ // Commands->Apply_Damage( obj, 100000, "STEEL", NULL ); //} } void Killed( GameObject * obj, GameObject * killer ) { //Vector3 myPosition = Commands->Get_Position ( obj ); //Commands->Create_Explosion ( "Ground Explosions Twiddler", myPosition, NULL ); GameObject * fodderHovercraftController = Commands->Find_Object ( 121630 ); if (fodderHovercraftController != NULL) { Commands->Send_Custom_Event( obj, fodderHovercraftController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } //GameObject * fodderHovercraftController = Commands->Find_Object ( 121630 ); //if (fodderHovercraftController != NULL) //{ // Commands->Send_Custom_Event( obj, fodderHovercraftController, 0, M01_START_ACTING_JDG, 5 ); //} GameObject * hovercraftExplosionController = Commands->Find_Object ( 121839 ); if (hovercraftExplosionController != NULL) { Commands->Send_Custom_Event( obj, hovercraftExplosionController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_START_ACTING_JDG) { GameObject * turret01 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_01_ID ); GameObject * turret02 = Commands->Find_Object ( M01_TURRETBEACH_TURRET_02_ID ); if (turret01 != NULL) { Commands->Apply_Damage( obj, 100000, "STEEL", NULL ); } else if (turret02 != NULL) { Commands->Apply_Damage( obj, 100000, "STEEL", NULL ); } } } } }; DECLARE_SCRIPT(M01_Beach_Datadisc_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) //shows the GDI base { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } Commands->Clear_Map_Cell ( 10, 15 ); Commands->Clear_Map_Cell ( 10, 16 ); Commands->Clear_Map_Cell ( 10, 17 ); Commands->Clear_Map_Cell ( 10, 18 ); Commands->Clear_Map_Cell ( 10, 19 ); Commands->Clear_Map_Cell ( 10, 20 ); Commands->Clear_Map_Cell ( 11, 15 ); Commands->Clear_Map_Cell ( 11, 16 ); Commands->Clear_Map_Cell ( 11, 17 ); Commands->Clear_Map_Cell ( 11, 18 ); Commands->Clear_Map_Cell ( 11, 19 ); Commands->Clear_Map_Cell ( 11, 20 ); Commands->Clear_Map_Cell ( 12, 15 ); Commands->Clear_Map_Cell ( 12, 16 ); Commands->Clear_Map_Cell ( 12, 17 ); Commands->Clear_Map_Cell ( 12, 18 ); Commands->Clear_Map_Cell ( 12, 19 ); Commands->Clear_Map_Cell ( 12, 20 ); Commands->Clear_Map_Cell ( 13, 15 ); Commands->Clear_Map_Cell ( 13, 16 ); Commands->Clear_Map_Cell ( 13, 17 ); Commands->Clear_Map_Cell ( 13, 18 ); Commands->Clear_Map_Cell ( 13, 19 ); Commands->Clear_Map_Cell ( 13, 20 ); Commands->Clear_Map_Cell ( 14, 15 ); Commands->Clear_Map_Cell ( 14, 16 ); Commands->Clear_Map_Cell ( 14, 17 ); Commands->Clear_Map_Cell ( 14, 18 ); Commands->Clear_Map_Cell ( 14, 19 ); Commands->Clear_Map_Cell ( 14, 20 ); } } }; DECLARE_SCRIPT(M01_TibCave01_Datadisc_JDG, "")//shows the barn area { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } Commands->Clear_Map_Cell ( 6, 13 ); Commands->Clear_Map_Cell ( 6, 14 ); Commands->Clear_Map_Cell ( 7, 11 ); Commands->Clear_Map_Cell ( 7, 12 ); Commands->Clear_Map_Cell ( 7, 13 ); Commands->Clear_Map_Cell ( 7, 14 ); Commands->Clear_Map_Cell ( 7, 15 ); Commands->Clear_Map_Cell ( 8, 11 ); Commands->Clear_Map_Cell ( 8, 12 ); Commands->Clear_Map_Cell ( 8, 13 ); Commands->Clear_Map_Cell ( 8, 14 ); Commands->Clear_Map_Cell ( 8, 15 ); Commands->Clear_Map_Cell ( 9, 11 ); Commands->Clear_Map_Cell ( 9, 12 ); Commands->Clear_Map_Cell ( 9, 13 ); Commands->Clear_Map_Cell ( 9, 14 ); Commands->Clear_Map_Cell ( 9, 15 ); Commands->Clear_Map_Cell ( 10, 11 ); Commands->Clear_Map_Cell ( 10, 12 ); Commands->Clear_Map_Cell ( 10, 13 ); Commands->Clear_Map_Cell ( 10, 14 ); Commands->Clear_Map_Cell ( 10, 15 ); Commands->Clear_Map_Cell ( 11, 12 ); Commands->Clear_Map_Cell ( 11, 13 ); Commands->Clear_Map_Cell ( 11, 14 ); Commands->Clear_Map_Cell ( 11, 15 ); } } }; DECLARE_SCRIPT(M01_Shed_Datadisc_JDG, "")//shows the light tank area { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } Commands->Clear_Map_Cell ( 9, 9 ); Commands->Clear_Map_Cell ( 9, 10 ); Commands->Clear_Map_Cell ( 10, 9 ); Commands->Clear_Map_Cell ( 10, 10 ); Commands->Clear_Map_Cell ( 10, 11 ); Commands->Clear_Map_Cell ( 11, 9 ); Commands->Clear_Map_Cell ( 11, 10 ); Commands->Clear_Map_Cell ( 11, 11 ); Commands->Clear_Map_Cell ( 11, 12 ); Commands->Clear_Map_Cell ( 12, 9 ); Commands->Clear_Map_Cell ( 12, 10 ); Commands->Clear_Map_Cell ( 12, 11 ); Commands->Clear_Map_Cell ( 12, 12 ); Commands->Clear_Map_Cell ( 13, 9 ); Commands->Clear_Map_Cell ( 13, 10 ); Commands->Clear_Map_Cell ( 13, 11 ); Commands->Clear_Map_Cell ( 13, 12 ); Commands->Clear_Map_Cell ( 14, 10 ); Commands->Clear_Map_Cell ( 14, 11 ); Commands->Clear_Map_Cell ( 14, 12 ); } } }; DECLARE_SCRIPT(M01_TibCave02_Datadisc_JDG, "")//tib cave no { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) //shows the church and tib field { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } Commands->Clear_Map_Cell ( 6, 5 ); Commands->Clear_Map_Cell ( 6, 6 ); Commands->Clear_Map_Cell ( 6, 7 ); Commands->Clear_Map_Cell ( 6, 8 ); Commands->Clear_Map_Cell ( 6, 9 ); Commands->Clear_Map_Cell ( 7, 5 ); Commands->Clear_Map_Cell ( 7, 6 ); Commands->Clear_Map_Cell ( 7, 7 ); Commands->Clear_Map_Cell ( 7, 8 ); Commands->Clear_Map_Cell ( 7, 9 ); Commands->Clear_Map_Cell ( 8, 5 ); Commands->Clear_Map_Cell ( 8, 6 ); Commands->Clear_Map_Cell ( 8, 7 ); Commands->Clear_Map_Cell ( 8, 8 ); Commands->Clear_Map_Cell ( 8, 9 ); Commands->Clear_Map_Cell ( 9, 5 ); Commands->Clear_Map_Cell ( 9, 6 ); Commands->Clear_Map_Cell ( 9, 7 ); Commands->Clear_Map_Cell ( 9, 8 ); Commands->Clear_Map_Cell ( 9, 9 ); Commands->Clear_Map_Cell ( 10, 5 ); Commands->Clear_Map_Cell ( 10, 6 ); Commands->Clear_Map_Cell ( 10, 7 ); Commands->Clear_Map_Cell ( 10, 8 ); Commands->Clear_Map_Cell ( 10, 9 ); Commands->Clear_Map_Cell ( 11, 6 ); Commands->Clear_Map_Cell ( 11, 7 ); Commands->Clear_Map_Cell ( 11, 8 ); Commands->Clear_Map_Cell ( 11, 9 ); } } }; DECLARE_SCRIPT(M01_Priest_Datadisc_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) //shows the hand of nod { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } Commands->Clear_Map_Cell ( 5, 1 ); Commands->Clear_Map_Cell ( 5, 2 ); Commands->Clear_Map_Cell ( 5, 3 ); Commands->Clear_Map_Cell ( 5, 4 ); Commands->Clear_Map_Cell ( 5, 5 ); Commands->Clear_Map_Cell ( 6, 1 ); Commands->Clear_Map_Cell ( 6, 2 ); Commands->Clear_Map_Cell ( 6, 3 ); Commands->Clear_Map_Cell ( 6, 4 ); Commands->Clear_Map_Cell ( 6, 5 ); Commands->Clear_Map_Cell ( 7, 1 ); Commands->Clear_Map_Cell ( 7, 2 ); Commands->Clear_Map_Cell ( 7, 3 ); Commands->Clear_Map_Cell ( 7, 4 ); Commands->Clear_Map_Cell ( 7, 5 ); Commands->Clear_Map_Cell ( 8, 1 ); Commands->Clear_Map_Cell ( 8, 2 ); Commands->Clear_Map_Cell ( 8, 3 ); Commands->Clear_Map_Cell ( 8, 4 ); Commands->Clear_Map_Cell ( 8, 5 ); Commands->Clear_Map_Cell ( 9, 1 ); Commands->Clear_Map_Cell ( 9, 2 ); Commands->Clear_Map_Cell ( 9, 3 ); Commands->Clear_Map_Cell ( 9, 4 ); Commands->Clear_Map_Cell ( 9, 5 ); } } }; DECLARE_SCRIPT(M01_Medlab_Datadisc_JDG, "") { void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == CUSTOM_EVENT_POWERUP_GRANTED ) { Commands->Set_HUD_Help_Text (IDS_M00EVAG_DSGN0103I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY); Commands->Reveal_Map ( ); GameObject * dataDiskController = Commands->Find_Object ( 117188 ); if (dataDiskController != NULL) { Commands->Send_Custom_Event( obj, dataDiskController, 0, 10, 2 ); } } } }; DECLARE_SCRIPT(M01_DataDisc_TextController_JDG, "")//117188 { bool playingText; REGISTER_VARIABLES() { SAVE_VARIABLE(playingText, 1); } void Created( GameObject * obj ) { playingText = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if ( type == 0 ) { if (param == 10)//now show the text message for ESC key { playingText = true; int pressEnterConv = Commands->Create_Conversation( "M01_Press_ESC_for_Map_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressEnterConv, false, false ); Commands->Start_Conversation( pressEnterConv, pressEnterConv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0517I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Send_Custom_Event( obj, obj, 0, 11, 2 ); } else if (param == 11) { playingText = false; } } else if (type == 1) { if (param == 1 && playingText == false)//player has picked up a C4 -- start text routine { int pressF1Conv = Commands->Create_Conversation( "M01_C4_Tutorial_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressF1Conv, false, false ); Commands->Start_Conversation( pressF1Conv, pressF1Conv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0519I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Press '9' to select Remote C4.\n Commands->Send_Custom_Event( obj, obj, 1, 2, 2 ); playingText = true; } else if (param == 2) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0523I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Left-click your mouse to place C4.\n Commands->Send_Custom_Event( obj, obj, 1, 3, 2 ); } else if (param == 3) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0524I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Right-click your mouse to detonate.\n Commands->Send_Custom_Event( obj, obj, 1, 4, 2 ); } else if (param == 4) { playingText = false; } } else if (type == 2)//player has picked up sniper rifle { if (param == 1 && playingText == false)//player has picked up a C4 -- start text routine { int pressF1Conv = Commands->Create_Conversation( "M01_Sniper_Tutorial_Conversation", 100, 1000, true); Commands->Join_Conversation( NULL, pressF1Conv, false, false ); Commands->Start_Conversation( pressF1Conv, pressF1Conv ); Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0518I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Press '3' to select your Sniper Rifle.\n Commands->Send_Custom_Event( obj, obj, 2, 2, 2 ); playingText = true; } else if (param == 2) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0521I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Right-click your mouse for sniper mode.\n Commands->Send_Custom_Event( obj, obj, 2, 3, 2 ); } else if (param == 3) { Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0522I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );//Use the mouse wheel or 'G' and 'T' to zoom.\n Commands->Send_Custom_Event( obj, obj, 2, 4, 2 ); } else if (param == 4) { playingText = false; } } } }; DECLARE_SCRIPT(M01_Duncan_Assailer_JDG, "") { void Killed( GameObject * obj, GameObject * killer ) { GameObject * convController = Commands->Find_Object ( 125857 ); if (convController != NULL) { Commands->Send_Custom_Event( obj, convController, 0, M01_IVE_BEEN_KILLED_JDG, 0 ); } } }; DECLARE_SCRIPT(M01_Duncan_InHere_ConvController_JDG, "") { int deadNodGuys; bool duncanDiscovered; REGISTER_VARIABLES() { SAVE_VARIABLE(deadNodGuys, 1); SAVE_VARIABLE(duncanDiscovered, 2); } void Created( GameObject * obj ) { deadNodGuys = 0; duncanDiscovered = false; } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { if (type == 0) { if (param == M01_IVE_BEEN_KILLED_JDG) { deadNodGuys++; if (deadNodGuys >= 4) { Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 2 ); } } else if (param == M01_START_ACTING_JDG && duncanDiscovered == false)//start playing "in here" conversation { GameObject * captDuncan = Commands->Find_Object ( 106050 ); if (captDuncan) { int inhere_conv = Commands->Create_Conversation( "M01_DuncanInHere_Conversation", 100, 20, false); Commands->Join_Conversation( captDuncan, inhere_conv, false, true, true ); Commands->Join_Conversation( STAR, inhere_conv, false, false, false ); Commands->Start_Conversation( inhere_conv, inhere_conv ); Commands->Send_Custom_Event( obj, obj, 0, M01_START_ACTING_JDG, 10 ); } } else if (param == M01_MODIFY_YOUR_ACTION_JDG) { duncanDiscovered = true; } } } }; DECLARE_SCRIPT(M01_BackPath_EntranceZone_JDG, "")//121433 { void Entered( GameObject * obj, GameObject * enterer ) { if (enterer == STAR) { 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) { GameObject * gdiMinigunner = Commands->Find_Object ( 116382 ); if (gdiMinigunner != NULL) { Commands->Send_Custom_Event( obj, gdiMinigunner, 0, M01_MODIFY_YOUR_ACTION_06_JDG, 0 ); //this tells him to start the "this is the path" routine Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 2 ); } } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG) { GameObject * grenadier = Commands->Find_Object ( 116383 ); if (grenadier != NULL) { Commands->Send_Custom_Event( obj, grenadier, 0, M01_MODIFY_YOUR_ACTION_06_JDG, 0 );//tell grenadier to go down back path too } Commands->Destroy_Object ( obj ); } } } }; DECLARE_SCRIPT(M01_Base_GDI_Minigunner_JDG, "")//116382 { int gdi01conv01; int gdi01conv02; int gdi01conv03; float currentHealth; bool invincible; bool ducanRescued; bool headingDownBackPath; bool still_in_GDI_Base; bool damagedByNod; bool havocDownPath; REGISTER_VARIABLES() { SAVE_VARIABLE(gdi01conv01, 1); SAVE_VARIABLE(gdi01conv02, 2); SAVE_VARIABLE(currentHealth, 3); SAVE_VARIABLE(invincible, 4); SAVE_VARIABLE(gdi01conv03, 5); SAVE_VARIABLE(ducanRescued, 6); SAVE_VARIABLE(headingDownBackPath, 7); SAVE_VARIABLE(still_in_GDI_Base, 8); SAVE_VARIABLE(damagedByNod, 9); SAVE_VARIABLE(havocDownPath, 10); } void Created( GameObject * obj ) //this guy starts in the guard tower firing over at the conyard { havocDownPath = false; damagedByNod = false; invincible = true; ducanRescued = false; still_in_GDI_Base = true; headingDownBackPath = false; currentHealth = Commands->Get_Health ( obj ); GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(0,0,0)); Commands->Attach_Script(controller1, "Test_Cinematic", "X1C_Intro.txt"); Vector3 myTarget (72.223f, -24.751f, -0.296f); ActionParamsStruct params; Commands->Set_Innate_Is_Stationary ( obj, true ); 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_MODIFY_YOUR_ACTION_JDG, 2 );//in 2 seconds run to a new position } void Animation_Complete(GameObject * obj, const char *anim) { if (stricmp(anim, "S_A_Human.XG_EV5_troop") == 0) { Commands->Destroy_Object ( obj ); } } void Damaged( GameObject * obj, GameObject * damager, float amount ) { GameObject * grenadier = Commands->Find_Object ( 116383 ); GameObject * nodGuy01 = Commands->Find_Object ( 116388 ); GameObject * nodGuy02 = Commands->Find_Object ( 116387 ); if (damager == nodGuy01 || damager == nodGuy02) { if (damagedByNod == false) { damagedByNod = true; Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_04_JDG, 0 ); } } if (invincible == true) { float myCurrentHealth = Commands->Get_Health ( obj ); if (myCurrentHealth <= 10) { Commands->Set_Health ( obj, 10 ); } } else if (obj && damager == grenadier) { Commands->Set_Health ( obj, currentHealth ); } else if (obj) { currentHealth = Commands->Get_Health ( obj ); } } void Custom( GameObject * obj, int type, int param, GameObject * sender ) { ActionParamsStruct params; if (type == 0) { if (param == M01_MODIFY_YOUR_ACTION_JDG)//leave the guard tower and take up second position outside guard tower { Vector3 newPosition (66.771f, -38.435f, -0.058f); Vector3 myTarget (72.223f, -24.751f, -0.296f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_01_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.Set_Movement(newPosition, RUN, 1); Commands->Action_Goto ( obj, params ); GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(-74.184f, -28.372f, 3.157f)); Commands->Set_Facing ( controller1, 90 ); Commands->Attach_Script(controller1, "Test_Cinematic", "X01D_C130Troopdrop.txt"); } else if (param == M01_MODIFY_YOUR_ACTION_02_JDG)//leave outside guard tower and take up third position beside the ladder { Vector3 newPosition (40.893f, -39.773f, -0.179f); Vector3 myTarget (28.449f, -23.325f, 3.032f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_02_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.Set_Movement(newPosition, RUN + 0.25f, 1); Commands->Action_Goto ( obj, params ); } else if (param == M01_START_ATTACKING_01_JDG)//player is at top of ladders...check if nod minigunner is still alive { GameObject *controller1 = Commands->Create_Object("Invisible_Object", Vector3(34.165f,41.909f,-10)); Commands->Attach_Script(controller1, "Test_Cinematic", "XG_Ap_vs_Trn.txt"); GameObject * nodMinigunner = Commands->Find_Object ( 116384 ); if (nodMinigunner != NULL) { Vector3 newPosition (40.893f, -39.773f, -0.179f); params.Set_Basic( this, 100, M01_START_ATTACKING_01_JDG ); params.Set_Movement(newPosition, RUN + 0.25f, 1); params.Set_Attack( nodMinigunner, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else { Commands->Action_Reset ( obj, 100 ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 );//look at havoc } } else if (param == M01_MODIFY_YOUR_ACTION_03_JDG)//greet havoc M01_GDI01_Conversation_01 { Vector3 playersPosition = Commands->Get_Position ( STAR ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Face_Location( playersPosition, 2 ); Commands->Action_Face_Location ( obj, params ); gdi01conv01 = Commands->Create_Conversation( "M01_GDI01_Conversation_01", 100, 1000, false); Commands->Join_Conversation( obj, gdi01conv01, true, true, true ); Commands->Join_Conversation( STAR, gdi01conv01, false, false, false ); Commands->Start_Conversation( gdi01conv01, gdi01conv01 ); Commands->Monitor_Conversation( obj, gdi01conv01 ); GameObject * grenadier = Commands->Find_Object ( 116383 ); if (grenadier != NULL) { Commands->Send_Custom_Event( obj, grenadier, 0, M01_START_ACTING_JDG, 0 );//tell grenadier to greet havoc } } else if (param == M01_MODIFY_YOUR_ACTION_04_JDG)//now add the pow objective { GameObject * pogController = Commands->Find_Object ( M01_MISSION_POG_CONTROLLER_JDG ); if (pogController != NULL) { Commands->Send_Custom_Event ( obj, pogController, M01_ADD_OBJECTIVE_POG_JDG, M01_GDI_BASE_POW_OBJECTIVE_JDG, 0 ); } } else if (param == M01_GOTO_YOUR_EVAC_SPOT_JDG) { Commands->Enable_Hibernation( obj, false ); ducanRescued = true; headingDownBackPath = false; Commands->Action_Reset ( obj, 100 ); Vector3 myHomeSpot (56.0f, 28.2f, -0.2f); Commands->Set_Innate_Soldier_Home_Location ( obj, myHomeSpot, 10 ); params.Set_Basic( this, 100, M01_GOTO_YOUR_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } else if (param == M01_GOING_TO_EVAC_SPOT_JDG)//your ride is here--go get in { Commands->Action_Reset ( obj, 100 ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL) { Commands->Set_Innate_Is_Stationary ( obj, false ); Vector3 myHomeSpot = Commands->Get_Position ( myEvacController ); params.Set_Basic( this, 100, M01_GOING_TO_EVAC_SPOT_JDG ); params.Set_Movement(myHomeSpot, RUN, 1); Commands->Action_Goto(obj, params); } } else if (param == M01_MODIFY_YOUR_ACTION_05_JDG && headingDownBackPath == false)//POW conversation is over---wave at havoc { if (havocDownPath == false) { Vector3 playersPosition = Commands->Get_Position ( STAR ); ActionParamsStruct params; params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Face_Location( playersPosition, 2 ); Commands->Action_Face_Location ( obj, params ); gdi01conv03 = Commands->Create_Conversation( "M01_GDI01_Conversation_05", 100, 1000, false); Commands->Join_Conversation( obj, gdi01conv03, true, true, true ); Commands->Join_Conversation( STAR, gdi01conv03, false, false, false ); Commands->Start_Conversation( gdi01conv03, gdi01conv03 ); Commands->Monitor_Conversation( obj, gdi01conv03 );//M01_MODIFY_YOUR_ACTION_06_JDG } else { still_in_GDI_Base = false; Commands->Action_Reset ( obj, 100 ); headingDownBackPath = true; Vector3 newGotoSpot (95.229f, 101.136f, 8.934f); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(newGotoSpot, RUN, 1); params.AttackActive = false; Commands->Action_Attack (obj, params); } } else if (param == M01_MODIFY_YOUR_ACTION_06_JDG && ducanRescued == false)//Head down the path { havocDownPath = true; //Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_06_JDG, 0.25f ); } else if (param == M01_IVE_BEEN_KILLED_JDG) { if (still_in_GDI_Base == true) { invincible = false; Commands->Apply_Damage( obj, 100000, "Steel", NULL ); } } else if (param == M01_WALKING_WAYPATH_04_JDG) { GameObject * nodguy01 = Commands->Find_Object ( 116388 ); if (nodguy01 != NULL) { Vector3 myNewSpot (58.784f, 55.223f, -0.551f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement(myNewSpot, RUN, 1); params.Set_Attack( nodguy01, 50, 2, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else { Vector3 myNewSpot (58.784f, 55.223f, -0.551f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_04_JDG ); params.Set_Movement(myNewSpot, RUN, 1); //params.Set_Attack( nodguy01, 50, 2, true ); params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } } } } void Enemy_Seen( GameObject * obj, GameObject * enemy ) { if (headingDownBackPath == true) { ActionParamsStruct params; params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(enemy, WALK, 5); params.Set_Attack( enemy, 1000, 0, true ); params.AttackActive = true; Commands->Modify_Action ( obj, M01_WALKING_WAYPATH_06_JDG, params, true, true ); } } 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) { Vector3 myTarget (72.223f, -24.751f, -0.296f); Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_02_JDG, 2 ); } else if (action_id == M01_WALKING_WAYPATH_02_JDG) { Vector3 myTarget (28.449f, -23.325f, 3.032f); Commands->Set_Innate_Is_Stationary ( obj, true ); params.Set_Basic( this, 100, M01_START_ACTING_JDG ); params.Set_Attack( myTarget, 1000, 0, true ); params.AttackCrouched = true; params.AttackCheckBlocked = false; Commands->Action_Attack (obj, params); } else if (action_id == M01_START_ATTACKING_01_JDG) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 ); } else if (action_id == M01_GOTO_YOUR_EVAC_SPOT_JDG) { Commands->Set_Innate_Is_Stationary ( obj, true ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to call in a chopper { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_MODIFY_YOUR_ACTION_JDG, 0 ); } } else if (action_id == M01_GOING_TO_EVAC_SPOT_JDG)//start load animation here { 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); Commands->Create_Object ( powerups[random], powerupSpawnLocation ); GameObject * myEvacController = Commands->Find_Object ( 106694 ); if (myEvacController != NULL)//tell controller to spawn a rope { Commands->Send_Custom_Event( obj, myEvacController, 0, M01_GIVE_ME_A_ROPE_JDG, 0 ); } } else if (action_id == M01_WALKING_WAYPATH_03_JDG)//you are by pows now...run to path entrance and attack nod guy 01 if still alive { Commands->Send_Custom_Event( obj, obj, 0, M01_WALKING_WAYPATH_04_JDG, 0 ); } else if (action_id == M01_WALKING_WAYPATH_04_JDG)//Youre target is dead....make sure you goto path entrance. { Vector3 myNewSpot (58.784f, 55.223f, -0.551f); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_05_JDG ); params.Set_Movement(myNewSpot, RUN, 1); Commands->Action_Goto (obj, params); } else if (action_id == M01_WALKING_WAYPATH_05_JDG)//Youre at the back path entrance now....goto stationary { Commands->Set_Innate_Is_Stationary ( obj, true ); } else if (action_id == M01_WALKING_WAYPATH_06_JDG)//you just killed a back path guy...continue your journey { Vector3 newGotoSpot (95.229f, 101.136f, 8.934f); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_06_JDG ); params.Set_Movement(newGotoSpot, RUN, 1); params.AttackActive = false; Commands->Action_Attack (obj, params); } } else if (complete_reason == ACTION_COMPLETE_CONVERSATION_ENDED) { if (action_id == gdi01conv01) { gdi01conv02 = Commands->Create_Conversation( "M01_GDI01_Conversation_02", 100, 1000, false); Commands->Join_Conversation( obj, gdi01conv02, true, true, true ); Commands->Join_Conversation( STAR, gdi01conv02, false, false, false ); Commands->Start_Conversation( gdi01conv02, gdi01conv02 ); Commands->Monitor_Conversation( obj, gdi01conv02 ); } else if (action_id == gdi01conv02) { //invincible = false; Commands->Set_HUD_Help_Text ( IDS_M01DSGN_DSGN0506I1GCP1_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY ); Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_04_JDG, 2 ); Vector3 newPosition (31.697f, 16.155f, 2.200f); Commands->Set_Innate_Is_Stationary ( obj, false ); params.Set_Basic( this, 100, M01_WALKING_WAYPATH_03_JDG ); params.Set_Movement(newPosition, RUN, 1); Commands->Action_Goto ( obj, params ); GameObject * grenadier = Commands->Find_Object ( 116383 ); if (grenadier != NULL) { Commands->Send_Custom_Event( obj, grenadier, 0, M01_MODIFY_YOUR_ACTION_03_JDG, 0 );//tell grenadier to greet havoc } } else if (action_id == gdi01conv03) { Commands->Send_Custom_Event( obj, obj, 0, M01_MODIFY_YOUR_ACTION_05_JDG, 5 ); } } } };