// // 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/EXTERNS.H 2 3/10/97 6:23p Steve_tall $ */ /*********************************************************************************************** *** 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 : EXTERNS.H * * * * Programmer : Joe L. Bostic * * * * Start Date : May 27, 1994 * * * * Last Update : May 27, 1994 [JLB] * * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef EXTERNS_H #define EXTERNS_H #include "cell.h" #ifdef SCENARIO_EDITOR #include "mapedit.h" #endif #include "techno.h" #include "type.h" #include "building.h" #include "unit.h" #include "credits.h" #include "goptions.h" #include "options.h" #include "infantry.H" #include "DSOUND.H" extern char _staging_buffer[32000]; extern "C" { void _PRO(void); } /* ** Convenient alias for MixFileClass object. This allows ** easier entry into the code and less clutter. */ typedef MixFileClass MFCD; extern bool IsVQ640; extern unsigned long GameVersion; extern bool Debug_MotionCapture; extern bool Debug_Rotate; extern bool Debug_Quiet; extern bool Debug_Cheat; extern bool Debug_Remap; extern bool Debug_Flag; extern bool Debug_Lose; extern bool Debug_Map; extern bool Debug_Win; extern bool Debug_Icon; extern bool Debug_Passable; extern bool Debug_Unshroud; extern bool Debug_Threat; extern bool Debug_Find_Path; extern bool Debug_Check_Map; extern bool Debug_Playtest; extern bool Debug_Heap_Dump; extern bool Debug_Smart_Print; extern bool Debug_Trap_Check_Heap; extern bool Debug_Modem_Dump; extern bool Debug_Print_Events; extern bool Debug_Force_Crash; extern void const *LightningShapes; extern int NewINIFormat; #ifdef FIXIT_ANTS extern bool AntsEnabled; #endif #ifdef FIXIT_CSII // checked - ajw 9/28/98 extern bool NewUnitsEnabled; extern bool SecretUnitsEnabled; extern int MTankDistance; extern bool OverrideNewUnitsEnabled; // ST - 12/13/2019 12:19PM #ifdef FIXIT_CARRIER // checked - ajw 9/28/98 extern int CarrierLaunchDelay; #endif #endif #ifdef FIXIT_NAME_OVERRIDE extern char const * NameOverride[25]; extern int NameIDOverride[25]; #endif #ifdef WIN32 extern bool GameInFocus; extern unsigned char *InterpolatedPalettes[100]; extern BOOL PalettesRead; extern unsigned PaletteCounter; extern int AllDone; extern HANDLE hInstance; extern bool InMovie; extern WinTimerClass * WindowsTimer; extern WWMouseClass * WWMouse; extern GraphicBufferClass HiddenPage; #define SeenPage SeenBuff extern GraphicBufferClass VisiblePage; extern GraphicViewPortClass SeenBuff; extern GraphicBufferClass SysMemPage; extern LPDIRECTSOUND SoundObject; extern LPDIRECTSOUNDBUFFER PrimaryBufferPtr; extern int ScreenWidth; extern int ScreenHeight; extern GraphicBufferClass ModeXBuff; #else extern VideoBufferClass SeenPage; extern GraphicBufferClass SeenBuff; extern GraphicBufferClass & VisiblePage; #endif /* ** Dynamic global variables (these change or are initialized at run time). */ extern MissionControlClass MissionControl[MISSION_COUNT]; extern char const * TutorialText[225]; extern Buffer * TheaterBuffer; extern GetCDClass CDList; extern CCINIClass RuleINI; #ifdef FIXIT_CSII // checked - ajw 9/28/98 extern CCINIClass AftermathINI; #endif //extern Benchmark * Benches; extern int MapTriggerID; extern int LogicTriggerID; extern PKey FastKey; extern PKey SlowKey; extern RulesClass Rule; extern KeyboardClass * Keyboard; extern RandomStraw CryptRandom; extern RandomClass NonCriticalRandomNumber; extern CarryoverClass * Carryover; extern ScenarioClass Scen; extern RemapControlType ColorRemaps[PCOLOR_COUNT]; extern RemapControlType MetalScheme; extern RemapControlType GreyScheme; extern VersionClass VerNum; extern bool SlowPalette; extern bool ScoresPresent; extern bool AllowVoice; extern NewConfigType NewConfig; extern VoxType SpeakQueue; extern bool PlayerWins; extern bool PlayerLoses; extern bool PlayerRestarts; extern long Frame; extern VoxType SpeechRecord[2]; extern void * SpeechBuffer[2]; extern int PreserveVQAScreen; extern bool BreakoutAllowed; extern bool Brokeout; extern GameOptionsClass Options; extern LogicClass Logic; #ifdef SCENARIO_EDITOR extern MapEditClass Map; #else extern MouseClass Map; #endif extern ScoreClass Score; extern MonoClass MonoArray[DMONO_COUNT]; extern MFCD * TheaterData; extern MFCD * MoviesMix; extern MFCD * GeneralMix; extern MFCD * ScoreMix; extern MFCD * MainMix; extern MFCD * ConquerMix; extern ThemeClass Theme; extern SpecialClass Special; /* ** Game object allocation and tracking classes. */ extern TFixedIHeapClass Aircraft; extern TFixedIHeapClass Anims; extern TFixedIHeapClass Buildings; extern TFixedIHeapClass Bullets; extern TFixedIHeapClass Factories; extern TFixedIHeapClass Houses; extern TFixedIHeapClass Infantry; extern TFixedIHeapClass Overlays; extern TFixedIHeapClass Smudges; extern TFixedIHeapClass Teams; extern TFixedIHeapClass TeamTypes; extern TFixedIHeapClass Templates; extern TFixedIHeapClass Terrains; extern TFixedIHeapClass Triggers; extern TFixedIHeapClass Units; extern TFixedIHeapClass Vessels; extern TFixedIHeapClass TriggerTypes; extern TFixedIHeapClass HouseTypes; extern TFixedIHeapClass BuildingTypes; extern TFixedIHeapClass AircraftTypes; extern TFixedIHeapClass InfantryTypes; extern TFixedIHeapClass BulletTypes; extern TFixedIHeapClass AnimTypes; extern TFixedIHeapClass UnitTypes; extern TFixedIHeapClass VesselTypes; extern TFixedIHeapClass TemplateTypes; extern TFixedIHeapClass TerrainTypes; extern TFixedIHeapClass OverlayTypes; extern TFixedIHeapClass SmudgeTypes; extern FixedIHeapClass * HeapPointers[RTTI_COUNT]; extern TFixedIHeapClass Weapons; extern TFixedIHeapClass Warheads; extern QueueClass OutList; extern QueueClass DoList; #ifdef MIRROR_QUEUE extern QueueClass MirrorList; #endif typedef DynamicVectorArrayClass SelectedObjectsType; extern SelectedObjectsType CurrentObject; extern DynamicVectorClass LogicTriggers; extern DynamicVectorClass MapTriggers; extern DynamicVectorClass HouseTriggers[HOUSE_COUNT]; extern BaseClass Base; /* These variables are used to keep track of the slowest speed of a team */ extern TeamFormDataStruct TeamFormData[HOUSE_COUNT]; extern bool FormMove; extern SpeedType FormSpeed; extern MPHType FormMaxSpeed; extern bool IsTanyaDead; extern bool SaveTanya; extern bool TimeQuake; #ifdef FIXIT_CSII // checked - ajw 9/28/98 extern bool PendingTimeQuake; extern TARGET TimeQuakeCenter; extern fixed QuakeUnitDamage; extern fixed QuakeBuildingDamage; extern int QuakeInfantryDamage; extern int QuakeDelay; extern fixed ChronoTankDuration; // chrono override for chrono tanks #ifdef FIXIT_ENGINEER // checked - ajw 9/28/98 extern fixed EngineerDamage; // Amount of damage an engineer does extern fixed EngineerCaptureLevel; // Building damage level before engineer can capture #endif #endif /* ** Loaded data file pointers. */ extern void const * Metal12FontPtr; extern void const * MapFontPtr; extern void const * VCRFontPtr; extern void const * TypeFontPtr; extern void const * Font3Ptr; extern void const * Font6Ptr; extern void const * EditorFont; extern void const * Font8Ptr; extern void const * FontLEDPtr; extern void const * ScoreFontPtr; extern void const * GradFont6Ptr; extern char const * SystemStrings; extern char const * DebugStrings; /* ** Miscellaneous globals. */ extern ChronalVortexClass ChronalVortex; extern TTimerClass TickCount; extern bool PassedProximity; // used in display.cpp extern HousesType Whom; //extern _VQAConfig AnimControl; extern long SpareTicks; extern long PathCount; extern long CellCount; extern long TargetScan; extern long SidebarRedraws; extern DMonoType MonoPage; extern bool GameActive; extern bool SpecialFlag; extern int ScenarioInit; extern HouseClass * PlayerPtr; extern PaletteClass CCPalette; extern PaletteClass BlackPalette; extern PaletteClass WhitePalette; extern PaletteClass GamePalette; //extern PaletteClass InGamePalette; #define InGamePalette GamePalette extern PaletteClass OriginalPalette; extern PaletteClass ScorePalette; extern int BuildLevel; extern unsigned long ScenarioCRC; #ifdef FIXIT_VERSION_3 extern bool bAftermathMultiplayer; // Is multiplayer game being played with Aftermath rules? #else extern unsigned long PlayingAgainstVersion; // Negotiated version number extern bool Version107InMix; // Is there a v1.07 in the game #endif #ifdef FIXIT_VERSION_3 // For endgame auto-sonar pulse. extern bool bAutoSonarPulse; #endif #ifdef SCENARIO_EDITOR extern CELL CurrentCell; #endif extern SessionClass Session; //extern NullModemClass NullModem; extern IPXManagerClass Ipx; #if(TEN) extern TenConnManClass *Ten; #endif #if(MPATH) extern MPlayerManClass *MPath; #endif #if(TIMING_FIX) extern int NewMaxAheadFrame1; extern int NewMaxAheadFrame2; #endif extern int Seed; extern int CustomSeed; extern GroundType Ground[LAND_COUNT]; /* ** Constant externs (data is not modified during game play). */ extern char const * Missions[MISSION_COUNT]; extern char const Keys[]; extern char const * const VQName[VQ_COUNT]; extern int CrateData[CRATE_COUNT]; extern char const * const CrateNames[CRATE_COUNT]; extern int CrateShares[CRATE_COUNT]; extern AnimType CrateAnims[CRATE_COUNT]; extern char const * const SpecialWeaponName[SPC_COUNT]; extern int const SpecialWeaponHelp[SPC_COUNT]; extern char const * const SpecialWeaponFile[SPC_COUNT]; extern char const * const ArmorName[ARMOR_COUNT]; extern char const * const QuarryName[QUARRY_COUNT]; extern char const * const FormationName[FORMATION_COUNT]; extern unsigned long const PlayCodes[]; extern unsigned long const CheatCodes[]; //extern char const * const ProjectileNames[]; extern unsigned long const EditorCodes[]; extern char const * const SourceName[SOURCE_COUNT]; extern int const GroundColor[LAND_COUNT]; extern int const SnowColor[LAND_COUNT]; extern TheaterDataType const Theaters[THEATER_COUNT]; extern unsigned char const Facing32[256]; extern unsigned char const Facing16[256]; extern signed char const Rotation16[256]; extern unsigned char const Facing8[256]; extern unsigned char const Pixel2Lepton[24]; extern COORDINATE const StoppingCoordAbs[5]; extern CELL const AdjacentCell[FACING_COUNT]; extern COORDINATE const AdjacentCoord[FACING_COUNT]; extern unsigned char const RemapCiv2[]; extern unsigned char const RemapCiv4[]; extern unsigned char const RemapCiv5[]; extern unsigned char const RemapCiv6[]; extern unsigned char const RemapCiv7[]; extern unsigned char const RemapCiv8[]; extern unsigned char const RemapCiv9[]; extern unsigned char const RemapCiv10[]; extern unsigned char const RemapEmber[]; extern int SoundOn; #ifdef WIN32 extern GraphicViewPortClass HidPage; #else extern GraphicBufferClass HidPage; #endif extern int MenuList[][8]; extern CDTimerClass FrameTimer; extern CDTimerClass CountDownTimer; extern SpecialDialogType SpecialDialog; extern int RequiredCD; extern int CurrentCD; extern int MouseInstalled; extern int LogLevel; extern unsigned long LogLevelTime[ MAX_LOG_LEVEL ]; extern unsigned long LogLastTime; extern class DynamicVectorClass test2; extern class DynamicVectorClass test3; extern bool LogDump_Print; extern "C"{ extern bool IsTheaterShape; } extern void Reset_Theater_Shapes(void); extern TheaterType LastTheater; void Coordinate_Remap ( GraphicViewPortClass *inbuffer, int x, int y, int width, int height, unsigned char *remap_table); void Do_Vortex (int x, int y, int frame); /************************************************************ ** Win32 specific externs */ #ifdef WIN32 extern int ReadyToQuit; //Are we about to exit cleanly extern bool InDebugger; //Are we being run from a debugger void Memory_Error_Handler(void); //Memory error handler function void WWDebugString (char *string); #else extern bool IsTheaterShape; #endif //WIN32 /************************************************************* ** Internet specific externs */ #ifdef WIN32 extern char PlanetWestwoodHandle[]; //Planet WW user name extern char PlanetWestwoodPassword[]; //Planet WW password extern char PlanetWestwoodIPAddress[]; //IP of server or other player extern long PlanetWestwoodPortNumber; //Port number to send to extern bool PlanetWestwoodIsHost; //Flag true if player has control of game options extern unsigned long PlanetWestwoodGameID; //Game ID extern HWND WChatHWND; //Handle to Wchat window. extern bool GameStatisticsPacketSent; extern bool ConnectionLost; extern void *PacketLater; extern bool SpawnedFromWChat; extern int ShowCommand; void Register_Game_Start_Time(void); void Register_Game_End_Time(void); void Send_Statistics_Packet(void); void Check_From_WChat(char *wchat_name); bool Do_The_Internet_Menu_Thang (void); bool Server_Remote_Connect(void); bool Client_Remote_Connect(void); extern int UnitBuildPenalty; #endif //WIN32 /* ** From SENDFILE.CPP - externs for scenario file transfers */ bool Receive_Remote_File ( char *file_name, unsigned int file_length, unsigned int crc, int gametype); bool Send_Remote_File ( char *file_name, int gametype ); bool Get_Scenario_File_From_Host(char *return_name, int gametype); bool Find_Local_Scenario (char *description, char *filename, unsigned int length, char *digest, bool official); #ifdef MPEGMOVIE // Denzil 6/15/98 #ifdef MCIMPEG #include "mcimovie.h" extern MCIMovie* MciMovie; #endif #include "mpgset.h" extern MPGSettings* MpgSettings; #endif extern "C" bool MMXAvailable; extern bool ShareAllyVisibility; #endif