EXTERNS.H 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. //
  2. // Copyright 2020 Electronic Arts Inc.
  3. //
  4. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
  5. // software: you can redistribute it and/or modify it under the terms of
  6. // the GNU General Public License as published by the Free Software Foundation,
  7. // either version 3 of the License, or (at your option) any later version.
  8. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
  9. // in the hope that it will be useful, but with permitted additional restrictions
  10. // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
  11. // distributed with this program. You should have received a copy of the
  12. // GNU General Public License along with permitted additional restrictions
  13. // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
  14. /* $Header: /counterstrike/EXTERNS.H 2 3/10/97 6:23p Steve_tall $ */
  15. /***********************************************************************************************
  16. *** 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 ***
  17. ***********************************************************************************************
  18. * *
  19. * Project Name : Command & Conquer *
  20. * *
  21. * File Name : EXTERNS.H *
  22. * *
  23. * Programmer : Joe L. Bostic *
  24. * *
  25. * Start Date : May 27, 1994 *
  26. * *
  27. * Last Update : May 27, 1994 [JLB] *
  28. * *
  29. *---------------------------------------------------------------------------------------------*
  30. * Functions: *
  31. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  32. #ifndef EXTERNS_H
  33. #define EXTERNS_H
  34. #include "cell.h"
  35. #ifdef SCENARIO_EDITOR
  36. #include "mapedit.h"
  37. #endif
  38. #include "techno.h"
  39. #include "type.h"
  40. #include "building.h"
  41. #include "unit.h"
  42. #include "credits.h"
  43. #include "goptions.h"
  44. #include "options.h"
  45. #include "infantry.H"
  46. #include "DSOUND.H"
  47. extern char _staging_buffer[32000];
  48. extern "C" {
  49. void _PRO(void);
  50. }
  51. /*
  52. ** Convenient alias for MixFileClass<CDFileClass> object. This allows
  53. ** easier entry into the code and less clutter.
  54. */
  55. typedef MixFileClass<CCFileClass> MFCD;
  56. extern bool IsVQ640;
  57. extern unsigned long GameVersion;
  58. extern bool Debug_MotionCapture;
  59. extern bool Debug_Rotate;
  60. extern bool Debug_Quiet;
  61. extern bool Debug_Cheat;
  62. extern bool Debug_Remap;
  63. extern bool Debug_Flag;
  64. extern bool Debug_Lose;
  65. extern bool Debug_Map;
  66. extern bool Debug_Win;
  67. extern bool Debug_Icon;
  68. extern bool Debug_Passable;
  69. extern bool Debug_Unshroud;
  70. extern bool Debug_Threat;
  71. extern bool Debug_Find_Path;
  72. extern bool Debug_Check_Map;
  73. extern bool Debug_Playtest;
  74. extern bool Debug_Heap_Dump;
  75. extern bool Debug_Smart_Print;
  76. extern bool Debug_Trap_Check_Heap;
  77. extern bool Debug_Modem_Dump;
  78. extern bool Debug_Print_Events;
  79. extern bool Debug_Force_Crash;
  80. extern void const *LightningShapes;
  81. extern int NewINIFormat;
  82. #ifdef FIXIT_ANTS
  83. extern bool AntsEnabled;
  84. #endif
  85. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  86. extern bool NewUnitsEnabled;
  87. extern bool SecretUnitsEnabled;
  88. extern int MTankDistance;
  89. extern bool OverrideNewUnitsEnabled; // ST - 12/13/2019 12:19PM
  90. #ifdef FIXIT_CARRIER // checked - ajw 9/28/98
  91. extern int CarrierLaunchDelay;
  92. #endif
  93. #endif
  94. #ifdef FIXIT_NAME_OVERRIDE
  95. extern char const * NameOverride[25];
  96. extern int NameIDOverride[25];
  97. #endif
  98. #ifdef WIN32
  99. extern bool GameInFocus;
  100. extern unsigned char *InterpolatedPalettes[100];
  101. extern BOOL PalettesRead;
  102. extern unsigned PaletteCounter;
  103. extern int AllDone;
  104. extern HANDLE hInstance;
  105. extern bool InMovie;
  106. extern WinTimerClass * WindowsTimer;
  107. extern WWMouseClass * WWMouse;
  108. extern GraphicBufferClass HiddenPage;
  109. #define SeenPage SeenBuff
  110. extern GraphicBufferClass VisiblePage;
  111. extern GraphicViewPortClass SeenBuff;
  112. extern GraphicBufferClass SysMemPage;
  113. extern LPDIRECTSOUND SoundObject;
  114. extern LPDIRECTSOUNDBUFFER PrimaryBufferPtr;
  115. extern int ScreenWidth;
  116. extern int ScreenHeight;
  117. extern GraphicBufferClass ModeXBuff;
  118. #else
  119. extern VideoBufferClass SeenPage;
  120. extern GraphicBufferClass SeenBuff;
  121. extern GraphicBufferClass & VisiblePage;
  122. #endif
  123. /*
  124. ** Dynamic global variables (these change or are initialized at run time).
  125. */
  126. extern MissionControlClass MissionControl[MISSION_COUNT];
  127. extern char const * TutorialText[225];
  128. extern Buffer * TheaterBuffer;
  129. extern GetCDClass CDList;
  130. extern CCINIClass RuleINI;
  131. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  132. extern CCINIClass AftermathINI;
  133. #endif
  134. //extern Benchmark * Benches;
  135. extern int MapTriggerID;
  136. extern int LogicTriggerID;
  137. extern PKey FastKey;
  138. extern PKey SlowKey;
  139. extern RulesClass Rule;
  140. extern KeyboardClass * Keyboard;
  141. extern RandomStraw CryptRandom;
  142. extern RandomClass NonCriticalRandomNumber;
  143. extern CarryoverClass * Carryover;
  144. extern ScenarioClass Scen;
  145. extern RemapControlType ColorRemaps[PCOLOR_COUNT];
  146. extern RemapControlType MetalScheme;
  147. extern RemapControlType GreyScheme;
  148. extern VersionClass VerNum;
  149. extern bool SlowPalette;
  150. extern bool ScoresPresent;
  151. extern bool AllowVoice;
  152. extern NewConfigType NewConfig;
  153. extern VoxType SpeakQueue;
  154. extern bool PlayerWins;
  155. extern bool PlayerLoses;
  156. extern bool PlayerRestarts;
  157. extern long Frame;
  158. extern VoxType SpeechRecord[2];
  159. extern void * SpeechBuffer[2];
  160. extern int PreserveVQAScreen;
  161. extern bool BreakoutAllowed;
  162. extern bool Brokeout;
  163. extern GameOptionsClass Options;
  164. extern LogicClass Logic;
  165. #ifdef SCENARIO_EDITOR
  166. extern MapEditClass Map;
  167. #else
  168. extern MouseClass Map;
  169. #endif
  170. extern ScoreClass Score;
  171. extern MonoClass MonoArray[DMONO_COUNT];
  172. extern MFCD * TheaterData;
  173. extern MFCD * MoviesMix;
  174. extern MFCD * GeneralMix;
  175. extern MFCD * ScoreMix;
  176. extern MFCD * MainMix;
  177. extern MFCD * ConquerMix;
  178. extern ThemeClass Theme;
  179. extern SpecialClass Special;
  180. /*
  181. ** Game object allocation and tracking classes.
  182. */
  183. extern TFixedIHeapClass<AircraftClass> Aircraft;
  184. extern TFixedIHeapClass<AnimClass> Anims;
  185. extern TFixedIHeapClass<BuildingClass> Buildings;
  186. extern TFixedIHeapClass<BulletClass> Bullets;
  187. extern TFixedIHeapClass<FactoryClass> Factories;
  188. extern TFixedIHeapClass<HouseClass> Houses;
  189. extern TFixedIHeapClass<InfantryClass> Infantry;
  190. extern TFixedIHeapClass<OverlayClass> Overlays;
  191. extern TFixedIHeapClass<SmudgeClass> Smudges;
  192. extern TFixedIHeapClass<TeamClass> Teams;
  193. extern TFixedIHeapClass<TeamTypeClass> TeamTypes;
  194. extern TFixedIHeapClass<TemplateClass> Templates;
  195. extern TFixedIHeapClass<TerrainClass> Terrains;
  196. extern TFixedIHeapClass<TriggerClass> Triggers;
  197. extern TFixedIHeapClass<UnitClass> Units;
  198. extern TFixedIHeapClass<VesselClass> Vessels;
  199. extern TFixedIHeapClass<TriggerTypeClass> TriggerTypes;
  200. extern TFixedIHeapClass<HouseTypeClass> HouseTypes;
  201. extern TFixedIHeapClass<BuildingTypeClass> BuildingTypes;
  202. extern TFixedIHeapClass<AircraftTypeClass> AircraftTypes;
  203. extern TFixedIHeapClass<InfantryTypeClass> InfantryTypes;
  204. extern TFixedIHeapClass<BulletTypeClass> BulletTypes;
  205. extern TFixedIHeapClass<AnimTypeClass> AnimTypes;
  206. extern TFixedIHeapClass<UnitTypeClass> UnitTypes;
  207. extern TFixedIHeapClass<VesselTypeClass> VesselTypes;
  208. extern TFixedIHeapClass<TemplateTypeClass> TemplateTypes;
  209. extern TFixedIHeapClass<TerrainTypeClass> TerrainTypes;
  210. extern TFixedIHeapClass<OverlayTypeClass> OverlayTypes;
  211. extern TFixedIHeapClass<SmudgeTypeClass> SmudgeTypes;
  212. extern FixedIHeapClass * HeapPointers[RTTI_COUNT];
  213. extern TFixedIHeapClass<WeaponTypeClass> Weapons;
  214. extern TFixedIHeapClass<WarheadTypeClass> Warheads;
  215. extern QueueClass<EventClass, MAX_EVENTS> OutList;
  216. extern QueueClass<EventClass, (MAX_EVENTS * 64)> DoList;
  217. #ifdef MIRROR_QUEUE
  218. extern QueueClass<EventClass, (MAX_EVENTS * 64)> MirrorList;
  219. #endif
  220. typedef DynamicVectorArrayClass<ObjectClass *, HOUSE_COUNT, HOUSE_FIRST> SelectedObjectsType;
  221. extern SelectedObjectsType CurrentObject;
  222. extern DynamicVectorClass<TriggerClass *> LogicTriggers;
  223. extern DynamicVectorClass<TriggerClass *> MapTriggers;
  224. extern DynamicVectorClass<TriggerClass *> HouseTriggers[HOUSE_COUNT];
  225. extern BaseClass Base;
  226. /* These variables are used to keep track of the slowest speed of a team */
  227. extern TeamFormDataStruct TeamFormData[HOUSE_COUNT];
  228. extern bool FormMove;
  229. extern SpeedType FormSpeed;
  230. extern MPHType FormMaxSpeed;
  231. extern bool IsTanyaDead;
  232. extern bool SaveTanya;
  233. extern bool TimeQuake;
  234. #ifdef FIXIT_CSII // checked - ajw 9/28/98
  235. extern bool PendingTimeQuake;
  236. extern TARGET TimeQuakeCenter;
  237. extern fixed QuakeUnitDamage;
  238. extern fixed QuakeBuildingDamage;
  239. extern int QuakeInfantryDamage;
  240. extern int QuakeDelay;
  241. extern fixed ChronoTankDuration; // chrono override for chrono tanks
  242. #ifdef FIXIT_ENGINEER // checked - ajw 9/28/98
  243. extern fixed EngineerDamage; // Amount of damage an engineer does
  244. extern fixed EngineerCaptureLevel; // Building damage level before engineer can capture
  245. #endif
  246. #endif
  247. /*
  248. ** Loaded data file pointers.
  249. */
  250. extern void const * Metal12FontPtr;
  251. extern void const * MapFontPtr;
  252. extern void const * VCRFontPtr;
  253. extern void const * TypeFontPtr;
  254. extern void const * Font3Ptr;
  255. extern void const * Font6Ptr;
  256. extern void const * EditorFont;
  257. extern void const * Font8Ptr;
  258. extern void const * FontLEDPtr;
  259. extern void const * ScoreFontPtr;
  260. extern void const * GradFont6Ptr;
  261. extern char const * SystemStrings;
  262. extern char const * DebugStrings;
  263. /*
  264. ** Miscellaneous globals.
  265. */
  266. extern ChronalVortexClass ChronalVortex;
  267. extern TTimerClass<SystemTimerClass> TickCount;
  268. extern bool PassedProximity; // used in display.cpp
  269. extern HousesType Whom;
  270. //extern _VQAConfig AnimControl;
  271. extern long SpareTicks;
  272. extern long PathCount;
  273. extern long CellCount;
  274. extern long TargetScan;
  275. extern long SidebarRedraws;
  276. extern DMonoType MonoPage;
  277. extern bool GameActive;
  278. extern bool SpecialFlag;
  279. extern int ScenarioInit;
  280. extern HouseClass * PlayerPtr;
  281. extern PaletteClass CCPalette;
  282. extern PaletteClass BlackPalette;
  283. extern PaletteClass WhitePalette;
  284. extern PaletteClass GamePalette;
  285. //extern PaletteClass InGamePalette;
  286. #define InGamePalette GamePalette
  287. extern PaletteClass OriginalPalette;
  288. extern PaletteClass ScorePalette;
  289. extern int BuildLevel;
  290. extern unsigned long ScenarioCRC;
  291. #ifdef FIXIT_VERSION_3
  292. extern bool bAftermathMultiplayer; // Is multiplayer game being played with Aftermath rules?
  293. #else
  294. extern unsigned long PlayingAgainstVersion; // Negotiated version number
  295. extern bool Version107InMix; // Is there a v1.07 in the game
  296. #endif
  297. #ifdef FIXIT_VERSION_3 // For endgame auto-sonar pulse.
  298. extern bool bAutoSonarPulse;
  299. #endif
  300. #ifdef SCENARIO_EDITOR
  301. extern CELL CurrentCell;
  302. #endif
  303. extern SessionClass Session;
  304. //extern NullModemClass NullModem;
  305. extern IPXManagerClass Ipx;
  306. #if(TEN)
  307. extern TenConnManClass *Ten;
  308. #endif
  309. #if(MPATH)
  310. extern MPlayerManClass *MPath;
  311. #endif
  312. #if(TIMING_FIX)
  313. extern int NewMaxAheadFrame1;
  314. extern int NewMaxAheadFrame2;
  315. #endif
  316. extern int Seed;
  317. extern int CustomSeed;
  318. extern GroundType Ground[LAND_COUNT];
  319. /*
  320. ** Constant externs (data is not modified during game play).
  321. */
  322. extern char const * Missions[MISSION_COUNT];
  323. extern char const Keys[];
  324. extern char const * const VQName[VQ_COUNT];
  325. extern int CrateData[CRATE_COUNT];
  326. extern char const * const CrateNames[CRATE_COUNT];
  327. extern int CrateShares[CRATE_COUNT];
  328. extern AnimType CrateAnims[CRATE_COUNT];
  329. extern char const * const SpecialWeaponName[SPC_COUNT];
  330. extern int const SpecialWeaponHelp[SPC_COUNT];
  331. extern char const * const SpecialWeaponFile[SPC_COUNT];
  332. extern char const * const ArmorName[ARMOR_COUNT];
  333. extern char const * const QuarryName[QUARRY_COUNT];
  334. extern char const * const FormationName[FORMATION_COUNT];
  335. extern unsigned long const PlayCodes[];
  336. extern unsigned long const CheatCodes[];
  337. //extern char const * const ProjectileNames[];
  338. extern unsigned long const EditorCodes[];
  339. extern char const * const SourceName[SOURCE_COUNT];
  340. extern int const GroundColor[LAND_COUNT];
  341. extern int const SnowColor[LAND_COUNT];
  342. extern TheaterDataType const Theaters[THEATER_COUNT];
  343. extern unsigned char const Facing32[256];
  344. extern unsigned char const Facing16[256];
  345. extern signed char const Rotation16[256];
  346. extern unsigned char const Facing8[256];
  347. extern unsigned char const Pixel2Lepton[24];
  348. extern COORDINATE const StoppingCoordAbs[5];
  349. extern CELL const AdjacentCell[FACING_COUNT];
  350. extern COORDINATE const AdjacentCoord[FACING_COUNT];
  351. extern unsigned char const RemapCiv2[];
  352. extern unsigned char const RemapCiv4[];
  353. extern unsigned char const RemapCiv5[];
  354. extern unsigned char const RemapCiv6[];
  355. extern unsigned char const RemapCiv7[];
  356. extern unsigned char const RemapCiv8[];
  357. extern unsigned char const RemapCiv9[];
  358. extern unsigned char const RemapCiv10[];
  359. extern unsigned char const RemapEmber[];
  360. extern int SoundOn;
  361. #ifdef WIN32
  362. extern GraphicViewPortClass HidPage;
  363. #else
  364. extern GraphicBufferClass HidPage;
  365. #endif
  366. extern int MenuList[][8];
  367. extern CDTimerClass<SystemTimerClass> FrameTimer;
  368. extern CDTimerClass<SystemTimerClass> CountDownTimer;
  369. extern SpecialDialogType SpecialDialog;
  370. extern int RequiredCD;
  371. extern int CurrentCD;
  372. extern int MouseInstalled;
  373. extern int LogLevel;
  374. extern unsigned long LogLevelTime[ MAX_LOG_LEVEL ];
  375. extern unsigned long LogLastTime;
  376. extern class DynamicVectorClass<EventChoiceClass> test2;
  377. extern class DynamicVectorClass<ActionChoiceClass> test3;
  378. extern bool LogDump_Print;
  379. extern "C"{
  380. extern bool IsTheaterShape;
  381. }
  382. extern void Reset_Theater_Shapes(void);
  383. extern TheaterType LastTheater;
  384. void Coordinate_Remap ( GraphicViewPortClass *inbuffer, int x, int y, int width, int height, unsigned char *remap_table);
  385. void Do_Vortex (int x, int y, int frame);
  386. /************************************************************
  387. ** Win32 specific externs
  388. */
  389. #ifdef WIN32
  390. extern int ReadyToQuit; //Are we about to exit cleanly
  391. extern bool InDebugger; //Are we being run from a debugger
  392. void Memory_Error_Handler(void); //Memory error handler function
  393. void WWDebugString (char *string);
  394. #else
  395. extern bool IsTheaterShape;
  396. #endif //WIN32
  397. /*************************************************************
  398. ** Internet specific externs
  399. */
  400. #ifdef WIN32
  401. extern char PlanetWestwoodHandle[]; //Planet WW user name
  402. extern char PlanetWestwoodPassword[]; //Planet WW password
  403. extern char PlanetWestwoodIPAddress[]; //IP of server or other player
  404. extern long PlanetWestwoodPortNumber; //Port number to send to
  405. extern bool PlanetWestwoodIsHost; //Flag true if player has control of game options
  406. extern unsigned long PlanetWestwoodGameID; //Game ID
  407. extern HWND WChatHWND; //Handle to Wchat window.
  408. extern bool GameStatisticsPacketSent;
  409. extern bool ConnectionLost;
  410. extern void *PacketLater;
  411. extern bool SpawnedFromWChat;
  412. extern int ShowCommand;
  413. void Register_Game_Start_Time(void);
  414. void Register_Game_End_Time(void);
  415. void Send_Statistics_Packet(void);
  416. void Check_From_WChat(char *wchat_name);
  417. bool Do_The_Internet_Menu_Thang (void);
  418. bool Server_Remote_Connect(void);
  419. bool Client_Remote_Connect(void);
  420. extern int UnitBuildPenalty;
  421. #endif //WIN32
  422. /*
  423. ** From SENDFILE.CPP - externs for scenario file transfers
  424. */
  425. bool Receive_Remote_File ( char *file_name, unsigned int file_length, unsigned int crc, int gametype);
  426. bool Send_Remote_File ( char *file_name, int gametype );
  427. bool Get_Scenario_File_From_Host(char *return_name, int gametype);
  428. bool Find_Local_Scenario (char *description, char *filename, unsigned int length, char *digest, bool official);
  429. #ifdef MPEGMOVIE // Denzil 6/15/98
  430. #ifdef MCIMPEG
  431. #include "mcimovie.h"
  432. extern MCIMovie* MciMovie;
  433. #endif
  434. #include "mpgset.h"
  435. extern MPGSettings* MpgSettings;
  436. #endif
  437. extern "C" bool MMXAvailable;
  438. extern bool ShareAllyVisibility;
  439. #endif