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/Toolkit_Explosions.cpp

257 lines
7.8 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
* Toolkit_Explosions.cpp
*
* DESCRIPTION
* Designer Toolkit for Mission Construction - Explosions Subset
*
* PROGRAMMER
* Design Team
*
* VERSION INFO
* $Author: David_y $
* $Revision: 5 $
* $Modtime: 10/25/01 3:36p $
* $Archive: /Commando/Code/Scripts/Toolkit_Explosions.cpp $
*
******************************************************************************/
#include "toolkit.h"
/*
Editor Script - M00_Explosion_Create_RMV
This creates an explosion at a location.
Parameters:
Explosion_Name = The name of the explosion type to make.
Origin = The Vector3 location of the explosion.
*/
DECLARE_SCRIPT(M00_Explosion_Create_RMV, "Start_Now=0:int, Create_At_Obj=0:int, Receive_Type:int, Receive_Param_On=1:int, Explosion_Name:string, Origin:vector3, Debug_Mode=0:int")
{
Vector3 explosion_origin;
int custom_type;
int parameter;
bool debug_mode;
void Created(GameObject * obj)
{
debug_mode = (Get_Int_Parameter("Debug_Mode") == 1) ? true : false;
if (Get_Int_Parameter("Create_At_Obj"))
{
explosion_origin = Commands->Get_Position(obj);
}
else
{
explosion_origin = Get_Vector3_Parameter("Origin");
}
custom_type = Get_Int_Parameter("Receive_Type");
parameter = Get_Int_Parameter("Receive_Param_On");
if (Get_Int_Parameter("Start_Now"))
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_RMV ACTIVATED.\n"));
Commands->Create_Explosion(Get_Parameter("Explosion_Name"), explosion_origin, obj);
}
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_RMV received custom type %d, param %d.\n", type, param));
if ((type == custom_type) && (param == parameter))
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_RMV ACTIVATED.\n"));
Commands->Create_Explosion(Get_Parameter("Explosion_Name"), explosion_origin, obj);
}
}
};
/*
Editor Script - M00_Explosion_Create_At_Bone_RMV
This creates an explosion on a specific bone of an object.
Parameters:
Explosion_Name = The name of the explosion to create.
Object_ID = The ID of the object to create the explosion on.
Bone_Name = The bone name to create the explosion on.
*/
DECLARE_SCRIPT(M00_Explosion_Create_At_Bone_RMV, "Start_Now=0:int, Receive_Type:int, Receive_Param_On:int, Explosion_Name:string, Object_ID:int, Bone_Name:string, Debug_Mode=0:int")
{
int target_id;
int custom_type;
int parameter;
bool debug_mode;
void Created(GameObject * obj)
{
debug_mode = (Get_Int_Parameter("Debug_Mode") == 1) ? true : false;
custom_type = Get_Int_Parameter("Receive_Type");
parameter = Get_Int_Parameter("Receive_Param_On");
target_id = Get_Int_Parameter("Object_ID");
if (Get_Int_Parameter("Start_Now"))
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_At_Bone_RMV ACTIVATED.\n"));
if (Commands->Find_Object(target_id) != NULL)
Commands->Create_Explosion_At_Bone(Get_Parameter("Explosion_Name"), Commands->Find_Object(target_id), Get_Parameter("Bone_Name"), obj);
}
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_At_Bone_RMV received custom type %d, param %d.\n", type, param));
if ((type == custom_type) && (param == parameter))
{
SCRIPT_DEBUG_MESSAGE(("M00_Explosion_Create_At_Bone_RMV ACTIVATED.\n"));
if (Commands->Find_Object(target_id) != NULL)
Commands->Create_Explosion_At_Bone(Get_Parameter("Explosion_Name"), Commands->Find_Object(target_id), Get_Parameter("Bone_Name"), obj);
}
}
};
DECLARE_SCRIPT(M00_Create_Random_Explosion_DLS, "Explosion_Name:string, Delay_Min=0.0f:float, Delay_Max=4.0f:float, Loc_ID0=0:int, Loc_ID1=0:int, Loc_ID2=0:int, Loc_ID3=0:int, Loc_ID4=0:int, Loc_ID5=0:int, Loc_ID6=0:int, Loc_ID7=0:int, Loc_ID8=0:int, Loc_ID9=0:int")
{
bool active;
int random;
int last;
int loc_id[10];
enum{EXPLODE};
// Register variables to be Auto-Saved
// All variables must have a unique ID, less than 256, that never changes
REGISTER_VARIABLES()
{
SAVE_VARIABLE( active, 1 );
SAVE_VARIABLE( random, 2 );
SAVE_VARIABLE( last, 3 );
}
void Created(GameObject * obj)
{
loc_id[0] = Get_Int_Parameter("Loc_ID0");
loc_id[1] = Get_Int_Parameter("Loc_ID1");
loc_id[2] = Get_Int_Parameter("Loc_ID2");
loc_id[3] = Get_Int_Parameter("Loc_ID3");
loc_id[4] = Get_Int_Parameter("Loc_ID4");
loc_id[5] = Get_Int_Parameter("Loc_ID5");
loc_id[6] = Get_Int_Parameter("Loc_ID6");
loc_id[7] = Get_Int_Parameter("Loc_ID7");
loc_id[8] = Get_Int_Parameter("Loc_ID8");
loc_id[9] = Get_Int_Parameter("Loc_ID9");
active = false;
random = 0;
last = 0;
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
if(type == M00_CREATE_RANDOM_EXPLOSION && param == 1)
{
active = true;
float delay = Commands->Get_Random(Get_Float_Parameter("Delay_Min"), Get_Float_Parameter("Delay_Max"));
Commands->Start_Timer (obj, this, delay, EXPLODE);
}
if(type == M00_CREATE_RANDOM_EXPLOSION && param == 0)
{
active = false;
}
}
void Timer_Expired(GameObject* obj, int timer_id)
{
if(timer_id == EXPLODE && active)
{
while (random == last || loc_id[random] == 0)
{
random = Commands->Get_Random_Int(0, 9);
}
Commands->Create_Explosion(Get_Parameter("Explosion_Name"), Commands->Get_Position(Commands->Find_Object(loc_id[random])), obj);
last = random;
float delay = Commands->Get_Random(Get_Float_Parameter("Delay_Min"), Get_Float_Parameter("Delay_Max"));
Commands->Start_Timer (obj, this, delay, EXPLODE);
}
}
};
DECLARE_SCRIPT( M00_NukeStrike_Anim, "")
{
void Created(GameObject * obj)
{
Commands->Send_Custom_Event( obj, obj, 0, 1, 206/30 );
Commands->Send_Custom_Event( obj, obj, 0, 2, 250/30 );
Commands->Send_Custom_Event( obj, obj, 0, 3, 350/30 );
GameObject *Nuke;
Nuke = Commands->Create_Object( "Generic_Cinematic", Commands->Get_Position(obj) );
if ( Nuke )
{
Commands->Set_Model( Nuke, "XG_AG_Nuke" );
Commands->Attach_Script( Nuke, "M00_PlayAnimation_DestroyObject_DAY", "Nuke_Missle.Nuke_Missle");
Commands->Create_3D_Sound_At_Bone( "SFX.Nuclear_Strike_Buildup", Nuke, "ROOTTRANSFORM" );
}
}
void Custom(GameObject * obj, int type, int param, GameObject * sender)
{
if ( type == 1 )
{
GameObject *NukeCloud;
NukeCloud = Commands->Create_Object( "Generic_Cinematic", Commands->Get_Position(obj) );
if ( NukeCloud )
{
Commands->Set_Model( NukeCloud, "XG_AG_Nukecloud" );
Commands->Attach_Script( NukeCloud, "M00_PlayAnimation_DestroyObject_DAY", "Nuke_cloud.Nuke_cloud");
}
Commands->Shake_Camera( Commands->Get_Position(obj), 2.0f, 0.5f, 2.0f );
}
else if ( type == 2 )
{
Commands->Shake_Camera( Commands->Get_Position(obj), 2.0f, 1.0f, 3.0f );
}
else if ( type == 3 )
{
GameObject *NukeCloudTwo;
NukeCloudTwo = Commands->Create_Object( "Generic_Cinematic", Commands->Get_Position(obj) );
if ( NukeCloudTwo )
{
Commands->Set_Model( NukeCloudTwo, "XG_AG_NukeCloud" );
Commands->Attach_Script( NukeCloudTwo, "M00_PlayAnimation_DestroyObject_DAY", "XG_Nukecloud_02");
}
}
}
};