This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Scripts/Test_PDS.cpp

1016 lines
25 KiB
C++
Raw Permalink Normal View History

/*
** 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 ;
}
};