/* ** 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 . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/Combat/scriptcommands.h $* * * * $Author:: Patrick $* * * * $Modtime:: 1/09/02 12:09p $* * * * $Revision:: 211 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef SCRIPTCOMMANDS_H #define SCRIPTCOMMANDS_H #ifndef VECTOR3_H #include "vector3.h" #endif #ifndef COMBATSOUND_H #include "combatsound.h" #endif #ifndef ACTIONPARAMS_H #include "actionparams.h" #endif /* ** DLL import/export macros */ #ifdef BUILDING_DLL #define SCRIPT_DLL_COMMAND _declspec(dllimport) #else #define SCRIPT_DLL_COMMAND extern "C" _declspec(dllexport) #endif /* ** Types */ class ScriptableGameObj; typedef ScriptableGameObj GameObject; class AudibleSoundClass; typedef AudibleSoundClass Sound2D; class Sound3DClass; typedef Sound3DClass Sound3D; class ScriptClass; class ScriptSaver; class ScriptLoader; /* ** Script Commands */ /* ** MISC Script ENUMS */ enum { OBJECTIVE_TYPE_PRIMARY = 1, OBJECTIVE_TYPE_SECONDARY, OBJECTIVE_TYPE_TERTIARY, OBJECTIVE_STATUS_PENDING = 0, OBJECTIVE_STATUS_ACCOMPLISHED, OBJECTIVE_STATUS_FAILED, OBJECTIVE_STATUS_HIDDEN, RADAR_BLIP_SHAPE_NONE = 0, RADAR_BLIP_SHAPE_HUMAN, RADAR_BLIP_SHAPE_VEHICLE, RADAR_BLIP_SHAPE_STATIONARY, RADAR_BLIP_SHAPE_OBJECTIVE, RADAR_BLIP_COLOR_NOD = 0, RADAR_BLIP_COLOR_GDI, RADAR_BLIP_COLOR_NEUTRAL, RADAR_BLIP_COLOR_MUTANT, RADAR_BLIP_COLOR_RENEGADE, RADAR_BLIP_COLOR_PRIMARY_OBJECTIVE, RADAR_BLIP_COLOR_SECONDARY_OBJECTIVE, RADAR_BLIP_COLOR_TERTIARY_OBJECTIVE, SCRIPT_PLAYERTYPE_SPECTATOR = -4, // -4 SCRIPT_PLAYERTYPE_MUTANT, // -3 SCRIPT_PLAYERTYPE_NEUTRAL, // -2 SCRIPT_PLAYERTYPE_RENEGADE, // -1 SCRIPT_PLAYERTYPE_NOD, // 0 SCRIPT_PLAYERTYPE_GDI, // 1 }; /* ** Script Commands List */ #define SCRIPT_COMMANDS_VERSION 174 typedef struct { unsigned int Size; unsigned int Version; // Debug messages void (* Debug_Message )( char *format, ... ); // Action Commands void ( * Action_Reset )( GameObject * obj, float priority ); void ( * Action_Goto )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Attack )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Play_Animation )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Enter_Exit )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Face_Location )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Dock )( GameObject * obj, const ActionParamsStruct & params ); void ( * Action_Follow_Input )( GameObject * obj, const ActionParamsStruct & params ); void ( * Modify_Action )( GameObject * obj, int action_id, const ActionParamsStruct & params, bool modify_move = true, bool modify_attack = true ); // Action information queries int ( * Get_Action_ID )( GameObject * obj ); bool ( * Get_Action_Params )( GameObject * obj, ActionParamsStruct & params ); bool ( * Is_Performing_Pathfind_Action )( GameObject * obj ); // Physical control void ( * Set_Position )( GameObject * obj, const Vector3 & position ); Vector3 ( * Get_Position )( GameObject * obj ); Vector3 ( * Get_Bone_Position )( GameObject * obj, const char * bone_name ); float ( * Get_Facing )( GameObject * obj ); void ( * Set_Facing )( GameObject * obj, float degrees ); // Collision Control void ( * Disable_All_Collisions )( GameObject * obj ); void ( * Disable_Physical_Collisions )( GameObject * obj ); void ( * Enable_Collisions )( GameObject * obj ); // Object Management void ( * Destroy_Object )( GameObject * obj ); GameObject * ( * Find_Object )( int obj_id ); GameObject * ( * Create_Object )( const char * type_name, const Vector3 & position ); GameObject * ( * Create_Object_At_Bone )( GameObject * host_obj, const char * new_obj_type_name, const char * bone_name ); int ( * Get_ID )( GameObject * obj ); int ( * Get_Preset_ID )( GameObject * obj ); const char * ( * Get_Preset_Name )( GameObject * obj ); void (*Attach_Script)(GameObject* object, const char* scriptName, const char* scriptParams); void (*Add_To_Dirty_Cull_List)(GameObject* object); // Timers void ( * Start_Timer )( GameObject * obj, ScriptClass * script, float duration, int timer_id ); // Weapons void ( * Trigger_Weapon )( GameObject * obj, bool trigger, const Vector3 & target, bool primary = true ); void ( * Select_Weapon )( GameObject * obj, const char * weapon_name ); // Custom Script void ( * Send_Custom_Event )( GameObject * from, GameObject * to, int type = 0, int param = 0, float delay = 0 ); void ( * Send_Damaged_Event )( GameObject * object, GameObject * damager ); // Random Numbers float ( * Get_Random )( float min, float max ); int ( * Get_Random_Int )( int min, int max ); // Get a random number between min and max-1, INCLUSIVE // Random Selection GameObject * ( * Find_Random_Simple_Object )( const char *preset_name ); // Object Display void ( * Set_Model )( GameObject * obj, const char * model_name ); void ( * Set_Animation )( GameObject * obj, const char * anim_name, bool looping, const char * sub_obj_name = NULL, float start_frame = 0.0F, float end_frame = -1.0F, bool is_blended = false ); void ( * Set_Animation_Frame )( GameObject * obj, const char * anim_name, int frame ); // Sounds // Note: Each sound creation function returns the ID of the new sound (0 on error) int ( * Create_Sound )( const char * sound_preset_name, const Vector3 & position, GameObject * creator ); int ( * Create_2D_Sound )( const char * sound_preset_name ); int ( * Create_2D_WAV_Sound )( const char * wav_filename ); int ( * Create_3D_WAV_Sound_At_Bone )( const char * wav_filename, GameObject * obj, const char * bone_name ); int ( * Create_3D_Sound_At_Bone )( const char * sound_preset_name, GameObject * obj, const char * bone_name ); int ( * Create_Logical_Sound )( GameObject * creator, int type, const Vector3 & position, float radius ); void ( * Start_Sound )( int sound_id ); void ( * Stop_Sound )( int sound_id, bool destroy_sound = true ); void ( * Monitor_Sound )( GameObject * game_obj, int sound_id ); void ( * Set_Background_Music )( const char * wav_filename ); void ( * Fade_Background_Music )( const char * wav_filename, int fade_out_time, int fade_in_time ); void ( * Stop_Background_Music )( void ); // Object Properties float ( * Get_Health )( GameObject * obj ); float ( * Get_Max_Health )( GameObject * obj ); void ( * Set_Health )( GameObject * obj, float health ); float ( * Get_Shield_Strength )( GameObject * obj ); float ( * Get_Max_Shield_Strength )( GameObject * obj ); void ( * Set_Shield_Strength )( GameObject * obj, float strength ); void ( * Set_Shield_Type )( GameObject * obj, const char * name ); int ( * Get_Player_Type )( GameObject * obj ); void ( * Set_Player_Type )( GameObject * obj, int type ); // Math float ( * Get_Distance )( const Vector3 & p1, const Vector3 & p2 ); // Set Camera Host void ( * Set_Camera_Host )( GameObject * obj ); void ( * Force_Camera_Look )( const Vector3 & target ); // Get the Star GameObject * ( * Get_The_Star )( void ); GameObject * ( * Get_A_Star )( const Vector3 & pos ); GameObject * ( * Find_Closest_Soldier )( const Vector3 & pos, float min_dist, float max_dist, bool only_human = true ); bool ( * Is_A_Star )( GameObject * obj ); // Object Control void ( * Control_Enable )( GameObject * obj, bool enable ); // Hack const char * ( * Get_Damage_Bone_Name )( void ); bool ( * Get_Damage_Bone_Direction )( void ); // true means shot in the back // Visibility bool ( * Is_Object_Visible)( GameObject * looker, GameObject * obj ); void ( * Enable_Enemy_Seen)( GameObject * obj, bool enable = true ); // Display Text void (* Set_Display_Color )( unsigned char red = 255, unsigned char green = 255, unsigned char blue = 255 ); void (* Display_Text )( int string_id ); void (* Display_Float )( float value, const char * format = "%f" ); void (* Display_Int )( int value, const char * format = "%d" ); // SaveLoad void (* Save_Data )( ScriptSaver & saver, int id, int size, void * data ); void (* Save_Pointer )( ScriptSaver & saver, int id, void * pointer ); bool (* Load_Begin )( ScriptLoader & loader, int * id ); void (* Load_Data )( ScriptLoader & loader, int size, void * data ); void (* Load_Pointer )( ScriptLoader & loader, void ** pointer ); void (* Load_End )( ScriptLoader & loader ); void (*Begin_Chunk)(ScriptSaver& saver, unsigned int chunkID); void (*End_Chunk)(ScriptSaver& saver); bool (*Open_Chunk)(ScriptLoader& loader, unsigned int* chunkID); void (*Close_Chunk)(ScriptLoader& loader); // Radar Effects void (* Clear_Radar_Markers )( void ); void (* Clear_Radar_Marker )( int id ); void (* Add_Radar_Marker )( int id, const Vector3& position, int shape_type, int color_type ); void (* Set_Obj_Radar_Blip_Shape )( GameObject * obj, int shape_type ); // Set to -1 to reset default void (* Set_Obj_Radar_Blip_Color )( GameObject * obj, int color_type ); // Set to -1 to reset default void (* Enable_Radar )( bool enable ); // // Map support // void (* Clear_Map_Cell )( int cell_x, int cell_y ); void (* Clear_Map_Cell_By_Pos )( const Vector3 &world_space_pos ); void (* Clear_Map_Cell_By_Pixel_Pos )( int pixel_pos_x, int pixel_pos_y ); void (* Clear_Map_Region_By_Pos )( const Vector3 &world_space_pos, int pixel_radius ); void (* Reveal_Map )( void ); void (* Shroud_Map )( void ); void (* Show_Player_Map_Marker )( bool onoff ); // // Height DB access // float (* Get_Safe_Flight_Height )( float x_pos, float y_pos ); // Explosions void (* Create_Explosion )( const char * explosion_def_name, const Vector3 & pos, GameObject * creator = NULL ); void (* Create_Explosion_At_Bone )( const char * explosion_def_name, GameObject * object, const char * bone_name, GameObject * creator = NULL ); // HUD void (* Enable_HUD )( bool enable ); void (* Mission_Complete )( bool success ); void (* Give_PowerUp )( GameObject * obj, const char * preset_name, bool display_on_hud = false ); // Administration void (*Innate_Disable)(GameObject* object); void (*Innate_Enable)(GameObject* object); // Innate Soldier AI Enable/Disable (returns old value) bool (* Innate_Soldier_Enable_Enemy_Seen )( GameObject * obj, bool state ); bool (* Innate_Soldier_Enable_Gunshot_Heard )( GameObject * obj, bool state ); bool (* Innate_Soldier_Enable_Footsteps_Heard )( GameObject * obj, bool state ); bool (* Innate_Soldier_Enable_Bullet_Heard )( GameObject * obj, bool state ); bool (* Innate_Soldier_Enable_Actions )( GameObject * obj, bool state ); void (* Set_Innate_Soldier_Home_Location )( GameObject * obj, const Vector3& home_pos, float home_radius = 999999 ); void (* Set_Innate_Aggressiveness )( GameObject * obj, float aggressiveness ); void (* Set_Innate_Take_Cover_Probability )( GameObject * obj, float probability ); void (* Set_Innate_Is_Stationary )( GameObject * obj, bool stationary ); void (* Innate_Force_State_Bullet_Heard )( GameObject * obj, const Vector3 & pos ); void (* Innate_Force_State_Footsteps_Heard )( GameObject * obj, const Vector3 & pos ); void (* Innate_Force_State_Gunshots_Heard )( GameObject * obj, const Vector3 & pos ); void (* Innate_Force_State_Enemy_Seen )( GameObject * obj, GameObject * enemy ); // Control of StaticAnimPhys void (* Static_Anim_Phys_Goto_Frame )( int obj_id, float frame, const char * anim_name = NULL ); void (* Static_Anim_Phys_Goto_Last_Frame )( int obj_id, const char * anim_name = NULL ); // Timing unsigned int (* Get_Sync_Time)( void ); // Objectives void (* Add_Objective)( int id, int type, int status, int short_description_id, char * description_sound_filename = NULL, int long_description_id = 0 ); void (* Remove_Objective)( int id ); void (* Set_Objective_Status)( int id, int status ); void (* Change_Objective_Type)( int id, int type ); void (* Set_Objective_Radar_Blip)( int id, const Vector3 & position ); void (* Set_Objective_Radar_Blip_Object)( int id, ScriptableGameObj * unit ); void (* Set_Objective_HUD_Info)( int id, float priority, const char * texture_name, int message_id ); void (* Set_Objective_HUD_Info_Position)( int id, float priority, const char * texture_name, int message_id, const Vector3 & position ); // Camaera Shakes void (* Shake_Camera)( const Vector3 & pos, float radius = 25, float intensity = 0.25f, float duration = 1.5f ); // Spawners void (* Enable_Spawner)( int id, bool enable ); GameObject * (* Trigger_Spawner)( int id ); // Vehicles void (* Enable_Engine)( GameObject* object, bool onoff ); // Difficulty Level int (* Get_Difficulty_Level)( void ); // Keys void (* Grant_Key)( GameObject* object, int key, bool grant = true ); bool (* Has_Key)( GameObject* object, int key ); // Hibernation void (* Enable_Hibernation)( GameObject * object, bool enable ); void (* Attach_To_Object_Bone)( GameObject * object, GameObject * host_object, const char * bone_name ); // Conversation int (* Create_Conversation)( const char *conversation_name, int priority = 0, float max_dist = 0, bool is_interruptable = true ); void (* Join_Conversation)( GameObject * object, int active_conversation_id, bool allow_move = true, bool allow_head_turn = true, bool allow_face = true ); void (* Join_Conversation_Facing)( GameObject * object, int active_conversation_id, int obj_id_to_face ); void (* Start_Conversation)( int active_conversation_id, int action_id = 0 ); void (* Monitor_Conversation)( GameObject * object, int active_conversation_id ); void (* Start_Random_Conversation)( GameObject * object ); void (* Stop_Conversation)( int active_conversation_id ); void (* Stop_All_Conversations)( void ); // Locked facing support void (* Lock_Soldier_Facing)( GameObject * object, GameObject * object_to_face, bool turn_body ); void (* Unlock_Soldier_Facing)( GameObject * object ); // Apply Damage void (* Apply_Damage)( GameObject * object, float amount, const char * warhead_name, GameObject * damager = NULL ); // Soldier void (* Set_Loiters_Allowed)( GameObject * object, bool allowed ); void (* Set_Is_Visible)( GameObject * object, bool visible ); void (* Set_Is_Rendered)( GameObject * object, bool rendered ); // Points float (* Get_Points)( GameObject * object ); void (* Give_Points)( GameObject * object, float points, bool entire_team ); // Money (points and money were separated 09/06/01) float (* Get_Money)( GameObject * object ); void (* Give_Money)( GameObject * object, float money, bool entire_team ); // Buildings bool (* Get_Building_Power)( GameObject * object ); void (* Set_Building_Power)( GameObject * object, bool onoff ); void (* Play_Building_Announcement)( GameObject * object, int text_id ); GameObject * (* Find_Nearest_Building_To_Pos )( const Vector3 & position, const char * mesh_prefix ); GameObject * (* Find_Nearest_Building )( GameObject * object, const char * mesh_prefix ); // Zones int (* Team_Members_In_Zone)( GameObject * object, int player_type ); // Background void (*Set_Clouds) (float cloudcover, float cloudgloominess, float ramptime); void (*Set_Lightning) (float intensity, float startdistance, float enddistance, float heading, float distribution, float ramptime); void (*Set_War_Blitz) (float intensity, float startdistance, float enddistance, float heading, float distribution, float ramptime); // Weather void (*Set_Wind) (float heading, float speed, float variability, float ramptime); void (*Set_Rain) (float density, float ramptime, bool prime); void (*Set_Snow) (float density, float ramptime, bool prime); void (*Set_Ash) (float density, float ramptime, bool prime); void (*Set_Fog_Enable) (bool enabled); void (*Set_Fog_Range) (float startdistance, float enddistance, float ramptime); // Stealth control void (*Enable_Stealth) (GameObject * object, bool onoff); // Sniper control void (*Cinematic_Sniper_Control) (bool enabled, float zoom); // File Access int (*Text_File_Open) ( const char * filename ); bool (*Text_File_Get_String) ( int handle, char * buffer, int size ); void (*Text_File_Close) ( int handle ); // Vehicle Transitions void (*Enable_Vehicle_Transitions) ( GameObject * object, bool enable ); // Player terminal support void (*Display_GDI_Player_Terminal) (); void (*Display_NOD_Player_Terminal) (); void (*Display_Mutant_Player_Terminal) (); // Encyclopedia support bool (*Reveal_Encyclopedia_Character) ( int object_id ); bool (*Reveal_Encyclopedia_Weapon) ( int object_id ); bool (*Reveal_Encyclopedia_Vehicle) ( int object_id ); bool (*Reveal_Encyclopedia_Building) ( int object_id ); void (*Display_Encyclopedia_Event_UI) ( void ); void (* Scale_AI_Awareness)( float sight_scale, float hearing_scale ); // Cinematic Freeze void (* Enable_Cinematic_Freeze)( GameObject * object, bool enable ); void (* Expire_Powerup )( GameObject * object ); // Hud stuff void (* Set_HUD_Help_Text )( int string_id, const Vector3 &color ); void (* Enable_HUD_Pokable_Indicator )( GameObject * object, bool enable ); void (* Enable_Innate_Conversations )( GameObject * object, bool enable ); void (* Display_Health_Bar )( GameObject * object, bool display ); // Shadow control. In certain cases we need to manually disable shadow casting // on an object. Cinematics with too many characters are an example of this. void (* Enable_Shadow) ( GameObject * object, bool enable ); void (* Clear_Weapons) ( GameObject * object ); void (* Set_Num_Tertiary_Objectives) ( int count ); // Letterbox and screen fading controls void (* Enable_Letterbox) ( bool onoff, float seconds ); void (* Set_Screen_Fade_Color) ( float r, float g, float b, float seconds ); void (* Set_Screen_Fade_Opacity) ( float opacity, float seconds ); } ScriptCommands; /* ** Build a class to wrap the struct */ class ScriptCommandsClass { public: ScriptCommands *Commands; }; /* ** Get Script Commands ** This should only be called in the host application ** and not from the DLL */ ScriptCommands *Get_Script_Commands( void ); #endif // SCRIPTCOMMANDS_H