Huge, awesome patch from Hunter_rus

git-svn-id: https://svn.eduke32.com/eduke32@728 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2008-05-16 19:51:38 +00:00
parent 26de39bc2e
commit 310c7240e1
11 changed files with 3176 additions and 1905 deletions

View file

@ -38,12 +38,14 @@ extern int zmode, kensplayerheight;
extern short defaultspritecstat;
extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
extern unsigned char tempshade, temppal, tempxrepeat, tempyrepeat;
extern unsigned char temppal, tempxrepeat, tempyrepeat;
signed char tempshade;
extern unsigned char somethingintab;
extern unsigned char buildkeys[NUMBUILDKEYS];
extern int ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d, forcesetup;
extern char unrealedlook, quickmapcycling;
extern int ExtInit(void);

File diff suppressed because it is too large Load diff

View file

@ -199,6 +199,10 @@ int loadsetup(const char *fn)
if (readconfig(fp, "mousesensitivity", val, VL) > 0) msens = Bstrtod(val, NULL);
if (readconfig(fp, "mousenavigation", val, VL) > 0) unrealedlook = Batoi(val);
if (readconfig(fp, "quickmapcycling", val, VL) > 0) quickmapcycling = Batoi(val);
for (i=0;i<256;i++)remap[i]=i;
remapinit=1;
if (readconfig(fp, "remap", val, VL) > 0)
@ -299,6 +303,12 @@ int writesetup(const char *fn)
"; Mouse sensitivity\n"
"mousesensitivity = %g\n"
"\n"
"; Mouse navigation\n"
"mousenavigation = %d\n"
"\n"
"; Quick map cycling\n"
"quickmapcycling = %d\n"
"\n"
#if 1
"; Key Settings\n"
"; Here's a map of all the keyboard scan codes: NOTE: values are listed in hex!\n"
@ -358,7 +368,7 @@ int writesetup(const char *fn)
#if 0
option[7]>>4, option[2],
#endif
option[3], msens,
option[3], msens, unrealedlook, quickmapcycling,
#if 1
keys[0], keys[1], keys[2], keys[3], keys[4], keys[5],
keys[6], keys[7], keys[8], keys[9], keys[10], keys[11],

View file

