6734 lines
163 KiB
C++
6734 lines
163 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
|
||
|
* Mission07.cpp
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
* Mission 7 specific scripts
|
||
|
*
|
||
|
* PROGRAMMER
|
||
|
* Ryan Vervack
|
||
|
*
|
||
|
* VERSION INFO
|
||
|
* $Author: Dan_e $
|
||
|
* $Revision: 122 $
|
||
|
* $Modtime: 1/08/02 12:14p $
|
||
|
* $Archive: /Commando/Code/Scripts/Mission07.cpp $
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include "scripts.h"
|
||
|
#include "toolkit.h"
|
||
|
#include "mission7.h"
|
||
|
|
||
|
// M07B
|
||
|
// Objective Controller
|
||
|
DECLARE_SCRIPT(M07_Objective_Controller, "") // 100657
|
||
|
{
|
||
|
bool accomplished_705;
|
||
|
bool accomplished_701;
|
||
|
|
||
|
enum {HAVOCS_SCRIPT, M07_DEAD_HAVOC, INITIAL_CONV, PROTECT_TEAM};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( accomplished_705, 1 );
|
||
|
SAVE_VARIABLE( accomplished_701, 2 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
// Background Music
|
||
|
Commands->Set_Background_Music ("07-Got A Present For Ya.mp3");
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 0.5f, HAVOCS_SCRIPT);
|
||
|
Commands->Start_Timer (obj, this, 1.0f, INITIAL_CONV);
|
||
|
Add_An_Objective(709);
|
||
|
accomplished_705 = false;
|
||
|
accomplished_701 = false;
|
||
|
}
|
||
|
|
||
|
void Add_An_Objective(int id)
|
||
|
{
|
||
|
GameObject *object;
|
||
|
|
||
|
switch (id)
|
||
|
{
|
||
|
// Evacuate Sydney
|
||
|
case 701:
|
||
|
{
|
||
|
Commands->Add_Objective(701, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M07_01, NULL, IDS_Enc_Obj_Primary_M07_01);
|
||
|
object = Commands->Find_Object(100664);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M11DSGN_DSGN1007I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Set_Objective_Radar_Blip_Object(701, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(701, 90.0f, "POG_M07_1_04.tga", IDS_POG_EVACUATE, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Secure SAM Sites
|
||
|
case 702:
|
||
|
{
|
||
|
Commands->Add_Objective(702, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M07_03, NULL, IDS_Enc_Obj_Primary_M07_03);
|
||
|
object = Commands->Find_Object(100673);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M07DSGN_DSGN0089I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Set_Objective_Radar_Blip_Object(702, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(702, 90.0f, "POG_M07_1_01.tga", IDS_POG_SECURE, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Destroy SSM Launchers
|
||
|
case 703:
|
||
|
{
|
||
|
Commands->Add_Objective(703, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M07_04, NULL, IDS_Enc_Obj_Primary_M07_04);
|
||
|
object = Commands->Find_Object(100798);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(703, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(703, 90.0f, "POG_M07_1_02.tga", IDS_POG_DESTROY, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Destroy Radar Installations
|
||
|
case 704:
|
||
|
{
|
||
|
Commands->Add_Objective(704, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M07_01, NULL, IDS_Enc_Obj_Secondary_M07_01);
|
||
|
object = Commands->Find_Object(100721);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(704, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(704, 90.0f, "POG_M07_2_07.tga", IDS_POG_DESTROY, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Rescue Resistance
|
||
|
case 705:
|
||
|
{
|
||
|
Commands->Add_Objective(705, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M07_02, NULL, IDS_Enc_Obj_Secondary_M07_02);
|
||
|
object = Commands->Find_Object(115842);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(705, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(705, 90.0f, "POG_M07_2_04.tga", IDS_POG_RESCUE, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Destroy Napalm Stockpile
|
||
|
case 706:
|
||
|
{
|
||
|
Commands->Add_Objective(706, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M07_03, NULL, IDS_Enc_Obj_Secondary_M07_03);
|
||
|
object = Commands->Find_Object(100781);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(706, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(706, 90.0f, "POG_M07_2_06.tga", IDS_POG_DESTROY, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Destroy Stealth Tank
|
||
|
case 707:
|
||
|
{
|
||
|
Commands->Add_Objective(707, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M07_04, NULL, IDS_Enc_Obj_Secondary_M07_04);
|
||
|
object = Commands->Find_Object(100801);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(707, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(707, 90.0f, "POG_M07_2_03.tga", IDS_POG_DESTROY, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Defeat Obelisk
|
||
|
case 708:
|
||
|
{
|
||
|
Commands->Add_Objective(708, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Secondary_M07_05, NULL, IDS_Enc_Obj_Secondary_M07_05);
|
||
|
object = Commands->Find_Object(168926);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(708, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(708, 90.0f, "POG_M07_2_05.tga", IDS_POG_DEFEAT, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Protect Team Members
|
||
|
case 709:
|
||
|
{
|
||
|
Commands->Add_Objective(709, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M07_05, NULL, IDS_Enc_Obj_Primary_M07_05);
|
||
|
object = Commands->Find_Object(100717);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M07DSGN_DSGN0091I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Set_Objective_Radar_Blip_Object(709, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(709, 90.0f, "POG_M07_1_05.tga", IDS_POG_PROTECT, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
// Escape Nuclear Strike
|
||
|
case 710:
|
||
|
{
|
||
|
Commands->Add_Objective(710, OBJECTIVE_TYPE_PRIMARY, OBJECTIVE_STATUS_PENDING, IDS_Enc_ObjTitle_Primary_M07_02, NULL, IDS_Enc_Obj_Primary_M07_02);
|
||
|
object = Commands->Find_Object(100717);
|
||
|
if(object)
|
||
|
{
|
||
|
Commands->Set_Objective_Radar_Blip_Object(710, object);
|
||
|
Commands->Set_Objective_HUD_Info_Position(710, 90.0f, "POG_M07_1_03.tga", IDS_POG_ESCAPE, Commands->Get_Position (object));
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Remove_Pog(int id)
|
||
|
{
|
||
|
switch (id)
|
||
|
{
|
||
|
// Evacuate Dr. Sydney Mobius
|
||
|
case 701:
|
||
|
{
|
||
|
Commands->Set_Objective_HUD_Info (701, -1, "POG_M07_1_04.tga", IDS_POG_PROTECT);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
switch (param)
|
||
|
{
|
||
|
case 1:
|
||
|
{
|
||
|
if(type == 705 && accomplished_705)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if(type == 705)
|
||
|
{
|
||
|
accomplished_705 = true;
|
||
|
}
|
||
|
if(type == 701)
|
||
|
{
|
||
|
accomplished_701 = true;
|
||
|
}
|
||
|
Commands->Clear_Radar_Marker (type);
|
||
|
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_ACCOMPLISHED);
|
||
|
Remove_Pog(type);
|
||
|
if(type == 703)
|
||
|
{
|
||
|
Commands->Mission_Complete ( true );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
{
|
||
|
if(type == 702 && accomplished_701)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
Commands->Clear_Radar_Marker (type);
|
||
|
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_FAILED);
|
||
|
Remove_Pog(type);
|
||
|
if(type == 701)
|
||
|
{
|
||
|
Commands->Mission_Complete ( false );
|
||
|
}
|
||
|
if(type == 702)
|
||
|
{
|
||
|
Commands->Mission_Complete ( false );
|
||
|
}
|
||
|
if(type == 709)
|
||
|
{
|
||
|
Commands->Mission_Complete ( false );
|
||
|
}
|
||
|
if(type == 710)
|
||
|
{
|
||
|
Commands->Mission_Complete ( false );
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
Add_An_Objective(type);
|
||
|
break;
|
||
|
case 4:
|
||
|
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_PENDING);
|
||
|
break;
|
||
|
case 5:
|
||
|
Commands->Set_Objective_Status(type, OBJECTIVE_STATUS_HIDDEN);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
if(timer_id == INITIAL_CONV)
|
||
|
{
|
||
|
// How are Dr. Mobius and Sydney?\n
|
||
|
const char *conv_name = ("M07_CON001");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN - 5, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(GUNNER, conv_id, true, true);
|
||
|
Commands->Start_Conversation (conv_id, 300701);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
}
|
||
|
if(timer_id == PROTECT_TEAM)
|
||
|
{
|
||
|
Add_An_Objective(710);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(action_id == 300701 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
Add_An_Objective(701);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 2.0f, PROTECT_TEAM);
|
||
|
|
||
|
// Start nuclear strike countdown
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100663), M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Customs to move team to evac site
|
||
|
// Gunner
|
||
|
Commands->Send_Custom_Event(obj, GUNNER, M07_GO_ASSEMBLY, 1, 0.0f);
|
||
|
// Deadeye
|
||
|
Commands->Send_Custom_Event(obj, DEADEYE, M07_GO_ASSEMBLY, 1, 0.0f);
|
||
|
// Sydney
|
||
|
Commands->Send_Custom_Event(obj, SYDNEY, M07_GO_ASSEMBLY, 1, 0.0f);
|
||
|
// Hotwire
|
||
|
Commands->Send_Custom_Event(obj, HOTWIRE, M07_GO_ASSEMBLY, 1, 2.0f);
|
||
|
// Patch
|
||
|
Commands->Send_Custom_Event(obj, PATCH, M07_GO_ASSEMBLY, 1, 2.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
//Grants initial weapons
|
||
|
DECLARE_SCRIPT(M07_Havoc_DLS, "")
|
||
|
{
|
||
|
bool nuke_blast;
|
||
|
|
||
|
enum {HAVOC_ALARM_SOUND};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
nuke_blast = true;
|
||
|
Commands->Give_PowerUp(obj, "POW_Chaingun_Player");
|
||
|
Commands->Give_PowerUp(obj, "POW_SniperRifle_Player");
|
||
|
Commands->Give_PowerUp(obj, "POW_RocketLauncher_Player");
|
||
|
Commands->Give_PowerUp(obj, "POW_MineRemote_Player");
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "DEATH");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
if(enemy == Commands->Find_Object(100801))
|
||
|
{
|
||
|
// You've got to be kidding.\n
|
||
|
const char *conv_name = ("M07_CON015");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300707);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300702 && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
// Defeat Stealth Tank.
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 707, 3, 0.0f);
|
||
|
// Change soundtrack to attack
|
||
|
Commands->Set_Background_Music ("Raveshaw_Act on Instinct");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Mission_Complete(false);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Minigunner, "") // Deadeye
|
||
|
{
|
||
|
|
||
|
bool nuke_blast;
|
||
|
float health;
|
||
|
float shield;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
SAVE_VARIABLE( health, 2 );
|
||
|
SAVE_VARIABLE( shield, 3 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
nuke_blast = true;
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
shield = Commands->Get_Max_Shield_Strength(obj);
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_GO_ASSEMBLY )
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, M07_GO_ASSEMBLY );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 102495;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_GO_EVAC_SITE )
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "DEATH");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
if ( type == M07_CAPTURE_SAM )
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), M07_CAPTURE_SAM);
|
||
|
params.Set_Movement (Commands->Find_Object(100682), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
Commands->Enable_Hibernation(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == M07_GO_EVAC_SITE)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj));
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_GO_EVAC_SITE);
|
||
|
}
|
||
|
if (action_id == M07_CAPTURE_SAM && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == obj || damager == GUNNER || damager == PATCH || damager == HOTWIRE)
|
||
|
{
|
||
|
Commands->Set_Health(obj, health);
|
||
|
Commands->Set_Shield_Strength(obj, shield);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
shield = Commands->Get_Shield_Strength(obj);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Deadeye Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0178I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Rocket_Soldier, "") // Gunner
|
||
|
{
|
||
|
|
||
|
bool nuke_blast;
|
||
|
float health;
|
||
|
float shield;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
SAVE_VARIABLE( health, 2 );
|
||
|
SAVE_VARIABLE( shield, 3 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
nuke_blast = true;
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
shield = Commands->Get_Max_Shield_Strength(obj);
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_GO_ASSEMBLY )
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, M07_GO_ASSEMBLY );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 102479;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_GO_EVAC_SITE )
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
if ( type == M07_CAPTURE_SAM )
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "DEATH");
|
||
|
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), M07_CAPTURE_SAM);
|
||
|
params.Set_Movement (Commands->Find_Object(100681), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
Commands->Enable_Hibernation(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == M07_GO_EVAC_SITE)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj));
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_GO_EVAC_SITE);
|
||
|
}
|
||
|
if (action_id == M07_CAPTURE_SAM && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == obj || damager == DEADEYE || damager == PATCH || damager == HOTWIRE)
|
||
|
{
|
||
|
Commands->Set_Health(obj, health);
|
||
|
Commands->Set_Shield_Strength(obj, shield);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
shield = Commands->Get_Shield_Strength(obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Gunner Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0176I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Grenadier, "") // Patch
|
||
|
{
|
||
|
|
||
|
bool nuke_blast;
|
||
|
float health;
|
||
|
float shield;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
SAVE_VARIABLE( health, 2 );
|
||
|
SAVE_VARIABLE( shield, 3 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
nuke_blast = true;
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
shield = Commands->Get_Max_Shield_Strength(obj);
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_GO_ASSEMBLY )
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, M07_GO_ASSEMBLY );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 102495;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_GO_EVAC_SITE )
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "DEATH");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
if ( type == M07_CAPTURE_SAM )
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_CAPTURE_SAM);
|
||
|
params.Set_Movement (SYDNEY, RUN, 3.0f);
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
Commands->Enable_Hibernation(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == M07_GO_EVAC_SITE)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if(timer_id == M07_CAPTURE_SAM)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_CAPTURE_SAM);
|
||
|
params.Set_Movement (SYDNEY, RUN, 3.0f);
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj));
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_GO_EVAC_SITE);
|
||
|
}
|
||
|
if (action_id == M07_CAPTURE_SAM && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_CAPTURE_SAM);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == obj || damager == DEADEYE || damager == GUNNER || damager == HOTWIRE)
|
||
|
{
|
||
|
Commands->Set_Health(obj, health);
|
||
|
Commands->Set_Shield_Strength(obj, shield);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
shield = Commands->Get_Shield_Strength(obj);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Patch Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M07DSGN_DSGN0092I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Grenadier2, "") // Patch2
|
||
|
{
|
||
|
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 103837;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Patch Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M07DSGN_DSGN0092I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_MiniGunner2, "") // Deadeye2
|
||
|
{
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 103837;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Deadeye Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0178I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Rocket_Soldier2, "") // Gunner2
|
||
|
{
|
||
|
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 103837;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Gunner Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0176I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Sydney2, "")
|
||
|
{
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), 1.0f, 1.5f );
|
||
|
params.WaypathID = 103837;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M11DSGN_DSGN1008I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 701, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Dead6_Engineer, "") // Hotwire
|
||
|
{
|
||
|
|
||
|
bool nuke_blast;
|
||
|
bool go_evac_site;
|
||
|
bool dont_move;
|
||
|
int current_move_loc;
|
||
|
int move_loc[10];
|
||
|
bool evac;
|
||
|
float health;
|
||
|
float shield;
|
||
|
|
||
|
enum{GO_SAM1, ATTACK_SAM1, GO_SAM2, ATTACK_SAM2,
|
||
|
HOTWIRE_MOVE_LOC, MOVE_LOC_LOW_PRIORITY, TANK_STILL_THERE, ARRIVE_EVAC_SPOT};
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
SAVE_VARIABLE( go_evac_site, 2 );
|
||
|
SAVE_VARIABLE( dont_move, 3 );
|
||
|
SAVE_VARIABLE( current_move_loc, 4 );
|
||
|
SAVE_VARIABLE( evac, 5 );
|
||
|
SAVE_VARIABLE( health, 6 );
|
||
|
SAVE_VARIABLE( shield, 7 );
|
||
|
SAVE_VARIABLE( move_loc, 8 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
|
||
|
nuke_blast = true;
|
||
|
go_evac_site = false;
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
dont_move = true;
|
||
|
evac = false;
|
||
|
current_move_loc = 0;
|
||
|
move_loc[0] = 102469;
|
||
|
move_loc[1] = 102470;
|
||
|
move_loc[2] = 102471;
|
||
|
move_loc[3] = 102472;
|
||
|
move_loc[4] = 102473;
|
||
|
move_loc[5] = 102474;
|
||
|
move_loc[6] = 102475;
|
||
|
move_loc[7] = 102476;
|
||
|
move_loc[8] = 102477;
|
||
|
move_loc[9] = 102478;
|
||
|
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
shield = Commands->Get_Max_Shield_Strength(obj);
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (type == M07_EVAC_INN) //SAM sites captured, evac DEAD6 and Sydney
|
||
|
{
|
||
|
evac = true;
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), ARRIVE_EVAC_SPOT);
|
||
|
params.Set_Movement (Commands->Find_Object(105151), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_GO_ASSEMBLY )
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, M07_GO_ASSEMBLY );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 102510;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_GO_EVAC_SITE )
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "DEATH");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
|
||
|
if ( type == M07_CAPTURE_SAM )
|
||
|
{
|
||
|
go_evac_site = true;
|
||
|
|
||
|
// params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), M07_CAPTURE_SAM);
|
||
|
// params.Set_Movement (STAR, RUN, 3.0f);
|
||
|
// params.MoveFollow = true;
|
||
|
// Commands->Action_Goto (obj, params);
|
||
|
|
||
|
dont_move = false;
|
||
|
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), HOTWIRE_MOVE_LOC);
|
||
|
params.Set_Movement (Commands->Find_Object(move_loc[current_move_loc]), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_HOTWIRE_CAPTURE_SAMS && (!Commands->Find_Object(100905)))
|
||
|
{
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
if(Commands->Find_Object(100674))
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
dont_move = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_SAM1 );
|
||
|
params.Set_Movement (Commands->Find_Object(100674), RUN, 10.0f);
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
|
||
|
GameObject * inn_loc = Commands->Find_Object(100718);
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(inn_loc));
|
||
|
}
|
||
|
|
||
|
else if(Commands->Find_Object(100673))
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
dont_move = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_SAM2 );
|
||
|
params.Set_Movement (Commands->Find_Object(100673), RUN, 10.0f);
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
|
||
|
GameObject * inn_loc = Commands->Find_Object(100718);
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(inn_loc));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( type == M07_HOTWIRE_CAPTURE_SAMS && (Commands->Find_Object(100905)))
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 5.0f, TANK_STILL_THERE);
|
||
|
|
||
|
}
|
||
|
|
||
|
if(type == M07_MOVE_HOTWIRE && !dont_move)
|
||
|
{
|
||
|
current_move_loc = param;
|
||
|
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), HOTWIRE_MOVE_LOC);
|
||
|
params.Set_Movement (Commands->Find_Object(move_loc[current_move_loc]), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == M07_GO_EVAC_SITE && !go_evac_site && !evac)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if(timer_id == ATTACK_SAM1 && !evac)
|
||
|
{
|
||
|
// Custom to change SAMs playertype to GDI
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100674), M07_CHANGE_SAM_TEAM, 1, 0.0f);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100679), M07_CHANGE_SAM_TEAM, 1, 0.0f);
|
||
|
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_SAM2 );
|
||
|
params.Set_Movement (Commands->Find_Object(100673), RUN, 10.0f);
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
|
||
|
|
||
|
}
|
||
|
if(timer_id == ATTACK_SAM2 && !evac)
|
||
|
{
|
||
|
// Custom to change SAMs playertype to GDI
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100673), M07_CHANGE_SAM_TEAM, 1, 0.0f);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100680), M07_CHANGE_SAM_TEAM, 1, 0.0f);
|
||
|
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
Commands->Select_Weapon(obj, NULL );
|
||
|
|
||
|
}
|
||
|
|
||
|
if(timer_id == MOVE_LOC_LOW_PRIORITY)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), HOTWIRE_MOVE_LOC);
|
||
|
params.Set_Movement (Commands->Find_Object(move_loc[current_move_loc]), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
|
||
|
}
|
||
|
|
||
|
if(timer_id == TANK_STILL_THERE)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, obj, M07_HOTWIRE_CAPTURE_SAMS, 1, 0.0f);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (action_id == ARRIVE_EVAC_SPOT && reason == ACTION_COMPLETE_NORMAL && evac)
|
||
|
{
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
if (action_id == ARRIVE_EVAC_SPOT && reason == ACTION_COMPLETE_MOVE_NO_PROGRESS_MADE && evac)
|
||
|
{
|
||
|
// This is a hack for the moment, need to have pathfinding around dec_phys vehicles at inn
|
||
|
int dead6_id = Commands->Get_ID(obj);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, dead6_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_NORMAL && !evac)
|
||
|
{
|
||
|
go_evac_site = true;
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj));
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_LOW_PRIORITY && !evac)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_GO_EVAC_SITE);
|
||
|
}
|
||
|
|
||
|
if (action_id == GO_SAM1 && reason == ACTION_COMPLETE_NORMAL && !evac)
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 100 );
|
||
|
params.Set_Attack (Commands->Find_Object(100679), 250.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_SAM1);
|
||
|
}
|
||
|
if (action_id == GO_SAM1 && reason == ACTION_COMPLETE_LOW_PRIORITY && !evac)
|
||
|
{
|
||
|
// Keep trying to GO_SAM1
|
||
|
Commands->Send_Custom_Event (obj, HOTWIRE, M07_HOTWIRE_CAPTURE_SAMS, 1, 2.0f);
|
||
|
}
|
||
|
if (action_id == GO_SAM2 && reason == ACTION_COMPLETE_NORMAL && !evac)
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 100 );
|
||
|
params.Set_Attack (Commands->Find_Object(100680), 250.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_SAM2);
|
||
|
}
|
||
|
|
||
|
if(action_id == HOTWIRE_MOVE_LOC && reason == ACTION_COMPLETE_NORMAL && !evac)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj), 4.0f);
|
||
|
}
|
||
|
if(action_id == HOTWIRE_MOVE_LOC && reason == ACTION_COMPLETE_LOW_PRIORITY && !evac)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 4.0f, MOVE_LOC_LOW_PRIORITY);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Destroyed(GameObject * obj)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_DEAD6_EVAC, 1, 0.0f);
|
||
|
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == obj || damager == DEADEYE || damager == GUNNER || damager == HOTWIRE)
|
||
|
{
|
||
|
Commands->Set_Health(obj, health);
|
||
|
Commands->Set_Shield_Strength(obj, shield);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
shield = Commands->Get_Shield_Strength(obj);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Hotwire Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0174I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Sydney, "")
|
||
|
{
|
||
|
bool nuke_blast;
|
||
|
float health;
|
||
|
float shield;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( nuke_blast, 1 );
|
||
|
SAVE_VARIABLE( health, 2 );
|
||
|
SAVE_VARIABLE( shield, 3 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
nuke_blast = true;
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
shield = Commands->Get_Max_Shield_Strength(obj);
|
||
|
// Give Sydney initial pistol
|
||
|
Commands->Give_PowerUp(obj, "POW_Pistol_AI");
|
||
|
Commands->Select_Weapon(obj, "Weapon_Pistol_Ai" );
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_GO_ASSEMBLY )
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, M07_GO_ASSEMBLY );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 102479;
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if(type == M07_GO_EVAC_SITE)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
nuke_blast = (param == 1) ? true : false;
|
||
|
}
|
||
|
|
||
|
if ( type == M07_CAPTURE_SAM )
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN + 5), M07_CAPTURE_SAM);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 3.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
|
||
|
Commands->Enable_Hibernation(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == M07_CAPTURE_SAM && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Soldier_Home_Location(obj, Commands->Get_Position(obj));
|
||
|
}
|
||
|
if (action_id == M07_GO_EVAC_SITE && reason == ACTION_COMPLETE_LOW_PRIORITY)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 6.0f, M07_GO_EVAC_SITE);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_NUKE_IMPACT)
|
||
|
{
|
||
|
if(nuke_blast)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == M07_GO_EVAC_SITE)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), M07_GO_EVAC_SITE);
|
||
|
params.Set_Movement (Commands->Find_Object(100664), RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == obj || damager == DEADEYE || damager == GUNNER || damager == HOTWIRE || damager == PATCH)
|
||
|
{
|
||
|
Commands->Set_Health(obj, health);
|
||
|
Commands->Set_Shield_Strength(obj, shield);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
shield = Commands->Get_Shield_Strength(obj);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Sydney Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M11DSGN_DSGN1008I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 701, 2, 1.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Cathedral_Controller, "") // 100663
|
||
|
{
|
||
|
|
||
|
enum{TWO_MIN, ONE_MIN, THIRTY, TWENTY, TEN, FIVE, FOUR, THREE, TWO, ONE, ESCAPED, NUKEBITS};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( alarmed, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_GO_EVAC_SITE )
|
||
|
{
|
||
|
// Impact: 2 Minutes.\n
|
||
|
const char *conv_name = ("M07_CON003");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 60.0f, TWO_MIN);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == TWO_MIN)
|
||
|
{
|
||
|
// Impact: 1 Minute.\n
|
||
|
const char *conv_name = ("M07_CON004");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 30.0f, ONE_MIN);
|
||
|
}
|
||
|
if(timer_id == ONE_MIN)
|
||
|
{
|
||
|
// Impact: 30 seconds.\n
|
||
|
const char *conv_name = ("M07_CON005");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 10.0f, THIRTY);
|
||
|
}
|
||
|
if(timer_id == THIRTY)
|
||
|
{
|
||
|
// Impact: 20 seconds.\n
|
||
|
const char *conv_name = ("M07_CON006");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 10.0f, TWENTY);
|
||
|
}
|
||
|
if(timer_id == TWENTY)
|
||
|
{
|
||
|
// Impact: 10 seconds.\n
|
||
|
const char *conv_name = ("M07_CON007");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 5.0f, TEN);
|
||
|
}
|
||
|
if(timer_id == TEN)
|
||
|
{
|
||
|
// Impact: 5 seconds.\n
|
||
|
const char *conv_name = ("M07_CON008");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 1.0f, FIVE);
|
||
|
}
|
||
|
if(timer_id == FIVE)
|
||
|
{
|
||
|
GameObject * cinematic_controller = Commands->Create_Object ( "Invisible_Object", Vector3(-100.879f, 88.570f, 29.184f));
|
||
|
Commands->Attach_Script(cinematic_controller, "Test_Cinematic", "XG_NukeStrike.txt");
|
||
|
|
||
|
// 4 seconds.\n
|
||
|
const char *conv_name = ("M07_CON009");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 1.0f, FOUR);
|
||
|
}
|
||
|
if(timer_id == FOUR)
|
||
|
{
|
||
|
// 3 seconds.\n
|
||
|
const char *conv_name = ("M07_CON010");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 1.0f, THREE);
|
||
|
}
|
||
|
if(timer_id == THREE)
|
||
|
{
|
||
|
// 2 seconds.\n
|
||
|
const char *conv_name = ("M07_CON011");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 1.0f, TWO);
|
||
|
|
||
|
|
||
|
}
|
||
|
if(timer_id == TWO)
|
||
|
{
|
||
|
// 1 seconds.\n
|
||
|
const char *conv_name = ("M07_CON012");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 1.0f, ONE);
|
||
|
|
||
|
Commands->Set_Clouds (1.0f, 1.0f, 3.0f);
|
||
|
}
|
||
|
if(timer_id == ONE)
|
||
|
{
|
||
|
// Send customs to Nuke Blast Radius determination zones to deactivate them
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100665), M07_DEACTIVATE_NUKE_BLAST, 1, 0.0f);
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100666), M07_DEACTIVATE_NUKE_BLAST, 1, 0.0f);
|
||
|
// Boom!
|
||
|
Commands->Create_Logical_Sound(obj, M07_NUKE_IMPACT, Commands->Get_Position(obj), 2500.0f);
|
||
|
Commands->Set_Ash(0.15f, 3.0f, false);
|
||
|
Commands->Set_Wind(90.0f, 5.0f, 2.0f, 0.0f);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 2.0f, NUKEBITS);
|
||
|
}
|
||
|
if(timer_id == NUKEBITS)
|
||
|
{
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(Commands->Find_Object(119890)));
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(Commands->Find_Object(119891)));
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(Commands->Find_Object(119892)));
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(Commands->Find_Object(119893)));
|
||
|
GameObject * nukebits = Commands->Create_Object("M07_Nukebits", Vector3(-128.295f, 71.892f, 26.754f));
|
||
|
Commands->Set_Facing( nukebits, -10.000f );
|
||
|
Commands->Start_Timer(obj, this, 3.0f, ESCAPED);
|
||
|
}
|
||
|
if(timer_id == ESCAPED)
|
||
|
{
|
||
|
if(SYDNEY)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_In_Nuke_Blast, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
bool star_in_blast;
|
||
|
bool active;
|
||
|
|
||
|
// 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 );
|
||
|
SAVE_VARIABLE( star_in_blast, 2 );
|
||
|
SAVE_VARIABLE( active, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
star_in_blast = true;
|
||
|
active = true;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
star_in_blast = false;
|
||
|
|
||
|
}
|
||
|
if ( type == M07_DEACTIVATE_NUKE_BLAST )
|
||
|
{
|
||
|
active = false;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(!active)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
// Send to enterer to let script know in blast zone
|
||
|
Commands->Send_Custom_Event (obj, enterer, M07_NUKE_BLAST, 1, 0.0f);
|
||
|
if(!star_in_blast && enterer == STAR)
|
||
|
{
|
||
|
star_in_blast = true;
|
||
|
|
||
|
// Send custom to in blast script to let it know player is out of blast
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100666), M07_NUKE_BLAST, 1, 0.0f);
|
||
|
|
||
|
// Warning - Your are within the Nuclear Strike blast radius. Evacuate immediately.\n
|
||
|
const char *conv_name = ("M07_CON013");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Out_Nuke_Blast, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
bool star_in_blast;
|
||
|
bool active;
|
||
|
|
||
|
// 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 );
|
||
|
SAVE_VARIABLE( star_in_blast, 2 );
|
||
|
SAVE_VARIABLE( active, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
star_in_blast = true;
|
||
|
active = true;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == M07_NUKE_BLAST )
|
||
|
{
|
||
|
star_in_blast = true;
|
||
|
}
|
||
|
if ( type == M07_DEACTIVATE_NUKE_BLAST )
|
||
|
{
|
||
|
active = false;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(!active)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
// Send to enterer to let script know out blast zone
|
||
|
Commands->Send_Custom_Event (obj, enterer, M07_NUKE_BLAST, 0, 0.0f);
|
||
|
if(star_in_blast && enterer == STAR)
|
||
|
{
|
||
|
star_in_blast = false;
|
||
|
|
||
|
// Minimum safe distance achieved.\n
|
||
|
const char *conv_name = ("M07_CON014");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 10);
|
||
|
|
||
|
// Send custom to in blast script to let it know player is out of blast
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100665), M07_NUKE_BLAST, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Gun_Emplacement, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
|
||
|
enum{ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NOD );
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Custom to evac site controller to count when four vehicles in area destroyed
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100664), M07_EVAC_SITE_VEHICLE_KILLED, 1, 0.0f);
|
||
|
Commands->Debug_Message("Evac Site Vehicle Killed = %d \n", Commands->Get_ID(obj));
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Evac_Site_Controller, "") // 100664
|
||
|
{
|
||
|
int m07_evac_site_vehicle_killed;
|
||
|
|
||
|
enum{WHERE_EVAC};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( m07_evac_site_vehicle_killed, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_evac_site_vehicle_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_EVAC_SITE_VEHICLE_KILLED)
|
||
|
{
|
||
|
|
||
|
m07_evac_site_vehicle_killed++;
|
||
|
Commands->Debug_Message("Evac Site Vehicle Killed = %d \n", m07_evac_site_vehicle_killed);
|
||
|
if(m07_evac_site_vehicle_killed == 4)
|
||
|
{
|
||
|
Commands->Debug_Message("Evac Site is clear. Play Locke, where evac conversation");
|
||
|
Commands->Start_Timer (obj, this, 4.0f, WHERE_EVAC);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
|
||
|
if(timer_id == WHERE_EVAC)
|
||
|
{
|
||
|
// Locke, what's my evac status?\n
|
||
|
const char *conv_name = ("M07_CON002");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, INNATE_PRIORITY_ENEMY_SEEN + 5, 2000.0f, false);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(GUNNER, conv_id, false, true);
|
||
|
Commands->Join_Conversation(HOTWIRE, conv_id, false, true);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300702);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300702 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
// Activate Hotwire to SAM sites primary objective
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 702, 3, 0.0f);
|
||
|
|
||
|
// Customs to position team for Primary MO 702
|
||
|
// Hotwire
|
||
|
Commands->Send_Custom_Event(obj, HOTWIRE, M07_CAPTURE_SAM, 1, 0.0f);
|
||
|
// Patch
|
||
|
Commands->Send_Custom_Event(obj, PATCH, M07_CAPTURE_SAM, 1, 0.0f);
|
||
|
// Gunner
|
||
|
Commands->Send_Custom_Event(obj, GUNNER, M07_CAPTURE_SAM, 1, 0.0f);
|
||
|
// Deadeye
|
||
|
Commands->Send_Custom_Event(obj, DEADEYE, M07_CAPTURE_SAM, 1, 0.0f);
|
||
|
// Sydney
|
||
|
Commands->Send_Custom_Event(obj, SYDNEY, M07_CAPTURE_SAM, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Evac_Site_APC, "")
|
||
|
{
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Custom to evac site controller to count when four vehicles in area destroyed
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100664), M07_EVAC_SITE_VEHICLE_KILLED, 1);
|
||
|
Commands->Debug_Message("Evac Site Vehicle Killed = %d \n", Commands->Get_ID(obj));
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Evac_Site_APC_Soldier, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 1 );
|
||
|
params.Set_Movement( STAR, RUN, 20.0f );
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Evac_Site_Soldier, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Hotwire, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
enum{HOTWIRE_CAPTURE_SAMS};
|
||
|
|
||
|
// 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(enterer == HOTWIRE && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
Commands->Enable_Spawner(100715, true);
|
||
|
|
||
|
// Keep those Nod forces off my back, Havoc. I'll crack these SAM's in no time.\n
|
||
|
const char *conv_name = ("M07_CON016");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(HOTWIRE, conv_id, true, true);
|
||
|
Commands->Start_Conversation (conv_id, HOTWIRE_CAPTURE_SAMS);
|
||
|
Commands->Monitor_Conversation(obj, conv_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == HOTWIRE_CAPTURE_SAMS && reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, HOTWIRE, M07_HOTWIRE_CAPTURE_SAMS, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Fancy_Inn_Sam, "")
|
||
|
{
|
||
|
|
||
|
// 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 Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_CHANGE_SAM_TEAM)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100685), M07_SAM_CONVERTED, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100685), M07_SAM_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_SAM_Truck_100680, "")
|
||
|
{
|
||
|
float health;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( health, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_CHANGE_SAM_TEAM)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(health > (.2 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
float damage = health - Commands->Get_Health(obj);
|
||
|
damage *= 0.5f;
|
||
|
health -= damage;
|
||
|
Commands->Set_Health(obj, health);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Apply_Damage( Commands->Find_Object(100680), 10000.0f, "DEATH");
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_SAM_Truck_100679, "")
|
||
|
{
|
||
|
float health;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( health, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_CHANGE_SAM_TEAM)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(health > (.2 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
float damage = health - Commands->Get_Health(obj);
|
||
|
damage *= 0.5f;
|
||
|
health -= damage;
|
||
|
Commands->Set_Health(obj, health);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Apply_Damage( Commands->Find_Object(100679), 10000.0f, "DEATH");
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Fancy_Inn_Controller, "")
|
||
|
{
|
||
|
int m07_sam_converted;
|
||
|
int m07_sam_killed;
|
||
|
|
||
|
enum{CONTROL_SAMS, DESTROY_SYDNEY, DROP_DEAD6_INN};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( m07_sam_converted, 1 );
|
||
|
SAVE_VARIABLE( m07_sam_killed, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_sam_converted = 0;
|
||
|
m07_sam_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_SAM_CONVERTED)
|
||
|
{
|
||
|
m07_sam_converted++;
|
||
|
if(m07_sam_converted == 1)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 702, 1, 0.0f);
|
||
|
Commands->Enable_Spawner(100715, false);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(104496), M07_EVAC_INN, 1, 0.0f);
|
||
|
Commands->Start_Timer(obj, this, 3.0f, CONTROL_SAMS);
|
||
|
|
||
|
// Spawn DEAD6 and Sydney to evacuate
|
||
|
Commands->Enable_Spawner(103833, true);
|
||
|
Commands->Enable_Spawner(103834, true);
|
||
|
Commands->Enable_Spawner(103835, true);
|
||
|
Commands->Enable_Spawner(103836, true);
|
||
|
|
||
|
// Destroy the initial group of people
|
||
|
Commands->Destroy_Object(Commands->Find_Object(100659));
|
||
|
Commands->Destroy_Object(Commands->Find_Object(100660));
|
||
|
Commands->Destroy_Object(Commands->Find_Object(100661));
|
||
|
Commands->Destroy_Object(Commands->Find_Object(100662));
|
||
|
|
||
|
// Grant health increase medal
|
||
|
Commands->Create_Object ( "POW_Medal_Health", Vector3(-45.888f, -73.569f, 4.222f));
|
||
|
// Grant armor increase medal
|
||
|
Commands->Create_Object ( "POW_Medal_Armor", Vector3(-43.445f, -73.384f, 4.222f));
|
||
|
}
|
||
|
}
|
||
|
if(type == M07_SAM_KILLED)
|
||
|
{
|
||
|
m07_sam_killed++;
|
||
|
if(m07_sam_killed == 2)
|
||
|
{
|
||
|
// SAMs Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M07DSGN_DSGN0090I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
// Objective failed if both SAMs destroyed
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 702, 2, 1.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Apache, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
|
||
|
enum{WAYPATH, INN_PATROL, ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
attacking = false;
|
||
|
Commands->Disable_Physical_Collisions(obj);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 100707;
|
||
|
params.MovePathfind = false;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, INN_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 100687;
|
||
|
params.MovePathfind = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, INN_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.WaypathID = 100687;
|
||
|
params.MovePathfind = false;
|
||
|
Commands->Modify_Action (obj, INN_PATROL, params);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_704, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Attention GDI, this is Resistance Radio. Nod's aerial reinforcements are coordinated from mobile radar stations in the Town Square. We need those radar dishes destroyed.\n
|
||
|
const char *conv_name = ("M07_CON018");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300704);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
// Engineers in Town Square
|
||
|
Commands->Enable_Spawner(100726, true);
|
||
|
Commands->Enable_Spawner(100727, true);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100746), M07_TOWNSQUARE_CHINOOK, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300704 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 704, 3, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_705, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// This is Resistance Radio, I have reports of captured resistance fighters west of your position. Can anyone assist?\n
|
||
|
const char *conv_name = ("M07_CON019");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300705);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300705 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 705, 3, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_706, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Havoc, we've spotted an SSM napalm stockpile to your west.\n
|
||
|
const char *conv_name = ("M07_CON020");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300706);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300706 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 706, 3, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_707, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Those must be the SSMs. Time to get to work.\n
|
||
|
const char *conv_name = ("M07_CON021");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300707);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300707 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 707, 3, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_708, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// \\Warning - Nod Obelisk detected.\n
|
||
|
const char *conv_name = ("M07_CON022");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300708);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300708 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 708, 3, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Objective_710, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ( Commands->Is_A_Star(enterer) )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 710, 3, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_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, "M07_Destroyed_SAM_Site", "");
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M00_CUSTOM_SAM_SITE_IGNORE && current < 10)
|
||
|
{
|
||
|
ignore_ids[current++] = param;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_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(M07_Mobile_Radar, "")
|
||
|
{
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "v_nod_radar.v_nod_radar", true);
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < Commands->Get_Max_Health(obj))
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_RADAR_DAMAGED, Commands->Get_Position(obj), 10.0f);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_RADAR_FIXED, Commands->Get_Position(obj), 10.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(obj));
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100746), M07_RADAR_KILLED, 0, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Radar_Engineer, "Radar_ID=0:int")
|
||
|
{
|
||
|
|
||
|
enum{GO_RADAR};
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, false);
|
||
|
|
||
|
int radar_id = Get_Int_Parameter("Radar_ID");
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_RADAR);
|
||
|
params.Set_Movement(Commands->Find_Object(radar_id), RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (sound.Type == M07_RADAR_DAMAGED)
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 100 );
|
||
|
params.Set_Attack (sound.Creator, 250.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
if (sound.Type == M07_RADAR_FIXED)
|
||
|
{
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == GO_RADAR && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_TownSquare_Unit, "Spawn_ID=0:int, Waypath_ID=0:int")
|
||
|
{
|
||
|
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
int waypath_id = Get_Int_Parameter("Waypath_ID");
|
||
|
|
||
|
if(waypath_id == 0)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 0.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
int spawn_id = Get_Int_Parameter("Spawn_ID");
|
||
|
Commands->Enable_Spawner(spawn_id, true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_TownSquare_Controller, "") //
|
||
|
{
|
||
|
bool chinooks_active;
|
||
|
int m07_radar_killed;
|
||
|
|
||
|
enum{CHINOOK1, CHINOOK2};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( chinooks_active, 1 );
|
||
|
SAVE_VARIABLE( m07_radar_killed, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
chinooks_active = false;
|
||
|
m07_radar_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_TOWNSQUARE_CHINOOK)
|
||
|
{
|
||
|
if(param == 1)
|
||
|
{
|
||
|
chinooks_active = true;
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-316.374f, -149.140f, 5.023f));
|
||
|
Commands->Set_Facing(chinook_obj1, 95.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_EV3_1.txt");
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 20.0f, CHINOOK1);
|
||
|
Commands->Start_Timer(obj, this, 10.0f, CHINOOK2);
|
||
|
}
|
||
|
if(param == 0)
|
||
|
{
|
||
|
chinooks_active = false;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
if (type == M07_RADAR_KILLED)
|
||
|
{
|
||
|
m07_radar_killed++;
|
||
|
if(m07_radar_killed == 2)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 704, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == CHINOOK1 && chinooks_active)
|
||
|
{
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-316.374f, -149.140f, 5.023f));
|
||
|
Commands->Set_Facing(chinook_obj1, 95.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_EV3_1.txt");
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 20.0f, CHINOOK1);
|
||
|
}
|
||
|
if(timer_id == CHINOOK2 && chinooks_active)
|
||
|
{
|
||
|
GameObject * chinook_obj2 = Commands->Create_Object ( "Invisible_Object", Vector3(-343.696f, -145.495f, 5.136f));
|
||
|
Commands->Set_Facing(chinook_obj2, -55.000f);
|
||
|
Commands->Attach_Script(chinook_obj2, "Test_Cinematic", "M07_XG_EV3_1.txt");
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 20.0f, CHINOOK2);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Deactivate_TownSquare_Chinook, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer) && !already_entered )
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100746), M07_TOWNSQUARE_CHINOOK, 0, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_TownSquare_Gun_Emp, "")
|
||
|
{
|
||
|
|
||
|
// 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 Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Enable_Spawner(100748, true);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Prisoner_Gate, "")
|
||
|
{
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Set_Animation_Frame(obj, "cht_jail.cht_jail", 0);
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(115842), M07_FREE_CIV, 1, 0.0f);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100751), M07_FREE_CIV, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Captured_Civ_Resist, "")
|
||
|
{
|
||
|
|
||
|
bool poked;
|
||
|
bool freed;
|
||
|
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( poked, 1 );
|
||
|
SAVE_VARIABLE( freed, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NEUTRAL );
|
||
|
Commands->Enable_HUD_Pokable_Indicator( obj, true );
|
||
|
poked = false;
|
||
|
freed = false;
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ((Commands->Is_A_Star(poker)) && (!poked) && (!freed))
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_FREE_CIV_RESIST, Commands->Get_Position(obj), 40.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_FREE_CIV_RESIST)
|
||
|
{
|
||
|
freed = true;
|
||
|
Commands->Enable_HUD_Pokable_Indicator( obj, false );
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
Commands->Give_PowerUp(obj, "POW_Chaingun_AI");
|
||
|
Commands->Select_Weapon(obj, "Weapon_Chaingun_Ai" );
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 705, 1, 0.0f);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN + 5, 10);
|
||
|
params.Set_Movement(Commands->Find_Object(115823), RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Spawn reinforcment civ resist
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101056), M07_SPAWN_TRIANGLE_CIV, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Present, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ( Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Havoc, got a present for ya.\n
|
||
|
const char *conv_name = ("M07_CON023");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300700);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-446.944f, -25.105f, 14.134f));
|
||
|
Commands->Set_Facing(chinook_obj1, 155.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_VehicleDrop1.txt");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Player_Vehicle, "")
|
||
|
{
|
||
|
float health;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( health, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
health = Commands->Get_Max_Health(obj);
|
||
|
int vehicle_id = Commands->Get_ID(obj);
|
||
|
// Let enemy tank drop controller know player vehicle id
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101131), M07_PLAYER_VEHICLE_ID, vehicle_id);
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
if(health > (.2 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
float damage = health - Commands->Get_Health(obj);
|
||
|
damage *= 0.5f;
|
||
|
health -= damage;
|
||
|
Commands->Set_Health(obj, health);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100757), M07_PLAYER_VEHICLE_KILLED, 1);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Vehicle_Drop_Controller, "")
|
||
|
{
|
||
|
|
||
|
int vehicle_drop[8];
|
||
|
int drop_zone;
|
||
|
int m07_player_vehicle_killed;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( vehicle_drop, 1 );
|
||
|
SAVE_VARIABLE( drop_zone, 2 );
|
||
|
SAVE_VARIABLE( m07_player_vehicle_killed, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
vehicle_drop[0] = 100755;
|
||
|
vehicle_drop[1] = 100758;
|
||
|
vehicle_drop[2] = 100759;
|
||
|
vehicle_drop[3] = 100760;
|
||
|
vehicle_drop[4] = 100761;
|
||
|
vehicle_drop[5] = 100762;
|
||
|
vehicle_drop[6] = 100768;
|
||
|
vehicle_drop[7] = 100769;
|
||
|
|
||
|
drop_zone = 0;
|
||
|
m07_player_vehicle_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_VEHICLE_DROP_ZONE)
|
||
|
{
|
||
|
|
||
|
if(param == 10 && m07_player_vehicle_killed < 7)
|
||
|
{
|
||
|
// Havoc! Taking missile fire over the park. Launcher is unseen. Repeat, launcher is unseen.\n
|
||
|
const char *conv_name = ("M07_CON024");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300700);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
drop_zone = param;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if (type == M07_PLAYER_VEHICLE_KILLED)
|
||
|
{
|
||
|
m07_player_vehicle_killed++;
|
||
|
if(m07_player_vehicle_killed < 4)
|
||
|
{
|
||
|
if(m07_player_vehicle_killed < 3)
|
||
|
{
|
||
|
// Got you another ride, inbound now!\n
|
||
|
const char *conv_name = ("M07_CON025");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300700);
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(vehicle_drop[drop_zone]);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_VehicleDrop1.txt");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Complements of the local resistance.\n
|
||
|
const char *conv_name = ("M07_CON026");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300700);
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(vehicle_drop[drop_zone]);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_VehicleDrop4.txt");
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Last one, Captain. Recon show Nod's pulling back to the park.\n
|
||
|
const char *conv_name = ("M07_CON027");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300700);
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(vehicle_drop[drop_zone]);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_VehicleDrop3.txt");
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Vehicle_Drop_Zone, "Zone_ID=0:int")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
int zone_id = Get_Int_Parameter("Zone_ID");
|
||
|
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
if(zone_id == 10)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
}
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100757), M07_VEHICLE_DROP_ZONE, zone_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Biohazard_Barrel, "")
|
||
|
{
|
||
|
|
||
|
enum{BOOM};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( vehicle_drop, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Animation_Frame(obj, "o_barrl_bio.o_barrl_bio", 0);
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(obj));
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100781), M07_EXPLODE_BARRELS, 1);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Stockpile_Object, "")
|
||
|
{
|
||
|
|
||
|
bool damaged;
|
||
|
|
||
|
enum{BOOM, STILL_DAMAGED};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( damaged, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
damaged = false;
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
if (sound.Type == M07_EXPLODE_BARRELS)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 100000.0f, "STEEL");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == STILL_DAMAGED && damaged)
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_ENGINEER_DAMAGED, Commands->Get_Position(obj), 40.0f);
|
||
|
Commands->Start_Timer(obj, this, 8.0f, STILL_DAMAGED);
|
||
|
damaged = true;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < Commands->Get_Max_Health(obj))
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_ENGINEER_DAMAGED, Commands->Get_Position(obj), 40.0f);
|
||
|
Commands->Start_Timer(obj, this, 8.0f, STILL_DAMAGED);
|
||
|
damaged = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
damaged = false;
|
||
|
Commands->Create_Logical_Sound(obj, M07_ENGINEER_FIXED, Commands->Get_Position(obj), 40.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Stockpile_Controller, "")
|
||
|
{
|
||
|
|
||
|
int ssm_crate_killed;
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( ssm_crate_killed, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Spawner(100795, true);
|
||
|
ssm_crate_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_SSM_CRATE_KILLED)
|
||
|
{
|
||
|
ssm_crate_killed++;
|
||
|
if(ssm_crate_killed == 4)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 706, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Stockpile_Engineer, "")
|
||
|
{
|
||
|
|
||
|
enum{GO_STOCKPILE};
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, false);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_STOCKPILE);
|
||
|
params.Set_Movement(Commands->Find_Object(100781), RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (sound.Type == M07_ENGINEER_DAMAGED)
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 100 );
|
||
|
params.Set_Attack (sound.Creator, 250.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
if (sound.Type == M07_ENGINEER_FIXED)
|
||
|
{
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == GO_STOCKPILE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Park_Controller, "")
|
||
|
{
|
||
|
int m07_artillery_killed;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( m07_artillery_killed, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_artillery_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_ARTILLERY_KILLED)
|
||
|
{
|
||
|
m07_artillery_killed++;
|
||
|
if(m07_artillery_killed == 2)
|
||
|
{
|
||
|
// Destroy Artillery Piece Objective
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 703, 1, 5.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Park_SSM, "")
|
||
|
{
|
||
|
|
||
|
enum{STILL_DAMAGED};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( destroy_stockpile, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == STILL_DAMAGED)
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < Commands->Get_Max_Health(obj))
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_SSM_DAMAGED, Commands->Get_Position(obj), 1000.0f);
|
||
|
Commands->Start_Timer(obj, this, 10.0f, STILL_DAMAGED);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_SSM_FIXED, Commands->Get_Position(obj), 1000.0f);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < Commands->Get_Max_Health(obj))
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_SSM_DAMAGED, Commands->Get_Position(obj), 1000.0f);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Create_Logical_Sound(obj, M07_SSM_FIXED, Commands->Get_Position(obj), 1000.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100799), M07_ARTILLERY_KILLED, 1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Obelisk, "")
|
||
|
{
|
||
|
int obelisk_weapon_id;
|
||
|
bool converted;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( obelisk_weapon_id, 1 );
|
||
|
SAVE_VARIABLE( converted, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
obelisk_weapon_id = 0;
|
||
|
converted = false;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_PLAYERTYPE_CHANGE_OBELISK)
|
||
|
{
|
||
|
converted = true;
|
||
|
Commands->Set_Player_Type(Commands->Find_Object(obelisk_weapon_id), SCRIPT_PLAYERTYPE_GDI );
|
||
|
|
||
|
}
|
||
|
if(type == M00_OBELISK_WEAPON_ID)
|
||
|
{
|
||
|
obelisk_weapon_id = param;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(!converted)
|
||
|
{
|
||
|
// Custom to Objective_Controller that Obelisk has been destroyed
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 708, 1, 0.0f);
|
||
|
// Custom to Obelisk Poke to turn it off so that it cannot be converted
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100805), M07_OBELISK_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Obelisk_MCT, "")
|
||
|
{
|
||
|
bool poked;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( poked, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
poked = false;
|
||
|
Commands->Enable_HUD_Pokable_Indicator( obj, true );
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(poker)) && (!poked))
|
||
|
{
|
||
|
Commands->Enable_HUD_Pokable_Indicator( obj, false );
|
||
|
Commands->Create_Sound("Computer_Operate_02", Commands->Get_Position(obj), obj);
|
||
|
poked = true;
|
||
|
// Change playertype of Nod Obelisk
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(168926), M07_PLAYERTYPE_CHANGE_OBELISK, 1, 0.0f);
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 708, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_OBELISK_KILLED)
|
||
|
{
|
||
|
Commands->Enable_HUD_Pokable_Indicator( obj, false );
|
||
|
poked = true;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Park_Zone, "Zone=0:int")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)))
|
||
|
{
|
||
|
|
||
|
int activate_zone = Get_Int_Parameter("Zone");
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100801), M07_MOVE_STEALTH_TANK, activate_zone);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Encounter, "Spawner_ID1=0:int, Spawner_ID2=0:int, Spawner_ID3=0:int, Spawner_ID4=0:int, Spawner_ID5=0:int, Spawner_ID6=0:int")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int spawner_id1 = Get_Int_Parameter("Spawner_ID1");
|
||
|
int spawner_id2 = Get_Int_Parameter("Spawner_ID2");
|
||
|
int spawner_id3 = Get_Int_Parameter("Spawner_ID3");
|
||
|
int spawner_id4 = Get_Int_Parameter("Spawner_ID4");
|
||
|
int spawner_id5 = Get_Int_Parameter("Spawner_ID5");
|
||
|
int spawner_id6 = Get_Int_Parameter("Spawner_ID6");
|
||
|
|
||
|
if(spawner_id1 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id1, true);
|
||
|
}
|
||
|
if(spawner_id2 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id2, true);
|
||
|
}
|
||
|
if(spawner_id3 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id3, true);
|
||
|
}
|
||
|
if(spawner_id4 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id4, true);
|
||
|
}
|
||
|
if(spawner_id5 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id5, true);
|
||
|
}
|
||
|
if(spawner_id6 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id6, true);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_DEACTIVATE_ENCOUNTER)
|
||
|
{
|
||
|
int spawner_id1 = Get_Int_Parameter("Spawner_ID1");
|
||
|
int spawner_id2 = Get_Int_Parameter("Spawner_ID2");
|
||
|
int spawner_id3 = Get_Int_Parameter("Spawner_ID3");
|
||
|
int spawner_id4 = Get_Int_Parameter("Spawner_ID4");
|
||
|
int spawner_id5 = Get_Int_Parameter("Spawner_ID5");
|
||
|
int spawner_id6 = Get_Int_Parameter("Spawner_ID6");
|
||
|
|
||
|
if(spawner_id1 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id1, false);
|
||
|
}
|
||
|
if(spawner_id2 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id2, false);
|
||
|
}
|
||
|
if(spawner_id3 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id3, false);
|
||
|
}
|
||
|
if(spawner_id4 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id4, false);
|
||
|
}
|
||
|
if(spawner_id5 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id5, false);
|
||
|
}
|
||
|
if(spawner_id6 != 0)
|
||
|
{
|
||
|
Commands->Enable_Spawner(spawner_id6, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Deactivate_Encounter, "Activate_Zone=0:int")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
int activate_zone = Get_Int_Parameter("Activate_Zone");
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(activate_zone), M07_DEACTIVATE_ENCOUNTER, 1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Encounter_Unit, "Waypath_ID=0:int, Priority=0:int, Suicide=0:int, Stationary_at_End=0:int")
|
||
|
{
|
||
|
int waypath_id;
|
||
|
int priority;
|
||
|
bool suicide;
|
||
|
bool stationary;
|
||
|
|
||
|
enum{DIE_SURPRISE, GO_STAR, WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( poke_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
waypath_id = Get_Int_Parameter("Waypath_ID");
|
||
|
priority = Get_Int_Parameter("Priority");
|
||
|
suicide = (Get_Int_Parameter("Suicide") == 1) ? true : false;
|
||
|
stationary = (Get_Int_Parameter("Stationary_at_End") == 1) ? true : false;
|
||
|
|
||
|
if(waypath_id == 0)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
else if(waypath_id == 1)
|
||
|
{
|
||
|
params.Set_Basic( this, priority, GO_STAR );
|
||
|
params.Set_Movement( STAR, RUN, 2.0f );
|
||
|
Commands->Action_Goto ( obj, params );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
params.Set_Basic( this, priority, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
if(suicide)
|
||
|
{
|
||
|
Commands->Start_Timer (obj, this, 15.0f, DIE_SURPRISE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timer_id)
|
||
|
{
|
||
|
|
||
|
if(timer_id == DIE_SURPRISE)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 100000, "STEEL", NULL );
|
||
|
Vector3 obj_pos = Commands->Get_Position(obj);
|
||
|
Vector3 shot_pos;
|
||
|
shot_pos.X = obj_pos.X + 4.0f;
|
||
|
shot_pos.Y = obj_pos.Y + 4.0f;
|
||
|
shot_pos.Z = obj_pos.Z + 4.0f;
|
||
|
|
||
|
Commands->Create_Sound("Sniper_Fire_01", shot_pos, obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
Commands->Innate_Force_State_Enemy_Seen(obj, STAR);
|
||
|
if(stationary)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V05_Controller, "")
|
||
|
{
|
||
|
bool encounter;
|
||
|
int m07_v05_units;
|
||
|
bool reinforce;
|
||
|
|
||
|
enum{REINFORCEMENT_CHECK};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( encounter, 1 );
|
||
|
SAVE_VARIABLE( m07_v05_units, 2 );
|
||
|
SAVE_VARIABLE( reinforce, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_v05_units = 0;
|
||
|
|
||
|
encounter= true;
|
||
|
reinforce = true;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_REINFORCEMENT_UNIT_KILLED)
|
||
|
{
|
||
|
m07_v05_units--;
|
||
|
|
||
|
}
|
||
|
if(type == M07_REINFORCEMENT_UNIT_CREATED)
|
||
|
{
|
||
|
m07_v05_units++;
|
||
|
}
|
||
|
|
||
|
if (type == M07_DEACTIVATE_ENCOUNTER)
|
||
|
{
|
||
|
encounter = false;
|
||
|
}
|
||
|
|
||
|
if (type == M07_ACTIVATE_ENCOUNTER)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 0.0f, REINFORCEMENT_CHECK);
|
||
|
}
|
||
|
|
||
|
if (type == M07_V05_OFFICER_KILLED)
|
||
|
{
|
||
|
reinforce = false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == REINFORCEMENT_CHECK && encounter)
|
||
|
{
|
||
|
if(m07_v05_units < 3 && reinforce)
|
||
|
{
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(30.873f, -9.825f, 5.346f));
|
||
|
Commands->Set_Facing(chinook_obj1, -80.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7I_TroopDrop1.txt");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 30.0f, REINFORCEMENT_CHECK);
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V05_Officer, "")
|
||
|
{
|
||
|
|
||
|
enum{REINFORCEMENT_CHECK};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( encounter, 1 );
|
||
|
// SAVE_VARIABLE( m07_v05_units, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100899), M07_V05_OFFICER_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V05_Unit, "Stationary=0:int")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( poke_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
bool stationary = (Get_Int_Parameter("Stationary") == 1) ? true : false;
|
||
|
if(stationary)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100899), M07_REINFORCEMENT_UNIT_CREATED, 1, 2.0f);
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100899), M07_REINFORCEMENT_UNIT_KILLED, 1, 2.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_V05, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100899), M07_ACTIVATE_ENCOUNTER, 1);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Light_Tank_Dec, "Attack_ID0=0:int, Attack_ID1=0:int, Attack_ID2=0:int")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int attack_id[3];
|
||
|
|
||
|
enum{ATTACK_OVER, ATTACK_LOC};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
SAVE_VARIABLE( attack_id, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NOD );
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
|
||
|
attack_id[0] = Get_Int_Parameter("Attack_ID0");
|
||
|
attack_id[1] = Get_Int_Parameter("Attack_ID1");
|
||
|
attack_id[2] = Get_Int_Parameter("Attack_ID2");
|
||
|
|
||
|
if(attack_id[0] != 0)
|
||
|
{
|
||
|
int random = Commands->Get_Random_Int(0,2);
|
||
|
|
||
|
while(attack_id[random] == 0)
|
||
|
{
|
||
|
random = Commands->Get_Random_Int(0,2);
|
||
|
}
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (Commands->Find_Object(attack_id[random]), 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_LOC);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
|
||
|
}
|
||
|
if(timer_id == ATTACK_LOC && !attacking)
|
||
|
{
|
||
|
|
||
|
int random = Commands->Get_Random_Int(0,2);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (Commands->Find_Object(attack_id[random]), 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_LOC);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Inn_Light_Tank_Dec, "APC_ID=0:int")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int apc_id;
|
||
|
|
||
|
enum{ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NOD );
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_APC, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int reinforce;
|
||
|
|
||
|
enum{DROP_SOLDIERS, CHECK_ENEMY};
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
SAVE_VARIABLE( reinforce, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
reinforce = 0;
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 1 );
|
||
|
params.Set_Attack (enemy, 200.0f, 5.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack (obj, params);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 30.0f, CHECK_ENEMY);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_REINFORCEMENT_KILLED)
|
||
|
{
|
||
|
reinforce++;
|
||
|
if(reinforce < 7)
|
||
|
{
|
||
|
char param1[10];
|
||
|
sprintf(param1, "%d", Commands->Get_ID(obj));
|
||
|
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
float a = cos(DEG_TO_RADF(facing)) * -4.0;
|
||
|
float b = sin(DEG_TO_RADF(facing)) * -4.0;
|
||
|
|
||
|
Vector3 soldier_loc1 = pos + Vector3(a, b + .5f, 0.5f);
|
||
|
GameObject * soldier1 = Commands->Create_Object("M07_Nod_APC", soldier_loc1);
|
||
|
Commands->Attach_Script(soldier1, "M07_Inn_APC_Soldier", param1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
|
||
|
if(timer_id == CHECK_ENEMY)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_APC_Soldier, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 1 );
|
||
|
params.Set_Movement( STAR, RUN, 20.0f );
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Balcony_Sniper, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_V01, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100952), M07_ACTIVATE_V01, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Deactivate_V01, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100953), M07_DEACTIVATE_V01, 1, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V01_Controller, "")
|
||
|
{
|
||
|
bool activated;
|
||
|
int m07_v01_unit_killed;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( activated, 1 );
|
||
|
SAVE_VARIABLE( m07_v01_unit_killed, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
activated = false;
|
||
|
m07_v01_unit_killed = 0;
|
||
|
}
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_ACTIVATE_V01 && !activated)
|
||
|
{
|
||
|
activated = true;
|
||
|
|
||
|
Commands->Enable_Spawner(100956, true);
|
||
|
Commands->Enable_Spawner(100962, true);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-193.706f, -82.114f, 4.987f));
|
||
|
Commands->Set_Facing(chinook_obj1, 20.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop2.txt");
|
||
|
|
||
|
}
|
||
|
|
||
|
if(type == M07_V01_UNIT_KILLED && activated)
|
||
|
{
|
||
|
m07_v01_unit_killed++;
|
||
|
if(m07_v01_unit_killed%2 == 0)
|
||
|
{
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-193.706f, -82.114f, 4.987f));
|
||
|
Commands->Set_Facing(chinook_obj1, 20.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop2.txt");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if(type == M07_DEACTIVATE_V01 && activated)
|
||
|
{
|
||
|
activated = false;
|
||
|
|
||
|
Commands->Enable_Spawner(100956, false);
|
||
|
Commands->Enable_Spawner(100962, false);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V01_Destroyed_Flame_Tank, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_ACTIVATE_V01)
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, 10000.0f, "DEATH");
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100953), M07_ACTIVATE_V01, 1, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Buggy_Dec, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
|
||
|
enum{ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NOD );
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Nod_Recon_Bike_Dec, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
|
||
|
enum{ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NOD );
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, 1 );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 1);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_V01_Unit, "")
|
||
|
{
|
||
|
|
||
|
enum{GO_STAR};
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 10);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
|
||
|
if(timer_id == GO_STAR)
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN, GO_STAR );
|
||
|
params.Set_Movement( STAR, RUN, 2.0f );
|
||
|
Commands->Action_Goto ( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(100953), M07_V01_UNIT_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Triangle_Apache, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
|
||
|
Commands->Enable_Spawner(101010, true);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_Apache, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int curr_waypath;
|
||
|
|
||
|
enum{WAYPATH, TRIANGLE_PATROL, ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
SAVE_VARIABLE( curr_waypath, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
attacking = false;
|
||
|
curr_waypath = 101011;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 101011;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
curr_waypath = 101016;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, TRIANGLE_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = curr_waypath;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, TRIANGLE_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.WaypathID = curr_waypath;
|
||
|
Commands->Modify_Action (obj, TRIANGLE_PATROL, params);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (sound.Type == M07_RELOCATE_TRIANGLE_APACHE)
|
||
|
{
|
||
|
curr_waypath = 101033;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, TRIANGLE_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = curr_waypath;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Relocate_Triangle_Apache, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
|
||
|
Commands->Create_Logical_Sound(obj, M07_RELOCATE_TRIANGLE_APACHE, Commands->Get_Position(obj), 100.0f);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_APC, "")
|
||
|
{
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(101056), M07_TRIANGLE_APC_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_APC_Soldier, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 1 );
|
||
|
params.Set_Movement( STAR, RUN, 20.0f );
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_Guard, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_Controller, "")
|
||
|
{
|
||
|
int m07_triangle_apc_killed;
|
||
|
int m07_triangle_unit_killed;
|
||
|
int civ_captive_killed;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( m07_triangle_apc_killed, 1 );
|
||
|
SAVE_VARIABLE( m07_triangle_unit_killed, 2 );
|
||
|
SAVE_VARIABLE( civ_captive_killed, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_triangle_apc_killed = 0;
|
||
|
m07_triangle_unit_killed = 0;
|
||
|
civ_captive_killed = 0;
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_TRIANGLE_APC_KILLED)
|
||
|
{
|
||
|
m07_triangle_apc_killed++;
|
||
|
if(m07_triangle_apc_killed == 2)
|
||
|
{
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-531.675f, -87.333f, 13.908f));
|
||
|
Commands->Set_Facing(chinook_obj1, -70.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop3.txt");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(type == M07_TRIANGLE_UNIT_KILLED)
|
||
|
{
|
||
|
m07_triangle_unit_killed++;
|
||
|
if(m07_triangle_unit_killed%3 == 0 && m07_triangle_unit_killed < 9)
|
||
|
{
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-531.675f, -87.333f, 13.908f));
|
||
|
Commands->Set_Facing(chinook_obj1, -70.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop3.txt");
|
||
|
}
|
||
|
}
|
||
|
if(type == M07_SPAWN_TRIANGLE_CIV)
|
||
|
{
|
||
|
civ_captive_killed++;
|
||
|
if(civ_captive_killed == 2)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 705, 2, 0.0f);
|
||
|
}
|
||
|
switch(param)
|
||
|
{
|
||
|
case 1:
|
||
|
{
|
||
|
Commands->Enable_Spawner(101057, true);
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
{
|
||
|
Commands->Enable_Spawner(101058, true);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Triangle_Unit, "")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(101056), M07_TRIANGLE_UNIT_KILLED, 1, 0.0f);
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Hostage_Encounter, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
// Hostage
|
||
|
Commands->Enable_Spawner(101066, true);
|
||
|
|
||
|
// Hostage Takers
|
||
|
Commands->Enable_Spawner(101073, true);
|
||
|
Commands->Enable_Spawner(101074, true);
|
||
|
Commands->Enable_Spawner(101079, true);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Fuel_Barrel, "")
|
||
|
{
|
||
|
|
||
|
enum{BOOM};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( vehicle_drop, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Set_Animation_Frame(obj, "o_barrl_fuel.o_barrl_fuel", 0);
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Create_Explosion("Ground Explosions Twiddler", Commands->Get_Position(obj));
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101059), M07_EXPLODE_BARRELS, 1);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Hostage_Controller, "")
|
||
|
{
|
||
|
|
||
|
bool destroy_stockpile;
|
||
|
|
||
|
enum{BOOM};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( destroy_stockpile, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
destroy_stockpile = false;
|
||
|
Commands->Enable_Spawner(100795, true);
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_EXPLODE_BARRELS && destroy_stockpile == false)
|
||
|
{
|
||
|
destroy_stockpile = true;
|
||
|
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101060), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101061), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101062), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101063), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101064), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101065), 10000.0f, "STEEL");
|
||
|
Commands->Apply_Damage( Commands->Find_Object(101084), 10000.0f, "STEEL");
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Hostage, "")
|
||
|
{
|
||
|
bool poked;
|
||
|
|
||
|
|
||
|
enum{WAYPATH, SWITCH_TYPE};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( poked, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 101067;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, SWITCH_TYPE);
|
||
|
poked = false;
|
||
|
}
|
||
|
|
||
|
void Poked(GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ((Commands->Is_A_Star(poker)) && (!poked))
|
||
|
{
|
||
|
poked = true;
|
||
|
|
||
|
// Assume hands over head anim
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 1);
|
||
|
params.Set_Animation( "H_A_HOST_L1C", false );
|
||
|
Commands->Action_Play_Animation (obj, params);
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, false);
|
||
|
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
float a = cos(DEG_TO_RADF(facing)) * 1.5;
|
||
|
float b = sin(DEG_TO_RADF(facing)) * 1.5;
|
||
|
Vector3 powerup_loc = pos + Vector3(a, b, 0.5f);
|
||
|
Commands->Create_Object("Ramjet_Weapon_Powerup", powerup_loc);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (reason != ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
if (action_id == WAYPATH)
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
|
||
|
// Assume hands over head anim
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 1);
|
||
|
params.Set_Animation( "H_A_HOST_L1B", true );
|
||
|
Commands->Action_Play_Animation (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == SWITCH_TYPE)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_GDI );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Hostage_Taker, "Waypath_ID=0:int")
|
||
|
{
|
||
|
|
||
|
bool destroy_stockpile;
|
||
|
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( destroy_stockpile, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
int waypath_id = Get_Int_Parameter("Waypath_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_APC_Dec, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int reinforce;
|
||
|
|
||
|
enum{DROP_SOLDIERS, CHECK_ENEMY};
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
SAVE_VARIABLE( reinforce, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = false;
|
||
|
reinforce = 0;
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 1 );
|
||
|
params.Set_Attack (enemy, 200.0f, 5.0f, 1);
|
||
|
params.AttackCheckBlocked = true;
|
||
|
Commands->Action_Attack (obj, params);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 30.0f, CHECK_ENEMY);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(type == M07_REINFORCEMENT_KILLED)
|
||
|
{
|
||
|
reinforce++;
|
||
|
if(reinforce < 7)
|
||
|
{
|
||
|
char param1[10];
|
||
|
sprintf(param1, "%d", Commands->Get_ID(obj));
|
||
|
|
||
|
Vector3 pos = Commands->Get_Position(obj);
|
||
|
float facing = Commands->Get_Facing(obj);
|
||
|
float a = cos(DEG_TO_RADF(facing)) * -4.0;
|
||
|
float b = sin(DEG_TO_RADF(facing)) * -4.0;
|
||
|
|
||
|
Vector3 soldier_loc1 = pos + Vector3(a, b + .5f, 0.5f);
|
||
|
GameObject * soldier1 = Commands->Create_Object("M07_Nod_APC", soldier_loc1);
|
||
|
Commands->Attach_Script(soldier1, "M07_APC_Dec_Soldier", param1);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
|
||
|
if(timer_id == CHECK_ENEMY)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_APC_Dec_Soldier, "APC_ID=0:int")
|
||
|
{
|
||
|
|
||
|
int apc_id;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
apc_id = Get_Int_Parameter("APC_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN - 5, 1 );
|
||
|
params.Set_Movement( STAR, RUN, 20.0f );
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
if(Commands->Find_Object(apc_id))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(apc_id), M07_REINFORCEMENT_KILLED, apc_id, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Bridge_Civ, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
// Bridge Civilians
|
||
|
Commands->Enable_Spawner(101109, true);
|
||
|
Commands->Enable_Spawner(101114, true);
|
||
|
// Bridge overlook Apache
|
||
|
Commands->Enable_Spawner(109150, true);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Bridge_Civ, "Waypath_ID=0:int")
|
||
|
{
|
||
|
|
||
|
enum{WAYPATH};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
int waypath_id = Get_Int_Parameter("Waypath_ID");
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 0.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
|
||
|
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_E10_Tank_Drop, "")
|
||
|
{
|
||
|
int m07_player_vehicle_id;
|
||
|
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( m07_player_vehicle_id, 1 );
|
||
|
SAVE_VARIABLE( already_entered, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
m07_player_vehicle_id = 0;
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == M07_PLAYER_VEHICLE_ID )
|
||
|
{
|
||
|
m07_player_vehicle_id = param;
|
||
|
}
|
||
|
if ( type == M07_E10_TANK_CREATED )
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, sender, M07_PLAYER_VEHICLE_ID, Commands->Get_ID(sender));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(101132);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "M07_XG_VehicleDrop2.txt");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_E10_Tank, "")
|
||
|
{
|
||
|
int m07_player_vehicle_id;
|
||
|
|
||
|
enum{GO_PLAYER_VEHICLE};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( m07_player_vehicle_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
m07_player_vehicle_id = 0;
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101131), M07_E10_TANK_CREATED, 1);
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == M07_PLAYER_VEHICLE_ID )
|
||
|
{
|
||
|
m07_player_vehicle_id = param;
|
||
|
Commands->Start_Timer(obj, this, 3.0f, 10);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject * enemy)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (Commands->Is_A_Star(enemy))
|
||
|
{
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_PLAYER_VEHICLE);
|
||
|
params.Set_Attack(Commands->Find_Object(m07_player_vehicle_id), 40.0f, 1.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Modify_Action (obj, GO_PLAYER_VEHICLE, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == GO_PLAYER_VEHICLE)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN + 5, GO_PLAYER_VEHICLE);
|
||
|
params.Set_Attack(Commands->Find_Object(m07_player_vehicle_id), 40.0f, 1.0f, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Attack(obj, params);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Para_Drop_Controller, "")
|
||
|
{
|
||
|
|
||
|
int para_drop[7];
|
||
|
int drop_zone;
|
||
|
int m07_paradrop_unit1_killed;
|
||
|
int m07_paradrop_unit2_killed;
|
||
|
int m07_paradrop_unit3_killed;
|
||
|
int m07_paradrop_unit4_killed;
|
||
|
bool active;
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( para_drop, 1 );
|
||
|
SAVE_VARIABLE( drop_zone, 2 );
|
||
|
SAVE_VARIABLE( m07_paradrop_unit1_killed, 3 );
|
||
|
SAVE_VARIABLE( m07_paradrop_unit2_killed, 4 );
|
||
|
SAVE_VARIABLE( m07_paradrop_unit3_killed, 5 );
|
||
|
SAVE_VARIABLE( m07_paradrop_unit4_killed, 6 );
|
||
|
SAVE_VARIABLE( active, 7 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
para_drop[0] = 101134;
|
||
|
para_drop[1] = 101138;
|
||
|
para_drop[2] = 101139;
|
||
|
para_drop[3] = 101140;
|
||
|
para_drop[4] = 101141;
|
||
|
para_drop[5] = 101142;
|
||
|
para_drop[6] = 101143;
|
||
|
|
||
|
|
||
|
drop_zone = 0;
|
||
|
m07_paradrop_unit1_killed = 0;
|
||
|
m07_paradrop_unit2_killed = 0;
|
||
|
m07_paradrop_unit3_killed = 0;
|
||
|
m07_paradrop_unit4_killed = 0;
|
||
|
|
||
|
active = true;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if (type == M07_DEACTIVATE_PARADROP)
|
||
|
{
|
||
|
|
||
|
active = false;
|
||
|
|
||
|
}
|
||
|
if (type == M07_VEHICLE_DROP_ZONE)
|
||
|
{
|
||
|
|
||
|
drop_zone = param;
|
||
|
|
||
|
}
|
||
|
if(type == M07_PARADROP_UNIT_KILLED && active)
|
||
|
{
|
||
|
switch(param)
|
||
|
{
|
||
|
case 1:
|
||
|
{
|
||
|
|
||
|
m07_paradrop_unit1_killed++;
|
||
|
if(m07_paradrop_unit1_killed%3 == 0 && m07_paradrop_unit1_killed < 9)
|
||
|
{
|
||
|
GameObject * drop_loc = Commands->Find_Object(para_drop[drop_zone]);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop4.txt");
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 2:
|
||
|
{
|
||
|
|
||
|
m07_paradrop_unit2_killed++;
|
||
|
if(m07_paradrop_unit2_killed < 2)
|
||
|
{
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(109837);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop5.txt");
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 3:
|
||
|
{
|
||
|
|
||
|
m07_paradrop_unit3_killed++;
|
||
|
if(m07_paradrop_unit3_killed < 2)
|
||
|
{
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(109838);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop6.txt");
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
{
|
||
|
|
||
|
m07_paradrop_unit4_killed++;
|
||
|
if(m07_paradrop_unit4_killed < 2)
|
||
|
{
|
||
|
|
||
|
GameObject * drop_loc = Commands->Find_Object(109839);
|
||
|
float drop_facing = Commands->Get_Facing(drop_loc);
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Commands->Get_Position(drop_loc));
|
||
|
Commands->Set_Facing(chinook_obj1, drop_facing);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop7.txt");
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Para_Drop_Zone, "Zone_ID=0:int")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
int zone_id = Get_Int_Parameter("Zone_ID");
|
||
|
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101133), M07_VEHICLE_DROP_ZONE, zone_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Para_Drop_Unit, "Unit_ID=0:int")
|
||
|
{
|
||
|
|
||
|
enum{GO_STAR};
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
if(Get_Int_Parameter("Unit_ID") == 1)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 3.0f, GO_STAR);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Innate_Is_Stationary(obj, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == GO_STAR)
|
||
|
{
|
||
|
params.Set_Basic (this, (INNATE_PRIORITY_ENEMY_SEEN - 5), 10);
|
||
|
params.Set_Movement (STAR, RUN, 10.0f);
|
||
|
Commands->Action_Goto (obj, params);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
int unit_id = Get_Int_Parameter("Unit_ID");
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101133), M07_PARADROP_UNIT_KILLED, unit_id);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Para_Drop, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
|
||
|
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
GameObject * chinook_obj1 = Commands->Create_Object ( "Invisible_Object", Vector3(-417.090f, 39.921f, 20.435f));
|
||
|
Commands->Set_Facing(chinook_obj1, 0.000f);
|
||
|
Commands->Attach_Script(chinook_obj1, "Test_Cinematic", "X7D_CHTroopdrop4.txt");
|
||
|
|
||
|
GameObject * chinook_obj2 = Commands->Create_Object ( "Invisible_Object", Vector3(-437.171f, 35.261f, 36.155f));
|
||
|
Commands->Set_Facing(chinook_obj2, -5.000f);
|
||
|
Commands->Attach_Script(chinook_obj2, "Test_Cinematic", "X7D_CHTroopdrop5.txt");
|
||
|
|
||
|
GameObject * chinook_obj3 = Commands->Create_Object ( "Invisible_Object", Vector3(-474.645f, 36.897f, 32.859f));
|
||
|
Commands->Set_Facing(chinook_obj3, 0.000f);
|
||
|
Commands->Attach_Script(chinook_obj3, "Test_Cinematic", "X7D_CHTroopdrop6.txt");
|
||
|
|
||
|
GameObject * chinook_obj4 = Commands->Create_Object ( "Invisible_Object", Vector3(-516.036f, 40.087f, 30.558f));
|
||
|
Commands->Set_Facing(chinook_obj4, -5.000f);
|
||
|
Commands->Attach_Script(chinook_obj4, "Test_Cinematic", "X7D_CHTroopdrop7.txt");
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Deactivate_Para_Drop, "")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
|
||
|
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(101133), M07_DEACTIVATE_PARADROP, 1);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Flyover_Controller, "")
|
||
|
{
|
||
|
int last;
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(last, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
last = 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
char *flyovers[8] =
|
||
|
{
|
||
|
"X7A_CPlane_00.txt",
|
||
|
"X7A_CPlane_01.txt",
|
||
|
"X7A_CPlane_02.txt",
|
||
|
"X7A_CPlane_03.txt",
|
||
|
|
||
|
"X7A_Apache_00.txt",
|
||
|
"X7A_Apache_01.txt",
|
||
|
"X7A_Apache_02.txt",
|
||
|
"X7A_Apache_03.txt",
|
||
|
|
||
|
};
|
||
|
int random = Commands->Get_Random_Int ( 0, 7 );
|
||
|
|
||
|
while (random == last)
|
||
|
{
|
||
|
random = Commands->Get_Random_Int ( 0, 7 );
|
||
|
}
|
||
|
|
||
|
GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
|
||
|
Commands->Attach_Script(controller, "Test_Cinematic", flyovers[random]);
|
||
|
Commands->Start_Timer(obj, this, 10.0f, 0);
|
||
|
|
||
|
last = random;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Activate_Flyover, "Text_File:string")
|
||
|
{
|
||
|
bool already_entered;
|
||
|
|
||
|
enum {PLAY_AGAIN};
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(already_entered, 1);
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer) && !already_entered)
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
const char * flyover = Get_Parameter("Text_File");
|
||
|
|
||
|
GameObject *controller = Commands->Create_Object("Invisible_Object", Vector3(0,0,0));
|
||
|
Commands->Attach_Script(controller, "Test_Cinematic", flyover);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 10.0f, PLAY_AGAIN);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if(timer_id == PLAY_AGAIN)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Disable_Hibernation, "")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( m08_petra_a1_unit, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Move_To_Evac, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
bool star_in_blast;
|
||
|
|
||
|
// 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 );
|
||
|
SAVE_VARIABLE( star_in_blast, 2 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if(Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
// Customs to move team to evac site
|
||
|
// Havoc
|
||
|
Commands->Send_Custom_Event(obj, STAR, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Hotwire
|
||
|
Commands->Send_Custom_Event(obj, HOTWIRE, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Patch
|
||
|
Commands->Send_Custom_Event(obj, PATCH, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Gunner
|
||
|
Commands->Send_Custom_Event(obj, GUNNER, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Deadeye
|
||
|
Commands->Send_Custom_Event(obj, DEADEYE, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
// Sydney
|
||
|
Commands->Send_Custom_Event(obj, SYDNEY, M07_GO_EVAC_SITE, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Move_Hotwire, "Move_Loc=0:int")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (Commands->Is_A_Star(enterer))
|
||
|
{
|
||
|
int move_loc = Get_Int_Parameter("Move_Loc");
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100658), M07_MOVE_HOTWIRE, move_loc, 0.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Player_Rocket_Emplacement, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(damager == Commands->Find_Object(100905))
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < 10.0f)
|
||
|
{
|
||
|
Commands->Set_Health(obj, 10.0f);
|
||
|
}
|
||
|
if(Commands->Get_Health(obj) < (.3 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "STEEL", NULL );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Playertype_Neutral, "")
|
||
|
{
|
||
|
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Set_Player_Type(obj, SCRIPT_PLAYERTYPE_NEUTRAL );
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Evac, "")//104496
|
||
|
{
|
||
|
|
||
|
int evac_waypath_id;
|
||
|
int evac_helicopter_id;
|
||
|
int dead6_cnt;
|
||
|
int evac_rope_id;
|
||
|
|
||
|
enum{LOWER_ROPE, CHINOOK_OUT, DESTROY_SYDNEY};
|
||
|
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE(evac_waypath_id, 1);
|
||
|
SAVE_VARIABLE(evac_helicopter_id, 2);
|
||
|
SAVE_VARIABLE(dead6_cnt, 3);
|
||
|
SAVE_VARIABLE(evac_rope_id, 4);
|
||
|
}
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
dead6_cnt = 0;
|
||
|
evac_waypath_id = 0;
|
||
|
evac_helicopter_id = 0;
|
||
|
evac_rope_id = 0;
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if (type == M07_DEAD6_EVAC) //SAM sites captured, evac DEAD6 and Sydney
|
||
|
{
|
||
|
|
||
|
char param1[10];
|
||
|
sprintf(param1, "%d", param);
|
||
|
|
||
|
Vector3 evacPosition = Commands->Get_Position ( obj );
|
||
|
float evacFacing = Commands->Get_Facing ( obj );
|
||
|
GameObject *troopBone = Commands->Create_Object("Saveable_Invisible_Object", evacPosition );
|
||
|
Commands->Set_Model ( troopBone, "XG_EV5_troopBN" );
|
||
|
Commands->Set_Facing ( troopBone, evacFacing );
|
||
|
Commands->Attach_Script(troopBone, "M07_Inn_Evac_Climb", param1);
|
||
|
|
||
|
dead6_cnt++;
|
||
|
if(dead6_cnt == 4)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100658), M07_EVAC_INN, 1, 0.0f);
|
||
|
|
||
|
}
|
||
|
if(dead6_cnt == 5)
|
||
|
{
|
||
|
// This is Resistance Radio. Nod SSM deployment confirmed. All available personnel to the park.\n
|
||
|
const char *conv_name = ("M07_CON017");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(STAR, conv_id, false, true);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 300703);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
if (type == M07_EVAC_INN) //SAM sites captured, evac DEAD6 and Sydney
|
||
|
{
|
||
|
Vector3 evacPosition = Commands->Get_Position ( obj );
|
||
|
float evacFacing = Commands->Get_Facing ( obj );
|
||
|
GameObject *evacWaypath = Commands->Create_Object("Saveable_Invisible_Object", evacPosition );
|
||
|
Commands->Attach_Script(evacWaypath, "M07_Inn_Evac_Trajectory", "");
|
||
|
Commands->Set_Model ( evacWaypath, "XG_EV5_Path" );
|
||
|
Commands->Set_Facing ( evacWaypath, evacFacing );
|
||
|
Commands->Set_Animation ( evacWaypath, "XG_EV5_Path.XG_EV5_PathA", false );
|
||
|
Commands->Start_Timer (obj, this, 130.0f/30.0f, LOWER_ROPE);
|
||
|
evac_waypath_id = Commands->Get_ID(evacWaypath);
|
||
|
|
||
|
GameObject *evacChopper = Commands->Create_Object_At_Bone( evacWaypath, "GDI_Transport_Helicopter_Flyover", "BN_Trajectory" );
|
||
|
Commands->Attach_Script(evacChopper, "M07_Inn_Evac_Helicopter", "");
|
||
|
Commands->Set_Animation ( evacChopper, "v_GDI_trnspt.XG_EV5_trnsA", false );
|
||
|
Commands->Attach_To_Object_Bone( evacChopper, evacWaypath, "BN_Trajectory" );
|
||
|
evac_helicopter_id = Commands->Get_ID ( evacChopper );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if (action_id == 300703 && (reason == ACTION_COMPLETE_CONVERSATION_ENDED || reason == ACTION_COMPLETE_CONVERSATION_INTERRUPTED))
|
||
|
{
|
||
|
// Destroy Artillery Piece Objective
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 703, 3, 0.0f);
|
||
|
Commands->Start_Timer (obj, this, 3.0f, CHINOOK_OUT);
|
||
|
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 10.0f, DESTROY_SYDNEY);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == DESTROY_SYDNEY)
|
||
|
{
|
||
|
// Once GDI evac has arrived destroy Sydney and DEAD-6 to give appearance of liftoff
|
||
|
Commands->Destroy_Object(DEADEYE);
|
||
|
Commands->Destroy_Object(GUNNER);
|
||
|
Commands->Destroy_Object(PATCH);
|
||
|
Commands->Destroy_Object(SYDNEY);
|
||
|
|
||
|
|
||
|
|
||
|
// Commands->Start_Timer(obj, this, 10.0f, DROP_DEAD6_INN);
|
||
|
}
|
||
|
if(timer_id == LOWER_ROPE)
|
||
|
{
|
||
|
Vector3 evacPosition = Commands->Get_Position ( obj );
|
||
|
float evacFacing = Commands->Get_Facing ( obj );
|
||
|
GameObject * evacRope = Commands->Create_Object("Saveable_Invisible_Object", evacPosition );
|
||
|
Commands->Attach_Script(evacRope, "M07_Inn_Evac_Rope", "");
|
||
|
Commands->Set_Model ( evacRope, "XG_EV5_rope" );
|
||
|
Commands->Set_Facing ( evacRope, evacFacing );
|
||
|
Commands->Set_Animation ( evacRope, "XG_EV5_rope.XG_EV5_ropeA", false );
|
||
|
evac_rope_id = Commands->Get_ID ( evacRope );
|
||
|
}
|
||
|
|
||
|
if(timer_id == CHINOOK_OUT)
|
||
|
{
|
||
|
GameObject * evacChopper = Commands->Find_Object ( evac_helicopter_id );
|
||
|
GameObject * evacWaypath = Commands->Find_Object ( evac_waypath_id );
|
||
|
GameObject * evacRope = Commands->Find_Object ( evac_rope_id );
|
||
|
|
||
|
if (evacChopper != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event ( obj, evacChopper, M07_INN_HELICOPTER_OUT, 1, 0 );
|
||
|
}
|
||
|
|
||
|
if (evacWaypath != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event ( obj, evacWaypath, M07_INN_HELICOPTER_OUT, 1, 0 );
|
||
|
}
|
||
|
|
||
|
if (evacRope != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event ( obj, evacRope, M07_INN_HELICOPTER_OUT, 1, 0 );
|
||
|
}
|
||
|
|
||
|
// Objective accomplished for rescuing Sydney
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 701, 1, 0.0f);
|
||
|
// Objective accomplished for protecting team
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 709, 1, 1.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Evac_Climb, "Dead6_ID=0:int")
|
||
|
{
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
int dead6_id = Get_Int_Parameter("Dead6_ID");
|
||
|
GameObject * dead6 = Commands->Find_Object(dead6_id);
|
||
|
Commands->Attach_Script(dead6, "M07_Climb_Rope", "");
|
||
|
Commands->Attach_To_Object_Bone(dead6, obj, "Troop_L" );
|
||
|
Commands->Set_Animation ( obj, "XG_EV5_troopBN.XG_EV5_troopBN", false );
|
||
|
}
|
||
|
|
||
|
void Animation_Complete(GameObject * obj, const char *anim)
|
||
|
{
|
||
|
if (stricmp(anim, "XG_EV5_troopBN.XG_EV5_troopBN") == 0)
|
||
|
{
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Climb_Rope, "")
|
||
|
{
|
||
|
enum{CLIMB_ROPE};
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, CLIMB_ROPE );
|
||
|
params.Set_Animation ("S_A_Human.XG_EV5_Troop", false);
|
||
|
// params.Set_Animation ("S_A_HUMAN.H_A_A0F0", true);
|
||
|
Commands->Action_Play_Animation (obj, params);
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if(action_id == CLIMB_ROPE && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Evac_Rope, "")
|
||
|
{
|
||
|
void Animation_Complete(GameObject * obj, const char *anim)
|
||
|
{
|
||
|
if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeA") == 0)
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeL", true );
|
||
|
}
|
||
|
|
||
|
else if (stricmp(anim, "XG_EV5_rope.XG_EV5_ropeZ") == 0)
|
||
|
{
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
switch (type)
|
||
|
{
|
||
|
case M07_INN_HELICOPTER_OUT:
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, "XG_EV5_rope.XG_EV5_ropeZ", false );
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Evac_Trajectory, "")
|
||
|
{
|
||
|
void Animation_Complete(GameObject * obj, const char *anim)
|
||
|
{
|
||
|
if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathA") == 0)
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathL", true );
|
||
|
}
|
||
|
|
||
|
else if (stricmp(anim, "XG_EV5_Path.XG_EV5_PathZ") == 0)
|
||
|
{
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
switch (type)
|
||
|
{
|
||
|
case M07_INN_HELICOPTER_OUT:
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, "XG_EV5_Path.XG_EV5_PathZ", false );
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Inn_Evac_Helicopter, "")
|
||
|
{
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
Commands->Enable_Hibernation( obj, false );
|
||
|
Commands->Disable_Physical_Collisions ( obj );
|
||
|
Commands->Send_Custom_Event ( obj, obj, M07_INN_HELO_COLLISIONS, 1, 3.0F );
|
||
|
}
|
||
|
|
||
|
void Animation_Complete(GameObject * obj, const char *anim)
|
||
|
{
|
||
|
if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsA") == 0)
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsL", true );
|
||
|
Commands->Enable_Collisions ( obj );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
else if (stricmp(anim, "v_GDI_trnspt.XG_EV5_trnsz") == 0)
|
||
|
{
|
||
|
Commands->Destroy_Object ( obj );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
switch (type)
|
||
|
{
|
||
|
case M07_INN_HELICOPTER_OUT:
|
||
|
{
|
||
|
Commands->Disable_Physical_Collisions ( obj );
|
||
|
Commands->Set_Animation ( obj, "v_GDI_trnspt.XG_EV5_trnsz", false );
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case M07_INN_HELO_COLLISIONS:
|
||
|
{
|
||
|
Commands->Enable_Collisions ( obj );
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < 10.0f)
|
||
|
{
|
||
|
Commands->Set_Health(obj, 10.0f);
|
||
|
}
|
||
|
if(Commands->Get_Health(obj) < (.3 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "STEEL", NULL );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Deadeye_Nod_Chinook, "")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( apc_id, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
if(Commands->Get_Health(obj) < 10.0f)
|
||
|
{
|
||
|
Commands->Set_Health(obj, 10.0f);
|
||
|
}
|
||
|
if(Commands->Get_Health(obj) < (.3 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
Commands->Apply_Damage( obj, -10000.0f, "STEEL", NULL );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Alley_Vehicle, "Waypath_ID=0:int")
|
||
|
{
|
||
|
bool attacking;
|
||
|
int waypath_id;
|
||
|
bool active;
|
||
|
|
||
|
enum{ATTACK_OVER, ATTACKING, WAYPATH};
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
SAVE_VARIABLE( active, 2 );
|
||
|
SAVE_VARIABLE( waypath_id, 3 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen( obj, true);
|
||
|
attacking = true;
|
||
|
active = false;
|
||
|
waypath_id = Get_Int_Parameter("Waypath_ID");
|
||
|
}
|
||
|
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if ( type == M07_CUSTOM_ACTIVATE )
|
||
|
{
|
||
|
attacking = false;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), 1.0f, 1.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!active)
|
||
|
{
|
||
|
active = true;
|
||
|
Commands->Send_Custom_Event (obj, obj, M07_CUSTOM_ACTIVATE, 0.0f);
|
||
|
}
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), 0.0f, 1.5f );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 0);
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Modify_Action (obj, WAYPATH, params);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 5.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!active)
|
||
|
{
|
||
|
active = true;
|
||
|
Commands->Send_Custom_Event (obj, obj, M07_CUSTOM_ACTIVATE, 0.0f);
|
||
|
}
|
||
|
|
||
|
if(!attacking && (Commands->Get_Player_Type(damager) != SCRIPT_PLAYERTYPE_NOD))
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), 0.0f, 1.5f );
|
||
|
params.Set_Attack (damager, 250.0f, 0.0f, 0);
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Modify_Action (obj, WAYPATH, params);
|
||
|
|
||
|
Commands->Start_Timer (obj, this, 5.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), 1.0f, 1.5f );
|
||
|
params.WaypathID = waypath_id;
|
||
|
Commands->Modify_Action (obj, WAYPATH, params);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Custom_Activate, "Object1_ID=0:int, Object2_ID=0:int, Object3_ID=0:int,")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
int object1_id = Get_Int_Parameter("Object1_ID");
|
||
|
int object2_id = Get_Int_Parameter("Object2_ID");
|
||
|
int object3_id = Get_Int_Parameter("Object3_ID");
|
||
|
|
||
|
if(object1_id != 0)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(object1_id), M07_CUSTOM_ACTIVATE, 1, 0.0f);
|
||
|
}
|
||
|
if(object2_id != 0)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(object2_id), M07_CUSTOM_ACTIVATE, 1, 0.0f);
|
||
|
}
|
||
|
if(object3_id != 0)
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, Commands->Find_Object(object3_id), M07_CUSTOM_ACTIVATE, 1, 0.0f);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Bridge_Overlook_Apache, "")
|
||
|
{
|
||
|
bool attacking;
|
||
|
|
||
|
enum{WAYPATH, INN_PATROL, ATTACK_OVER};
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( attacking, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
attacking = false;
|
||
|
Commands->Disable_Physical_Collisions(obj);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, WAYPATH );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 109145;
|
||
|
Commands->Action_Goto( obj, params );
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if (action_id == WAYPATH && reason == ACTION_COMPLETE_NORMAL)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, INN_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.WaypathID = 109151;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject * obj, GameObject *enemy )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(!attacking)
|
||
|
{
|
||
|
attacking = true;
|
||
|
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, INN_PATROL );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 1.5f );
|
||
|
params.Set_Attack (enemy, 250.0f, 0.0f, 1);
|
||
|
params.WaypathID = 109151;
|
||
|
Commands->Modify_Action (obj, INN_PATROL, params);
|
||
|
|
||
|
Commands->Start_Timer(obj, this, 6.0f, ATTACK_OVER);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int timer_id)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
if(timer_id == ATTACK_OVER)
|
||
|
{
|
||
|
attacking = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_SSM_Unit, "")
|
||
|
{
|
||
|
|
||
|
enum{GO_STAR};
|
||
|
|
||
|
// 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)
|
||
|
{
|
||
|
Commands->Enable_Hibernation(obj, false);
|
||
|
Commands->Set_Innate_Aggressiveness(obj, 1.0f );
|
||
|
Commands->Set_Innate_Take_Cover_Probability(obj, 0.0f );
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(this, INNATE_PRIORITY_ENEMY_SEEN - 5, GO_STAR);
|
||
|
params.Set_Movement(STAR, RUN, 1.0f);
|
||
|
Commands->Action_Goto(obj, params);
|
||
|
}
|
||
|
|
||
|
void Sound_Heard(GameObject * obj, const CombatSound &sound)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
|
||
|
const char * preset_name = Commands->Get_Preset_Name( obj );
|
||
|
|
||
|
if (sound.Type == M07_SSM_DAMAGED && ( ::strncmp( "Nod_Engineer_0", preset_name, ::strlen( "Nod_Engineer_0" ) ) == 0 ))
|
||
|
{
|
||
|
params.Set_Basic( this, INNATE_PRIORITY_ENEMY_SEEN + 5, 100 );
|
||
|
params.Set_Movement( Vector3(0,0,0), RUN, 5.5f );
|
||
|
params.Set_Attack (sound.Creator, 250.0f, 0.0f, 0);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack( obj, params );
|
||
|
}
|
||
|
if (sound.Type == M07_SSM_FIXED && ( ::strncmp( "Nod_Engineer_0", preset_name, ::strlen( "Nod_Engineer_0" ) ) == 0 ))
|
||
|
{
|
||
|
Commands->Action_Reset(obj, INNATE_PRIORITY_ENEMY_SEEN + 5);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Obelisk_Unit, "")
|
||
|
{
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( poked, 1 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
Commands->Innate_Disable(obj);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
if(type == M07_CUSTOM_ACTIVATE)
|
||
|
{
|
||
|
Commands->Innate_Enable(obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT (M07_Park_Stealth_Tank, "")
|
||
|
{
|
||
|
float health;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( health, 8 );
|
||
|
}
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
health = Commands->Get_Health(obj);
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject * obj, GameObject * damager, float amount)
|
||
|
{
|
||
|
if(health > (.2 * Commands->Get_Max_Health(obj)))
|
||
|
{
|
||
|
float damage = health - Commands->Get_Health(obj);
|
||
|
damage *= 0.5f;
|
||
|
health -= damage;
|
||
|
Commands->Set_Health(obj, health);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
// Defeat Stealth Tank.
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 707, 1, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_SSM_Crate, "")
|
||
|
{
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
// SAVE_VARIABLE( destroy_stockpile, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject * obj, GameObject * killer)
|
||
|
{
|
||
|
Commands->Create_Explosion("Explosion_Rocket_SSM", Commands->Get_Position(obj));
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100781), M07_SSM_CRATE_KILLED, 1, 0.0f);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_DataDisc_01_DLS, "")//
|
||
|
{
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == CUSTOM_EVENT_POWERUP_GRANTED )
|
||
|
{
|
||
|
// Reveal Stealth Tank
|
||
|
Commands->Reveal_Encyclopedia_Vehicle(33);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_DataDisc_02_DLS, "")//
|
||
|
{
|
||
|
void Custom( GameObject * obj, int type, int param, GameObject * sender )
|
||
|
{
|
||
|
if ( type == CUSTOM_EVENT_POWERUP_GRANTED )
|
||
|
{
|
||
|
// Reveal Stealth Soldier
|
||
|
Commands->Reveal_Encyclopedia_Character(47);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Hotwire_Help, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Hotwire
|
||
|
if(Commands->Find_Object(100658))
|
||
|
{
|
||
|
// Hotwire here, I need help! Now! Anyone!?
|
||
|
const char *conv_name = ("M07_CON028");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 100658);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
DECLARE_SCRIPT(M07_Hotwire_Dead, "")
|
||
|
{
|
||
|
|
||
|
bool already_entered;
|
||
|
|
||
|
// Register variables to be Auto-Saved
|
||
|
// All variables must have a unique ID, less than 256, that never changes
|
||
|
REGISTER_VARIABLES()
|
||
|
{
|
||
|
SAVE_VARIABLE( already_entered, 1 );
|
||
|
}
|
||
|
|
||
|
void Created (GameObject * obj)
|
||
|
{
|
||
|
already_entered = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if ((Commands->Is_A_Star(enterer)) && (!already_entered))
|
||
|
{
|
||
|
already_entered = true;
|
||
|
|
||
|
// Hotwire
|
||
|
if(Commands->Find_Object(100658))
|
||
|
{
|
||
|
// This is Hotwire, I can't hold this position! Requesting - oh great! <gunfire and static>
|
||
|
const char *conv_name = ("M07_CON029");
|
||
|
int conv_id = Commands->Create_Conversation (conv_name, 100.0f, 200.0f, false);
|
||
|
Commands->Join_Conversation(NULL, conv_id, false, true);
|
||
|
Commands->Start_Conversation (conv_id, 100658);
|
||
|
Commands->Monitor_Conversation (obj, conv_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Action_Complete(GameObject * obj, int action_id, ActionCompleteReason reason)
|
||
|
{
|
||
|
if(reason == ACTION_COMPLETE_CONVERSATION_ENDED)
|
||
|
{
|
||
|
if(action_id == 100658)
|
||
|
{
|
||
|
// Hotwire Killed
|
||
|
Commands->Set_HUD_Help_Text ( IDS_M05DSGN_DSGN0174I1DSGN_TXT, TEXT_COLOR_OBJECTIVE_PRIMARY );
|
||
|
// Protect Team Members
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(100657), 709, 2, 0.0f);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|