// // Copyright 2020 Electronic Arts Inc. // // TiberianDawn.DLL and RedAlert.dll and corresponding source code 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. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed // in the hope that it will be useful, but with permitted additional restrictions // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT // distributed with this program. You should have received a copy of the // GNU General Public License along with permitted additional restrictions // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection /* $Header: /CounterStrike/TACTION.H 1 3/03/97 10:25a Joe_bostic $ */ /*********************************************************************************************** *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** *********************************************************************************************** * * * Project Name : Command & Conquer * * * * File Name : ACTION.H * * * * Programmer : Joe L. Bostic * * * * Start Date : 11/28/95 * * * * Last Update : November 28, 1995 [JLB] * * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef ACTION_H #define ACTION_H typedef enum TActionType : unsigned char { TACTION_NONE, TACTION_WIN, // player wins! TACTION_LOSE, // player loses. TACTION_BEGIN_PRODUCTION, // computer begins factory production. TACTION_CREATE_TEAM, // computer creates a certain type of team TACTION_DESTROY_TEAM, TACTION_ALL_HUNT, // all enemy units go into hunt mode (teams destroyed). TACTION_REINFORCEMENTS, // player gets reinforcements // (house that gets them is determined by // the Reinforcement instance) TACTION_DZ, // Deploy drop zone smoke. TACTION_FIRE_SALE, // Sell all buildings and go on rampage. TACTION_PLAY_MOVIE, // Play movie (temporarily suspend game). TACTION_TEXT_TRIGGER, // Triggers a text message display. TACTION_DESTROY_TRIGGER, // Destroy specified trigger. TACTION_AUTOCREATE, // Computer to autocreate teams. TACTION_WINLOSE, // Win if captured, lose if destroyed. TACTION_ALLOWWIN, // Allows winning if triggered. TACTION_REVEAL_ALL, // Reveal the entire map. TACTION_REVEAL_SOME, // Reveal map around cell #. TACTION_REVEAL_ZONE, // Reveal all of specified zone. TACTION_PLAY_SOUND, // Play sound effect. TACTION_PLAY_MUSIC, // Play musical score. TACTION_PLAY_SPEECH, // Play EVA speech. TACTION_FORCE_TRIGGER, // Force trigger to activate. TACTION_START_TIMER, // Start mission timer. TACTION_STOP_TIMER, // Stop mission timer. TACTION_ADD_TIMER, // Increase mission timer time. TACTION_SUB_TIMER, // Decrease mission timer time. TACTION_SET_TIMER, // Set and start the mission timer. TACTION_SET_GLOBAL, // Set global variable. TACTION_CLEAR_GLOBAL, // Clear global variable. TACTION_BASE_BUILDING, // Automated base building. TACTION_CREEP_SHADOW, // Shadow grows back one 'step'. TACTION_DESTROY_OBJECT, // Destroys the building this trigger is attached to. TACTION_1_SPECIAL, // Add a one-time special weapon ability to house. TACTION_FULL_SPECIAL, // Add a repeating special weapon ability to house. TACTION_PREFERRED_TARGET, // Designates preferred target for house. TACTION_LAUNCH_NUKES, // Launch fake nuclear missiles from all silos TACTION_COUNT, TACTION_FIRST=0 } TActionType; TActionType Action_From_Name(char const * name); char const * Name_From_Action(TActionType action); NeedType Action_Needs(TActionType action); class TriggerTypeClass; class TeamTypeClass; /* ** This elaborates the information necessary to carry out ** a trigger's action. */ struct TActionClass { TActionType Action; // Action to perform. CCPtr Team; // Team type pointer for this action (if needed). CCPtr Trigger; // Trigger type pointer for this action (if needed). union { ThemeType Theme; // Musical theme. VocType Sound; // Sound effect. VoxType Speech; // Speech identifier. HousesType House; // House to be affected. SpecialWeaponType Special; // Special weapon ability. QuarryType Quarry; // Preferred target for attack. VQType Movie; // The movie to play. bool Bool; // Boolean value. long Value; } Data; TActionClass(void) : Action(TACTION_NONE) { Data.Theme = THEME_NONE; Data.Value = -1; }; TActionClass(NoInitClass const & x) : Team(x), Trigger(x) {}; void Detach(TARGET target); void Code_Pointers(void); void Decode_Pointers(void); void Read_INI(void); void Build_INI_Entry(char * buffer) const; bool operator() (HousesType house, ObjectClass * object, int id, CELL cell); }; class ActionChoiceClass { public: ActionChoiceClass(TActionType event=TACTION_NONE) : Action(event) {} operator TActionType (void) const {return(Action);} bool operator == (ActionChoiceClass const & rvalue) const {return(Action == rvalue.Action);} bool operator != (ActionChoiceClass const & rvalue) const {return(Action != rvalue.Action);} bool operator > (ActionChoiceClass const & rvalue) const {return(stricmp(Description(), rvalue.Description()) > 0);} bool operator < (ActionChoiceClass const & rvalue) const {return(stricmp(Description(), rvalue.Description()) < 0);} bool operator <= (ActionChoiceClass const & rvalue) const {return(Action == rvalue.Action || stricmp(Description(), rvalue.Description()) < 0);} bool operator >= (ActionChoiceClass const & rvalue) const {return(Action == rvalue.Action || stricmp(Description(), rvalue.Description()) > 0);} char const * Description(void) const {return(Name_From_Action(Action));} void Draw_It(int index, int x, int y, int width, int height, bool selected, TextPrintType flags) const; TActionType Action; }; extern ActionChoiceClass ActionChoices[TACTION_COUNT]; #endif