7144 lines
184 KiB
C++
7144 lines
184 KiB
C++
|
/*
|
||
|
** 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 <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
/******************************************************************************
|
||
|
*
|
||
|
* FILE
|
||
|
* Mission3.cpp
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
* Mission 3 script
|
||
|
*
|
||
|
* PROGRAMMER
|
||
|
* Design Team
|
||
|
*
|
||
|
* VERSION INFO
|
||
|
* $Author: Dan_e $
|
||
|
* $Revision: 72 $
|
||
|
* $Modtime: 2/11/02 10:38a $
|
||
|
* $Archive: /Commando/Code/Scripts/Mission03.cpp $
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include "scripts.h"
|
||
|
#include "toolkit.h"
|
||
|
#include <string.h>
|
||
|
#include <stdio.h>
|
||
|
#include "Mission3.h"
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Objective_Controller, "") //1100004
|
||
|
{
|
||
|
enum {WEATHER_TIMER};
|
||
|
|
||
|
int sam_count_1, sam_count_2;
|
||
|
bool gunboat_triggered, rain;
|
||
|
bool gunboat1, gunboat2, gunboat3;
|
||
|
|
||
|
int background_song;
|
||
|
int battle_song;
|
||
|
int sender1;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(sam_count_1, 1);
|
||
|
SAVE_VARIABLE(sam_count_2, 2);
|
||
|
SAVE_VARIABLE(gunboat_triggered, 3);
|
||
|
SAVE_VARIABLE(rain, 4);
|
||
|
SAVE_VARIABLE(sender1, 5);
|
||
|
SAVE_VARIABLE(gunboat1, 6);
|
||
|
SAVE_VARIABLE(gunboat2, 7);
|
||
|
SAVE_VARIABLE(gunboat3, 8);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Num_Tertiary_Objectives ( 4 );
|
||
|
|
||
|
Commands->Set_Wind(90.0f, 5.0f, 2.0f, 0.0f);
|
||
|
Commands->Start_Timer(obj, this, Commands->Get_Random(20.0f, 40.0f), WEATHER_TIMER);
|
||
|
|
||
|
sam_count_1 = sam_count_2 = 0;
|
||
|
gunboat_triggered = gunboat1 = gunboat2 = gunboat3 = false;
|
||
|
rain = true;
|
||
|
// Commands->Add_Objective(1006, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, 1008, IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
// Commands->Add_Objective(1007, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_HIDDEN, 1009);
|
||
|
// Commands->Add_Objective(1008, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_HIDDEN, 1010);
|
||
|
// Commands->Add_Objective(1009, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, 1011,IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
// Commands->Add_Objective(1010, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_HIDDEN, 1019);
|
||
|
// Commands->Add_Objective(1011, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, 1020, IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
// Commands->Add_Objective(1012, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_HIDDEN, 1021, IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
|
||
|
//Commands->Create_Sound ( "03_AmmoClip", Vector3(0,0,0), obj );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
GameObject *object;
|
||
|
|
||
|
if (reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
if (action_id == 1)
|
||
|
{
|
||
|
Commands->Add_Objective(1002, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M03_02, NULL, IDS_Enc_Obj_Secondary_M03_02);
|
||
|
object = Commands->Find_Object(300056);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1002, object);
|
||
|
Commands->Set_Objective_HUD_Info( 1002, 94, "POG_M03_2_02.tga", IDS_POG_DESTROY/*, Commands->Get_Position (object)*/);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (action_id == 2)
|
||
|
{
|
||
|
Commands->Add_Objective(1004, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M03_03, NULL, IDS_Enc_Obj_Secondary_M03_03);
|
||
|
object = Commands->Find_Object(1205777);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1004, Commands->Find_Object (1205777));
|
||
|
Commands->Set_Objective_HUD_Info( 1004, 97, "POG_M03_2_02.tga", IDS_POG_DESTROY/*, Commands->Get_Position (object)*/);
|
||
|
Commands->Send_Custom_Event( obj, obj, REMOVE_SECONDARY_POG, 1004, SECONDARY_POG_DELAY );
|
||
|
}
|
||
|
|
||
|
//int id = Commands->Create_Conversation("M03CON064", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100064);
|
||
|
//Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100020)
|
||
|
{
|
||
|
//int id = Commands->Create_Conversation("M03CON066", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100066);
|
||
|
//Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Set_Objective_Status(1002, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100028)
|
||
|
{
|
||
|
//int id = Commands->Create_Conversation("M03CON066", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100066);
|
||
|
//Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100033 || action_id == 100035 || action_id == 100037)
|
||
|
{
|
||
|
//int id = Commands->Create_Conversation("M03CON067", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100067);
|
||
|
//Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == GUNBOAT_KILLED)
|
||
|
{
|
||
|
if (!gunboat1)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), 301, 2);
|
||
|
}
|
||
|
|
||
|
if (!gunboat2)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), 302, 2);
|
||
|
}
|
||
|
|
||
|
if (!gunboat3)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), 304, 2);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if ((type == 302 || type == 304) && Commands->Find_Object(1100003) == NULL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (type == 301)
|
||
|
{
|
||
|
sender1 = Commands->Get_ID ( sender );
|
||
|
}
|
||
|
|
||
|
if (type >= 300 && type <= 312)
|
||
|
{
|
||
|
switch(param)
|
||
|
{
|
||
|
case 1: Complete_Mission_Objective(type + 700);
|
||
|
break;
|
||
|
case 2: Fail_Mission_Objective(type + 700);
|
||
|
break;
|
||
|
case 3: Add_Mission_Objective(type + 700);
|
||
|
break;
|
||
|
case 4: Unhide_Mission_Objective(type + 700);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == 5000 && param == 5000)
|
||
|
{
|
||
|
gunboat_triggered = true;
|
||
|
}
|
||
|
|
||
|
if (type == SAKURA_DOGFIGHT)
|
||
|
{
|
||
|
//Commands->Stop_Sound ( background_song, true );
|
||
|
//Commands->Create_Sound ( "Sakura_Dogfight", Vector3(0,0,0), obj );
|
||
|
Commands->Set_Background_Music ( "Sakura_Dogfight.mp3" );
|
||
|
}
|
||
|
|
||
|
if (type == DOGFIGHT_ENDED)
|
||
|
{
|
||
|
//Commands->Stop_Sound ( battle_song, true );
|
||
|
Commands->Set_Background_Music ( "03-ammoclip.mp3" );
|
||
|
}
|
||
|
|
||
|
/*if (type == REMOVE_SECONDARY_POG)
|
||
|
{
|
||
|
Remove_Pog(param);
|
||
|
}*/
|
||
|
|
||
|
if (type == 100063)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Commands->Find_Object (1100004), Commands->Find_Object (1100012), 999, 0, 0);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Remove_Pog(int id)
|
||
|
{
|
||
|
switch (id)
|
||
|
{
|
||
|
// Locate Nod Communications Center
|
||
|
case 1000:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_1_01.tga", IDS_POG_RESCUE);
|
||
|
}
|
||
|
break;
|
||
|
// Help GDI forces secure beachhead
|
||
|
case 1001:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_2_01.tga", IDS_POG_RESCUE);
|
||
|
}
|
||
|
break;
|
||
|
// Destroy village SAM sites
|
||
|
case 1002:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_2_02.tga", IDS_POG_RESCUE);
|
||
|
}
|
||
|
break;
|
||
|
// Destroy SAMs near shore defense cannon
|
||
|
case 1004:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_2_02.tga", IDS_POG_RENDEZVOUS);
|
||
|
}
|
||
|
break;
|
||
|
// Acquire security card from Nod officer
|
||
|
case 1007:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_1_02.tga", IDS_POG_RENDEZVOUS);
|
||
|
}
|
||
|
break;
|
||
|
// Access Communications center Mainframe
|
||
|
case 1008:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info(id, -1, "POG_M03_1_03.tga", IDS_POG_ASSIST);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
/*if (timer_id == WEATHER_TIMER)
|
||
|
{
|
||
|
if (!rain)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (Commands->Get_Random(0, 1) < 0.5f)
|
||
|
{
|
||
|
Commands->Set_Rain(Commands->Get_Random(1.0f, 2.0f), 0.0f, false);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Rain(0.0f, 0.0f, false);
|
||
|
}
|
||
|
Commands->Start_Timer(obj, this, Commands->Get_Random(20.0f, 40.0f), WEATHER_TIMER);
|
||
|
}*/
|
||
|
|
||
|
if (timer_id == 1002)
|
||
|
{
|
||
|
Sam_Sites_1_Dialogue();
|
||
|
}
|
||
|
|
||
|
if (timer_id == 1004)
|
||
|
{
|
||
|
//Commands->Create_Object("Level_3_Objective_Powerup_Temp", Vector3(48.3f, 79.2f, 21.0f));
|
||
|
|
||
|
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(47.70f, 78.07f, 20.26f));
|
||
|
Commands->Set_Facing(chinook_obj, 0.0f);
|
||
|
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "X3I_GDI_Drop_PowerUp.txt");
|
||
|
|
||
|
Commands->Set_Objective_Status(1004, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
Sam_Sites_2_Complete_Dialog();
|
||
|
}
|
||
|
|
||
|
if (timer_id == 2004)
|
||
|
{
|
||
|
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(47.70f, 78.07f, 20.26f));
|
||
|
Commands->Set_Facing(chinook_obj, 0.0f);
|
||
|
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "X3I_GDI_Drop_PowerUp.txt");
|
||
|
}
|
||
|
|
||
|
if (timer_id == 1007)
|
||
|
{
|
||
|
Commands->Set_Objective_Status(1007, OBJECTIVE_STATUS_PENDING);
|
||
|
}
|
||
|
|
||
|
if (timer_id == 911)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON024", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100024);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (timer_id == 912)
|
||
|
{
|
||
|
if (Commands->Find_Object (1100003))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON032", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100032);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Add_Mission_Objective(int id)
|
||
|
{
|
||
|
GameObject *object;
|
||
|
GameObject *controller = Commands->Find_Object (1100004);
|
||
|
|
||
|
switch (id)
|
||
|
{
|
||
|
case 1000:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M03_01, NULL, IDS_Enc_Obj_Primary_M03_01);
|
||
|
object = Commands->Find_Object(1100009);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(id, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1000, 96, "POG_M03_1_01.tga", IDS_POG_LOCATE, Commands->Get_Position (object));
|
||
|
}
|
||
|
|
||
|
Commands->Send_Custom_Event( controller, controller, 100063, 0, 0.0f );
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("M03CON063", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100063);
|
||
|
Commands->Monitor_Conversation(controller, id);*/
|
||
|
}
|
||
|
break;
|
||
|
case 1001:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M03_01, NULL, IDS_Enc_Obj_Secondary_M03_01);
|
||
|
object = Commands->Find_Object(1212283);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Debug_Message ("object found");
|
||
|
Commands->Set_Objective_Radar_Blip_Object(id, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1001, 99, "POG_M03_2_01.tga", IDS_POG_DEFEAT, Commands->Get_Position (object));
|
||
|
Commands->Send_Custom_Event( controller, controller, REMOVE_SECONDARY_POG, id, SECONDARY_POG_DELAY );
|
||
|
}
|
||
|
|
||
|
//int id = Commands->Create_Conversation("M03CON064", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100064);
|
||
|
//Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
break;
|
||
|
case 1002:
|
||
|
{
|
||
|
Commands->Add_Objective(1002, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M03_02, NULL, IDS_Enc_Obj_Secondary_M03_02);
|
||
|
object = Commands->Find_Object(300056);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1002, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1002, 98, "POG_M03_2_02.tga", IDS_POG_DESTROY, Commands->Get_Position (object));
|
||
|
Commands->Send_Custom_Event( controller, controller, REMOVE_SECONDARY_POG, id, SECONDARY_POG_DELAY );
|
||
|
}
|
||
|
|
||
|
//int id = Commands->Create_Conversation("M03CON064", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100064);
|
||
|
//Commands->Monitor_Conversation(controller, id);
|
||
|
|
||
|
Commands->Start_Timer(controller, this, 15.0f, 911);
|
||
|
}
|
||
|
break;
|
||
|
case 1004: Sam_Sites_2_Dialogue();
|
||
|
break;
|
||
|
case 1006:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_01, NULL, IDS_Enc_Obj_Hidden_M03_01);
|
||
|
Commands->Start_Timer(controller, this, 4.0f, 912);
|
||
|
}
|
||
|
break;
|
||
|
case 1007:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M03_02, NULL, IDS_Enc_Obj_Primary_M03_02);
|
||
|
object = Commands->Find_Object(1215546);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1007, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1007, 95, "POG_M03_1_02.tga", IDS_POG_LOCATE, Commands->Get_Position (object));
|
||
|
}
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("M03CON063", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100063);
|
||
|
Commands->Monitor_Conversation(controller, id);*/
|
||
|
}
|
||
|
break;
|
||
|
case 1008:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M03_03, NULL, IDS_Enc_Obj_Primary_M03_03);
|
||
|
object = Commands->Find_Object(1100009);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1008, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1008, 94, "POG_M03_1_03.tga", IDS_POG_ACCESS, Commands->Get_Position (object));
|
||
|
}
|
||
|
|
||
|
//int id = Commands->Create_Conversation("M03CON063", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100063);
|
||
|
//Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
break;
|
||
|
case 1009: Commands->Add_Objective(id, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
break;
|
||
|
case 1010:
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M03_04, NULL, IDS_Enc_Obj_Primary_M03_04);
|
||
|
object = Commands->Find_Object(1213908);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(1010, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position( 1010, 93, "POG_M03_1_04.tga", IDS_POG_ESCAPE, Commands->Get_Position (object));
|
||
|
}
|
||
|
|
||
|
//int id = Commands->Create_Conversation("M03CON063", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100063);
|
||
|
//Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
break;
|
||
|
case 1011: Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_03, NULL, IDS_Enc_Obj_Hidden_M03_03);
|
||
|
break;
|
||
|
case 1012: Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_04, NULL, IDS_Enc_Obj_Hidden_M03_04);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sam_Sites_1_Dialogue(void)
|
||
|
{
|
||
|
/*GameObject * star = Commands->Get_A_Star(Commands->Get_Position(Owner()));
|
||
|
int id = Commands->Create_Conversation("SAM_Objective_1", 0, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(star, id);
|
||
|
Commands->Start_Conversation(id, 1);
|
||
|
Commands->Monitor_Conversation(Owner(), id);*/
|
||
|
}
|
||
|
|
||
|
void Sam_Sites_2_Dialogue(void)
|
||
|
{
|
||
|
if (Commands->Find_Object (1100003) && Commands->Find_Object (1100002))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON026", 0, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 2);
|
||
|
Commands->Monitor_Conversation(Owner(), id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sam_Sites_1_Complete_Dialog(void)
|
||
|
{
|
||
|
/*GameObject * star = Commands->Get_A_Star(Commands->Get_Position(Owner()));
|
||
|
int id = Commands->Create_Conversation("SAM_Objective_1_Complete", 0, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(star, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
|
||
|
void Sam_Sites_2_Complete_Dialog(void)
|
||
|
{
|
||
|
/*GameObject * star = Commands->Get_A_Star(Commands->Get_Position(Owner()));
|
||
|
int id = Commands->Create_Conversation("SAM_Objective_2_Complete", 0, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(star, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
|
||
|
void Complete_Mission_Objective(int id)
|
||
|
{
|
||
|
GameObject *controller = Commands->Find_Object (1100004);
|
||
|
|
||
|
if (id == 1000 || id == 1007 || id == 1008 || id == 1010)
|
||
|
{
|
||
|
//int id = Commands->Create_Conversation("M03CON065", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100065);
|
||
|
//Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
|
||
|
if (id == 1000)
|
||
|
{
|
||
|
GameObject * com_center = Commands->Find_Object (1150002);
|
||
|
Commands->Send_Custom_Event(controller, com_center, BASE_ENTERED, 0);
|
||
|
}
|
||
|
|
||
|
if (id == 1006 || id == 1009 || id == 1011 || id == 1012)
|
||
|
{
|
||
|
if (id == 1009)
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_02, NULL, IDS_Enc_Obj_Hidden_M03_02);
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON033", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100033);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
|
||
|
if (id == 1011)
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_03, NULL, IDS_Enc_Obj_Hidden_M03_03);
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON035", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100035);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
|
||
|
if (id == 1012)
|
||
|
{
|
||
|
Commands->Add_Objective(id, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Hidden_M03_04, NULL, IDS_Enc_Obj_Hidden_M03_04);
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON037", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100037);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (id == 1001)
|
||
|
{
|
||
|
gunboat1 = true;
|
||
|
}
|
||
|
|
||
|
if (id == 1002)
|
||
|
{
|
||
|
sam_count_1++;
|
||
|
if (sam_count_1 >= 2)
|
||
|
{
|
||
|
gunboat2 = true;
|
||
|
/*Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
GameObject *tailgun_zone = Commands->Find_Object(1141168);
|
||
|
if (tailgun_zone)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), tailgun_zone, 200, 200);
|
||
|
}
|
||
|
Sam_Sites_1_Complete_Dialog();*/
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON020", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100020);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
|
||
|
//Commands->Create_Object("Level_3_Objective_Powerup_Temp", Vector3(73.624f, -78.110f, 0.7f));
|
||
|
|
||
|
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(73.0f, -80.04f, 0.2f));
|
||
|
Commands->Set_Facing(chinook_obj, 0.0f);
|
||
|
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "X3I_GDI_Drop_PowerUp.txt");
|
||
|
|
||
|
Commands->Send_Custom_Event(controller, Commands->Find_Object (1100001), ENTERED, 0);
|
||
|
}
|
||
|
}
|
||
|
if (id == 1004)
|
||
|
{
|
||
|
sam_count_2++;
|
||
|
if (sam_count_2 >= 2)
|
||
|
{
|
||
|
gunboat3 = true;
|
||
|
|
||
|
Commands->Set_Objective_Status(1004, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
|
||
|
if (Commands->Find_Object (1100002) && Commands->Find_Object (1100003))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON027", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100027);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
|
||
|
Commands->Start_Timer(Owner(), this, 4.0f, 1004);
|
||
|
}
|
||
|
|
||
|
if (!(Commands->Find_Object (1100002)) && Commands->Find_Object (1100003))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON028", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100028);
|
||
|
Commands->Monitor_Conversation(controller, id);
|
||
|
//Commands->Set_Objective_Status(1004, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
|
||
|
Commands->Start_Timer(Owner(), this, 4.0f, 2004);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (id == 1001)
|
||
|
{
|
||
|
//Commands->Create_Object("Level_3_Objective_Powerup_Temp", Vector3(-94.945f, -66.073f, 2.0f));
|
||
|
|
||
|
GameObject * chinook_obj = Commands->Create_Object ( "Invisible_Object", Vector3(-96.2f, -75.8f, 1.4f));
|
||
|
Commands->Set_Facing(chinook_obj, 0.0f);
|
||
|
Commands->Attach_Script(chinook_obj, "Test_Cinematic", "X3I_GDI_Drop_PowerUp.txt");
|
||
|
|
||
|
GameObject * gunboat = Commands->Find_Object(1100003);
|
||
|
if (gunboat && !gunboat_triggered)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), gunboat, 2000, 1);
|
||
|
GameObject *zone = Commands->Find_Object(1100000);
|
||
|
Commands->Destroy_Object(zone);
|
||
|
}
|
||
|
}
|
||
|
if (id != 1002 && id != 1004 && id != 1009 && id != 1011 && id != 1012)
|
||
|
{
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Fail_Mission_Objective(int id)
|
||
|
{
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_FAILED);
|
||
|
}
|
||
|
|
||
|
void Unhide_Mission_Objective(int id)
|
||
|
{
|
||
|
if (id == 1007)
|
||
|
{
|
||
|
Commands->Start_Timer(Owner(), this, 3.0f, 1007);
|
||
|
}
|
||
|
else if (id == 1010)
|
||
|
{
|
||
|
rain = false;
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_PENDING);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Objective_Status(id, OBJECTIVE_STATUS_PENDING);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(RMV_Test_Big_Gun_Turning, "")
|
||
|
{
|
||
|
int count;
|
||
|
bool gunboat_warned;
|
||
|
bool cine;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( count, 1 );
|
||
|
SAVE_VARIABLE( gunboat_warned, 2);
|
||
|
SAVE_VARIABLE( cine, 3 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
cine = false;
|
||
|
count = 0;
|
||
|
gunboat_warned = false;
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject *temp;
|
||
|
//Commands->Create_Sound("00-n036e", Vector3(0,0,0), obj);
|
||
|
temp = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
|
||
|
Commands->Attach_Script(temp, "Test_Cinematic", "X3C_Bigguns2.txt");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(1100004), 306, 3, 0.0f);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(1100004), 306, 1, 0.0f);
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(1100003), CANNON_KILLED, 0, 0.0f);
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("IDS_M03_D01");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound & sound)
|
||
|
{
|
||
|
if (sound.Type == SOUND_TYPE_DESIGNER04)
|
||
|
{
|
||
|
Commands->Shake_Camera(sound.Position, 40, 0.3f, 1.0f);
|
||
|
//Commands->Apply_Damage ( Commands->Find_Object(1100003), 20.0f, "EXPLOSIVE", Commands->Find_Object(1100002));
|
||
|
if (!gunboat_warned)
|
||
|
{
|
||
|
float random = Commands->Get_Random(1, 5);
|
||
|
if (random < 2)
|
||
|
{
|
||
|
gunboat_warned = true;
|
||
|
/*int id = Commands->Create_Conversation("Gunboat_Warn_Big_Gun");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if (cine)
|
||
|
{
|
||
|
if (Commands->Get_Health (obj) < 1)
|
||
|
{
|
||
|
Commands->Set_Health (obj, Commands->Get_Health (obj) + 1.0f);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == ORCA_TIMER)
|
||
|
{
|
||
|
if (Commands->Find_Object (1100002))
|
||
|
{
|
||
|
GameObject *temp;
|
||
|
//Commands->Create_Sound("00-n036e", Vector3(0,0,0), obj);
|
||
|
temp = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
|
||
|
Commands->Attach_Script(temp, "Test_Cinematic", "X3C_Bigguns.txt");
|
||
|
|
||
|
cine = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == GUNBOAT_KILLED)
|
||
|
{
|
||
|
Commands->Action_Reset (obj, 100);
|
||
|
Commands->Enable_Enemy_Seen (obj, false);
|
||
|
}
|
||
|
|
||
|
if ((type == 1000) && (param == 1000))
|
||
|
{
|
||
|
/*Vector3 target, pos;
|
||
|
pos = Commands->Get_Position(obj);
|
||
|
target.X = pos.X + 49.31;
|
||
|
target.Y = pos.Y + 8.25;
|
||
|
target.Z = pos.Z + 1.0f;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, 0);
|
||
|
if (Commands->Find_Object(1100003) == NULL)
|
||
|
{
|
||
|
params.Set_Attack(target, 0.0f, 3.0f, true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
params.Set_Attack(target, 100.0f, 0.0f, true);
|
||
|
}*/
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 2);
|
||
|
params.Set_Attack(Commands->Find_Object (1100003), 1000.0f, 2.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
if ((type == 2000) && (param == 2000))
|
||
|
{
|
||
|
count++;
|
||
|
if (count == 2 && Commands->Find_Object(1100003) != NULL)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 2.0f, ORCA_TIMER);
|
||
|
}
|
||
|
}
|
||
|
if (type == 2450 && param == 2450)
|
||
|
{
|
||
|
GameObject * gunboat = Commands->Find_Object(1100003);
|
||
|
if (gunboat)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, gunboat, 8000, 8000);
|
||
|
}
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Gunboat_Controller_RMV, "Receive_Type:int, Receive_Param_For_Village:int, Receive_Param_For_Cannon:int, Beach_Destination:vector3, Village_Start:vector3, Village_Destination:vector3, Cannon_Start:vector3, Cannon_Destination:Vector3, Receive_Param_Destroy:int")
|
||
|
{
|
||
|
typedef enum {
|
||
|
STATE_AT_BEACH,
|
||
|
STATE_AT_VILLAGE,
|
||
|
STATE_AT_CANNON,
|
||
|
STATE_IN_TRANSIT,
|
||
|
STATE_AFTER_CANNON
|
||
|
} Gunboat_State;
|
||
|
|
||
|
enum {
|
||
|
GUNBOAT_ACTION,
|
||
|
GUNBOAT_TIMER
|
||
|
};
|
||
|
|
||
|
Gunboat_State state, last_state;
|
||
|
Vector3 beach_dest, village_start, village_dest, cannon_start, cannon_dest;
|
||
|
Vector3 beach_targets[3], village_targets[3], cannon_targets[3];
|
||
|
float beach_error, village_error, cannon_error;
|
||
|
float random;
|
||
|
bool been_shot, warning_1_given, warning_2_given, had_conv, inlet_fire, cannon_killed;
|
||
|
float last_health;
|
||
|
int inlet_count, dam_count;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( state, 1 );
|
||
|
SAVE_VARIABLE( last_state, 2 );
|
||
|
SAVE_VARIABLE( beach_dest, 3 );
|
||
|
SAVE_VARIABLE( village_start, 4 );
|
||
|
SAVE_VARIABLE( village_dest, 5 );
|
||
|
SAVE_VARIABLE( cannon_start, 6 );
|
||
|
SAVE_VARIABLE( cannon_dest, 7 );
|
||
|
SAVE_VARIABLE( beach_targets, 8 );
|
||
|
SAVE_VARIABLE( village_targets, 9 );
|
||
|
SAVE_VARIABLE( cannon_targets, 10 );
|
||
|
SAVE_VARIABLE( beach_error, 11 );
|
||
|
SAVE_VARIABLE( village_error, 12 );
|
||
|
SAVE_VARIABLE( cannon_error, 13 );
|
||
|
SAVE_VARIABLE( random, 14 );
|
||
|
SAVE_VARIABLE( been_shot, 15 );
|
||
|
SAVE_VARIABLE( last_health, 16 );
|
||
|
SAVE_VARIABLE( warning_1_given, 17);
|
||
|
SAVE_VARIABLE( warning_2_given, 18);
|
||
|
SAVE_VARIABLE( had_conv, 19 );
|
||
|
SAVE_VARIABLE( inlet_count, 20 );
|
||
|
SAVE_VARIABLE( inlet_fire, 21 );
|
||
|
SAVE_VARIABLE( dam_count, 22 );
|
||
|
SAVE_VARIABLE( cannon_killed, 23 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
//Commands->Disable_Physical_Collisions(obj);
|
||
|
//Commands->Disable_All_Collisions(obj);
|
||
|
Commands->Enable_Engine(obj, true);
|
||
|
warning_1_given = warning_2_given = been_shot = had_conv = false;
|
||
|
last_health = Commands->Get_Max_Health(obj);
|
||
|
beach_dest = Get_Vector3_Parameter("Beach_Destination");
|
||
|
village_start = Get_Vector3_Parameter("Village_Start");
|
||
|
village_dest = Get_Vector3_Parameter("Village_Destination");
|
||
|
cannon_start = Get_Vector3_Parameter("Cannon_Start");
|
||
|
cannon_dest = Get_Vector3_Parameter("Cannon_Destination");
|
||
|
beach_error = 3.0f;
|
||
|
village_error = 3.0f;
|
||
|
cannon_error = 3.0f;
|
||
|
beach_targets[0] = Vector3(-116,-44,25);
|
||
|
beach_targets[1] = Vector3(-96,-36,25);
|
||
|
beach_targets[2] = Vector3(-74,-35,29);
|
||
|
village_targets[0] = Vector3(24,-25,16);
|
||
|
village_targets[1] = Vector3(45,-30,16);
|
||
|
village_targets[2] = Vector3(80,-12,16);
|
||
|
cannon_targets[0] = Vector3(91,42,27);
|
||
|
cannon_targets[1] = Vector3(66,71,17);
|
||
|
cannon_targets[2] = Vector3(52.558f, 51.739f, 28.880f);
|
||
|
inlet_count = 0;
|
||
|
inlet_fire = true;
|
||
|
state = STATE_AT_BEACH;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, GUNBOAT_ACTION);
|
||
|
params.Set_Movement(beach_dest, 0.25f, 3);
|
||
|
random = Commands->Get_Random(0, 3);
|
||
|
random = WWMath::Clamp(random, 0, 2);
|
||
|
params.Set_Attack(beach_targets[(int)random], 500.0f, beach_error, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.MovePathfind = false;
|
||
|
params.AttackFaceTarget = false;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
Commands->Start_Timer(obj, this, 3.5f, GUNBOAT_TIMER);
|
||
|
cannon_killed = false;
|
||
|
|
||
|
dam_count = 0;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == GUNBOAT_TIMER && !cannon_killed)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, GUNBOAT_ACTION);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.MovePathfind = false;
|
||
|
params.AttackFaceTarget = false;
|
||
|
switch (state)
|
||
|
{
|
||
|
case STATE_AT_BEACH: random = Commands->Get_Random(0, 3);
|
||
|
random = WWMath::Clamp(random, 0, 2);
|
||
|
params.Set_Movement(beach_dest, 0.25f, 3);
|
||
|
params.Set_Attack(beach_targets[(int)random], 500.0f, beach_error, true);
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
break;
|
||
|
case STATE_AT_VILLAGE: random = Commands->Get_Random(0, 3);
|
||
|
random = WWMath::Clamp(random, 0, 2);
|
||
|
params.Set_Movement(village_dest, 0.25f, 3);
|
||
|
params.Set_Attack(village_targets[(int)random], 500.0f, village_error, true);
|
||
|
if (!inlet_fire)
|
||
|
{
|
||
|
params.AttackActive = false;
|
||
|
}
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
break;
|
||
|
case STATE_AT_CANNON: random = Commands->Get_Random(0, 3);
|
||
|
random = WWMath::Clamp(random, 0, 2);
|
||
|
params.Set_Movement(cannon_dest, 0.25f, 3);
|
||
|
params.Set_Attack(cannon_targets[(int)random], 500.0f, cannon_error, true);
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
break;
|
||
|
case STATE_AFTER_CANNON:
|
||
|
{
|
||
|
Commands->Action_Reset (obj, 100);
|
||
|
}
|
||
|
case STATE_IN_TRANSIT:
|
||
|
switch (last_state)
|
||
|
{
|
||
|
case STATE_AT_BEACH:
|
||
|
{
|
||
|
params.Set_Movement(village_start, 0.5f, 3);
|
||
|
if (!had_conv)
|
||
|
{
|
||
|
had_conv = true;
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("Gunboat_To_Inlet");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case STATE_AT_VILLAGE: params.Set_Movement(cannon_start, 0.5f, 3);
|
||
|
break;
|
||
|
}
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
Commands->Start_Timer(obj, this, 1.5f, GUNBOAT_TIMER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == CANNON_KILLED)
|
||
|
{
|
||
|
cannon_killed = true;
|
||
|
Commands->Action_Reset (obj, 100);
|
||
|
}
|
||
|
|
||
|
if (type == 8000 && param == 8000)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, 40);
|
||
|
params.Set_Movement(Vector3(-58.0f, 222.0f, -1.120f), 0.5f, 5.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (type == 7000 && param == 7000)
|
||
|
{
|
||
|
if (++inlet_count >= 4)
|
||
|
{
|
||
|
inlet_fire = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, GUNBOAT_ACTION);
|
||
|
if ((type == Get_Int_Parameter("Receive_Type")) && (param == Get_Int_Parameter("Receive_Param_Destroy")))
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
return;
|
||
|
}
|
||
|
if ((type == Get_Int_Parameter("Receive_Type")) && (param == Get_Int_Parameter("Receive_Param_For_Village")))
|
||
|
{
|
||
|
/* // Turn off beach bunkers
|
||
|
if (Commands->Find_Object(1000001)) {
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1000001), 3000, 3000);
|
||
|
}
|
||
|
if (Commands->Find_Object(1000002)) {
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1000002), 3000, 3000);
|
||
|
}
|
||
|
if (Commands->Find_Object(1000003)) {
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1000003), 3000, 3000);
|
||
|
} */
|
||
|
|
||
|
params.Set_Movement(village_start, 1.0f, 3);
|
||
|
last_state = STATE_AT_BEACH;
|
||
|
}
|
||
|
if ((type == Get_Int_Parameter("Receive_Type")) && (param == Get_Int_Parameter("Receive_Param_For_Cannon")))
|
||
|
{
|
||
|
params.Set_Movement(cannon_start, 1.0f, 3);
|
||
|
last_state = STATE_AT_VILLAGE;
|
||
|
}
|
||
|
state = STATE_IN_TRANSIT;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 40)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
return;
|
||
|
if (action_id == GUNBOAT_ACTION)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, GUNBOAT_ACTION);
|
||
|
if (state == STATE_IN_TRANSIT)
|
||
|
{
|
||
|
if (last_state == STATE_AT_BEACH)
|
||
|
{
|
||
|
params.Set_Movement(village_dest, 0.25f, 3);
|
||
|
state = STATE_AT_VILLAGE;
|
||
|
}
|
||
|
if (last_state == STATE_AT_VILLAGE)
|
||
|
{
|
||
|
params.Set_Movement(cannon_dest, 0.25f, 3);
|
||
|
state = STATE_AT_CANNON;
|
||
|
}
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
else if
|
||
|
(state == STATE_AT_CANNON)
|
||
|
Commands->Action_Reset(obj, 90);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Check_Health(void)
|
||
|
{
|
||
|
if (!warning_2_given && last_health <= 0.25f * Commands->Get_Max_Health(Owner()))
|
||
|
{
|
||
|
warning_2_given = true;
|
||
|
/*int id = Commands->Create_Conversation("Gunboat_Near_Death");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!warning_1_given && last_health <= 0.5f * Commands->Get_Max_Health(Owner()))
|
||
|
{
|
||
|
warning_1_given = true;
|
||
|
/*int id = Commands->Create_Conversation("Gunboat_Damaged");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
|
||
|
if (damager && Commands->Is_A_Star(damager) && !been_shot)
|
||
|
{
|
||
|
been_shot = true;
|
||
|
Commands->Create_2D_Sound("00-N062E");
|
||
|
}
|
||
|
if (Commands->Get_Health(obj) <= 0)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
float damage = last_health - Commands->Get_Health(obj);
|
||
|
damage *= ((DIFFICULTY + 1));
|
||
|
Commands->Set_Health(obj, last_health - damage);
|
||
|
last_health = Commands->Get_Health(obj);
|
||
|
Check_Health();
|
||
|
|
||
|
if (damager == Commands->Find_Object (1100002))
|
||
|
{
|
||
|
if (++dam_count > 1 && dam_count <= 3)
|
||
|
{
|
||
|
if (Commands->Get_Health (Commands->Find_Object (300058)) > 0 || Commands->Get_Health (Commands->Find_Object (300058)) > 0)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON029", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100029);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (++dam_count > 3 && dam_count <= 5)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON030", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100030);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Create_Explosion_At_Bone("Ground Explosions Twiddler", obj, "TURRET");
|
||
|
|
||
|
if (killer == Commands->Find_Object (1100002))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON031");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100031);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), GUNBOAT_KILLED, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (1100003), GUNBOAT_KILLED, 0);
|
||
|
|
||
|
//Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), 304, 2);
|
||
|
}
|
||
|
|
||
|
if (killer != Commands->Find_Object (1100002))
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON018");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100018);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
//Commands->Send_Custom_Event(obj, Commands->Find_Object (1100004), 302, 2);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*DECLARE_SCRIPT(RMV_Temp_EVA_Dialogue, "")
|
||
|
{
|
||
|
int last;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( last, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
last = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
char *list[11];
|
||
|
|
||
|
list[0] = "00-N184E"; //Locate Comm Center
|
||
|
list[1] = "00-N186E"; //Secure Beachhead
|
||
|
list[2] = NULL;//"00-N188E"; //Destroy SAM #1
|
||
|
list[3] = "00-N188E"; //Destroy SAM #2
|
||
|
list[4] = NULL;//"00-N188E"; //Destroy SAM #3
|
||
|
list[5] = "00-N188E"; //Destroy SAM #4
|
||
|
list[6] = "00-N154E"; //Destroy Big Gun
|
||
|
list[7] = "00-N200E"; //Acquire Keycard
|
||
|
list[8] = "00-N210E"; //Access Comm Center Terminal
|
||
|
list[9] = "00-N204E"; //Destroy Power Plant Terminal
|
||
|
list[10] = "00-N150E"; //Escape via the sub
|
||
|
|
||
|
if (param == 1)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 2.0f, 0);
|
||
|
}
|
||
|
|
||
|
if (type == last) return;
|
||
|
if ((param == 3) || (param == 4))
|
||
|
{
|
||
|
int num = type - 300;
|
||
|
if (num <= 10)
|
||
|
{
|
||
|
if (list[num] != NULL)
|
||
|
{
|
||
|
// Commands->Create_Sound(list[num], Vector3(0,0,0), obj);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
last = type;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
char *taunts[4];
|
||
|
|
||
|
taunts[0] = "laugh1";
|
||
|
taunts[1] = "lefty1";
|
||
|
taunts[2] = "bombit1";
|
||
|
taunts[3] = "keepem1";
|
||
|
|
||
|
float random = Commands->Get_Random(0, 11);
|
||
|
if (random < 8.0f)
|
||
|
{
|
||
|
random /= 2.0f;
|
||
|
random = WWMath::Clamp(random, 0, 3);
|
||
|
int d_random = (int)random;
|
||
|
Commands->Create_Sound(taunts[d_random], Vector3(0,0,0), obj);
|
||
|
}
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
DECLARE_SCRIPT(Sakura_Killed, "")
|
||
|
{
|
||
|
int music_id;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(music_id, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
if (Commands->Find_Object(1144518)) {
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1144518), 622, 622);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if (damager != STAR)
|
||
|
{
|
||
|
if (Commands->Get_Health (obj) < 5)
|
||
|
{
|
||
|
Commands->Set_Health (obj, Commands->Get_Health (obj) + 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject *temp;
|
||
|
temp = Commands->Create_Object("Sakura Crash Controller", Vector3(0,0,0));
|
||
|
if (Commands->Find_Object(1300001)) {
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1300001), 6000, 6600);
|
||
|
}
|
||
|
Commands->Grant_Key(STAR, 6, true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Outro_Cinematic, "")
|
||
|
{
|
||
|
int star_id;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( star_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
{
|
||
|
star_id = Commands->Get_ID(enterer);
|
||
|
GameObject *controller;
|
||
|
controller = Commands->Find_Object(1100004);
|
||
|
if (controller) {
|
||
|
Commands->Send_Custom_Event(obj, controller, 8000, 8000);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 8000) && (param >= 3))
|
||
|
{
|
||
|
GameObject *temp;
|
||
|
GameObject *star = Commands->Find_Object(star_id);
|
||
|
Vector3 pos;
|
||
|
pos.Set(-324.49f, 71.60f, 4.26f);
|
||
|
Commands->Set_Position(star, pos);
|
||
|
temp = Commands->Create_Object("Finale Controller", Vector3(0,0,0));
|
||
|
Commands->Start_Timer(obj, this, 625.0f/30.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
GameObject *controller;
|
||
|
controller = Commands->Find_Object(1100004);
|
||
|
if (controller)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, controller, 310, 1);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(RMV_M03_Comm_Center_Terminal, "")
|
||
|
{
|
||
|
bool has_been_poked;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( has_been_poked, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
has_been_poked = false;
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
if (!has_been_poked && Commands->Is_A_Star(poker))
|
||
|
{
|
||
|
has_been_poked = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 308, 1, 0);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON008", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100008);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 100008)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), SAKURA_DOGFIGHT, 0);
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("M03CON010", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100010);
|
||
|
Commands->Monitor_Conversation(obj, id);*/
|
||
|
|
||
|
//Commands->Grant_Key(STAR, 2, true);
|
||
|
//Commands->Grant_Key(STAR, 3, true);
|
||
|
Commands->Grant_Key(STAR, 5, false);
|
||
|
|
||
|
Vector3 sakura_pos;
|
||
|
sakura_pos.Set(-160.690f, 76.470f, 16.270f);
|
||
|
Commands->Create_Object("Boss", sakura_pos);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100010)
|
||
|
{
|
||
|
//Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 308, 1, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
Commands->Set_Health(obj, Commands->Get_Max_Health(obj));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(RMV_Volcano_And_Lava_Ball_Creator, "")
|
||
|
{
|
||
|
int last;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(last, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
last = -1;
|
||
|
Commands->Enable_Cinematic_Freeze( obj, false );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 500) && (param == 500))
|
||
|
{
|
||
|
Commands->Reveal_Encyclopedia_Character ( 39 );//sakura
|
||
|
Commands->Reveal_Encyclopedia_Vehicle ( 31 );//sakura's comanche
|
||
|
|
||
|
Commands->Enable_Cinematic_Freeze( obj, false );
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON010", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100010);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Set_Ash(0.15f, 3.0f, false);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), DOGFIGHT_ENDED, 0);
|
||
|
Commands->Set_Clouds (1.0f, 1.0f, 20);
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("M03CON010", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100010);
|
||
|
Commands->Monitor_Conversation(obj, id);*/
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 55.0, MESSAGE_DELAY);
|
||
|
Commands->Start_Timer(obj, this, 10.0, ANNOUNCEMENT_DELAY);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 0.1f, 1001);
|
||
|
GameObject *temp = Commands->Find_Object(1144977);
|
||
|
if (temp)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, temp, 100, 100);
|
||
|
}
|
||
|
Commands->Create_Object("Volcano Controller", Vector3(0,0,0));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason complete_reason)
|
||
|
{
|
||
|
if (action_id == 100010)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 310, 3, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 1001)
|
||
|
{
|
||
|
float rnd_val;
|
||
|
int rnd_int_val;
|
||
|
|
||
|
rnd_val = Commands->Get_Random(0.0f,1.0f) * 20;
|
||
|
rnd_int_val = int(rnd_val);
|
||
|
if (rnd_int_val == last)
|
||
|
{
|
||
|
++rnd_int_val %= 20;
|
||
|
}
|
||
|
|
||
|
if (rnd_int_val > 19) {
|
||
|
rnd_int_val = 19;
|
||
|
}
|
||
|
switch (rnd_int_val)
|
||
|
{
|
||
|
case (0):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall01", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (1):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall02", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (2):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall03", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (3):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall04", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (4):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall05", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (5):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall06", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (6):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall07", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (7):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall08", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (8):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall09", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (9):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall10", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (10):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall11", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (11):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall12", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (12):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall13", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (13):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall14", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (14):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall15", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (15):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall16", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (16):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall17", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (17):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall18", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (18):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall19", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
case (19):
|
||
|
{
|
||
|
Commands->Create_Object ("LavaBall20", Vector3(0,0,0));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
last = rnd_int_val;
|
||
|
rnd_val = Commands->Get_Random(3.0f,5.0f) + 2.0f;
|
||
|
Commands->Start_Timer (obj, this, rnd_val, 1001);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_CommCenter_SateliteDish_Controller_JDG, "")
|
||
|
{
|
||
|
int start_sounds;
|
||
|
int stop_sounds;
|
||
|
int play_sounds;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( start_sounds, 1 );
|
||
|
SAVE_VARIABLE( stop_sounds, 2 );
|
||
|
SAVE_VARIABLE( play_sounds, 3 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
start_sounds = 100;
|
||
|
stop_sounds = 101;
|
||
|
play_sounds = 102;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_sounds, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == stop_sounds)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
if (param == start_sounds)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sounds, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (param == play_sounds)
|
||
|
{
|
||
|
char *soundName = "Satelite Dish Moving Twiddler";
|
||
|
Vector3 soundPosition (-110.26f, 41.30f, 19.37f);
|
||
|
|
||
|
Commands->Create_Sound ( soundName, soundPosition, obj );
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( 0, 3 );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sounds, delayTimer );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*DECLARE_SCRIPT(M03_Refinery_Crusher_Controller_JDG, "")
|
||
|
{
|
||
|
int start_sounds;
|
||
|
int stop_sounds;
|
||
|
int play_sounds;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( start_sounds, 1 );
|
||
|
SAVE_VARIABLE( stop_sounds, 2 );
|
||
|
SAVE_VARIABLE( play_sounds, 3 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
start_sounds = 100;
|
||
|
stop_sounds = 101;
|
||
|
play_sounds = 102;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_sounds, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == stop_sounds)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
if (param == start_sounds)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sounds, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (param == play_sounds)
|
||
|
{
|
||
|
char *soundName = "Refinery Crusher Twiddler";
|
||
|
Vector3 soundPosition (-179.60f, -2.03f, 3.42f);
|
||
|
|
||
|
Commands->Create_Sound ( soundName, soundPosition, obj );
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( 0, 5 );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sounds, delayTimer );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Ambient_Birdcall_Controller_JDG, "")
|
||
|
{
|
||
|
int start_birdcalls;
|
||
|
int stop_birdcalls;
|
||
|
int pick_birdcall;
|
||
|
int play_birdcall;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( start_birdcalls, 1 );
|
||
|
SAVE_VARIABLE( stop_birdcalls, 2 );
|
||
|
SAVE_VARIABLE( pick_birdcall, 3 );
|
||
|
SAVE_VARIABLE( play_birdcall, 4 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
start_birdcalls = 100;
|
||
|
stop_birdcalls = 101;
|
||
|
play_birdcall = 102;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_birdcalls, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == stop_birdcalls)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
if (param == start_birdcalls)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_birdcall, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (param == play_birdcall)
|
||
|
{
|
||
|
char *soundName = "Birdcall Twiddler";
|
||
|
Vector3 soundPosition;
|
||
|
|
||
|
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(-15,15);
|
||
|
float y_factor = Commands->Get_Random(-15,15);
|
||
|
float z_factor = Commands->Get_Random(5,15);
|
||
|
|
||
|
soundPosition.X = playerPosition.X + x_factor;
|
||
|
soundPosition.Y = playerPosition.Y + y_factor;
|
||
|
soundPosition.Z = playerPosition.Z + z_factor;
|
||
|
|
||
|
Commands->Create_Sound ( soundName, soundPosition, obj );
|
||
|
}
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( 0, 15 );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_birdcall, delayTimer );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered( GameObject * obj, GameObject * enterer )
|
||
|
{
|
||
|
if ( Commands->Is_A_Star( enterer ))
|
||
|
{
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
/*
|
||
|
01-I000E "Core temperture fluctuating."
|
||
|
01-I002E "Extended exposure to core environment is hazardous."
|
||
|
01-I004E "Power output exceeding optimal levels."
|
||
|
01-I006E "Radiation levels fluctuating."
|
||
|
01-I008E "Radiation hazard. Proper safety equipment is required."
|
||
|
01-I010E "If the decontamination shower does not function, contact a technician immediately."
|
||
|
01-I012E "Tertiary coolant system malfunctioning. Dispatch technician immediately."
|
||
|
01-I014E "Comm Center power demands have fallen. Diverting power to secondary grid."
|
||
|
01-I016E "Power production levels wavering."
|
||
|
01-I018E "Critical failure potential increasing. Reallocate available engineers."
|
||
|
01-I020E "Tertiary grid demands increasing; diverting surplus power."
|
||
|
01-I022E "Proper Identification must be worn at all times."
|
||
|
01-I024E "Secondary power grid has been taken offline. Tertiary grid surplus being redirected."
|
||
|
01-I026E "Power core radiation levels vacillating."
|
||
|
01-I050E "Do you know someone who would make a positive addition to the Brotherhood? Now they can enlist online at 'WWW dot BrotherhoodRecruitment dot Nod' "
|
||
|
01-I062E "Immediately report the presence of visceroids to your supervisor."
|
||
|
01-I066E "Workers found loitering in this area will be terminated."
|
||
|
01-I076E "Hazmat suits are required for your safety."
|
||
|
01-I078E "Please do not inhale decontamination agents."
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Announce_PowerPlant_Controller_JDG, "")
|
||
|
{
|
||
|
int total_number_of_sounds;
|
||
|
float announce_delay_min;
|
||
|
float announce_delay_max;
|
||
|
int start_announcements;
|
||
|
int stop_announcements;
|
||
|
int pick_sound;
|
||
|
int play_sound;
|
||
|
int play_klaxon;
|
||
|
|
||
|
int sound;
|
||
|
int klaxon;
|
||
|
|
||
|
Vector3 spkr_1_spot;
|
||
|
Vector3 spkr_2_spot;
|
||
|
Vector3 spkr_3_spot;
|
||
|
Vector3 spkr_4_spot;
|
||
|
Vector3 spkr_5_spot;
|
||
|
Vector3 spkr_6_spot;
|
||
|
Vector3 spkr_7_spot;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( total_number_of_sounds, 1 );
|
||
|
SAVE_VARIABLE( announce_delay_min, 2 );
|
||
|
SAVE_VARIABLE( announce_delay_max, 3 );
|
||
|
SAVE_VARIABLE( start_announcements, 4 );
|
||
|
SAVE_VARIABLE( stop_announcements, 5 );
|
||
|
SAVE_VARIABLE( pick_sound, 6 );
|
||
|
SAVE_VARIABLE( play_sound, 7 );
|
||
|
SAVE_VARIABLE( play_klaxon, 8 );
|
||
|
SAVE_VARIABLE( sound, 9 );
|
||
|
SAVE_VARIABLE( klaxon, 10 );
|
||
|
SAVE_VARIABLE( spkr_1_spot, 11 );
|
||
|
SAVE_VARIABLE( spkr_2_spot, 12 );
|
||
|
SAVE_VARIABLE( spkr_3_spot, 13 );
|
||
|
SAVE_VARIABLE( spkr_4_spot, 14 );
|
||
|
SAVE_VARIABLE( spkr_5_spot, 15 );
|
||
|
SAVE_VARIABLE( spkr_6_spot, 16 );
|
||
|
SAVE_VARIABLE( spkr_7_spot, 17 );
|
||
|
}
|
||
|
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
total_number_of_sounds = 15;
|
||
|
announce_delay_min = 20.0;
|
||
|
announce_delay_max = 30.0;
|
||
|
start_announcements = 20;
|
||
|
stop_announcements = 21;
|
||
|
pick_sound = 22;
|
||
|
play_sound = 23;
|
||
|
play_klaxon = 24;
|
||
|
|
||
|
spkr_1_spot.Set(-60.55f,13.55f,-9.69f);
|
||
|
spkr_2_spot.Set(-65.74f,15.17f,-8.71f);
|
||
|
spkr_3_spot.Set(-63.75f,22.49f,-7.81f);
|
||
|
spkr_4_spot.Set(-63.00f,22.05f,-.70f);
|
||
|
spkr_5_spot.Set(-75.75f,28.92f,-14.77f);
|
||
|
spkr_6_spot.Set(-64.98f,20.41f,-13.62f);
|
||
|
spkr_7_spot.Set(-58.05f,7.45f,-14.20f);
|
||
|
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_announcements, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
|
||
|
|
||
|
if (param == stop_announcements)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
else if (param == start_announcements)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == play_klaxon)
|
||
|
{
|
||
|
char *klaxonNames[2] = {
|
||
|
"Klaxon Warning",
|
||
|
"Klaxon Info"
|
||
|
};
|
||
|
|
||
|
char *klaxonName = klaxonNames[klaxon];
|
||
|
|
||
|
Commands->Create_Sound ( klaxonName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_7_spot, obj );
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 1.25 );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
else if (param == play_sound)
|
||
|
{
|
||
|
char *sounds[19] = {
|
||
|
"01-i000e",
|
||
|
"01-i002e",
|
||
|
"01-i004e",
|
||
|
"01-i006e",
|
||
|
"01-i008e",
|
||
|
"01-i010e",
|
||
|
"01-i012e",
|
||
|
"01-i014e",
|
||
|
"01-i016e",
|
||
|
"01-i018e",
|
||
|
"01-i020e",
|
||
|
"01-i024e",
|
||
|
"01-i026e",
|
||
|
"01-i050e",
|
||
|
"01-i062e",
|
||
|
"01-i066e",
|
||
|
"01-i076e",
|
||
|
"01-i078e",
|
||
|
"01-i022e"
|
||
|
};
|
||
|
char *soundName;
|
||
|
soundName = sounds[sound];
|
||
|
Commands->Create_Sound ( soundName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_7_spot, obj );
|
||
|
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( announce_delay_min, announce_delay_max );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, delayTimer );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
else if (param == pick_sound)
|
||
|
{
|
||
|
|
||
|
|
||
|
float lineNumber = Commands->Get_Random ( 0.5f, total_number_of_sounds+0.5);
|
||
|
|
||
|
if ((lineNumber >= 0.5) && (lineNumber < 1.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i000e";
|
||
|
sound = 0;
|
||
|
//01-I000E "Core temperture fluctuating."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 1.5) && (lineNumber < 2.5))
|
||
|
{
|
||
|
//soundName = "01-i002e";
|
||
|
sound = 1;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 2.5) && (lineNumber < 3.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i004e";
|
||
|
sound = 2;
|
||
|
//01-I004E "Power output exceeding optimal levels."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 3.5) && (lineNumber < 4.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i006e";
|
||
|
sound = 3;
|
||
|
//01-I006E "Radiation levels fluctuating."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 4.5) && (lineNumber < 5.5))
|
||
|
{
|
||
|
//soundName = "01-i008e";
|
||
|
sound = 4;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 5.5) && (lineNumber < 6.5))
|
||
|
{
|
||
|
//soundName = "01-i010e";
|
||
|
sound = 5;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 6.5) && (lineNumber < 7.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i012e";
|
||
|
sound = 6;
|
||
|
//01-I012E "Tertiary coolant system malfunctioning. Dispatch technician immediately."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 7.5) && (lineNumber < 8.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i014e";
|
||
|
sound = 7;
|
||
|
//01-I014E "Comm Center power demands have fallen. Diverting power to secondary grid."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 8.5) && (lineNumber < 9.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i016e";
|
||
|
sound = 8;
|
||
|
//01-I016E "Power production levels wavering."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 9.5) && (lineNumber < 10.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i018e";
|
||
|
sound = 9;
|
||
|
//01-I018E "Critical failure potential increasing. Reallocate available engineers."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 10.5) && (lineNumber < 11.5))
|
||
|
{
|
||
|
//soundName = "01-i020e";
|
||
|
sound = 10;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 11.5) && (lineNumber < 12.5))
|
||
|
{
|
||
|
//soundName = "01-i024e";
|
||
|
sound = 11;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 12.5) && (lineNumber < 13.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i026e";
|
||
|
sound = 12;
|
||
|
//01-I026E "Power core radiation levels vacillating."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 13.5) && (lineNumber < 14.5))
|
||
|
{
|
||
|
//soundName = "01-i050e";
|
||
|
sound = 13;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
else if ((lineNumber >= 14.5) && (lineNumber < 15.5))
|
||
|
{
|
||
|
//soundName = "01-i062e";
|
||
|
sound = 14;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
else if ((lineNumber >= 15.5) && (lineNumber < 16.5))
|
||
|
{
|
||
|
//soundName = "01-i066e";
|
||
|
sound = 15;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
else if ((lineNumber >= 16.5) && (lineNumber < 17.5))
|
||
|
{
|
||
|
//soundName = "01-i076e";
|
||
|
sound = 16;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
else if ((lineNumber >= 17.5) && (lineNumber < 18.5))
|
||
|
{
|
||
|
//soundName = "01-i078e";
|
||
|
sound = 17;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
//soundName = "01-i022e";
|
||
|
sound = 18;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed( GameObject * obj, GameObject * killer )
|
||
|
{
|
||
|
//soundName = "Klaxon Loop";
|
||
|
|
||
|
//Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
The following is a list of all level 3 refinery related dialogs
|
||
|
Line # Dialog
|
||
|
01-i010E "If the decontamination shower does not function, contact a technician immediately."
|
||
|
01-i022E "Proper Identification must be worn at all times."
|
||
|
01-i032E "A visceroid has been spotted in Tiberium Field iota. Containment team en route."
|
||
|
01-i034E "Tiberium value is increasing Worldwide."
|
||
|
01-i052E "The yellow zone is for harvester unloading only. There is no parking in the yellow zone."
|
||
|
01-i054E "Harvester approaching. Please clear docking bay at once." Only plays when harvester is approaching.
|
||
|
01-i056E "Harvester now unloading"
|
||
|
01-i058E "Smoking is not permitted within the refinery."
|
||
|
01-i060E "Leaking barrels are a health hazard. Report any faulty containment vessels to your supervisor immediately."
|
||
|
01-i062E "Immediately report the presence of visceroids to your supervisor."
|
||
|
01-i064E "Do not discharge weapons near containment barrels."
|
||
|
01-i066E "Workers found loitering in this area will be terminated."
|
||
|
01-i068E "For your safety, avoid all moving parts."
|
||
|
01-i070E "Supply trucks have the right of way."
|
||
|
01-i072E "Tiberium field omega has decreased in size. Changing harvester target to facilitate growth."
|
||
|
01-i074E "Additional tests are required for current Tiberium batch. Highest priority."
|
||
|
01-i076E "Hazmat suits are required for your safety."
|
||
|
01-i078E "Please do not inhale decontamination agents."
|
||
|
01-i080E "Quarternary gas vacuum has malfunctioned. Backup compressors are now on line."
|
||
|
01-i082E "Blockage in left ventricle of secondary crushing unit."
|
||
|
01-i084E "Refinery reagents are a biohazard. Report all leaks immediately."
|
||
|
01-i086E "Hydroxyl levels at supersaturation. Venting protocols initiated."
|
||
|
01-i088E "Uranium fuel levels nominal."
|
||
|
01-i090E "Smelting furnace fully operational."
|
||
|
01-i092E "SPF 128 required while working under the Ultra Violet lights."
|
||
|
01-i094E "Polarized safety goggles are mandatory while working under the Ultra Violet lights."
|
||
|
01-i096E "Distiller fumes are toxic. Avoid inhaling any gasses in this area."
|
||
|
01-i098E "Tiberium only to be distilled in this area."
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Announce_Refinery_Controller_JDG, "")
|
||
|
{
|
||
|
int total_number_of_sounds;
|
||
|
float announce_delay_min;
|
||
|
float announce_delay_max;
|
||
|
int start_announcements;
|
||
|
int stop_announcements;
|
||
|
int pick_sound;
|
||
|
int play_sound;
|
||
|
int play_klaxon;
|
||
|
|
||
|
int sound;
|
||
|
int klaxon;
|
||
|
|
||
|
Vector3 spkr_1_spot;
|
||
|
Vector3 spkr_2_spot;
|
||
|
Vector3 spkr_3_spot;
|
||
|
Vector3 spkr_4_spot;
|
||
|
Vector3 spkr_5_spot;
|
||
|
Vector3 spkr_6_spot;
|
||
|
Vector3 spkr_7_spot;
|
||
|
Vector3 spkr_8_spot;
|
||
|
Vector3 spkr_9_spot;
|
||
|
Vector3 spkr_10_spot;
|
||
|
Vector3 spkr_11_spot;
|
||
|
Vector3 spkr_12_spot;
|
||
|
Vector3 spkr_13_spot;
|
||
|
Vector3 spkr_14_spot;
|
||
|
Vector3 spkr_15_spot;
|
||
|
Vector3 spkr_16_spot;
|
||
|
Vector3 spkr_17_spot;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( total_number_of_sounds, 1 );
|
||
|
SAVE_VARIABLE( announce_delay_min, 2 );
|
||
|
SAVE_VARIABLE( announce_delay_max, 3 );
|
||
|
SAVE_VARIABLE( start_announcements, 4 );
|
||
|
SAVE_VARIABLE( stop_announcements, 5 );
|
||
|
SAVE_VARIABLE( pick_sound, 6 );
|
||
|
SAVE_VARIABLE( play_sound, 7 );
|
||
|
SAVE_VARIABLE( play_klaxon, 8 );
|
||
|
SAVE_VARIABLE( sound, 9 );
|
||
|
SAVE_VARIABLE( klaxon, 10 );
|
||
|
SAVE_VARIABLE( spkr_1_spot, 11 );
|
||
|
SAVE_VARIABLE( spkr_2_spot, 12 );
|
||
|
SAVE_VARIABLE( spkr_3_spot, 13 );
|
||
|
SAVE_VARIABLE( spkr_4_spot, 14 );
|
||
|
SAVE_VARIABLE( spkr_5_spot, 15 );
|
||
|
SAVE_VARIABLE( spkr_6_spot, 16 );
|
||
|
SAVE_VARIABLE( spkr_7_spot, 17 );
|
||
|
SAVE_VARIABLE( spkr_8_spot, 18 );
|
||
|
SAVE_VARIABLE( spkr_8_spot, 19 );
|
||
|
SAVE_VARIABLE( spkr_10_spot, 20 );
|
||
|
SAVE_VARIABLE( spkr_11_spot, 21 );
|
||
|
SAVE_VARIABLE( spkr_12_spot, 22 );
|
||
|
SAVE_VARIABLE( spkr_13_spot, 23 );
|
||
|
SAVE_VARIABLE( spkr_14_spot, 24 );
|
||
|
SAVE_VARIABLE( spkr_15_spot, 25 );
|
||
|
SAVE_VARIABLE( spkr_16_spot, 26 );
|
||
|
SAVE_VARIABLE( spkr_17_spot, 27 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
total_number_of_sounds = 28;
|
||
|
announce_delay_min = 20.0;
|
||
|
announce_delay_max = 30.0;
|
||
|
start_announcements = 20;
|
||
|
stop_announcements = 21;
|
||
|
pick_sound = 22;
|
||
|
play_sound = 23;
|
||
|
play_klaxon = 24;
|
||
|
|
||
|
spkr_1_spot.Set(-156.3f,28.40f,-10.07f);
|
||
|
spkr_2_spot.Set(-172.19f,28.91f,-10.08f);
|
||
|
spkr_3_spot.Set(-144.46f,17.18f,-10.0f);
|
||
|
spkr_4_spot.Set(-136.33f,1.47f,-10.63f);
|
||
|
spkr_5_spot.Set(-139.38f,-14.86f,-10.79f);
|
||
|
spkr_6_spot.Set(-146.76f,-27.75f,-10.24f);
|
||
|
spkr_7_spot.Set(-134.95f,-33.21f,-10.70f);
|
||
|
spkr_8_spot.Set(-181.62f,16.33f,-10.65f);
|
||
|
spkr_9_spot.Set(-180.04f,3.15f,-10.16f);
|
||
|
spkr_10_spot.Set(-178.31f,-13.79f,-10.84f);
|
||
|
spkr_11_spot.Set(-177.85f,-30.11f,-10.99f);
|
||
|
spkr_12_spot.Set(-168.09f,-33.71f,-10.01f);
|
||
|
spkr_13_spot.Set(-156.28f,-39.59f,-10.43f);
|
||
|
spkr_14_spot.Set(-160.06f,-18.86f,-10.99f);
|
||
|
spkr_15_spot.Set(-143.87f,-1.17f,-10.99f);
|
||
|
spkr_16_spot.Set(-159.78f,-1.17f,-10.99f);
|
||
|
spkr_17_spot.Set(-166.61f,11.61f,-10.99f);
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_announcements, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == stop_announcements)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
else if (param == start_announcements)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == play_klaxon)
|
||
|
{
|
||
|
char *klaxonNames[2] = {
|
||
|
"Klaxon Warning",
|
||
|
"Klaxon Info"
|
||
|
};
|
||
|
|
||
|
char *klaxonName = klaxonNames[klaxon];
|
||
|
|
||
|
Commands->Create_Sound ( klaxonName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_7_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_8_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_9_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_10_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_11_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_12_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_13_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_14_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_15_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_16_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_17_spot, obj );
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 1.5 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == play_sound)
|
||
|
{
|
||
|
char *sounds[28] = {
|
||
|
"01-i010E",
|
||
|
"01-i022E",
|
||
|
"01-i032E",
|
||
|
"01-i034E",
|
||
|
"01-i052E",
|
||
|
"01-i054E",
|
||
|
"01-i056E",
|
||
|
"01-i058E",
|
||
|
"01-i060E",
|
||
|
"01-i062E",
|
||
|
"01-i064E",
|
||
|
"01-i066E",
|
||
|
"01-i068E",
|
||
|
"01-i070E",
|
||
|
"01-i072E",
|
||
|
"01-i074E",
|
||
|
"01-i076E",
|
||
|
"01-i078E",
|
||
|
"01-i080E",
|
||
|
"01-i082E",
|
||
|
"01-i084E",
|
||
|
"01-i086E",
|
||
|
"01-i088E",
|
||
|
"01-i090E",
|
||
|
"01-i092E",
|
||
|
"01-i094E",
|
||
|
"01-i096E",
|
||
|
"01-i098E"
|
||
|
};
|
||
|
|
||
|
char *soundName = sounds[sound];
|
||
|
|
||
|
Commands->Create_Sound ( soundName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_7_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_8_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_9_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_10_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_11_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_12_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_13_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_14_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_15_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_16_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_17_spot, obj );
|
||
|
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( announce_delay_min, announce_delay_max );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, delayTimer );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == pick_sound)
|
||
|
{
|
||
|
|
||
|
float lineNumber = Commands->Get_Random ( 0.5f, total_number_of_sounds+0.5);
|
||
|
|
||
|
if ((lineNumber >= 0.5) && (lineNumber < 1.5))
|
||
|
{
|
||
|
//soundName = "01-i074e";
|
||
|
sound = 0;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 1.5) && (lineNumber < 2.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i032e";
|
||
|
sound = 1;
|
||
|
//01-i032E "A visceroid has been spotted in Tiberium Field iota. Containment team en route."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 2.5) && (lineNumber < 3.5))
|
||
|
{
|
||
|
//soundName = "01-i034e";
|
||
|
sound = 2;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 3.5) && (lineNumber < 4.5))
|
||
|
{
|
||
|
//soundName = "01-i052e";
|
||
|
sound = 3;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 4.5) && (lineNumber < 5.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i054e";
|
||
|
sound = 4;
|
||
|
//01-i054E "Harvester approaching. Please clear docking bay at once." Only plays when harvester is approaching.
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 5.5) && (lineNumber < 6.5))
|
||
|
{
|
||
|
//soundName = "01-i056e";
|
||
|
sound = 5;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 6.5) && (lineNumber < 7.5))
|
||
|
{
|
||
|
//soundName = "01-i058e";
|
||
|
sound = 6;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 7.5) && (lineNumber < 8.5))
|
||
|
{
|
||
|
//soundName = "01-i060e";
|
||
|
sound = 7;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 8.5) && (lineNumber < 9.5))
|
||
|
{
|
||
|
//soundName = "01-i062e";
|
||
|
sound = 8;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 9.5) && (lineNumber < 10.5))
|
||
|
{
|
||
|
//soundName = "01-i064e";
|
||
|
sound = 9;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 10.5) && (lineNumber < 11.5))
|
||
|
{
|
||
|
//soundName = "01-i066e";
|
||
|
sound = 10;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 11.5) && (lineNumber < 12.5))
|
||
|
{
|
||
|
//soundName = "01-i068e";
|
||
|
sound = 11;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 12.5) && (lineNumber < 13.5))
|
||
|
{
|
||
|
//soundName = "01-i070e";
|
||
|
sound = 12;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 13.5) && (lineNumber < 14.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i072e";
|
||
|
sound = 13;
|
||
|
//01-i072E "Tiberium field omega has decreased in size. Changing harvester target to facilitate growth."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 14.5) && (lineNumber < 15.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i074e";
|
||
|
sound = 14;
|
||
|
//01-i074E "Additional tests are required for current Tiberium batch. Highest priority."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 15.5) && (lineNumber < 16.5))
|
||
|
{
|
||
|
//soundName = "01-i076e";
|
||
|
sound = 15;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 16.5) && (lineNumber < 17.5))
|
||
|
{
|
||
|
//soundName = "01-i078e";
|
||
|
sound = 16;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 17.5) && (lineNumber < 18.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i080e";
|
||
|
sound = 17;
|
||
|
//01-i080E "Quarternary gas vacuum has malfunctioned. Backup compressors are now on line."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 18.5) && (lineNumber < 19.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i082e";
|
||
|
sound = 18;
|
||
|
//01-i082E "Blockage in left ventricle of secondary crushing unit."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 19.5) && (lineNumber < 20.5))
|
||
|
{
|
||
|
//soundName = "01-i084e";
|
||
|
sound = 19;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
};
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 20.5) && (lineNumber < 21.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i086e";
|
||
|
sound = 20;
|
||
|
//01-i086E "Hydroxyl levels at supersaturation. Venting protocols initiated."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 21.5) && (lineNumber < 22.5))
|
||
|
{
|
||
|
//soundName = "01-i088e";
|
||
|
sound = 21;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 22.5) && (lineNumber < 23.5))
|
||
|
{
|
||
|
//soundName = "01-i090e";
|
||
|
sound = 22;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 23.5) && (lineNumber < 24.5))
|
||
|
{
|
||
|
//soundName = "01-i092e";
|
||
|
sound = 23;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 24.5) && (lineNumber < 25.5))
|
||
|
{
|
||
|
//soundName = "01-i094e";
|
||
|
sound = 24;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 25.5) && (lineNumber < 26.5))
|
||
|
{
|
||
|
//soundName = "01-i096e";
|
||
|
sound = 25;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 26.5) && (lineNumber < 27.5))
|
||
|
{
|
||
|
//soundName = "01-i098e";
|
||
|
sound = 26;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
//soundName = "01-i022e";
|
||
|
sound = 27;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed( GameObject * obj, GameObject * killer )
|
||
|
{
|
||
|
//soundName = "Klaxon Loop";
|
||
|
|
||
|
//Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600067 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600068 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600069 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600070 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600071 ) );
|
||
|
}
|
||
|
};
|
||
|
/*
|
||
|
01-I022E "Proper Identification must be worn at all times."
|
||
|
01-I028E "All coded messages must be sent on designated security channel alpha."
|
||
|
01-I030E "In accordance with Brotherhood directive AC-MBM, all messages are monitored."
|
||
|
01-I032E "A visceroid has been spotted in Tiberium Field iota. Containment team en route."
|
||
|
01-I034E "Tiberium value is increasing Worldwide."
|
||
|
01-I036E "Project 'Ezekiel's Cape' has passed initial tests. Prototypes are now in production."
|
||
|
01-I038E "Colonel Shepard's personal aide has been located in Washington D.C. Aquisition team en route."
|
||
|
01-I040E "Anamolous EVA signal detected. Reconnaissance force is being dispatched."
|
||
|
01-I042E "World wide public opinion of the Brotherhood is on the rise."
|
||
|
01-I044E "Refinery technicians have failed to report in. Investigation team en route."
|
||
|
01-I046E "Possible EVA intrusion in message squirt Alpha. Switching to Beta channels."
|
||
|
01-I048E "Incoming transmission for Captain Jones. Captain Jones please report to a secured terminal."
|
||
|
01-I050E "Do you know someone who would make a positive addition to the Brotherhood? Now they can enlist online at 'WWW dot BrotherhoodRecruitment dot Nod' "
|
||
|
01-I062E "Immediately report the presence of visceroids to your supervisor."
|
||
|
01-I066E "Workers found loitering in this area will be terminated."
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Announce_CommCenter_Controller_JDG, "")
|
||
|
{
|
||
|
int total_number_of_sounds;
|
||
|
float announce_delay_min;
|
||
|
float announce_delay_max;
|
||
|
int start_announcements;
|
||
|
int stop_announcements;
|
||
|
int pick_sound;
|
||
|
int play_sound;
|
||
|
int play_klaxon;
|
||
|
|
||
|
int sound;
|
||
|
int klaxon;
|
||
|
|
||
|
Vector3 spkr_1_spot;
|
||
|
Vector3 spkr_2_spot;
|
||
|
Vector3 spkr_3_spot;
|
||
|
Vector3 spkr_4_spot;
|
||
|
Vector3 spkr_5_spot;
|
||
|
Vector3 spkr_6_spot;
|
||
|
Vector3 spkr_7_spot;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( total_number_of_sounds, 1 );
|
||
|
SAVE_VARIABLE( announce_delay_min, 2 );
|
||
|
SAVE_VARIABLE( announce_delay_max, 3 );
|
||
|
SAVE_VARIABLE( start_announcements, 4 );
|
||
|
SAVE_VARIABLE( stop_announcements, 5 );
|
||
|
SAVE_VARIABLE( pick_sound, 6 );
|
||
|
SAVE_VARIABLE( play_sound, 7 );
|
||
|
SAVE_VARIABLE( play_klaxon, 8 );
|
||
|
SAVE_VARIABLE( sound, 9 );
|
||
|
SAVE_VARIABLE( klaxon, 10 );
|
||
|
SAVE_VARIABLE( spkr_1_spot, 11 );
|
||
|
SAVE_VARIABLE( spkr_2_spot, 12 );
|
||
|
SAVE_VARIABLE( spkr_3_spot, 13 );
|
||
|
SAVE_VARIABLE( spkr_4_spot, 14 );
|
||
|
SAVE_VARIABLE( spkr_5_spot, 15 );
|
||
|
SAVE_VARIABLE( spkr_6_spot, 16 );
|
||
|
SAVE_VARIABLE( spkr_7_spot, 17 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
total_number_of_sounds = 15;
|
||
|
announce_delay_min = 20.0;
|
||
|
announce_delay_max = 30.0;
|
||
|
start_announcements = 20;
|
||
|
stop_announcements = 21;
|
||
|
pick_sound = 22;
|
||
|
play_sound = 23;
|
||
|
play_klaxon = 24;
|
||
|
|
||
|
spkr_1_spot.Set(-104.35f,47.83f,-3.54f);
|
||
|
spkr_2_spot.Set(116.1f,46.42f,-3.15f);
|
||
|
spkr_3_spot.Set(-117.04f,41.42f,-5.37f);
|
||
|
spkr_4_spot.Set(-127.57f,65.42f,-5.75f);
|
||
|
spkr_5_spot.Set(-121.95f,59.32f,-4.91f);
|
||
|
spkr_6_spot.Set(-117.48f,45.83f,-3.87f);
|
||
|
spkr_7_spot.Set(-111.25f,43.69f,-2.27f);
|
||
|
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, start_announcements, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == stop_announcements)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
else if (param == start_announcements)
|
||
|
{
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == play_klaxon)
|
||
|
{
|
||
|
char *klaxonNames[2] = {
|
||
|
"Klaxon Warning",
|
||
|
"Klaxon Info"
|
||
|
};
|
||
|
|
||
|
char *klaxonName = klaxonNames[klaxon];
|
||
|
|
||
|
Commands->Create_Sound ( klaxonName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( klaxonName, spkr_7_spot, obj );
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 1.25 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == play_sound)
|
||
|
{
|
||
|
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];
|
||
|
|
||
|
Commands->Create_Sound ( soundName, spkr_1_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_2_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_3_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_4_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_5_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_6_spot, obj );
|
||
|
Commands->Create_Sound ( soundName, spkr_7_spot, obj );
|
||
|
|
||
|
|
||
|
float delayTimer = Commands->Get_Random ( announce_delay_min, announce_delay_max );
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, pick_sound, delayTimer );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (param == pick_sound)
|
||
|
{
|
||
|
|
||
|
float lineNumber = Commands->Get_Random ( 0.5f, total_number_of_sounds+0.5);
|
||
|
|
||
|
if ((lineNumber >= 0.5) && (lineNumber < 1.5))
|
||
|
{
|
||
|
//soundName = "01-i066e";
|
||
|
sound = 0;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 1.5) && (lineNumber < 2.5))
|
||
|
{
|
||
|
//soundName = "01-i028e";
|
||
|
sound = 1;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 2.5) && (lineNumber < 3.5))
|
||
|
{
|
||
|
//soundName = "01-i030e";
|
||
|
sound = 2;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 3.5) && (lineNumber < 4.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i032e";
|
||
|
sound = 3;
|
||
|
//01-I032E "A visceroid has been spotted in Tiberium Field iota. Containment team en route."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 4.5) && (lineNumber < 5.5))
|
||
|
{
|
||
|
//soundName = "01-i034e";
|
||
|
sound = 4;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 5.5) && (lineNumber < 6.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i036e";
|
||
|
sound = 5;
|
||
|
//01-I036E "Project 'Ezekiel's Cape' has passed initial tests. Prototypes are now in production."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 6.5) && (lineNumber < 7.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i038e";
|
||
|
sound = 6;
|
||
|
//01-I038E "Colonel Shepard's personal aide has been located in Washington D.C. Aquisition team en route."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 7.5) && (lineNumber < 8.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i040e";
|
||
|
sound = 7;
|
||
|
//01-I040E "Anamolous EVA signal detected. Reconnaissance force is being dispatched."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 8.5) && (lineNumber < 9.5))
|
||
|
{
|
||
|
//soundName = "01-i042e";
|
||
|
sound = 8;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 9.5) && (lineNumber < 10.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i044e";
|
||
|
sound = 9;
|
||
|
//01-I044E "Refinery technicians have failed to report in. Investigation team en route."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 10.5) && (lineNumber < 11.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Warning";
|
||
|
klaxon = 0;
|
||
|
//soundName = "01-i046e";
|
||
|
sound = 10;
|
||
|
//01-I046E "Possible EVA intrusion in message squirt Alpha. Switching to Beta channels."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 11.5) && (lineNumber < 12.5))
|
||
|
{
|
||
|
//klaxonName = "Klaxon Info";
|
||
|
klaxon = 1;
|
||
|
//soundName = "01-i048e";
|
||
|
sound = 11;
|
||
|
//01-I048E "Incoming transmission for Captain Jones. Captain Jones please report to a secured terminal."
|
||
|
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_klaxon, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 12.5) && (lineNumber < 13.5))
|
||
|
{
|
||
|
//soundName = "01-i050e";
|
||
|
sound = 12;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if ((lineNumber >= 13.5) && (lineNumber < 14.5))
|
||
|
{
|
||
|
//soundName = "01-i062e";
|
||
|
sound = 13;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
//soundName = "01-i022e";
|
||
|
sound = 14;
|
||
|
if (obj) {
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed( GameObject * obj, GameObject * killer )
|
||
|
{
|
||
|
//soundName = "Klaxon Loop";
|
||
|
|
||
|
//Commands->Send_Custom_Event( obj, obj, 0, play_sound, 0 );
|
||
|
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600042 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600056 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600057 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600058 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600059 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600060 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600061 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600062 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600063 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600064 ) );
|
||
|
Commands->Destroy_Object( Commands->Find_Object ( 600065 ) );
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
//Grants initial weapons and key needed for Level 3
|
||
|
DECLARE_SCRIPT(M03_Initial_Powerups, "")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
POWERUP_TIMER,
|
||
|
};
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 0.5f, POWERUP_TIMER);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == POWERUP_TIMER)
|
||
|
{
|
||
|
GameObject *star = Commands->Get_A_Star(Commands->Get_Position(obj));
|
||
|
if (star)
|
||
|
{
|
||
|
Commands->Give_PowerUp(star, "Shotgun Weapon 1 Clip PU");
|
||
|
Commands->Give_PowerUp(star, "Sniper Weapon 1 Clip PU");
|
||
|
Commands->Give_PowerUp(star, "Remote Mine Weapon 1 Clip PU");
|
||
|
Commands->Grant_Key(star, 5, true);
|
||
|
//Commands->Grant_Key(star, 1, true);
|
||
|
char params[20];
|
||
|
sprintf(params, "%d", Commands->Get_ID(obj));
|
||
|
Commands->Attach_Script(star, "M03_Commando_Script", params);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, POWERUP_TIMER);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 12176) && (param == 12176))
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 2.0f, POWERUP_TIMER);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Commando_Script, "Controller_ID:int")
|
||
|
{
|
||
|
bool has_escort;
|
||
|
int follower_id;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(has_escort, 1);
|
||
|
SAVE_VARIABLE(follower_id, 2);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
has_escort = false;
|
||
|
follower_id = 0;
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound & sound)
|
||
|
{
|
||
|
if (sound.Type >= 991)
|
||
|
{
|
||
|
//Commands->Shake_Camera(sound.Position, 25, 0.2f, 1.5f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 3000)
|
||
|
{
|
||
|
int *occupied = (int *)param;
|
||
|
if (occupied != NULL)
|
||
|
{
|
||
|
(*occupied) = has_escort ? 1 : 0;
|
||
|
}
|
||
|
if (has_escort && (Commands->Get_ID(sender) == follower_id))
|
||
|
{
|
||
|
has_escort = false;
|
||
|
follower_id = 0;
|
||
|
if (occupied != NULL)
|
||
|
{
|
||
|
(*occupied) = -1;
|
||
|
}
|
||
|
}
|
||
|
else if (!has_escort)
|
||
|
{
|
||
|
has_escort = true;
|
||
|
follower_id = Commands->Get_ID(sender);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if (type == 3100 && param == 3100)
|
||
|
{
|
||
|
if (Commands->Get_ID(sender) == follower_id)
|
||
|
{
|
||
|
has_escort = false;
|
||
|
follower_id = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
GameObject *con = Commands->Find_Object(Get_Int_Parameter("Controller_ID"));
|
||
|
if (con)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, con, 12176, 12176);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if (has_escort)
|
||
|
{
|
||
|
GameObject *escort = Commands->Find_Object(follower_id);
|
||
|
if (escort)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, escort, 1001, 1001);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// HACK
|
||
|
GameObject *tailgun_zone = Commands->Find_Object(1141168);
|
||
|
if (tailgun_zone)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, tailgun_zone, 300, 300);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Moves the real Commando into position after intro cinematic
|
||
|
DECLARE_SCRIPT(M03_Move_Commando_To_Start, "")
|
||
|
{
|
||
|
enum {M03_COMMANDO_MOVE_TIMER};
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, M03_COMMANDO_MOVE_TIMER);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == M03_COMMANDO_MOVE_TIMER)
|
||
|
{
|
||
|
GameObject *star = Commands->Get_A_Star(Commands->Get_Position(obj));
|
||
|
Vector3 pos = Vector3(-328.09f, 75.65f, 4.25f);
|
||
|
Commands->Set_Position(star, pos);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 100) && (param == 100))
|
||
|
{
|
||
|
GameObject *star = Commands->Get_A_Star(Commands->Get_Position(obj));
|
||
|
Vector3 pos = Vector3(-118.12f,-120.12f,-0.72f);
|
||
|
Commands->Set_Position(star, pos);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Actually creates the GDI soldiers on the Chinook's SPAWNER bone, and attaches them to a slot
|
||
|
DECLARE_SCRIPT(M03_Chinook_Drop_Soldiers_GDI, "Controller_ID:int")
|
||
|
{
|
||
|
int con_id;
|
||
|
int count, count2;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( con_id, 1 );
|
||
|
SAVE_VARIABLE( count, 2);
|
||
|
SAVE_VARIABLE( count2, 2);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
con_id = Get_Int_Parameter("Controller_ID");
|
||
|
count = count2 = 0;
|
||
|
}
|
||
|
|
||
|
int Find_Location(int type)
|
||
|
{
|
||
|
return type - 4001;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
GameObject *soldier;
|
||
|
|
||
|
soldier = Commands->Find_Object(param);
|
||
|
if (type > 4000)
|
||
|
{
|
||
|
if (soldier)
|
||
|
{
|
||
|
char params[80];
|
||
|
sprintf(params, "%d,2000,%d", Find_Location(type), con_id);
|
||
|
Commands->Attach_Script(soldier, "M03_Chinook_Spawned_Soldier_GDI", params);
|
||
|
|
||
|
if (Find_Location(type) == 1)
|
||
|
{
|
||
|
char params2[80];
|
||
|
sprintf(params2, "%d", count);
|
||
|
(++count) %= 3;
|
||
|
Commands->Attach_Script(soldier, "M03_Inlet_Soldier_GDI", params2);
|
||
|
}
|
||
|
if (Find_Location(type) == 0)
|
||
|
{
|
||
|
char params3[80];
|
||
|
sprintf(params3, "%d", count2);
|
||
|
(++count2) %= 3;
|
||
|
Commands->Attach_Script(soldier, "M03_Beach_Soldier_GDI", params3);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Inlet_Soldier_GDI, "Number:int")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
int num = Get_Int_Parameter("Number");
|
||
|
switch (num)
|
||
|
{
|
||
|
case 0: Commands->Set_Innate_Soldier_Home_Location(obj, Vector3(75.0f,-28.0f,2.001f), 5.0f);
|
||
|
break;
|
||
|
case 1: Commands->Set_Innate_Soldier_Home_Location(obj, Vector3(29.0f,-60.0f,2.634f), 5.0f);
|
||
|
break;
|
||
|
case 2: Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 50)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 40, 50);
|
||
|
params.Set_Movement(Vector3(0,0,0), WALK, 1.0f);
|
||
|
params.WaypathID = 1144691;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Beach_Soldier_GDI, "Number:int")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
int num = Get_Int_Parameter("Number");
|
||
|
switch (num)
|
||
|
{
|
||
|
case 0: Commands->Set_Innate_Soldier_Home_Location(obj, Vector3(-112.132f, -54.312f, 7.297f), 2.0f);
|
||
|
break;
|
||
|
case 1: Commands->Set_Innate_Soldier_Home_Location(obj, Vector3(-91.731f, -54.618f, 7.129f), 2.0f);
|
||
|
break;
|
||
|
case 2: Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 50)
|
||
|
{
|
||
|
// Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 40, 50);
|
||
|
params.Set_Movement(Vector3(0,0,0), WALK, 1.0f);
|
||
|
params.WaypathID = 1145037;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Keeps track of current GDI soldiers and brings in area-specific reinforcements when they
|
||
|
//are gone. Also tracks "Fortify Beachhead" objective status
|
||
|
DECLARE_SCRIPT(M03_Chinook_Reinforcements, "Beach_Preset:string, Inlet_Preset:string, Base_Preset:string, Trigger_Count:int")
|
||
|
{
|
||
|
int current[3];
|
||
|
bool active[3];
|
||
|
int count;
|
||
|
int beach_count;
|
||
|
bool objective_completed;
|
||
|
int base_count;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( current, 1 );
|
||
|
SAVE_VARIABLE( active, 2 );
|
||
|
SAVE_VARIABLE( count, 3 );
|
||
|
SAVE_VARIABLE( beach_count, 4 );
|
||
|
SAVE_VARIABLE( objective_completed, 5);
|
||
|
SAVE_VARIABLE(base_count, 6);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{ count = Get_Int_Parameter("Trigger_Count");
|
||
|
beach_count = 0;
|
||
|
base_count = 0;
|
||
|
objective_completed = false;
|
||
|
for (int x = 0; x <3; x++)
|
||
|
{
|
||
|
current[x] = 0;
|
||
|
active[x] = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 2000)
|
||
|
{
|
||
|
if ((param < 0) || (param > 2))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
current[param]++;
|
||
|
|
||
|
if ((param == 0) && (current[0] < 3))
|
||
|
{
|
||
|
if (beach_count >= (3 - current[0]))
|
||
|
{
|
||
|
GameObject *objective_controller;
|
||
|
objective_controller = Commands->Find_Object(1100004);
|
||
|
if (objective_controller && !objective_completed)
|
||
|
{
|
||
|
//Commands->Send_Custom_Event(obj, objective_controller, 301, 1);
|
||
|
//objective_completed = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((current[param] >= count) && (active[param]) && Commands->Find_Object(1100003))
|
||
|
{
|
||
|
current[param] = 0;
|
||
|
GameObject *con;
|
||
|
Commands->Create_Sound("00-N180E", Vector3(0,0,0), obj);
|
||
|
switch (param)
|
||
|
{
|
||
|
case 0:
|
||
|
{/*const char *beach;
|
||
|
beach = Get_Parameter("Beach_Preset");
|
||
|
con = Commands->Create_Object(beach, Vector3(-84.609f, -91.188f, 1.0f));
|
||
|
Commands->Set_Facing(con, 100.0f);*/
|
||
|
|
||
|
GameObject *new_obj = Commands->Create_Object("Invisible_Object", Vector3(-84.609f, -91.188f, 1.0f));
|
||
|
Commands->Set_Facing(new_obj, 190.0f);
|
||
|
Commands->Attach_Script(new_obj, "Test_Cinematic", "X3I_TroopDrop1.txt");
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
case 1: const char *inlet;
|
||
|
inlet = Get_Parameter("Inlet_Preset");
|
||
|
con = Commands->Create_Object(inlet, Vector3(84.398f, -45.703f, 1.0f));
|
||
|
Commands->Set_Facing(con, 100.0f);
|
||
|
break;
|
||
|
case 2: const char *base;
|
||
|
base = Get_Parameter("Base_Preset");
|
||
|
con = Commands->Create_Object(base, Vector3(-94.822f, 15.727f, 10.0f));
|
||
|
Commands->Set_Facing(con, -155.0f);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == 3000)
|
||
|
{
|
||
|
if ((param < 0) || (param > 2))
|
||
|
return;
|
||
|
active[param] = false;
|
||
|
}
|
||
|
|
||
|
if (type == 4000 && param == 4000)
|
||
|
{
|
||
|
base_count++;
|
||
|
if (base_count >= 3)
|
||
|
{
|
||
|
base_count = 0;
|
||
|
current[2] = 2;
|
||
|
Commands->Send_Custom_Event(obj, obj, 2000, 2);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((type == 12000) && (param == 12000))
|
||
|
{
|
||
|
beach_count++;
|
||
|
if ((beach_count >= (3 - current[0])) && (!objective_completed))
|
||
|
{
|
||
|
GameObject *objective_controller;
|
||
|
objective_controller = Commands->Find_Object(1100004);
|
||
|
if (objective_controller && !objective_completed)
|
||
|
{
|
||
|
//Commands->Send_Custom_Event(obj, objective_controller, 301, 1);
|
||
|
//objective_completed = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Script attached to the GDI soldiers once they are spawned from the Chinook. This script
|
||
|
//makes sure they try to attack, listens for beachhead bunker openings, and tells the controller
|
||
|
//when the soldier dies.
|
||
|
DECLARE_SCRIPT(M03_Chinook_Spawned_Soldier_GDI, "Area:int, Send_Type_When_Killed:int, Target_ID:int")
|
||
|
{
|
||
|
int area, send_type, target_id, null_count;
|
||
|
bool in_place, en_route, escorting, diverted;
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
BUNKER_OCCUPY = 50
|
||
|
};
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( area, 1 );
|
||
|
SAVE_VARIABLE( send_type, 2 );
|
||
|
SAVE_VARIABLE( target_id, 3 );
|
||
|
SAVE_VARIABLE( in_place, 4 );
|
||
|
SAVE_VARIABLE( en_route, 5 );
|
||
|
SAVE_VARIABLE( null_count, 6 );
|
||
|
SAVE_VARIABLE( escorting, 7 );
|
||
|
SAVE_VARIABLE( diverted, 8);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
escorting = false;
|
||
|
area = Get_Int_Parameter("Area");
|
||
|
send_type = Get_Int_Parameter("Send_Type_When_Killed");
|
||
|
target_id = Get_Int_Parameter("Target_ID");
|
||
|
in_place = false;
|
||
|
en_route = false;
|
||
|
null_count = 0;
|
||
|
Commands->Set_Innate_Aggressiveness(obj, 0.0f);
|
||
|
Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 9);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 3)
|
||
|
{
|
||
|
if (escorting && diverted)
|
||
|
{
|
||
|
diverted = false;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN - 1, 5);
|
||
|
params.Set_Movement(STAR, 1.0f, 3.0f);
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (timer_id == 9)
|
||
|
{
|
||
|
float distance = Commands->Get_Random(-12.0f, 12.0f);
|
||
|
//distance *= 3;
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
float a = cos(DEG_TO_RADF(facing)) * distance;
|
||
|
float b = sin(DEG_TO_RADF(facing)) * distance;
|
||
|
Vector3 goto_loc = pos + Vector3(a, b, 0.0f);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, 40);
|
||
|
params.Set_Movement(goto_loc, RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
GameObject *target = NULL;
|
||
|
if (null_count < 3)
|
||
|
{
|
||
|
//target = Commands->Find_Closest_Soldier(Commands->Get_Position(obj), 0.0f, 50.0f, true);
|
||
|
}
|
||
|
if ((target == NULL) && (null_count < 3)) {
|
||
|
null_count++;
|
||
|
}
|
||
|
if (!in_place) {
|
||
|
en_route = false;
|
||
|
}
|
||
|
if ((null_count < 3) && (target) && (!in_place))
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_IDLE + 1, 0);
|
||
|
params.Set_Attack(target, 100.0f, 2.0f, true);
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
if (!in_place) {
|
||
|
Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 0)
|
||
|
{
|
||
|
en_route = false;
|
||
|
}
|
||
|
if (action_id == 5 && reason == ACTION_COMPLETE_LOW_PRIORITY && escorting)
|
||
|
{
|
||
|
diverted = true;
|
||
|
Commands->Start_Timer(obj, this, 5.0f, 3);
|
||
|
}
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
else if (action_id != 0)
|
||
|
{
|
||
|
GameObject *bunker;
|
||
|
bunker = Commands->Find_Object(action_id);
|
||
|
if (bunker)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, bunker, 3000, 3000);
|
||
|
}
|
||
|
|
||
|
GameObject *target = Commands->Find_Object(target_id);
|
||
|
if (target)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, target, 12000, 12000);
|
||
|
}
|
||
|
in_place = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject *target = Commands->Find_Object(target_id);
|
||
|
if (target)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, target, send_type, area);
|
||
|
}
|
||
|
if (escorting)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, STAR, 3100, 3100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
int has_escort = 1;
|
||
|
Commands->Send_Custom_Event(obj, poker, 3000, (int)&has_escort);
|
||
|
if (has_escort == 1)
|
||
|
{
|
||
|
|
||
|
/*if (DIFFICULTY == 2)
|
||
|
{
|
||
|
return;
|
||
|
}*/
|
||
|
|
||
|
// Commando already has someone
|
||
|
int id = Commands->Create_Conversation("M03CON041", 99, 200, false);
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Start_Conversation(id, 100041);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
else if (has_escort == 0)
|
||
|
{
|
||
|
// Escort the commando unless we're playing on DIFFICULT
|
||
|
|
||
|
/*if (DIFFICULTY == 2)
|
||
|
{
|
||
|
return;
|
||
|
}*/
|
||
|
|
||
|
if (area == 1)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 2000.0f);
|
||
|
}
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON040",99, 200, false);
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Start_Conversation(id, 100040);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
escorting = true;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN - 1, 5);
|
||
|
params.Set_Movement(STAR, 1.0f, 3.0f);
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
else if (has_escort == -1)
|
||
|
{
|
||
|
|
||
|
if (DIFFICULTY == 2)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// I was following the Commando... no more
|
||
|
int id = Commands->Create_Conversation("M03CON041",99, 200, false);
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Start_Conversation(id, 100041);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
escorting = false;
|
||
|
Commands->Action_Reset(obj, 100);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 999 && param == 999)
|
||
|
{
|
||
|
Vector3 dest = Vector3(0,0,0);
|
||
|
|
||
|
Commands->Action_Reset(obj, 100);
|
||
|
|
||
|
switch (area)
|
||
|
{
|
||
|
case 0: dest.Set(-100, -50, 5.986f);
|
||
|
break;
|
||
|
case 1: dest.Set(87, -58, 1.662f);
|
||
|
break;
|
||
|
case 2: dest.Set(-125, 13, 9.362f);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (escorting)
|
||
|
{
|
||
|
escorting = false;
|
||
|
Commands->Send_Custom_Event(obj, STAR, 3100, 3100);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON042", 99, 200, false);
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Start_Conversation(id, 100042);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, 0);
|
||
|
params.Set_Movement(dest, RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
if (type == 1001 && param == 1001 && escorting)
|
||
|
{
|
||
|
escorting = false;
|
||
|
Vector3 dest = Vector3(0,0,0);
|
||
|
|
||
|
Commands->Action_Reset(obj, 100);
|
||
|
|
||
|
switch (area)
|
||
|
{
|
||
|
case 0: dest.Set(-100, -50, 5.986f);
|
||
|
break;
|
||
|
case 1: dest.Set(87, -58, 1.662f);
|
||
|
break;
|
||
|
case 2: dest.Set(-125, 13, 9.362f);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, 0);
|
||
|
params.Set_Movement(dest, RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Keeps track of the overall objective status for the mission. The outro cinematic will not
|
||
|
//trigger until the primary objectives have all been completed
|
||
|
DECLARE_SCRIPT(M03_Objective_Tracker, "")
|
||
|
{
|
||
|
int number_completed;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( number_completed, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
number_completed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 300) || (type == 308) || (type == 309))
|
||
|
{
|
||
|
if (param == 1)
|
||
|
number_completed++;
|
||
|
}
|
||
|
|
||
|
if ((type == 8000) && (param == 8000))
|
||
|
{
|
||
|
if (sender)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, sender, 8000, number_completed);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Intro_Substitute, "")
|
||
|
{
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (type == 999)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 9998);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
GameObject *target;
|
||
|
target = Commands->Find_Object(1111000);
|
||
|
if (target) {
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, target, 100, 100, 0.0f);
|
||
|
Commands->Send_Custom_Event(obj, target, 200, 200, 420.0f/30.0f);
|
||
|
Commands->Start_Timer(obj, this, 420.0f/30.0f, 0);
|
||
|
}
|
||
|
target = Commands->Find_Object(1100004);
|
||
|
if (target) {
|
||
|
Commands->Start_Timer(obj, this, 8.5f, 9997);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason )
|
||
|
{
|
||
|
GameObject *target;
|
||
|
target = Commands->Find_Object(1100004);
|
||
|
|
||
|
/*if (action_id == 100001)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, target, 300, 3, 0);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON063", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100063);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}*/
|
||
|
|
||
|
if (action_id == 100001)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, target, 300, 3, 0);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100001)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON012", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100012);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
//Commands->Start_Timer(obj, this, 20.0f, 9999);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100039)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON001", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100001);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100012)
|
||
|
{
|
||
|
//int id = Commands->Create_Conversation("M03CON064", 99, 2000, false);
|
||
|
//Commands->Join_Conversation(NULL, id);
|
||
|
//Commands->Start_Conversation(id, 100064);
|
||
|
//Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, target, 301, 3, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 9997)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON039", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100039);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Alternate_Sam_Site, "Chinook_Controller_ID:int")
|
||
|
{
|
||
|
bool spoke;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(spoke, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
spoke = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (Commands->Find_Object(1100003) == NULL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
GameObject *chinook = Commands->Find_Object(param);
|
||
|
GameObject *target = Commands->Create_Object("Invisible_Object", Vector3(5,5,5));
|
||
|
if (chinook) {
|
||
|
char parameters[40];
|
||
|
int con_id = Get_Int_Parameter("Chinook_Controller_ID");
|
||
|
sprintf(parameters, "%d,%d", con_id, Commands->Get_ID(target));
|
||
|
Commands->Attach_Script(chinook, "M03_Destroyed_Chinook", parameters);
|
||
|
}
|
||
|
Commands->Attach_To_Object_Bone(target, chinook, "ROTOR00");
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 0);
|
||
|
params.Set_Attack(target, 0.0f, 0.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
Commands->Start_Timer(obj, this, 1.0f, Commands->Get_ID(target));
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
GameObject *target = Commands->Find_Object(timer_id);
|
||
|
Vector3 obj_pos = Commands->Get_Position(obj);
|
||
|
Vector3 target_pos;
|
||
|
if (target) {
|
||
|
target_pos = Commands->Get_Position(target);
|
||
|
}
|
||
|
if (target)
|
||
|
{
|
||
|
float range = Commands->Get_Distance(obj_pos, target_pos);
|
||
|
if (range <= 60.0f)
|
||
|
{
|
||
|
/*if (!spoke)
|
||
|
{
|
||
|
spoke = true;
|
||
|
int id = Commands->Create_Conversation("Chinook_Fodder_Dead");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(Commands->Get_A_Star(Vector3(0,0,0)), id);
|
||
|
Commands->Start_Conversation(id);
|
||
|
}*/
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 0);
|
||
|
params.Set_Attack(target, 200.0f, 0.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
Commands->Start_Timer(obj, this, 1.0f, timer_id);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Flyover_Controller, "")
|
||
|
{
|
||
|
int last;
|
||
|
bool comanches;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(last, 1);
|
||
|
SAVE_VARIABLE(comanches, 2);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 25.0f, 0);
|
||
|
last = 21;
|
||
|
comanches = true;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 511 && param == 511)
|
||
|
{
|
||
|
comanches = false;
|
||
|
}
|
||
|
if (type == 512 && param == 512)
|
||
|
{
|
||
|
comanches = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
char *flyovers[17] =
|
||
|
{
|
||
|
"A-10_1.txt",
|
||
|
"A-10_2.txt",
|
||
|
"A-10_3.txt",
|
||
|
"A-10_4.txt",
|
||
|
"A-10_5.txt",
|
||
|
"A-10_6.txt",
|
||
|
"Orca_1.txt",
|
||
|
"Orca_2.txt",
|
||
|
"Orca_3.txt",
|
||
|
"Orca_4.txt",
|
||
|
"Orca_5.txt",
|
||
|
"Orca_1.txt",
|
||
|
"Orca_2.txt",
|
||
|
"Orca_3.txt",
|
||
|
"Orca_4.txt",
|
||
|
"Orca_5.txt",
|
||
|
"Orca_6.txt"
|
||
|
};
|
||
|
int random = int(Commands->Get_Random(0, 17-WWMATH_EPSILON));
|
||
|
if (!comanches && random > 5 && random < 11)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 25.0f, 0);
|
||
|
return;
|
||
|
}
|
||
|
while (random == last)
|
||
|
{
|
||
|
random = int(Commands->Get_Random(0, 17-WWMATH_EPSILON));
|
||
|
}
|
||
|
GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
|
||
|
Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]);
|
||
|
Commands->Start_Timer(obj, this, 25.0f, 0);
|
||
|
last = random;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Destroyed_Chinook, "Controller_ID:int, Simple_ID:int")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
/*int id = Commands->Create_Conversation("Chinook_Fodder_Scream", 100);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
|
||
|
GameObject *con = Commands->Find_Object(Get_Int_Parameter("Controller_ID"));
|
||
|
GameObject *sim = Commands->Find_Object(Get_Int_Parameter("Simple_ID"));
|
||
|
if (con) {
|
||
|
Commands->Destroy_Object(con);
|
||
|
}
|
||
|
if (sim) {
|
||
|
Commands->Destroy_Object(sim);
|
||
|
}
|
||
|
Commands->Create_Explosion_At_Bone("Air Explosions Twiddler", obj, "SEAT1", killer);
|
||
|
Commands->Create_Explosion_At_Bone("Air Explosions Twiddler", obj, "ROTOR01", killer);
|
||
|
/*GameObject *obj_con = Commands->Find_Object(1100004);
|
||
|
if (obj_con) {
|
||
|
Commands->Send_Custom_Event(obj, obj_con, 302, 3);
|
||
|
}*/
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Chinook_Fodder_Creator, "")
|
||
|
{
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (Commands->Find_Object(1100003) == NULL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if ((type == 3000) && (param == 3000))
|
||
|
{
|
||
|
GameObject *obj_con = Commands->Find_Object(1100004);
|
||
|
if (obj_con)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, obj_con, 302, 3);
|
||
|
}
|
||
|
//Commands->Attach_Script(obj, "Test_Cinematic", "ChinookTest.txt");
|
||
|
//Commands->Start_Timer(obj, this, 9.5f, 9998);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject *obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 9998)
|
||
|
{
|
||
|
//Commands->Create_Sound("00-N180E", Vector3(0,0,0), obj);
|
||
|
int id = Commands->Create_Conversation("M03CON043", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100043);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
//Commands->Attach_Script(obj, "M03_Chinook_Troop_Drop", "ChinookTest.txt, 78.08 -36.88 1.20, 130.00");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete (GameObject *obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 100043)
|
||
|
{
|
||
|
GameObject *obj_con = Commands->Find_Object(1100004);
|
||
|
if (obj_con)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, obj_con, 302, 3);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Tailgun, "Controller_ID:int")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject *con = Commands->Find_Object(Get_Int_Parameter("Controller_ID"));
|
||
|
if (con) {
|
||
|
Commands->Send_Custom_Event(obj, con, 200, 200);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Tailgun_Fodder_Zone, "Spawner_ID_1:int, Spawner_ID_2:int, Spawner_ID_3:int")
|
||
|
{
|
||
|
bool active;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(active, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
active = true;
|
||
|
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_1"), false);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_2"), false);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_3"), false);
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
{
|
||
|
if (!active)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_1"), true);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_2"), true);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_3"), true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Exited(GameObject * obj, GameObject * exiter)
|
||
|
{
|
||
|
{
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_1"), false);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_2"), false);
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_ID_3"), false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 5000)
|
||
|
{
|
||
|
if (param == 1)
|
||
|
{
|
||
|
active = true;
|
||
|
}
|
||
|
else if (param == 2)
|
||
|
{
|
||
|
active = false;
|
||
|
Exited(obj, STAR);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((type == 200) && (param == 200))
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
|
||
|
if (type == 300 && param == 300)
|
||
|
{
|
||
|
Exited(obj, sender);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Tailgun_Fodder, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Action_Reset(obj, 99);
|
||
|
GameObject *star = Commands->Get_A_Star(Commands->Get_Position(obj));
|
||
|
if (star)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 0);
|
||
|
params.Set_Attack(star, 200.0f, 2.0f - (float)DIFFICULTY, true);
|
||
|
params.Set_Movement(star, RUN, 5.0f);
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Tiberium_Cave_Stay_Put ,"")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 10.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Big_Gun_Explosion, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Create_3D_Sound_At_Bone("Explosion_Large_07", obj, "O_WREAKAGE");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Inlet_Nod_Reinforcements, "")
|
||
|
{
|
||
|
#define SPOT1 (Vector3(51.0f, -91.0f, 2.0f))
|
||
|
#define SPOT2 (Vector3(97.0f, -46.0f, 2.0f))
|
||
|
#define SPOT3 (Vector3(64.0f, -32.0f, 2.0f))
|
||
|
#define FACE1 75.0f
|
||
|
#define FACE2 170.0f
|
||
|
#define FACE3 70.0f
|
||
|
|
||
|
int count;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( count, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
count = 0;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 0)
|
||
|
{
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", SPOT1);
|
||
|
Commands->Set_Facing(con, FACE1);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
|
||
|
if (timer_id == 1)
|
||
|
{
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", SPOT2);
|
||
|
Commands->Set_Facing(con, FACE2);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
|
||
|
if (timer_id == 2)
|
||
|
{
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", SPOT3);
|
||
|
Commands->Set_Facing(con, FACE3);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if ((type == 300) && (param == 300))
|
||
|
{
|
||
|
count++;
|
||
|
}
|
||
|
|
||
|
if (count >= 2)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
Commands->Start_Timer(obj, this, 4.3f, 1);
|
||
|
Commands->Start_Timer(obj, this, 8.1f, 2);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Base_Patrol, "WaypathID:int")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
//params.Set_Basic(this, INNATE_PRIORITY_BULLET_HEARD - 1, 0);
|
||
|
params.Set_Basic(this, 49, 0);
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, false);
|
||
|
params.Set_Movement(Vector3(0,0,0), WALK, 1.0f);
|
||
|
params.WaypathID = Get_Int_Parameter("WaypathID");
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 0 && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Base_Harvester, "Tiberium_Loc:vector3, Dock_Location:vector3, Dock_Entrance:vector3, Sakura_Dest:vector3")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
HARVESTER_GOTO_TIBERIUM,
|
||
|
HARVESTER_HARVEST_MOVE,
|
||
|
HARVESTER_DOCK,
|
||
|
HARVESTER_BEAT_IT,
|
||
|
HARVESTER_CHASE_PLAYER,
|
||
|
DOCK_TIMER
|
||
|
};
|
||
|
|
||
|
int harvest_count, anim_count;
|
||
|
bool docked, playing_anim, power_off;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(harvest_count, 1);
|
||
|
SAVE_VARIABLE(docked, 2);
|
||
|
SAVE_VARIABLE(playing_anim, 3);
|
||
|
SAVE_VARIABLE(anim_count, 4);
|
||
|
SAVE_VARIABLE(power_off, 5);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
harvest_count = 0;
|
||
|
docked = false;
|
||
|
playing_anim = false;
|
||
|
anim_count = 0;
|
||
|
power_off = false;
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, HARVESTER_GOTO_TIBERIUM);
|
||
|
params.Set_Movement(Get_Vector3_Parameter("Tiberium_Loc"), 1.0f, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Animation_Complete(GameObject * obj, const char *anim)
|
||
|
{
|
||
|
if (playing_anim)
|
||
|
{
|
||
|
anim_count++;
|
||
|
if (anim_count >= 3)
|
||
|
{
|
||
|
playing_anim = false;
|
||
|
anim_count = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", false);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (harvest_count >= 4)
|
||
|
{
|
||
|
harvest_count = 0;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, HARVESTER_DOCK);
|
||
|
params.Set_Movement(Vector3(0,0,0), 1.0f, 1.0f);
|
||
|
params.Dock_Vehicle(Get_Vector3_Parameter("Dock_Location"), Get_Vector3_Parameter("Dock_Entrance"));
|
||
|
Commands->Action_Dock(obj, params);
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
harvest_count++;
|
||
|
Gather_Tiberium();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (action_id == HARVESTER_GOTO_TIBERIUM)
|
||
|
{
|
||
|
Gather_Tiberium();
|
||
|
}
|
||
|
|
||
|
if (action_id == HARVESTER_DOCK)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, power_off ? 55.0f : 35.0f, DOCK_TIMER);
|
||
|
}
|
||
|
|
||
|
if (action_id == HARVESTER_HARVEST_MOVE)
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", false);
|
||
|
playing_anim = true;
|
||
|
}
|
||
|
if (action_id == HARVESTER_BEAT_IT)
|
||
|
{
|
||
|
docked = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, HARVESTER_GOTO_TIBERIUM);
|
||
|
params.Set_Movement(Get_Vector3_Parameter("Tiberium_Loc"), 1.0f, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Gather_Tiberium(void)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, HARVESTER_HARVEST_MOVE);
|
||
|
Vector3 loc = Commands->Get_Position(Owner());
|
||
|
loc.X += Commands->Get_Random(-3.0f, 3.0f);
|
||
|
loc.Y += Commands->Get_Random(-3.0f, 3.0f);
|
||
|
params.Set_Movement(loc, 1.0f, 1.0f);
|
||
|
Commands->Action_Goto(Owner(), params);
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 622 && param == 622)
|
||
|
{
|
||
|
Commands->Set_Animation(obj, NULL, false);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, HARVESTER_BEAT_IT);
|
||
|
params.Set_Movement(Vector3(0,0,0), 1.0f, 1.0f);
|
||
|
params.Dock_Vehicle(Get_Vector3_Parameter("Dock_Location"), Get_Vector3_Parameter("Dock_Entrance"));
|
||
|
Commands->Action_Dock(obj, params);
|
||
|
}
|
||
|
if (type == 722 && param == 722 && !docked)
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "V_NOD_HRVSTR.V_NOD_HRVSTR", true);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, HARVESTER_CHASE_PLAYER);
|
||
|
params.Set_Movement(STAR, ((float)DIFFICULTY / 10.0f) + 0.8f, 0.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
if (type ==7800 && param == 7800)
|
||
|
{
|
||
|
power_off = true;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Wheres_The_Star, "Controller_ID:int, Type:int, Param:int")
|
||
|
{
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
GameObject * controller = Commands->Find_Object(Get_Int_Parameter("Controller_ID"));
|
||
|
Commands->Send_Custom_Event(obj, controller, Get_Int_Parameter("Type"), Get_Int_Parameter("Param"));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Reinforce_Area, "")
|
||
|
{
|
||
|
#define INLET_POSITION1 Vector3(99.85f, -49.51f, 2.0f)
|
||
|
#define BASE_POSITION1 Vector3(-138.0f, 50.0f, 9.5f)
|
||
|
#define INLET_FACING1 170.0f
|
||
|
#define BASE_FACING1 -30.0f
|
||
|
#define INLET_POSITION2 Vector3(51.0f, -91.0f, 2.0f)
|
||
|
#define BASE_POSITION2 Vector3(-79.0f, 59.0f, 9.5f)
|
||
|
#define INLET_FACING2 75.0f
|
||
|
#define BASE_FACING2 -120.0f
|
||
|
#define BEACH_POSITION Vector3(-95.656f, -68.236f, 1.433f)
|
||
|
#define BEACH_FACING -180.0f
|
||
|
|
||
|
bool inlet_active, base_active, beach_active;
|
||
|
bool switcher, forced;
|
||
|
int count;
|
||
|
int target_killed[3];
|
||
|
int custom_count[3];
|
||
|
int max_reinforcements[3];
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(inlet_active, 1);
|
||
|
SAVE_VARIABLE(base_active, 2);
|
||
|
SAVE_VARIABLE(count, 3);
|
||
|
SAVE_VARIABLE(switcher, 4);
|
||
|
SAVE_VARIABLE(beach_active, 5);
|
||
|
SAVE_VARIABLE(target_killed, 6);
|
||
|
SAVE_VARIABLE(custom_count, 7);
|
||
|
SAVE_VARIABLE(forced, 8);
|
||
|
SAVE_VARIABLE(max_reinforcements, 9);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
inlet_active = base_active = switcher = false;
|
||
|
beach_active = true;
|
||
|
count = 0;
|
||
|
target_killed[0] = target_killed[1] = target_killed[2] = 3;
|
||
|
custom_count[0] = custom_count[1] = 1;
|
||
|
custom_count[2] = 0;
|
||
|
max_reinforcements[0] = max_reinforcements[1] = max_reinforcements[2] = 2;
|
||
|
forced = false;
|
||
|
}
|
||
|
|
||
|
/*void Reinforce(void)
|
||
|
{
|
||
|
GameObject * officer1 = Commands->Find_Object (300009);
|
||
|
GameObject * officer2 = Commands->Find_Object (300010);
|
||
|
|
||
|
/*if (inlet_active)
|
||
|
{
|
||
|
if (officer1 || officer2)
|
||
|
{
|
||
|
Commands->Start_Timer(Commands->Find_Object (1144444), this, 3.0f, INLET_REINFORCE);
|
||
|
}
|
||
|
}*/
|
||
|
|
||
|
/*else if (base_active)
|
||
|
{
|
||
|
if (max_reinforcements[2]-- <= 0)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", (switcher) ? BASE_POSITION1 : BASE_POSITION2);
|
||
|
Commands->Set_Facing(con, (switcher) ? BASE_FACING1 : BASE_FACING2);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
if (!forced)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), Owner(), 7000, 2);
|
||
|
}
|
||
|
}*/
|
||
|
|
||
|
/*else if (beach_active)
|
||
|
{
|
||
|
if (max_reinforcements[0]-- <= 0)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (officer3 || officer4 || officer5)
|
||
|
{
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", BEACH_POSITION);
|
||
|
Commands->Set_Facing(con, BEACH_FACING);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
if (!forced)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), Owner(), 7000, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 5000)
|
||
|
{
|
||
|
int *area = (int *)param;
|
||
|
if (beach_active)
|
||
|
{
|
||
|
*area = 0;
|
||
|
}
|
||
|
else if (inlet_active)
|
||
|
{
|
||
|
*area = 1;
|
||
|
}
|
||
|
else if (base_active)
|
||
|
{
|
||
|
*area = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
*area = -1;
|
||
|
}
|
||
|
}
|
||
|
if (type == 6300)
|
||
|
{
|
||
|
int *target_count = (int *)param;
|
||
|
if (beach_active)
|
||
|
{
|
||
|
*target_count = target_killed[0];
|
||
|
}
|
||
|
else if (inlet_active)
|
||
|
{
|
||
|
*target_count = target_killed[1];
|
||
|
}
|
||
|
else if (base_active)
|
||
|
{
|
||
|
*target_count = target_killed[2];
|
||
|
}
|
||
|
}
|
||
|
if (type == 6000 && param == 6000)
|
||
|
{
|
||
|
if ((beach_active && target_killed[0] != 1000) || (inlet_active && target_killed[1] != 1000) || (base_active && target_killed[2] != 1000))
|
||
|
{
|
||
|
forced = true;
|
||
|
/*int id = Commands->Create_Conversation("Nod_Reinforcements", 100);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(Commands->Get_A_Star(Vector3(0,0,0)), id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
if (type == 8000)
|
||
|
{
|
||
|
custom_count[param]++;
|
||
|
if (custom_count[param] >= 2)
|
||
|
{
|
||
|
custom_count[param] = 1;
|
||
|
if (param == 2)
|
||
|
{
|
||
|
custom_count[param] = 0;
|
||
|
}
|
||
|
target_killed[param]++;
|
||
|
if (target_killed[param] >= 6)
|
||
|
{
|
||
|
target_killed[param] = 1000;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (type == 0 && param == 2)
|
||
|
{
|
||
|
beach_active = false;
|
||
|
}
|
||
|
if (type == 1 && param == 1)
|
||
|
{
|
||
|
inlet_active = true;
|
||
|
}
|
||
|
if (type == 1 && param == 2)
|
||
|
{
|
||
|
inlet_active = false;
|
||
|
}
|
||
|
if (type == 2 && param == 1)
|
||
|
{
|
||
|
base_active = true;
|
||
|
}
|
||
|
if (type == 2 && param == 2)
|
||
|
{
|
||
|
base_active = false;
|
||
|
}
|
||
|
if (type == 1000 && param == 1000 && (inlet_active || base_active || beach_active))
|
||
|
{
|
||
|
count++;
|
||
|
if ((beach_active && count >= target_killed[0]) || (inlet_active && count >= target_killed[1]) || (base_active && count >= target_killed[2]))
|
||
|
{
|
||
|
forced = false;
|
||
|
/*int id = Commands->Create_Conversation("Nod_Reinforcements", 100);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(Commands->Get_A_Star(Vector3(0,0,0)), id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 0);
|
||
|
count = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == UPDATE)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, sender, BASE, base_active);
|
||
|
Commands->Send_Custom_Event(obj, sender, INLET, inlet_active);
|
||
|
Commands->Send_Custom_Event(obj, sender, BEACH, beach_active);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 0)
|
||
|
{
|
||
|
switcher = !switcher;
|
||
|
//Reinforce();
|
||
|
}
|
||
|
|
||
|
if (timer_id == INLET_REINFORCE)
|
||
|
{
|
||
|
if (max_reinforcements[1]-- <= 0)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", (switcher) ? INLET_POSITION1 : INLET_POSITION2);
|
||
|
Commands->Set_Facing(con, (switcher) ? INLET_FACING1 : INLET_FACING2);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
if (!forced)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), Owner(), 7000, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Officer_With_Key_Card, "")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if (!Commands->Has_Key(killer, 1))
|
||
|
{
|
||
|
Vector3 pos = Commands->Get_Position(obj) + Vector3(0,0,0.5);
|
||
|
GameObject * key = Commands->Create_Object("Level_01_Keycard", pos);
|
||
|
Commands->Attach_Script(key, "M03_Key_Card", "");
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON005", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100005);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Officer_With_Key_Card2, "")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if (!Commands->Has_Key(killer, 2))
|
||
|
{
|
||
|
Vector3 pos = Commands->Get_Position(obj) + Vector3(0,0,0.5);
|
||
|
Commands->Create_Object("Level_02_Keycard", pos);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Key_Card, "")
|
||
|
{
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
GameObject * con = Commands->Find_Object(1100004);
|
||
|
if (con)
|
||
|
{
|
||
|
//Commands->Send_Custom_Event(obj, con, 307, 3);
|
||
|
Commands->Send_Custom_Event(obj, con, 307, 1);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Chinook_ParaDrop, "Preset:string")
|
||
|
{
|
||
|
int chinook_id;
|
||
|
bool dead;
|
||
|
int out;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(chinook_id, 1);
|
||
|
SAVE_VARIABLE(dead, 2);
|
||
|
SAVE_VARIABLE(out, 3);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Vector3 loc = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
|
||
|
GameObject *chinook_rail = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Model(chinook_rail, "X5D_Chinookfly");
|
||
|
Commands->Set_Facing(chinook_rail, facing);
|
||
|
Commands->Set_Animation(chinook_rail, "X5D_Chinookfly.X5D_Chinookfly", false);
|
||
|
GameObject *chinook = Commands->Create_Object("Nod_Transport_Helicopter", loc);
|
||
|
Commands->Set_Facing(chinook, facing);
|
||
|
Commands->Set_Animation(chinook, "v_Nod_trnspt.XG_RTN_TrnsptA", true);
|
||
|
Commands->Attach_To_Object_Bone(chinook, chinook_rail, "BN_Chinook_1");
|
||
|
|
||
|
dead = false;
|
||
|
out = 0;
|
||
|
char params[10];
|
||
|
sprintf(params, "%d", Commands->Get_ID(obj));
|
||
|
Commands->Attach_Script(chinook, "M03_Reinforcement_Chinook", params);
|
||
|
|
||
|
chinook_id = Commands->Get_ID(chinook);
|
||
|
|
||
|
// Destroy Chinook
|
||
|
Commands->Start_Timer(obj, this, 280.0f/30.0f, 0);
|
||
|
// Parachutes
|
||
|
Commands->Start_Timer(obj, this, 169.0f/30.0f, 1);
|
||
|
Commands->Start_Timer(obj, this, 179.0f/30.0f, 2);
|
||
|
Commands->Start_Timer(obj, this, 198.0f/30.0f, 3);
|
||
|
// Soldiers
|
||
|
Commands->Start_Timer(obj, this, 145.0f/30.0f, 4);
|
||
|
Commands->Start_Timer(obj, this, 155.0f/30.0f, 5);
|
||
|
Commands->Start_Timer(obj, this, 165.0f/30.0f, 6);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
Vector3 loc = Commands->Get_Position(obj);
|
||
|
const char * preset = Get_Parameter("Preset");
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
|
||
|
switch (timer_id)
|
||
|
{
|
||
|
case 0:
|
||
|
GameObject *chinook;
|
||
|
chinook = Commands->Find_Object(chinook_id);
|
||
|
Commands->Destroy_Object(chinook);
|
||
|
break;
|
||
|
case 1:
|
||
|
if (out >= 1)
|
||
|
{
|
||
|
GameObject *para1;
|
||
|
para1 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Facing(para1, facing);
|
||
|
Commands->Set_Model(para1, "X5D_Parachute");
|
||
|
Commands->Set_Animation(para1, "X5D_Parachute.X5D_ParaC_1", false);
|
||
|
Commands->Create_3D_Sound_At_Bone("parachute_open", para1, "ROOTTRANSFORM");
|
||
|
Commands->Attach_Script(para1, "M03_No_More_Parachute", "");
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
if (out >= 2)
|
||
|
{
|
||
|
GameObject *para2;
|
||
|
para2 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Facing(para2, facing);
|
||
|
Commands->Set_Model(para2, "X5D_Parachute");
|
||
|
Commands->Set_Animation(para2, "X5D_Parachute.X5D_ParaC_2", false);
|
||
|
Commands->Create_3D_Sound_At_Bone("parachute_open", para2, "ROOTTRANSFORM");
|
||
|
Commands->Attach_Script(para2, "M03_No_More_Parachute", "");
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
if (out == 3)
|
||
|
{
|
||
|
GameObject *para3;
|
||
|
para3 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Facing(para3, facing);
|
||
|
Commands->Set_Model(para3, "X5D_Parachute");
|
||
|
Commands->Set_Animation(para3, "X5D_Parachute.X5D_ParaC_3", false);
|
||
|
Commands->Create_3D_Sound_At_Bone("parachute_open", para3, "ROOTTRANSFORM");
|
||
|
Commands->Attach_Script(para3, "M03_No_More_Parachute", "");
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
if (!dead)
|
||
|
{
|
||
|
|
||
|
GameObject *box1 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Model(box1, "X5D_Box01");
|
||
|
Commands->Set_Facing(box1, facing);
|
||
|
Commands->Set_Animation(box1, "X5D_Box01.X5D_Box01", false);
|
||
|
|
||
|
GameObject *soldier1;
|
||
|
soldier1 = Commands->Create_Object_At_Bone(box1, preset, "Box01");
|
||
|
Commands->Set_Facing(soldier1, facing);
|
||
|
Commands->Attach_Script(soldier1, "RMV_Trigger_Killed", "1144444, 1000, 1000");
|
||
|
Commands->Attach_Script(soldier1, "M03_Killed_Sound", "");
|
||
|
Commands->Attach_Script(soldier1, "M03_Paratrooper_Run", "");
|
||
|
Commands->Attach_Script(soldier1, "DLS_Volcano_Stumble", "");
|
||
|
Commands->Attach_To_Object_Bone( soldier1, box1, "Box01" );
|
||
|
Commands->Set_Animation(soldier1, "s_a_human.H_A_X5D_ParaT_1", false);
|
||
|
out++;
|
||
|
/*if ((out - 1) == DIFFICULTY)
|
||
|
{
|
||
|
dead = true;
|
||
|
}*/
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
case 5:
|
||
|
if (!dead)
|
||
|
{
|
||
|
|
||
|
GameObject *box2 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Model(box2, "X5D_Box02");
|
||
|
Commands->Set_Facing(box2, facing);
|
||
|
Commands->Set_Animation(box2, "X5D_Box02.X5D_Box02", false);
|
||
|
|
||
|
GameObject *soldier2;
|
||
|
soldier2 = Commands->Create_Object_At_Bone(box2, preset, "Box02");
|
||
|
Commands->Set_Facing(soldier2, facing);
|
||
|
Commands->Attach_Script(soldier2, "RMV_Trigger_Killed", "1144444, 1000, 1000");
|
||
|
Commands->Attach_Script(soldier2, "M03_Killed_Sound", "");
|
||
|
Commands->Attach_Script(soldier2, "M03_Paratrooper_Run", "");
|
||
|
Commands->Attach_Script(soldier2, "DLS_Volcano_Stumble", "");
|
||
|
Commands->Set_Animation(soldier2, "s_a_human.H_A_X5D_ParaT_2", false);
|
||
|
Commands->Attach_To_Object_Bone( soldier2, box2, "Box02" );
|
||
|
out++;
|
||
|
/*if ((out - 1) == DIFFICULTY)
|
||
|
{
|
||
|
dead = true;
|
||
|
}*/
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
case 6:
|
||
|
if (!dead)
|
||
|
{
|
||
|
|
||
|
GameObject *box3 = Commands->Create_Object("Generic_Cinematic", loc);
|
||
|
Commands->Set_Model(box3, "X5D_Box03");
|
||
|
Commands->Set_Facing(box3, facing);
|
||
|
Commands->Set_Animation(box3, "X5D_Box03.X5D_Box03", false);
|
||
|
|
||
|
GameObject *soldier3;
|
||
|
soldier3 = Commands->Create_Object_At_Bone(box3, preset, "Box03");
|
||
|
Commands->Set_Facing(soldier3, facing);
|
||
|
Commands->Attach_Script(soldier3, "RMV_Trigger_Killed", "1144444, 1000, 1000");
|
||
|
Commands->Attach_Script(soldier3, "M03_Killed_Sound", "");
|
||
|
Commands->Attach_Script(soldier3, "M03_Paratrooper_Run", "");
|
||
|
Commands->Attach_Script(soldier3, "DLS_Volcano_Stumble", "");
|
||
|
Commands->Set_Animation(soldier3, "s_a_human.H_A_X5D_ParaT_3", false);
|
||
|
Commands->Attach_To_Object_Bone( soldier3, box3, "Box03" );
|
||
|
out++;
|
||
|
/*if ((out - 1) == DIFFICULTY)
|
||
|
{
|
||
|
dead = true;
|
||
|
}*/
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 23000 && param == 23000)
|
||
|
{
|
||
|
dead = true;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_No_More_Parachute, "")
|
||
|
{
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
Commands->Create_3D_Sound_At_Bone("parachute_away", obj, "ROOTTRANSFORM");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Reinforcement_Chinook, "Controller_ID:int")
|
||
|
{
|
||
|
int sound_id;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(sound_id, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
sound_id = Commands->Create_3D_Sound_At_Bone("Chinook_Idle_01", obj, "V_FUSELAGE");
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject * con = Commands->Find_Object(Get_Int_Parameter(0));
|
||
|
Commands->Send_Custom_Event(obj, con, 23000, 23000);
|
||
|
}
|
||
|
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
Commands->Stop_Sound(sound_id, true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Staged_Conversation_1, "Soldier_1_ID:int, Soldier_2_ID:int")
|
||
|
{
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 1000 && param == 1000)
|
||
|
{
|
||
|
GameObject * soldier1 = Commands->Find_Object(Get_Int_Parameter(0));
|
||
|
GameObject * soldier2 = Commands->Find_Object(Get_Int_Parameter(1));
|
||
|
if (soldier1 && soldier2)
|
||
|
{
|
||
|
/*int id = Commands->Create_Conversation("Volcano", INNATE_PRIORITY_ENEMY_SEEN - 1, 20.0f, true);
|
||
|
Commands->Join_Conversation(soldier1, id);
|
||
|
Commands->Join_Conversation(soldier2, id);
|
||
|
Commands->Start_Conversation(id);
|
||
|
Commands->Monitor_Conversation(obj, id);*/
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
GameObject * soldier1 = Commands->Find_Object(Get_Int_Parameter(0));
|
||
|
GameObject * soldier2 = Commands->Find_Object(Get_Int_Parameter(1));
|
||
|
if (soldier1)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, soldier1, 100, 100);
|
||
|
}
|
||
|
if (soldier2)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, soldier2, 100, 100);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Staged_Conversation_Soldier, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 0.5f, 0);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, false);
|
||
|
Commands->Innate_Soldier_Enable_Gunshot_Heard(obj, false);
|
||
|
Commands->Innate_Soldier_Enable_Bullet_Heard(obj, false);
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject * enemy)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Gunshot_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Bullet_Heard(obj, true);
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Gunshot_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Bullet_Heard(obj, true);
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
Commands->Innate_Soldier_Enable_Footsteps_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Gunshot_Heard(obj, true);
|
||
|
Commands->Innate_Soldier_Enable_Bullet_Heard(obj, true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Beach_Turret, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
GameObject * gunboat = Commands->Find_Object(1100003);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, 0);
|
||
|
params.Set_Attack(gunboat, 300.0f, 6.0f - (float)DIFFICULTY, true);
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Vector3 my_pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
GameObject * destroyed_turret = Commands->Create_Object("Nod_Turret_Destroyed", my_pos);
|
||
|
Commands->Set_Facing(destroyed_turret, facing);
|
||
|
Commands->Attach_Script(destroyed_turret, "M03_Destroyed_Turret", "");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_SAM_Site_Logic, "")
|
||
|
{
|
||
|
bool target_acquired;
|
||
|
int current, ignore_ids[10];
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(target_acquired, 1);
|
||
|
SAVE_VARIABLE(ignore_ids, 2);
|
||
|
SAVE_VARIABLE(current, 3);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
target_acquired = false;
|
||
|
current = 0;
|
||
|
for (int x = 0; x < 10; x++)
|
||
|
{
|
||
|
ignore_ids[x] = 0;
|
||
|
}
|
||
|
Commands->Start_Timer(obj, this, Commands->Get_Random(2, 3), 1);
|
||
|
}
|
||
|
|
||
|
bool Is_Ignore_Target(int id)
|
||
|
{
|
||
|
bool retval = false;
|
||
|
for (int x = 0; x < current; x++)
|
||
|
{
|
||
|
if (ignore_ids[x] == id)
|
||
|
{
|
||
|
retval = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject * enemy)
|
||
|
{
|
||
|
if (target_acquired)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (Commands->Is_A_Star(enemy) || Is_Ignore_Target(Commands->Get_ID(enemy)))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Vector3 target_pos = Commands->Get_Position(enemy);
|
||
|
Vector3 my_pos = Commands->Get_Position(obj);
|
||
|
if (target_pos.Z - my_pos.Z >= 5.0f)
|
||
|
{
|
||
|
target_acquired = true;
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 90, 0);
|
||
|
params.Set_Attack(enemy, 500.0f, 0.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
Commands->Start_Timer(obj, this, 2.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 0)
|
||
|
{
|
||
|
target_acquired = false;
|
||
|
Commands->Action_Reset(obj, 95);
|
||
|
}
|
||
|
if (timer_id == 1)
|
||
|
{
|
||
|
Vector3 my_target = Commands->Get_Position(obj);
|
||
|
my_target.X += Commands->Get_Random( -10.0f , 10.0f);
|
||
|
my_target.Y += Commands->Get_Random( -10.0f , 10.0f);
|
||
|
my_target.Z += Commands->Get_Random( 2.0f, 6.0f);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 80, 20 );
|
||
|
params.Set_Attack( my_target, 0, 0, true );
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack (obj, params);
|
||
|
Commands->Start_Timer(obj, this, Commands->Get_Random(2, 3), 1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Vector3 my_position = Commands->Get_Position ( obj );
|
||
|
float my_facing = Commands->Get_Facing ( obj );
|
||
|
GameObject * destroyedSam = Commands->Create_Object ( "M01_Destroyed_SAM", my_position);
|
||
|
Commands->Set_Facing ( destroyedSam, my_facing );
|
||
|
Commands->Attach_Script(destroyedSam, "M01_Destroyed_SAMSITE_JDG", "");
|
||
|
Commands->Attach_Script(destroyedSam, "M03_Destroyed_SAM_Site", "");
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M00_CUSTOM_SAM_SITE_IGNORE && current < 10 && current >= 0)
|
||
|
{
|
||
|
ignore_ids[current++] = param;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Destroyed_SAM_Site, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
Commands->Create_2D_Sound("00-N170E");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Destroyed_Turret, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
Commands->Start_Timer(obj, this, 4.0f, 1);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 0)
|
||
|
{
|
||
|
Commands->Create_2D_Sound("EVA_Enemy_Structure_Destroyed");
|
||
|
}
|
||
|
else if (timer_id == 1)
|
||
|
{
|
||
|
/*int id = Commands->Create_Conversation("Turret_Destroyed");
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Structure_Powerup_Drop, "Powerup:string")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killed)
|
||
|
{
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
facing = facing + 180.0f;
|
||
|
pos.X += cos(DEG_TO_RADF(facing)) * 2.5f;
|
||
|
pos.Y += sin(DEG_TO_RADF(facing)) * 2.5f;
|
||
|
pos.Z += 0.5f;
|
||
|
|
||
|
const char *powerup = Get_Parameter("Powerup");
|
||
|
Commands->Create_Object(powerup, pos);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Beach_Scenario_Controller, "")
|
||
|
{
|
||
|
int count;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(count, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
count = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
count++;
|
||
|
if (count >= 4)
|
||
|
{
|
||
|
count = 0;
|
||
|
GameObject * obj_con = Commands->Find_Object(1100004);
|
||
|
if (obj_con && Commands->Find_Object (1100003))
|
||
|
{
|
||
|
GameObject * obj_con = Commands->Find_Object(1100004);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, obj_con, 301, 3);
|
||
|
Commands->Send_Custom_Event(obj, obj_con, 301, 1);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON013", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100013);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Grant_Key(STAR, 20, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*DECLARE_SCRIPT(M03_Evacuation_Controller, "Preset:string")
|
||
|
{
|
||
|
bool active;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(active, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
active = false;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 100 && param == 100)
|
||
|
{
|
||
|
active = true;
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
}
|
||
|
else if (type == 200 && param == 200)
|
||
|
{
|
||
|
active = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
int building = Get_Int_Random(0, 2);
|
||
|
const char * preset = Get_Parameter("Preset");
|
||
|
GameObject * runner = Commands->Create_Object(preset, Get_Spawn_Loc(building));
|
||
|
if (runner)
|
||
|
{
|
||
|
char params[20];
|
||
|
sprintf(params, "%d", building);
|
||
|
Commands->Attach_Script(runner, "M03_Evacuator", params);
|
||
|
}
|
||
|
if (active)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 20.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Vector3 Get_Spawn_Loc(int building)
|
||
|
{
|
||
|
Vector3 retval(0,0,0);
|
||
|
switch (building)
|
||
|
{
|
||
|
case 0: retval.Set(-157.0f, -28.0f, 1.214f); //Refinery
|
||
|
break;
|
||
|
case 1: retval.Set(-105.0f, 49.0f, -1.948f); //Comm center
|
||
|
break;
|
||
|
case 2: retval.Set(-72.0f, 19.0f, 4.718f); //Power plant
|
||
|
break;
|
||
|
}
|
||
|
return retval;
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
/*DECLARE_SCRIPT(M03_Evacuator, "Building:int")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
|
||
|
Commands->Grant_Key(obj, 6, true);
|
||
|
Commands->Grant_Key(obj, 2, true);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 0);
|
||
|
params.Set_Movement(Vector3(0,0,0), RUN, 1.0f);
|
||
|
params.WaypathID = Get_Waypath(Get_Int_Parameter("Building"));
|
||
|
params.WaypathSplined = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
int Get_Waypath(int building)
|
||
|
{
|
||
|
int waypaths[3][4] = {{1144741, 1144741, 1144767, 1144767},
|
||
|
{1144800, 1144785, 1144816, 1144835},
|
||
|
{1144920, 1144851, 1144898, 1144873}};
|
||
|
return waypaths[building][Get_Int_Random(0, 3)];
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (action_id == 0)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 1);
|
||
|
params.Set_Movement(Vector3(0,0,0), RUN, 1.0f);
|
||
|
params.WaypathID = 1144950;
|
||
|
params.WaypathSplined = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
if (action_id == 1)
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
/*DECLARE_SCRIPT(M03_Dock_Evacuation_Controller, "")
|
||
|
{
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 100 && param == 100)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 1.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
int building = Get_Int_Random(0, 2);
|
||
|
GameObject * runner = Commands->Create_Object("M03_Evacuator", Get_Spawn_Loc(building));
|
||
|
if (runner)
|
||
|
{
|
||
|
char params[20];
|
||
|
sprintf(params, "%d", building);
|
||
|
Commands->Attach_Script(runner, "M03_Dock_Evacuator", params);
|
||
|
}
|
||
|
Commands->Start_Timer(obj, this, 30.0f, 0);
|
||
|
}
|
||
|
|
||
|
Vector3 Get_Spawn_Loc(int building)
|
||
|
{
|
||
|
Vector3 retval(0,0,0);
|
||
|
switch (building)
|
||
|
{
|
||
|
case 0: retval.Set(-214.0f, 52.0f, 4.785f); //Q-hut one
|
||
|
break;
|
||
|
case 1: retval.Set(-237.0f, 79.0f, 4.758f); //Q-hut two
|
||
|
break;
|
||
|
case 2: retval.Set(-235.0f, 100.0f, 4.758f); //Q-hut three
|
||
|
break;
|
||
|
}
|
||
|
return retval;
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
/*DECLARE_SCRIPT(M03_Dock_Evacuator, "Building:int")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
|
||
|
Commands->Grant_Key(obj, 6, true);
|
||
|
Commands->Grant_Key(obj, 2, true);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 0);
|
||
|
params.Set_Movement(Vector3(0,0,0), RUN, 1.0f);
|
||
|
params.WaypathID = Get_Waypath(Get_Int_Parameter("Building"));
|
||
|
params.WaypathSplined = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
int Get_Waypath(int building)
|
||
|
{
|
||
|
int waypaths[3] = {1144983, 1145002, 1145011};
|
||
|
return waypaths[building];
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (action_id == 0)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99, 1);
|
||
|
params.Set_Movement(Vector3(0,0,0), RUN, 1.0f);
|
||
|
params.WaypathID = 1145021;
|
||
|
params.WaypathSplined = true;
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
if (action_id == 1)
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
}
|
||
|
};*/
|
||
|
|
||
|
DECLARE_SCRIPT(DLS_Volcano_Active, "Receive_Type=0:int, Receive_Param=0:int, Volcano_Timer_Id=0:int, Volcano_Delay=0.0:float, Explosion_Delay_Min=0.0:float, Explosion_Delay_Max=0.0:float, Rumble_Delay_Min=0.0:float, Rumble_Delay_Max=0.0:float, Debug_Mode=0:int")
|
||
|
{
|
||
|
|
||
|
int receive_type;
|
||
|
int receive_param;
|
||
|
int volcano_timer_id;
|
||
|
float volcano_delay;
|
||
|
float explosion_delay_min;
|
||
|
float explosion_delay_max;
|
||
|
float rumble_delay_min;
|
||
|
float rumble_delay_max;
|
||
|
bool volcano_active;
|
||
|
bool debug_mode;
|
||
|
|
||
|
float explosion_delay;
|
||
|
float rumble_delay;
|
||
|
Vector3 exploc[16];
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(receive_type, 1);
|
||
|
SAVE_VARIABLE(receive_param, 2);
|
||
|
SAVE_VARIABLE(volcano_timer_id, 3);
|
||
|
SAVE_VARIABLE(volcano_delay, 4);
|
||
|
SAVE_VARIABLE(explosion_delay_min, 5);
|
||
|
SAVE_VARIABLE(explosion_delay_max, 6);
|
||
|
SAVE_VARIABLE(rumble_delay_min, 7);
|
||
|
SAVE_VARIABLE(rumble_delay_max, 8);
|
||
|
SAVE_VARIABLE(volcano_active, 9);
|
||
|
SAVE_VARIABLE(debug_mode, 10);
|
||
|
SAVE_VARIABLE(explosion_delay, 11);
|
||
|
SAVE_VARIABLE(rumble_delay, 12);
|
||
|
SAVE_VARIABLE(exploc, 13);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
// SCRIPT_DEBUG_MESSAGE (("Volcano Script Created.\n"));
|
||
|
receive_type = Get_Int_Parameter("Receive_Type");
|
||
|
receive_param = Get_Int_Parameter("Receive_Param");
|
||
|
volcano_timer_id = Get_Int_Parameter("Volcano_Timer_Id");
|
||
|
volcano_delay = Get_Int_Parameter("Volcano_Delay");
|
||
|
explosion_delay_min = Get_Float_Parameter("Explosion_Delay_Min");
|
||
|
explosion_delay_max = Get_Float_Parameter("Explosion_Delay_Max");
|
||
|
rumble_delay_min = Get_Float_Parameter("Rumble_Delay_Min");
|
||
|
rumble_delay_max = Get_Float_Parameter("Rumble_Delay_Max");
|
||
|
|
||
|
volcano_active = false;
|
||
|
|
||
|
exploc[0].Set(11.53f,20.95f,50.73f);
|
||
|
exploc[1].Set(9.8f,11.69f,53.99f);
|
||
|
exploc[2].Set(4.24f,8.67f,40.85f);
|
||
|
exploc[3].Set(-15.75f,14.05f,30.02f);
|
||
|
exploc[4].Set(9.05f,-2.1f,45.83f);
|
||
|
exploc[5].Set(-57.34f,22.78f,16.88f);
|
||
|
exploc[6].Set(-151.27f,18.56f,17.59f);
|
||
|
exploc[7].Set(-98.43f,-7.34f,8.65f);
|
||
|
exploc[8].Set(-103.61f,17.34f,9.21f);
|
||
|
exploc[9].Set(-117.75f,0.22f,8.95f);
|
||
|
exploc[10].Set(-171.99f,71.87f,14.4f);
|
||
|
exploc[11].Set(-196.42f,87.29f,11.5f);
|
||
|
exploc[12].Set(-269.45f,40.87f,4.93f);
|
||
|
exploc[13].Set(-260.96f,132.15f,8.45f);
|
||
|
exploc[14].Set(-144.31f,44.4f,9.33f);
|
||
|
exploc[15].Set(-68.42f,22.18f,20.73f);
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* obj, int type, int param, GameObject* sender)
|
||
|
{
|
||
|
if((type == receive_type) && (param == receive_param))
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 5.0, CLOUD_DELAY);
|
||
|
|
||
|
volcano_active = true;
|
||
|
explosion_delay = Commands->Get_Random(explosion_delay_min, explosion_delay_max);
|
||
|
Commands->Start_Timer(obj, this, explosion_delay, 6701);
|
||
|
rumble_delay = Commands->Get_Random(rumble_delay_min, rumble_delay_max);
|
||
|
Commands->Start_Timer(obj, this, rumble_delay, 6702);
|
||
|
if(volcano_timer_id != 0)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, volcano_delay, volcano_timer_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == CLOUD_DELAY)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), DOGFIGHT_ENDED, 0);
|
||
|
Commands->Set_Clouds (1.0f, 1.0f, 20);
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("M03CON010", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100010);
|
||
|
Commands->Monitor_Conversation(obj, id);*/
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 55.0, MESSAGE_DELAY);
|
||
|
Commands->Start_Timer(obj, this, 10.0, ANNOUNCEMENT_DELAY);
|
||
|
}
|
||
|
|
||
|
if (timer_id == MESSAGE_DELAY)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON011", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100011);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (timer_id == ANNOUNCEMENT_DELAY)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON048", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100048);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 30.0, ANNOUNCEMENT_DELAY);
|
||
|
}
|
||
|
|
||
|
if((timer_id == 6701) && (volcano_active == true))
|
||
|
{
|
||
|
int i = Get_Int_Random(0,15);
|
||
|
Commands->Create_Explosion("Ground Explosions - Harmless", exploc[i], obj);
|
||
|
Commands->Start_Timer(obj, this, explosion_delay, 6701);
|
||
|
}
|
||
|
if((timer_id == 6702) && (volcano_active == true))
|
||
|
{
|
||
|
Vector3 volcano;
|
||
|
volcano.X = 0.0;
|
||
|
volcano.Y = 0.0;
|
||
|
volcano.Z = 0.0;
|
||
|
float camera_intensity = Commands->Get_Random(.05f,.1f);
|
||
|
float camera_duration = Commands->Get_Random(4.0f,8.0f);
|
||
|
Commands->Shake_Camera(volcano, 5000.0f, camera_intensity, camera_duration);
|
||
|
Commands->Start_Timer(obj, this, rumble_delay, 6702);
|
||
|
Commands->Create_Logical_Sound(obj, M03_SOUND_VOLCANO, volcano, 5000.0f);
|
||
|
Commands->Create_Sound("earthquake_large_01", Vector3(0,0,0), obj);
|
||
|
|
||
|
}
|
||
|
if((timer_id == volcano_timer_id) && (volcano_active == true))
|
||
|
{
|
||
|
volcano_active = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Entered(GameObject* obj, GameObject* enterer)
|
||
|
{
|
||
|
volcano_active = false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Sakura_Explosion, "")
|
||
|
{
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
Commands->Create_Explosion_At_Bone( "Air Explosions Twiddler", obj, "ROTOR00");
|
||
|
Commands->Create_Explosion_At_Bone( "Air Explosions Twiddler", obj, "TURRET");
|
||
|
Commands->Create_Explosion_At_Bone( "Air Explosions Twiddler", obj, "ROTOR01");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(DLS_Volcano_Stumble, "Debug_Mode=0:int")
|
||
|
{
|
||
|
enum {FALL_FORWARD, FALL_BACK, RISE_FORWARD, RISE_BACK,
|
||
|
FLEE_VOLCANO, STUMBLE};
|
||
|
|
||
|
bool animating;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(animating, 1);
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
animating = false;
|
||
|
|
||
|
Commands->Set_Innate_Take_Cover_Probability ( obj, 100.0f );
|
||
|
Commands->Set_Innate_Aggressiveness ( obj, 100.0f );
|
||
|
}
|
||
|
|
||
|
/*void Timer_Expired(GameObject* obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == 4455)
|
||
|
{
|
||
|
// Commands->Action_Reset(obj, 97.0f);
|
||
|
int i = Commands->Get_Random(0,3);
|
||
|
|
||
|
if(i == 0)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, FALL_FORWARD);
|
||
|
params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_622A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
|
||
|
if(i == 1)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, STUMBLE);
|
||
|
params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_611A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
|
||
|
if(i == 2)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, FALL_BACK);
|
||
|
params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_632A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
|
||
|
void Sound_Heard(GameObject* obj, const CombatSound & sound)
|
||
|
{
|
||
|
if((sound.Type == M03_SOUND_VOLCANO) && (!animating))
|
||
|
{
|
||
|
animating = true;
|
||
|
|
||
|
Commands->Action_Reset(obj, 97.0f);
|
||
|
int i = Commands->Get_Random_Int(0,2);
|
||
|
|
||
|
if(i == 0)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, FALL_FORWARD);
|
||
|
//params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_622A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
|
||
|
if(i == 1)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, STUMBLE);
|
||
|
//params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_611A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
|
||
|
if(i == 2)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 98.0f, FALL_BACK);
|
||
|
//params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_632A", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
//Commands->Start_Timer(obj, this, 6.0f, 4455);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
switch (action_id)
|
||
|
{
|
||
|
// Animation to return units that have fallen to ground back up
|
||
|
case FALL_FORWARD:
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99.0f, RISE_FORWARD);
|
||
|
//params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_H11C", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
case FALL_BACK:
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 99.0f, RISE_BACK);
|
||
|
//params.Set_Movement(Commands->Get_Position(obj), 1.0f, 2.0f);
|
||
|
params.Set_Animation("S_A_HUMAN.H_A_H13C", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
// Flee units to dock
|
||
|
case RISE_BACK:
|
||
|
{
|
||
|
animating = false;
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 70.0f, FLEE_VOLCANO);
|
||
|
params.Set_Movement(Vector3(-288.02f, 78.11f, 9.51f), 1.0f, 15.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
case RISE_FORWARD:
|
||
|
{
|
||
|
animating = false;
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 70.0f, FLEE_VOLCANO);
|
||
|
params.Set_Movement(Vector3(-288.02f, 78.11f, 9.51f), 1.0f, 15.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
case STUMBLE:
|
||
|
{
|
||
|
animating = false;
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 70.0f, FLEE_VOLCANO);
|
||
|
params.Set_Movement(Vector3(-288.02f, 78.11f, 9.51f), 1.0f, 15.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Beach_Radio, "")
|
||
|
{
|
||
|
int conv_count;
|
||
|
bool conv_active;
|
||
|
int conv_id;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(conv_count, 1);
|
||
|
SAVE_VARIABLE(conv_active, 2);
|
||
|
SAVE_VARIABLE(conv_id, 3);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
conv_count = 0;
|
||
|
conv_active = false;
|
||
|
conv_id = 0;
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
if (conv_count > 2 || conv_active)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
char* conv[3];
|
||
|
conv[0] = "M03CON044";
|
||
|
conv[1] = "M03CON045";
|
||
|
conv[2] = "M03CON046";
|
||
|
|
||
|
|
||
|
conv_id = Commands->Create_Conversation(conv[conv_count++]);
|
||
|
Commands->Join_Conversation(NULL, conv_id);
|
||
|
Commands->Join_Conversation(poker, conv_id);
|
||
|
Commands->Start_Conversation(conv_id);
|
||
|
Commands->Monitor_Conversation(obj, conv_id);
|
||
|
conv_active = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject *obj, GameObject *killer)
|
||
|
{
|
||
|
Commands->Stop_Conversation ( conv_id );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
conv_active = false;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Protect_The_MCT, "Building:int")
|
||
|
{
|
||
|
bool completed;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(completed, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
completed = false;
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject * enemy)
|
||
|
{
|
||
|
if (!completed && Commands->Is_A_Star(enemy))
|
||
|
{
|
||
|
Vector3 mct_pos;
|
||
|
|
||
|
/*int id = Commands->Create_Conversation("Protect_The_MCT");
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Start_Conversation(id);*/
|
||
|
|
||
|
switch (Get_Int_Parameter("Building"))
|
||
|
{
|
||
|
case 0: // Refinery
|
||
|
mct_pos.Set(-154.921f, 15.227f, 2.382f);
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, mct_pos, 10.0f);
|
||
|
break;
|
||
|
case 1: // Comm center
|
||
|
mct_pos.Set(-124.763f, 41.308f, -1.948f);
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, mct_pos, 10.0f);
|
||
|
break;
|
||
|
case 2: // Power plant
|
||
|
mct_pos.Set(-84.583f, 11.975f, -7.074f);
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, mct_pos, 10.0f);
|
||
|
break;
|
||
|
}
|
||
|
completed = true;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Power_Plant, "")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
GameObject * comm_center = Commands->Find_Object(1150002);
|
||
|
GameObject * refinery = Commands->Find_Object(1150001);
|
||
|
Commands->Set_Building_Power(comm_center, false);
|
||
|
Commands->Set_Building_Power(refinery, false);
|
||
|
GameObject * harvester = Commands->Find_Object(1144518);
|
||
|
Commands->Send_Custom_Event(obj, harvester, 7800, 7800);
|
||
|
|
||
|
Commands->Enable_Radar ( true );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (2009818), POWER_KILLED, 0 );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Refinery, "")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 311, 3 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 311, 1 );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Area_Troop_Counter, "")
|
||
|
{
|
||
|
int area_count[3];
|
||
|
int killed_count[3];
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(area_count, 1);
|
||
|
SAVE_VARIABLE(killed_count, 2);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
area_count[0] = 2;
|
||
|
area_count[1] = 4;
|
||
|
area_count[2] = 6;
|
||
|
killed_count[0] = killed_count[1] = killed_count[2] = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == 1000 && param == 1000)
|
||
|
{
|
||
|
int area = -1;
|
||
|
int target_count = -1;
|
||
|
Commands->Send_Custom_Event(obj, obj, 5000, (int)&area);
|
||
|
Commands->Send_Custom_Event(obj, obj, 6300, (int)&target_count);
|
||
|
if (area >= 0 && area <= 2)
|
||
|
{
|
||
|
area_count[area]--;
|
||
|
if ((++killed_count[area] % target_count != 0) && area_count[area] <= 0)
|
||
|
{
|
||
|
if (area_count[area] < 0)
|
||
|
{
|
||
|
area_count[area] = 0;
|
||
|
}
|
||
|
Commands->Send_Custom_Event(obj, obj, 6000, 6000);
|
||
|
area_count[area] += (DIFFICULTY);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (type == 7000)
|
||
|
{
|
||
|
area_count[param] += (DIFFICULTY + 1);
|
||
|
killed_count[param] = 0;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////////
|
||
|
/////////////////////////////////////DME////////////////////////////////////////////
|
||
|
////////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Mission_Complete_Zone, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (!already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Mission_Complete ( true );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Zone_Enabled_Spawner, "Spawner_num:int, Control_num:int")
|
||
|
{
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
int control = Get_Int_Parameter("Control_num");
|
||
|
GameObject * officer = Commands->Find_Object (control);
|
||
|
|
||
|
if (enterer == STAR)
|
||
|
{
|
||
|
if ((officer) || (Get_Int_Parameter("Control_num") == 0))
|
||
|
{
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_num"), true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Killed_Disabled_Spawner, "Spawner_num:int")
|
||
|
{
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if (killer == STAR)
|
||
|
{
|
||
|
Commands->Enable_Spawner(Get_Int_Parameter("Spawner_num"), false);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Goto_Star, "")
|
||
|
{
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 3.5f, GOTO_STAR);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject *obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == GOTO_STAR)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, GOTO_STAR);
|
||
|
params.Set_Movement(STAR, RUN, 2.5f);
|
||
|
params.Set_Attack( STAR, 50, 1, true );
|
||
|
Commands->Action_Attack (obj, params);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 3.0f, GOTO_STAR);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_CommCenter_Warning, "")
|
||
|
{
|
||
|
bool mct_accessed, already_entered;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( mct_accessed, 1 );
|
||
|
SAVE_VARIABLE( already_entered, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
mct_accessed = false;
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == MCT_ACCESSED)
|
||
|
{
|
||
|
mct_accessed = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject *obj, GameObject *enterer)
|
||
|
{
|
||
|
if (!mct_accessed && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208215), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208216), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208217), MCT_ACCESSED, 0 );
|
||
|
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M03DSGN_DSGN0207I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_PowerPlant_Warning, "")
|
||
|
{
|
||
|
bool mct_accessed, already_entered;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( mct_accessed, 1 );
|
||
|
SAVE_VARIABLE( already_entered, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
mct_accessed = false;
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == MCT_ACCESSED)
|
||
|
{
|
||
|
mct_accessed = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject *obj, GameObject *enterer)
|
||
|
{
|
||
|
if (!mct_accessed && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208218), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208219), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208220), MCT_ACCESSED, 0 );
|
||
|
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M03DSGN_DSGN0205I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_CommCenter_Arrow, "")
|
||
|
{
|
||
|
bool commcenter_alive, mct_accessed;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( commcenter_alive, 1 );
|
||
|
SAVE_VARIABLE( mct_accessed, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
commcenter_alive = true;
|
||
|
mct_accessed = false;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject *obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == MISSION_FAIL)
|
||
|
{
|
||
|
Commands->Mission_Complete(false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == MCT_ACCESSED)
|
||
|
{
|
||
|
mct_accessed = true;
|
||
|
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208215), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208216), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208217), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208218), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208219), MCT_ACCESSED, 0 );
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1208220), MCT_ACCESSED, 0 );
|
||
|
}
|
||
|
|
||
|
if (type == COMM_KILLED)
|
||
|
{
|
||
|
if (mct_accessed)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 312, 1 );
|
||
|
}
|
||
|
|
||
|
if (!mct_accessed)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 308, 2 );
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M03DSGN_DSGN0208I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 4.0f, MISSION_FAIL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == POWER_KILLED)
|
||
|
{
|
||
|
if (mct_accessed)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 309, 1 );
|
||
|
}
|
||
|
|
||
|
if (!mct_accessed)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (1100004), 308, 2 );
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M03DSGN_DSGN0206I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 4.0f, MISSION_FAIL);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Mct_Poke, "")
|
||
|
{
|
||
|
bool already_poked;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_poked, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_poked = false;
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
if (!already_poked)
|
||
|
{
|
||
|
already_poked = true;
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (2009818), MCT_ACCESSED, 0 );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Comm_Killed, "")
|
||
|
{
|
||
|
bool base_entered;
|
||
|
float max_health;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( base_entered, 1 );
|
||
|
SAVE_VARIABLE( max_health, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
base_entered = false;
|
||
|
max_health = Commands->Get_Health (obj);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject *obj, int type, int param, GameObject *sender)
|
||
|
{
|
||
|
if (type == BASE_ENTERED)
|
||
|
{
|
||
|
base_entered = true;
|
||
|
}
|
||
|
}
|
||
|
void Damaged (GameObject *obj, GameObject *damager, float amount)
|
||
|
{
|
||
|
if (!base_entered)
|
||
|
{
|
||
|
Commands->Set_Health (obj, max_health);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object (2009818), COMM_KILLED, 0 );
|
||
|
Commands->Enable_Radar (true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Conversation_Zone, "Conv_Num:int")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
bool first_conv_played;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
SAVE_VARIABLE( first_conv_played, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
first_conv_played = false;
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject *obj, int type, int param, GameObject *sender)
|
||
|
{
|
||
|
if (type == ENTERED)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 100002)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 300, 1, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 308, 3, 0);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100003)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 300, 1, 0);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 3.0f, 100000);
|
||
|
}
|
||
|
|
||
|
if (action_id == 100004)
|
||
|
{
|
||
|
GameObject *objective_controller;
|
||
|
objective_controller = Commands->Find_Object(1100004);
|
||
|
if (objective_controller)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, objective_controller, 307, 3);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 100000)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON002", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100002);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Get_Int_Parameter("Conv_Num") == 4 && already_entered && !Commands->Has_Key(STAR, 1) && !first_conv_played)
|
||
|
{
|
||
|
first_conv_played = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON006", 99, 2000, true);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100006);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
|
||
|
if (!already_entered)
|
||
|
{
|
||
|
switch(Get_Int_Parameter("Conv_Num"))
|
||
|
{
|
||
|
case 2:
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1144502), ENTERED, 0, 0);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 300, 1, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 308, 3, 0);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 2.0f, 100000);
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100005), ENTERED, 0, 0);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON003", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100003);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
{
|
||
|
if (!Commands->Has_Key(STAR, 1))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (2013086), ENTERED, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (2013087), ENTERED, 0);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON004", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100004);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 7:
|
||
|
{
|
||
|
if (Commands->Has_Key(STAR, 1))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (2013901), ENTERED, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (2013900), ENTERED, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object (2013899), ENTERED, 0);
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON007", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100007);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 9:
|
||
|
{
|
||
|
if (Commands->Has_Key(STAR, 1))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON009", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100009);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 16:
|
||
|
{
|
||
|
if (!Commands->Has_Key(STAR, 20))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON016", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100016);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 22:
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON022", 99, 2000, true);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100022);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
break;
|
||
|
case 61:
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON061", 99, 2000, true);
|
||
|
Commands->Join_Conversation(Commands->Find_Object (2016365), id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100061);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Holograph_EntryZone_JDG, "")
|
||
|
{
|
||
|
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;
|
||
|
float delayTimer = Commands->Get_Random ( 0.25f, 1.0f );
|
||
|
Commands->Send_Custom_Event( obj, obj, 0, 8000, delayTimer );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == 8000)
|
||
|
{
|
||
|
GameObject * holograph = Commands->Find_Object ( 2017192 );
|
||
|
if (holograph)
|
||
|
{
|
||
|
GameObject * kane = Commands->Create_Object_At_Bone ( holograph, "Nod_Kane_HologramHead", "O_ARROW" );
|
||
|
Commands->Attach_To_Object_Bone( kane, holograph, "O_ARROW" );
|
||
|
Commands->Disable_All_Collisions ( kane );
|
||
|
Commands->Set_Facing (kane, Commands->Get_Facing (holograph));
|
||
|
Commands->Set_Loiters_Allowed( kane, false );
|
||
|
Commands->Attach_Script(kane, "M03_KaneHead_JDG", "");
|
||
|
//kane_ID = Commands->Get_ID ( kane );
|
||
|
}
|
||
|
|
||
|
//Commands->Destroy_Object ( obj );//one time only zone--cleaning up
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_KaneHead_JDG, "") //2017221
|
||
|
{
|
||
|
int kane_conversation02;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(kane_conversation02, 1);
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
if (STAR)
|
||
|
{
|
||
|
int id = Commands->Create_Conversation("M03CON061", 99, 30, true);
|
||
|
Commands->Join_Conversation(obj, id);
|
||
|
Commands->Join_Conversation(STAR, id);
|
||
|
Commands->Start_Conversation(id, 100061);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason )
|
||
|
{
|
||
|
switch (complete_reason)
|
||
|
{
|
||
|
case ACTION_COMPLETE_CONVERSATION_ENDED:
|
||
|
{
|
||
|
if (action_id == 100061)
|
||
|
{
|
||
|
Commands->Debug_Message ( "***************************kane conversation 02 is over--sending delete custom\n" );
|
||
|
Commands->Send_Custom_Event ( obj, obj, 0, 8000, 2 );
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (param == 8000)//conversation is over--go away
|
||
|
{
|
||
|
Commands->Debug_Message ( "***************************delete custom received--kane should now vanish\n" );
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Killed_Sound, "Officer=0:int, Location=0:int")
|
||
|
{
|
||
|
void Killed( GameObject * obj, GameObject * killer )
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (2018061), LOCATION, Get_Int_Parameter("Location") );
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (2018061), TROOP_KILLED, Get_Int_Parameter("Officer") );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Beach_Reinforce, "")
|
||
|
{
|
||
|
#define BEACH_POSITION Vector3(-95.656f, -68.236f, 1.433f)
|
||
|
#define BEACH_FACING -180.0f
|
||
|
#define INLET_POSITION1 Vector3(99.85f, -49.51f, 2.0f)
|
||
|
#define INLET_FACING1 170.0f
|
||
|
#define INLET_POSITION2 Vector3(51.0f, -91.0f, 2.0f)
|
||
|
#define INLET_FACING2 75.0f
|
||
|
#define BASE_POSITION1 Vector3(-138.0f, 50.0f, 9.5f)
|
||
|
#define BASE_FACING1 -30.0f
|
||
|
#define BASE_POSITION2 Vector3(-79.0f, 59.0f, 9.5f)
|
||
|
#define BASE_FACING2 -120.0f
|
||
|
|
||
|
int current_loc;
|
||
|
int counter;
|
||
|
int switcher;
|
||
|
int officers_killed_beach;
|
||
|
int officers_killed_inlet;
|
||
|
int officers_killed_base;
|
||
|
int area_count_beach;
|
||
|
int area_count_inlet;
|
||
|
int area_count_base;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(counter, 1);
|
||
|
SAVE_VARIABLE(switcher, 2);
|
||
|
SAVE_VARIABLE(officers_killed_beach, 3);
|
||
|
SAVE_VARIABLE(officers_killed_inlet, 4);
|
||
|
SAVE_VARIABLE(officers_killed_base, 5);
|
||
|
SAVE_VARIABLE(area_count_beach, 6);
|
||
|
SAVE_VARIABLE(area_count_inlet, 7);
|
||
|
SAVE_VARIABLE(area_count_base, 8);
|
||
|
SAVE_VARIABLE(current_loc, 9);
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
current_loc = 0;
|
||
|
counter = 2;
|
||
|
switcher = 0;
|
||
|
officers_killed_beach = 0;
|
||
|
officers_killed_inlet = 0;
|
||
|
officers_killed_base = 0;
|
||
|
area_count_beach = (DIFFICULTY + 2);
|
||
|
area_count_inlet = (DIFFICULTY + 3);
|
||
|
area_count_base = (DIFFICULTY + 4);
|
||
|
}
|
||
|
|
||
|
void Reinforce_Beach (void)
|
||
|
{
|
||
|
if (officers_killed_beach < 3 && area_count_beach > 0)
|
||
|
{
|
||
|
area_count_beach--;
|
||
|
|
||
|
if (switcher < 1)
|
||
|
{
|
||
|
switcher++;
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", BEACH_POSITION);
|
||
|
Commands->Set_Facing(con, BEACH_FACING);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
|
||
|
if (switcher == 1)
|
||
|
{
|
||
|
switcher = 0;
|
||
|
|
||
|
Commands->Trigger_Spawner( 2018881 );
|
||
|
Commands->Trigger_Spawner( 2018880 );
|
||
|
}
|
||
|
|
||
|
if (switcher > 1)
|
||
|
{
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", BEACH_POSITION);
|
||
|
Commands->Set_Facing(con, BEACH_FACING);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Reinforce_Inlet (void)
|
||
|
{
|
||
|
if (officers_killed_inlet < 3 && area_count_inlet > 0)
|
||
|
{
|
||
|
area_count_inlet--;
|
||
|
|
||
|
if (switcher >= 1)
|
||
|
{
|
||
|
switcher--;
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", INLET_POSITION1);
|
||
|
Commands->Set_Facing(con, INLET_FACING1);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper2");
|
||
|
}
|
||
|
|
||
|
if (switcher < 1)
|
||
|
{
|
||
|
switcher = 1;
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", INLET_POSITION2);
|
||
|
Commands->Set_Facing(con, INLET_FACING2);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper2");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Reinforce_Base (void)
|
||
|
{
|
||
|
if (officers_killed_base < 3 && area_count_base > 0)
|
||
|
{
|
||
|
area_count_base--;
|
||
|
|
||
|
if (switcher < 1)
|
||
|
{
|
||
|
switcher++;
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", BASE_POSITION1);
|
||
|
Commands->Set_Facing(con, BASE_FACING1);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
|
||
|
if (switcher >= 1)
|
||
|
{
|
||
|
switcher = 0;
|
||
|
|
||
|
GameObject * con = Commands->Create_Object("Invisible_Object", BASE_POSITION2);
|
||
|
Commands->Set_Facing(con, BASE_FACING2);
|
||
|
Commands->Attach_Script(con, "M03_Chinook_ParaDrop", "M03_Paratrooper");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject *obj, int type, int param, GameObject *sender)
|
||
|
{
|
||
|
if (type == LOCATION)
|
||
|
{
|
||
|
current_loc = param;
|
||
|
}
|
||
|
|
||
|
if (type == BASE)
|
||
|
{
|
||
|
if (param == 1)
|
||
|
{
|
||
|
Reinforce_Base ();
|
||
|
//counter = 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == BEACH)
|
||
|
{
|
||
|
if (param == 1)
|
||
|
{
|
||
|
Reinforce_Beach ();
|
||
|
//counter = 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == INLET)
|
||
|
{
|
||
|
if (param == 1)
|
||
|
{
|
||
|
Reinforce_Inlet ();
|
||
|
//counter = 3;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == TROOP_KILLED)
|
||
|
{
|
||
|
if (param == 1)
|
||
|
{
|
||
|
if (current_loc == 0)
|
||
|
{
|
||
|
officers_killed_beach++;
|
||
|
}
|
||
|
|
||
|
if (current_loc == 1)
|
||
|
{
|
||
|
officers_killed_inlet++;
|
||
|
}
|
||
|
|
||
|
if (current_loc == 2)
|
||
|
{
|
||
|
officers_killed_base++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (--counter <= 0)
|
||
|
{
|
||
|
counter = (5 - DIFFICULTY);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (1144444), UPDATE, 0);
|
||
|
|
||
|
//Reinforce_Beach ();
|
||
|
//counter = 2;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (type == PAST_PILLBOX)
|
||
|
{
|
||
|
switcher = 10;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Past_Pillbox, "")
|
||
|
{
|
||
|
void Entered( GameObject * obj, GameObject * enterer )
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (2018061), PAST_PILLBOX, 0);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Engineer_Target, "")
|
||
|
{
|
||
|
float full_health;
|
||
|
int engineer;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(engineer, 1);
|
||
|
SAVE_VARIABLE(full_health, 2);
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
full_health = Commands->Get_Health (obj);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject *obj, int type, int param, GameObject *sender)
|
||
|
{
|
||
|
if (type == ENGINEER)
|
||
|
{
|
||
|
engineer = param;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void Damaged (GameObject *obj, GameObject *damager, float amount)
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, HEAL_ME, Commands->Get_Position (obj), 150.0f);
|
||
|
Commands->Start_Timer (obj, this, 3.0f, HEALTH_CHECK);
|
||
|
}
|
||
|
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, STOP_REPAIR, Commands->Get_Position (obj), 150.0f);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
if (timer_id == HEALTH_CHECK)
|
||
|
{
|
||
|
float current = Commands->Get_Health (obj);
|
||
|
|
||
|
if (current == full_health)
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, STOP_REPAIR, Commands->Get_Position (obj), 150.0f);
|
||
|
}
|
||
|
|
||
|
if (current != full_health)
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, HEAL_ME, Commands->Get_Position (obj), 150.0f);
|
||
|
Commands->Start_Timer (obj, this, 3.0f, HEALTH_CHECK);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Engineer_Repair, "Repair_Priority=96:int")
|
||
|
{
|
||
|
int my_id, target_id;
|
||
|
bool repairing;
|
||
|
int repair_priority;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(repairing, 1);
|
||
|
SAVE_VARIABLE(my_id, 2);
|
||
|
SAVE_VARIABLE(target_id, 3);
|
||
|
SAVE_VARIABLE(repair_priority, 4);
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
repairing = false;
|
||
|
repair_priority = Get_Int_Parameter("Repair_Priority");
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject* obj, const CombatSound & sound)
|
||
|
{
|
||
|
if (sound.Type == HEAL_ME && !repairing)
|
||
|
{
|
||
|
if (Commands->Get_Player_Type (sound.Creator) == Commands->Get_Player_Type (obj))
|
||
|
{
|
||
|
my_id = Commands->Get_ID ( obj );
|
||
|
repairing = true;
|
||
|
Commands->Send_Custom_Event( obj, sound.Creator, ENGINEER, my_id );
|
||
|
|
||
|
target_id = Commands->Get_ID ( sound.Creator );
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, repair_priority, MOVE_TO_HEAL );
|
||
|
params.Set_Movement( Commands->Get_Position (sound.Creator), RUN, 5.0f );
|
||
|
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (sound.Type == STOP_REPAIR)
|
||
|
{
|
||
|
if (Commands->Get_ID (sound.Creator) == target_id)
|
||
|
{
|
||
|
Commands->Action_Reset ( obj, 100 );
|
||
|
|
||
|
repairing = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete( GameObject * obj, int action_id, ActionCompleteReason complete_reason )
|
||
|
{
|
||
|
if (action_id == MOVE_TO_HEAL)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, repair_priority, REPAIRING );
|
||
|
params.Set_Attack (Commands->Find_Object (target_id), 50.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Radar_Scramble, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (type == ENTERED)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject *obj, GameObject *enterer)
|
||
|
{
|
||
|
if (Commands->Get_Health (Commands->Find_Object (1150002)) > 0)
|
||
|
{
|
||
|
if (!already_entered)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (1147513), ENTERED, 0);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object (1144628), ENTERED, 0);
|
||
|
already_entered = true;
|
||
|
|
||
|
int id = Commands->Create_Conversation("M03CON068", 99, 2000, false);
|
||
|
Commands->Join_Conversation(NULL, id);
|
||
|
Commands->Start_Conversation(id, 100068);
|
||
|
Commands->Monitor_Conversation(obj, id);
|
||
|
}
|
||
|
Commands->Enable_Radar ( false );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Radar_UnScramble, "")
|
||
|
{
|
||
|
void Entered (GameObject *obj, GameObject *enterer)
|
||
|
{
|
||
|
Commands->Enable_Radar ( true );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M10_Elevator_All_Zone, "Controller_num:int")
|
||
|
{
|
||
|
bool star_in_zone;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( star_in_zone, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
star_in_zone = false;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (enterer == STAR)
|
||
|
{
|
||
|
star_in_zone = true;
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(Get_Int_Parameter("Controller_num")), ACTIVATE, 0);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M10_Elevator_All_Controller, "")
|
||
|
{
|
||
|
bool star_in_zone;
|
||
|
bool mobius_in_zone;
|
||
|
bool transition;
|
||
|
|
||
|
int block1, block2, block3, block4;
|
||
|
int block5, block6, block7, block8;
|
||
|
|
||
|
GameObject *mobius;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( star_in_zone, 1 );
|
||
|
SAVE_VARIABLE( mobius_in_zone, 2 );
|
||
|
SAVE_VARIABLE( transition, 3 );
|
||
|
SAVE_VARIABLE( block1, 4 );
|
||
|
SAVE_VARIABLE( block2, 5 );
|
||
|
SAVE_VARIABLE( block3, 6 );
|
||
|
SAVE_VARIABLE( block4, 7 );
|
||
|
SAVE_VARIABLE( block5, 8 );
|
||
|
SAVE_VARIABLE( block6, 9 );
|
||
|
SAVE_VARIABLE( block7, 10 );
|
||
|
SAVE_VARIABLE( block8, 11 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
star_in_zone = false;
|
||
|
mobius_in_zone = false;
|
||
|
|
||
|
block1 = block2 = block3 = block4 = 0;
|
||
|
block5 = block6 = block7 = block8 = 0;
|
||
|
|
||
|
Commands->Static_Anim_Phys_Goto_Last_Frame ( 1300881, "cave_lift.cave_lift" );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 333)
|
||
|
{
|
||
|
Commands->Destroy_Object (Commands->Find_Object (1148346));
|
||
|
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block1));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block2));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block3));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block4));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block5));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block6));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block7));
|
||
|
Commands->Destroy_Object (Commands->Find_Object (block8));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
|
||
|
if (type == ACTIVATE)
|
||
|
{
|
||
|
Commands->Start_Timer (obj, this, 5.0f, 333);
|
||
|
|
||
|
GameObject *rub1 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-117.320f, 83.098f, 0.656f));
|
||
|
block1 = Commands->Get_ID (rub1);
|
||
|
Commands->Set_Facing (rub1, 90.0);
|
||
|
Commands->Set_Is_Rendered( rub1, false );
|
||
|
GameObject *rub2 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-113.706f, 78.884f, 0.656f));
|
||
|
block2 = Commands->Get_ID (rub2);
|
||
|
Commands->Set_Is_Rendered( rub2, false );
|
||
|
GameObject *rub3 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-117.624f, 73.787f, 0.656f));
|
||
|
block3 = Commands->Get_ID (rub3);
|
||
|
Commands->Set_Is_Rendered( rub3, false );
|
||
|
Commands->Set_Facing (rub3, -90.0);
|
||
|
GameObject *rub4 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-122.458f, 78.303f, 0.656f));
|
||
|
block4 = Commands->Get_ID (rub4);
|
||
|
Commands->Set_Is_Rendered( rub4, false );
|
||
|
GameObject *rub5 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-117.320f, 83.098f, 3.906f));
|
||
|
block5 = Commands->Get_ID (rub5);
|
||
|
Commands->Set_Facing (rub5, 90.0);
|
||
|
Commands->Set_Is_Rendered( rub5, false );
|
||
|
GameObject *rub6 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-113.706f, 78.884f, 3.906f));
|
||
|
block6 = Commands->Get_ID (rub6);
|
||
|
Commands->Set_Is_Rendered( rub6, false );
|
||
|
GameObject *rub7 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-117.624f, 73.787f, 3.906f));
|
||
|
block7 = Commands->Get_ID (rub7);
|
||
|
Commands->Set_Is_Rendered( rub7, false );
|
||
|
Commands->Set_Facing (rub7, -90.0);
|
||
|
GameObject *rub8 = Commands->Create_Object ("M08_Rubble_Stub", Vector3 (-122.458f, 78.303f, 3.906f));
|
||
|
block8 = Commands->Get_ID (rub8);
|
||
|
Commands->Set_Is_Rendered( rub8, false );
|
||
|
|
||
|
|
||
|
Commands->Static_Anim_Phys_Goto_Frame ( 1300881, 0, "cave_lift.cave_lift" );
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_AggAndCover, "")
|
||
|
{
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
Commands->Set_Innate_Aggressiveness ( obj, 50.0f );
|
||
|
Commands->Set_Innate_Take_Cover_Probability ( obj, 100.0f );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Technician_Work, "")
|
||
|
{
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_BULLET_HEARD - 5, 1);
|
||
|
params.Set_Animation( "H_A_a0f0", true );
|
||
|
Commands->Action_Play_Animation (obj, params);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Paratrooper_Run, "")
|
||
|
{
|
||
|
bool initial_damage;
|
||
|
float initial_health;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( initial_damage, 1 );
|
||
|
SAVE_VARIABLE( initial_health, 2 );
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
initial_damage = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (!initial_damage)
|
||
|
{
|
||
|
if (type == CUSTOM_EVENT_FALLING_DAMAGE)
|
||
|
{
|
||
|
initial_health = Commands->Get_Health(obj);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject *damager, float amount)
|
||
|
{
|
||
|
if (!initial_damage && damager == NULL)
|
||
|
{
|
||
|
initial_damage = true;
|
||
|
Commands->Set_Health(obj, initial_health);
|
||
|
|
||
|
float distance = Commands->Get_Random(-12.0f, 12.0f);
|
||
|
//distance *= 3;
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
float a = cos(DEG_TO_RADF(facing)) * distance;
|
||
|
float b = sin(DEG_TO_RADF(facing)) * distance;
|
||
|
Vector3 goto_loc = pos + Vector3(a, b, 0.0f);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, 100, 40);
|
||
|
params.Set_Movement(goto_loc, RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT (M03_Damage_Modifier_All, "Damage_multiplier:float")
|
||
|
{
|
||
|
float current_health, last_health, damage_tally;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( current_health, 1 );
|
||
|
SAVE_VARIABLE( last_health, 2 );
|
||
|
SAVE_VARIABLE( damage_tally, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject *obj)
|
||
|
{
|
||
|
last_health = Commands->Get_Health (obj);
|
||
|
damage_tally = 0;
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
float damage;
|
||
|
|
||
|
|
||
|
current_health = Commands->Get_Health (obj);
|
||
|
if (current_health == 0)
|
||
|
{
|
||
|
damage = ((last_health - current_health) + damage_tally);
|
||
|
damage_tally = 0;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
damage = (last_health - current_health);
|
||
|
damage_tally = 0;
|
||
|
}
|
||
|
float mod_damage = (damage * (Get_Float_Parameter("Damage_multiplier")));
|
||
|
damage_tally += mod_damage;
|
||
|
|
||
|
Commands->Set_Health (obj, (last_health - mod_damage));
|
||
|
last_health = Commands->Get_Health (obj);
|
||
|
current_health = Commands->Get_Health (obj);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_Cine_Explosion, "")
|
||
|
{
|
||
|
void Custom (GameObject *obj, int type, int param, GameObject *sender)
|
||
|
{
|
||
|
if (type == 600)
|
||
|
{
|
||
|
Commands->Create_Explosion( "M03_Cine_Explosion", Commands->Get_Position (obj), obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_ConYardSeen, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (type == 900)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject *obj, GameObject *enterer)
|
||
|
{
|
||
|
if (!already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(1100004), 300, 1, 0);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M03_DataDiscMessage, "")
|
||
|
{
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == CUSTOM_EVENT_POWERUP_GRANTED )
|
||
|
{
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M00EVAG_DSGN0104I1EVAG_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
}
|
||
|
}
|
||
|
};
|