2008-05-16 19:51:38 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
/*
|
2010-05-25 10:56:00 +00:00
|
|
|
Copyright (C) 2010 EDuke32 developers and contributors
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2010-05-25 10:56:00 +00:00
|
|
|
This file is part of EDuke32.
|
2008-05-16 19:51:38 +00:00
|
|
|
|
|
|
|
EDuke32 is free software; you can redistribute it and/or
|
|
|
|
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
|
|
|
|
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.
|
|
|
|
*/
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#include "compat.h"
|
|
|
|
|
|
|
|
#define TICSPERFRAME 3
|
|
|
|
|
|
|
|
// #define VULGARITY
|
|
|
|
|
2008-08-09 06:08:24 +00:00
|
|
|
#define COLOR_RED 248
|
|
|
|
#define COLOR_WHITE 31
|
|
|
|
|
2011-03-08 23:02:38 +00:00
|
|
|
//#define NUMOPTIONS 9
|
|
|
|
//char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0,0};
|
2010-05-18 05:14:17 +00:00
|
|
|
|
2012-11-15 14:28:47 +00:00
|
|
|
char default_buildkeys[NUMBUILDKEYS] =
|
2009-01-10 07:38:50 +00:00
|
|
|
{
|
|
|
|
0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
|
|
|
|
0x1e,0x2c,0xd1,0xc9,0x47,0x49,
|
2008-05-16 19:51:38 +00:00
|
|
|
0x9c,0x1c,0xd,0xc,0xf,0x29
|
2009-01-10 07:38:50 +00:00
|
|
|
};
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
extern char changechar(char dachar, int32_t dadir, char smooshyalign, char boundcheck);
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2011-05-15 22:37:24 +00:00
|
|
|
static char autospritehelp=0, autosecthelp=0;
|
|
|
|
//static int32_t lastmessagetime=-1;
|
2010-05-18 05:14:17 +00:00
|
|
|
|
|
|
|
static char tempbuf[1024];
|
2011-02-15 21:02:43 +00:00
|
|
|
static int32_t numsprite[MAXTILES], multisprite[MAXTILES];
|
2010-05-18 05:14:17 +00:00
|
|
|
static char lo[64];
|
|
|
|
static int16_t curwall=0, curwallnum=0;
|
|
|
|
static int16_t /*cursearchsprite=0,*/ cursearchspritenum=0, cursector_lotag=0, cursectornum=0;
|
|
|
|
static int16_t search_lotag=0,search_hitag=0;
|
|
|
|
static char wallsprite=0;
|
|
|
|
static char helpon=0;
|
2008-05-16 19:51:38 +00:00
|
|
|
//static char onwater=0;
|
2010-05-18 05:14:17 +00:00
|
|
|
static uint8_t onnames=4, usedcount=1;
|
|
|
|
static int16_t cursprite;
|
|
|
|
int32_t mousxplc, mousyplc;
|
|
|
|
static int32_t ppointhighlight;
|
|
|
|
//static int32_t counter=0;
|
|
|
|
static uint8_t nosprites=0,purpleon=0,skill=4;
|
2010-07-03 08:53:57 +00:00
|
|
|
static uint8_t framerateon=1,shadepreview=0;
|
2010-05-18 05:14:17 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t autosave=180;
|
2010-05-18 05:14:17 +00:00
|
|
|
static int32_t autosavetimer;
|
|
|
|
|
|
|
|
static void SearchSectors(int32_t dir);
|
2009-01-09 09:29:17 +00:00
|
|
|
static inline void SpriteName(int16_t spritenum, char *lo2);
|
2011-02-15 21:02:43 +00:00
|
|
|
//static void PrintStatus(const char *string,int32_t num,char x,char y,char color);
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
static void EditSpriteData(int16_t spritenum);
|
|
|
|
static void EditWallData(int16_t wallnum);
|
|
|
|
static void EditSectorData(int16_t sectnum);
|
2008-05-16 19:51:38 +00:00
|
|
|
static void FuncMenu(void);
|
2014-04-06 22:24:14 +00:00
|
|
|
#ifdef LUNATIC
|
|
|
|
static void LuaFuncMenu(void);
|
|
|
|
#endif
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2012-03-22 22:46:56 +00:00
|
|
|
#define BASEPALCOUNT 6
|
2011-01-27 06:35:52 +00:00
|
|
|
|
2012-03-22 22:46:56 +00:00
|
|
|
static uint8_t WATERpalette[768], SLIMEpalette[768], TITLEpalette[768];
|
2010-05-18 05:14:17 +00:00
|
|
|
static uint8_t REALMSpalette[768], BOSS1palette[768];
|
|
|
|
|
2014-02-16 19:16:06 +00:00
|
|
|
uint8_t *basepaltable[BASEPALCOUNT] = {
|
2014-02-16 19:16:03 +00:00
|
|
|
palette, WATERpalette, SLIMEpalette,
|
|
|
|
REALMSpalette, TITLEpalette, BOSS1palette,
|
|
|
|
};
|
2011-01-27 06:35:52 +00:00
|
|
|
|
|
|
|
|
2014-02-16 19:16:05 +00:00
|
|
|
static int32_t g_firstFogPal;
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
static int32_t updownunits=1024;
|
2008-05-16 19:51:38 +00:00
|
|
|
|
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
static char getmessage[162], getmessageleng;
|
|
|
|
static int32_t getmessagetimeoff; //, charsperline;
|
|
|
|
|
|
|
|
//int32_t intro=0;
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
static int32_t acurpalette=0;
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
//void ContextHelp(int16_t spritenum);
|
|
|
|
//void ResetKeys();
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
//#define KEY_PRESSED(sc) KB_KeyPressed((sc))
|
2008-05-16 19:51:38 +00:00
|
|
|
|
|
|
|
// 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
|
2009-01-09 09:29:17 +00:00
|
|
|
static const int32_t ZoomToThumbSize[] =
|
2008-05-16 19:51:38 +00:00
|
|
|
{
|
|
|
|
FUCKING_GOOD_EYESIGHT, 32, 64, 128, 192, 256, 384, 512
|
2010-05-18 05:14:17 +00:00
|
|
|
};
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2014-03-22 09:25:15 +00:00
|
|
|
#define NUM_ZOOMS ARRAY_SIZE(ZoomToThumbSize)
|
2008-05-16 19:51:38 +00:00
|
|
|
#define INITIAL_ZOOM 2
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2010-05-18 05:14:17 +00:00
|
|
|
int32_t *pIds; // ptr to list of tile Ids
|
|
|
|
int32_t nIds; // num of tile ids
|
|
|
|
char *szText; // description to present to user.
|
|
|
|
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 color1; // 2d sprite color 1
|
|
|
|
char color2; // 2d sprite color 2
|
2008-05-16 19:51:38 +00:00
|
|
|
} TileGroup;
|
|
|
|
|
|
|
|
#define MAX_TILE_GROUPS 32
|
|
|
|
#define MAX_TILE_GROUP_ENTRIES 1024
|
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
static TileGroup s_TileGroups[MAX_TILE_GROUPS];
|
|
|
|
static int32_t tilegroupItems;
|
|
|
|
static int32_t tilegroupActors;
|
2010-08-14 21:32:28 +00:00
|
|
|
static int32_t tile_groups = 0;
|
2008-05-16 19:51:38 +00:00
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
|
2008-09-11 21:22:58 +00:00
|
|
|
#define NUMPRINTABLES 94
|
|
|
|
#define MAX_ALPHABETS 32
|
|
|
|
// alphabet definitions struct for the sprite text renderer
|
|
|
|
typedef struct
|
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int16_t pic[NUMPRINTABLES]; // maps printable ASCII chars to tilenums
|
|
|
|
int8_t xofs[NUMPRINTABLES]; // additional offset
|
|
|
|
int8_t yofs[NUMPRINTABLES];
|
2008-09-11 21:22:58 +00:00
|
|
|
} alphabet_t;
|
|
|
|
|
2010-05-18 05:14:17 +00:00
|
|
|
static alphabet_t alphabets[MAX_ALPHABETS];
|
2009-01-09 09:29:17 +00:00
|
|
|
static int32_t numalphabets = 0;
|
2008-09-11 21:22:58 +00:00
|
|
|
|
2008-05-16 19:51:38 +00:00
|
|
|
#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
|
|
|
|
#define FIRST_EXTENDED_TILE 6144
|
|
|
|
#define SECOND_EXTENDED_TILE 9216
|
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
extern int16_t localartfreq[MAXTILES];
|
|
|
|
extern int16_t localartlookup[MAXTILES], localartlookupnum;
|
|
|
|
extern int32_t lockclock;
|
2008-09-12 13:41:18 +00:00
|
|
|
|
2011-02-03 17:44:03 +00:00
|
|
|
static int32_t gs_spriteTagValue[3][7];
|
|
|
|
static char gs_spriteTagInterested[3][7];
|
2010-05-18 05:14:17 +00:00
|
|
|
static int16_t gs_cursprite=-1;
|
2009-03-16 15:18:01 +00:00
|
|
|
|
2011-05-15 22:37:24 +00:00
|
|
|
//int32_t g_musicSize=0;
|