//#define BETA #define YEAR 1992 #define MONTH 9 #define DAY 30 #include "ID_HEADS.H" #include #include #include "WL_MENU.H" #ifdef SPANISH #include "SPANISH.H" #else #include "FOREIGN.H" #endif #ifdef SPEAR #include "F_SPEAR.H" #endif /* ============================================================================= MACROS ============================================================================= */ #define COLORBORDER(color) asm{mov dx,STATUS_REGISTER_1;in al,dx;\ mov dx,ATR_INDEX;mov al,ATR_OVERSCAN;out dx,al;mov al,color;out dx,al;\ mov al,32;out dx,al}; #define MAPSPOT(x,y,plane) (*(mapsegs[plane]+farmapylookup[y]+x)) #define SIGN(x) ((x)>0?1:-1) #define ABS(x) ((int)(x)>0?(x):-(x)) #define LABS(x) ((long)(x)>0?(x):-(x)) /* ============================================================================= GLOBAL CONSTANTS ============================================================================= */ #define MAXACTORS 150 // max number of nazis, etc / map #define MAXSTATS 400 // max number of lamps, bonus, etc #define MAXDOORS 64 // max number of sliding doors #define MAXWALLTILES 64 // max number of wall tiles // // tile constants // #define ICONARROWS 90 #define PUSHABLETILE 98 #define EXITTILE 99 // at end of castle #define AREATILE 107 // first of NUMAREAS floor tiles #define NUMAREAS 37 #define ELEVATORTILE 21 #define AMBUSHTILE 106 #define ALTELEVATORTILE 107 #define NUMBERCHARS 9 //---------------- #define EXTRAPOINTS 40000 #define PLAYERSPEED 3000 #define RUNSPEED 6000 #define SCREENSEG 0xa000 #define SCREENBWIDE 80 #define HEIGHTRATIO 0.50 // also defined in id_mm.c #define BORDERCOLOR 3 #define FLASHCOLOR 5 #define FLASHTICS 4 #define PLAYERSIZE MINDIST // player radius #define MINACTORDIST 0x10000l // minimum dist from player center // to any actor center #define NUMLATCHPICS 100 #define PI 3.141592657 #define GLOBAL1 (1l<<16) #define TILEGLOBAL GLOBAL1 #define PIXGLOBAL (GLOBAL1/64) #define TILESHIFT 16l #define UNSIGNEDSHIFT 8 #define ANGLES 360 // must be divisable by 4 #define ANGLEQUAD (ANGLES/4) #define FINEANGLES 3600 #define ANG90 (FINEANGLES/4) #define ANG180 (ANG90*2) #define ANG270 (ANG90*3) #define ANG360 (ANG90*4) #define VANG90 (ANGLES/4) #define VANG180 (VANG90*2) #define VANG270 (VANG90*3) #define VANG360 (VANG90*4) #define MINDIST (0x5800l) #define MAXSCALEHEIGHT 256 // largest scale on largest view #define MAXVIEWWIDTH 320 #define MAPSIZE 64 // maps are 64*64 max #define NORTH 0 #define EAST 1 #define SOUTH 2 #define WEST 3 #define STATUSLINES 40 #define SCREENSIZE (SCREENBWIDE*208) #define PAGE1START 0 #define PAGE2START (SCREENSIZE) #define PAGE3START (SCREENSIZE*2u) #define FREESTART (SCREENSIZE*3u) #define PIXRADIUS 512 #define STARTAMMO 8 // object flag values #define FL_SHOOTABLE 1 #define FL_BONUS 2 #define FL_NEVERMARK 4 #define FL_VISABLE 8 #define FL_ATTACKMODE 16 #define FL_FIRSTATTACK 32 #define FL_AMBUSH 64 #define FL_NONMARK 128 // // sprite constants // enum { SPR_DEMO, SPR_DEATHCAM, // // static sprites // SPR_STAT_0,SPR_STAT_1,SPR_STAT_2,SPR_STAT_3, SPR_STAT_4,SPR_STAT_5,SPR_STAT_6,SPR_STAT_7, SPR_STAT_8,SPR_STAT_9,SPR_STAT_10,SPR_STAT_11, SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15, SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19, SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23, SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27, SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31, SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35, SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39, SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43, SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47, #ifdef SPEAR SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51, #endif // // guard // SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4, SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8, SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4, SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8, SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4, SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8, SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4, SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8, SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4, SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8, SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3, SPR_GRD_PAIN_2,SPR_GRD_DEAD, SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3, // // dogs // SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4, SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8, SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4, SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8, SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4, SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8, SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4, SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8, SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD, SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3, // // ss // SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4, SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8, SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4, SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8, SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4, SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8, SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4, SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8, SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4, SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8, SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3, SPR_SS_PAIN_2,SPR_SS_DEAD, SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3, // // mutant // SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4, SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8, SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4, SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8, SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4, SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8, SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4, SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8, SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4, SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8, SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3, SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD, SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4, // // officer // SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4, SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8, SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4, SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8, SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4, SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8, SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4, SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8, SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4, SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8, SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3, SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD, SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3, #ifndef SPEAR // // ghosts // SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2, SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2, // // hans // SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4, SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD, SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3, // // schabbs // SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4, SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2, SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD, SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4, // // fake // SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4, SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2, SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4, SPR_FAKE_DIE5,SPR_FAKE_DEAD, // // hitler // SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4, SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD, SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3, SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4, SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD, SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4, SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7, // // giftmacher // SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4, SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2, SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD, #endif // // Rocket, smoke and small explosion // SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4, SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8, SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4, SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3, // // Angel of Death's DeathSparks(tm) // #ifdef SPEAR SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4, SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8, SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4, SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3, SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4, #endif #ifndef SPEAR // // gretel // SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4, SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD, SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3, // // fat face // SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4, SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4, SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD, // // bj // SPR_BJ_W1,SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4, SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4, #else // // THESE ARE FOR 'SPEAR OF DESTINY' // // // Trans Grosse // SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4, SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD, SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3, // // Wilhelm // SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4, SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4, SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD, // // UberMutant // SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4, SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4, SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4, SPR_UBER_DEAD, // // Death Knight // SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4, SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4, SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4, SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD, // // Ghost // SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4, SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4, // // Angel of Death // SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4, SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2, SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4, SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD, #endif // // player attack frames // SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3, SPR_KNIFEATK4, SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3, SPR_PISTOLATK4, SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3, SPR_MACHINEGUNATK4, SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3, SPR_CHAINATK4, }; /* ============================================================================= GLOBAL TYPES ============================================================================= */ typedef long fixed; typedef enum { di_north, di_east, di_south, di_west } controldir_t; typedef enum { dr_normal, dr_lock1, dr_lock2, dr_lock3, dr_lock4, dr_elevator } door_t; typedef enum { ac_badobject = -1, ac_no, ac_yes, ac_allways } activetype; typedef enum { nothing, playerobj, inertobj, guardobj, officerobj, ssobj, dogobj, bossobj, schabbobj, fakeobj, mechahitlerobj, mutantobj, needleobj, fireobj, bjobj, ghostobj, realhitlerobj, gretelobj, giftobj, fatobj, rocketobj, spectreobj, angelobj, transobj, uberobj, willobj, deathobj, hrocketobj, sparkobj } classtype; typedef enum { dressing, block, bo_gibs, bo_alpo, bo_firstaid, bo_key1, bo_key2, bo_key3, bo_key4, bo_cross, bo_chalice, bo_bible, bo_crown, bo_clip, bo_clip2, bo_machinegun, bo_chaingun, bo_food, bo_fullheal, bo_25clip, bo_spear } stat_t; typedef enum { east, northeast, north, northwest, west, southwest, south, southeast, nodir } dirtype; #define NUMENEMIES 22 typedef enum { en_guard, en_officer, en_ss, en_dog, en_boss, en_schabbs, en_fake, en_hitler, en_mutant, en_blinky, en_clyde, en_pinky, en_inky, en_gretel, en_gift, en_fat, en_spectre, en_angel, en_trans, en_uber, en_will, en_death } enemy_t; typedef struct statestruct { boolean rotate; int shapenum; // a shapenum of -1 means get from ob->temp1 int tictime; void (*think) (),(*action) (); struct statestruct *next; } statetype; //--------------------- // // trivial actor structure // //--------------------- typedef struct statstruct { byte tilex,tiley; byte *visspot; int shapenum; // if shapenum == -1 the obj has been removed byte flags; byte itemnumber; } statobj_t; //--------------------- // // door actor structure // //--------------------- typedef struct doorstruct { byte tilex,tiley; boolean vertical; byte lock; enum {dr_open,dr_closed,dr_opening,dr_closing} action; int ticcount; } doorobj_t; //-------------------- // // thinking actor structure // //-------------------- typedef struct objstruct { activetype active; int ticcount; classtype obclass; statetype *state; byte flags; // FL_SHOOTABLE, etc long distance; // if negative, wait for that door to open dirtype dir; fixed x,y; unsigned tilex,tiley; byte areanumber; int viewx; unsigned viewheight; fixed transx,transy; // in global coord int angle; int hitpoints; long speed; int temp1,temp2,temp3; struct objstruct *next,*prev; } objtype; #define NUMBUTTONS 8 enum { bt_nobutton=-1, bt_attack=0, bt_strafe, bt_run, bt_use, bt_readyknife, bt_readypistol, bt_readymachinegun, bt_readychaingun }; #define NUMWEAPONS 5 typedef enum { wp_knife, wp_pistol, wp_machinegun, wp_chaingun } weapontype; typedef enum { gd_baby, gd_easy, gd_medium, gd_hard }; //--------------- // // gamestate structure // //--------------- typedef struct { int difficulty; int mapon; long oldscore,score,nextextra; int lives; int health; int ammo; int keys; weapontype bestweapon,weapon,chosenweapon; int faceframe; int attackframe,attackcount,weaponframe; int episode,secretcount,treasurecount,killcount, secrettotal,treasuretotal,killtotal; long TimeCount; long killx,killy; boolean victoryflag; // set during victory animations } gametype; typedef enum { ex_stillplaying, ex_completed, ex_died, ex_warped, ex_resetgame, ex_loadedgame, ex_victorious, ex_abort, ex_demodone, ex_secretlevel } exit_t; /* ============================================================================= 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);