| #ifndef WL_DEF_H |
| #define WL_DEF_H |
| |
| // Defines which version shall be built and configures supported extra features |
| #include "version.h" |
| |
| #define SOUND_ENABLE |
| |
| #include "fixedpoint.h" |
| #include <ctype.h> |
| #include <stdint.h> |
| #include <stdarg.h> |
| #include <SDL.h> |
| #include <SDL_mixer.h> |
| |
| #define open rb->open |
| #define read(a, b, c) rb->read((a), (b), (c)) |
| #define write(a, b, c) rb->write((a), (b), (c)) |
| #define close(a) rb->close(a) |
| #define itoa wolf3d_itoa |
| #define ltoa wolf3d_ltoa |
| |
| #if !defined O_BINARY |
| # define O_BINARY 0 |
| #endif |
| |
| // needed by wolf, but is dangerous on ARM |
| #pragma pack(1) |
| |
| #if defined(_arch_dreamcast) |
| #define YESBUTTONNAME "A" |
| #define NOBUTTONNAME "B" |
| #elif defined(GP2X) |
| #define YESBUTTONNAME "Y" |
| #define NOBUTTONNAME "B" |
| #else |
| #define YESBUTTONNAME "Y" |
| #define NOBUTTONNAME "N" |
| #endif |
| |
| #include "foreign.h" |
| |
| #ifndef SPEAR |
| #include "audiowl6.h" |
| #ifdef UPLOAD |
| #include "gfxv_apo.h" |
| #else |
| #ifdef GOODTIMES |
| #include "gfxv_wl6.h" |
| #else |
| #include "gfxv_apo.h" |
| #endif |
| #endif |
| #else |
| #include "audiosod.h" |
| #include "gfxv_sod.h" |
| #include "f_spear.h" |
| #endif |
| |
| typedef uint8_t byte; |
| typedef uint16_t word; |
| typedef int32_t fixed; |
| typedef uint32_t longword; |
| typedef int8_t boolean; |
| typedef void * memptr; |
| |
| typedef struct |
| { |
| int x,y; |
| } Point; |
| typedef struct |
| { |
| Point ul,lr; |
| } Rect; |
| |
| void Quit(const char *errorStr, ...); |
| |
| #include "id_pm.h" |
| #include "id_sd.h" |
| #include "id_in.h" |
| #include "id_vl.h" |
| #include "id_vh.h" |
| #include "id_us.h" |
| #include "id_ca.h" |
| |
| #include "wl_menu.h" |
| |
| #define MAPSPOT(x,y,plane) (mapsegs[plane][((y)<<mapshift)+(x)]) |
| |
| #define SIGN(x) ((x)>0?1:-1) |
| #define ABS(x) ((int)(x)>0?(x):-(x)) |
| #define LABS(x) ((int32_t)(x)>0?(x):-(x)) |
| |
| #define abs(x) ABS(x) |
| |
| /* |
| ============================================================================= |
| |
| GLOBAL CONSTANTS |
| |
| ============================================================================= |
| */ |
| |
| #define MAXTICS 10 |
| #define DEMOTICS 4 |
| |
| #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 |
| |
| #ifndef SPEAR |
| #define LRpack 8 // # of levels to store in endgame |
| #else |
| #define LRpack 20 |
| #endif |
| |
| #define PLAYERSIZE MINDIST // player radius |
| #define MINACTORDIST 0x10000l // minimum dist from player center |
| // to any actor center |
| |
| #define NUMLATCHPICS 100 |
| |
| #undef M_PI |
| #define PI 3.141592657 |
| #define M_PI PI |
| |
| #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 mapshift 6 |
| #define MAPSIZE (1<<mapshift) |
| #define maparea MAPSIZE*MAPSIZE |
| |
| #define mapheight MAPSIZE |
| #define mapwidth MAPSIZE |
| |
| #ifdef USE_HIRES |
| |
| #define TEXTURESHIFT 7 |
| #define TEXTURESIZE (1<<TEXTURESHIFT) |
| #define TEXTUREFROMFIXEDSHIFT 2 |
| #define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1)) |
| |
| #define SPRITESCALEFACTOR 1 |
| |
| #else |
| |
| #define TEXTURESHIFT 6 |
| #define TEXTURESIZE (1<<TEXTURESHIFT) |
| #define TEXTUREFROMFIXEDSHIFT 4 |
| #define TEXTUREMASK (TEXTURESIZE*(TEXTURESIZE-1)) |
| |
| #define SPRITESCALEFACTOR 2 |
| |
| #endif |
| |
| #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 |
| |
| typedef enum |
| { |
| FL_SHOOTABLE = 0x00000001, |
| FL_BONUS = 0x00000002, |
| FL_NEVERMARK = 0x00000004, |
| FL_VISABLE = 0x00000008, |
| FL_ATTACKMODE = 0x00000010, |
| FL_FIRSTATTACK = 0x00000020, |
| FL_AMBUSH = 0x00000040, |
| FL_NONMARK = 0x00000080, |
| FL_FULLBRIGHT = 0x00000100, |
| #ifdef USE_DIR3DSPR |
| // you can choose one of the following values in wl_act1.cpp |
| // to make a static sprite a directional 3d sprite |
| // (see example at the end of the statinfo array) |
| FL_DIR_HORIZ_MID = 0x00000200, |
| FL_DIR_HORIZ_FW = 0x00000400, |
| FL_DIR_HORIZ_BW = 0x00000600, |
| FL_DIR_VERT_MID = 0x00000a00, |
| FL_DIR_VERT_FW = 0x00000c00, |
| FL_DIR_VERT_BW = 0x00000e00, |
| |
| // these values are just used to improve readability of code |
| FL_DIR_NONE = 0x00000000, |
| FL_DIR_POS_MID = 0x00000200, |
| FL_DIR_POS_FW = 0x00000400, |
| FL_DIR_POS_BW = 0x00000600, |
| FL_DIR_POS_MASK = 0x00000600, |
| FL_DIR_VERT_FLAG = 0x00000800, |
| FL_DIR_MASK = 0x00000e00, |
| #endif |
| // next free bit is 0x00001000 |
| } objflag_t; |
| |
| |
| // |
| // sprite constants |
| // |
| |
| enum |
| { |
| SPR_DEMO, |
| #ifndef APOGEE_1_0 |
| SPR_DEATHCAM, |
| #endif |
| // |
| // 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 |
| // |
| #ifdef APOGEE_1_0 |
| SPR_BJ_W1=360, |
| #elif defined(APOGEE_1_1) && defined(UPLOAD) |
| SPR_BJ_W1=406, |
| #else |
| SPR_BJ_W1, |
| #endif |
| 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 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 { |
| none, |
| 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 |
| } wl_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 void (* statefunc) (void *); |
| |
| typedef struct statestruct |
| { |
| boolean rotate; |
| short shapenum; // a shapenum of -1 means get from ob->temp1 |
| short tictime; |
| void (*think) (void *),(*action) (void *); |
| struct statestruct *next; |
| } statetype; |
| |
| |
| //--------------------- |
| // |
| // trivial actor structure |
| // |
| //--------------------- |
| |
| typedef struct statstruct |
| { |
| byte tilex,tiley; |
| short shapenum; // if shapenum == -1 the obj has been removed |
| byte *visspot; |
| uint32_t flags; |
| byte itemnumber; |
| } statobj_t; |
| |
| |
| //--------------------- |
| // |
| // door actor structure |
| // |
| //--------------------- |
| |
| typedef enum |
| { |
| dr_open,dr_closed,dr_opening,dr_closing |
| } doortype; |
| |
| typedef struct doorstruct |
| { |
| byte tilex,tiley; |
| boolean vertical; |
| byte lock; |
| doortype action; |
| short ticcount; |
| } doorobj_t; |
| |
| |
| //-------------------- |
| // |
| // thinking actor structure |
| // |
| //-------------------- |
| |
| typedef struct objstruct |
| { |
| activetype active; |
| short ticcount; |
| classtype obclass; |
| statetype *state; |
| |
| uint32_t flags; // FL_SHOOTABLE, etc |
| |
| int32_t distance; // if negative, wait for that door to open |
| dirtype dir; |
| |
| fixed x,y; |
| word tilex,tiley; |
| byte areanumber; |
| |
| short viewx; |
| word viewheight; |
| fixed transx,transy; // in global coord |
| |
| short angle; |
| short hitpoints; |
| int32_t speed; |
| |
| short temp1,temp2,hidden; |
| struct objstruct *next,*prev; |
| } objtype; |
| |
| enum |
| { |
| bt_nobutton=-1, |
| bt_attack=0, |
| bt_strafe, |
| bt_run, |
| bt_use, |
| bt_readyknife, |
| bt_readypistol, |
| bt_readymachinegun, |
| bt_readychaingun, |
| bt_nextweapon, |
| bt_prevweapon, |
| bt_esc, |
| bt_pause, |
| bt_strafeleft, |
| bt_straferight, |
| bt_moveforward, |
| bt_movebackward, |
| bt_turnleft, |
| bt_turnright, |
| NUMBUTTONS |
| }; |
| |
| |
| #define NUMWEAPONS 4 |
| typedef enum |
| { |
| wp_knife, |
| wp_pistol, |
| wp_machinegun, |
| wp_chaingun |
| } weapontype; |
| |
| |
| enum |
| { |
| gd_baby, |
| gd_easy, |
| gd_medium, |
| gd_hard |
| }; |
| |
| //--------------- |
| // |
| // gamestate structure |
| // |
| //--------------- |
| |
| typedef struct |
| { |
| short difficulty; |
| short mapon; |
| int32_t oldscore,score,nextextra; |
| short lives; |
| short health; |
| short ammo; |
| short keys; |
| weapontype bestweapon,weapon,chosenweapon; |
| |
| short faceframe; |
| short attackframe,attackcount,weaponframe; |
| |
| short episode,secretcount,treasurecount,killcount, |
| secrettotal,treasuretotal,killtotal; |
| int32_t TimeCount; |
| int32_t 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; |
| |
| |
| extern word *mapsegs[MAPPLANES]; |
| extern int mapon; |
| |
| /* |
| ============================================================================= |
| |
| WL_MAIN DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| extern boolean loadedgame; |
| extern fixed focallength; |
| extern int viewscreenx, viewscreeny; |
| extern int viewwidth; |
| extern int viewheight; |
| extern short centerx; |
| extern int32_t heightnumerator; |
| extern fixed scale; |
| |
| extern int dirangle[9]; |
| |
| extern int mouseadjustment; |
| extern int shootdelta; |
| extern unsigned screenofs; |
| |
| extern boolean startgame; |
| extern char str[80]; |
| extern char configdir[256]; |
| extern char configname[13]; |
| |
| // |
| // Command line parameter variables |
| // |
| extern boolean param_debugmode; |
| extern boolean param_nowait; |
| extern int param_difficulty; |
| extern int param_tedlevel; |
| extern int param_joystickindex; |
| extern int param_joystickhat; |
| extern int param_samplerate; |
| extern int param_audiobuffer; |
| extern int param_mission; |
| extern boolean param_goodtimes; |
| extern boolean param_ignorenumchunks; |
| |
| |
| void NewGame (int difficulty,int episode); |
| void CalcProjection (int32_t focal); |
| void NewViewSize (int width); |
| boolean SetViewSize (unsigned width, unsigned height); |
| boolean LoadTheGame(FILE *file,int x,int y); |
| boolean SaveTheGame(FILE *file,int x,int y); |
| void ShowViewSize (int width); |
| void ShutdownId (void); |
| |
| |
| /* |
| ============================================================================= |
| |
| WL_GAME DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| extern gametype gamestate; |
| extern byte bordercol; |
| extern SDL_Surface *latchpics[NUMLATCHPICS]; |
| extern char demoname[13]; |
| |
| void SetupGameLevel (void); |
| void GameLoop (void); |
| void DrawPlayBorder (void); |
| void DrawStatusBorder (byte color); |
| void DrawPlayScreen (void); |
| void DrawPlayBorderSides (void); |
| void ShowActStatus(); |
| |
| void PlayDemo (int demonumber); |
| void RecordDemo (void); |
| |
| |
| #ifdef SPEAR |
| extern int32_t spearx,speary; |
| extern unsigned spearangle; |
| extern boolean spearflag; |
| #endif |
| |
| |
| #define ClearMemory SD_StopDigitized |
| |
| |
| // JAB |
| #define PlaySoundLocTile(s,tx,ty) PlaySoundLocGlobal(s,(((int32_t)(tx) << TILESHIFT) + (1L << (TILESHIFT - 1))),(((int32_t)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 |
| |
| ============================================================================= |
| */ |
| |
| #define BASEMOVE 35 |
| #define RUNMOVE 70 |
| #define BASETURN 35 |
| #define RUNTURN 70 |
| |
| #define JOYSCALE 2 |
| |
| extern byte tilemap[MAPSIZE][MAPSIZE]; // wall values only |
| extern byte spotvis[MAPSIZE][MAPSIZE]; |
| extern objtype *actorat[MAPSIZE][MAPSIZE]; |
| |
| extern objtype *player; |
| |
| extern unsigned tics; |
| extern int viewsize; |
| |
| extern int lastgamemusicoffset; |
| |
| // |
| // current user input |
| // |
| extern int controlx,controly; // range from -100 to 100 |
| extern boolean buttonstate[NUMBUTTONS]; |
| extern objtype objlist[MAXACTORS]; |
| extern boolean buttonheld[NUMBUTTONS]; |
| extern exit_t playstate; |
| extern boolean madenoise; |
| extern statobj_t statobjlist[MAXSTATS]; |
| extern statobj_t *laststatobj; |
| extern objtype *newobj,*killerobj; |
| extern doorobj_t doorobjlist[MAXDOORS]; |
| extern doorobj_t *lastdoorobj; |
| extern int godmode; |
| |
| extern boolean demorecord,demoplayback; |
| extern int8_t *demoptr, *lastdemoptr; |
| extern memptr demobuffer; |
| |
| // |
| // control info |
| // |
| extern boolean mouseenabled,joystickenabled; |
| extern int dirscan[4]; |
| extern int buttonscan[NUMBUTTONS]; |
| extern int buttonmouse[4]; |
| extern int buttonjoy[32]; |
| |
| void InitActorList (void); |
| void GetNewActor (void); |
| void PlayLoop (void); |
| |
| void CenterWindow(word w,word h); |
| |
| void InitRedShifts (void); |
| void FinishPaletteShifts (void); |
| |
| void RemoveObj (objtype *gone); |
| void PollControls (void); |
| int StopMusic(void); |
| void StartMusic(void); |
| void ContinueMusic(int offs); |
| void StartDamageFlash (int damage); |
| void StartBonusFlash (void); |
| |
| #ifdef SPEAR |
| extern int32_t funnyticount; // FOR FUNNY BJ FACE |
| #endif |
| |
| extern objtype *objfreelist; // *obj,*player,*lastobj, |
| |
| extern boolean noclip,ammocheat; |
| extern int singlestep, extravbls; |
| |
| /* |
| ============================================================================= |
| |
| WL_INTER |
| |
| ============================================================================= |
| */ |
| |
| void IntroScreen (void); |
| void PG13(void); |
| void DrawHighScores(void); |
| void CheckHighScore (int32_t score,word other); |
| void Victory (void); |
| void LevelCompleted (void); |
| void ClearSplitVWB (void); |
| |
| void PreloadGraphics(void); |
| |
| |
| /* |
| ============================================================================= |
| |
| WL_DEBUG |
| |
| ============================================================================= |
| */ |
| |
| int DebugKeys (void); |
| |
| /* |
| ============================================================================= |
| |
| WL_DRAW DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| // |
| // math tables |
| // |
| extern short *pixelangle; |
| extern int32_t finetangent[FINEANGLES/4]; |
| extern fixed sintable[]; |
| extern fixed *costable; |
| extern int *wallheight; |
| extern word horizwall[],vertwall[]; |
| extern int32_t lasttimecount; |
| extern int32_t frameon; |
| |
| extern unsigned screenloc[3]; |
| |
| extern boolean fizzlein, fpscounter; |
| |
| extern fixed viewx,viewy; // the focal point |
| extern fixed viewsin,viewcos; |
| |
| void ThreeDRefresh (void); |
| void CalcTics (void); |
| |
| typedef struct |
| { |
| word leftpix,rightpix; |
| word dataofs[64]; |
| // table data after dataofs[rightpix-leftpix+1] |
| } t_compshape; |
| |
| /* |
| ============================================================================= |
| |
| WL_STATE DEFINITIONS |
| |
| ============================================================================= |
| */ |
| #define TURNTICS 10 |
| #define SPDPATROL 512 |
| #define SPDDOG 1500 |
| |
| |
| 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, int32_t move); |
| boolean SightPlayer (objtype *ob); |
| |
| void KillActor (objtype *ob); |
| void DamageActor (objtype *ob, unsigned damage); |
| |
| boolean CheckLine (objtype *ob); |
| boolean CheckSight (objtype *ob); |
| |
| /* |
| ============================================================================= |
| |
| WL_AGENT DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| extern short anglefrac; |
| extern int facecount, facetimes; |
| extern word plux,pluy; // player coordinates scaled to unsigned |
| extern int32_t thrustspeed; |
| extern objtype *LastAttacker; |
| |
| void Thrust (int angle, int32_t speed); |
| void SpawnPlayer (int tilex, int tiley, int dir); |
| void TakeDamage (int points,objtype *attacker); |
| void GivePoints (int32_t points); |
| void GetBonus (statobj_t *check); |
| void GiveWeapon (int weapon); |
| void GiveAmmo (int ammo); |
| void GiveKey (int key); |
| |
| // |
| // player state info |
| // |
| |
| void StatusDrawFace(unsigned picnum); |
| void DrawFace (void); |
| void DrawHealth (void); |
| void HealSelf (int points); |
| void DrawLevel (void); |
| void DrawLives (void); |
| void GiveExtraMan (void); |
| void DrawScore (void); |
| void DrawWeapon (void); |
| void DrawKeys (void); |
| void DrawAmmo (void); |
| |
| |
| /* |
| ============================================================================= |
| |
| WL_ACT1 DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| extern doorobj_t doorobjlist[MAXDOORS]; |
| extern doorobj_t *lastdoorobj; |
| extern short doornum; |
| |
| extern word doorposition[MAXDOORS]; |
| |
| extern byte areaconnect[NUMAREAS][NUMAREAS]; |
| |
| extern boolean areabyplayer[NUMAREAS]; |
| |
| extern word pwallstate; |
| extern word pwallpos; // amount a pushable wall has been moved (0-63) |
| extern word pwallx,pwally; |
| extern byte pwalldir,pwalltile; |
| |
| |
| 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 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); |
| |
| void A_DeathScream (objtype *ob); |
| void SpawnBJVictory (void); |
| |
| /* |
| ============================================================================= |
| |
| WL_TEXT DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| extern char helpfilename[],endfilename[]; |
| |
| extern void HelpScreens(void); |
| extern void EndText(void); |
| |
| |
| /* |
| ============================================================================= |
| |
| GP2X DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| #if defined(GP2X) |
| |
| #if defined(GP2X_940) |
| void GP2X_MemoryInit(void); |
| void GP2X_Shutdown(void); |
| #endif |
| void GP2X_ButtonDown(int button); |
| void GP2X_ButtonUp(int button); |
| |
| #endif |
| |
| |
| /* |
| ============================================================================= |
| |
| MISC DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| static fixed FixedMul(fixed a, fixed b) |
| { |
| return (fixed)(((int64_t)a * b + 0x8000) >> 16); |
| } |
| |
| #ifdef PLAYDEMOLIKEORIGINAL |
| #define DEMOCHOOSE_ORIG_SDL(orig, sdl) ((demorecord || demoplayback) ? (orig) : (sdl)) |
| #define DEMOCOND_ORIG (demorecord || demoplayback) |
| #define DEMOIF_SDL if(DEMOCOND_SDL) |
| #else |
| #define DEMOCHOOSE_ORIG_SDL(orig, sdl) (sdl) |
| #define DEMOCOND_ORIG false |
| #define DEMOIF_SDL |
| #endif |
| #define DEMOCOND_SDL (!DEMOCOND_ORIG) |
| |
| #define GetTicks() ((SDL_GetTicks()*7)/100) |
| |
| #define ISPOINTER(x) ((((uintptr_t)(x)) & ~0xffff) != 0) |
| |
| #define CHECKMALLOCRESULT(x) if(!(x)) Quit("Out of memory at %s:%i", __FILE__, __LINE__) |
| |
| static char* itoa(int value, char* string, int radix) |
| { |
| sprintf(string, "%d", value); |
| return string; |
| } |
| |
| static char* ltoa(long value, char* string, int radix) |
| { |
| sprintf(string, "%ld", value); |
| return string; |
| } |
| |
| #define lengthof(x) (sizeof(x) / sizeof(*(x))) |
| #define endof(x) ((x) + lengthof(x)) |
| |
| static word READWORD(byte **ptr) |
| { |
| word val = (*ptr)[0] | (*ptr)[1] << 8; |
| *ptr += 2; |
| return val; |
| } |
| |
| static longword READLONGWORD(byte **ptr) |
| { |
| longword val = (*ptr)[0] | (*ptr)[1] << 8 | (*ptr)[2] << 16 | (*ptr)[3] << 24; |
| *ptr += 4; |
| return val; |
| } |
| |
| |
| /* |
| ============================================================================= |
| |
| FEATURE DEFINITIONS |
| |
| ============================================================================= |
| */ |
| |
| #ifdef USE_FEATUREFLAGS |
| // The currently available feature flags |
| #define FF_STARSKY 0x0001 |
| #define FF_PARALLAXSKY 0x0002 |
| #define FF_CLOUDSKY 0x0004 |
| #define FF_RAIN 0x0010 |
| #define FF_SNOW 0x0020 |
| |
| // The ffData... variables contain the 16-bit values of the according corners of the current level. |
| // The corners are overwritten with adjacent tiles after initialization in SetupGameLevel |
| // to avoid interpretation as e.g. doors. |
| extern int ffDataTopLeft, ffDataTopRight, ffDataBottomLeft, ffDataBottomRight; |
| |
| /************************************************************* |
| * Current usage of ffData... variables: |
| * ffDataTopLeft: lower 8-bit: ShadeDefID |
| * ffDataTopRight: FeatureFlags |
| * ffDataBottomLeft: CloudSkyDefID or ParallaxStartTexture |
| * ffDataBottomRight: unused |
| *************************************************************/ |
| |
| // The feature flags are stored as a wall in the upper right corner of each level |
| static word GetFeatureFlags() |
| { |
| return ffDataTopRight; |
| } |
| |
| #endif |
| |
| #ifdef USE_FLOORCEILINGTEX |
| void DrawFloorAndCeiling(byte *vbuf, unsigned vbufPitch, int min_wallheight); |
| #endif |
| |
| #ifdef USE_PARALLAX |
| void DrawParallax(byte *vbuf, unsigned vbufPitch); |
| #endif |
| |
| #ifdef USE_DIR3DSPR |
| void Scale3DShape(byte *vbuf, unsigned vbufPitch, statobj_t *ob); |
| #endif |
| |
| #endif |