CnC_Remastered_Collection/REDALERT/FUNCTION.H

1088 lines
34 KiB
C++
Raw Normal View History

//
// 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/FUNCTION.H 2 3/13/97 2:05p 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 : FUNCTION.H *
* *
* Programmer : Joe L. Bostic *
* *
* Start Date : May 27, 1994 *
* *
* Last Update : May 27, 1994 [JLB] *
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifndef FUNCTION_H
#define FUNCTION_H
/*
** !!!DEFINE!!! "NDEBUG" if the assertion code is to be !!!REMOVED!!! from the project.
*/
//#define NDEBUG // ST - 5/13/2019
//#pragma warn -hid
#ifdef NEVER
Map (screen) class heirarchy.
MapeditClass (most derived class) -- scenario editor
<EFBFBD>
MouseClass -- handles mouse animation and display control
<EFBFBD>
ScrollClass -- map scroll handler
<EFBFBD>
HelpClass -- pop-up help text handler
<EFBFBD>
TabClass -- file folder tab screen mode control dispatcher
<EFBFBD>
SidebarClass -- displays and controls construction list sidebar
<EFBFBD>
PowerClass -- display power production/consumption bargraph
<EFBFBD>
RadarClass -- displays and controls radar map
<EFBFBD>
DisplayClass -- general tactical map display handler
<EFBFBD>
MapClass -- general tactical map data handler
<EFBFBD>
GScreenClass (pure virtual base class) -- generic screen control
AbstractClass
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
ObjectClass
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
AnimClass <EFBFBD> TemplateClass <EFBFBD> <EFBFBD><EFBFBD> FuseClass <EFBFBD> TerrainClass
<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD> FlyClass <EFBFBD>
<EFBFBD> <EFBFBD> BulletClass <EFBFBD>
OverlayClass MissionClass SmudgeClass
<EFBFBD>
RadioClass
<EFBFBD>
<EFBFBD><EFBFBD> CrewClass
<EFBFBD><EFBFBD> FlasherClass
<EFBFBD><EFBFBD> StageClass
<EFBFBD><EFBFBD> CargoClass
TechnoClass
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
FootClass BuildingClass
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
DriveClass InfantryClass <EFBFBD><EFBFBD> FlyClass
<EFBFBD> AircraftClass
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
<EFBFBD> <EFBFBD>
<EFBFBD> VesselClass
<EFBFBD>
UnitClass
AbstractTypeClass
<EFBFBD>
ObjectTypeClass
<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
TechnoTypeClass <EFBFBD> <EFBFBD> <EFBFBD>
<EFBFBD> BulletTypeClass <EFBFBD> <EFBFBD>
<EFBFBD> TemplateTypeClass <EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ TerrainTypeClass
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
UnitTypeClass <EFBFBD> BuildingTypeClass <EFBFBD> VesselTypeClass
<EFBFBD> <EFBFBD>
AircraftTypeClass InfantryTypeClass
#endif
#include "watcom.h"
#include "lint.h"
#ifdef WIN32
//#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define WWFILE_H
#define RAWFILE_H
#define MONOC_H
#define _MAX_NAME _MAX_FNAME
#endif
/*
** The "bool" integral type was defined by the C++ comittee in
** November of '94. Until the compiler supports this, use the following
** definition.
*/
#if (0)
#ifndef __BORLANDC__
#ifndef TRUE_FALSE_DEFINED
#define TRUE_FALSE_DEFINED
enum {false=0,true=1};
typedef int bool;
#endif
#endif
#endif
#ifndef BITMAPCLASS
#define BITMAPCLASS
class BitmapClass
{
public:
BitmapClass(int w, int h, unsigned char * data) :
Width(w), Height(h), Data(data) {};
int Width;
int Height;
unsigned char * Data;
};
class TPoint2D
{
public:
TPoint2D(int xx, int yy) : x(xx), y(yy) {};
TPoint2D(void) : x(0), y(0) {};
int x;
int y;
};
#endif
/**********************************************************************
** This class is solely used as a parameter to a constructor that does
** absolutely no initialization to the object being constructed. By using
** this method, it is possible to load and save data directly from a
** class that has virtual functions. The construction process automatically
** takes care of initializing the virtual function table pointer and the
** rest of the constructor doesn't initialize any data members. After loading
** into a class object, simply perform an in-place new operation.
*/
#ifndef NOINITCLASS
#define NOINITCLASS
struct NoInitClass {
public:
void operator () (void) const {};
};
#endif
#define FILE_H
#define WWMEM_H
#ifndef WIN32
#define TIMER_H
#endif
#ifdef WIN32
#include "key.h"
#endif
#include <wwlib32.h>
#include "mpu.h"
#include "bench.h"
#include "rect.h"
#include "jshell.h"
#include "buff.h"
#include "face.h"
#include "random.h"
#include "crc.h"
#include "compat.h"
#include "fixed.h"
#include "base64.h"
#include "pipe.h"
#include "xpipe.h"
#include "ramfile.h"
#include "lcw.h"
#include "lzw.h"
#include "lcwpipe.h"
#include "lzwpipe.h"
#include "lzopipe.h"
#include "crcpipe.h"
#include "shapipe.h"
#include "b64pipe.h"
#include "straw.h"
#include "xstraw.h"
#include "b64straw.h"
#include "lcwstraw.h"
#include "lzwstraw.h"
#include "lzostraw.h"
#include "crcstraw.h"
#include "shastraw.h"
#include "rndstraw.h"
// Should be part of WWLIB.H. This is used in JSHELL.CPP.
typedef struct {
unsigned char SourceColor;
unsigned char DestColor;
unsigned char Fading;
unsigned char reserved;
} TLucentType;
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
//#include <mem.h>
//#include <dos.h>
#include <direct.h>
#include <stdarg.h>
#include <ctype.h>
#include <assert.h>
#include <process.h>
//#include <new.h>
#ifdef WIN32
#define int386x(a,b,c,d) 0
#define int386(a,b,c) 0
#endif
/*
** VQ player specific includes.
*/
//#include <vqa32\vqaplay.h>
//#include <vqa32\vqafile.h>
extern bool GameActive;
extern long LParam;
#include <assert.h>
#include "vector.h"
#include "heap.h"
#include "ccfile.h"
#include "monoc.h"
#include "conquer.h"
//#include "debug.h"
#include "special.h"
#include "defines.h"
#include "ccini.h"
#include "ccptr.h"
#include "bar.h"
/*
** Greenleaf specific includes.
*/
//#include <modem.h>
//#include <fast.h>
extern long Frame;
CELL Coord_Cell(COORDINATE coord);
#include "utracker.h"
#include "crate.h"
#include "rules.h"
#include "ini.h"
#include "int.h"
#include "pk.h"
#include "pkpipe.h"
#include "pkstraw.h"
#include "sha.h"
#include "blowfish.h"
#include "blowpipe.h"
#include "blwstraw.h"
#include "language.h"
#include "hsv.h"
#include "rgb.h"
#include "palette.h"
#include "palettec.h" //ST 5/13/2019
#include "version.h"
#include "facing.h"
#include "ftimer.h"
#include "theme.h"
#include "link.h"
#include "gadget.h"
#include "control.h"
#include "toggle.h"
#include "checkbox.h"
#include "shapebtn.h"
#include "textbtn.h"
#include "statbtn.h"
#include "slider.h"
#include "list.h"
#include "drop.h"
#include "cheklist.h"
#include "colrlist.h"
#include "edit.h"
#include "gauge.h"
#include "msgbox.h"
#include "dial8.h"
#include "txtlabel.h"
#include "loaddlg.h"
#include "super.h"
#include "house.h"
#include "gscreen.h"
#include "map.h"
#include "display.h"
#include "radar.h"
#include "power.h"
#include "sidebar.h"
#include "tab.h"
#include "help.h"
#include "mouse.h"
#include "help.h"
#include "target.h"
#include "theme.h"
#include "team.h" // Team objects.
#include "warhead.h"
#include "weapon.h"
#include "trigtype.h"
#include "teamtype.h" // Team type objects.
#include "taction.h"
#include "tevent.h"
#include "trigger.h" // Trigger event objects.
#include "mapedit.h" // map editor class
#include "abstract.h"
#include "object.h"
#include "mission.h"
#include "door.h"
#include "bullet.h" // Bullet objects.
#include "terrain.h" // Terrain objects.
#include "anim.h" // Animation objects.
#include "template.h" // Icon template objects.
#include "overlay.h" // Overlay objects.
#include "smudge.h" // Stains on the terrain objects.
#include "aircraft.h" // Aircraft objects.
#include "unit.h" // Ground unit objects.
#include "vessel.h" // Sea unit objects.
#include "infantry.h" // Infantry objects.
#include "credits.h" // Credit counter class.
#include "score.h" // Scoring system class.
#include "factory.h" // Production manager class.
#include "intro.h"
#include "ending.h"
#include "logic.h"
#include "queue.h"
#include "event.h"
#include "base.h" // defines the AI's pre-built base
#include "carry.h"
#include "scenario.h"
#include "msglist.h" // Multiplayer chat message system
#include "session.h" // Multiplayer session class
//#include "phone.h" // Phone list manager
#include "ipxmgr.h" // IPX connection manager
//#include "nullmgr.h" // Modem connection manager
#include "readline.h"
#include "vortex.h"
#include "egos.h"
#ifdef WIN32
//#include "pcx.h"
#endif
#if(TEN)
#include "tenmgr.h"
#endif
#if(MPATH)
#ifdef WIN32
#include "mpmgrw.h"
#else
#include "mpmgrd.h"
#endif
#endif
// Denzil 5/18/98 - Mpeg movie playback
#ifdef MPEGMOVIE
bool InitDDraw(void);
bool PlayMpegMovie(const char* name);
#endif
#include "externs.h"
extern int Get_CD_Drive(void);
extern void Fatal(char const *message, ...);
#ifdef WIN32
/*
** For WIN32, replace the assert macro so we get an error on the debugger screen
** where we can see it.
**
*/
#ifndef __BORLANDC__
#ifdef assert
#undef assert
#endif //assert
void Assert_Failure (char *expression, int line, char *file);
#ifdef NDEBUG
#define assert(__ignore) ((void)0)
#else
#define assert(expr) ((expr)?(void)0:Assert_Failure(#expr,__LINE__,__FILE__))
#endif //NDEBUG
#endif //__BORLANDC__
extern void Free_Interpolated_Palettes(void);
extern int Load_Interpolated_Palettes(char const *filename, BOOL add=FALSE);
extern void Rebuild_Interpolated_Palette(unsigned char *interpal);
extern void Interpolate_2X_Scale( GraphicBufferClass *source, GraphicViewPortClass *dest ,char const *palette_file_name);
void Increase_Palette_Luminance (unsigned char *palette , int red_percentage , int green_percentage , int blue_percentage ,int cap);
#endif
/*
** ADATA.CPP
*/
char const * Anim_Name(AnimType anim);
/*
** AIRCRAFT.CPP
*/
bool Building_Check(void);
/*
** ANIM.CPP
*/
void Shorten_Attached_Anims(ObjectClass * obj);
AnimType Anim_From_Name(char const * name);
/*
** AUDIO.CPP
*/
VocType Voc_From_Name(char const * name);
char const * Speech_Name(VoxType speech);
char const * Voc_Name(VocType voc);
int Sound_Effect(VocType voc, fixed volume=1, int variation=1, signed short panvalue=0, HousesType house=HOUSE_NONE);
// void Speak(VoxType voice); // MBL 02.06.2020
void Speak(VoxType voice, HouseClass *house=NULL, COORDINATE coord=0);
void Speak_AI(void);
void Stop_Speaking(void);
void Sound_Effect(VocType voc, COORDINATE coord, int variation=1, HousesType house=HOUSE_NONE);
bool Is_Speaking(void);
/*
** CDFILE.CPP
*/
#ifdef WIN32
int harderr_handler(unsigned, unsigned, unsigned *);
#else
int harderr_handler(unsigned, unsigned, unsigned __far *);
#endif
/*
** COMBAT.CPP
*/
int Modify_Damage(int damage, WarheadType warhead, ArmorType armor, int distance);
void Explosion_Damage(COORDINATE coord, int strength, TechnoClass * source, WarheadType warhead);
AnimType Combat_Anim(int damage, WarheadType warhead, LandType land);
void Wide_Area_Damage(COORDINATE coord, LEPTON radius, int damage, TechnoClass * source, WarheadType warhead);
/*
** CONQUER.CPP
*/
void List_Copy(short const * source, int len, short * dest);
int Get_CD_Index (int cd_drive, int timeout);
int Owner_From_Name(char const * text);
CrateType Crate_From_Name(char const * name);
Rect const Shape_Dimensions(void const * shapedata, int shapenum);
void IPX_Call_Back(void);
bool Is_Counterstrike_Installed (void);
#ifdef FIXIT_CSII // checked - ajw 9/28/98
bool Is_Aftermath_Installed (void);
#endif
#if(TEN)
void Ten_Call_Back(void);
#endif // TEN
#if(MPATH)
void MPATH_Call_Back(void);
#endif // MPATH
#define ALWAYS_RELOAD_CD 1000
void Center_About_Objects(void);
bool Force_CD_Available(int cd);
void Handle_View(int view, int action=0);
void Handle_Team(int team, int action=0);
TechnoTypeClass const * Fetch_Techno_Type(RTTIType type, int id);
char const * Fading_Table_Name(char const * base, TheaterType theater);
void Unselect_All(void);
void Unselect_All_Except(ObjectClass* object);
void Play_Movie(char const * name, ThemeType theme=THEME_NONE, bool clrscrn=true, bool immediate = false);
void Play_Movie(VQType name, ThemeType theme=THEME_NONE, bool clrscrn=true, bool immediate=false);
bool Main_Loop(void);
TheaterType Theater_From_Name(char const * name);
void Main_Game(int argc, char * argv[]);
long VQ_Call_Back(unsigned char * buffer=NULL, long frame=0);
void Call_Back(void);
char const *Language_Name(char const * basename);
SourceType Source_From_Name(char const * name);
char const *Name_From_Source(SourceType source);
FacingType KN_To_Facing(int input);
void const *Get_Radar_Icon(void const * shapefile, int shapenum, int frames, int zoomfactor);
//void CC_Draw_Shape(ObjectClass *object, void const * shapefile, int shapenum, int x, int y, WindowNumberType window, ShapeFlags_Type flags, void const * fadingdata=0, void const * ghostdata=0, DirType rotation=DIR_N, long scale=0x0100);
void CC_Draw_Shape(void const * shapefile, int shapenum, int x, int y, WindowNumberType window, ShapeFlags_Type flags, void const * fadingdata = 0, void const * ghostdata = 0, DirType rotation = DIR_N);
// Added for draw intercept. ST - 1/17/2019 12:31PM
void CC_Draw_Shape(const ObjectClass *object, void const * shapefile, int shapenum, int x, int y, WindowNumberType window, ShapeFlags_Type flags, void const * fadingdata = 0, void const * ghostdata = 0, DirType rotation = DIR_N, long virtualscale = 0x0100);
void CC_Draw_Shape(const ObjectClass *object, const char *shape_file_name, void const * shapefile, int shapenum, int x, int y, WindowNumberType window, ShapeFlags_Type flags, void const * fadingdata = 0, void const * ghostdata = 0, DirType rotation = DIR_N, long virtualscale = 0x0100, char override_owner = HOUSE_NONE);
// Added for pip draw intercept - SKY
void CC_Draw_Pip(const ObjectClass *object, void const * shapefile, int shapenum, int x, int y, WindowNumberType window, ShapeFlags_Type flags, void const * fadingdata = 0, void const * ghostdata = 0, DirType rotation = DIR_N);
void Go_Editor(bool flag);
//long MixFileHandler(VQAHandle * vqa, long action, void * buffer, long nbytes);
char *CC_Get_Shape_Filename(void const * shapeptr );
void CC_Add_Shape_To_Global(void const * shapeptr, char * filename, char code );
void Bubba_Print(char * format,...);
void Heap_Dump_Check(char * string );
void Dump_Heap_Pointers(void);
unsigned long Disk_Space_Available(void);
void * Hires_Load(char * name);
void Shake_The_Screen(int shakes, HousesType house = HOUSE_NONE);
/*
** COORD.CPP
*/
short const * Coord_Spillage_List(COORDINATE coord, Rect const & rect, bool nocenter=true);
void Normal_Move_Point(short &x, short &y, register DirType dir, unsigned short distance);
void Move_Point(short &x, short &y, register DirType dir, unsigned short distance);
COORDINATE Coord_Move(COORDINATE start, DirType facing, unsigned short distance);
COORDINATE Coord_Scatter(COORDINATE coord, unsigned distance, bool lock=false);
DirType Direction(CELL cell1, CELL cell2);
DirType Direction(COORDINATE coord1, COORDINATE coord2);
DirType Direction256(COORDINATE coord1, COORDINATE coord2);
DirType Direction8(COORDINATE coord1, COORDINATE coord2);
int Distance(COORDINATE coord1, COORDINATE coord2);
int Distance(TARGET target1, TARGET target2);
short const * Coord_Spillage_List(COORDINATE coord, int maxsize);
/*
** DEBUG.CPP
*/
void Log_Event(char const *text, ...);
void Debug_Key(unsigned input);
void Self_Regulate(void);
/*
** DIALOG.CPP
*/
void Draw_Caption(int text, int x, int y, int w);
void Draw_Caption(char const * text, int x, int y, int w);
int Format_Window_String(char * string, int maxlinelen, int & width, int & height);
extern void Dialog_Box(int x, int y, int w, int h);
void Conquer_Clip_Text_Print(char const *, unsigned x, unsigned y, RemapControlType * fore, unsigned back=(unsigned)TBLACK, TextPrintType flag=TPF_8POINT|TPF_DROPSHADOW, int width=-1, int const * tabs=0);
void Draw_Box(int x, int y, int w, int h, BoxStyleEnum up, bool filled);
int cdecl Dialog_Message(char *errormsg, ...);
void Window_Box(WindowNumberType window, BoxStyleEnum style);
void Fancy_Text_Print(char const *text, unsigned x, unsigned y, RemapControlType * fore, unsigned back, TextPrintType flag, ...);
void Fancy_Text_Print(int text, unsigned x, unsigned y, RemapControlType * fore, unsigned back, TextPrintType flag, ...);
void Simple_Text_Print(char const *text, unsigned x, unsigned y, RemapControlType * fore, unsigned back, TextPrintType flag);
void Plain_Text_Print(int text, unsigned x, unsigned y, unsigned fore, unsigned back, TextPrintType flag, ...);
void Plain_Text_Print(char const *text, unsigned x, unsigned y, unsigned fore, unsigned back, TextPrintType flag, ...);
/*
** DISPLAY.CPP
*/
ObjectClass* Best_Object_With_Action(DynamicVectorClass<ObjectClass*>& objects, const ObjectClass* object);
ObjectClass* Best_Object_With_Action(DynamicVectorClass<ObjectClass*>& objects, CELL cell);
ActionType Best_Object_Action(DynamicVectorClass<ObjectClass*>& objects, const ObjectClass* object);
ActionType Best_Object_Action(DynamicVectorClass<ObjectClass*>& objects, CELL cell);
ObjectClass* Best_Object_With_Action(const ObjectClass* object);
ObjectClass* Best_Object_With_Action(CELL cell);
ActionType Best_Object_Action(const ObjectClass* object);
ActionType Best_Object_Action(CELL cell);
/*
** ENDING.CPP
*/
void GDI_Ending(void);
void Nod_Ending(void);
/*
** EXPAND.CPP
*/
bool Expansion_Present(void);
bool Expansion_Dialog(void);
bool Expansion_CS_Present(void);
#ifdef FIXIT_CSII // checked - ajw 9/28/98
bool Expansion_AM_Present(void);
#endif
/*
** FINDPATH.CPP
*/
int Optimize_Moves(PathType *path, int (*callback)(CELL, FacingType), int threshhold);
/*
** GOPTIONS.CPP
*/
/*
** INI.CPP
*/
void Write_Scenario_INI(char *root);
bool Read_Scenario_INI(char *root, bool fresh=true);
int Scan_Place_Object(ObjectClass *obj, CELL cell);
void Assign_Houses(void);
/*
** INIBIN.CPP
*/
unsigned long Ini_Binary_Version( void );
bool Read_Scenario_INB( CCFileClass *file, char *root, bool fresh );
bool Valid_Scenario_INB( CCFileClass *file );
/*
** INICODE.CPP
*/
bool Read_Scenario_INI_Write_INB( char *root, bool fresh );
/*
** INIT.CPP
*/
void Load_Title_Page(bool visible=false);
long Obfuscate(char const * string);
void Anim_Init(void);
bool Init_Game(int argc, char *argv[]);
bool Select_Game(bool fade = false);
bool Parse_Command_Line(int argc, char *argv[]);
void Parse_INI_File(void);
/*
** INTERPAL.CPP
*/
#define SIZE_OF_PALETTE 256
extern "C" unsigned char *InterpolationPalette;
extern BOOL InterpolationPaletteChanged;
extern void Interpolate_2X_Scale( GraphicBufferClass *source, GraphicViewPortClass *dest ,char const *palette_file_name);
void Read_Interpolation_Palette (char const *palette_file_name);
void Write_Interpolation_Palette (char const *palette_file_name);
void Increase_Palette_Luminance(unsigned char *InterpolationPalette , int RedPercentage ,int GreenPercentage ,int BluePercentage ,int cap);
extern "C"{
extern unsigned char PaletteInterpolationTable[SIZE_OF_PALETTE][SIZE_OF_PALETTE];
extern unsigned char *InterpolationPalette;
void __cdecl Asm_Create_Palette_Interpolation_Table(void);
}
/*
** JSHELL.CPP
*/
int Load_Picture(char const *filename, BufferClass& scratchbuf, BufferClass& destbuf, unsigned char *palette, PicturePlaneType format);
void * Conquer_Build_Fading_Table(PaletteClass const & palette, void *dest, int color, int frac);
void * Small_Icon(void const * iconptr, int iconnum);
void Set_Window(int window, int x, int y, int w, int h);
void * Load_Alloc_Data(FileClass &file);
long Load_Uncompress(FileClass &file, BuffType &uncomp_buff, BuffType &dest_buff, void *reserved_data);
long Translucent_Table_Size(int count);
void *Build_Translucent_Table(PaletteClass const & palette, TLucentType const *control, int count, void *buffer);
void *Conquer_Build_Translucent_Table(PaletteClass const & palette, TLucentType const *control, int count, void *buffer);
void * Make_Fading_Table(PaletteClass const & palette, void * dest, int color, int frac);
/*
** KEYFBUFF.ASM
*/
extern "C" {
long __cdecl Buffer_Frame_To_Page(int x, int y, int w, int h, void *Buffer, GraphicViewPortClass &view, int flags, ...);
}
/*
** KEYFRAME.CPP
*/
unsigned long Build_Frame(void const *dataptr, unsigned short framenumber, void *buffptr);
unsigned short Get_Build_Frame_Count(void const *dataptr);
unsigned short Get_Build_Frame_X(void const *dataptr);
unsigned short Get_Build_Frame_Y(void const *dataptr);
unsigned short Get_Build_Frame_Width(void const *dataptr);
unsigned short Get_Build_Frame_Height(void const *dataptr);
bool Get_Build_Frame_Palette(void const *dataptr, void *palette);
int Get_Last_Frame_Length(void);
/*
** MAP.CPP
*/
int Terrain_Cost(CELL cell, FacingType facing);
int Coord_Spillage_Number(COORDINATE coord, int maxsize);
/*
** MENUS.CPP
*/
void Setup_Menu(int menu, char const *text[], unsigned long field, int index, int skip);
int Check_Menu(int menu, char const *text[], char *selection, long field, int index);
int Do_Menu(char const **strings, bool blue);
extern int UnknownKey;
int Main_Menu(unsigned long timeout);
/*
** MPLAYER.CPP
*/
GameType Select_MPlayer_Game (void);
void Clear_Listbox(ListClass *list);
void Clear_Vector(DynamicVectorClass <NodeNameType *> *vector);
void Computer_Message(void);
int Surrender_Dialog(int text);
#ifdef FIXIT_VERSION_3 // Stalemate games.
int Surrender_Dialog(const char* text);
bool Determine_If_Using_DVD();
bool Using_DVD();
#endif
int Abort_Dialog(void);
#if(TEN)
int Read_TEN_Game_Options(void);
#endif // TEN
#if(MPATH)
int Read_MPATH_Game_Options(void);
#endif // MPATH
#if(TEN)
/*
** CCTEN.CPP
*/
int Init_TEN(void);
void Shutdown_TEN(void);
void Connect_TEN(void);
void Destroy_TEN_Connection(int id, int error);
void Send_TEN_Win_Packet(void);
void Send_TEN_Alliance(char *whom, int ally);
void Send_TEN_Out_Of_Sync(void);
void Send_TEN_Packet_Too_Late(void);
#endif // TEN
#if(MPATH)
/*
** CCMPATH.CPP
*/
int Init_MPATH(void);
void Shutdown_MPATH(void);
void Connect_MPATH(void);
void Destroy_MPATH_Connection(int id, int error);
#endif // MPATH
/*
** NETDLG.CPP
*/
bool Init_Network (void);
void Shutdown_Network (void);
bool Remote_Connect (void);
void Destroy_Connection(int id, int error);
bool Process_Global_Packet(GlobalPacketType *packet, IPXAddressClass *address);
unsigned long Compute_Name_CRC(char *name);
void Net_Reconnect_Dialog(int reconn, int fresh, int oldest_index, unsigned long timeval);
/*
** NULLDLG.CPP
*/
int Init_Null_Modem( SerialSettingsType *settings );
void Shutdown_Modem( void );
void Modem_Signoff( void );
int Test_Null_Modem( void );
int Reconnect_Modem( void );
void Destroy_Null_Connection(int id, int error);
GameType Select_Serial_Dialog( void );
int Com_Scenario_Dialog(bool skirmish=false);
int Com_Show_Scenario_Dialog(void);
void Smart_Printf( char *format, ... );
void Hex_Dump_Data( char *buffer, int length );
void itoh( int i, char *s);
void Log_Start_Time( char *string );
void Log_End_Time( char *string );
void Log_Time( char *string );
void Log_Start_Nest_Time( char *string );
void Log_End_Nest_Time( char *string );
/*
** OBJECT.CPP
*/
/*
** PROFILE.CPP
*/
int WWGetPrivateProfileInt(char const *section, char const *entry, int def, char *profile);
bool WWWritePrivateProfileInt(char const *section, char const *entry, int value, char *profile);
bool WWWritePrivateProfileString(char const *section, char const *entry, char const *string, char *profile);
char * WWGetPrivateProfileString(char const *section, char const *entry, char const *def, char *retbuffer, int retlen, char const * profile);
unsigned WWGetPrivateProfileHex (char const *section, char const *entry, char * profile);
char *Read_Bin_Buffer( void );
bool Read_Bin_Init( char *buffer, int length );
int Read_Bin_Length( char *buffer );
bool Read_Bin_Num( void *num, int length, char *buffer );
int Read_Bin_Pos( char *buffer );
int Read_Bin_PosSet( unsigned int pos, char *buffer );
bool Read_Bin_String( char *string, char *buffer );
char *Write_Bin_Buffer( void );
bool Write_Bin_Init( char *buffer, int length );
int Write_Bin_Length( char *buffer );
bool Write_Bin_Num( void *num, int length, char *buffer );
int Write_Bin_Pos( char *buffer );
int Write_Bin_PosSet( unsigned int pos, char *buffer );
bool Write_Bin_String( char *string, int length, char *buffer );
/*
** QUEUE.CPP
*/
bool Queue_Target(TargetClass whom, TARGET target);
bool Queue_Destination(TargetClass whom, TARGET target);
bool Queue_Mission(TargetClass whom, MissionType mission);
bool Queue_Mission(TargetClass whom, MissionType mission, TARGET target, TARGET destination);
bool Queue_Mission(TargetClass whom, MissionType mission, TARGET target, TARGET destination, SpeedType speed, MPHType maxspeed);
bool Queue_Options(void);
bool Queue_Exit(void);
void Queue_AI(void);
void Add_CRC(unsigned long *crc, unsigned long val);
/*
** RANDOM.CPP
*/
/*
** REINF.CPP
*/
bool Do_Reinforcements(TeamTypeClass const * team);
bool Create_Special_Reinforcement(HouseClass * house, TechnoTypeClass const * type, TechnoTypeClass const * another, TeamMissionType mission = TMISSION_NONE, int argument =0);
int Create_Air_Reinforcement(HouseClass *house, AircraftType air, int number, MissionType mission, TARGET tarcom, TARGET navcom, InfantryType passenger=INFANTRY_NONE);
/*
** ROTBMP.CPP
*/
int Rotate_Bitmap(GraphicViewPortClass *srcvp,GraphicViewPortClass *destvp,int angle);
/*
** RULES.CPP
*/
bool Is_MCV_Deploy();
/*
** SAVELOAD.CPP
*/
bool Load_Misc_Values(Straw & file);
bool Save_Misc_Values(Pipe & file);
bool Load_MPlayer_Values(Straw & file);
bool Save_MPlayer_Values(Pipe & file);
bool Get_Savefile_Info(int id, char * buf, unsigned * scenp, HousesType * housep);
bool Load_Game(int id);
bool Load_Game(const char *file_name);
//bool Read_Object (void * ptr, int base_size, int class_size, FileClass & file, void * vtable); // Original Read_Object prototype. ST - 9/17/2019 12:50PM
bool Read_Object(void *ptr, int class_size, FileClass & file, bool has_vtable);
bool Save_Game(int id, char const * descr, bool bargraph=false);
bool Save_Game(const char *file_name, const char *descr);
bool Write_Object (void * ptr, int class_size, FileClass & file);
void Code_All_Pointers(void);
void Decode_All_Pointers(void);
void Dump(void);
/*
** SCENARIO.CPP
*/
void Disect_Scenario_Name(char const * name, int & scenario, ScenarioPlayerType & player, ScenarioDirType & dir, ScenarioVarType & var);
void Post_Load_Game(int load_net);
bool End_Game(void);
bool Read_Scenario(char *root);
bool Start_Scenario(char *root, bool briefing=true);
void Set_Scenario_Difficulty(int difficulty);
HousesType Select_House(void);
void Clear_Scenario(void);
void Do_Briefing(char const * text);
void Do_Lose(void);
void Do_Win(void);
void Do_Restart(void);
void Fill_In_Data(void);
bool Restate_Mission(char const * name, int button1, int button2);
int BGMessageBox(char const *text, int button1, int button2);
/*
** SCORE.CPP
*/
char const * Map_Selection(void);
void Bit_It_In(int x, int y, int w, int h, GraphicBufferClass *src, GraphicBufferClass *dest, int delay=0, int dagger=0);
void Call_Back_Delay(int time);
int Alloc_Object(ScoreAnimClass *obj);
/*
** SPECIAL.CPP
*/
void Special_Dialog(bool simple=false);
char const * Fetch_Password(int caption, int message, int btext=TXT_OK);
#ifdef FIXIT_CSII // checked - ajw 9/28/98
int Fetch_Difficulty(bool amath=false);
#else
int Fetch_Difficulty(void);
#endif
/*
** STARTUP.CPP
*/
void Print_Error_End_Exit(char *string);
void Emergency_Exit ( int code );
/*
** SUPPORT.ASM
*/
/*
** TARGET.CPP
*/
TechnoTypeClass const * As_TechnoType(TARGET target);
COORDINATE As_Movement_Coord(TARGET target);
AircraftClass * As_Aircraft(TARGET target, bool check_active = true);
AnimClass * As_Animation(TARGET target, bool check_active = true);
BuildingClass * As_Building(TARGET target, bool check_active = true);
BulletClass * As_Bullet(TARGET target, bool check_active = true);
CELL As_Cell(TARGET target);
COORDINATE As_Coord(TARGET target);
InfantryClass * As_Infantry(TARGET target, bool check_active = true);
TeamClass * As_Team(TARGET target, bool check_active = true);
TeamTypeClass * As_TeamType(TARGET target);
TechnoClass * As_Techno(TARGET target, bool check_active = true);
TriggerClass * As_Trigger(TARGET target, bool check_active = true);
TriggerTypeClass * As_TriggerType(TARGET target);
UnitClass * As_Unit(TARGET target, bool check_active = true);
VesselClass * As_Vessel(TARGET target, bool check_active = true);
bool Target_Legal(TARGET target);
ObjectClass * As_Object(TARGET target, bool check_active = true);
/*
** TEAMTYPE.CPP
*/
NeedType TeamMission_Needs(TeamMissionType tmtype);
/*
** TRACKER.CPP
*/
void Detach_This_From_All(TARGET target, bool all=true);
/*
** TRIGGER.CPP
*/
TriggerClass * Find_Or_Make(TriggerTypeClass * trigtype);
/*
** ULOGIC.CPP
*/
int Terrain_Cost(CELL cell, FacingType facing);
/*
** VERSION.CPP
*/
char const * Version_Name(void);
/*
** WEAPON.CPP
*/
WeaponType Weapon_From_Name(char const * name);
ArmorType Armor_From_Name(char const * name);
/*
** Winstub.cpp
*/
void Load_Title_Screen(char *name, GraphicViewPortClass *video_page, unsigned char *palette);
/*
** Egos.CPP
*/
void Show_Who_Was_Responsible (void);
//
// We need to know when the visible page changes
// ST - 1/4/2019 10:31AM
//
void Blit_Hid_Page_To_Seen_Buff(void);
extern bool RunningAsDLL;
extern bool RunningFromEditor;
#include "inline.h"
/*
** These declarations ensure that the templates will be expanded for these specified
** types. Doing this is required because some of the body functions for this template class
** are located in a .CPP module. Doing so results in faster compilation but requires declarations
** such as this for all types that will be required. There are no actual objects of with these
** names ever created, however there are other objects of this type (with different names) that
** are created.
*/
extern CCPtr<AircraftClass> _wefwefy1; // Previus definition was function???
extern CCPtr<AnimClass> y2;
extern CCPtr<BuildingClass> y3;
extern CCPtr<BulletClass> y4;
extern CCPtr<FactoryClass> y5;
extern CCPtr<HouseClass> y6;
extern CCPtr<InfantryClass> y7;
extern CCPtr<OverlayClass> y8;
extern CCPtr<SmudgeClass> y9;
extern CCPtr<TeamClass> y10;
extern CCPtr<TeamTypeClass> y11;
extern CCPtr<TemplateClass> y12;
extern CCPtr<TerrainClass> y13;
extern CCPtr<TriggerClass> y14;
extern CCPtr<TriggerTypeClass> y15;
extern CCPtr<HouseTypeClass> y16;
extern CCPtr<BuildingTypeClass> y17;
extern CCPtr<AircraftTypeClass> y18;
extern CCPtr<InfantryTypeClass> y19;
extern CCPtr<BulletTypeClass> y20;
extern CCPtr<AnimTypeClass> y21;
extern CCPtr<UnitTypeClass> y22;
extern CCPtr<VesselTypeClass> y23;
extern CCPtr<TemplateTypeClass> y24;
extern CCPtr<TerrainTypeClass> y25;
extern CCPtr<OverlayTypeClass> y26;
extern CCPtr<SmudgeTypeClass> y27;
template <> class DynamicVectorClass<CCPtr<TeamTypeClass> >;
extern DynamicVectorClass<CCPtr<TeamTypeClass> > y002;
template <>class DynamicVectorClass<CCPtr<TriggerTypeClass> >;
extern DynamicVectorClass<CCPtr<TriggerTypeClass> > y001;
template <>class DynamicVectorClass<TeamMissionClass *>;
extern DynamicVectorClass<TeamMissionClass *> xxx1;
template <>class DynamicVectorClass<EventChoiceClass *>;
extern DynamicVectorClass<EventChoiceClass *> xxx2;
template <>class DynamicVectorClass<ActionChoiceClass *>;
extern DynamicVectorClass<ActionChoiceClass *> xxx3;
template <>class DynamicVectorClass<EgoClass *>;
extern DynamicVectorClass<EgoClass *> whatever;
/*
** Debug output. ST - 6/27/2019 10:00PM
*/
void GlyphX_Debug_Print(const char *debug_text);
void Disable_Uncompressed_Shapes (void);
void Enable_Uncompressed_Shapes (void);
/*
** Achievement event. ST - 11/11/2019 11:39AM
*/
void On_Achievement_Event(const HouseClass* player_ptr, const char *achievement_type, const char *achievement_reason);
#endif