+++ /dev/null
-//#define BETA\r
-#define YEAR 1992\r
-#define MONTH 9\r
-#define DAY 30\r
-\r
-#include "ID_HEADS.H"\r
-#include <MATH.H>\r
-#include <VALUES.H>\r
-\r
-#include "WL_MENU.H"\r
-\r
-#ifdef SPANISH\r
-#include "SPANISH.H"\r
-#else\r
-#include "FOREIGN.H"\r
-#endif\r
-\r
-#ifdef SPEAR\r
-#include "F_SPEAR.H"\r
-#endif\r
-\r
-/*\r
-=============================================================================\r
-\r
- MACROS\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-#define COLORBORDER(color) asm{mov dx,STATUS_REGISTER_1;in al,dx;\\r
- mov dx,ATR_INDEX;mov al,ATR_OVERSCAN;out dx,al;mov al,color;out dx,al;\\r
- mov al,32;out dx,al};\r
-\r
-#define MAPSPOT(x,y,plane) (*(mapsegs[plane]+farmapylookup[y]+x))\r
-\r
-#define SIGN(x) ((x)>0?1:-1)\r
-#define ABS(x) ((int)(x)>0?(x):-(x))\r
-#define LABS(x) ((long)(x)>0?(x):-(x))\r
-\r
-/*\r
-=============================================================================\r
-\r
- GLOBAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-#define MAXACTORS 150 // max number of nazis, etc / map\r
-#define MAXSTATS 400 // max number of lamps, bonus, etc\r
-#define MAXDOORS 64 // max number of sliding doors\r
-#define MAXWALLTILES 64 // max number of wall tiles\r
-\r
-//\r
-// tile constants\r
-//\r
-\r
-#define ICONARROWS 90\r
-#define PUSHABLETILE 98\r
-#define EXITTILE 99 // at end of castle\r
-#define AREATILE 107 // first of NUMAREAS floor tiles\r
-#define NUMAREAS 37\r
-#define ELEVATORTILE 21\r
-#define AMBUSHTILE 106\r
-#define ALTELEVATORTILE 107\r
-\r
-#define NUMBERCHARS 9\r
-\r
-\r
-//----------------\r
-\r
-#define EXTRAPOINTS 40000\r
-\r
-#define PLAYERSPEED 3000\r
-#define RUNSPEED 6000\r
-\r
-#define SCREENSEG 0xa000\r
-\r
-#define SCREENBWIDE 80\r
-\r
-#define HEIGHTRATIO 0.50 // also defined in id_mm.c\r
-\r
-#define BORDERCOLOR 3\r
-#define FLASHCOLOR 5\r
-#define FLASHTICS 4\r
-\r
-\r
-#define PLAYERSIZE MINDIST // player radius\r
-#define MINACTORDIST 0x10000l // minimum dist from player center\r
- // to any actor center\r
-\r
-#define NUMLATCHPICS 100\r
-\r
-\r
-#define PI 3.141592657\r
-\r
-#define GLOBAL1 (1l<<16)\r
-#define TILEGLOBAL GLOBAL1\r
-#define PIXGLOBAL (GLOBAL1/64)\r
-#define TILESHIFT 16l\r
-#define UNSIGNEDSHIFT 8\r
-\r
-#define ANGLES 360 // must be divisable by 4\r
-#define ANGLEQUAD (ANGLES/4)\r
-#define FINEANGLES 3600\r
-#define ANG90 (FINEANGLES/4)\r
-#define ANG180 (ANG90*2)\r
-#define ANG270 (ANG90*3)\r
-#define ANG360 (ANG90*4)\r
-#define VANG90 (ANGLES/4)\r
-#define VANG180 (VANG90*2)\r
-#define VANG270 (VANG90*3)\r
-#define VANG360 (VANG90*4)\r
-\r
-#define MINDIST (0x5800l)\r
-\r
-\r
-#define MAXSCALEHEIGHT 256 // largest scale on largest view\r
-\r
-#define MAXVIEWWIDTH 320\r
-\r
-#define MAPSIZE 64 // maps are 64*64 max\r
-#define NORTH 0\r
-#define EAST 1\r
-#define SOUTH 2\r
-#define WEST 3\r
-\r
-\r
-#define STATUSLINES 40\r
-\r
-#define SCREENSIZE (SCREENBWIDE*208)\r
-#define PAGE1START 0\r
-#define PAGE2START (SCREENSIZE)\r
-#define PAGE3START (SCREENSIZE*2u)\r
-#define FREESTART (SCREENSIZE*3u)\r
-\r
-\r
-#define PIXRADIUS 512\r
-\r
-#define STARTAMMO 8\r
-\r
-\r
-// object flag values\r
-\r
-#define FL_SHOOTABLE 1\r
-#define FL_BONUS 2\r
-#define FL_NEVERMARK 4\r
-#define FL_VISABLE 8\r
-#define FL_ATTACKMODE 16\r
-#define FL_FIRSTATTACK 32\r
-#define FL_AMBUSH 64\r
-#define FL_NONMARK 128\r
-\r
-\r
-//\r
-// sprite constants\r
-//\r
-\r
-enum {\r
- SPR_DEMO,\r
- SPR_DEATHCAM,\r
-//\r
-// static sprites\r
-//\r
- SPR_STAT_0,SPR_STAT_1,SPR_STAT_2,SPR_STAT_3,\r
- SPR_STAT_4,SPR_STAT_5,SPR_STAT_6,SPR_STAT_7,\r
-\r
- SPR_STAT_8,SPR_STAT_9,SPR_STAT_10,SPR_STAT_11,\r
- SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15,\r
-\r
- SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19,\r
- SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23,\r
-\r
- SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27,\r
- SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31,\r
-\r
- SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35,\r
- SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39,\r
-\r
- SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43,\r
- SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47,\r
-\r
-#ifdef SPEAR\r
- SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51,\r
-#endif\r
-\r
-//\r
-// guard\r
-//\r
- SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4,\r
- SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8,\r
-\r
- SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4,\r
- SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8,\r
-\r
- SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4,\r
- SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8,\r
-\r
- SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4,\r
- SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8,\r
-\r
- SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4,\r
- SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8,\r
-\r
- SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3,\r
- SPR_GRD_PAIN_2,SPR_GRD_DEAD,\r
-\r
- SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3,\r
-\r
-//\r
-// dogs\r
-//\r
- SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4,\r
- SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8,\r
-\r
- SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4,\r
- SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8,\r
-\r
- SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4,\r
- SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8,\r
-\r
- SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4,\r
- SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8,\r
-\r
- SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD,\r
- SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3,\r
-\r
-\r
-\r
-//\r
-// ss\r
-//\r
- SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4,\r
- SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8,\r
-\r
- SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4,\r
- SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8,\r
-\r
- SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4,\r
- SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8,\r
-\r
- SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4,\r
- SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8,\r
-\r
- SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4,\r
- SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8,\r
-\r
- SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3,\r
- SPR_SS_PAIN_2,SPR_SS_DEAD,\r
-\r
- SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3,\r
-\r
-//\r
-// mutant\r
-//\r
- SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4,\r
- SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8,\r
-\r
- SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4,\r
- SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8,\r
-\r
- SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4,\r
- SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8,\r
-\r
- SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4,\r
- SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8,\r
-\r
- SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4,\r
- SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8,\r
-\r
- SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3,\r
- SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD,\r
-\r
- SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4,\r
-\r
-//\r
-// officer\r
-//\r
- SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4,\r
- SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8,\r
-\r
- SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4,\r
- SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8,\r
-\r
- SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4,\r
- SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8,\r
-\r
- SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4,\r
- SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8,\r
-\r
- SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4,\r
- SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8,\r
-\r
- SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3,\r
- SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD,\r
-\r
- SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3,\r
-\r
-#ifndef SPEAR\r
-//\r
-// ghosts\r
-//\r
- SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2,\r
- SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2,\r
-\r
-//\r
-// hans\r
-//\r
- SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4,\r
- SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD,\r
-\r
- SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3,\r
-\r
-//\r
-// schabbs\r
-//\r
- SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4,\r
- SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2,\r
-\r
- SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD,\r
- SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4,\r
-\r
-//\r
-// fake\r
-//\r
- SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4,\r
- SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2,\r
-\r
- SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4,\r
- SPR_FAKE_DIE5,SPR_FAKE_DEAD,\r
-\r
-//\r
-// hitler\r
-//\r
- SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4,\r
- SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD,\r
-\r
- SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3,\r
-\r
- SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4,\r
- SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD,\r
-\r
- SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4,\r
- SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7,\r
-\r
-//\r
-// giftmacher\r
-//\r
- SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4,\r
- SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2,\r
-\r
- SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD,\r
-#endif\r
-//\r
-// Rocket, smoke and small explosion\r
-//\r
- SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4,\r
- SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8,\r
-\r
- SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4,\r
- SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3,\r
-\r
-//\r
-// Angel of Death's DeathSparks(tm)\r
-//\r
-#ifdef SPEAR\r
- SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4,\r
- SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8,\r
-\r
- SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4,\r
- SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3,\r
-\r
- SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4,\r
-#endif\r
-\r
-#ifndef SPEAR\r
-//\r
-// gretel\r
-//\r
- SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4,\r
- SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD,\r
-\r
- SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3,\r
-\r
-//\r
-// fat face\r
-//\r
- SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4,\r
- SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4,\r
-\r
- SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD,\r
-\r
-//\r
-// bj\r
-//\r
- SPR_BJ_W1,SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4,\r
- SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4,\r
-#else\r
-//\r
-// THESE ARE FOR 'SPEAR OF DESTINY'\r
-//\r
-\r
-//\r
-// Trans Grosse\r
-//\r
- SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4,\r
- SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD,\r
-\r
- SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3,\r
-\r
-//\r
-// Wilhelm\r
-//\r
- SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4,\r
- SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4,\r
-\r
- SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD,\r
-\r
-//\r
-// UberMutant\r
-//\r
- SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4,\r
- SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4,\r
-\r
- SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4,\r
- SPR_UBER_DEAD,\r
-\r
-//\r
-// Death Knight\r
-//\r
- SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4,\r
- SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4,\r
-\r
- SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4,\r
- SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD,\r
-\r
-//\r
-// Ghost\r
-//\r
- SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4,\r
- SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4,\r
-\r
-//\r
-// Angel of Death\r
-//\r
- SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4,\r
- SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2,\r
-\r
- SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4,\r
- SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD,\r
-\r
-#endif\r
-\r
-//\r
-// player attack frames\r
-//\r
- SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3,\r
- SPR_KNIFEATK4,\r
-\r
- SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3,\r
- SPR_PISTOLATK4,\r
-\r
- SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3,\r
- SPR_MACHINEGUNATK4,\r
-\r
- SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3,\r
- SPR_CHAINATK4,\r
-\r
- };\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- GLOBAL TYPES\r
-\r
-=============================================================================\r
-*/\r
-\r
-typedef long fixed;\r
-\r
-typedef enum {\r
- di_north,\r
- di_east,\r
- di_south,\r
- di_west\r
-} controldir_t;\r
-\r
-typedef enum {\r
- dr_normal,\r
- dr_lock1,\r
- dr_lock2,\r
- dr_lock3,\r
- dr_lock4,\r
- dr_elevator\r
-} door_t;\r
-\r
-typedef enum {\r
- ac_badobject = -1,\r
- ac_no,\r
- ac_yes,\r
- ac_allways\r
-} activetype;\r
-\r
-typedef enum {\r
- nothing,\r
- playerobj,\r
- inertobj,\r
- guardobj,\r
- officerobj,\r
- ssobj,\r
- dogobj,\r
- bossobj,\r
- schabbobj,\r
- fakeobj,\r
- mechahitlerobj,\r
- mutantobj,\r
- needleobj,\r
- fireobj,\r
- bjobj,\r
- ghostobj,\r
- realhitlerobj,\r
- gretelobj,\r
- giftobj,\r
- fatobj,\r
- rocketobj,\r
-\r
- spectreobj,\r
- angelobj,\r
- transobj,\r
- uberobj,\r
- willobj,\r
- deathobj,\r
- hrocketobj,\r
- sparkobj\r
-} classtype;\r
-\r
-typedef enum {\r
- dressing,\r
- block,\r
- bo_gibs,\r
- bo_alpo,\r
- bo_firstaid,\r
- bo_key1,\r
- bo_key2,\r
- bo_key3,\r
- bo_key4,\r
- bo_cross,\r
- bo_chalice,\r
- bo_bible,\r
- bo_crown,\r
- bo_clip,\r
- bo_clip2,\r
- bo_machinegun,\r
- bo_chaingun,\r
- bo_food,\r
- bo_fullheal,\r
- bo_25clip,\r
- bo_spear\r
-} stat_t;\r
-\r
-typedef enum {\r
- east,\r
- northeast,\r
- north,\r
- northwest,\r
- west,\r
- southwest,\r
- south,\r
- southeast,\r
- nodir\r
-} dirtype;\r
-\r
-\r
-#define NUMENEMIES 22\r
-typedef enum {\r
- en_guard,\r
- en_officer,\r
- en_ss,\r
- en_dog,\r
- en_boss,\r
- en_schabbs,\r
- en_fake,\r
- en_hitler,\r
- en_mutant,\r
- en_blinky,\r
- en_clyde,\r
- en_pinky,\r
- en_inky,\r
- en_gretel,\r
- en_gift,\r
- en_fat,\r
- en_spectre,\r
- en_angel,\r
- en_trans,\r
- en_uber,\r
- en_will,\r
- en_death\r
-} enemy_t;\r
-\r
-\r
-typedef struct statestruct\r
-{\r
- boolean rotate;\r
- int shapenum; // a shapenum of -1 means get from ob->temp1\r
- int tictime;\r
- void (*think) (),(*action) ();\r
- struct statestruct *next;\r
-} statetype;\r
-\r
-\r
-//---------------------\r
-//\r
-// trivial actor structure\r
-//\r
-//---------------------\r
-\r
-typedef struct statstruct\r
-{\r
- byte tilex,tiley;\r
- byte *visspot;\r
- int shapenum; // if shapenum == -1 the obj has been removed\r
- byte flags;\r
- byte itemnumber;\r
-} statobj_t;\r
-\r
-\r
-//---------------------\r
-//\r
-// door actor structure\r
-//\r
-//---------------------\r
-\r
-typedef struct doorstruct\r
-{\r
- byte tilex,tiley;\r
- boolean vertical;\r
- byte lock;\r
- enum {dr_open,dr_closed,dr_opening,dr_closing} action;\r
- int ticcount;\r
-} doorobj_t;\r
-\r
-\r
-//--------------------\r
-//\r
-// thinking actor structure\r
-//\r
-//--------------------\r
-\r
-typedef struct objstruct\r
-{\r
- activetype active;\r
- int ticcount;\r
- classtype obclass;\r
- statetype *state;\r
-\r
- byte flags; // FL_SHOOTABLE, etc\r
-\r
- long distance; // if negative, wait for that door to open\r
- dirtype dir;\r
-\r
- fixed x,y;\r
- unsigned tilex,tiley;\r
- byte areanumber;\r
-\r
- int viewx;\r
- unsigned viewheight;\r
- fixed transx,transy; // in global coord\r
-\r
- int angle;\r
- int hitpoints;\r
- long speed;\r
-\r
- int temp1,temp2,temp3;\r
- struct objstruct *next,*prev;\r
-} objtype;\r
-\r
-\r
-#define NUMBUTTONS 8\r
-enum {\r
- bt_nobutton=-1,\r
- bt_attack=0,\r
- bt_strafe,\r
- bt_run,\r
- bt_use,\r
- bt_readyknife,\r
- bt_readypistol,\r
- bt_readymachinegun,\r
- bt_readychaingun\r
-};\r
-\r
-\r
-#define NUMWEAPONS 5\r
-typedef enum {\r
- wp_knife,\r
- wp_pistol,\r
- wp_machinegun,\r
- wp_chaingun\r
-} weapontype;\r
-\r
-\r
-typedef enum {\r
- gd_baby,\r
- gd_easy,\r
- gd_medium,\r
- gd_hard\r
-};\r
-\r
-//---------------\r
-//\r
-// gamestate structure\r
-//\r
-//---------------\r
-\r
-typedef struct\r
-{\r
- int difficulty;\r
- int mapon;\r
- long oldscore,score,nextextra;\r
- int lives;\r
- int health;\r
- int ammo;\r
- int keys;\r
- weapontype bestweapon,weapon,chosenweapon;\r
-\r
- int faceframe;\r
- int attackframe,attackcount,weaponframe;\r
-\r
- int episode,secretcount,treasurecount,killcount,\r
- secrettotal,treasuretotal,killtotal;\r
- long TimeCount;\r
- long killx,killy;\r
- boolean victoryflag; // set during victory animations\r
-} gametype;\r
-\r
-\r
-typedef enum {\r
- ex_stillplaying,\r
- ex_completed,\r
- ex_died,\r
- ex_warped,\r
- ex_resetgame,\r
- ex_loadedgame,\r
- ex_victorious,\r
- ex_abort,\r
- ex_demodone,\r
- ex_secretlevel\r
-} exit_t;\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_MAIN DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-extern boolean MS_CheckParm (char far *string);\r
-\r
-extern char str[80],str2[20];\r
-extern int tedlevelnum;\r
-extern boolean tedlevel;\r
-extern boolean nospr;\r
-extern boolean IsA386;\r
-\r
-extern byte far *scalermemory;\r
-\r
-extern fixed focallength;\r
-extern unsigned viewangles;\r
-extern unsigned screenofs;\r
-extern int viewwidth;\r
-extern int viewheight;\r
-extern int centerx;\r
-extern int shootdelta;\r
-\r
-extern int dirangle[9];\r
-\r
-extern boolean startgame,loadedgame,virtualreality;\r
-extern int mouseadjustment;\r
-//\r
-// math tables\r
-//\r
-extern int pixelangle[MAXVIEWWIDTH];\r
-extern long far finetangent[FINEANGLES/4];\r
-extern fixed far sintable[],far *costable;\r
-\r
-//\r
-// derived constants\r
-//\r
-extern fixed scale,maxslope;\r
-extern long heightnumerator;\r
-extern int minheightdiv;\r
-\r
-extern char configname[13];\r
-\r
-\r
-\r
-void HelpScreens (void);\r
-void OrderingInfo (void);\r
-void TEDDeath(void);\r
-void Quit (char *error);\r
-void CalcProjection (long focal);\r
-boolean SetViewSize (unsigned width, unsigned height);\r
-void NewGame (int difficulty,int episode);\r
-void NewViewSize (int width);\r
-boolean LoadTheGame(int file,int x,int y);\r
-boolean SaveTheGame(int file,int x,int y);\r
-void ShowViewSize (int width);\r
-void ShutdownId (void);\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_GAME DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-extern boolean ingame,fizzlein;\r
-extern unsigned latchpics[NUMLATCHPICS];\r
-extern gametype gamestate;\r
-extern int doornum;\r
-\r
-extern char demoname[13];\r
-\r
-extern long spearx,speary;\r
-extern unsigned spearangle;\r
-extern boolean spearflag;\r
-\r
-\r
-void DrawPlayBorder (void);\r
-void ScanInfoPlane (void);\r
-void SetupGameLevel (void);\r
-void NormalScreen (void);\r
-void DrawPlayScreen (void);\r
-void FizzleOut (void);\r
-void GameLoop (void);\r
-void ClearMemory (void);\r
-void PlayDemo (int demonumber);\r
-void RecordDemo (void);\r
-void DrawAllPlayBorder (void);\r
-void DrawHighScores(void);\r
-void DrawAllPlayBorderSides (void);\r
-\r
-\r
-// JAB\r
-#define PlaySoundLocTile(s,tx,ty) PlaySoundLocGlobal(s,(((long)(tx) << TILESHIFT) + (1L << (TILESHIFT - 1))),(((long)ty << TILESHIFT) + (1L << (TILESHIFT - 1))))\r
-#define PlaySoundLocActor(s,ob) PlaySoundLocGlobal(s,(ob)->x,(ob)->y)\r
-void PlaySoundLocGlobal(word s,fixed gx,fixed gy);\r
-void UpdateSoundLoc(void);\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_PLAY DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-#ifdef SPEAR\r
-extern long funnyticount; // FOR FUNNY BJ FACE\r
-#endif\r
-\r
-extern exit_t playstate;\r
-\r
-extern boolean madenoise;\r
-\r
-extern objtype objlist[MAXACTORS],*new,*obj,*player,*lastobj,\r
- *objfreelist,*killerobj;\r
-extern statobj_t statobjlist[MAXSTATS],*laststatobj;\r
-extern doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;\r
-\r
-extern unsigned farmapylookup[MAPSIZE];\r
-extern byte *nearmapylookup[MAPSIZE];\r
-\r
-extern byte tilemap[MAPSIZE][MAPSIZE]; // wall values only\r
-extern byte spotvis[MAPSIZE][MAPSIZE];\r
-extern objtype *actorat[MAPSIZE][MAPSIZE];\r
-\r
-#define UPDATESIZE (UPDATEWIDE*UPDATEHIGH)\r
-extern byte update[UPDATESIZE];\r
-\r
-extern boolean singlestep,godmode,noclip;\r
-extern int extravbls;\r
-\r
-//\r
-// control info\r
-//\r
-extern boolean mouseenabled,joystickenabled,joypadenabled,joystickprogressive;\r
-extern int joystickport;\r
-extern int dirscan[4];\r
-extern int buttonscan[NUMBUTTONS];\r
-extern int buttonmouse[4];\r
-extern int buttonjoy[4];\r
-\r
-extern boolean buttonheld[NUMBUTTONS];\r
-\r
-extern int viewsize;\r
-\r
-//\r
-// curent user input\r
-//\r
-extern int controlx,controly; // range from -100 to 100\r
-extern boolean buttonstate[NUMBUTTONS];\r
-\r
-extern boolean demorecord,demoplayback;\r
-extern char far *demoptr, far *lastdemoptr;\r
-extern memptr demobuffer;\r
-\r
-\r
-\r
-void InitRedShifts (void);\r
-void FinishPaletteShifts (void);\r
-\r
-void CenterWindow(word w,word h);\r
-void InitActorList (void);\r
-void GetNewActor (void);\r
-void RemoveObj (objtype *gone);\r
-void PollControls (void);\r
-void StopMusic(void);\r
-void StartMusic(void);\r
-void PlayLoop (void);\r
-void StartDamageFlash (int damage);\r
-void StartBonusFlash (void);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_INTER\r
-\r
-=============================================================================\r
-*/\r
-\r
-void IntroScreen (void);\r
-void PreloadGraphics(void);\r
-void LevelCompleted (void);\r
-void CheckHighScore (long score,word other);\r
-void Victory (void);\r
-void ClearSplitVWB (void);\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_DEBUG\r
-\r
-=============================================================================\r
-*/\r
-\r
-int DebugKeys (void);\r
-void PicturePause (void);\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_DRAW DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-extern unsigned screenloc[3];\r
-extern unsigned freelatch;\r
-\r
-extern long lasttimecount;\r
-extern long frameon;\r
-extern boolean fizzlein;\r
-\r
-extern unsigned wallheight[MAXVIEWWIDTH];\r
-\r
-extern fixed tileglobal;\r
-extern fixed focallength;\r
-extern fixed mindist;\r
-\r
-//\r
-// math tables\r
-//\r
-extern int pixelangle[MAXVIEWWIDTH];\r
-extern long far finetangent[FINEANGLES/4];\r
-extern fixed far sintable[],far *costable;\r
-\r
-//\r
-// derived constants\r
-//\r
-extern fixed scale;\r
-extern long heightnumerator,mindist;\r
-\r
-//\r
-// refresh variables\r
-//\r
-extern fixed viewx,viewy; // the focal point\r
-extern int viewangle;\r
-extern fixed viewsin,viewcos;\r
-\r
-extern long postsource;\r
-extern unsigned postx;\r
-extern unsigned postwidth;\r
-\r
-\r
-extern int horizwall[],vertwall[];\r
-\r
-extern unsigned pwallpos;\r
-\r
-\r
-fixed FixedByFrac (fixed a, fixed b);\r
-void TransformActor (objtype *ob);\r
-void BuildTables (void);\r
-void ClearScreen (void);\r
-int CalcRotate (objtype *ob);\r
-void DrawScaleds (void);\r
-void CalcTics (void);\r
-void FixOfs (void);\r
-void ThreeDRefresh (void);\r
-void FarScalePost (void);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_STATE DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-#define TURNTICS 10\r
-#define SPDPATROL 512\r
-#define SPDDOG 1500\r
-\r
-\r
-extern dirtype opposite[9];\r
-extern dirtype diagonal[9][9];\r
-\r
-\r
-void InitHitRect (objtype *ob, unsigned radius);\r
-void SpawnNewObj (unsigned tilex, unsigned tiley, statetype *state);\r
-void NewState (objtype *ob, statetype *state);\r
-\r
-boolean TryWalk (objtype *ob);\r
-void SelectChaseDir (objtype *ob);\r
-void SelectDodgeDir (objtype *ob);\r
-void SelectRunDir (objtype *ob);\r
-void MoveObj (objtype *ob, long move);\r
-boolean SightPlayer (objtype *ob);\r
-\r
-void KillActor (objtype *ob);\r
-void DamageActor (objtype *ob, unsigned damage);\r
-\r
-boolean CheckLine (objtype *ob);\r
-boolean CheckSight (objtype *ob);\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_SCALE DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-#define COMPSCALECODESTART (65*4) // offset to start of code in comp scaler\r
-\r
-typedef struct\r
-{\r
- unsigned codeofs[65];\r
- unsigned width[65];\r
- byte code[];\r
-} t_compscale;\r
-\r
-typedef struct\r
-{\r
- unsigned leftpix,rightpix;\r
- unsigned dataofs[64];\r
-// table data after dataofs[rightpix-leftpix+1]\r
-} t_compshape;\r
-\r
-\r
-extern t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1];\r
-extern long fullscalefarcall[MAXSCALEHEIGHT+1];\r
-\r
-extern byte bitmasks1[8][8];\r
-extern byte bitmasks2[8][8];\r
-extern unsigned wordmasks[8][8];\r
-\r
-extern byte mapmasks1[4][8];\r
-extern byte mapmasks2[4][8];\r
-extern byte mapmasks3[4][8];\r
-\r
-extern int maxscale,maxscaleshl2;\r
-\r
-extern boolean insetupscaling;\r
-\r
-void SetupScaling (int maxscaleheight);\r
-void ScaleShape (int xcenter, int shapenum, unsigned height);\r
-void SimpleScaleShape (int xcenter, int shapenum, unsigned height);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_AGENT DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-//\r
-// player state info\r
-//\r
-extern boolean running;\r
-extern long thrustspeed;\r
-extern unsigned plux,pluy; // player coordinates scaled to unsigned\r
-\r
-extern int anglefrac;\r
-extern int facecount;\r
-\r
-void SpawnPlayer (int tilex, int tiley, int dir);\r
-void DrawFace (void);\r
-void DrawHealth (void);\r
-void TakeDamage (int points,objtype *attacker);\r
-void HealSelf (int points);\r
-void DrawLevel (void);\r
-void DrawLives (void);\r
-void GiveExtraMan (void);\r
-void DrawScore (void);\r
-void GivePoints (long points);\r
-void DrawWeapon (void);\r
-void DrawKeys (void);\r
-void GiveWeapon (int weapon);\r
-void DrawAmmo (void);\r
-void GiveAmmo (int ammo);\r
-void GiveKey (int key);\r
-void GetBonus (statobj_t *check);\r
-\r
-void Thrust (int angle, long speed);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_ACT1 DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-extern doorobj_t doorobjlist[MAXDOORS],*lastdoorobj;\r
-extern int doornum;\r
-\r
-extern unsigned doorposition[MAXDOORS],pwallstate;\r
-\r
-extern byte far areaconnect[NUMAREAS][NUMAREAS];\r
-\r
-extern boolean areabyplayer[NUMAREAS];\r
-\r
-extern unsigned pwallstate;\r
-extern unsigned pwallpos; // amount a pushable wall has been moved (0-63)\r
-extern unsigned pwallx,pwally;\r
-extern int pwalldir;\r
-\r
-\r
-void InitDoorList (void);\r
-void InitStaticList (void);\r
-void SpawnStatic (int tilex, int tiley, int type);\r
-void SpawnDoor (int tilex, int tiley, boolean vertical, int lock);\r
-void MoveDoors (void);\r
-void MovePWalls (void);\r
-void OpenDoor (int door);\r
-void PlaceItemType (int itemtype, int tilex, int tiley);\r
-void PushWall (int checkx, int checky, int dir);\r
-void OperateDoor (int door);\r
-void InitAreas (void);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_ACT2 DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-#define s_nakedbody s_static10\r
-\r
-extern statetype s_grddie1;\r
-extern statetype s_dogdie1;\r
-extern statetype s_ofcdie1;\r
-extern statetype s_mutdie1;\r
-extern statetype s_ssdie1;\r
-extern statetype s_bossdie1;\r
-extern statetype s_schabbdie1;\r
-extern statetype s_fakedie1;\r
-extern statetype s_mechadie1;\r
-extern statetype s_hitlerdie1;\r
-extern statetype s_greteldie1;\r
-extern statetype s_giftdie1;\r
-extern statetype s_fatdie1;\r
-\r
-extern statetype s_spectredie1;\r
-extern statetype s_angeldie1;\r
-extern statetype s_transdie0;\r
-extern statetype s_uberdie0;\r
-extern statetype s_willdie1;\r
-extern statetype s_deathdie1;\r
-\r
-\r
-extern statetype s_grdchase1;\r
-extern statetype s_dogchase1;\r
-extern statetype s_ofcchase1;\r
-extern statetype s_sschase1;\r
-extern statetype s_mutchase1;\r
-extern statetype s_bosschase1;\r
-extern statetype s_schabbchase1;\r
-extern statetype s_fakechase1;\r
-extern statetype s_mechachase1;\r
-extern statetype s_gretelchase1;\r
-extern statetype s_giftchase1;\r
-extern statetype s_fatchase1;\r
-\r
-extern statetype s_spectrechase1;\r
-extern statetype s_angelchase1;\r
-extern statetype s_transchase1;\r
-extern statetype s_uberchase1;\r
-extern statetype s_willchase1;\r
-extern statetype s_deathchase1;\r
-\r
-extern statetype s_blinkychase1;\r
-extern statetype s_hitlerchase1;\r
-\r
-extern statetype s_grdpain;\r
-extern statetype s_grdpain1;\r
-extern statetype s_ofcpain;\r
-extern statetype s_ofcpain1;\r
-extern statetype s_sspain;\r
-extern statetype s_sspain1;\r
-extern statetype s_mutpain;\r
-extern statetype s_mutpain1;\r
-\r
-extern statetype s_deathcam;\r
-\r
-extern statetype s_schabbdeathcam2;\r
-extern statetype s_hitlerdeathcam2;\r
-extern statetype s_giftdeathcam2;\r
-extern statetype s_fatdeathcam2;\r
-\r
-void SpawnStand (enemy_t which, int tilex, int tiley, int dir);\r
-void SpawnPatrol (enemy_t which, int tilex, int tiley, int dir);\r
-void KillActor (objtype *ob);\r
-\r
-void US_ControlPanel(byte);\r
-\r
-void SpawnDeadGuard (int tilex, int tiley);\r
-void SpawnBoss (int tilex, int tiley);\r
-void SpawnGretel (int tilex, int tiley);\r
-void SpawnTrans (int tilex, int tiley);\r
-void SpawnUber (int tilex, int tiley);\r
-void SpawnWill (int tilex, int tiley);\r
-void SpawnDeath (int tilex, int tiley);\r
-void SpawnAngel (int tilex, int tiley);\r
-void SpawnSpectre (int tilex, int tiley);\r
-void SpawnGhosts (int which, int tilex, int tiley);\r
-void SpawnSchabbs (int tilex, int tiley);\r
-void SpawnGift (int tilex, int tiley);\r
-void SpawnFat (int tilex, int tiley);\r
-void SpawnFakeHitler (int tilex, int tiley);\r
-void SpawnHitler (int tilex, int tiley);\r
-\r
-/*\r
-=============================================================================\r
-\r
- WL_TEXT DEFINITIONS\r
-\r
-=============================================================================\r
-*/\r
-\r
-extern char helpfilename[],endfilename[];\r
-\r
-extern void HelpScreens(void);\r
-extern void EndText(void);\r