/*
=============================================================================
WL_MAIN DEFINITIONS
=============================================================================
*/
extern boolean MS_CheckParm (char far *string);
extern char str[80],str2[20];
extern int tedlevelnum;
extern boolean tedlevel;
extern boolean nospr;
extern boolean IsA386;
extern byte far *scalermemory;
extern fixed focallength;
extern unsigned viewangles;
extern unsigned screenofs;
extern int viewwidth;
extern int viewheight;
extern int centerx;
extern int shootdelta;
extern int dirangle[9];
extern boolean startgame,loadedgame,virtualreality;
extern int mouseadjustment;
//
// math tables
//
extern int pixelangle[MAXVIEWWIDTH];
extern long far finetangent[FINEANGLES/4];
extern fixed far sintable[],far *costable;
//
// derived constants
//
extern fixed scale,maxslope;
extern long heightnumerator;
extern int minheightdiv;
extern char configname[13];
void HelpScreens (void);
void OrderingInfo (void);
void TEDDeath(void);
void Quit (char *error);
void CalcProjection (long focal);
boolean SetViewSize (unsigned width, unsigned height);
void NewGame (int difficulty,int episode);
void NewViewSize (int width);
boolean LoadTheGame(int file,int x,int y);
boolean SaveTheGame(int file,int x,int y);
void ShowViewSize (int width);
void ShutdownId (void);
/*
=============================================================================
WL_GAME DEFINITIONS
=============================================================================
*/
extern boolean ingame,fizzlein;
extern unsigned latchpics[NUMLATCHPICS];
extern gametype gamestate;
extern int doornum;
extern char demoname[13];
extern long spearx,speary;
extern unsigned spearangle;
extern boolean spearflag;
void DrawPlayBorder (void);
void ScanInfoPlane (void);
void SetupGameLevel (void);
void NormalScreen (void);
void DrawPlayScreen (void);
void FizzleOut (void);
void GameLoop (void);
void ClearMemory (void);
void PlayDemo (int demonumber);
void RecordDemo (void);
void DrawAllPlayBorder (void);
void DrawHighScores(void);
void DrawAllPlayBorderSides (void);
// JAB
#define PlaySoundLocTile(s,tx,ty)
PlaySoundLocGlobal(s,(((long)(tx) TILESHIFT) + (1L (TILESHIFT - 1))),
(((long)ty TILESHIFT) + (1L (TILESHIFT - 1))))
#define PlaySoundLocActor(s,ob) PlaySoundLocGlobal(s,(ob)->x,(ob)->y)
void PlaySoundLocGlobal(word s,fixed gx,fixed gy);
void UpdateSoundLoc(void);
/*
=============================================================================
WL_PLAY DEFINITIONS
=============================================================================
*/
#ifdef SPEAR
extern long funnyticount; // FOR FUNNY BJ FACE
#endif
extern exit_t playstate;
extern boolean madenoise;
extern objtype objlist[MAXACTORS],*new,*obj,*player,*lastobj,
*objfreelist,*killerobj;
extern statobj_t statobjlist[MAXSTATS],*laststatobj;
extern doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;
extern unsigned farmapylookup[MAPSIZE];
extern byte *nearmapylookup[MAPSIZE];
extern byte tilemap[MAPSIZE][MAPSIZE]; // wall values only
extern byte spotvis[MAPSIZE][MAPSIZE];
extern objtype *actorat[MAPSIZE][MAPSIZE];
#define UPDATESIZE (UPDATEWIDE*UPDATEHIGH)
extern byte update[UPDATESIZE];
extern boolean singlestep,godmode,noclip;
extern int extravbls;
//
// control info
//
extern boolean mouseenabled,joystickenabled,joypadenabled,joystickprogressive;
extern int joystickport;
extern int dirscan[4];
extern int buttonscan[NUMBUTTONS];
extern int buttonmouse[4];
extern int buttonjoy[4];
extern boolean buttonheld[NUMBUTTONS];
extern int viewsize;
//
// curent user input
//
extern int controlx,controly; // range from -100 to 100
extern boolean buttonstate[NUMBUTTONS];
extern boolean demorecord,demoplayback;
extern char far *demoptr, far *lastdemoptr;
extern memptr demobuffer;
void InitRedShifts (void);
void FinishPaletteShifts (void);
void CenterWindow(word w,word h);
void InitActorList (void);
void GetNewActor (void);
void RemoveObj (objtype *gone);
void PollControls (void);
void StopMusic(void);
void StartMusic(void);
void PlayLoop (void);
void StartDamageFlash (int damage);
void StartBonusFlash (void);
/*
=============================================================================
WL_INTER
>=============================================================================
*/
void IntroScreen (void);
void PreloadGraphics(void);
void LevelCompleted (void);
void CheckHighScore (long score,word other);
void Victory (void);
void ClearSplitVWB (void);
/*
=============================================================================
WL_DEBUG
=============================================================================
*/
int DebugKeys (void);
void PicturePause (void);
/*
=============================================================================
WL_DRAW DEFINITIONS
=============================================================================
*/
extern unsigned screenloc[3];
extern unsigned freelatch;
extern long lasttimecount;
extern long frameon;
extern boolean fizzlein;
extern unsigned wallheight[MAXVIEWWIDTH];
extern fixed tileglobal;
extern fixed focallength;
extern fixed mindist;
//
// math tables
//
extern int pixelangle[MAXVIEWWIDTH];
extern long far finetangent[FINEANGLES/4];
extern fixed far sintable[],far *costable;
//
// derived constants
//
extern fixed scale;
extern long heightnumerator,mindist;
//
// refresh variables
//
extern fixed viewx,viewy; // the focal point
extern int viewangle;
extern fixed viewsin,viewcos;
extern long postsource;
extern unsigned postx;
extern unsigned postwidth;
extern int horizwall[],vertwall[];
extern unsigned pwallpos;
fixed FixedByFrac (fixed a, fixed b);
void TransformActor (objtype *ob);
void BuildTables (void);
void ClearScreen (void);
int CalcRotate (objtype *ob);
void DrawScaleds (void);
void CalcTics (void);
void FixOfs (void);
void ThreeDRefresh (void);
void FarScalePost (void);
/*
=============================================================================
WL_STATE DEFINITIONS
=============================================================================
*/
#define TURNTICS 10
#define SPDPATROL 512
#define SPDDOG 1500
extern dirtype opposite[9];
extern dirtype diagonal[9][9];
void InitHitRect (objtype *ob, unsigned radius);
void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);
void NewState (objtype *ob, statetype *state);
boolean TryWalk (objtype *ob);
void SelectChaseDir (objtype *ob);
void SelectDodgeDir (objtype *ob);
void SelectRunDir (objtype *ob);
void MoveObj (objtype *ob, long move);
boolean SightPlayer (objtype *ob);
void KillActor (objtype *ob);
void DamageActor (objtype *ob, unsigned damage);
boolean CheckLine (objtype *ob);
boolean CheckSight (objtype *ob);
/*
=============================================================================
WL_SCALE DEFINITIONS
=============================================================================
*/
#define COMPSCALECODESTART (65*4) // offset to start of code in comp scaler
typedef struct
{
unsigned codeofs[65];
unsigned width[65];
byte code[];
} t_compscale;
typedef struct
{
unsigned leftpix,rightpix;
unsigned dataofs[64];
// table data after dataofs[rightpix-leftpix+1]
} t_compshape;
extern t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1];
extern long fullscalefarcall[MAXSCALEHEIGHT+1];
extern byte bitmasks1[8][8];
extern byte bitmasks2[8][8];
extern unsigned wordmasks[8][8];
extern byte mapmasks1[4][8];
extern byte mapmasks2[4][8];
extern byte mapmasks3[4][8];
extern int maxscale,maxscaleshl2;
extern boolean insetupscaling;
void SetupScaling (int maxscaleheight);
void ScaleShape (int xcenter, int shapenum, unsigned height);
void SimpleScaleShape (int xcenter, int shapenum, unsigned height);
/*
=============================================================================
WL_AGENT DEFINITIONS
=============================================================================
*/
//
// player state info
//
extern boolean running;
extern long thrustspeed;
extern unsigned plux,pluy; // player coordinates scaled to unsigned
extern int anglefrac;
extern int facecount;
void SpawnPlayer (int tilex, int tiley, int dir);
void DrawFace (void);
void DrawHealth (void);
void TakeDamage (int points,objtype *attacker);
void HealSelf (int points);
void DrawLevel (void);
void DrawLives (void);
void GiveExtraMan (void);
void DrawScore (void);
void GivePoints (long points);
void DrawWeapon (void);
void DrawKeys (void);
void GiveWeapon (int weapon);
void DrawAmmo (void);
void GiveAmmo (int ammo);
void GiveKey (int key);
void GetBonus (statobj_t *check);
void Thrust (int angle, long speed);
/*
=============================================================================
WL_ACT1 DEFINITIONS
=============================================================================
*/
extern doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;
extern int doornum;
extern unsigned doorposition[MAXDOORS],pwallstate;
extern byte far areaconnect[NUMAREAS][NUMAREAS];
extern boolean areabyplayer[NUMAREAS];
extern unsigned pwallstate;
extern unsigned pwallpos; // amount a pushable wall has been moved (0-63)
extern unsigned pwallx,pwally;
extern int pwalldir;
void InitDoorList (void);
void InitStaticList (void);
void SpawnStatic (int tilex, int tiley, int type);
void SpawnDoor (int tilex, int tiley, boolean vertical, int lock);
void MoveDoors (void);
void MovePWalls (void);
void OpenDoor (int door);
void PlaceItemType (int itemtype, int tilex, int tiley);
void PushWall (int checkx, int checky, int dir);
void OperateDoor (int door);
void InitAreas (void);
/*
=============================================================================
WL_ACT2 DEFINITIONS
=============================================================================
*/
#define s_nakedbody s_static10
extern statetype s_grddie1;
extern statetype s_dogdie1;
extern statetype s_ofcdie1;
extern statetype s_mutdie1;
extern statetype s_ssdie1;
extern statetype s_bossdie1;
extern statetype s_schabbdie1;
extern statetype s_fakedie1;
extern statetype s_mechadie1;
extern statetype s_hitlerdie1;
extern statetype s_greteldie1;
extern statetype s_giftdie1;
extern statetype s_fatdie1;
extern statetype s_spectredie1;
extern statetype s_angeldie1;
extern statetype s_transdie0;
extern statetype s_uberdie0;
extern statetype s_willdie1;
extern statetype s_deathdie1;
extern statetype s_grdchase1;
extern statetype s_dogchase1;
extern statetype s_ofcchase1;
extern statetype s_sschase1;
extern statetype s_mutchase1;
extern statetype s_bosschase1;
extern statetype s_schabbchase1;
extern statetype s_fakechase1;
extern statetype s_mechachase1;
extern statetype s_gretelchase1;
extern statetype s_giftchase1;
extern statetype s_fatchase1;
extern statetype s_spectrechase1;
extern statetype s_angelchase1;
extern statetype s_transchase1;
extern statetype s_uberchase1;
extern statetype s_willchase1;
extern statetype s_deathchase1;
extern statetype s_blinkychase1;
extern statetype s_hitlerchase1;
extern statetype s_grdpain;
extern statetype s_grdpain1;
extern statetype s_ofcpain;
extern statetype s_ofcpain1;
extern statetype s_sspain;
extern statetype s_sspain1;
extern statetype s_mutpain;
extern statetype s_mutpain1;
extern statetype s_deathcam;
extern statetype s_schabbdeathcam2;
extern statetype s_hitlerdeathcam2;
extern statetype s_giftdeathcam2;
extern statetype s_fatdeathcam2;
void SpawnStand (enemy_t which, int tilex, int tiley, int dir);
void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir);
void KillActor (objtype *ob);
void US_ControlPanel(byte);
void SpawnDeadGuard (int tilex, int tiley);
void SpawnBoss (int tilex, int tiley);
void SpawnGretel (int tilex, int tiley);
void SpawnTrans (int tilex, int tiley);
void SpawnUber (int tilex, int tiley);
void SpawnWill (int tilex, int tiley);
void SpawnDeath (int tilex, int tiley);
void SpawnAngel (int tilex, int tiley);
void SpawnSpectre (int tilex, int tiley);
void SpawnGhosts (int which, int tilex, int tiley);
void SpawnSchabbs (int tilex, int tiley);
void SpawnGift (int tilex, int tiley);
void SpawnFat (int tilex, int tiley);
void SpawnFakeHitler (int tilex, int tiley);
void SpawnHitler (int tilex, int tiley);
/*
=============================================================================
WL_TEXT DEFINITIONS
=============================================================================
*/
extern char helpfilename[],endfilename[];
extern void HelpScreens(void);
extern void EndText(void);