2006-04-13 20:47:06 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
/*
|
2007-02-08 04:19:39 +00:00
|
|
|
Copyright (C) 2004, 2007 - EDuke32 developers
|
2006-04-13 20:47:06 +00:00
|
|
|
|
2007-02-08 04:19:39 +00:00
|
|
|
This file is part of EDuke32
|
2006-04-13 20:47:06 +00:00
|
|
|
|
2007-02-08 04:19:39 +00:00
|
|
|
EDuke32 is free software; you can redistribute it and/or
|
2006-04-13 20:47:06 +00:00
|
|
|
modify it under the terms of the GNU General Public License version 2
|
|
|
|
as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2007-02-08 04:19:39 +00:00
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
2006-04-13 20:47:06 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#define TICSPERFRAME 3
|
|
|
|
|
|
|
|
// #define VULGARITY
|
|
|
|
|
|
|
|
char *defsfilename = "duke3d.def";
|
|
|
|
|
|
|
|
extern char keystatus[];
|
|
|
|
extern short defaultspritecstat;
|
|
|
|
extern long posx, posy, posz, horiz, qsetmode;
|
|
|
|
extern short ang, cursectnum;
|
|
|
|
extern short ceilingheinum, floorheinum;
|
|
|
|
extern char names[MAXTILES][25];
|
|
|
|
|
|
|
|
extern long ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d;
|
|
|
|
|
|
|
|
extern long zmode, kensplayerheight, zlock;
|
|
|
|
|
|
|
|
extern short editstatus, searchit;
|
|
|
|
extern long searchx, searchy, osearchx, osearchy; //search input
|
|
|
|
extern short searchsector, searchwall, searchstat; //search output
|
|
|
|
|
|
|
|
extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
|
2006-11-19 08:24:46 +00:00
|
|
|
extern unsigned char tempshade, temppal, tempvis, tempxrepeat, tempyrepeat, somethingintab;
|
2006-04-13 20:47:06 +00:00
|
|
|
|
|
|
|
static long ototalclock = 0, clockval[16], clockcnt = 0;
|
|
|
|
|
|
|
|
#define NUMOPTIONS 9
|
|
|
|
#define NUMKEYS 19
|
|
|
|
|
|
|
|
char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0,0};
|
2006-11-19 08:24:46 +00:00
|
|
|
unsigned char keys[NUMBUILDKEYS] =
|
2006-04-13 20:47:06 +00:00
|
|
|
{
|
|
|
|
0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
|
|
|
|
0x1e,0x2c,0xd1,0xc9,0x47,0x49,
|
2006-04-30 21:14:12 +00:00
|
|
|
0x9c,0x1c,0xd,0xc,0xf,0x29
|
2006-04-13 20:47:06 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
int nextvoxid = 0;
|
|
|
|
|
|
|
|
extern long whitecol;
|
|
|
|
extern char vgapal16[4*256];
|
|
|
|
extern void AutoAlignWalls(long nWall0, long ply);
|
|
|
|
extern char changechar(char dachar, long dadir, char smooshyalign, char boundcheck);
|
|
|
|
extern void _printmessage16(char name[82]);
|
|
|
|
extern void updatenumsprites(void);
|
|
|
|
|
|
|
|
extern long lastpm16time, synctics;
|
|
|
|
extern long halfxdim16, midydim16, zoom;
|
|
|
|
extern void fixrepeats(short i);
|
|
|
|
|
|
|
|
char autospritehelp=0,autosecthelp=0;
|
|
|
|
short MinRate=24, MinD=3;
|
|
|
|
long xoldtimerhandler, lastmessagetime;
|
|
|
|
|
2006-11-19 08:24:46 +00:00
|
|
|
char tempbuf[1024]; //1024
|
|
|
|
int numsprite[MAXSPRITES];
|
|
|
|
int multisprite[MAXSPRITES];
|
|
|
|
char lo[32];
|
2006-04-13 20:47:06 +00:00
|
|
|
char levelname[255];
|
2006-11-19 08:24:46 +00:00
|
|
|
short curwall=0,curwallnum=0;
|
|
|
|
short cursearchsprite=0,cursearchspritenum=0,cursector_lotag=0,cursectornum=0;
|
|
|
|
short search_lotag=0,search_hitag=0;
|
|
|
|
char wallsprite=0;
|
|
|
|
char helpon=0;
|
2006-04-13 20:47:06 +00:00
|
|
|
//static char onwater=0;
|
2006-11-19 08:24:46 +00:00
|
|
|
unsigned char onnames=4, usedcount=1;
|
|
|
|
short cursprite;
|
|
|
|
long mousxplc, mousyplc, ppointhighlight;
|
|
|
|
int counter=0;
|
|
|
|
unsigned char nosprites=0,purpleon=0,skill=4;
|
|
|
|
unsigned char framerateon=1,tabgraphic=2,shadepreview=0,autosave=1,sidemode=0;
|
2006-04-13 20:47:06 +00:00
|
|
|
extern long vel, svel, hvel, angvel;
|
|
|
|
long xvel, yvel, timoff;
|
|
|
|
|
2006-12-10 06:49:01 +00:00
|
|
|
static void SearchSectorsForward();
|
|
|
|
static void SearchSectorsBackward();
|
|
|
|
static inline void SpriteName(short spritenum, char *lo2);
|
|
|
|
static int ActorMem(long i);
|
|
|
|
static void PrintStatus(char *string,int num,char x,char y,char color);
|
|
|
|
static void SetBOSS1Palette();
|
|
|
|
static void SetSLIMEPalette();
|
|
|
|
static void SetWATERPalette();
|
|
|
|
static void SetGAMEPalette();
|
|
|
|
static void kensetpalette(char *vgapal);
|
2006-04-13 20:47:06 +00:00
|
|
|
|
|
|
|
extern short grid;
|
|
|
|
|
2006-12-10 06:49:01 +00:00
|
|
|
static void EditSpriteData(short spritenum);
|
|
|
|
static void EditWallData(short wallnum);
|
|
|
|
static void EditSectorData(short sectnum);
|
|
|
|
static void FuncMenu(void);
|
2006-04-13 20:47:06 +00:00
|
|
|
|
|
|
|
char GAMEpalette[768];
|
|
|
|
char WATERpalette[768];
|
|
|
|
char SLIMEpalette[768];
|
|
|
|
char TITLEpalette[768];
|
|
|
|
char REALMSpalette[768];
|
|
|
|
char BOSS1palette[768];
|
|
|
|
|
|
|
|
char num_tables;
|
|
|
|
|
|
|
|
int updownunits=1024;
|
|
|
|
extern short highlightsector[MAXSECTORS], highlightsectorcnt;
|
|
|
|
extern short highlight[MAXWALLS];
|
|
|
|
extern short pointhighlight, linehighlight, highlightcnt;
|
|
|
|
extern short asksave;
|
|
|
|
|
|
|
|
char getmessage[162], getmessageleng;
|
|
|
|
long getmessagetimeoff, charsperline;
|
|
|
|
extern long startposx, startposy, startposz;
|
|
|
|
extern short startang, startsectnum;
|
|
|
|
|
|
|
|
long autosavetimer;
|
|
|
|
extern long numsprites;
|
|
|
|
extern char spritecol2d[MAXTILES][2];
|
|
|
|
extern char custom2dcolors;
|
|
|
|
extern char mlook;
|
|
|
|
|
|
|
|
int intro=0;
|
|
|
|
extern long frameplace, ydim16, halfxdim16, midydim16, zoom;
|
|
|
|
extern char pow2char[8];
|
|
|
|
|
|
|
|
static int acurpalette=0;
|
|
|
|
|
|
|
|
extern void showsectordata(short sectnum);
|
|
|
|
extern void showwalldata(short wallnum);
|
|
|
|
extern void showspritedata(short spritenum);
|
|
|
|
extern long checksectorpointer(short i, short sectnum);
|
|
|
|
|
|
|
|
extern double msens;
|
|
|
|
|
|
|
|
void ContextHelp(short spritenum);
|
|
|
|
void ResetKeys();
|
|
|
|
|
2007-02-25 21:11:59 +00:00
|
|
|
extern void fixspritesectors(void);
|
2006-04-13 20:47:06 +00:00
|
|
|
#define KEY_PRESSED(sc) KB_KeyPressed((sc))
|
2007-04-17 05:54:12 +00:00
|
|
|
|
|
|
|
// REM : This file should be included in file BUILD.C _ONLY_
|
|
|
|
|
|
|
|
#include "names.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This table defines the various zoom levels, the numbers being the pixel width
|
|
|
|
// and height of the sprite when plotted on the screen. Probably zooms in too far
|
|
|
|
// for some, but I'm a blind old git :-(
|
|
|
|
|
|
|
|
#define FUCKING_GOOD_EYESIGHT 16
|
|
|
|
|
|
|
|
static const long ZoomToThumbSize[] =
|
|
|
|
{
|
|
|
|
FUCKING_GOOD_EYESIGHT, 32, 64, 128, 192, 256, 384, 512
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_ZOOMS (sizeof(ZoomToThumbSize)/sizeof(ZoomToThumbSize[0]))
|
|
|
|
|
|
|
|
#define INITIAL_ZOOM 2
|
|
|
|
|
|
|
|
|
|
|
|
// If I wasn't a lazy sod I'd have made these loadable from external config files.
|
|
|
|
|
|
|
|
///////////////////
|
|
|
|
// ACTOR SPRITES //
|
|
|
|
///////////////////
|
|
|
|
|
|
|
|
static const long s_idActors[] =
|
|
|
|
{
|
|
|
|
LIZTROOP, LIZTROOPRUNNING, LIZTROOPSTAYPUT, LIZTROOPSHOOT, LIZTROOPJETPACK,
|
|
|
|
LIZTROOPONTOILET, LIZTROOPJUSTSIT, LIZTROOPDUCKING,
|
|
|
|
PIGCOP, PIGCOPSTAYPUT, PIGCOPDIVE,
|
|
|
|
LIZMAN, LIZMANSTAYPUT, LIZMANSPITTING, LIZMANFEEDING, LIZMANJUMP,
|
|
|
|
COMMANDER, COMMANDERSTAYPUT,
|
|
|
|
OCTABRAIN, OCTABRAINSTAYPUT,
|
|
|
|
ORGANTIC,
|
|
|
|
NEWBEAST, NEWBEASTSTAYPUT, NEWBEASTJUMP,
|
|
|
|
EGG, GREENSLIME, ROTATEGUN, RECON, TANK, BOUNCEMINE,
|
|
|
|
FLOORFLAME,
|
|
|
|
// FEMS
|
|
|
|
FEM1, FEM2, FEM3, FEM4, FEM5, FEM6, FEM7, FEM8, FEM9, FEM10, NAKED1,
|
|
|
|
// Lil' critters
|
|
|
|
SHARK,
|
|
|
|
// BIG critters
|
|
|
|
BOSS1, BOSS1STAYPUT, BOSS1SHOOT, BOSS1LOB,
|
|
|
|
BOSS2,
|
|
|
|
BOSS3,
|
|
|
|
BOSS4, BOSS4STAYPUT
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_ACTORS (sizeof(s_idActors)/sizeof(s_idActors[0]))
|
|
|
|
|
|
|
|
/////////////////
|
|
|
|
// DOOR TILES ///
|
|
|
|
/////////////////
|
|
|
|
|
|
|
|
// Not all of these are tuely door tiles but are useable as such
|
|
|
|
|
|
|
|
static const long s_idDoors[] =
|
|
|
|
{
|
|
|
|
DOORTILE1, DOORTILE2, DOORTILE3, DOORTILE4, DOORTILE5,
|
|
|
|
DOORTILE6, DOORTILE7, DOORTILE8, DOORTILE9, DOORTILE10,
|
|
|
|
312, 313, 314, 345,
|
|
|
|
DOORTILE22, DOORTILE18, DOORTILE19, DOORTILE20,
|
|
|
|
450, 455, 457, 458, 459, 469, 470, 477,
|
|
|
|
DOORTILE14,
|
|
|
|
719, 735, 771,
|
|
|
|
DOORTILE16,
|
|
|
|
843, 858, 883,
|
|
|
|
DOORTILE15, DOORTILE21,
|
|
|
|
1173,
|
|
|
|
DOORTILE11,DOORTILE12,
|
|
|
|
353, 355,
|
|
|
|
// Related items
|
|
|
|
DOORSHOCK, ACCESSCARD
|
|
|
|
};
|
|
|
|
|
|
|
|
#define NUM_DOORS (sizeof(s_idDoors)/sizeof(s_idDoors[0]))
|
|
|
|
|
|
|
|
//////////////////
|
|
|
|
// SWITCH TILES //
|
|
|
|
//////////////////
|
|
|
|
|
|
|
|
static const long s_idSwitches[] =
|
|
|
|
{
|
|
|
|
ACCESSSWITCH,ACCESSSWITCH2, SLOTDOOR, LIGHTSWITCH, SPACEDOORSWITCH, SPACELIGHTSWITCH,
|
|
|
|
FRANKENSTINESWITCH, MULTISWITCH,
|
|
|
|
DIPSWITCH, DIPSWITCH2, DIPSWITCH3, TECHSWITCH,
|
|
|
|
LIGHTSWITCH2, LIGHTSWITCH2+1,
|
|
|
|
POWERSWITCH1, LOCKSWITCH1, POWERSWITCH2, HANDSWITCH, PULLSWITCH,
|
|
|
|
ALIENSWITCH, HANDPRINTSWITCH, NUKEBUTTON,
|
|
|
|
TARGET,
|
|
|
|
4083, 4954 // Busted switches (Atomic)
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_SWITCHES (sizeof(s_idSwitches)/sizeof(s_idSwitches[0]))
|
|
|
|
|
|
|
|
///////////////////
|
|
|
|
// GOODIES TILES //
|
|
|
|
///////////////////
|
|
|
|
|
|
|
|
static const long s_idGoodies[] =
|
|
|
|
{
|
|
|
|
// Ammo
|
|
|
|
AMMO,SHOTGUNAMMO, BATTERYAMMO, RPGAMMO, HEAVYHBOMB, FREEZEAMMO, GROWAMMO, CRYSTALAMMO,
|
|
|
|
DEVISTATORAMMO, HBOMBAMMO,
|
|
|
|
|
|
|
|
// Items (health,etc)
|
|
|
|
COLA, SIXPAK, FIRSTAID, SHIELD, STEROIDS, AIRTANK, JETPACK, HEATSENSOR, ACCESSCARD,
|
|
|
|
BOOTS, ATOMICHEALTH,
|
|
|
|
|
|
|
|
// Weapons
|
|
|
|
FIRSTGUNSPRITE, CHAINGUNSPRITE, RPGSPRITE, FREEZESPRITE, SHRINKERSPRITE,
|
|
|
|
TRIPBOMBSPRITE, SHOTGUNSPRITE, DEVISTATORSPRITE
|
|
|
|
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_GOODIES (sizeof(s_idGoodies)/sizeof(s_idGoodies[0]))
|
|
|
|
|
|
|
|
////////////////////////
|
|
|
|
// ITEMS THAT RESPAWN //
|
|
|
|
////////////////////////
|
|
|
|
|
|
|
|
// Thought there were more than just these :-(
|
|
|
|
|
|
|
|
static const long s_idRespawns[] =
|
|
|
|
{
|
|
|
|
CANWITHSOMETHING, CANWITHSOMETHING2, CANWITHSOMETHING3, CANWITHSOMETHING4,
|
|
|
|
// FEMS
|
|
|
|
FEM1, FEM2, FEM3, FEM4, FEM5, FEM6, FEM7, FEM8, FEM9, FEM10, NAKED1,
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_RESPAWNS (sizeof(s_idRespawns)/sizeof(s_idRespawns[0]))
|
|
|
|
|
|
|
|
////////////////////////
|
|
|
|
// EXPLOSION AND FIRE //
|
|
|
|
////////////////////////
|
|
|
|
|
|
|
|
static const long s_idExplosions[] =
|
|
|
|
{
|
|
|
|
CRACK1, CRACK2, CRACK3, CRACK4,
|
|
|
|
FIREEXT, SEENINE, OOZFILTER,
|
|
|
|
EXPLODINGBARREL, EXPLODINGBARREL2, FIREBARREL, GUNPOWDERBARREL,
|
|
|
|
REACTOR2SPARK, BOLT1, SIDEBOLT1,
|
|
|
|
CEILINGSTEAM,
|
|
|
|
FIREVASE, 2066, BURNING, FIRE, BURNING2, FIRE2
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_EXPLOSIONS (sizeof(s_idExplosions)/sizeof(s_idExplosions[0]))
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
// BUILD STRUCTURE USED IN SELECTING ONE OF ABOVE LTILE LISTS //
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
const struct
|
|
|
|
{
|
|
|
|
const long *pIds ; // ptr to list of tile Ids
|
|
|
|
long nIds ; // num of tile ids
|
|
|
|
char key1 ; // key1 and key2 are two alternative keypresses used to
|
|
|
|
char key2 ; // select tile set. Bodge to do eary upper/lower case handling
|
|
|
|
char *szText ; // description to present to user.
|
|
|
|
} s_TileGroups[] =
|
|
|
|
{
|
|
|
|
{ s_idActors, NUM_ACTORS, 'A', 'a', "(A) Actor group" },
|
|
|
|
{ s_idDoors, NUM_DOORS, 'D', 'd', "(D) Door group" },
|
|
|
|
{ s_idGoodies, NUM_GOODIES, 'G', 'g', "(G) Goodies (ammo, weapons, etc)" },
|
|
|
|
{ s_idRespawns, NUM_RESPAWNS, 'R', 'r', "(R) Respawning Items" },
|
|
|
|
{ s_idSwitches, NUM_SWITCHES, 'S', 's', "(S) Switch group" },
|
|
|
|
{ s_idExplosions, NUM_EXPLOSIONS, 'X', 'x', "(X) eXplosions, fire, sparks, etc" }
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#define NUM_TILE_GROUPS (sizeof(s_TileGroups)/sizeof(s_TileGroups[0]))
|
|
|
|
|
|
|
|
|
|
|
|
#define FIRST_USER_ART_TILE 3584
|
|
|
|
// Some atomic tiles are sprinkled in the V1.3d's area but
|
|
|
|
// this is where the main atomic tiles start :-
|
|
|
|
#define FIRST_ATOMIC_TILE 4096
|
|
|
|
|
|
|
|
extern short localartfreq[MAXTILES];
|
|
|
|
extern short localartlookup[MAXTILES], localartlookupnum;
|
|
|
|
extern long lockclock;
|
|
|
|
extern void clearkeys(void);
|