1016 lines
25 KiB
C++
1016 lines
25 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
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
*
|
||
|
* PROGRAMMER
|
||
|
* Patrick Smith
|
||
|
*
|
||
|
* VERSION INFO
|
||
|
* $Author: Byon_g $
|
||
|
* $Revision: 31 $
|
||
|
* $Modtime: 11/29/01 11:05a $
|
||
|
* $Archive: /Commando/Code/Scripts/Test_PDS.cpp $
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include "scripts.h"
|
||
|
#include "dprint.h"
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Generic_Test, "")
|
||
|
{
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 777) {
|
||
|
GameObject *star = Commands->Get_The_Star ();
|
||
|
if (star != NULL) {
|
||
|
Vector3 pos = Commands->Get_Position (star);
|
||
|
pos.Z = Commands->Get_Safe_Flight_Height (pos.X, pos.Y);
|
||
|
Commands->Set_Position (game_obj, pos);
|
||
|
}
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Modify_Attack, "WaypathID=:int")
|
||
|
{
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 777) {
|
||
|
|
||
|
Commands->Enable_Engine (game_obj, true);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Set_Movement (Vector3 (0, 0, 0), 1, 1);
|
||
|
params.WaypathID = Get_Int_Parameter (0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = false;
|
||
|
params.AttackCheckBlocked = false;
|
||
|
Commands->Action_Attack (game_obj, params);
|
||
|
|
||
|
//params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
//params.AttackCheckBlocked = false;
|
||
|
//Commands->Action_Attack( game_obj, params );
|
||
|
//Commands->Action_Goto( game_obj, params );
|
||
|
|
||
|
Commands->Start_Timer(game_obj, this, 4.0F, 888);
|
||
|
|
||
|
} else if (timer_id == 888) {
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Set_Movement (Vector3 (0, 0, 0), 1, 1);
|
||
|
params.WaypathID = Get_Int_Parameter (0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = true;
|
||
|
params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
params.AttackCheckBlocked = false;
|
||
|
|
||
|
Commands->Modify_Action (game_obj, 777, params);
|
||
|
|
||
|
Commands->Start_Timer(game_obj, this, 4.0F, 999);
|
||
|
|
||
|
} else if (timer_id == 999) {
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Set_Movement (Vector3 (0, 0, 0), 1, 1);
|
||
|
params.WaypathID = Get_Int_Parameter (0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = false;
|
||
|
params.AttackCheckBlocked = false;
|
||
|
//params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
|
||
|
Commands->Modify_Action (game_obj, 777, params);
|
||
|
|
||
|
Commands->Start_Timer(game_obj, this, 4.0F, 888);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Dock, "DockDestObjID=:int,DockEntranceObjID=:int")
|
||
|
{
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer (game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id != 777) {
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Lookup the objects which mark the destination (docked) position
|
||
|
// and the entrance to the docking bay
|
||
|
//
|
||
|
GameObject *dest_obj = Commands->Find_Object (Get_Int_Parameter (0));
|
||
|
GameObject *entrance_obj = Commands->Find_Object (Get_Int_Parameter (1));
|
||
|
if (dest_obj != NULL && entrance_obj != NULL) {
|
||
|
|
||
|
//
|
||
|
// Start the vehicle's engine
|
||
|
//
|
||
|
//Commands->Enable_Engine (game_obj, true);
|
||
|
|
||
|
//
|
||
|
// Lookup the positions of the two docking markers
|
||
|
//
|
||
|
Vector3 dest_pos = Commands->Get_Position (dest_obj);
|
||
|
Vector3 entrance_pos = Commands->Get_Position (entrance_obj);
|
||
|
|
||
|
//
|
||
|
// Dock the vehicle
|
||
|
//
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Dock_Vehicle (dest_pos, entrance_pos);
|
||
|
params.MoveSpeed = 1.0F;
|
||
|
Commands->Action_Dock (game_obj, params);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Conversation, "Conversation Name=:string,Soldier1_ID=0:int,Soldier2_ID=0:int,Soldier3_ID=0:int")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Action_Complete (GameObject * game_obj, int action_id, ActionCompleteReason complete_reason)
|
||
|
{
|
||
|
//
|
||
|
// Just for kicks, make the unit crouch
|
||
|
//
|
||
|
if (action_id == 778) {
|
||
|
Commands->Set_Animation (game_obj, "S_A_HUMAN.H_A_A0A0_L08", true);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Custom
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Custom (GameObject *game_obj, int event, int data, GameObject *sender)
|
||
|
{
|
||
|
if (event == CUSTOM_EVENT_CONVERSATION_BEGAN) {
|
||
|
int test = 0;
|
||
|
test ++;
|
||
|
} else if (event == CUSTOM_EVENT_CONVERSATION_REMARK_STARTED) {
|
||
|
int test = 0;
|
||
|
test ++;
|
||
|
} else if (event == CUSTOM_EVENT_CONVERSATION_REMARK_ENDED) {
|
||
|
int test = 0;
|
||
|
test ++;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id != 777) {
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
const char *conv_name = Get_Parameter (0);
|
||
|
|
||
|
//
|
||
|
// Create the conversation
|
||
|
//
|
||
|
int conv_id = Commands->Create_Conversation (conv_name);
|
||
|
if (conv_id != -1) {
|
||
|
|
||
|
int soldier1_id = Get_Int_Parameter (1);
|
||
|
int soldier2_id = Get_Int_Parameter (2);
|
||
|
int soldier3_id = Get_Int_Parameter (3);
|
||
|
|
||
|
//
|
||
|
// Have the participants join the conversation
|
||
|
//
|
||
|
Commands->Join_Conversation (game_obj, conv_id, true, true);
|
||
|
|
||
|
if (soldier1_id == -1) {
|
||
|
GameObject *soldier = Commands->Get_The_Star ();
|
||
|
if (soldier != NULL) {
|
||
|
Commands->Join_Conversation (soldier, conv_id, true, true);
|
||
|
}
|
||
|
} else if (soldier1_id != 0) {
|
||
|
GameObject *soldier = Commands->Find_Object (soldier1_id);
|
||
|
if (soldier != NULL) {
|
||
|
Commands->Join_Conversation (soldier, conv_id, true, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (soldier2_id != 0) {
|
||
|
GameObject *soldier = Commands->Find_Object (soldier2_id);
|
||
|
if (soldier != NULL) {
|
||
|
Commands->Join_Conversation (soldier, conv_id, true, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (soldier3_id != 0) {
|
||
|
GameObject *soldier = Commands->Find_Object (soldier3_id);
|
||
|
if (soldier != NULL) {
|
||
|
Commands->Join_Conversation (soldier, conv_id, true, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Begin the conversation
|
||
|
//
|
||
|
Commands->Start_Conversation (conv_id, 778);
|
||
|
Commands->Monitor_Conversation (game_obj, conv_id);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Get_In_Vehicle_Do_Waypath, "VehicleID=:int,WaypathID=:int,V3Test=1.3 44.543 0:vector3")
|
||
|
{
|
||
|
bool m_StartedWaypath;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject* game_obj)
|
||
|
{
|
||
|
//
|
||
|
// Find the vehicle we want to get into
|
||
|
//
|
||
|
m_StartedWaypath = false;
|
||
|
GameObject *dest_obj = Commands->Find_Object (Get_Int_Parameter (0));
|
||
|
if (dest_obj != NULL) {
|
||
|
|
||
|
//
|
||
|
// Instruct our game object to goto the driver's side of the destination vehicle
|
||
|
//
|
||
|
Vector3 pos = Commands->Get_Position (dest_obj);
|
||
|
// Commands->Action_Movement_Goto_Location (game_obj, pos, 1.0F);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( pos, 1, 1 );
|
||
|
Commands->Action_Goto( game_obj, params );
|
||
|
|
||
|
} else {
|
||
|
DebugPrint ("Error! Cannot find destination for PDS_Get_In_Vehicle_Do_Waypath.\n");
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Movement_Complete
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// void Movement_Complete (GameObject *game_obj, MovementCompleteReason /*reason*/)
|
||
|
void Action_Complete (GameObject * game_obj, int action_id, ActionCompleteReason complete_reason)
|
||
|
{
|
||
|
//
|
||
|
// Now tell the object to follow the waypath
|
||
|
//
|
||
|
if (m_StartedWaypath == false) {
|
||
|
// Commands->Action_Movement_Follow_Waypath (game_obj, Get_Int_Parameter(1), 0, 0, true);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( Vector3(0,0,0), 1, 1 );
|
||
|
params.WaypathID = Get_Int_Parameter(1);
|
||
|
Commands->Action_Goto( game_obj, params );
|
||
|
m_StartedWaypath = true;
|
||
|
}
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Goto_Player, "")
|
||
|
{
|
||
|
|
||
|
void Created(GameObject* game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id != 777) {
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
//params.ActionID = 777;
|
||
|
params.Set_Basic( this, 50, 777 );
|
||
|
params.Set_Movement( Commands->Get_The_Star (), 1, 2 );
|
||
|
params.MoveFollow = false;
|
||
|
Commands->Action_Goto( game_obj, params );
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
void Action_Complete (GameObject * game_obj, int action_id, ActionCompleteReason complete_reason)
|
||
|
{
|
||
|
if (action_id == 777) {
|
||
|
int test = 0;
|
||
|
test ++;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Goto_Loc, "ObjDestID=:int")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject* game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id != 777) {
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Find the destination 'object'
|
||
|
//
|
||
|
GameObject* dest_obj = Commands->Find_Object(Get_Int_Parameter(0));
|
||
|
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);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( pos, 0.5F, 3 );
|
||
|
Commands->Action_Goto( game_obj, params );
|
||
|
} else {
|
||
|
DebugPrint("Error! Cannot find destination for PDS_Test_Goto_Loc.\n");
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Follow_Player, "")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
|
||
|
Commands->Start_Timer(game_obj, this, 3.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
void Poked( GameObject * obj, GameObject * poker )
|
||
|
{
|
||
|
Commands->Grant_Key (obj, 1, true);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
Commands->Innate_Disable (game_obj);
|
||
|
// Commands->Action_Movement_Follow_Object (game_obj, Commands->Get_The_Star (), 2.0F);
|
||
|
/*ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( Commands->Get_The_Star (), 1, 15 );
|
||
|
//params.Set_Attack( Commands->Get_The_Star (), 100, 15, true );
|
||
|
//params.Set_Movement( Commands->Get_The_Star (), 1, 15 );
|
||
|
params.MoveFollow = true;
|
||
|
Commands->Action_Attack( game_obj, params );*/
|
||
|
|
||
|
ActionParamsStruct params2;
|
||
|
params2.Set_Basic( this, 50, 0 );
|
||
|
params2.Set_Movement( Commands->Get_The_Star (), 1, 5 );
|
||
|
params2.MoveFollow = true;
|
||
|
Commands->Action_Goto( game_obj, params2 );
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Follow_Waypath, "WaypathID=:int,WaypointStartID=:int,WaypointEndID=:int")
|
||
|
{
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Grant_Key (game_obj, 0);
|
||
|
Commands->Grant_Key (game_obj, 1);
|
||
|
Commands->Grant_Key (game_obj, 2);
|
||
|
Commands->Grant_Key (game_obj, 3);
|
||
|
Commands->Grant_Key (game_obj, 4);
|
||
|
Commands->Grant_Key (game_obj, 5);
|
||
|
Commands->Grant_Key (game_obj, 6);
|
||
|
Commands->Grant_Key (game_obj, 7);
|
||
|
|
||
|
Commands->Enable_Engine (game_obj, true);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 100, 777 );
|
||
|
params.Set_Movement( Vector3(0,0,0), 1, 5 );
|
||
|
params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
|
||
|
params.WaypathID = Get_Int_Parameter(0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = false;
|
||
|
params.AttackCheckBlocked = false;
|
||
|
|
||
|
Commands->Action_Attack( game_obj, params );
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
// Commands->Action_Movement_Follow_Waypath (game_obj, Get_Int_Parameter(0), Get_Int_Parameter(1), Get_Int_Parameter(2), true);
|
||
|
|
||
|
if (timer_id == 777) {
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Set_Movement (Vector3 (0, 0, 0), 1, 1);
|
||
|
params.WaypathID = Get_Int_Parameter (0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = false;
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
|
||
|
Commands->Modify_Action (game_obj, 777, params);
|
||
|
|
||
|
//Commands->Action_Goto( game_obj, params );
|
||
|
return ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Damaged( GameObject * game_obj, GameObject * damager, float amount )
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 100, 777);
|
||
|
params.Set_Movement (Vector3 (0, 0, 0), 1, 1);
|
||
|
params.WaypathID = Get_Int_Parameter (0);
|
||
|
params.WaypathSplined = true;
|
||
|
params.AttackActive = true;
|
||
|
params.AttackCheckBlocked = false;
|
||
|
params.Set_Attack (Commands->Get_The_Star (), 100, 0.5F, true);
|
||
|
|
||
|
Commands->Modify_Action (game_obj, 777, params);
|
||
|
|
||
|
// attack for a while, then go back to following the waypath
|
||
|
Commands->Start_Timer(game_obj, this, 5.0F, 777);
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Harvester, "TiberiumID=:int,DriveToID=:int,EntranceID=:int,DockID=:int")
|
||
|
{
|
||
|
int m_State;
|
||
|
GameObject * m_GameObj;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// State
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
enum
|
||
|
{
|
||
|
DRIVE_TO_TIBERIUM = 0,
|
||
|
HARVEST_TIBERIUM,
|
||
|
DRIVE_TO_REFINERY,
|
||
|
DOCK_HARVESTER_STEP1,
|
||
|
DOCK_HARVESTER_STEP2,
|
||
|
UNLOAD_TIBERIUM,
|
||
|
MAX_STATE
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
//
|
||
|
// Initialize variables
|
||
|
//
|
||
|
m_State = DRIVE_TO_TIBERIUM;
|
||
|
m_GameObj = game_obj;
|
||
|
|
||
|
//
|
||
|
// Process state
|
||
|
//
|
||
|
Think ();
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 777) {
|
||
|
Next_State ();
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Movement_Complete
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// void Movement_Complete (GameObject *obj, MovementCompleteReason reason)
|
||
|
void Action_Complete (GameObject * game_obj, int action_id, ActionCompleteReason complete_reason)
|
||
|
{
|
||
|
Next_State ();
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Next_State
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Next_State (void)
|
||
|
{
|
||
|
//
|
||
|
// Move on to the next state
|
||
|
//
|
||
|
m_State ++;
|
||
|
if (m_State == MAX_STATE) {
|
||
|
m_State = DRIVE_TO_TIBERIUM;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Process the new state
|
||
|
//
|
||
|
Think ();
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Think
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Think (void)
|
||
|
{
|
||
|
switch (m_State)
|
||
|
{
|
||
|
case DRIVE_TO_TIBERIUM:
|
||
|
Drive_To_Obj (Get_Int_Parameter (0), false);
|
||
|
break;
|
||
|
|
||
|
case HARVEST_TIBERIUM:
|
||
|
Commands->Start_Timer (m_GameObj, this, Commands->Get_Random (3.0F, 6.0F), 777);
|
||
|
break;
|
||
|
|
||
|
case DRIVE_TO_REFINERY:
|
||
|
Drive_To_Obj (Get_Int_Parameter (1), false);
|
||
|
break;
|
||
|
|
||
|
case DOCK_HARVESTER_STEP1:
|
||
|
Drive_To_Obj (Get_Int_Parameter (2), true);
|
||
|
break;
|
||
|
|
||
|
case DOCK_HARVESTER_STEP2:
|
||
|
Drive_To_Obj (Get_Int_Parameter (3), true);
|
||
|
break;
|
||
|
|
||
|
case UNLOAD_TIBERIUM:
|
||
|
Commands->Start_Timer (m_GameObj, this, Commands->Get_Random (2.0F, 4.0F), 777);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Drive_To_Obj
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Drive_To_Obj (int obj_id, bool force_backup)
|
||
|
{
|
||
|
//
|
||
|
// Find the destination object
|
||
|
//
|
||
|
GameObject* dest_obj = Commands->Find_Object (obj_id);
|
||
|
if (dest_obj != NULL) {
|
||
|
|
||
|
//
|
||
|
// Instruct our game object to goto the location of the destination object
|
||
|
//
|
||
|
Vector3 pos = Commands->Get_Position (dest_obj);
|
||
|
|
||
|
if (force_backup == false) {
|
||
|
// Commands->Action_Movement_Goto_Location (m_GameObj, pos, 1.0F);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( pos, 1, 1 );
|
||
|
Commands->Action_Goto( m_GameObj, params );
|
||
|
} else {
|
||
|
// Commands->Action_Movement_Backup_Goto_Location (m_GameObj, pos, 1.0F);
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic( this, 50, 0 );
|
||
|
params.Set_Movement( pos, 1, 1 );
|
||
|
params.MoveBackup = true;
|
||
|
Commands->Action_Goto( m_GameObj, params );
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
DebugPrint("Error! Cannot find destination for PDS_Test_Harvester.\n");
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Constants
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
enum
|
||
|
{
|
||
|
INVENTORY_EMPTY = 0,
|
||
|
INVENTORY_MEDKIT,
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
CUSTOM_HAS_MEDKIT = 0,
|
||
|
CUSTOM_GOT_OBJECT,
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Inventory, "")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Member data
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
INVENTORY_MAX = 4
|
||
|
};
|
||
|
|
||
|
int Inventory[INVENTORY_MAX];
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
//
|
||
|
// Clear the inventory
|
||
|
//
|
||
|
for (int index = 0; index < INVENTORY_MAX; index ++) {
|
||
|
Inventory[index] = INVENTORY_MEDKIT;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Custom
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Custom (GameObject *game_obj, int event, int data, GameObject *sender)
|
||
|
{
|
||
|
if (event == CUSTOM_HAS_MEDKIT) {
|
||
|
int *retval = (int *)data;
|
||
|
if (retval != NULL) {
|
||
|
(*retval) = 0;
|
||
|
|
||
|
//
|
||
|
// Check all the inventory slots for the medkit
|
||
|
//
|
||
|
for (int index = 0; index < INVENTORY_MAX; index ++) {
|
||
|
if (Inventory[index] == INVENTORY_MEDKIT) {
|
||
|
(*retval) = 1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} else if (event == CUSTOM_GOT_OBJECT) {
|
||
|
|
||
|
//
|
||
|
// Find an empty slot in the inventory and stick this object into it
|
||
|
//
|
||
|
for (int index = 0; index < INVENTORY_MAX; index ++) {
|
||
|
if (Inventory[index] == INVENTORY_EMPTY) {
|
||
|
Inventory[index] = data;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Bubba, "")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Member data
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
GameObject * GameObj;
|
||
|
int State;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Constants
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
enum
|
||
|
{
|
||
|
TIMER_GROAN = 444,
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
STATE_DYING = 0,
|
||
|
STATE_FOLLOWING,
|
||
|
STATE_CRINGING
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Clear_Map_Cell_By_Pos (Commands->Get_Position (game_obj));
|
||
|
Commands->Clear_Map_Cell (0, 0);
|
||
|
Commands->Clear_Map_Cell (10, 10);
|
||
|
Commands->Clear_Map_Cell (19, 19);
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Controller, "")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
Commands->Start_Timer (game_obj, this, 2.0F, 777);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == 777) {
|
||
|
GameObject *the_player = Commands->Get_The_Star ();
|
||
|
if (the_player != NULL) {
|
||
|
Commands->Attach_Script (the_player, "PDS_Test_Inventory", "");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Gunboat, "")
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Member Data
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
GameObject *GameObj;
|
||
|
int State;
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Constants
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
enum
|
||
|
{
|
||
|
TIMER_ATTACK = 777,
|
||
|
};
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
STATE_AT_BEACHHEAD = 0,
|
||
|
STATE_AT_INLET,
|
||
|
STATE_FIGHTING_BIG_GUN,
|
||
|
STATE_IN_TRANSIT
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Created
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Created (GameObject *game_obj)
|
||
|
{
|
||
|
GameObj = game_obj;
|
||
|
State = STATE_AT_BEACHHEAD;
|
||
|
|
||
|
Move_To_Next_Location ();
|
||
|
//State = STATE_IN_TRANSIT;
|
||
|
|
||
|
Commands->Enable_Engine (GameObj, true);
|
||
|
Commands->Disable_All_Collisions (GameObj);
|
||
|
Start_Attack ();
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Start_Attack
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Start_Attack (void)
|
||
|
{
|
||
|
if (State != STATE_IN_TRANSIT) {
|
||
|
//Commands->Start_Timer (GameObj, this, Commands->Get_Random (10.0F, 12.0F), TIMER_ATTACK);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Move_To_Next_Location
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Move_To_Next_Location (void)
|
||
|
{
|
||
|
int waypath_id = 0;
|
||
|
|
||
|
switch (State)
|
||
|
{
|
||
|
case STATE_AT_BEACHHEAD:
|
||
|
waypath_id = 100050;
|
||
|
break;
|
||
|
|
||
|
case STATE_AT_INLET:
|
||
|
waypath_id = 0;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (waypath_id != 0) {
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.WaypathID = waypath_id;
|
||
|
params.WaypointStartID = 0;
|
||
|
params.WaypointEndID = 0;
|
||
|
params.WaypathSplined = true;
|
||
|
Commands->Action_Goto (GameObj, params);
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Timer_Expired
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Timer_Expired (GameObject *game_obj, int timer_id)
|
||
|
{
|
||
|
if (timer_id == TIMER_ATTACK) {
|
||
|
GameObject *the_player = Commands->Get_The_Star ();
|
||
|
if (the_player != NULL) {
|
||
|
|
||
|
Vector3 pos = Commands->Get_Position (the_player);
|
||
|
//pos.X += Commands->Get_Random (-1.0F, 1.0F) * Commands->Get_Random (6.0F, 10.0F);
|
||
|
//pos.Y += Commands->Get_Random (-1.0F, 1.0F) * Commands->Get_Random (6.0F, 10.0F);
|
||
|
//pos.Z += Commands->Get_Random (-1.0F, 1.0F) * Commands->Get_Random (6.0F, 10.0F);
|
||
|
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic (this, 50, 0);
|
||
|
params.Set_Attack (pos, 200, 0, true);
|
||
|
Commands->Action_Attack (GameObj, params);
|
||
|
|
||
|
Start_Attack ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
DECLARE_SCRIPT(PDS_Test_Sound, "")
|
||
|
{
|
||
|
int SoundID;
|
||
|
bool IsPlaying;
|
||
|
|
||
|
void Created (GameObject* game_obj)
|
||
|
{
|
||
|
IsPlaying = true;
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Poked
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Poked (GameObject * obj, GameObject * poker)
|
||
|
{
|
||
|
if (IsPlaying) {
|
||
|
Commands->Stop_Sound (1700002, false);
|
||
|
IsPlaying = false;
|
||
|
} else {
|
||
|
Commands->Start_Sound (1700002);
|
||
|
IsPlaying = true;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Custom
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
void Custom (GameObject *game_obj, int event, int data, GameObject *sender)
|
||
|
{
|
||
|
if (event == CUSTOM_EVENT_SOUND_ENDED && data == SoundID) {
|
||
|
int test = 0;
|
||
|
test ++;
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
};
|