545 lines
14 KiB
C
Executable File
545 lines
14 KiB
C
Executable File
/*
|
|
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
#ifndef _rt_def_public
|
|
#define _rt_def_public
|
|
|
|
|
|
// RT_DEF.H Zee big one
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "develop.h"
|
|
#define SAVE_SCREEN 1
|
|
|
|
#if PLATFORM_UNIX
|
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
|
#include <limits.h>
|
|
#include <dirent.h>
|
|
#include <ctype.h>
|
|
#endif
|
|
|
|
#if (defined _MSC_VER)
|
|
/* __int64 is built in. */
|
|
#include <malloc.h>
|
|
#include <fcntl.h>
|
|
#include <io.h>
|
|
//#define alloca(x) _alloca(x)
|
|
#define access(x, y) _access(x, y)
|
|
#define F_OK 0
|
|
#elif (defined __GNUC__)
|
|
#define __int64 long long
|
|
#else
|
|
#error please define your platform.
|
|
#endif
|
|
|
|
#if PLATFORM_DOS || PLATFORM_WIN32
|
|
#define PATH_SEP_CHAR '\\'
|
|
#define PATH_SEP_STR "\\"
|
|
#elif PLATFORM_UNIX
|
|
#define PATH_SEP_CHAR '/'
|
|
#define PATH_SEP_STR "/"
|
|
#define ROOTDIR "/"
|
|
#define CURDIR "./"
|
|
#elif PLATFORM_MACCLASSIC
|
|
#define PATH_SEP_CHAR ':'
|
|
#define PATH_SEP_STR ":"
|
|
#else
|
|
#error please define your platform.
|
|
#endif
|
|
|
|
#if (!defined MAX_PATH)
|
|
#if (defined MAXPATHLEN)
|
|
#define MAX_PATH MAXPATHLEN
|
|
#elif (defined PATH_MAX)
|
|
#define MAX_PATH PATH_MAX
|
|
#else
|
|
#define MAX_PATH 256
|
|
#endif
|
|
#endif
|
|
|
|
//
|
|
//
|
|
//
|
|
//***************************************************************************
|
|
//
|
|
// Global Constants
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef DATADIR
|
|
#define DATADIR ""
|
|
#endif
|
|
|
|
#undef PI
|
|
#undef M_PI
|
|
|
|
#ifndef NULL
|
|
#define NULL 0
|
|
#endif
|
|
|
|
#define PI 3.141592657
|
|
#define LONG(a) ((int)a)
|
|
#define M_PI 3.14159
|
|
|
|
#ifndef O_BINARY
|
|
#define O_BINARY 0
|
|
#endif
|
|
|
|
#ifndef O_TEXT
|
|
#define O_TEXT 0
|
|
#endif
|
|
|
|
#ifndef min
|
|
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
#ifndef max
|
|
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
|
#endif
|
|
|
|
#if !PLATFORM_DOS
|
|
#if PLATFORM_WIN32
|
|
#define strcmpi(x, y) stricmp(x, y)
|
|
#define _fstricmp(x, y) stricmp(x, y)
|
|
#elif PLATFORM_UNIX
|
|
#ifndef strcmpi
|
|
#define strcmpi(x, y) strcasecmp(x, y)
|
|
#endif
|
|
|
|
#ifndef stricmp
|
|
#define stricmp(x, y) strcasecmp(x, y)
|
|
#endif
|
|
|
|
#ifndef _fstricmp
|
|
#define _fstricmp(x, y) strcasecmp(x, y)
|
|
#endif
|
|
|
|
char *strupr(char *);
|
|
char *itoa(int, char *, int);
|
|
char *ltoa(long, char *, int);
|
|
char *ultoa(unsigned long, char *, int);
|
|
char getch(void);
|
|
long filelength(int handle);
|
|
#else
|
|
#error please define for your platform.
|
|
#endif
|
|
|
|
#if !defined(ANSIESC)
|
|
#define STUB_FUNCTION fprintf(stderr,"STUB: %s at " __FILE__ ", line %d, thread %d\n",__FUNCTION__,__LINE__,getpid())
|
|
#else
|
|
#define STUB_FUNCTION
|
|
#endif
|
|
|
|
#define far
|
|
#define cdecl
|
|
#endif
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Screen Constants
|
|
//
|
|
//***************************************************************************
|
|
#define VIEWGLOBAL 0x10000 // globals visable flush to wall
|
|
/*
|
|
#define VIEWWIDTH MAXSCREENWIDTH//320*2 // size of view window
|
|
#define VIEWHEIGHT MAXSCREENHEIGHT//200*2
|
|
#define MAXSCANLINES MAXSCREENHEIGHT//200*2 // size of ylookup table
|
|
*/
|
|
#define CHARWIDTH 2
|
|
#define TILEWIDTH 4
|
|
#define STATUSLINES 16
|
|
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Engine Constants
|
|
//
|
|
//***************************************************************************
|
|
|
|
#define ANGLES 2048 // must be divisible by 4
|
|
#define ANGLEQUAD (ANGLES/4)
|
|
#define FINEANGLES 2048
|
|
#define FINEANGLEQUAD (FINEANGLES/4)
|
|
#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 ANGLESDIV8 (ANGLES/8)
|
|
#define MINDIST (0x5800l)
|
|
#define PIXRADIUS 512
|
|
#define FOCALLENGTH (0x5700l) // in global coordinates
|
|
#define MAXTICS 10
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Map Constants/ macros
|
|
//
|
|
//***************************************************************************
|
|
|
|
|
|
#define GLOBAL1 (1l<<16)
|
|
#define TILEGLOBAL GLOBAL1
|
|
#define PIXGLOBAL (GLOBAL1/64)
|
|
#define TILESHIFT 16l
|
|
#define UNSIGNEDSHIFT 8
|
|
#define PLAYERSIZE 0x5700l // player radius
|
|
#define MAPSIZE 128 // maps are 64*64 max
|
|
#define NUMAREAS 47
|
|
#define MAPSPOT(x,y,plane) (mapplanes[plane][MAPSIZE*(y)+(x)])
|
|
#define AREATILE 107
|
|
#define ICONARROWS 72
|
|
#define PUSHABLETILE 80
|
|
#define ELEVATORTILE 72
|
|
#define ALTELEVATORTILE 106
|
|
#define LASTLEVELVALUE 459
|
|
|
|
#define AREANUMBER(x,y) (MAPSPOT((x),(y),0)-AREATILE)
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Scale Constants
|
|
//
|
|
//***************************************************************************
|
|
|
|
#define SFRACBITS 16
|
|
#define SFRACUNIT (0x10000)
|
|
#define FRACUNIT (0x100)
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Actor Constants
|
|
//
|
|
//***************************************************************************
|
|
|
|
#define RUNSPEED 6000
|
|
#define MINACTORDIST 0x9000l
|
|
#define MAXSTATS 400 // max number of lamps, bonus, etc
|
|
|
|
#define MAXWALLTILES 105 // max number of wall tiles
|
|
#define MAXACTORS 600
|
|
#define NORTH 0
|
|
#define EAST 1
|
|
#define SOUTH 2
|
|
#define WEST 3
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Input Defines - joystick, keyboard and mouse
|
|
//
|
|
//***************************************************************************
|
|
|
|
#define MaxJoys 2
|
|
#define MaxKbds 2
|
|
#define MaxJoys 2
|
|
#define NumCodes 128
|
|
|
|
// Key definitions
|
|
|
|
#define key_None 0
|
|
#define key_Return 0x0d
|
|
#define key_Enter key_Return
|
|
#define key_Escape 0x1b
|
|
#define key_Space 0x20
|
|
#define key_BackSpace 0x08
|
|
#define key_Tab 0x09
|
|
#define key_Delete 0x7f
|
|
|
|
#define ANGLEBITS 16
|
|
#define ANGLEFRACMAX (FINEANGLES<<ANGLEBITS)
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// SWIFT Constants
|
|
//
|
|
//***************************************************************************
|
|
|
|
//
|
|
// device type codes, returned in deviceType field (SWIFT_StaticData)
|
|
//
|
|
#define SWIFT_DEV_NONE 0
|
|
#define SWIFT_DEV_CYBERMAN 1
|
|
|
|
//
|
|
// Dynamic device data
|
|
//
|
|
#define SDD_EXTERNAL_POWER_CONNECTED 1
|
|
#define SDD_EXTERNAL_POWER_TOO_HIGH 2
|
|
|
|
#define AX(r) ((r).x.eax)
|
|
#define BX(r) ((r).x.ebx)
|
|
#define CX(r) ((r).x.ecx)
|
|
#define DX(r) ((r).x.edx)
|
|
#define SI(r) ((r).x.esi)
|
|
#define DI(r) ((r).x.edi)
|
|
|
|
//***************************************************************************
|
|
//
|
|
// Global Types
|
|
//
|
|
//***************************************************************************
|
|
|
|
/////////////////// GLOBAL DATA TYPES ///////////////////////////////
|
|
|
|
|
|
typedef unsigned char byte;
|
|
typedef unsigned short int word;
|
|
typedef unsigned int longword;
|
|
typedef int fixed;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////// GLOBAL ENUMERATED TYPES ///////////////////////
|
|
|
|
#ifdef __WATCOMC__
|
|
typedef enum
|
|
{false,
|
|
true
|
|
}
|
|
boolean;
|
|
#else
|
|
/* boolean is serialized at the moment, and watcomc made it a byte. */
|
|
|
|
typedef unsigned char boolean;
|
|
enum {
|
|
false, true
|
|
};
|
|
#endif
|
|
|
|
|
|
|
|
|
|
typedef enum {
|
|
east,
|
|
northeast,
|
|
north,
|
|
northwest,
|
|
west,
|
|
southwest,
|
|
south,
|
|
southeast,
|
|
nodir
|
|
} dirtype;
|
|
|
|
typedef enum
|
|
{SPRITE,
|
|
WALL,
|
|
ACTOR,
|
|
DOOR,
|
|
PWALL,
|
|
MWALL
|
|
}
|
|
thingtype;
|
|
|
|
#define NUMTXBUTTONS 16
|
|
enum {
|
|
bt_nobutton=-1,
|
|
bt_attack=0,
|
|
bt_strafe=1,
|
|
bt_run=2,
|
|
bt_use=3,
|
|
bt_lookup=4,
|
|
bt_lookdown=5,
|
|
bt_swapweapon=6,
|
|
bt_dropweapon=7,
|
|
bt_horizonup=8,
|
|
bt_horizondown=9,
|
|
bt_pistol=10,
|
|
bt_dualpistol=11,
|
|
bt_mp40=12,
|
|
bt_missileweapon=13,
|
|
bt_autorun=14,
|
|
bt_recordsound=15,
|
|
bt_strafeleft=16,
|
|
bt_straferight=17,
|
|
bt_turnaround=18,
|
|
bt_aimbutton=19,
|
|
di_north=20,
|
|
di_east=21,
|
|
di_south=22,
|
|
di_west=23,
|
|
bt_map=24,
|
|
bt_message=25,
|
|
bt_directmsg=26,
|
|
NUMBUTTONS
|
|
};
|
|
|
|
|
|
#if (SHAREWARE == 0)
|
|
#define MAXWEAPONS 13
|
|
#else
|
|
#define MAXWEAPONS 9
|
|
#endif
|
|
|
|
|
|
typedef enum { wp_pistol,
|
|
wp_twopistol,
|
|
wp_mp40,
|
|
wp_bazooka,
|
|
wp_heatseeker,
|
|
wp_drunk,
|
|
wp_firebomb,
|
|
wp_firewall,
|
|
wp_godhand,
|
|
|
|
#if (SHAREWARE == 0)
|
|
wp_split,
|
|
wp_kes,
|
|
wp_bat,
|
|
wp_dog
|
|
#endif
|
|
|
|
} weapontype;
|
|
|
|
|
|
|
|
enum {
|
|
gd_baby,
|
|
gd_easy,
|
|
gd_medium,
|
|
gd_hard
|
|
};
|
|
|
|
|
|
typedef enum {
|
|
ex_stillplaying,
|
|
ex_completed,
|
|
ex_died,
|
|
ex_warped,
|
|
ex_resetgame,
|
|
ex_loadedgame,
|
|
ex_victorious,
|
|
ex_abort,
|
|
ex_demodone,
|
|
ex_skiplevel,
|
|
ex_secretlevel,
|
|
ex_secretdone,
|
|
ex_titles,
|
|
ex_demorecord,
|
|
ex_demoplayback,
|
|
|
|
ex_bossdied,
|
|
ex_gameover,
|
|
ex_battledone
|
|
} exit_t;
|
|
|
|
// Types for cache lumps (for endian converters)
|
|
enum {
|
|
cache_other,
|
|
cache_pic_t,
|
|
cache_lpic_t,
|
|
cache_font_t,
|
|
cache_lbm_t,
|
|
cache_patch_t,
|
|
cache_transpatch_t,
|
|
cache_cfont_t
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
///////////////// GLOBAL STRUCTURE TYPES //////////////////////////
|
|
|
|
|
|
//=================== SHARED FLAGS =====================================//
|
|
|
|
#define FL_SHOOTABLE 0x01
|
|
#define FL_ACTIVE 0x02
|
|
#define FL_VISIBLE 0x08
|
|
#define FL_NOFRICTION 0x100 //
|
|
#define FL_DYING 0x1000
|
|
#define FL_ALTERNATE 0x20000
|
|
#define FL_GODSTRUCK 0x80000
|
|
#define FL_ABP 0x400000
|
|
#define FL_BLOCK 0x800000
|
|
#define FL_HBM 0x1000000
|
|
#define FL_RIDING 0x2000000
|
|
#define FL_SOLIDCOLOR 0x4000000
|
|
#define FL_SEEN 0x8000000
|
|
#define FL_COLORED 0x10000000
|
|
#define FL_FULLLIGHT 0x80000000
|
|
|
|
//=================== ACTOR FLAGS =====================================//
|
|
|
|
#define FL_NEVERMARK 4
|
|
#define FL_ATTACKMODE 0x10
|
|
#define FL_FIRSTATTACK 0x20
|
|
#define FL_ISFIRE 0x20
|
|
#define FL_AMBUSH 0x40
|
|
#define FL_NONMARK 0x80
|
|
#define FL_DONE 0x200 // used by push column
|
|
#define FL_DODGE 0x400 // "
|
|
#define FL_STUCK 0x800 //
|
|
#define FL_HASAUTO 0x2000
|
|
#define FL_FALLINGOBJECT 0x4000
|
|
#define FL_KEYACTOR 0x8000
|
|
#define FL_HEAD 0x40000
|
|
#define FL_TARGET 0x200000
|
|
#define FL_FLIPPED 0x40000000
|
|
#define FL_CRAZY 0x40000000
|
|
|
|
|
|
//================== PLAYER FLAGS ======================================//
|
|
|
|
#define FL_BPV 0x10
|
|
#define FL_SHROOMS 0x20
|
|
#define FL_AV 0x40
|
|
#define FL_ELASTO 0x200
|
|
#define FL_FLEET 0x400
|
|
#define FL_PUSHED 0x2000
|
|
#define FL_PAIN 0x4000
|
|
#define FL_GODMODE 0x8000
|
|
#define FL_DOGMODE 0x10000
|
|
#define FL_GASMASK 0x100000
|
|
#define FL_DESIGNATED 0x20000000
|
|
#define FL_DIDTAG 0x40000000
|
|
|
|
//================== SPRITE FLAGS ======================================//
|
|
|
|
#define NOTHING -1
|
|
#define FL_BONUS 0x04
|
|
#define FL_LIGHT 0x20
|
|
#define FL_CHANGES 0x40
|
|
#define FL_BACKWARDS 0x100
|
|
#define FL_BANDF 0x200
|
|
#define FL_HEAT 0x400
|
|
#define FL_LIGHTOFF 0x800
|
|
#define FL_ACTOR 0x1000
|
|
#define FL_ROTATING 0x2000
|
|
#define FL_RESPAWN 0x4000
|
|
#define FL_WOODEN 0x8000
|
|
#define FL_METALLIC 0x10000
|
|
#define FL_EARTHEN 0x20000
|
|
#define FL_LIGHTON 0x40000
|
|
#define FL_FADING 0x80000
|
|
#define FL_DEADBODY 0x100000
|
|
#define FL_WEAPON 0x200000
|
|
#define FL_TRANSLUCENT 0x2000000
|
|
#define FL_HEIGHTFLIPPABLE 0x40000000
|
|
|
|
#endif
|