@ -11011,6 +11011,7 @@ void draw2dgrid(int posxe, int posye, short ange, int zoome, short gride)
//
char spritecol2d[MAXTILES][2];
int showfirstwall=0;
void draw2dscreen(int posxe, int posye, short ange, int zoome, short gride)
{
@ -11061,6 +11062,7 @@ void draw2dscreen(int posxe, int posye, short ange, int zoome, short gride)
if ((i == linehighlight) || ((linehighlight >= 0) && (i == wall[linehighlight].nextwall)))
if (totalclock & 16) col += (2<<2);
}
if (showfirstwall && (sector[searchsector].wallptr==i||sector[searchsector].wallptr==wall[i].nextwall))col = 14;
xp1 = mulscale14(wal->x-posxe,zoome);
yp1 = mulscale14(wal->y-posye,zoome);
@ -11474,6 +11476,30 @@ void printext256(int xpos, int ypos, short col, short backcol, char *name, char
for (i=0;name[i];i++)
{
if (name[i] == '^' && isdigit(name[i+1]))
{
char smallbuf[8];
int bi=0;
while (isdigit(name[i+1]) && bi<8)
{
smallbuf[bi++]=name[i+1];
i++;
}
smallbuf[bi++]=0;
if (col)col = atol(smallbuf);
if (gammabrightness)
{
p = curpalette[col];
}
else
{
p.r = britable[curbrightness][ curpalette[col].r ];
p.g = britable[curbrightness][ curpalette[col].g ];
p.b = britable[curbrightness][ curpalette[col].b ];
}
continue;
}
letptr = &fontptr[name[i]<<3];
xx = stx-fontsize;
yy = ypos+7 + 2; //+1 is hack!
@ -11511,6 +11537,19 @@ void printext256(int xpos, int ypos, short col, short backcol, char *name, char
begindrawing(); //{{{
for (i=0;name[i];i++)
{
if (name[i] == '^' && isdigit(name[i+1]))
{
char smallbuf[8];
int bi=0;
while (isdigit(name[i+1]) && bi<8)
{
smallbuf[bi++]=name[i+1];
i++;
}
smallbuf[bi++]=0;
if (col)col = atol(smallbuf);
continue;
}
letptr = &fontptr[name[i]<<3];
ptr = (char *)(ylookup[ypos+7]+(stx-fontsize)+frameplace);
for (y=7;y>=0;y--)

View file

@ -441,7 +441,7 @@ void applypalmap(char *pic, char *palmap, int size, int pal)
}
}
static void applypalmapSkin(char *pic, int sizx, int sizy, int pal)
static void applypalmapSkin(char *pic, int sizx, int sizy, md2model *m, int number, int pal, int surf)
{
int stage;
@ -449,11 +449,12 @@ static void applypalmapSkin(char *pic, int sizx, int sizy, int pal)
for (stage=0;stage<MAXPALCONV;stage++)
{
int pal1=0,pal2=pal;
mdskinmap_t *sk;
mdskinmap_t *sk=modelhead->skinmap;
getpalmap(&stage,&pal1,&pal2);
if (!pal1)return;
for (sk = modelhead->skinmap; sk; sk = sk->next)
mdloadskin((md2model *)m,number,pal1,surf);
for (; sk; sk = sk->next)
if ((int)sk->palette == pal1&&sk->palmap)break;
if (!sk||sk->size!=sizx*sizy)continue;
@ -461,7 +462,7 @@ static void applypalmapSkin(char *pic, int sizx, int sizy, int pal)
}
}
static int daskinloader(int filh, int *fptr, int *bpl, int *sizx, int *sizy, int *osizx, int *osizy, char *hasalpha, int pal, char effect)
static int daskinloader(int filh, int *fptr, int *bpl, int *sizx, int *sizy, int *osizx, int *osizy, char *hasalpha, int pal, char effect, md2model *m, int number, int surf)
{
int picfillen, j,y,x;
char *picfil,*cptr,al=255;
@ -498,7 +499,7 @@ static int daskinloader(int filh, int *fptr, int *bpl, int *sizx, int *sizy, int
{ free(picfil); free(pic); return -1; }
free(picfil);
applypalmapSkin((char *)pic,tsizx,tsizy,pal);
applypalmapSkin((char *)pic,tsizx,tsizy,m,number,pal,surf);
cptr = &britable[gammabrightness ? 0 : curbrightness][0];
r=(glinfo.bgra)?hictinting[pal].b:hictinting[pal].r;
g=hictinting[pal].g;
@ -763,7 +764,7 @@ int mdloadskin(md2model *m, int number, int pal, int surf)
cachefil = -1; // the compressed version will be saved to disk
if ((filh = kopen4load(fn, 0)) < 0) return -1;
if (daskinloader(filh,&fptr,&bpl,&xsiz,&ysiz,&osizx,&osizy,&hasalpha,pal,(globalnoeffect)?0:hictinting[pal].f))
if (daskinloader(filh,&fptr,&bpl,&xsiz,&ysiz,&osizx,&osizy,&hasalpha,pal,(globalnoeffect)?0:hictinting[pal].f,m,number,surf))
{
kclose(filh);
initprintf("Failed loading skin file \"%s\"\n", fn);
@ -1617,8 +1618,6 @@ static int md3draw(md3model *m, spritetype *tspr)
}
for (surfi=0;surfi<m->head.numsurfs;surfi++)
{
int pal1;
s = &m->head.surfs[surfi];
v0 = &s->xyzn[m->cframe*s->numverts];
v1 = &s->xyzn[m->nframe*s->numverts];
@ -1680,9 +1679,6 @@ static int md3draw(md3model *m, spritetype *tspr)
mat[3] = mat[7] = mat[11] = 0.f; mat[15] = 1.f; bglLoadMatrixf(mat);
// PLAG: End
for (pal1=SPECPAL;pal1<=REDPAL;pal1++)
mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,sprite[tspr->owner].pal)].skinnum,pal1,surfi);
i = mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,sprite[tspr->owner].pal)].skinnum,globalpal,surfi); if (!i) continue;
//i = mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,sprite[tspr->owner].pal)].skinnum,surfi); //hack for testing multiple surfaces per MD3
bglBindTexture(GL_TEXTURE_2D, i);

View file

