288 lines
9.8 KiB
C++
288 lines
9.8 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
|
||
|
* Toolkit_Animations.cpp
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
* Designer Toolkit for Mission Construction - Animations Subset
|
||
|
*
|
||
|
* PROGRAMMER
|
||
|
* Design Team
|
||
|
*
|
||
|
* VERSION INFO
|
||
|
* $Author: Ryan_v $
|
||
|
* $Revision: 4 $
|
||
|
* $Modtime: 10/06/00 4:18p $
|
||
|
* $Archive: /Commando/Code/Scripts/Toolkit_Animations.cpp $
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include "toolkit.h"
|
||
|
|
||
|
/*
|
||
|
Function - M00_Controller_Animation_RMV
|
||
|
|
||
|
This function handles any animation calls.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
GameObject * obj = The object the animation is being called upon.
|
||
|
GameObjObserverClass * script = this
|
||
|
const char * animation_name = The name of the animation.
|
||
|
bool loop = Whether the animation should loop or not.
|
||
|
int priority = The Action Priority of this animation.
|
||
|
int action_id = The Action ID.
|
||
|
int drop_frame = The frame at which an item should be dropped.
|
||
|
const char * drop_object = The object to be dropped.
|
||
|
const char * drop_bone = The bone from which the object is dropped.
|
||
|
*/
|
||
|
|
||
|
void M00_Controller_Animation_RMV (GameObject * obj, GameObjObserverClass * script, const char * animation_name, bool loop, int priority, int action_id, int drop_frame, const char * drop_object, const char * drop_bone)
|
||
|
{
|
||
|
ActionParamsStruct params;
|
||
|
params.Set_Basic(script, priority, action_id);
|
||
|
params.Set_Animation(animation_name, loop);
|
||
|
Commands->Action_Play_Animation(obj, params);
|
||
|
if (drop_frame != 0)
|
||
|
{
|
||
|
if (drop_object != NULL)
|
||
|
{
|
||
|
if (drop_bone != NULL)
|
||
|
{
|
||
|
Commands->Send_Custom_Event(obj, obj, M00_CUSTOM_ANIMATION_DROP_OBJECT, 0, drop_frame/30);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Editor Script - M00_Animation_Play_On_Activation_RMV
|
||
|
|
||
|
This script plays an animation when the object it is attached to receives a custom.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Animation = The animation to play.
|
||
|
Loop = Whether the animation should loop or not. 1 for looping. 0 for not.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M00_Animation_Play_RMV, "Start_Now=0:int, Receive_Type:int, Receive_Param_On=1:int, Receive_Param_Off=0:int, Action_Priority:int, Action_ID:int, Animation:string, Loop=0:int, Debug_Mode=0:int")
|
||
|
{
|
||
|
int priority, action_id;
|
||
|
bool debug_mode;
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
priority = Get_Int_Parameter("Action_Priority");
|
||
|
action_id = Get_Int_Parameter("Action_ID");
|
||
|
debug_mode = (Get_Int_Parameter("Debug_Mode") == 1) ? true : false;
|
||
|
if (Get_Int_Parameter("Start_Now"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_RMV ACTIVATED.\n"));
|
||
|
Do_Animation(obj);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_RMV received custom type %d, param %d.\n", type, param));
|
||
|
if (type == Get_Int_Parameter("Receive_Type"))
|
||
|
{
|
||
|
if (param == Get_Int_Parameter("Receive_Param_On"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_RMV ACTIVATED.\n"));
|
||
|
Do_Animation(obj);
|
||
|
}
|
||
|
if (param == Get_Int_Parameter("Receive_Param_Off"))
|
||
|
{
|
||
|
Commands->Action_Reset(obj, (priority + 1));
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_RMV DEACTIVATED.\n"));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Do_Animation(GameObject* obj)
|
||
|
{
|
||
|
const char *anim = Get_Parameter("Animation");
|
||
|
int loop_int = Get_Int_Parameter("Loop");
|
||
|
bool loop = (loop_int == 1) ? true : false;
|
||
|
M00_Controller_Animation_RMV (obj, this, anim, loop, priority, action_id, 0, 0, 0);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Editor Script - M00_Animation_Play_Drop_Object_RMV
|
||
|
|
||
|
This script plays an animation when the object it is attached to receives a custom.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Animation = The animation to play.
|
||
|
Drop_Frame = The frame at which an object should drop.
|
||
|
Drop_Object = The object to drop.
|
||
|
Drop_Bone = The bone from which to drop the object.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M00_Animation_Play_Drop_Object_RMV, "Start_Now=0:int, Receive_Type:int, Receive_Param_On=1:int, Receive_Param_Off=1:int, Action_Priority:int, Action_ID:int, Animation:string, Drop_Frame:int, Drop_Object:string, Drop_Bone:string, Debug_Mode=0:int")
|
||
|
{
|
||
|
int priority, action_id;
|
||
|
bool debug_mode;
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
priority = Get_Int_Parameter("Action_Priority");
|
||
|
action_id = Get_Int_Parameter("Action_ID");
|
||
|
debug_mode = (Get_Int_Parameter("Debug_Mode") == 1) ? true : false;
|
||
|
|
||
|
if (Get_Int_Parameter("Start_Now"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_RMV ACTIVATED.\n"));
|
||
|
const char *anim = Get_Parameter("Animation");
|
||
|
int frame = Get_Int_Parameter("Drop_Frame");
|
||
|
const char *object = Get_Parameter("Drop_Object");
|
||
|
const char *bone = Get_Parameter("Drop_Bone");
|
||
|
|
||
|
M00_Controller_Animation_RMV (obj, this, anim, 0, priority, action_id, frame, object, bone);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
const char *anim = Get_Parameter("Animation");
|
||
|
int frame = Get_Int_Parameter("Drop_Frame");
|
||
|
const char *object = Get_Parameter("Drop_Object");
|
||
|
const char *bone = Get_Parameter("Drop_Bone");
|
||
|
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_RMV received custom type %d, param %d.\n", type, param));
|
||
|
if (type == Get_Int_Parameter("Receive_Type"))
|
||
|
{
|
||
|
if (param == Get_Int_Parameter("Receive_Param_On"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_RMV ACTIVATED.\n"));
|
||
|
M00_Controller_Animation_RMV (obj, this, anim, 0, priority, action_id, frame, object, bone);
|
||
|
}
|
||
|
if (param == Get_Int_Parameter("Receive_Param_Off"))
|
||
|
{
|
||
|
Commands->Action_Reset(obj, (priority + 1));
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_RMV DEACTIVATED.\n"));
|
||
|
}
|
||
|
}
|
||
|
if ((type == M00_CUSTOM_ANIMATION_DROP_OBJECT) && (param == 0))
|
||
|
{
|
||
|
Commands->Create_Object_At_Bone(obj, object, bone);
|
||
|
SCRIPT_DEBUG_MESSAGE(("Object %s created by M00_Animation_Play_Drop_Object_RMV.\n", object));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Editor Script - M00_Animation_Drop_Object_Attach_Script_RMV
|
||
|
|
||
|
This script plays an animation when the object it is attached to receives a custom, drops
|
||
|
a new object at a specified frame of the animation, and then attaches a script to the
|
||
|
new object.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
Animation = The animation to play.
|
||
|
Drop_Frame = The frame at which to drop the object.
|
||
|
Drop_Object = The object to drop.
|
||
|
Drop_Bone = The bone from which the object is dropped.
|
||
|
Script_Name = The name of the script to attach.
|
||
|
Script_Params = The parameters for the attached script.
|
||
|
*/
|
||
|
|
||
|
DECLARE_SCRIPT(M00_Animation_Play_Drop_Object_Attach_Script_RMV, "Start_Now=0:int, Receive_Type:int, Receive_Param_On=1:int, Receive_Param_Off=0:int, Action_Priority:int, Action_ID:int, Animation:string, Drop_Frame:int, Drop_Object:string, Drop_Bone:string, Script_Name:string, Script_Params:string, Debug_Mode=0:int")
|
||
|
{
|
||
|
int priority, action_id;
|
||
|
bool debug_mode;
|
||
|
|
||
|
void Created(GameObject * obj)
|
||
|
{
|
||
|
priority = Get_Int_Parameter("Action_Priority");
|
||
|
action_id = Get_Int_Parameter("Action_ID");
|
||
|
debug_mode = (Get_Int_Parameter("Debug_Mode") == 1) ? true : false;
|
||
|
|
||
|
if (Get_Int_Parameter("Start_Now"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_Attach_Script_RMV ACTIVATED.\n"));
|
||
|
|
||
|
const char *anim = Get_Parameter("Animation");
|
||
|
int frame = Get_Int_Parameter("Drop_Frame");
|
||
|
const char *object = Get_Parameter("Drop_Object");
|
||
|
const char *bone = Get_Parameter("Drop_Bone");
|
||
|
|
||
|
M00_Controller_Animation_RMV (obj, this, anim, 0, priority, action_id, frame, object, bone);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Custom(GameObject * obj, int type, int param, GameObject * sender)
|
||
|
{
|
||
|
const char *anim = Get_Parameter("Animation");
|
||
|
int frame = Get_Int_Parameter("Drop_Frame");
|
||
|
const char *object = Get_Parameter("Drop_Object");
|
||
|
const char *bone = Get_Parameter("Drop_Bone");
|
||
|
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_Attach_Script_RMV received custom type %d, param %d.\n", type, param));
|
||
|
if (type == Get_Int_Parameter("Receive_Type"))
|
||
|
{
|
||
|
if (param == Get_Int_Parameter("Receive_Param_On"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_Attach_Script_RMV ACTIVATED.\n"));
|
||
|
M00_Controller_Animation_RMV (obj, this, anim, 0, priority, action_id, frame, object, bone);
|
||
|
}
|
||
|
if (param == Get_Int_Parameter("Receive_Param_Off"))
|
||
|
{
|
||
|
SCRIPT_DEBUG_MESSAGE(("M00_Animation_Play_Drop_Object_Attach_Script_RMV DEACTIVATED.\n"));
|
||
|
Commands->Action_Reset(obj, (priority + 1));
|
||
|
}
|
||
|
}
|
||
|
if ((type == M00_CUSTOM_ANIMATION_DROP_OBJECT) && (param == 0))
|
||
|
{
|
||
|
GameObject *new_object = Commands->Create_Object_At_Bone(obj, object, bone);
|
||
|
SCRIPT_DEBUG_MESSAGE(("Object %s created by M00_Animation_Play_Drop_Object_Attach_Script_RMV.\n", object));
|
||
|
|
||
|
const char *script = Get_Parameter("Script_Name");
|
||
|
const char *params = Get_Parameter("Script_Params");
|
||
|
char fixed_params[255];
|
||
|
Fix_Params(params, fixed_params);
|
||
|
|
||
|
Commands->Attach_Script(new_object, script, fixed_params);
|
||
|
SCRIPT_DEBUG_MESSAGE(("Script %s attached to new object by M00_Animation_Play_Drop_Object_Attach_Script_RMV.", script));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Fix_Params(const char *input, char * output)
|
||
|
{
|
||
|
// copy string, converting | to ,
|
||
|
while ( *input != 0 ) {
|
||
|
if ( *input == '|' ) {
|
||
|
*output++ = ',';
|
||
|
input++;
|
||
|
} else {
|
||
|
*output++ = *input++;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
*output = 0; // null terminate
|
||
|
}
|
||
|
};
|