4694 lines
137 KiB
C++
4694 lines
137 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
|
||
|
* PRDemo.cpp
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
* PR Demo Scripts
|
||
|
*
|
||
|
* PROGRAMMER
|
||
|
* Design Team
|
||
|
*
|
||
|
* VERSION INFO
|
||
|
* $Author: Ryan_v $
|
||
|
* $Revision: 21 $
|
||
|
* $Modtime: 7/17/00 10:13a $
|
||
|
* $Archive: /Commando/Code/Scripts/PRDemo.cpp $
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include "prdemo.h"
|
||
|
|
||
|
#if 0
|
||
|
|
||
|
/*
|
||
|
MPR_A01_TiberiumCloud
|
||
|
|
||
|
This block controls the tiberium zones - animation and damage.
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG INNATE?
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Death_Rate = DEBUG
|
||
|
Explode_Height = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_TiberiumCloud_PMP, "Death_Rate=5:int,Explode_Height=1.0:float")
|
||
|
{
|
||
|
int Death_Rate;
|
||
|
float Explode_Height;
|
||
|
Vector3 cloud_position;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
Death_Rate = Get_Int_Parameter("Death_Rate");
|
||
|
Explode_Height = Get_Float_Parameter("Explode_Height");
|
||
|
|
||
|
Commands->_Start_Timer(obj, this, Commands->Get_Random( 1, Death_Rate ), MPR_TIMER_TIBERIUM_PMP);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timerID)
|
||
|
{
|
||
|
if (timerID == MPR_TIMER_TIBERIUM_PMP)
|
||
|
{
|
||
|
cloud_position = Commands->Get_Position(obj);
|
||
|
cloud_position.Z += Explode_Height;
|
||
|
|
||
|
Commands->Create_Explosion("TibCloud",cloud_position,obj);
|
||
|
Commands->_Start_Timer(obj, this, Death_Rate, MPR_TIMER_TIBERIUM_PMP);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_CivLeader
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Follower_ID = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_CivLeader_PMP, "Follower_ID:int")
|
||
|
{
|
||
|
int Follower_ID;
|
||
|
bool shooting;
|
||
|
|
||
|
Vector3 BarnPoint;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
BarnPoint.X = -193;
|
||
|
BarnPoint.Y = -133;
|
||
|
BarnPoint.Z = 4;
|
||
|
|
||
|
MPR_nod_dead_PMP = false;
|
||
|
shooting = false;
|
||
|
MPR_evacing_to_chinook_PMP = false;
|
||
|
|
||
|
Follower_ID = Get_Int_Parameter("Follower_ID");
|
||
|
GameObject* target = Commands->Find_Object(Follower_ID);
|
||
|
|
||
|
if ((Commands->Find_Object(Follower_ID)) && (shooting==false))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, target,MPR_CUSTOM_FOLLOW_ME_DEL, 0);
|
||
|
//Commands->Start_Timer(obj, 2, MPR_TIMER_DELAY_01_PMP);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* obj, int event, int param, GameObject* host)
|
||
|
{
|
||
|
if (event == MPR_CUSTOM_I_AM_DEAD_DEL)
|
||
|
{
|
||
|
//Commands->Display_Text("Got dead message\n");
|
||
|
MPR_nod_dead_PMP = true;
|
||
|
shooting = true;
|
||
|
|
||
|
Commands->_Start_Timer(obj, this, Commands->Get_Random( 0, 5), MPR_TIMER_DELAY_01_04_PMP);
|
||
|
}
|
||
|
|
||
|
if (event == MPR_CUSTOM_ESCORT_ATTACKED_DEL)
|
||
|
{
|
||
|
//Commands->Display_Text("Got attacked message\n");
|
||
|
Commands->_Start_Timer(obj, this, Commands->Get_Random( 0, 3), MPR_TIMER_DELAY_01_03_PMP);
|
||
|
shooting = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timerID)
|
||
|
{
|
||
|
Vector3 newPoint = RandomVector();
|
||
|
|
||
|
if ((timerID == MPR_TIMER_DELAY_01_PMP) && (Commands->Find_Object(Follower_ID)) && (MPR_nod_dead_PMP == false) && (shooting == false))
|
||
|
{
|
||
|
//Commands->Display_Text("Sending the call\n");
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(Follower_ID),MPR_CUSTOM_FOLLOW_ME_DEL, 0);
|
||
|
Commands->_Start_Timer(obj, this, 2, MPR_TIMER_DELAY_01_PMP);
|
||
|
}
|
||
|
|
||
|
if (timerID == MPR_TIMER_DELAY_01_03_PMP)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Animation("S_A_Human.H_A_J21C", false);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
}
|
||
|
|
||
|
if (timerID == MPR_TIMER_DELAY_01_04_PMP)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj,.33f);
|
||
|
Commands->Action_Movement_Goto_Location(obj, newPoint,Commands->Get_Random( 0, 2.0 ));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Vector3 RandomVector(void)
|
||
|
{
|
||
|
Vector3 wanderPoint;
|
||
|
|
||
|
wanderPoint.X = Commands->Get_Random( 0, 3 );
|
||
|
wanderPoint.Y = Commands->Get_Random( 0, 3 );
|
||
|
wanderPoint.Z = 0;
|
||
|
return (BarnPoint + wanderPoint);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_CivFollower
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Host_ID = DEBUG
|
||
|
Host_distance = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_CivFollower_PMP, "Host_ID:int, Host_distance=1.5:float")
|
||
|
{
|
||
|
float Host_distance;
|
||
|
int Host_ID;
|
||
|
bool shooting;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
shooting = false;
|
||
|
|
||
|
Host_distance = Get_Float_Parameter("Host_distance");
|
||
|
Host_ID = Get_Int_Parameter("Host_ID");
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* obj, int event, int param, GameObject* host)
|
||
|
{
|
||
|
if (event == MPR_CUSTOM_ESCORT_ATTACKED_DEL)
|
||
|
{
|
||
|
shooting = true;
|
||
|
}
|
||
|
|
||
|
if (( event == MPR_CUSTOM_FOLLOW_ME_DEL ) && ( shooting == false ))
|
||
|
{
|
||
|
//Commands->Display_Text("Heard the call\n");
|
||
|
|
||
|
if (Commands->Find_Object(Host_ID))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj,.25f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object(obj, host, Host_distance);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_EscortDestination
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG FRAGMENTED?
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_EscortDestination_PMP,"")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//Commands->Display_Text("Moving\n");
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, .25f);
|
||
|
|
||
|
//Commands->Action_Movement_Goto_Location(obj,Vector3 (-248,-133,6),0.5f); //Inside Church
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location(obj, Vector3 (-264.0f,-73.0f,-0.67f),0.5f); //temp until pathfind fixed
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_EscortDestination
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG FRAGMENTED
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
CIV01_ID = DEBUG
|
||
|
CIV02_ID = DEBUG
|
||
|
CIV03_ID = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_EscortDies_PMP,"CIV01_ID:int, CIV02_ID:int, CIV03_ID:int")
|
||
|
{
|
||
|
int CIV01_ID;
|
||
|
int CIV02_ID;
|
||
|
int CIV03_ID;
|
||
|
|
||
|
void Killed(GameObject*obj, GameObject* killer)
|
||
|
{
|
||
|
CIV01_ID = Get_Int_Parameter("CIV01_ID");
|
||
|
CIV02_ID = Get_Int_Parameter("CIV02_ID");
|
||
|
CIV03_ID = Get_Int_Parameter("CIV03_ID");
|
||
|
|
||
|
//Commands->Display_Text("I am dead\n");
|
||
|
MPR_nod_dead_PMP = true;
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV01_ID),MPR_CUSTOM_I_AM_DEAD_DEL, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV02_ID),MPR_CUSTOM_I_AM_DEAD_DEL, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV03_ID),MPR_CUSTOM_I_AM_DEAD_DEL, 0);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_SeeEnemy
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG FRAGMENTED?
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
CIV01_ID = DEBUG
|
||
|
CIV02_ID = DEBUG
|
||
|
CIV03_ID = DEBUG
|
||
|
NOD01_ID = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_SeeEnemy_PMP,"CIV01_ID:int, CIV02_ID:int, CIV03_ID:int, NOD01_ID:int")
|
||
|
{
|
||
|
int CIV01_ID;
|
||
|
int CIV02_ID;
|
||
|
int CIV03_ID;
|
||
|
int NOD01_ID;
|
||
|
|
||
|
Vector3 start_position;
|
||
|
Vector3 newPoint;
|
||
|
|
||
|
bool shooting;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
Commands->Enable_Enemy_Seen(obj, true);
|
||
|
|
||
|
shooting = false;
|
||
|
|
||
|
CIV01_ID = Get_Int_Parameter("CIV01_ID");
|
||
|
CIV02_ID = Get_Int_Parameter("CIV02_ID");
|
||
|
CIV03_ID = Get_Int_Parameter("CIV03_ID");
|
||
|
NOD01_ID = Get_Int_Parameter("NOD01_ID");
|
||
|
}
|
||
|
|
||
|
void Enemy_Seen(GameObject* obj, GameObject* enemy)
|
||
|
{
|
||
|
Vector3 shoot_point;
|
||
|
|
||
|
if ((enemy == (Commands->Get_The_Star())) && (shooting == false))
|
||
|
{
|
||
|
GameObject* civie = (Commands->Find_Object(CIV02_ID));
|
||
|
shoot_point = Commands->Get_Position(civie);
|
||
|
Commands->Action_Attack_Location(obj, shoot_point, 0.01f, .01f);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV01_ID),MPR_CUSTOM_ESCORT_ATTACKED_DEL, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV02_ID),MPR_CUSTOM_ESCORT_ATTACKED_DEL, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV03_ID),MPR_CUSTOM_ESCORT_ATTACKED_DEL, 0);
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(NOD01_ID),MPR_CUSTOM_ESCORT_ATTACKED_DEL, 0);
|
||
|
Commands->Start_Timer(obj, 4, MPR_TIMER_DELAY_01_02_PMP);
|
||
|
}
|
||
|
|
||
|
if ((enemy == (Commands->Get_The_Star())) && (shooting == true))
|
||
|
{
|
||
|
GameObject* target = Commands->Get_The_Star();
|
||
|
Commands->Action_Attack_Object(obj,target,0,5.0f);
|
||
|
Commands->Innate_Enable(obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timerID)
|
||
|
{
|
||
|
if (timerID == MPR_TIMER_DELAY_01_02_PMP)
|
||
|
{
|
||
|
GameObject* target = Commands->Get_The_Star();
|
||
|
Commands->Action_Attack_Object(obj,target,0,5.0f);
|
||
|
shooting = true;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_GET_BARN_ZONE_ID
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETED
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Get_Barn_Zone_id_PMP,"")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
MPR_A01_BARNZONE_GOTHERE_ID_PMP = Commands->Get_ID (obj);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_EVAC_CALL
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETED?
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Evac_Call_PMP,"")
|
||
|
{
|
||
|
bool evac_entered;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
evac_entered = false;
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject* obj, GameObject* enterer)
|
||
|
{
|
||
|
if((enterer != Commands->Get_The_Star()) && (!evac_entered))
|
||
|
{
|
||
|
//Commands->Display_Text("Chinook Created\n");
|
||
|
|
||
|
GameObject* Chinook_evac = Commands->Create_Object( "Chinook_E", Vector3 (0,0,0) );
|
||
|
|
||
|
if (Chinook_evac)
|
||
|
{
|
||
|
//Commands->Display_Text("Anim Started\n");
|
||
|
|
||
|
Commands->Attach_Script(Chinook_evac, "MPR_A01_Chinook_Evac_Civies", "");
|
||
|
evac_entered = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_Chinook_Evac_Civies
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Chinook_Evac_Civies_PMP,"")
|
||
|
{
|
||
|
int CIV01_ID;
|
||
|
int CIV02_ID;
|
||
|
int CIV03_ID;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
CIV01_ID = MPR_A01_CIV01_ID_PMP;
|
||
|
CIV02_ID = MPR_A01_CIV02_ID_PMP;
|
||
|
CIV03_ID = MPR_A01_CIV03_ID_PMP;
|
||
|
|
||
|
Commands->Set_Animation( obj, "V_GDI_CHINOOKE3.m_ch_evacland", false);
|
||
|
}
|
||
|
|
||
|
void Animation_Complete(GameObject* obj, const char* name)
|
||
|
{
|
||
|
if (stricmp (name,"V_GDI_CHINOOKE3.m_ch_evacland") ==0 )
|
||
|
{
|
||
|
Commands->Set_Animation( obj, "V_GDI_CHINOOKE3.m_ch_evacloiter", true);
|
||
|
Commands->Start_Timer(obj, 13, MPR_TIMER_EVAC_PMP );
|
||
|
|
||
|
if (Commands->Find_Object(CIV01_ID))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV01_ID),MPR_CUSTOM_EVAC_CALL_DEL, 0);
|
||
|
}
|
||
|
if (Commands->Find_Object(CIV02_ID))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV02_ID),MPR_CUSTOM_EVAC_CALL_DEL, 0);
|
||
|
}
|
||
|
if (Commands->Find_Object(CIV03_ID))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, Commands->Find_Object(CIV03_ID),MPR_CUSTOM_EVAC_CALL_DEL, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if (Timer_ID == MPR_TIMER_EVAC_PMP)
|
||
|
{
|
||
|
Commands->Set_Animation( obj, "V_GDI_CHINOOKE3.m_ch_evacoff", false);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_GET_TO_CHINOOK
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG FRAGMENTED
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Get_To_Chinook_PMP,"")
|
||
|
{
|
||
|
void Custom(GameObject* obj, int event, int param, GameObject* host)
|
||
|
{
|
||
|
if (event == MPR_CUSTOM_EVAC_CALL_DEL)
|
||
|
{
|
||
|
//Commands->Display_Text("Going to Chinook\n");
|
||
|
|
||
|
MPR_evacing_to_chinook_PMP = true;
|
||
|
Commands->Action_Movement_Goto_Location(obj, Vector3 (-193,-153,2), 1.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete(GameObject* obj, MovementCompleteReason reason)
|
||
|
{
|
||
|
if (MPR_evacing_to_chinook_PMP == true)
|
||
|
{
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_GET_CIV01_ID
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETE
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Get_Civ01_id_PMP,"")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
MPR_A01_CIV02_ID_PMP = Commands->Get_ID (obj);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_GET_CIV02_ID
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETE
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Get_Civ02_id_PMP,"")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
MPR_A01_CIV01_ID_PMP = Commands->Get_ID (obj);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_GET_CIV03_ID
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETE
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Get_Civ03_ID_PMP,"")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
MPR_A01_CIV03_ID_PMP = Commands->Get_ID (obj);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
M00_Generic_Wandering
|
||
|
|
||
|
This block is a generic wandering around start point script.
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG OBSOLETE
|
||
|
DEBUG ToolKit script, M00
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Wander_radius = DEBUG
|
||
|
Seconds_to_wait = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M00_Generic_Wandering_PMP, "Wander_radius=:float,Seconds_to_wait=:float")
|
||
|
{
|
||
|
Vector3 start_position;
|
||
|
float Seconds_to_wait;
|
||
|
float Wander_radius;
|
||
|
float randomNumber;
|
||
|
float duration;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
start_position = Commands->Get_Position(obj);
|
||
|
|
||
|
Wander_radius = Get_Float_Parameter("Wander_radius");
|
||
|
Seconds_to_wait = Get_Float_Parameter("Seconds_to_wait");
|
||
|
|
||
|
Movement_Complete(obj, MOVEMENT_COMPLETE_ARRIVED);
|
||
|
}
|
||
|
|
||
|
void Movement_Complete(GameObject* obj, MovementCompleteReason reason)
|
||
|
{
|
||
|
duration = Commands->Get_Random(0, Seconds_to_wait);
|
||
|
Commands->Display_Text("Setting new timer\n");
|
||
|
Commands->Start_Timer(obj, duration, MPR_TIMER_WANDER_PMP);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timerID)
|
||
|
{
|
||
|
if (timerID == MPR_TIMER_WANDER_PMP)
|
||
|
{
|
||
|
Vector3 newPoint = RandomVector();
|
||
|
Commands->Display_Text("Timer expired\n");
|
||
|
Commands->Display_Text("Moving\n");
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.30f);
|
||
|
Commands->Action_Movement_Goto_Location(obj, newPoint,1.0f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Vector3 RandomVector(void)
|
||
|
{
|
||
|
Vector3 wanderPoint;
|
||
|
|
||
|
wanderPoint.X = Commands->Get_Random( 0, Wander_radius );
|
||
|
wanderPoint.Y = Commands->Get_Random( 0, Wander_radius );
|
||
|
wanderPoint.Z = 0;
|
||
|
return (start_position + wanderPoint);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_Looping_Path_JDG
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG UNUSED?
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
DestObjID1 = DEBUG
|
||
|
DestObjID2 = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_Looping_Path_JDG, "DestObjID1=:int, DestObjID2=:int")
|
||
|
{
|
||
|
int m_CurrentDest;
|
||
|
|
||
|
void Created(GameObject* game_obj)
|
||
|
{
|
||
|
m_CurrentDest = 0;
|
||
|
Goto_Dest(game_obj);
|
||
|
}
|
||
|
|
||
|
void Goto_Dest(GameObject* game_obj)
|
||
|
{
|
||
|
// Find the destination 'object'
|
||
|
|
||
|
GameObject* dest_obj = Commands->Find_Object(Get_Int_Parameter(m_CurrentDest));
|
||
|
|
||
|
if (dest_obj != NULL)
|
||
|
{
|
||
|
// Instruct our game object to goto the location of the destination object
|
||
|
Vector3 pos = Commands->Get_Position(dest_obj);
|
||
|
Commands->Action_Movement_Goto_Location(game_obj, pos, 3.0F);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("Error! Cannot find destination for MPR_Looping_Path_JDG.\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete(GameObject* game_obj, MovementCompleteReason)
|
||
|
{
|
||
|
m_CurrentDest = !m_CurrentDest;
|
||
|
Goto_Dest(game_obj);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_Bridge_Exploding_DEL
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG UNUSED
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
AnimationName = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_Bridge_Exploding_DEL, "AnimationName=:string")
|
||
|
{
|
||
|
void Created(GameObject* game_obj)
|
||
|
{
|
||
|
// Set the animation to the first frame
|
||
|
|
||
|
const char* animName = Get_Parameter("AnimationName");
|
||
|
Commands->Set_Animation_Frame(game_obj, animName, 0);
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* game_obj, int type, int, GameObject*)
|
||
|
{
|
||
|
// Is this the request to trigger the explosion?
|
||
|
// If so, then kick off the animation
|
||
|
|
||
|
if (type == MPR_CUSTOM_EXPLODE_BRIDGE_DEL) {
|
||
|
const char* animName = Get_Parameter("AnimationName");
|
||
|
Commands->Set_Animation(game_obj, animName, false);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_Bridge_Trigger_DEL
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG UNUSED
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
BridgeID = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_Bridge_Trigger_DEL, "BridgeID=:int")
|
||
|
{
|
||
|
void Entered(GameObject* obj, GameObject* enterer)
|
||
|
{
|
||
|
// Did the player enter the zone?
|
||
|
|
||
|
if (enterer == Commands->Get_The_Star())
|
||
|
{
|
||
|
int bridgeID = Get_Int_Parameter("BridgeID");
|
||
|
GameObject* dest_obj = Commands->Find_Object(bridgeID);
|
||
|
if (dest_obj != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, dest_obj, MPR_CUSTOM_EXPLODE_BRIDGE_DEL, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
Demo_Harvester
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
DEBUG UNUSED
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
RefineryZoneID = DEBUG
|
||
|
TiberiumZoneID = DEBUG
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
DEBUG - Harvester Behavior being moved to an innate system - DAY
|
||
|
|
||
|
DECLARE_SCRIPT(Demo_Harvester, "RefineryZoneID:int,TiberiumZoneID:int")
|
||
|
{
|
||
|
#define MIN_HARVEST_TIME (30)
|
||
|
#define MAX_HARVEST_TIME (60)
|
||
|
|
||
|
#define MIN_MOVE_TIME (3)
|
||
|
#define MAX_MOVE_TIME (5)
|
||
|
|
||
|
#define MIN_UNLOAD_TIME (15)
|
||
|
#define MAX_UNLOAD_TIME (30)
|
||
|
|
||
|
enum States
|
||
|
{
|
||
|
IDLE,
|
||
|
GOING_TO_TIBERIUM,
|
||
|
HARVESTING,
|
||
|
MOVING,
|
||
|
RETURNING_TO_REFINERY,
|
||
|
DOCKING,
|
||
|
UNLOADING,
|
||
|
};
|
||
|
|
||
|
States mState;
|
||
|
int mRefineryID;
|
||
|
int mTiberiumID;
|
||
|
|
||
|
void Created(GameObject*)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Behavior created\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
mRefineryID = Get_Int_Parameter("RefineryZoneID");
|
||
|
mTiberiumID = Get_Int_Parameter("TiberiumZoneID");
|
||
|
|
||
|
DebugPrint("RefineryID = %d, TiberiumID = %d\n", mRefineryID, mTiberiumID);
|
||
|
|
||
|
mState = IDLE;
|
||
|
GotoTiberium();
|
||
|
}
|
||
|
|
||
|
Vector3 FindTiberium(void)
|
||
|
{
|
||
|
// Locate the tiberium zone and pick a random location within the
|
||
|
// zone to go to.
|
||
|
|
||
|
GameObject* tiberium = Commands->Find_Object(mTiberiumID);
|
||
|
|
||
|
if (tiberium != NULL)
|
||
|
{
|
||
|
Vector3 location = Commands->Get_Position(tiberium);
|
||
|
// Vector3 extent = Commands->Get_Extent(tiberium); // See Byon for a new way to do this, if needed
|
||
|
|
||
|
DebugPrint("TiberiumZone Extent %f,%f,%f\n", extent.X, extent.Y, extent.Z);
|
||
|
location += RandomVector3(extent.X, extent.Y, 0.0f);
|
||
|
return location;
|
||
|
}
|
||
|
return Vector3(0.0f, 0.0f, 0.0f);
|
||
|
}
|
||
|
|
||
|
// Go to the tiberium field
|
||
|
|
||
|
void GotoTiberium(void)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Going to tiberium\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
Vector3 location = FindTiberium();
|
||
|
Commands->Action_Movement_Goto_Location(Owner(), location, 1.0f);
|
||
|
mState = GOING_TO_TIBERIUM;
|
||
|
}
|
||
|
|
||
|
// Harvest tiberium
|
||
|
|
||
|
void Harvest(void)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Harvesting\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
if (mState != HARVESTING)
|
||
|
{
|
||
|
Commands->Set_Animation(Owner(), "v_nod_harvester.m_harvesting", true);
|
||
|
|
||
|
float harvestTime = Commands->Get_Random(MIN_HARVEST_TIME, MAX_HARVEST_TIME);
|
||
|
DebugPrint("Harvest time %f seconds\n", harvestTime);
|
||
|
Commands->Start_Timer(Owner(), harvestTime, MPR_TIMER_HARVESTER_DONE_DEL);
|
||
|
}
|
||
|
float moveTime = Commands->Get_Random(MIN_MOVE_TIME, MAX_MOVE_TIME);
|
||
|
DebugPrint("Move time %f seconds\n", moveTime);
|
||
|
Commands->Start_Timer(Owner(), moveTime, MPR_TIMER_HARVESTER_MOVE_DEL);
|
||
|
mState = HARVESTING;
|
||
|
}
|
||
|
|
||
|
// Move to new location within tiberium field
|
||
|
|
||
|
void MoveToNewSpot(void)
|
||
|
{
|
||
|
Vector3 location = FindTiberium();
|
||
|
Commands->Action_Movement_Goto_Location(Owner(), location, 1.0f);
|
||
|
mState = MOVING;
|
||
|
}
|
||
|
|
||
|
void ReturnToRefinery(void)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Returning to refinery\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
// If there isn't a load and we are at the refinery then just sit idle.
|
||
|
GameObject* refinery = Commands->Find_Object(mRefineryID);
|
||
|
|
||
|
if (refinery != NULL)
|
||
|
{
|
||
|
Vector3 location = Commands->Get_Position(refinery);
|
||
|
Commands->Action_Movement_Goto_Location(Owner(), location, 1.0f);
|
||
|
}
|
||
|
|
||
|
mState = RETURNING_TO_REFINERY;
|
||
|
}
|
||
|
|
||
|
void Dock(void)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Docking\n", Commands->Get_ID(Owner()));
|
||
|
mState = DOCKING;
|
||
|
|
||
|
Unload(); // Denzil - Temporary
|
||
|
}
|
||
|
|
||
|
void Unload(void)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Unloading\n", Commands->Get_ID(Owner()));
|
||
|
Commands->Start_Timer(Owner(), 5.0f, MPR_TIMER_HARVESTER_DONE_DEL);
|
||
|
mState = UNLOADING;
|
||
|
}
|
||
|
|
||
|
void Movement_Complete(GameObject* obj, MovementCompleteReason reason)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: movement complete\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
switch (mState)
|
||
|
{
|
||
|
// Upon reaching tiberium begin harvesting.
|
||
|
case GOING_TO_TIBERIUM:
|
||
|
case MOVING:
|
||
|
Harvest();
|
||
|
break;
|
||
|
|
||
|
// Upon reaching refinery begin docking sequence.
|
||
|
case RETURNING_TO_REFINERY:
|
||
|
Dock();
|
||
|
break;
|
||
|
|
||
|
// When docking is complete being unloading.
|
||
|
case DOCKING:
|
||
|
Unload();
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timer)
|
||
|
{
|
||
|
if (timer == MPR_TIMER_HARVESTER_DONE_DEL)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Done timer expired\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
switch (mState)
|
||
|
{
|
||
|
// When finished harvesting return to the refinery.
|
||
|
case HARVESTING:
|
||
|
ReturnToRefinery();
|
||
|
break;
|
||
|
|
||
|
// When finished unloading go back to the tiberium field to resume harvesting.
|
||
|
case UNLOADING:
|
||
|
GotoTiberium();
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else if (timer == MPR_TIMER_HARVESTER_MOVE_DEL)
|
||
|
{
|
||
|
DebugPrint("Harvester %d: Move timer expired\n", Commands->Get_ID(Owner()));
|
||
|
|
||
|
if (mState == HARVESTING)
|
||
|
{
|
||
|
MoveToNewSpot();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
MPR_ApacheTrigger
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
ApacheID = DEBUG
|
||
|
Position = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_ApacheTrigger, "ApacheID:int,Position:int")
|
||
|
{
|
||
|
void Entered(GameObject*, GameObject* enterer)
|
||
|
{
|
||
|
GameObject* star = Commands->Get_The_Star();
|
||
|
|
||
|
// Only trigger if the commando entered the zone
|
||
|
|
||
|
if (enterer == star)
|
||
|
{
|
||
|
DebugPrint("Apache attack triggered!\n");
|
||
|
|
||
|
// Get apache object
|
||
|
|
||
|
int apacheID = Get_Int_Parameter("ApacheID");
|
||
|
GameObject* apache = Commands->Find_Object(apacheID);
|
||
|
|
||
|
// Tell the apache were to move
|
||
|
|
||
|
if (apache != NULL)
|
||
|
{
|
||
|
int position = Get_Int_Parameter("Position");
|
||
|
Commands->Send_Custom_Event(Owner(), apache, MPR_CUSTOM_APACHE_GOTO_POSITION_DEL, position);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_ApacheShootAtPlayer
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
ApacheID = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_ApacheShootAtPlayer, "ApacheID:int")
|
||
|
{
|
||
|
void Entered(GameObject*, GameObject* enterer)
|
||
|
{
|
||
|
GameObject* star = Commands->Get_The_Star();
|
||
|
|
||
|
// Only trigger if the commando entered the zone
|
||
|
|
||
|
if (enterer == star)
|
||
|
{
|
||
|
DebugPrint("Apache shoot at player enabled!\n");
|
||
|
|
||
|
// Get apache object
|
||
|
|
||
|
int apacheID = Get_Int_Parameter("ApacheID");
|
||
|
GameObject* apache = Commands->Find_Object(apacheID);
|
||
|
|
||
|
// Tell the apache were to move
|
||
|
|
||
|
if (apache != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), apache, MPR_CUSTOM_APACHE_SHOOT_DEL, (int)true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Exited(GameObject*, GameObject* exiter)
|
||
|
{
|
||
|
GameObject* star = Commands->Get_The_Star();
|
||
|
|
||
|
// Only trigger if the commando entered the zone
|
||
|
|
||
|
if (exiter == star)
|
||
|
{
|
||
|
DebugPrint("Apache shoot at player disabled!\n");
|
||
|
|
||
|
// Get apache object
|
||
|
|
||
|
int apacheID = Get_Int_Parameter("ApacheID");
|
||
|
GameObject* apache = Commands->Find_Object(apacheID);
|
||
|
|
||
|
// Tell the apache were to move
|
||
|
|
||
|
if (apache != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(Owner(), apache, MPR_CUSTOM_APACHE_SHOOT_DEL, (int)false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_ApacheController
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_ApacheController, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
APACHE_POSITION_FIRST = 0,
|
||
|
APACHE_LANDED = APACHE_POSITION_FIRST,
|
||
|
APACHE_POSITION_1,
|
||
|
APACHE_POSITION_2,
|
||
|
APACHE_POSITION_3,
|
||
|
APACHE_POSITION_4,
|
||
|
APACHE_POSITION_COUNT,
|
||
|
} ApachePosition;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
const char* TransitionAnim;
|
||
|
const char* HoverAnim;
|
||
|
} Transition;
|
||
|
|
||
|
static Transition _mTransitions[APACHE_POSITION_COUNT];
|
||
|
|
||
|
ApachePosition mCurrentPosition;
|
||
|
ApachePosition mDesiredPosition;
|
||
|
bool mCanShoot;
|
||
|
|
||
|
void Created(GameObject*)
|
||
|
{
|
||
|
DebugPrint("Apache attack script created.\n");
|
||
|
|
||
|
//Denzil: I added this line for an idle animation. Change as you need.
|
||
|
//David Y.
|
||
|
//Commands->Set_Animation(Owner(), "V_APACHE-E3.M_AP_POSITION1", true);
|
||
|
// Rotor anim fix
|
||
|
|
||
|
Vector3 origin(0.0f, 0.0f, 0.0f);
|
||
|
Commands->Set_Position(Owner(), origin);
|
||
|
Commands->Set_Facing(Owner(), 0.0f);
|
||
|
Commands->Set_Animation(Owner(), "M_AP_POSITION1", true);
|
||
|
|
||
|
mCurrentPosition = APACHE_LANDED;
|
||
|
mDesiredPosition = APACHE_LANDED;
|
||
|
mCanShoot = false;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* apache, int event, int param, GameObject*)
|
||
|
{
|
||
|
if (event == MPR_CUSTOM_APACHE_GOTO_POSITION_DEL)
|
||
|
{
|
||
|
Goto_Position((ApachePosition)param);
|
||
|
}
|
||
|
else if (event == MPR_CUSTOM_APACHE_SHOOT_DEL)
|
||
|
{
|
||
|
mCanShoot = ((param == 0) ? false : true);
|
||
|
Shoot_At_Player();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Goto_Position(ApachePosition position)
|
||
|
{
|
||
|
assert(position >= APACHE_POSITION_FIRST);
|
||
|
assert(position < APACHE_POSITION_COUNT);
|
||
|
|
||
|
// If we are not already at the requested position or in the process of
|
||
|
// going to the requested position.
|
||
|
|
||
|
if ((position != mCurrentPosition) || (position != mDesiredPosition))
|
||
|
{
|
||
|
#if(0)
|
||
|
|
||
|
// If currently in the landed position we must first move to 0.0.0
|
||
|
// because the animations are relative to that.
|
||
|
|
||
|
if (mCurrentPosition == APACHE_LANDED)
|
||
|
{
|
||
|
Vector3 origin(0.0f, 0.0f, 0.0f);
|
||
|
Commands->Set_Position(Owner(), origin);
|
||
|
Commands->Set_Facing(Owner(), 0.0f);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
mDesiredPosition = position;
|
||
|
DebugPrint("Apache desired position = %d\n", mDesiredPosition);
|
||
|
Transition& transition = _mTransitions[mDesiredPosition];
|
||
|
Commands->Set_Animation(Owner(), transition.TransitionAnim, false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete(GameObject* apache, const char* finishedAnim)
|
||
|
{
|
||
|
assert(finishedAnim != NULL);
|
||
|
DebugPrint("Apache animation '%s' complete.\n", finishedAnim);
|
||
|
|
||
|
Transition& transition = _mTransitions[mDesiredPosition];
|
||
|
|
||
|
// Verify that the expected animation has completed.
|
||
|
|
||
|
const char* animName = strrchr(finishedAnim, '.');
|
||
|
animName++;
|
||
|
|
||
|
if (stricmp(animName, transition.TransitionAnim) == 0)
|
||
|
{
|
||
|
// Arrived at desired position
|
||
|
|
||
|
mCurrentPosition = mDesiredPosition;
|
||
|
DebugPrint("Apache arrived at position = %d\n", mCurrentPosition);
|
||
|
|
||
|
// Get transition for current position
|
||
|
|
||
|
transition = _mTransitions[mCurrentPosition];
|
||
|
Commands->Set_Animation(Owner(), transition.HoverAnim, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int timerID)
|
||
|
{
|
||
|
if (timerID == MPR_TIMER_APACHE_SHOOT_DEL)
|
||
|
{
|
||
|
Shoot_At_Player();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Shoot_At_Player(void)
|
||
|
{
|
||
|
// Begin shooting if we can
|
||
|
if (mCanShoot == true)
|
||
|
{
|
||
|
// Only shoot if the apache is not transitioning.
|
||
|
if (mCurrentPosition == mDesiredPosition)
|
||
|
{
|
||
|
GameObject* star = Commands->Get_The_Star();
|
||
|
if (star != NULL)
|
||
|
{
|
||
|
Vector3 targetPosition = Commands->Get_Position(star);
|
||
|
targetPosition.X += Commands->Get_Random(-1.0f, 1.0f);
|
||
|
targetPosition.Y += Commands->Get_Random(-1.0f, 1.0f);
|
||
|
targetPosition.Z += Commands->Get_Random(0.0f, 2.0f);
|
||
|
DebugPrint("Apache shooting at location %.02f,%.02f,%.02f\n",targetPosition.X, targetPosition.Y, targetPosition.Z);
|
||
|
Commands->Trigger_Weapon(Owner(), true, targetPosition, true);
|
||
|
}
|
||
|
}
|
||
|
float fireAtInterval = Commands->Get_Random(0.33f, 1.5f);
|
||
|
Commands->Start_Timer(Owner(), fireAtInterval, MPR_TIMER_APACHE_SHOOT_DEL);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Commands->Trigger_Weapon(Owner(), false, Vector3(0.0f, 0.0f, 0.0f), true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
virtual void Killed(GameObject* obj, GameObject* killer)
|
||
|
{
|
||
|
DebugPrint("Apache killed.\n");
|
||
|
Commands->Create_Explosion_At_Bone("Vehicle Explosion 01", Owner(), "ROOTTRANSFORM", Owner());
|
||
|
}
|
||
|
|
||
|
virtual void Damaged(GameObject* obj, GameObject* damager)
|
||
|
{
|
||
|
DebugPrint("Apache damaged.\n");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_ApacheController
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
MPR_ApacheController::Transition MPR_ApacheController::_mTransitions[APACHE_POSITION_COUNT] =
|
||
|
{
|
||
|
// Landed
|
||
|
{NULL, NULL},
|
||
|
|
||
|
// Position 1 - Hover above landing pad
|
||
|
{"m_ap_loitr1", "m_ap_loitr1"},
|
||
|
|
||
|
// Position 2 - Move into position on the right side and hover
|
||
|
{"m_ap_move1-2", "m_ap_loitr2"},
|
||
|
|
||
|
// Position 3 - Move into position on front side and hover.
|
||
|
{"m_ap_move2-3", "m_ap_loitr3"},
|
||
|
|
||
|
// Position 4 - Move into position on the left side and hover
|
||
|
{"m_ap_move1-4", "m_ap_loitr4"},
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_Orca_Strike_On_Turret
|
||
|
|
||
|
This script handles the operations of the ORCA strike on the turret. When the animations that
|
||
|
are pre-placed upon the map are given a custom to start, they play their own animations and
|
||
|
handle firing operations. This code will change later to incorporate full firing routines for
|
||
|
ORCAs, currently being implemented by programming.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Target_Number = What turret this ORCA should be attacking.
|
||
|
Animation_Name = What animation to play upon this ORCA.
|
||
|
Fire_01 = What frame the first fire should be at.
|
||
|
Fire_02 = What frame the second fire should be at.
|
||
|
Fire_03 = What frame the third fire should be at.
|
||
|
Fire_04 = What frame the fourth fire should be at.
|
||
|
Fire_05 = What frame the fifth fire should be at.
|
||
|
Fire_06 = What frame the sixth fire should be at.
|
||
|
DestructionBone = What bone the explosion animation should be played upon if shot down.
|
||
|
ExplosionName = What explosion to play if shot down.
|
||
|
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Orca_Strike_On_Turret_RAD, "Target_Number:int, AnimationName:string, Fire_01:int, Fire_02:int, Fire_03:int, Fire_04:int, Fire_05:int, Fire_06:int")
|
||
|
{
|
||
|
Vector3 v_target_loc;
|
||
|
int n_target_number;
|
||
|
int n_attack_number;
|
||
|
|
||
|
void Created(GameObject* p_obj)
|
||
|
{
|
||
|
n_target_number = 0;
|
||
|
n_attack_number = 1;
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* p_obj, int n_type, int n_param, GameObject* p_sender)
|
||
|
{
|
||
|
if (n_type == MPR_A01_CUSTOM_ORCA_TURRETSTRIKE_RAD)
|
||
|
{
|
||
|
// Set up the appropriate target number for the turret target.
|
||
|
|
||
|
switch(Get_Int_Parameter("Target_Number"))
|
||
|
{
|
||
|
case (1):
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A01_orca_turret1_RAD))
|
||
|
{
|
||
|
n_target_number = MPR_A01_orca_turret1_RAD;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_On_Turret - ORCA cannot find its turret 1 target!\n");
|
||
|
Commands->Destroy_Object(p_obj);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case (2):
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A01_orca_turret2_RAD))
|
||
|
{
|
||
|
n_target_number = MPR_A01_orca_turret2_RAD;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_On_Turret - ORCA cannot find its turret 2 target!\n");
|
||
|
Commands->Destroy_Object(p_obj);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_On_Turret - ORCA's Target_Number is inappropriate!\n");
|
||
|
Commands->Destroy_Object(p_obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Find the location of the turret, and start the attack animation on the ORCA.
|
||
|
|
||
|
v_target_loc = Commands->Get_Position(Commands->Find_Object(n_target_number));
|
||
|
v_target_loc.Z += 0.5f;
|
||
|
Commands->Set_Animation(p_obj, Get_Parameter("AnimationName"), 0);
|
||
|
|
||
|
// Start the timer for the first attack. When this ends the attack happens.
|
||
|
|
||
|
Commands->Start_Timer(p_obj, (Get_Int_Parameter("Fire_01") / 30), MPR_A01_TIMER_ORCASTRIKE_RAD);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_On_Turret - Orca strike received an improper custom!\n");
|
||
|
Commands->Destroy_Object(p_obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* p_obj, int n_timer_id)
|
||
|
{
|
||
|
int n_newtimercount;
|
||
|
int n_timercount;
|
||
|
n_newtimercount = 0;
|
||
|
n_timercount = 0;
|
||
|
|
||
|
switch (n_timer_id)
|
||
|
{
|
||
|
case(MPR_A01_TIMER_ORCASTRIKE_RAD):
|
||
|
{
|
||
|
// Fire the weapon at the target.
|
||
|
|
||
|
Commands->Trigger_Weapon(p_obj, true, v_target_loc, true);
|
||
|
|
||
|
n_attack_number++;
|
||
|
|
||
|
// Start the timer for turning the attack off.
|
||
|
|
||
|
if (n_attack_number < 8)
|
||
|
{
|
||
|
Commands->Start_Timer(p_obj, MPR_A01_orca_attack_stoptime_RAD, MPR_A01_TIMER_ORCASTRIKE_OFF_RAD);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case(MPR_A01_TIMER_ORCASTRIKE_OFF_RAD):
|
||
|
{
|
||
|
// Turn off the attack, set the timer for the next attack.
|
||
|
|
||
|
Commands->Trigger_Weapon(p_obj, false, v_target_loc, true);
|
||
|
|
||
|
switch (n_attack_number)
|
||
|
{
|
||
|
case (2):
|
||
|
{
|
||
|
n_newtimercount = Get_Int_Parameter("Fire_02");
|
||
|
n_timercount = Get_Int_Parameter("Fire_01");
|
||
|
n_newtimercount -= n_timercount;
|
||
|
break;
|
||
|
}
|
||
|
case (3):
|
||
|
{
|
||
|
n_newtimercount = Get_Int_Parameter("Fire_03");
|
||
|
n_timercount = Get_Int_Parameter("Fire_02");
|
||
|
n_newtimercount -= n_timercount;
|
||
|
break;
|
||
|
}
|
||
|
case (4):
|
||
|
{
|
||
|
n_newtimercount = Get_Int_Parameter("Fire_04");
|
||
|
n_timercount = Get_Int_Parameter("Fire_03");
|
||
|
n_newtimercount -= n_timercount;
|
||
|
break;
|
||
|
}
|
||
|
case (5):
|
||
|
{
|
||
|
n_newtimercount = Get_Int_Parameter("Fire_05");
|
||
|
n_timercount = Get_Int_Parameter("Fire_04");
|
||
|
n_newtimercount -= n_timercount;
|
||
|
break;
|
||
|
}
|
||
|
case (6):
|
||
|
{
|
||
|
n_newtimercount = Get_Int_Parameter("Fire_06");
|
||
|
n_timercount = Get_Int_Parameter("Fire_05");
|
||
|
n_newtimercount -= n_timercount;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (n_newtimercount)
|
||
|
{
|
||
|
Commands->Start_Timer(p_obj, (n_newtimercount / 30), MPR_A01_TIMER_ORCASTRIKE_RAD);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_Orca_Turret
|
||
|
|
||
|
This script is for the turrets themselves. They simply assign their own ID numbers as per standard.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
TurretNumber = Which turret this script is operating on.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Orca_Turret_RAD, "TurretNumber:int")
|
||
|
{
|
||
|
float f_health;
|
||
|
int n_turret_number;
|
||
|
|
||
|
void Created(GameObject* p_obj)
|
||
|
{
|
||
|
n_turret_number = Get_Int_Parameter("TurretNumber");
|
||
|
MPR_A01_startstrike_RAD = false;
|
||
|
Commands->Set_Health(p_obj, 350.0f);
|
||
|
f_health = Commands->Get_Health(p_obj);
|
||
|
|
||
|
switch (n_turret_number)
|
||
|
{
|
||
|
case (1):
|
||
|
{
|
||
|
MPR_A01_orca_turret1_RAD = Commands->Get_ID(p_obj);
|
||
|
break;
|
||
|
}
|
||
|
case (2):
|
||
|
{
|
||
|
MPR_A01_orca_turret2_RAD = Commands->Get_ID(p_obj);
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Turret - Turret has no indicated number!\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* p_obj, int n_timer_id)
|
||
|
{
|
||
|
if (n_timer_id == 6543)
|
||
|
{
|
||
|
Commands->Create_Sound("TargetAcquired",Commands->Get_Position(Commands->Get_The_Star()),p_obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged(GameObject* p_obj, GameObject* p_damager)
|
||
|
{
|
||
|
if ((p_damager == Commands->Get_The_Star()) && (!MPR_A01_startstrike_RAD))
|
||
|
{
|
||
|
GameObject* p_orca1;
|
||
|
GameObject* p_orca2;
|
||
|
Vector3 v_zeroorg( 0,0,0 );
|
||
|
MPR_A01_startstrike_RAD = true;
|
||
|
|
||
|
p_orca1 = Commands->Create_Object("Orca airstrike", v_zeroorg);
|
||
|
if (p_orca1)
|
||
|
{
|
||
|
Commands->Attach_Script(p_orca1, "MPR_A01_Orca_Strike_On_Turret", "1,v_orcae3.m_orcastrike_a,195,255,310,348,419,459");
|
||
|
Commands->Send_Custom_Event(p_obj, p_orca1, MPR_A01_CUSTOM_ORCA_TURRETSTRIKE_RAD, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_Spawner - Cannot find proper animation for Orca Strike One!\n");
|
||
|
}
|
||
|
p_orca2 = Commands->Create_Object("Orca airstrike", v_zeroorg);
|
||
|
if (p_orca2)
|
||
|
{
|
||
|
Commands->Create_Sound("AirStrikeReady",Commands->Get_Position(Commands->Get_The_Star()),p_obj);
|
||
|
Commands->Start_Timer(p_obj, 1.5f, 6543);
|
||
|
Commands->Attach_Script(p_orca2, "MPR_A01_Orca_Strike_On_Turret", "2,v_orcae3.m_orcastrike_b,180,235,295,343,400,437");
|
||
|
Commands->Send_Custom_Event(p_obj, p_orca2, MPR_A01_CUSTOM_ORCA_TURRETSTRIKE_RAD, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A01_Orca_Strike_Spawner - Cannot find proper animation for Orca Strike Two!\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
MPR_A01_Orca_Turret_Attack_Zone
|
||
|
|
||
|
This script is specifically for the turret attacks - if the commando enters this zone,
|
||
|
the turrets start shooting at him if they still exist.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Orca_Turret_Attack_Zone_RAD, "")
|
||
|
{
|
||
|
void Entered(GameObject* p_obj, GameObject* p_enterer)
|
||
|
{
|
||
|
if (p_enterer == Commands->Get_The_Star())
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A01_orca_turret1_RAD))
|
||
|
{
|
||
|
Commands->Action_Attack_Object(Commands->Find_Object(MPR_A01_orca_turret1_RAD), p_enterer, 1.0f, 200.0f, true);
|
||
|
}
|
||
|
if (Commands->Find_Object(MPR_A01_orca_turret2_RAD))
|
||
|
{
|
||
|
Commands->Action_Attack_Object(Commands->Find_Object(MPR_A01_orca_turret2_RAD), p_enterer, 1.0f, 200.0f, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_Obelisk_Weapon
|
||
|
|
||
|
This script handles the obelisk weapon firing. It is attached to a zone.
|
||
|
It handle the following process:
|
||
|
|
||
|
0. When the object is created, it starts a firing timer for target switching.
|
||
|
1. When an object enters the zone, check if it's the player.
|
||
|
2. If it's not the player, add it to an empty slot in the list of targets.
|
||
|
3. When the timer expires, check the list for target ids.
|
||
|
4. If it finds a target ID, it verifies that the object exists.
|
||
|
5. If it exists, the object is fired upon.
|
||
|
6. If it does not exist, the object ID is removed from the list.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
ObeliskWeaponID = The ID of the Obelisk weapon object.
|
||
|
NodLightTankID = The ID of Joe's Nod light tank nearby.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_Obelisk_Weapon_RAD, "ObeliskWeaponID:int, NodLightTankID:int")
|
||
|
{
|
||
|
int a_obelisk_targets [6];
|
||
|
bool b_obelisk_firing;
|
||
|
int n_obelisk_id;
|
||
|
int n_nodtank_id;
|
||
|
|
||
|
void Created(GameObject* p_obj)
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - Obelisk zone created, initializing.\n");
|
||
|
int n_counter;
|
||
|
|
||
|
b_obelisk_firing = true;
|
||
|
n_obelisk_id = Get_Int_Parameter("ObeliskWeaponID");
|
||
|
|
||
|
if (Commands->Find_Object(n_obelisk_id))
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - Found the obelisk weapon itself.\n");
|
||
|
for (n_counter = 0;n_counter < 6;n_counter++)
|
||
|
{
|
||
|
a_obelisk_targets [n_counter] = 0;
|
||
|
}
|
||
|
Commands->Start_Timer(p_obj, MPR_A01_obelisk_firing_time_RAD, MPR_A04_TIMER_OBELISK_PREFIRING_RAD);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A04_Obelisk_Weapon - Obelisk weapon is missing!\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Entered(GameObject* p_obj, GameObject* p_enterer)
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - Obelisk firing zone entered.\n");
|
||
|
int n_counter;
|
||
|
bool b_tankfound;
|
||
|
|
||
|
b_tankfound = false;
|
||
|
|
||
|
// Special casing for Joe's Nod tank.
|
||
|
|
||
|
if (Commands->Find_Object(Get_Int_Parameter("NodLightTankID")))
|
||
|
{
|
||
|
GameObject* p_tank = Commands->Find_Object(Get_Int_Parameter("NodLightTankID"));
|
||
|
if (p_enterer == p_tank)
|
||
|
{
|
||
|
b_tankfound = true;
|
||
|
}
|
||
|
}
|
||
|
if (!b_tankfound)
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - The proper target has entered the zone.\n");
|
||
|
|
||
|
for (n_counter = 0;n_counter < 6;n_counter++)
|
||
|
{
|
||
|
if (!a_obelisk_targets[n_counter])
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - found a blank id slot, inserting.\n");
|
||
|
a_obelisk_targets[n_counter] = Commands->Get_ID(p_enterer);
|
||
|
n_counter = 6;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (!Commands->Find_Object(a_obelisk_targets[n_counter]))
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - found an obsolete id, replacing.\n");
|
||
|
a_obelisk_targets[n_counter] = Commands->Get_ID(p_enterer);
|
||
|
n_counter = 6;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* p_obj, int n_timer_id)
|
||
|
{
|
||
|
int n_counter;
|
||
|
Vector3 v_obeliskloc;
|
||
|
Vector3 v_targetloc;
|
||
|
int n_nontargets;
|
||
|
|
||
|
n_nontargets = 0;
|
||
|
v_obeliskloc = Commands->Get_Position(Commands->Find_Object(n_obelisk_id));
|
||
|
|
||
|
if ((b_obelisk_firing) && (n_timer_id == MPR_A04_TIMER_OBELISK_PREFIRING_RAD))
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - pre-firing timer expired. Creating explosion.\n");
|
||
|
//Commands->Create_Explosion("Obelisk Emitter", v_obeliskloc, p_obj);
|
||
|
Commands->Start_Timer(p_obj, 1.0f, MPR_A04_TIMER_OBELISK_FIRING_RAD);
|
||
|
}
|
||
|
if ((b_obelisk_firing) && (n_timer_id == MPR_A04_TIMER_OBELISK_FIRING_RAD))
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - obelisk firing timer expired. Looking for a target.\n");
|
||
|
for (n_counter = 0;n_counter < 6;n_counter++)
|
||
|
{
|
||
|
if ((Commands->Find_Object(a_obelisk_targets[n_counter])) && (Commands->Find_Object(n_obelisk_id)))
|
||
|
{
|
||
|
v_targetloc = Commands->Get_Position(Commands->Find_Object(a_obelisk_targets[n_counter]));
|
||
|
//Commands->Display_Text("RAD - shooting at target.\n");
|
||
|
if (Commands->Find_Object(a_obelisk_targets[n_counter]) != Commands->Get_The_Star())
|
||
|
{
|
||
|
Commands->Set_Health(Commands->Find_Object(a_obelisk_targets[n_counter]), 1.0f);
|
||
|
}
|
||
|
Commands->Trigger_Weapon(Commands->Find_Object(n_obelisk_id), true, v_targetloc, true);
|
||
|
Commands->Create_Explosion("Obelisk Explosion", v_targetloc, p_obj);
|
||
|
a_obelisk_targets[n_counter] = 0;
|
||
|
n_counter = 6;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
n_nontargets++;
|
||
|
}
|
||
|
}
|
||
|
if (n_nontargets == 6)
|
||
|
{
|
||
|
Commands->Trigger_Weapon(Commands->Find_Object(n_obelisk_id), false, v_obeliskloc, true);
|
||
|
}
|
||
|
Commands->Start_Timer(p_obj, 2.0f, MPR_A04_TIMER_OBELISK_STOPFIRING_RAD);
|
||
|
}
|
||
|
if (n_timer_id == MPR_A04_TIMER_OBELISK_STOPFIRING_RAD)
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - obelisk stop firing timer expired. Stopping firing.\n");
|
||
|
v_obeliskloc = Commands->Get_Position(p_obj);
|
||
|
Commands->Trigger_Weapon(Commands->Find_Object(n_obelisk_id), false, v_obeliskloc, true);
|
||
|
Commands->Start_Timer(p_obj, MPR_A01_obelisk_firing_time_RAD, MPR_A04_TIMER_OBELISK_PREFIRING_RAD);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* p_obj, int n_type, int n_param, GameObject* p_sender)
|
||
|
{
|
||
|
if (n_type == MPR_A04_CUSTOM_OBELISK_FIRING_RAD)
|
||
|
{
|
||
|
//Commands->Display_Text("RAD - obelisk firing being turned off.\n");
|
||
|
b_obelisk_firing = false;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_Main_Control_Terminal
|
||
|
|
||
|
This script handles the deactivation of the Obelisk. It handles the following process:
|
||
|
|
||
|
1. When either the Obelisk Main Control Terminal or the Power Plant Main Control Terminal
|
||
|
are destroyed, the Obelisk receives a custom to disable the firing action.
|
||
|
|
||
|
ObeliskControllerID = The ID of the obelisk controller zone, to tell it to stop firing.
|
||
|
BuildingID = The ID of the building that this console is in, for proper sounds and function.
|
||
|
|
||
|
0 = Hand of Nod
|
||
|
1 = Tiberium Refinery
|
||
|
2 = Obelisk
|
||
|
3 = Power Plant
|
||
|
4 = Airfield
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
ObeliskControllerID = The ID number of the Obelisk controller object.
|
||
|
BuildingID = Which building this script is operating on.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_Main_Control_Terminal_RAD, "ObeliskControllerID:int, BuildingID:int")
|
||
|
{
|
||
|
void Killed(GameObject* p_obj, GameObject* p_killer)
|
||
|
{
|
||
|
Vector3 v_consoleloc;
|
||
|
GameObject* p_created;
|
||
|
int n_building_id;
|
||
|
float f_rightbuilding;
|
||
|
|
||
|
n_building_id = Get_Int_Parameter("BuildingID");
|
||
|
|
||
|
if ((n_building_id == 2) || (n_building_id == 3))
|
||
|
{
|
||
|
f_rightbuilding = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
f_rightbuilding = false;
|
||
|
}
|
||
|
if ((Commands->Find_Object(Get_Int_Parameter("ObeliskControllerID"))) && (f_rightbuilding))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(p_obj, Commands->Find_Object(Get_Int_Parameter("ObeliskControllerID")), MPR_A04_CUSTOM_OBELISK_FIRING_RAD, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A04_Main_Control_Terminal - Cannot find Obelisk Controller object!\n");
|
||
|
}
|
||
|
v_consoleloc = Commands->Get_Position(p_obj);
|
||
|
Commands->Create_Explosion("Generic Ground 01", v_consoleloc, p_killer);
|
||
|
p_created = Commands->Create_Object_At_Bone(p_obj, "NOD Console Off", "TM[0]");
|
||
|
if (n_building_id != 2)
|
||
|
{
|
||
|
if (p_created)
|
||
|
{
|
||
|
Vector3 v_created = Commands->Get_Position(p_created);
|
||
|
Commands->Create_Sound(MPR_control_klaxons_RAD[n_building_id], v_created, p_created);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A05_Tank_Controller
|
||
|
|
||
|
This script handles the operation of the Mammoth Tank and Flame Tanks in areas 5 and 6. It performs the following
|
||
|
processes:
|
||
|
|
||
|
1. If enemies are seen, fire upon the enemies.
|
||
|
2. If taking damage, move to a new location among preset coordinates.
|
||
|
3. If the commmando crosses the temple area entry zone, move to the temple area.
|
||
|
4. If I am a temple guarding tank, I will remain motionless until the zone is entered.
|
||
|
|
||
|
My_Number = The number of this particular tank for reference purposes.
|
||
|
|
||
|
1 = Mammoth Tank
|
||
|
2 = Air dropped Flame Tank
|
||
|
3 = Temple Guard Flame Tank
|
||
|
4 = Temple Guard Flame Tank
|
||
|
|
||
|
Four coordintates are needed:
|
||
|
|
||
|
Coordinate 1, 2, and 3 = Primary move locations.
|
||
|
Coordinate 4 = Temple movement coordinate for #1 and #2.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
My_Number = What tank number this script is attached to.
|
||
|
MammothTank = The ID number of the Mammoth Tank.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A05_Tank_Controller_RAD, "My_Number:int, MammothTank:int")
|
||
|
{
|
||
|
int n_mynumber;
|
||
|
GameObject* p_target;
|
||
|
int n_flametank;
|
||
|
|
||
|
void Created(GameObject* p_obj)
|
||
|
{
|
||
|
n_flametank = 0;
|
||
|
int n_mammoth;
|
||
|
n_mammoth = 8649;
|
||
|
MPR_A05_mammoth_tank_id_RAD = n_mammoth;
|
||
|
n_mynumber = Get_Int_Parameter("My_Number");
|
||
|
if (n_mynumber == 2)
|
||
|
{
|
||
|
Commands->Action_Movement_Goto_Location(p_obj, MPR_A05_tank_move_locations_RAD[1], 2.0f);
|
||
|
if (Commands->Find_Object(n_mammoth))
|
||
|
{
|
||
|
Commands->Send_Custom_Event(p_obj, Commands->Find_Object(n_mammoth), MPR_A05_CUSTOM_MAMMOTH_RAD, Commands->Get_ID(p_obj));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject* p_obj, int n_type, int n_param, GameObject* p_sender)
|
||
|
{
|
||
|
if (n_type == MPR_A05_CUSTOM_TEMPLE_ZONE_ENTERED_RAD)
|
||
|
{
|
||
|
switch (n_mynumber)
|
||
|
{
|
||
|
case (1):
|
||
|
{
|
||
|
Commands->Action_Movement_Goto_Location(p_obj, MPR_A05_tank_move_locations_RAD[(n_mynumber - 1)], 2.0f);
|
||
|
break;
|
||
|
}
|
||
|
case (3):
|
||
|
{
|
||
|
Commands->Action_Movement_Goto_Location(p_obj, MPR_A05_tank_move_locations_RAD[(n_mynumber - 1)], 2.0f);
|
||
|
break;
|
||
|
}
|
||
|
case (4):
|
||
|
{
|
||
|
Commands->Action_Movement_Goto_Location(p_obj, MPR_A05_tank_move_locations_RAD[(n_mynumber - 1)], 2.0f);
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
{
|
||
|
DebugPrint("RAD-ERROR - MPR_A05_Tank_Controller - Received an improper custom!\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if (n_type == MPR_A05_CUSTOM_MAMMOTH_RAD)
|
||
|
{
|
||
|
n_flametank = n_param;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
p_target = p_sender;
|
||
|
Commands->Start_Timer(p_obj, 2.0f, MPR_A05_TIMER_MAMMOTH_RAD);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* p_obj, int n_timer_id)
|
||
|
{
|
||
|
Vector3 c130_location;
|
||
|
|
||
|
if (n_timer_id == MPR_A05_TIMER_MAMMOTH_RAD)
|
||
|
{
|
||
|
if (p_target)
|
||
|
{
|
||
|
c130_location = Commands->Get_Bone_Position(p_target, "BODYMAIN");
|
||
|
Commands->Action_Attack_Location(p_obj,c130_location, 0.0f, 200.0f, true);
|
||
|
}
|
||
|
Commands->Start_Timer(p_obj, 1.0f, MPR_A05_TIMER_MAMMOTH_2_RAD);
|
||
|
}
|
||
|
if (n_timer_id == MPR_A05_TIMER_MAMMOTH_2_RAD)
|
||
|
{
|
||
|
Commands->Action_Attack_Stop(p_obj);
|
||
|
Commands->Start_Timer(p_obj, 2.0f, MPR_A05_TIMER_MAMMOTH_3_RAD);
|
||
|
}
|
||
|
if (n_timer_id == MPR_A05_TIMER_MAMMOTH_3_RAD)
|
||
|
{
|
||
|
if (Commands->Find_Object(n_flametank))
|
||
|
{
|
||
|
Commands->Action_Attack_Object(p_obj, Commands->Find_Object(n_flametank), 1.0f, 100.0f, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A06_RMV_Final_Zone_Trigger
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A06_Final_Zone_Trigger_RMV, "")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
apache1_die,
|
||
|
apache2_die,
|
||
|
end_of_demo,
|
||
|
pause_animation,
|
||
|
end_of_whole_thing
|
||
|
};
|
||
|
|
||
|
int apache1_id, apache2_id, end_id;
|
||
|
int havoc_has_entered;
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
havoc_has_entered = 0;
|
||
|
}
|
||
|
|
||
|
void Entered( GameObject * obj, GameObject * enterer )
|
||
|
{
|
||
|
float apache1_die_frame = 146;
|
||
|
float fadeout_frame = 155;
|
||
|
|
||
|
if ( enterer == Commands->Get_The_Star() && havoc_has_entered == 0 )
|
||
|
{
|
||
|
havoc_has_entered = 1;
|
||
|
GameObject *clouds = Commands->Find_Object(9876);
|
||
|
if (clouds != NULL)
|
||
|
{
|
||
|
Commands->Destroy_Object(clouds);
|
||
|
}
|
||
|
Commands->Create_Sound( "Ion Cannon ready", Commands->Get_Position(Commands->Get_The_Star()), obj );
|
||
|
Commands->Start_Timer( obj, fadeout_frame/30, end_of_demo );
|
||
|
Commands->Create_Object( "Outro Aggregate", Vector3(0,0,0) );
|
||
|
Commands->Create_Sound( "Ion Cannon03", Vector3(-170.0f, 448.0f, 20.0f), obj );
|
||
|
GameObject *apache1 = Commands->Create_Object( "Apache Outro 1", Vector3(0,0,0) );
|
||
|
GameObject *apache2 = Commands->Create_Object( "Apache Outro 2", Vector3(0,0,0) );
|
||
|
Commands->Start_Timer( obj, apache1_die_frame/30, apache1_die );
|
||
|
apache1_id = Commands->Get_ID( apache1 );
|
||
|
apache2_id = Commands->Get_ID( apache2 );
|
||
|
}
|
||
|
}
|
||
|
void Timer_Expired( GameObject * obj, int timer_id )
|
||
|
{
|
||
|
if ( timer_id == apache1_die )
|
||
|
{
|
||
|
GameObject *apache1 = Commands->Find_Object( apache1_id );
|
||
|
GameObject *apache2 = Commands->Find_Object( apache2_id );
|
||
|
if (apache1 != NULL)
|
||
|
{
|
||
|
Vector3 explosion1 = Commands->Get_Bone_Position( apache1, "SEAT" );
|
||
|
Commands->Create_Explosion( "Generic Air 02", explosion1 );
|
||
|
}
|
||
|
if (apache2 != NULL)
|
||
|
{
|
||
|
Vector3 explosion2 = Commands->Get_Bone_Position( apache2, "SEAT" );
|
||
|
Commands->Create_Explosion( "Generic Air 02", explosion2 );
|
||
|
}
|
||
|
}
|
||
|
if (timer_id == end_of_demo)
|
||
|
{
|
||
|
GameObject *fadeout = Commands->Create_Object("outro fadeout", Vector3(0,0,0));
|
||
|
Commands->Create_Sound( "Outro Sound", Vector3(-170.0f, 448.0f, 20.0f), obj );
|
||
|
end_id = Commands->Get_ID(fadeout);
|
||
|
Commands->Enable_HUD(0);
|
||
|
Commands->Control_Enable(Commands->Get_The_Star(), false);
|
||
|
Commands->Start_Timer( obj, 2.0f, pause_animation);
|
||
|
}
|
||
|
if (timer_id == pause_animation)
|
||
|
{
|
||
|
GameObject *fadeout = Commands->Find_Object(end_id);
|
||
|
if (fadeout != NULL)
|
||
|
{
|
||
|
Commands->Set_Animation_Frame(fadeout, "fadeout.fadeout", 61);
|
||
|
}
|
||
|
Commands->Start_Timer( obj, 4.0f, end_of_whole_thing );
|
||
|
}
|
||
|
if (timer_id == end_of_whole_thing)
|
||
|
{
|
||
|
Commands->Mission_Complete(true);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A05_RMV_C130_Zone_Trigger
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A05_C130_Zone_Trigger_RMV, "")
|
||
|
{
|
||
|
void Entered( GameObject * obj, GameObject * enterer )
|
||
|
{
|
||
|
GameObject *aircraft;
|
||
|
if ( enterer == Commands->Get_The_Star() )
|
||
|
{
|
||
|
aircraft = Commands->Create_Object( "C-130 airdrop", Vector3(160.66f,623.06f,0.00f) );
|
||
|
Commands->Set_Facing( aircraft, 149.54f );
|
||
|
Commands->Destroy_Object( obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A05_RMV_A10_Trigger_When_SAM_Destroyed
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A05_A10_Trigger_When_SAM_Destroyed_RMV, "")
|
||
|
{
|
||
|
void Killed( GameObject * obj, GameObject * killer )
|
||
|
{
|
||
|
Commands->Create_Object( "A-10 with bomb dropper", Vector3(0,0,0) );
|
||
|
Commands->Create_Sound("AirStrikeReady",Commands->Get_Position(Commands->Get_The_Star()),obj);
|
||
|
Commands->Start_Timer(obj, 1.5f, 6543);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject* obj, int n_timer_id)
|
||
|
{
|
||
|
if (n_timer_id == 6543)
|
||
|
{
|
||
|
Commands->Create_Sound("TargetAcquired",Commands->Get_Position(Commands->Get_The_Star()),obj);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_RMV_Zone_Trigger_For_Dogfight
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Zone_Trigger_For_Dogfight_RMV, "")
|
||
|
{
|
||
|
void Entered(GameObject * obj, GameObject * enterer)
|
||
|
{
|
||
|
if (enterer == Commands->Get_The_Star())
|
||
|
{
|
||
|
Commands->Create_Object( "Apache Dogfight", Vector3(0,0,0) );
|
||
|
Commands->Create_Object( "Orca Dogfight", Vector3(0,0,0) );
|
||
|
Commands->Destroy_Object( obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
MPR_A05_RMV_C130_Dropoff_Animation
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Cinematic = DEBUG
|
||
|
ObjToCreate = DEBUG
|
||
|
DropFrame = DEBUG
|
||
|
BoneName = DEBUG
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A05_C130_Dropoff_Animation_RMV, "Cinematic=:string,ObjToCreate=:string,DropFrame=:int,BoneName=:string")
|
||
|
{
|
||
|
int debris_1_id, debris_2_id, debris_3_id;
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
Commands->Set_Animation ( obj, Get_Parameter( "Cinematic" ), 0 );
|
||
|
int drop_frame = Get_Int_Parameter( "DropFrame" );
|
||
|
float drop_time = ( float )drop_frame / 30.0;
|
||
|
Commands->Start_Timer( obj, drop_time, MPR_A05_TIMER_DROP_OBJECT_RMV );
|
||
|
}
|
||
|
|
||
|
void Timer_Expired ( GameObject* obj, int Timer_ID )
|
||
|
{
|
||
|
if ( Timer_ID == MPR_A05_TIMER_DROP_OBJECT_RMV )
|
||
|
{
|
||
|
GameObject* flametank = Commands->Create_Object_At_Bone( obj, Get_Parameter( "ObjToCreate" ), Get_Parameter( "BoneName" ) );
|
||
|
if (flametank)
|
||
|
{
|
||
|
Commands->Attach_Script( flametank,"MPR_A05_Tank_Controller","2" );
|
||
|
}
|
||
|
Commands->Send_Custom_Event( obj, Commands->Find_Object( 8649 ), 0, 0 );
|
||
|
Commands->Start_Timer( obj, 2.0f, MPR_A05_TIMER_DIE_RMV );
|
||
|
}
|
||
|
if (Timer_ID == MPR_A05_TIMER_DIE_RMV)
|
||
|
{
|
||
|
if ( obj != NULL )
|
||
|
{
|
||
|
Commands->Create_Explosion_At_Bone("C-130 Explosion 01", obj, "BODYMAIN", obj);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A05_RMV_A10_Air_Strike
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A05_A10_Air_Strike_RMV, "")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
GO,
|
||
|
SHOOT,
|
||
|
STOP,
|
||
|
STRAFE,
|
||
|
NO_STRAFE
|
||
|
};
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
float go_time = 3.0;
|
||
|
float shoot_frame = 160; //Frame 70
|
||
|
float shoot_time = shoot_frame / 30;
|
||
|
float stop_frame = 240; //Frame 150
|
||
|
float stop_time = stop_frame / 30;
|
||
|
float begin_strafe_frame = 420;
|
||
|
float begin_strafe_time = begin_strafe_frame / 30;
|
||
|
float stop_strafe_frame = 450;
|
||
|
float stop_strafe_time = stop_strafe_frame / 30;
|
||
|
Commands->Start_Timer( obj, go_time, GO);
|
||
|
Commands->Start_Timer( obj, shoot_time, SHOOT );
|
||
|
Commands->Start_Timer( obj, stop_time, STOP );
|
||
|
Commands->Start_Timer( obj, begin_strafe_time, STRAFE );
|
||
|
Commands->Start_Timer( obj, stop_strafe_time, NO_STRAFE );
|
||
|
}
|
||
|
|
||
|
void Timer_Expired ( GameObject* obj, int timer_id )
|
||
|
{
|
||
|
if ( timer_id == GO )
|
||
|
{
|
||
|
Commands->Set_Animation( obj, "v_gdi-a10e3.m_a10strike_a", 0 );
|
||
|
}
|
||
|
if ( timer_id == SHOOT )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(85,665,0), true );
|
||
|
}
|
||
|
if ( timer_id == STOP )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, false, Vector3(85,665,0), true );
|
||
|
}
|
||
|
if ( timer_id == STRAFE )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(-37,679,10), false );
|
||
|
Commands->Create_Explosion( "Generic Ground 01", Vector3(-37,679,10), obj );
|
||
|
}
|
||
|
if ( timer_id == NO_STRAFE )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, false, Vector3(-37,679,10), false );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete( GameObject * obj, const char * name )
|
||
|
{
|
||
|
Commands->Destroy_Object( obj );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_RMV_Apache_Dogfight
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Apache_Dogfight_RMV, "")
|
||
|
{
|
||
|
void Animation_Complete( GameObject * obj, const char * name )
|
||
|
{
|
||
|
Commands->Destroy_Object( obj );
|
||
|
Commands->Create_Object( "Apache Destroyed", Vector3(0,0,0) );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_RMV_Orca_Dogfight
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Orca_Dogfight_RMV, "")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
FIRE_1,
|
||
|
FIRE_2,
|
||
|
FIRE_3,
|
||
|
FIRE_4,
|
||
|
STOP_FIRE,
|
||
|
};
|
||
|
|
||
|
void Created( GameObject * obj )
|
||
|
{
|
||
|
float fire_1_frame = 80;
|
||
|
float fire_2_frame = 175;
|
||
|
float fire_3_frame = 246;
|
||
|
float fire_4_frame = 285;
|
||
|
|
||
|
Commands->Start_Timer( obj, fire_1_frame / 30, FIRE_1 );
|
||
|
Commands->Start_Timer( obj, fire_2_frame / 30, FIRE_2 );
|
||
|
Commands->Start_Timer( obj, fire_3_frame / 30, FIRE_3 );
|
||
|
Commands->Start_Timer( obj, fire_4_frame / 30, FIRE_4 );
|
||
|
}
|
||
|
|
||
|
void Timer_Expired( GameObject * obj, int timer_id )
|
||
|
{
|
||
|
if ( timer_id == FIRE_1 )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(-6.195326f,-117.866371f,20.833399f), true );
|
||
|
Commands->Start_Timer(obj, 0.2f, STOP_FIRE);
|
||
|
}
|
||
|
if ( timer_id == FIRE_2 )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(107.822525f,76.754219f,23.240044f), true );
|
||
|
Commands->Start_Timer( obj, 0.2f, STOP_FIRE );
|
||
|
}
|
||
|
if ( timer_id == FIRE_3 )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(240.367477f,28.173233f,27.428972f), true );
|
||
|
Commands->Start_Timer( obj, 0.2f, STOP_FIRE );
|
||
|
}
|
||
|
if ( timer_id == FIRE_4 )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, true, Vector3(183.254105f,58.453369f,59.090523f), true );
|
||
|
Commands->Start_Timer( obj, 0.2f, STOP_FIRE );
|
||
|
}
|
||
|
if ( timer_id == STOP_FIRE )
|
||
|
{
|
||
|
Commands->Trigger_Weapon( obj, false, Vector3(240.367477f,28.173233f,27.428972f), true );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A01_RMV_Intro_Cinematic
|
||
|
|
||
|
DEBUG DESCRIPTION
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A01_Intro_Cinematic_RMV, "")
|
||
|
{
|
||
|
enum
|
||
|
{
|
||
|
CAMERA_B_START,
|
||
|
CAMERA_C_START,
|
||
|
A10_START,
|
||
|
BIKEA_START,
|
||
|
BIKEA_DIE,
|
||
|
BIKEB_START,
|
||
|
BIKEB_DIE,
|
||
|
HAVOC_START,
|
||
|
ROPE_START,
|
||
|
EFFECT_START,
|
||
|
INTRO,
|
||
|
REMOVE,
|
||
|
HAVOC_BLEND
|
||
|
};
|
||
|
|
||
|
Vector3 start_location;
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
float camera_end_frame = 251;
|
||
|
GameObject *camera;
|
||
|
|
||
|
Commands->Start_Timer( obj, 0.5f, REMOVE );
|
||
|
camera = Commands->Create_Object("Intro Camera 2", Vector3(0,0,0));
|
||
|
Commands->Set_Camera_Host(camera);
|
||
|
Commands->Create_Object("Chinook Intro 2", Vector3(0,0,0));
|
||
|
Commands->Create_Object("Havoc Intro", Vector3(0,0,0));
|
||
|
Commands->Create_Object("Rope Intro", Vector3(0,0,0));
|
||
|
Commands->Start_Timer(obj, camera_end_frame/30, INTRO);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired(GameObject * obj, int timer_id)
|
||
|
{
|
||
|
if ( timer_id == REMOVE )
|
||
|
{
|
||
|
Commands->Control_Enable( Commands->Get_The_Star(), false );
|
||
|
Commands->Enable_HUD(0);
|
||
|
}
|
||
|
|
||
|
if ( timer_id == INTRO )
|
||
|
{
|
||
|
start_location.X = -118.69f;
|
||
|
start_location.Y = -190.68f;
|
||
|
start_location.Z = 3.80f;
|
||
|
Commands->Set_Position( Commands->Get_The_Star(), start_location );
|
||
|
Commands->Set_Facing( Commands->Get_The_Star(), 180.0f );
|
||
|
Commands->Set_Animation( Commands->Get_The_Star(), "s_a_human.m_havok_e3pose", 0 );
|
||
|
Commands->Set_Camera_Host( NULL );
|
||
|
Commands->Control_Enable( Commands->Get_The_Star(), true );
|
||
|
Commands->Enable_HUD(1);
|
||
|
Commands->Destroy_Object(obj);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DRILL_INSTRUCTOR
|
||
|
|
||
|
The following are the scripts involved with the drill seargent routine.
|
||
|
It is broken up into 6 scripts, 2 zones, the drill seargent, and the three
|
||
|
cadet guys. The following is the script for the Drill Instructor.
|
||
|
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
|
||
|
//insert new drill scripts here
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Instructor_JDG, "")
|
||
|
{
|
||
|
//state is used to keep track of what DI is doing
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A02_drill_instructor_idle = 0,
|
||
|
DI_MOVING,
|
||
|
DI_INNATE,
|
||
|
} DIState;
|
||
|
|
||
|
DIState state;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Created and disallowing innate\n" );
|
||
|
|
||
|
MPR_A02_drill_instructor_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
if (Killer == (Commands->Get_The_Star()))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject* obj, int Type, int Param, GameObject* Sender)
|
||
|
{
|
||
|
if ((Param == MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG) && (Type == MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Recieved Innate Custom\n");
|
||
|
|
||
|
state = DI_INNATE;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), timeDelay, MPR_A02_TIMER_DRILL_INSTRUCTOR_ATTACK_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
|
||
|
//When Havoc enters zone come to attention
|
||
|
if ((Param == MPR_A02_PARAM_CADETS_TEN_HUT_JDG) && (Type == MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Received custom from zone, about to do Ten_Hut\n" );
|
||
|
|
||
|
Ten_Hut (obj);
|
||
|
}
|
||
|
|
||
|
//when cadet 1 is at attention start with pushups
|
||
|
if ((Type == MPR_A02_CUSTOM_CADET_1_JDG) && (Param == MPR_A02_PARAM_CADETS_AT_ATTENTION_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, About to start first pushups\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J04C", 0);
|
||
|
//S_A_HUMAN.H_A_J04C is animation for give order
|
||
|
|
||
|
Commands->Create_Sound ("KeepYourHeadDown02", (Commands->Get_Position (obj)), obj);
|
||
|
//insert "Lets start with pushups" for this dialog line
|
||
|
|
||
|
exercise = PUSHUPS;
|
||
|
|
||
|
Cadet_Mistake ();
|
||
|
}
|
||
|
|
||
|
if ((Type == MPR_A02_CUSTOM_CADET_1_JDG) && (Param == MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, About to Rag on Cadet #1\n");
|
||
|
|
||
|
Rag_On_Cadet (1);
|
||
|
}
|
||
|
|
||
|
if ((Type == MPR_A02_CUSTOM_CADET_2_JDG) && (Param == MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, About to Rag on Cadet #2\n");
|
||
|
|
||
|
Rag_On_Cadet (2);
|
||
|
}
|
||
|
|
||
|
if ((Type == MPR_A02_CUSTOM_CADET_3_JDG) && (Param == MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, About to Rag on Cadet #3\n");
|
||
|
|
||
|
Rag_On_Cadet (3);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Ten_Hut (GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Starting Ten_Hut\n");
|
||
|
|
||
|
//check if cadet_2 exists
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Ten_Hut, DI gives order\n");
|
||
|
|
||
|
//instructor faces cadet 2...
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), 1, 0);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J18C",0);
|
||
|
//S_A_HUMAN.H_A_J18C is animation for ten-hut
|
||
|
|
||
|
Commands->Create_Sound ("LookAlive02", (Commands->Get_Position (obj)), obj);
|
||
|
//insert "Ten Hut" sound here when ready
|
||
|
|
||
|
//Start reaction delay timers on the Cadets
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Ten_Hut, Start C1 delay timer\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_TEN_HUT_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Ten_Hut, Start C2 delay timer\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_TEN_HUT_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Ten_Hut, Start C3 delay timer\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_TEN_HUT_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Cadet_Mistake (void)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, Start\n");
|
||
|
|
||
|
//declare and define local variables here
|
||
|
|
||
|
float mistake;
|
||
|
mistake = Commands->Get_Random(0,100);
|
||
|
|
||
|
//there is a 25% chance of mistake
|
||
|
if (mistake > 220)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, About to goto Choose_Cadet\n");
|
||
|
|
||
|
Choose_Cadet ();
|
||
|
}
|
||
|
|
||
|
//if no mistake tell all cadets to do specific exercise
|
||
|
else
|
||
|
{
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #1 do pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #2 do pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #3 do pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
DI_Goes_To_New_Position ();
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #1 do situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #2 do situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #3 do situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
DI_Goes_To_New_Position ();
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #1 do j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #2 do j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Cadet_Mistake, No mistake, #3 do j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
DI_Goes_To_New_Position ();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Choose_Cadet (void)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, Start\n");
|
||
|
|
||
|
float cadet;
|
||
|
|
||
|
cadet = Commands->Get_Random(0,100);
|
||
|
|
||
|
//define cadet as a number between 0 and 100
|
||
|
//choose cadet 1 for mistake
|
||
|
|
||
|
if ((cadet > 0) && (cadet <= 33))
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake\n");
|
||
|
|
||
|
Commands->Create_Sound ("GonnaDieHere02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))), (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)));
|
||
|
//insert "Doh!" sound when ready
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J09C", 0);
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
}
|
||
|
|
||
|
//tell cadet 2-3 to do proper animation
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #2 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #3 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #2 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #3 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// jumping jacks
|
||
|
|
||
|
else
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #2 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_JUMPING_JACKS_DELAY_JDG);
|
||
|
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C1 makes mistake, #3 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_JUMPING_JACKS_DELAY_JDG);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//choose cadet 2 for mistake
|
||
|
|
||
|
else if ((cadet > 33) && (cadet <= 66))
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake\n");
|
||
|
|
||
|
Commands->Create_Sound ("GonnaDieHere02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))), (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)));
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J09C", 0);
|
||
|
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
|
||
|
}
|
||
|
|
||
|
//tell cadet 1 and 3 to do proper animation
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #1 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #3 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #1 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #3 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// jumping jacks
|
||
|
|
||
|
else
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #1 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C2 makes mistake, #3 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//choose cadet 3 for mistake
|
||
|
|
||
|
else
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake\n");
|
||
|
|
||
|
Commands->Create_Sound ("GonnaDieHere02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_cadet_3_id_JDG))), (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)));
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J09C", 0);
|
||
|
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
}
|
||
|
|
||
|
//tell cadet 1,2 to do proper animation
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #2 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #1 pushups\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_PUSHUPS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #2 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #1 situps\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_SITUPS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// jumping jacks
|
||
|
|
||
|
else
|
||
|
{
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #2 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_JUMPING_JACKS_DELAY_JDG);
|
||
|
|
||
|
}
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_1_id_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Choose_Cadet, C3 makes mistake, #1 j-jacks\n");
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_JUMPING_JACKS_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Rag_On_Cadet (int Cadet_Number)
|
||
|
{
|
||
|
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Rag_On_Cadet, start\n");
|
||
|
|
||
|
|
||
|
if ((Cadet_Number == 1) && (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Rag_On_Cadet, DI rags on C1\n");
|
||
|
|
||
|
//make drill instructor face cadet 1
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)),(Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), 1, 0);
|
||
|
|
||
|
Vector3 C1_position (MPR_A02_CADET_1_X_JDG, MPR_A02_CADET_1_Y_JDG, MPR_A02_CADET_1_Z_JDG);
|
||
|
|
||
|
//Drill instructor goes to cadet 1's position
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), C1_position, 0.5f);
|
||
|
}
|
||
|
|
||
|
if ((Cadet_Number == 2) && (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Rag_On_Cadet, DI rags on C2\n");
|
||
|
|
||
|
//make drill instructor face cadet 2
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)),(Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), 1, 0);
|
||
|
|
||
|
Vector3 C2_position (MPR_A02_CADET_2_X_JDG, MPR_A02_CADET_2_Y_JDG, MPR_A02_CADET_2_Z_JDG);
|
||
|
|
||
|
//Drill instructor goes to cadet 2's position
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), C2_position, 0.5f);
|
||
|
}
|
||
|
|
||
|
if ((Cadet_Number == 3) && (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Rag_On_Cadet, DI rags on C3\n");
|
||
|
|
||
|
//make drill instructor face cadet 3
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)),(Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), 1, 0);
|
||
|
|
||
|
Vector3 C3_position (MPR_A02_CADET_3_X_JDG, MPR_A02_CADET_3_Y_JDG, MPR_A02_CADET_3_Z_JDG);
|
||
|
|
||
|
//Drill instructor goes to cadet 3's position
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), C3_position, 0.5f);
|
||
|
}
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), "S_A_HUMAN.H_A_J07C", 0);
|
||
|
|
||
|
//S_A_HUMAN.H_A_J07C is animation for rag on cadet
|
||
|
|
||
|
Yell_At_Cadet ();
|
||
|
|
||
|
//sets up random things to yell at cadet guy
|
||
|
}
|
||
|
|
||
|
|
||
|
void Yell_At_Cadet (void)
|
||
|
{
|
||
|
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Yell_At_Cadet, start\n");
|
||
|
|
||
|
float n = Commands->Get_Random(0, 100);
|
||
|
|
||
|
if ((n > 0) && (n <= 25) && (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)))
|
||
|
{
|
||
|
Commands->Create_Sound ("KillHim02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
}
|
||
|
|
||
|
else if ((n > 25) && (n <= 50) && (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)))
|
||
|
{
|
||
|
Commands->Create_Sound ("KeepYourHeadDown02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
}
|
||
|
|
||
|
else if ((n < 50) && (n <= 75) && (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)))
|
||
|
{
|
||
|
Commands->Create_Sound ("SoundAlarm02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Create_Sound ("FireAtWill02", (Commands->Get_Position (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
|
||
|
//S_A_HUMAN.H_A_J07C is animation for rag on cadet
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_J07C", name) == 0) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Animation_Complete\n");
|
||
|
|
||
|
DI_Goes_To_New_Position ();
|
||
|
}
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_DIV1", name) == 0) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)) && (state == DI_INNATE))
|
||
|
{
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 1.0f, 50.0f);
|
||
|
|
||
|
//Commands->Set_Animation (obj, "S_A_HUMAN.H_A_C2C0", 1);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void DI_Goes_To_New_Position (void)
|
||
|
{
|
||
|
if (state != DI_INNATE)
|
||
|
{
|
||
|
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, DI_Goes_To_New_Position, start\n");
|
||
|
|
||
|
float xnot, ynot, znot;
|
||
|
float random_number = Commands->Get_Random (0,100);
|
||
|
|
||
|
if ((random_number > 0) && (random_number <= 25))
|
||
|
{
|
||
|
xnot = -56.94f;
|
||
|
ynot = -11.48f;
|
||
|
znot = 2.42f;
|
||
|
}
|
||
|
|
||
|
else if ((random_number > 25) && (random_number <= 50))
|
||
|
{
|
||
|
xnot = -56.13f;
|
||
|
ynot = -10.00f;
|
||
|
znot = 2.42f;
|
||
|
}
|
||
|
|
||
|
else if ((random_number > 50) && (random_number <= 75))
|
||
|
{
|
||
|
xnot = -54.70f;
|
||
|
ynot = -8.86f;
|
||
|
znot = 2.42f;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
xnot = -53.21f;
|
||
|
ynot = -8.00f;
|
||
|
znot = 2.42f;
|
||
|
}
|
||
|
|
||
|
Vector3 New_Position(xnot, ynot, znot);
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), .15f);
|
||
|
Commands->Action_Movement_Goto_Location ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), New_Position, 0.2f);
|
||
|
|
||
|
float delayTimer = Commands->Get_Random(10,15);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), delayTimer, MPR_A02_TIMER_DI_PRE_GIVE_ORDER_JDG);
|
||
|
|
||
|
//make DI wait for 10-15 secs
|
||
|
|
||
|
state = DI_MOVING;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete (GameObject* obj, MovementCompleteReason)
|
||
|
{
|
||
|
if ((state == DI_MOVING) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))
|
||
|
{
|
||
|
//when DI reaches new spot, face cadets and start new timer
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A02_cadet_2_id_JDG))
|
||
|
{
|
||
|
// DebugPrint("JDG. Demo, Drill Instructor, Movement_Complete, start\n");
|
||
|
|
||
|
//first, make instructor face cadets...
|
||
|
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), 1, 0);
|
||
|
state = MPR_A02_drill_instructor_idle;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A02_TIMER_DI_PRE_GIVE_ORDER_JDG) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)) && (state != DI_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Timer_Expired, start\n");
|
||
|
|
||
|
Next_Exercise ();
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_DRILL_INSTRUCTOR_ATTACK_DELAY_JDG) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)) && (state == DI_INNATE))
|
||
|
{
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 0, 0);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_DIV1", 0);
|
||
|
//forward roll
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Next_Exercise (void)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Drill Instructor, Next_Exercise, start\n");
|
||
|
|
||
|
exercise = (Exercise)(exercise + 1);
|
||
|
|
||
|
if (exercise >= JUMPING_JACKS)
|
||
|
{
|
||
|
exercise = PUSHUPS;
|
||
|
}
|
||
|
|
||
|
if ((exercise == PUSHUPS) && (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))
|
||
|
{
|
||
|
//Omega = 1 is pushups
|
||
|
//have DI do a command animation
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), "S_A_HUMAN.H_A_J04C", 0);
|
||
|
//S_A_HUMAN.H_A_J04C is animation for give order
|
||
|
|
||
|
//have DI tell cadets to start with pushups
|
||
|
Commands->Create_Sound ("LookAlive02", (Commands->Get_Position ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
|
||
|
Cadet_Mistake ();
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
//Omega = 2 is situps
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), "S_A_HUMAN.H_A_J04C", 0);
|
||
|
//S_A_HUMAN.H_A_J04C is animation for give order
|
||
|
|
||
|
//have DI tell cadets to start with pushups
|
||
|
Commands->Create_Sound ("HoldYourPositions02", (Commands->Get_Position ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
|
||
|
Cadet_Mistake ();
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
//Omega = 3 is situps
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), "S_A_HUMAN.H_A_J04C", 0);
|
||
|
//S_A_HUMAN.H_A_J04C is animation for give order
|
||
|
|
||
|
//have DI tell cadets to start with pushups
|
||
|
Commands->Create_Sound ("KeepYourHeadDown02", (Commands->Get_Position ((Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)))), (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)));
|
||
|
|
||
|
Cadet_Mistake ();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DRILL_Zone
|
||
|
|
||
|
The following is the script for the kill zone
|
||
|
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Start_Zone_JDG, "")
|
||
|
{
|
||
|
//declare variables here
|
||
|
int count;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
MPR_A02_drill_zone_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
count = 0;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (count == 0))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG, MPR_A02_PARAM_CADETS_TEN_HUT_JDG);
|
||
|
|
||
|
//DebugPrint("JDG. Demo, Zone sending custom to Drill instructor\n");
|
||
|
|
||
|
count++;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DRILL_CADET_1
|
||
|
|
||
|
The following is the script for cadet number 1
|
||
|
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Cadet_1_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A02_cadet_1_id_JDGLE = 0,
|
||
|
CADET_1_INNATE,
|
||
|
} C1State;
|
||
|
|
||
|
C1State state;
|
||
|
|
||
|
//declare variables here
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Created and turning off innate\n");
|
||
|
|
||
|
MPR_A02_cadet_1_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Vector3 C1_Start_Spot(MPR_A02_CADET_1_X_JDG, MPR_A02_CADET_1_Y_JDG, MPR_A02_CADET_1_Z_JDG);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location (obj, C1_Start_Spot, .02f);
|
||
|
|
||
|
Vector3 Cadet_Face_Spot(-56.02f, -9.09f, 2.42f);
|
||
|
Commands->Action_Attack_Location(obj, Cadet_Face_Spot, 0, 0);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
if (Killer == (Commands->Get_The_Star()))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject* obj, int Type, int Param, GameObject* Sender)
|
||
|
{
|
||
|
if ((Param == MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG) && (Type == MPR_A02_CUSTOM_CADET_1_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Recieved Innate Custom\n");
|
||
|
|
||
|
state = CADET_1_INNATE;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_ATTACK_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_ATTACK_DELAY_JDG) && (state == CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Attack Havoc Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.55f);
|
||
|
|
||
|
Vector3 C1_Attack_Spot(-51.25f, -6.41f, 2.42f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, C1_Attack_Spot, .02f);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_D2A3", 0);
|
||
|
//"S_A_HUMAN.H_A_D2A3" is animation for running to left
|
||
|
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 150.0f, 50);
|
||
|
}
|
||
|
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_TEN_HUT_DELAY_JDG) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_A0A0", 0);
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_PUSHUPS_DELAY_JDG) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Pushups_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13B is animation for pushups
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_SITUPS_DELAY_JDG) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Situps_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J13C", 0);
|
||
|
//S_A_HUMAN.H_A_J14C is animation for situps
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_JUMPING_JACKS_DELAY_JDG) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, JJacks_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_1_MISTAKE_DELAY_JDG) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Mistake_Timer_Expired, start\n");
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13B is animation for pushups
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
//S_A_HUMAN.H_A_J14C is animation for situps
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43C") == 0) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J13A", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43A") == 0) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J43B", 1);
|
||
|
}
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13C") == 0) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13A") == 0) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), "S_A_HUMAN.H_A_J13B", 1);
|
||
|
}
|
||
|
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
if ((stricmp (name,"S_A_HUMAN.H_A_A0A0") ==0 ) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Animation_Complete, Come to Attention\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_AT_ATTENTION_JDG);
|
||
|
}
|
||
|
|
||
|
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
if ((stricmp (name, "S_A_HUMAN.H_A_J09C") == 0 ) && (state != CADET_1_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Animation_Complete, Make Mistake\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG);
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_1_MISTAKE_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DRILL_CADET_2
|
||
|
|
||
|
The following is the script for cadet number 2
|
||
|
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Cadet_2_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A02_cadet_2_id_JDGLE = 0,
|
||
|
CADET_2_INNATE,
|
||
|
} C2State;
|
||
|
|
||
|
C2State state;
|
||
|
|
||
|
//declare variables here
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Created and turning off innate\n");
|
||
|
|
||
|
MPR_A02_cadet_2_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Vector3 C2_Start_Spot(MPR_A02_CADET_2_X_JDG, MPR_A02_CADET_2_Y_JDG, MPR_A02_CADET_2_Z_JDG);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location (obj, C2_Start_Spot, .02f);
|
||
|
|
||
|
Vector3 Cadet_Face_Spot(-56.02f, -9.09f, 2.42f);
|
||
|
Commands->Action_Attack_Location(obj, Cadet_Face_Spot, 0, 0);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
if (Killer == (Commands->Get_The_Star()))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject* obj, int Type, int Param, GameObject* Sender)
|
||
|
{
|
||
|
if ((Param == MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG) && (Type == MPR_A02_CUSTOM_CADET_2_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Recieved Innate Custom\n");
|
||
|
|
||
|
state = CADET_2_INNATE;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_ATTACK_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_ATTACK_DELAY_JDG) && (state == CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Attack Havoc Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.25f);
|
||
|
|
||
|
Vector3 C2_Attack_Spot(-50.03f, -13.23f, 2.42f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, C2_Attack_Spot, .02f);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_D2B2", 0);
|
||
|
//"S_A_HUMAN.H_A_D2B2" is animation for walking backwards
|
||
|
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 150.0f, 50);
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_TEN_HUT_DELAY_JDG) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_A0A0", 0);
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_PUSHUPS_DELAY_JDG) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Pushups_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13B is animation for pushups
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_SITUPS_DELAY_JDG) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Situps_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J13C", 0);
|
||
|
//S_A_HUMAN.H_A_J14C is animation for situps
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_JUMPING_JACKS_DELAY_JDG) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, JJacks_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_2_MISTAKE_DELAY_JDG) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Mistake_Timer_Expired, start\n");
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13B is animation for pushups
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
//S_A_HUMAN.H_A_J14C is animation for situps
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43C") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J13A", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43A") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J43B", 1);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13C") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13A") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), "S_A_HUMAN.H_A_J13B", 1);
|
||
|
}
|
||
|
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_A0A0") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Animation_Complete, Come to Attention\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_AT_ATTENTION_JDG);
|
||
|
}
|
||
|
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J09C") == 0) && (state != CADET_2_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Animation_Complete, Make Mistake\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG);
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_2_MISTAKE_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DRILL_CADET_3
|
||
|
|
||
|
The following is the script for cadet number 3
|
||
|
|
||
|
DEBUG NAMING CONVENTION
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Cadet_3_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A02_cadet_3_id_JDGLE = 0,
|
||
|
CADET_3_INNATE,
|
||
|
} C3State;
|
||
|
|
||
|
C3State state;
|
||
|
|
||
|
//declare variables here
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Created and turning off innate\n");
|
||
|
|
||
|
MPR_A02_cadet_3_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Vector3 C3_Start_Spot(MPR_A02_CADET_3_X_JDG, MPR_A02_CADET_3_Y_JDG, MPR_A02_CADET_3_Z_JDG);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location (obj, C3_Start_Spot, .02f);
|
||
|
|
||
|
Vector3 Cadet_Face_Spot(-56.02f, -9.09f, 2.42f);
|
||
|
Commands->Action_Attack_Location(obj, Cadet_Face_Spot, 0, 0);
|
||
|
}
|
||
|
|
||
|
void Killed (GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
if (Killer == (Commands->Get_The_Star()))
|
||
|
{
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject* obj, int Type, int Param, GameObject* Sender)
|
||
|
{
|
||
|
if ((Param == MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG) && (Type == MPR_A02_CUSTOM_CADET_3_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Recieved Innate Custom\n");
|
||
|
|
||
|
state = CADET_3_INNATE;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_ATTACK_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_ATTACK_DELAY_JDG) && (state == CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Attack Havoc Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.55f);
|
||
|
|
||
|
Vector3 C3_Attack_Spot(-55.32f, -16.55f, 2.42f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, C3_Attack_Spot, .02f);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_D2A4", 0);
|
||
|
//"S_A_HUMAN.H_A_D2A4" is animation for running to right
|
||
|
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 150.0f, 50);
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_TEN_HUT_DELAY_JDG) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_A0A0", 0);
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_PUSHUPS_DELAY_JDG) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 1, Pushups_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13A is animation for transition into pushups
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_SITUPS_DELAY_JDG) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Situps_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J13C", 0);
|
||
|
//S_A_HUMAN.H_A_J14C is animation for situps
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_JUMPING_JACKS_DELAY_JDG) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, JJacks_Timer_Expired, start\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A02_TIMER_CADET_3_MISTAKE_DELAY_JDG) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Mistake_Timer_Expired, start\n");
|
||
|
|
||
|
if (exercise == PUSHUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J43C", 0);
|
||
|
//S_A_HUMAN.H_A_J13B is animation for pushups
|
||
|
}
|
||
|
|
||
|
else if (exercise == SITUPS)
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
//S_A_HUMAN.H_A_J13C is animation for transition outof pushups
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J43A" , 0);
|
||
|
//S_A_HUMAN.H_A_J43B is animation for j-jacks
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43C") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J13A", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J43A") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J43B", 1);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13C") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J14C", 1);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J13A") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Pushup transition Complete, Start pushups\n");
|
||
|
|
||
|
Commands->Set_Animation ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), "S_A_HUMAN.H_A_J13B", 1);
|
||
|
}
|
||
|
|
||
|
//S_A_HUMAN.H_A_A0A0 is animation for come to attention
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_A0A0") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 3, Animation_Complete, Come to Attention\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_AT_ATTENTION_JDG);
|
||
|
}
|
||
|
|
||
|
//S_A_HUMAN.H_A_J09C is animation for make mistake
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J09C") == 0) && (state != CADET_3_INNATE))
|
||
|
{
|
||
|
//DebugPrint("JDG. Demo, Cadet 2, Animation_Complete, Make Mistake\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_MADE_MISTAKE_JDG);
|
||
|
|
||
|
float timeDelay = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), timeDelay, MPR_A02_TIMER_CADET_3_MISTAKE_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_Drill_Kill_Havoc_Zone
|
||
|
|
||
|
The following script is for two zones next to the exercise routine that lets the exercise guys know when
|
||
|
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_Drill_Kill_Havoc_Zone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, Drill Instructor, Kill Havoc Zone, Created okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, Drill Instructor, Havoc has penetrated Kill Havoc Zone, Sending Innate Customs\n");
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_drill_instructor_id_JDG)), MPR_A02_CUSTOM_DRILL_INSTRUCTOR_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_1_id_JDG)), MPR_A02_CUSTOM_CADET_1_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_2_id_JDG)), MPR_A02_CUSTOM_CADET_2_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_cadet_3_id_JDG)), MPR_A02_CUSTOM_CADET_3_JDG, MPR_A02_PARAM_CADETS_GOTO_INNATE_JDG);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_StartZone
|
||
|
|
||
|
The following are the scripts involved with the Obelisk suicide run.
|
||
|
It is broken up into 7 scripts, start zone, GDI minigunner 1, GDI minigunner 2,
|
||
|
GDI medium tank, NOD minigunner, NOD light tank, and the control console.
|
||
|
|
||
|
*/
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_StartZone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, StartZone, Created okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
|
||
|
MPR_A04_suiciderun_enterzone_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, Havoc has penetrated StartZone, Start GDI Suicide Team Initial Motion\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.20f);
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.20f);
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.35f);
|
||
|
|
||
|
Vector3 NewPosition(203.40f, 364.33f, 1.04f);
|
||
|
Commands->Action_Movement_Goto_Location((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), NewPosition, 0.01f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 6.0f);
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 6.0f);
|
||
|
|
||
|
float timeDelay_1 = Commands->Get_Random (8.5f,12.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_NOD_MINIGUNNER_HAVOC_IN_ZONE_DELAY_JDG);
|
||
|
|
||
|
Havoc_in_this_Zone++;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_GDI_Minigunner_1
|
||
|
|
||
|
The following is the script for the GDI minigunner by the obelisk. Its pretty tightly scripted and fragile.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_GDI_Minigunner_1_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A04_MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_IDLE_JDG = 0,
|
||
|
MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_MOVING_TO_OBELISK,
|
||
|
|
||
|
|
||
|
} GDIM1State;
|
||
|
|
||
|
GDIM1State M1state;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 1, Created okay\n");
|
||
|
|
||
|
MPR_A04_suiciderun_gdi_minigunner_1_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
M1state = MPR_A04_MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_IDLE_JDG;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_CHASE_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 1 ChaseDelay Timer Expired\n");
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.75f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), 10.0f);
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), 0.0f, 50);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_FOLLOW_TANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 1 Follow Tank Timer Expired\n");
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.5f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 6.0f);
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_ATTACK_LIGHTTANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)))
|
||
|
{
|
||
|
Vector3 Escort_1_go_to_Spot(153.19f, 406.50f, 0.65f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Escort_1_go_to_Spot, 5.5f);
|
||
|
|
||
|
Commands->Action_Attack_Object(obj, (Commands->Find_Object(MPR_A04_suiciderun_nod_light_tank_id_JDG)), 0.0f, 20.f);
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_ATTACK_OBELISK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)))
|
||
|
{
|
||
|
if ( status == MPR_A04_SUICIDERUN_CONSOLE_ALIVE)
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.35f);
|
||
|
|
||
|
float Xnot = Commands->Get_Random (90.69f, 110.69f);
|
||
|
float Ynot = Commands->Get_Random (396.69f, 416.69f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(Xnot, Ynot, 3.37f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
Vector3 Obelisk_Attack_Location(81.60f, 403.71f, 8.77f);
|
||
|
Commands->Action_Attack_Location(obj, Obelisk_Attack_Location,10.0f, 50.0f);
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(108.19f, 405.22f, 1.35f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
M1state = MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_MOVING_TO_OBELISK;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_OBELISK_IS_DEAD_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)) && (state == MPR_A04_SUICIDERUN_LIGHTTANK_DEAD))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(108.19f, 405.22f, 1.35f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
M1state = MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_MOVING_TO_OBELISK;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete (GameObject* obj, MovementCompleteReason)
|
||
|
{
|
||
|
|
||
|
if ((M1state == MPR_A04_SUICIDERUN_GDI_MINIGUNNER_1_MOVING_TO_OBELISK) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)))
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "S_A_HUMAN.H_A_J33C", 0);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J33C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J15C", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J15C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J03C", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J03C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J33C", 0);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_GDI_Minigunner_2
|
||
|
|
||
|
The following is the script for the GDI minigunner by the obelisk. Its pretty tightly scripted and fragile.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_GDI_Minigunner_2_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A04_SUICIDERUN_GDI_MINIGUNNER_2_MOVING_TO_OBELISK = 0,
|
||
|
|
||
|
|
||
|
} GDIM2State;
|
||
|
|
||
|
GDIM2State M2state;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 2, Created okay\n");
|
||
|
|
||
|
MPR_A04_suiciderun_gdi_minigunner_2_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_CHASE_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 2 ChaseDelay Timer Expired\n");
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.75f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), 10.0f);
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), 0.0f, 50);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_FOLLOW_TANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Minigunner 2 Follow Tank Timer Expired\n");
|
||
|
|
||
|
if (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.5f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 6.0f);
|
||
|
|
||
|
Commands->Action_Attack_Object((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.0f, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_ATTACK_LIGHTTANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)))
|
||
|
{
|
||
|
Vector3 Escort_2_go_to_Spot(163.07f, 403.31f, 1.40f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Escort_2_go_to_Spot, 5.5f);
|
||
|
|
||
|
Commands->Action_Attack_Object(obj, (Commands->Find_Object(MPR_A04_suiciderun_nod_light_tank_id_JDG)), 0.0f, 20.f);
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_ATTACK_OBELISK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)))
|
||
|
{
|
||
|
if ( status == MPR_A04_SUICIDERUN_CONSOLE_ALIVE)
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.35f);
|
||
|
|
||
|
float Xnot = Commands->Get_Random (90.69f, 110.69f);
|
||
|
float Ynot = Commands->Get_Random (396.69f, 416.69f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(Xnot, Ynot, 3.37f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
Vector3 Obelisk_Attack_Location(81.60f, 403.71f, 8.77f);
|
||
|
Commands->Action_Attack_Location(obj, Obelisk_Attack_Location,10.0f, 50.0f);
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(97.86f, 411.18f, 2.97f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
M2state = MPR_A04_SUICIDERUN_GDI_MINIGUNNER_2_MOVING_TO_OBELISK;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_OBELISK_IS_DEAD_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)) && (state == MPR_A04_SUICIDERUN_LIGHTTANK_DEAD))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(97.86f, 411.18f, 2.97f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
M2state = MPR_A04_SUICIDERUN_GDI_MINIGUNNER_2_MOVING_TO_OBELISK;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete (GameObject* obj, MovementCompleteReason)
|
||
|
{
|
||
|
|
||
|
if ((M2state == MPR_A04_SUICIDERUN_GDI_MINIGUNNER_2_MOVING_TO_OBELISK) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)))
|
||
|
{
|
||
|
Commands->Set_Animation(obj, "S_A_HUMAN.H_A_J09C", 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J09C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J10C", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J10C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J11C", 0);
|
||
|
}
|
||
|
|
||
|
if ((stricmp(name, "S_A_HUMAN.H_A_J11C") == 0))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J09C", 0);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_GDI_Medium_Tank
|
||
|
|
||
|
The following is the script for the GDI medium tank by the obelisk. Its pretty tightly scripted and fragile.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_GDI_Medium_Tank_JDG, "")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, GDI Medium Tank, Created okay\n");
|
||
|
|
||
|
MPR_A04_suiciderun_gdi_medium_tank_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_ATTACK_LIGHTTANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.45f);
|
||
|
|
||
|
Vector3 Tank_go_to_Spot(201.56f, 374.40f, 1.92f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Tank_go_to_Spot, 0.5f);
|
||
|
|
||
|
Commands->Action_Attack_Object(obj, (Commands->Find_Object(MPR_A04_suiciderun_nod_light_tank_id_JDG)), 0.0f, 100.f);
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_ATTACK_OBELISK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)))
|
||
|
{
|
||
|
if ( status == MPR_A04_SUICIDERUN_CONSOLE_ALIVE)
|
||
|
{
|
||
|
float Xnot = Commands->Get_Random (90.69f, 110.69f);
|
||
|
float Ynot = Commands->Get_Random (396.69f, 416.69f);
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(Xnot, Ynot, 3.37f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
Vector3 Obelisk_Attack_Location(81.60f, 403.71f, 8.77f);
|
||
|
Commands->Action_Attack_Location(obj, Obelisk_Attack_Location,10.0f, 50.0f);
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(95.20f, 405.23f, 4.3f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_OBELISK_IS_DEAD_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)) && (state == MPR_A04_SUICIDERUN_LIGHTTANK_DEAD))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 0.25f);
|
||
|
|
||
|
Vector3 Obelisk_Move_to_Location(95.20f, 405.23f, 4.3f);
|
||
|
Commands->Action_Movement_Goto_Location (obj, Obelisk_Move_to_Location, 0.5f);
|
||
|
|
||
|
Vector3 Obelisk_Attack_Location(180.13f, 410.65f, 2.90f);
|
||
|
Commands->Action_Attack_Location(obj, Obelisk_Attack_Location,0, 0);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_NOD_Minigunner
|
||
|
|
||
|
The following is the script for the NOD minigunner tank by the obelisk. Its pretty tightly scripted and fragile.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_NOD_Minigunner_JDG, "")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, Created okay\n");
|
||
|
|
||
|
MPR_A04_suiciderun_nod_minigunner_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_NOD_MINIGUNNER_HAVOC_IN_ZONE_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, Recieved Custom from EnterZone, Starting GDI Minigunner Timers\n");
|
||
|
|
||
|
float timeDelay_1 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_CHASE_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_2 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), timeDelay_2, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_CHASE_DELAY_JDG);
|
||
|
|
||
|
NOD_MINIGUNNER_ATTACKS_HAVOC ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void NOD_MINIGUNNER_ATTACKS_HAVOC (void)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, NOD_MINIGUNNER_ATTACKS_HAVOC start\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed((Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), 0.6f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Object((Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG)), (Commands->Get_The_Star()), 10.0f);
|
||
|
}
|
||
|
|
||
|
void Damaged (GameObject* obj, GameObject* Damager)
|
||
|
{
|
||
|
if ((Damager == (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG))) || (Damager == (Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG))))
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, Has been damaged\n");
|
||
|
{
|
||
|
GameObject* nodGunner = Commands->Find_Object(MPR_A04_suiciderun_nod_minigunner_id_JDG);
|
||
|
|
||
|
if (nodGunner != NULL)
|
||
|
{
|
||
|
Commands->Action_Movement_Stop(nodGunner);
|
||
|
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, Has stopped\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Minigunner, NOD_MINIGUNNER Killed, Start new GDI timers\n");
|
||
|
|
||
|
float timeDelay_1 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_FOLLOW_TANK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_2 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), timeDelay_2, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_FOLLOW_TANK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_4 = Commands->Get_Random (3.5f,6.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_nod_light_tank_id_JDG)), timeDelay_4, MPR_A04_TIMER_SUICIDERUN_NOD_LIGHTTANK_ATTACK_MEDIUMTANK_DELAY_JDG);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_NOD_Light_Tank
|
||
|
|
||
|
The following is the script for the NOD light tank by the obelisk. Its pretty tightly scripted and fragile.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_NOD_Light_Tank_JDG, "")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, PRDemo, SuicideRun, NOD Light Tank, Created okay\n");
|
||
|
|
||
|
MPR_A04_suiciderun_nod_light_tank_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Commands->Set_Health(obj, 400.0f);
|
||
|
|
||
|
state = MPR_A04_SUICIDERUN_LIGHTTANK_ALIVE;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A04_TIMER_SUICIDERUN_NOD_LIGHTTANK_ATTACK_MEDIUMTANK_DELAY_JDG) && (Commands->Find_Object(MPR_A04_suiciderun_nod_light_tank_id_JDG)))
|
||
|
{
|
||
|
Commands->Action_Attack_Object(obj, (Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), 10.0f, 100.0f);
|
||
|
|
||
|
float timeDelay_1 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_ATTACK_LIGHTTANK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_2 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), timeDelay_2, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_ATTACK_LIGHTTANK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_4 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), timeDelay_4, MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_ATTACK_LIGHTTANK_DELAY_JDG);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
float timeDelay_1 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_ATTACK_OBELISK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_2 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), timeDelay_2, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_ATTACK_OBELISK_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_4 = Commands->Get_Random (1.5f,2.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), timeDelay_4, MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_ATTACK_OBELISK_DELAY_JDG);
|
||
|
|
||
|
state = MPR_A04_SUICIDERUN_LIGHTTANK_DEAD;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A04_SuicideRun_Console
|
||
|
|
||
|
The following is a script for the suicide run. It goes on both the obelisk and power plant consoles and lets
|
||
|
the gdi guys know if/when the console gets destroyed.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A04_SuicideRun_Console_JDG, "")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
status = MPR_A04_SUICIDERUN_CONSOLE_ALIVE;
|
||
|
}
|
||
|
|
||
|
void Killed(GameObject* obj, GameObject* Killer)
|
||
|
{
|
||
|
float timeDelay_1 = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_1_id_JDG)), timeDelay_1, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_1_OBELISK_IS_DEAD_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_2 = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_minigunner_2_id_JDG)), timeDelay_2, MPR_A04_TIMER_SUICIDERUN_GDI_MINIGUNNER_2_OBELISK_IS_DEAD_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_4 = Commands->Get_Random (0.5f,1.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A04_suiciderun_gdi_medium_tank_id_JDG)), timeDelay_4, MPR_A04_TIMER_SUICIDERUN_GDI_MEDIUMTANK_OBELISK_IS_DEAD_DELAY_JDG);
|
||
|
|
||
|
status = MPR_A04_SUICIDERUN_CONSOLE_DEAD;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DriveBy_EnterZone
|
||
|
|
||
|
The following are the scripts involved in the harvester escort routine.
|
||
|
There are 2 scripts, one for a zone and the other for the Harvester
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_DriveBy_EnterZone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPR_A02_HarvesterDriveBy_EnterZone, Created Okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//Commands->DebugPrint("JDG, MPRA02, Havoc has Entered the DriveBy start zone, Sending customs to harvester patrol group\n");
|
||
|
//Commands->Display_Text_Colored(Vector3(1.0f,0.0f,0.7f),"JDG, MPRA02, Havoc has Entered the DriveBy start zone, Sending customs to harvester patrol group\n" );
|
||
|
|
||
|
Commands->Send_Custom_Event (obj, (Commands->Find_Object(MPR_A02_driveby_harvester_id_JDG)), MPR_A02_CUSTOM_DRIVEBY_HARVESTER_JDG, MPR_A00_PARAM_HAVOC_IN_ENTER_ZONE_JDG);
|
||
|
|
||
|
Havoc_in_this_Zone++;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A02_DriveBy_Harvester
|
||
|
|
||
|
The following is the script for the harvester that comes from the refinery. It basicly just follows
|
||
|
a waypath to the tiberium field and then does nothing.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A02_DriveBy_Harvester_JDG, "")
|
||
|
{
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA02, DriveBy, Harvester Created Okay\n");
|
||
|
|
||
|
MPR_A02_driveby_harvester_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
|
||
|
Commands->Set_Health(obj, 400.0f);
|
||
|
}
|
||
|
|
||
|
void Custom (GameObject* obj, int Type, int Param, GameObject* Sender)
|
||
|
{
|
||
|
if ((Type == MPR_A02_CUSTOM_DRIVEBY_HARVESTER_JDG) && (Param == MPR_A00_PARAM_HAVOC_IN_ENTER_ZONE_JDG))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA02, Harvester, Recieved Custom from EnterZone, Starting Scenario\n");
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.25f);
|
||
|
|
||
|
Commands->Action_Movement_Follow_Waypath ( obj, MPR_A02_HARVESTER_WAYPATH_JDG, MPR_A02_HARVESTER_WAYPATH_START_JDG, MPR_A02_HARVESTER_WAYPATH_STOP_JDG, true );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
MPR_A03_Helicopter_EnterZone
|
||
|
|
||
|
The following are the scripts involved with the injured pilot at
|
||
|
the crashed Apache. There are two scripts, the first is for a zone
|
||
|
that acts as a controller for the random explosions, and the second
|
||
|
is for the pilot himself.
|
||
|
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_Helicopter_EnterZone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
int Explosion_Count;
|
||
|
int count;
|
||
|
int MPR_A03_HELI_EXLOSION_ZONE_ID;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A03_JDG_EXPLOSION_TIMER_1,
|
||
|
MPR_A03_JDG_EXPLOSION_TIMER_2,
|
||
|
MPR_A03_JDG_EXPLOSION_TIMER_3,
|
||
|
MPR_A03_JDG_EXPLOSION_TIMER_4,
|
||
|
|
||
|
} PRTIMER_TIMERS;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Heli_Explosion EnterZone created okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
|
||
|
|
||
|
MPR_A03_HELI_EXLOSION_ZONE_ID = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Havoc has Entered the Heli_Explosion EnterZone, Starting Explosions\n");
|
||
|
|
||
|
//Havoc_in_this_Zone++;
|
||
|
|
||
|
Explosion_Count = (int)Commands->Get_Random (10, 15);
|
||
|
|
||
|
count = 0;
|
||
|
|
||
|
Commands->Start_Timer((Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)), .71f, MPR_A03_TIMER_INJURED_PILOT_CRAWL_1_JDG);
|
||
|
|
||
|
Havoc_in_this_Zone++;
|
||
|
|
||
|
Make_Explosions ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Make_Explosions ()
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Make Explosions start\n");
|
||
|
|
||
|
int Explosion_Number = (int)Commands->Get_Random(1, 5);
|
||
|
|
||
|
if ((Explosion_Number == 1) && (count <= Explosion_Count))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Make Explosions Starting Timer 1\n");
|
||
|
|
||
|
count++;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random(3.0f, 5.0f);
|
||
|
Commands->Start_Timer((Commands->Find_Object(MPR_A03_HELI_EXLOSION_ZONE_ID)), timeDelay, MPR_A03_JDG_EXPLOSION_TIMER_1);
|
||
|
}
|
||
|
|
||
|
else if ((Explosion_Number == 2) && (count <= Explosion_Count))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Make Explosions Starting Timer 2\n");
|
||
|
|
||
|
count++;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random(3.0f, 5.0f);
|
||
|
Commands->Start_Timer((Commands->Find_Object(MPR_A03_HELI_EXLOSION_ZONE_ID)), timeDelay, MPR_A03_JDG_EXPLOSION_TIMER_2);
|
||
|
}
|
||
|
|
||
|
else if ((Explosion_Number == 3) && (count <= Explosion_Count))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Make Explosions Starting Timer 3\n");
|
||
|
|
||
|
count++;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random(3.0f, 5.0f);
|
||
|
Commands->Start_Timer((Commands->Find_Object(MPR_A03_HELI_EXLOSION_ZONE_ID)), timeDelay, MPR_A03_JDG_EXPLOSION_TIMER_3);
|
||
|
}
|
||
|
|
||
|
else if (count <= Explosion_Count)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Make Explosions Starting Timer 4\n");
|
||
|
|
||
|
count++;
|
||
|
|
||
|
float timeDelay = Commands->Get_Random(3.0f, 5.0f);
|
||
|
Commands->Start_Timer((Commands->Find_Object(MPR_A03_HELI_EXLOSION_ZONE_ID)), timeDelay, MPR_A03_JDG_EXPLOSION_TIMER_4);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject*obj, int Timer_ID)
|
||
|
{
|
||
|
if (Timer_ID == MPR_A03_JDG_EXPLOSION_TIMER_1)
|
||
|
{
|
||
|
float Xnot = Commands->Get_Random (186.20f, 190.21f);
|
||
|
float Ynot = Commands->Get_Random (31.0f, 35.0f);
|
||
|
float Znot = Commands->Get_Random (2.59f, 4.69f);
|
||
|
Vector3 Explosion_Location(Xnot, Ynot, Znot);
|
||
|
|
||
|
//DebugPrint("JDG, MPRA03, Timer Expired Explosion 1\n");
|
||
|
|
||
|
Commands->Create_Explosion ("Rocket Explosion", Explosion_Location, obj);
|
||
|
|
||
|
Make_Explosions ();
|
||
|
}
|
||
|
|
||
|
if (Timer_ID == MPR_A03_JDG_EXPLOSION_TIMER_2)
|
||
|
{
|
||
|
float Xnot = Commands->Get_Random (178.21f, 180.21f);
|
||
|
float Ynot = Commands->Get_Random (38.0f, 40.0f);
|
||
|
float Znot = Commands->Get_Random (2.69f, 4.69f);
|
||
|
Vector3 Explosion_Location(Xnot, Ynot, Znot);
|
||
|
|
||
|
//DebugPrint("JDG, MPRA03, Timer Expired Explosion 2\n");
|
||
|
|
||
|
Commands->Create_Explosion ("Rocket Explosion", Explosion_Location, obj);
|
||
|
|
||
|
Make_Explosions ();
|
||
|
}
|
||
|
|
||
|
if (Timer_ID == MPR_A03_JDG_EXPLOSION_TIMER_3)
|
||
|
{
|
||
|
float Xnot = Commands->Get_Random (183.21f, 185.21f);
|
||
|
float Ynot = Commands->Get_Random (46.0f, 49.0f);
|
||
|
float Znot = Commands->Get_Random (6.15f, 7.69f);
|
||
|
Vector3 Explosion_Location(Xnot, Ynot, Znot);
|
||
|
|
||
|
//DebugPrint("JDG, MPRA03, Timer Expired Explosion 3\n");
|
||
|
|
||
|
Commands->Create_Explosion ("Rocket Explosion", Explosion_Location, obj);
|
||
|
|
||
|
Make_Explosions ();
|
||
|
}
|
||
|
|
||
|
if (Timer_ID == MPR_A03_JDG_EXPLOSION_TIMER_4)
|
||
|
{
|
||
|
float Xnot = Commands->Get_Random (188.21f, 190.21f);
|
||
|
float Ynot = Commands->Get_Random (47.0f, 49.0f);
|
||
|
float Znot = Commands->Get_Random (8.06f, 10.69f);
|
||
|
Vector3 Explosion_Location(Xnot, Ynot, Znot);
|
||
|
|
||
|
//DebugPrint("JDG, MPRA03, Timer Expired Explosion 4\n");
|
||
|
|
||
|
Commands->Create_Explosion ("Rocket Explosion", Explosion_Location, obj);
|
||
|
|
||
|
Make_Explosions ();
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_Helicopter_Injured_NOD_Pilot
|
||
|
|
||
|
The following is the script for the injured pilot by the downed Apache.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_Helicopter_Injured_NOD_Pilot_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A03_PILOT_IDLE = 0,
|
||
|
MPR_A03_PILOT_STANDING_UP,
|
||
|
MPR_A03_PILOT_STAMMERING,
|
||
|
MPR_A03_PILOT_LOOKING_BACK,
|
||
|
MPR_A03_PILOT_ADJUSTING_KEVLAR,
|
||
|
MPR_A03_PILOT_ATTACKING,
|
||
|
|
||
|
} PILOTState;
|
||
|
|
||
|
PILOTState state;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Injured Pilot Created Okay\n");
|
||
|
|
||
|
MPR_A03_helicopter_injured_nod_pilot_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_601A", 1);
|
||
|
|
||
|
state = MPR_A03_PILOT_IDLE;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject*obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A03_TIMER_INJURED_PILOT_CRAWL_1_JDG) && (Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, Injured Pilot Timer Expired, Start Crawling\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_H11C", 0);
|
||
|
//"S_A_HUMAN.H_A_H11C" is animation for standing up
|
||
|
|
||
|
state = MPR_A03_PILOT_STANDING_UP;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp("S_A_HUMAN.H_A_H11C", name) == 0) && (Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)) && (state == MPR_A03_PILOT_STANDING_UP))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_611A", 0);
|
||
|
|
||
|
state = MPR_A03_PILOT_STAMMERING;
|
||
|
}
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_611A", name) == 0) && (Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)) && (state == MPR_A03_PILOT_STAMMERING))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J11C", 0);
|
||
|
|
||
|
state = MPR_A03_PILOT_LOOKING_BACK;
|
||
|
}
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_J11C", name) == 0) && (Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)) && (state == MPR_A03_PILOT_LOOKING_BACK))
|
||
|
{
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J22C", 0);
|
||
|
|
||
|
state = MPR_A03_PILOT_ADJUSTING_KEVLAR;
|
||
|
}
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_J22C", name) == 0) && (Commands->Find_Object(MPR_A03_helicopter_injured_nod_pilot_id_JDG)) && (state == MPR_A03_PILOT_ADJUSTING_KEVLAR))
|
||
|
{
|
||
|
Commands->Action_Movement_Set_Forward_Speed (obj, 0.5f);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Object (obj, (Commands->Get_The_Star()), 6.0f);
|
||
|
|
||
|
Commands->Action_Attack_Object (obj, (Commands->Get_The_Star()), 1.0f, 20.0f);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_BridgeScene_EnterZone
|
||
|
|
||
|
The following are the scripts involved in the bridge blow up scenario.
|
||
|
There are presently 3 scripts, 2 zones and 1 engineer.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_BridgeScene_EnterZone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, EnterZone, Created Okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
|
||
|
MPR_A03_bridgescene_enterzone_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Commands->Static_Anim_Phys_Goto_Frame ( MPR_A03_BRIDGESCENE_BRIDGE_ID_JDG, 0.0f, "BRIDGE_EXPLDA02.BRIDGE_EXPLDA02");
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, EnterZone, Havoc has entered Zone. Starting Delay timers on Bridge Team\n");
|
||
|
|
||
|
float timeDelay_3 = Commands->Get_Random (0.0f, 0.5f);
|
||
|
Commands->Start_Timer ((Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)), timeDelay_3, MPR_A03_TIMER_BRIDGESCENE_ENGINEER_HAVOC_IN_ZONE_DELAY_JDG);
|
||
|
|
||
|
float timeDelay_4 = 8.0f;
|
||
|
Commands->Start_Timer (obj, timeDelay_4, MPR_A03_TIMER_BRIDGESCENE_ENTER_ZONE_EXPLOSION_DELAY_JDG);
|
||
|
|
||
|
Havoc_in_this_Zone++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if (Timer_ID == MPR_A03_TIMER_BRIDGESCENE_ENTER_ZONE_EXPLOSION_DELAY_JDG)
|
||
|
{
|
||
|
Commands->Static_Anim_Phys_Goto_Last_Frame (MPR_A03_BRIDGESCENE_BRIDGE_ID_JDG, "BRIDGE_EXPLDA02.BRIDGE_EXPLDA02" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_BridgeScene_BlowUpZone
|
||
|
|
||
|
The following script is for a zone right next to the bridge that immediately blows the
|
||
|
bridge when entered. This is to prevent the player from reaching the other side before
|
||
|
the bridge blows.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_BridgeScene_BlowUpZone_JDG, "")
|
||
|
{
|
||
|
int Havoc_in_this_Zone;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, EnterZone, Created Okay\n");
|
||
|
|
||
|
Havoc_in_this_Zone = 0;
|
||
|
|
||
|
MPR_A03_bridgescene_blowupzone_id_JDG = Commands->Get_ID (obj);
|
||
|
}
|
||
|
|
||
|
void Entered (GameObject* obj, GameObject* Enterer)
|
||
|
{
|
||
|
if (Enterer == (Commands->Get_The_Star()) && (Havoc_in_this_Zone == 0))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, EnterZone, Havoc has entered Zone. Starting Delay timers on Bridge Team\n");
|
||
|
|
||
|
Commands->Static_Anim_Phys_Goto_Last_Frame (MPR_A03_BRIDGESCENE_BRIDGE_ID_JDG, "BRIDGE_EXPLDA02.BRIDGE_EXPLDA02" );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
MPR_A03_BridgeScene_Engineer
|
||
|
|
||
|
The following is for the engineer next to the bridge. He does a few animations then runs through the
|
||
|
tunnel and is deleted.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(MPR_A03_BridgeScene_Engineer_JDG, "")
|
||
|
{
|
||
|
typedef enum
|
||
|
{
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_IDLE = 0,
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_PLACING_BOMB,
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_WAVING,
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_INT_SPOT,
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_TUNNEL,
|
||
|
MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_FINAL_POSITION,
|
||
|
|
||
|
} ENGINEERState;
|
||
|
|
||
|
ENGINEERState state;
|
||
|
|
||
|
void Created(GameObject* obj)
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Created Okay\n");
|
||
|
|
||
|
MPR_A03_bridgescene_engineer_id_JDG = Commands->Get_ID (obj);
|
||
|
|
||
|
Commands->Action_Attack_Object( obj, (Commands->Get_The_Star()), 0, 0);
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_IDLE;
|
||
|
}
|
||
|
|
||
|
void Timer_Expired (GameObject* obj, int Timer_ID)
|
||
|
{
|
||
|
if ((Timer_ID == MPR_A03_TIMER_BRIDGESCENE_ENGINEER_HAVOC_IN_ZONE_DELAY_JDG) && (Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Havoc/EnterZone Timer Expired\n");
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J12C", 0);
|
||
|
//"S_A_HUMAN.H_A_J12C" is animation for tying your shoe
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_PLACING_BOMB;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Animation_Complete (GameObject* obj, const char* name)
|
||
|
{
|
||
|
if ((stricmp("S_A_HUMAN.H_A_J12C", name) == 0) && (Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)) && (state == MPR_A03_BRIDGESCENE_ENGINEER_PLACING_BOMB))
|
||
|
{
|
||
|
|
||
|
Commands->Set_Animation (obj, "S_A_HUMAN.H_A_J18C", 0);
|
||
|
//"S_A_HUMAN.H_A_J18C" is animation for waving
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_WAVING;
|
||
|
}
|
||
|
|
||
|
if ((stricmp("S_A_HUMAN.H_A_J18C", name) == 0) && (Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)) && (state == MPR_A03_BRIDGESCENE_ENGINEER_WAVING))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Finished waving\n");
|
||
|
|
||
|
Vector3 Engineers_Int_Position (234.26f, 202.66f, 3.92f);
|
||
|
Commands->Action_Attack_Location(obj, Engineers_Int_Position, 0, 0);
|
||
|
|
||
|
Commands->Action_Movement_Set_Forward_Speed(obj, 0.7f);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location(obj, Engineers_Int_Position, 0.05f);
|
||
|
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, start moving away\n");
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_INT_SPOT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Movement_Complete(GameObject* obj, MovementCompleteReason reason)
|
||
|
{
|
||
|
static const char* _reasons[] =
|
||
|
{
|
||
|
"Arrived",
|
||
|
"Bad Start",
|
||
|
"Bad Dest",
|
||
|
"No progress"
|
||
|
};
|
||
|
|
||
|
//DebugPrint("Movement_Complete Reason = %s\n", _reasons[reason]);
|
||
|
|
||
|
if ((Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)) && (state == MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_INT_SPOT))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Reached intermediate spot\n");
|
||
|
|
||
|
Vector3 Engineers_Tunnel_Position (154.90f, 242.68f, 0.39f);
|
||
|
Commands->Action_Attack_Location(obj, Engineers_Tunnel_Position, 0, 0);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location(obj, Engineers_Tunnel_Position, 0.05f);
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_TUNNEL;
|
||
|
|
||
|
}
|
||
|
|
||
|
if ((Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)) && (state == MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_TUNNEL))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Reached bridge location\n");
|
||
|
|
||
|
Vector3 Engineers_Final_Position (141.95f, 297.41f, 0.86f);
|
||
|
Commands->Action_Attack_Location(obj, Engineers_Final_Position, 0, 0);
|
||
|
|
||
|
Commands->Action_Movement_Goto_Location(obj, Engineers_Final_Position, 0.05f);
|
||
|
|
||
|
state = MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_FINAL_POSITION;
|
||
|
|
||
|
}
|
||
|
|
||
|
if ((Commands->Find_Object(MPR_A03_bridgescene_engineer_id_JDG)) && (state == MPR_A03_BRIDGESCENE_ENGINEER_MOVING_TO_FINAL_POSITION))
|
||
|
{
|
||
|
//DebugPrint("JDG, MPRA03, BridgeScene, Engineer, Destroying\n");
|
||
|
|
||
|
Commands->Destroy_Object( obj );
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif
|