@ -1249,7 +1249,7 @@ void writexcache(char *fn, int len, int dameth, char effect, texcacheheader *hea
unsigned int padx=0, pady=0;
GLuint gi;
if (!glinfo.texcompr || !glusetexcompr || !glusetexcache) return;
if (!glinfo.texcompr || !glusetexcompr || !glusetexcache) {initprintf("\n");return;}
if (!bglCompressedTexImage2DARB || !bglGetCompressedTexImageARB)
{
// lacking the necessary extensions to do this
@ -4118,6 +4118,7 @@ void polymost_drawrooms()
{
short hitsect, hitwall, hitsprite;
int vx, vy, vz, hitx, hity, hitz;
int cz, fz;
ox2 = (searchx-ghalfx)/1.2; oy2 = (searchy-ghoriz)/ 1.2; oz2 = ghalfx;
@ -4139,9 +4140,12 @@ void polymost_drawrooms()
hitallsprites = 1;
hitscan(globalposx,globalposy,globalposz,globalcursectnum, //Start position
vx>>12,vy>>12,vz>>8,&hitsect,&hitwall,&hitsprite,&hitx,&hity,&hitz,0xffff0030);
getzsofslope(hitsect,hitx,hity,&cz,&fz);
hitallsprites = 0;
searchsector = hitsect;
if (hitz<cz) searchstat = 1;else
if (hitz>fz) searchstat = 2;else
if (hitwall >= 0)
{
searchwall = hitwall; searchstat = 0;
@ -5547,6 +5551,31 @@ int polymost_printext256(int xpos, int ypos, short col, short backcol, char *nam
bglBegin(GL_QUADS);
for (c=0; name[c]; c++)
{
if (name[c] == '^' && isdigit(name[c+1]))
{
char smallbuf[8];
int bi=0;
while (isdigit(name[c+1]) && bi<8)
{
smallbuf[bi++]=name[c+1];
c++;
}
smallbuf[bi++]=0;
if (col)col = atol(smallbuf);
if (gammabrightness)
{
p = curpalette[col];
}
else
{
p.r = britable[curbrightness][ curpalette[col].r ];
p.g = britable[curbrightness][ curpalette[col].g ];
p.b = britable[curbrightness][ curpalette[col].b ];
}
bglColor4ub(p.r,p.g,p.b,255);
continue;
}
tx = (float)(name[c]%32)/32.0;
ty = (float)((name[c]/32) + (fontsize*8))/16.0;
@ -5932,8 +5961,6 @@ void polymost_precache(int dapicnum, int dapalnum, int datype)
for (i=0;i<=j;i++)
{
int pal1;
for (pal1=SPECPAL;pal1<=REDPAL;pal1++)mdloadskin((md2model*)models[mid],0,pal1,i);
mdloadskin((md2model*)models[mid], 0, dapalnum, i);
}
}

View file

@ -2393,10 +2393,15 @@ static void moveweapons(void)
}
for (f=1;f<=hittype[i].projectile.velmult;f++)
{
dax = s->x;
day = s->y;
daz = s->z;
j = movesprite(i,
(k*(sintable[(s->ang+512)&2047]))>>14,
(k*(sintable[s->ang&2047]))>>14,ll,qq);
if (j)break;
}
if (!(hittype[i].projectile.workslike & PROJECTILE_FLAG_BOUNCESOFFWALLS) && s->yvel >= 0)
if (FindDistance2D(s->x-sprite[s->yvel].x,s->y-sprite[s->yvel].y) < 256)

File diff suppressed because it is too large Load diff

View file

@ -6676,6 +6676,10 @@ void animatesprites(int x,int y,int a,int smoothratio)
#if defined(POLYMOST) && defined(USE_OPENGL)
if (bpp > 8 && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD))
{
int v=getangle(t->xvel,t->zvel>>4);
if (v>1023)v-=2048;
spriteext[i].pitch=v;
t->cstat &= ~4;
break;
}

View file

@ -172,7 +172,7 @@ int ReadGameVars(int fil)
{
//Bsprintf(g_szBuf,"Reading value array for %s (%d)",aGameVars[i].szLabel,sizeof(int) * MAXPLAYERS);
//AddLog(g_szBuf);
if (kdfread(aGameArrays[i].plValues,sizeof(intptr_t) * aGameArrays[i].size, 1, fil) != 1) goto corrupt;
if (kdfread(aGameArrays[i].plValues,sizeof(intptr_t) * aGameArrays[i].size, 1, fil) < 1) goto corrupt;
}
// Bsprintf(g_szBuf,"CP:%s %d",__FILE__,__LINE__);

View file

@ -1,203 +1,205 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2004, 2007 - EDuke32 developers
This file is part of EDuke32
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
char *defsfilename = "duke3d.def";
extern char keystatus[];
extern short defaultspritecstat;
extern int posx, posy, posz, horiz, qsetmode;
extern short ang, cursectnum;
extern short ceilingheinum, floorheinum;
extern char names[MAXTILES][25];
extern int ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d;
extern int zmode, kensplayerheight, zlock;
extern short editstatus, searchit;
extern int searchx, searchy, osearchx, osearchy; //search input
extern short searchsector, searchwall, searchstat; //search output
extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
extern unsigned char tempshade, temppal, tempvis, tempxrepeat, tempyrepeat, somethingintab;
static int ototalclock = 0, clockval[16], clockcnt = 0;
#define NUMOPTIONS 9
#define NUMKEYS 19
char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0,0};
unsigned char keys[NUMBUILDKEYS] =
{
0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
0x1e,0x2c,0xd1,0xc9,0x47,0x49,
0x9c,0x1c,0xd,0xc,0xf,0x29
};
int nextvoxid = 0;
extern int whitecol;
extern char vgapal16[4*256];
extern void AutoAlignWalls(int nWall0, int ply);
extern char changechar(char dachar, int dadir, char smooshyalign, char boundcheck);
extern void _printmessage16(char name[82]);
extern void updatenumsprites(void);
extern int lastpm16time, synctics;
extern int halfxdim16, midydim16, zoom;
extern void fixrepeats(short i);
char autospritehelp=0,autosecthelp=0;
short MinRate=24, MinD=3;
int xoldtimerhandler, lastmessagetime;
char tempbuf[1024]; //1024
int numsprite[MAXSPRITES];
int multisprite[MAXSPRITES];
char lo[32];
char levelname[255];
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;
//static char onwater=0;
unsigned char onnames=4, usedcount=1;
short cursprite;
int 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;
extern int vel, svel, hvel, angvel;
int xvel, yvel, timoff;
static void SearchSectorsForward();
static void SearchSectorsBackward();
static inline void SpriteName(short spritenum, char *lo2);
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);
extern short grid;
static void EditSpriteData(short spritenum);
static void EditWallData(short wallnum);
static void EditSectorData(short sectnum);
static void FuncMenu(void);
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;
int getmessagetimeoff, charsperline;
extern int startposx, startposy, startposz;
extern short startang, startsectnum;
int autosavetimer;
extern int numsprites;
extern char spritecol2d[MAXTILES][2];
extern char custom2dcolors;
extern char mlook;
int intro=0;
extern int ydim16, halfxdim16, midydim16, zoom;
extern intptr_t frameplace;
extern char pow2char[8];
static int acurpalette=0;
extern void showsectordata(short sectnum);
extern void showwalldata(short wallnum);
extern void showspritedata(short spritenum);
extern int checksectorpointer(short i, short sectnum);
extern double msens;
void ContextHelp(short spritenum);
void ResetKeys();
extern void fixspritesectors(void);
#define KEY_PRESSED(sc) KB_KeyPressed((sc))
// 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 int ZoomToThumbSize[] =
{
FUCKING_GOOD_EYESIGHT, 32, 64, 128, 192, 256, 384, 512
} ;
#define NUM_ZOOMS (sizeof(ZoomToThumbSize)/sizeof(ZoomToThumbSize[0]))
#define INITIAL_ZOOM 2
typedef struct
{
int *pIds ; // ptr to list of tile Ids
int 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
} TileGroup;
#define MAX_TILE_GROUPS 32
#define MAX_TILE_GROUP_ENTRIES 1024
TileGroup s_TileGroups[MAX_TILE_GROUPS];
static unsigned int tile_groups = 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
#define FIRST_EXTENDED_TILE 6144
#define SECOND_EXTENDED_TILE 9216
extern short localartfreq[MAXTILES];
extern short localartlookup[MAXTILES], localartlookupnum;
extern int lockclock;
extern void clearkeys(void);
//-------------------------------------------------------------------------
/*
Copyright (C) 2004, 2007 - EDuke32 developers
This file is part of EDuke32
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
char *defsfilename = "duke3d.def";
extern char keystatus[];
extern short defaultspritecstat;
extern int posx, posy, posz, horiz, qsetmode;
extern short ang, cursectnum;
extern short ceilingheinum, floorheinum;
extern char names[MAXTILES][25];
extern int ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d;
extern int zmode, kensplayerheight, zlock;
extern short editstatus, searchit;
extern int searchx, searchy, osearchx, osearchy; //search input
extern short searchsector, searchwall, searchstat; //search output
extern short temppicnum, tempcstat, templotag, temphitag, tempextra;
extern unsigned char temppal, tempvis, tempxrepeat, tempyrepeat, somethingintab;
extern signed char tempshade;
static int ototalclock = 0, clockval[16], clockcnt = 0;
#define NUMOPTIONS 9
#define NUMKEYS 19
char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0,0};
unsigned char keys[NUMBUILDKEYS] =
{
0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39,
0x1e,0x2c,0xd1,0xc9,0x47,0x49,
0x9c,0x1c,0xd,0xc,0xf,0x29
};
int nextvoxid = 0;
extern int whitecol;
extern char vgapal16[4*256];
extern void AutoAlignWalls(int nWall0, int ply);
extern char changechar(char dachar, int dadir, char smooshyalign, char boundcheck);
extern void _printmessage16(char name[82]);
extern void updatenumsprites(void);
extern int lastpm16time, synctics;
extern int halfxdim16, midydim16, zoom;
extern void fixrepeats(short i);
char autospritehelp=0,autosecthelp=0;
short MinRate=24, MinD=3;
int xoldtimerhandler, lastmessagetime=-1;
char tempbuf[1024]; //1024
int numsprite[MAXSPRITES];
int multisprite[MAXSPRITES];
char lo[32];
char levelname[255];
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;
//static char onwater=0;
unsigned char onnames=4, usedcount=1;
short cursprite;
int 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;
extern int vel, svel, hvel, angvel;
int xvel, yvel, timoff;
static void SearchSectorsForward();
static void SearchSectorsBackward();
static inline void SpriteName(short spritenum, char *lo2);
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);
extern short grid;
static void EditSpriteData(short spritenum);
static void EditWallData(short wallnum);
static void EditSectorData(short sectnum);
static void FuncMenu(void);
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;
int getmessagetimeoff, charsperline;
extern int startposx, startposy, startposz;
extern short startang, startsectnum;
int autosavetimer;
extern int numsprites;
extern int showfirstwall;
extern char spritecol2d[MAXTILES][2];
extern char custom2dcolors;
extern char mlook;
int intro=0;
extern int ydim16, halfxdim16, midydim16, zoom;
extern intptr_t frameplace;
extern char pow2char[8];
static int acurpalette=0;
extern void showsectordata(short sectnum);
extern void showwalldata(short wallnum);
extern void showspritedata(short spritenum);
extern int checksectorpointer(short i, short sectnum);
extern double msens;
void ContextHelp(short spritenum);
void ResetKeys();
extern void fixspritesectors(void);
#define KEY_PRESSED(sc) KB_KeyPressed((sc))
// 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 int ZoomToThumbSize[] =
{
FUCKING_GOOD_EYESIGHT, 32, 64, 128, 192, 256, 384, 512
} ;
#define NUM_ZOOMS (sizeof(ZoomToThumbSize)/sizeof(ZoomToThumbSize[0]))
#define INITIAL_ZOOM 2
typedef struct
{
int *pIds ; // ptr to list of tile Ids
int 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
} TileGroup;
#define MAX_TILE_GROUPS 32
#define MAX_TILE_GROUP_ENTRIES 1024
TileGroup s_TileGroups[MAX_TILE_GROUPS];
static unsigned int tile_groups = 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
#define FIRST_EXTENDED_TILE 6144
#define SECOND_EXTENDED_TILE 9216
extern short localartfreq[MAXTILES];
extern short localartlookup[MAXTILES], localartlookupnum;
extern int lockclock;
extern void clearkeys(void);