mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 11:10:47 +00:00
Prototype for user-defined tile groups
git-svn-id: https://svn.eduke32.com/eduke32@536 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
423a486b61
commit
fc287ec735
4 changed files with 261 additions and 178 deletions
|
@ -1489,6 +1489,7 @@ void editinput(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# if 0
|
||||||
if (keystatus[0x2f] > 0) //V
|
if (keystatus[0x2f] > 0) //V
|
||||||
{
|
{
|
||||||
if (searchstat == 0) templong = wall[searchwall].picnum;
|
if (searchstat == 0) templong = wall[searchwall].picnum;
|
||||||
|
@ -1510,7 +1511,7 @@ void editinput(void)
|
||||||
asksave = 1;
|
asksave = 1;
|
||||||
keystatus[0x2f] = 0;
|
keystatus[0x2f] = 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (keystatus[0x1a]) // [
|
if (keystatus[0x1a]) // [
|
||||||
{
|
{
|
||||||
keystatus[0x1a] = 0;
|
keystatus[0x1a] = 0;
|
||||||
|
@ -2439,7 +2440,7 @@ char changechar(char dachar, long dadir, char smooshyalign, char boundcheck)
|
||||||
}
|
}
|
||||||
return(dachar);
|
return(dachar);
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
long gettile(long tilenum)
|
long gettile(long tilenum)
|
||||||
{
|
{
|
||||||
char snotbuf[80], ch;
|
char snotbuf[80], ch;
|
||||||
|
@ -2740,6 +2741,7 @@ long drawtilescreen(long pictopleft, long picbox)
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void overheadeditor(void)
|
void overheadeditor(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1755,13 +1755,13 @@ static long m32gettile(long idInitialTile)
|
||||||
nYTiles = ydim / ZoomToThumbSize[s_Zoom];
|
nYTiles = ydim / ZoomToThumbSize[s_Zoom];
|
||||||
nDisplayedTiles = nXTiles * nYTiles;
|
nDisplayedTiles = nXTiles * nYTiles;
|
||||||
|
|
||||||
if (0 == nDisplayedTiles)
|
if (!nDisplayedTiles)
|
||||||
{
|
{
|
||||||
// Eh-up, resolution changed since we were last displaying tiles.
|
// Eh-up, resolution changed since we were last displaying tiles.
|
||||||
s_Zoom--;
|
s_Zoom--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (0 == nDisplayedTiles) ;
|
while (!nDisplayedTiles);
|
||||||
|
|
||||||
keystatus[0x2F] = 0;
|
keystatus[0x2F] = 0;
|
||||||
|
|
||||||
|
@ -1868,7 +1868,7 @@ static long m32gettile(long idInitialTile)
|
||||||
// Check : If no tiles used at all then switch to displaying all tiles
|
// Check : If no tiles used at all then switch to displaying all tiles
|
||||||
//
|
//
|
||||||
|
|
||||||
if (0 == localartfreq[0])
|
if (!localartfreq[0])
|
||||||
{
|
{
|
||||||
localartlookupnum = MAXTILES;
|
localartlookupnum = MAXTILES;
|
||||||
|
|
||||||
|
@ -1911,6 +1911,7 @@ static long m32gettile(long idInitialTile)
|
||||||
{
|
{
|
||||||
if (quitevent) quitevent = 0;
|
if (quitevent) quitevent = 0;
|
||||||
}
|
}
|
||||||
|
idle();
|
||||||
|
|
||||||
// These two lines are so obvious I don't need to comment them ...;-)
|
// These two lines are so obvious I don't need to comment them ...;-)
|
||||||
synctics = totalclock-lockclock;
|
synctics = totalclock-lockclock;
|
||||||
|
@ -2005,14 +2006,14 @@ static long m32gettile(long idInitialTile)
|
||||||
// Ensure tilenum is within valid range
|
// Ensure tilenum is within valid range
|
||||||
//
|
//
|
||||||
|
|
||||||
while (iTile < 0)
|
if (iTile < 0)
|
||||||
{
|
{
|
||||||
iTile += nXTiles;
|
iTile = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (iTile >= MAXTILES) // shouldn't this be the count of num tiles ???
|
if (iTile >= MAXTILES) // shouldn't this be the count of num tiles ???
|
||||||
{
|
{
|
||||||
iTile -= nXTiles;
|
iTile = MAXTILES-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'V' KEYPRESS
|
// 'V' KEYPRESS
|
||||||
|
@ -2037,6 +2038,7 @@ static long m32gettile(long idInitialTile)
|
||||||
SelectAllTiles(iTile);
|
SelectAllTiles(iTile);
|
||||||
|
|
||||||
iTile = FIRST_USER_ART_TILE;
|
iTile = FIRST_USER_ART_TILE;
|
||||||
|
keystatus[0x16] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'A' KEYPRESS : Go straight to start of Atomic edition's art
|
// 'A' KEYPRESS : Go straight to start of Atomic edition's art
|
||||||
|
@ -2045,6 +2047,7 @@ static long m32gettile(long idInitialTile)
|
||||||
SelectAllTiles(iTile);
|
SelectAllTiles(iTile);
|
||||||
|
|
||||||
iTile = FIRST_ATOMIC_TILE;
|
iTile = FIRST_ATOMIC_TILE;
|
||||||
|
keystatus[0x1e] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'T' KEYPRESS = Select from pre-defined tileset
|
// 'T' KEYPRESS = Select from pre-defined tileset
|
||||||
|
@ -2055,6 +2058,18 @@ static long m32gettile(long idInitialTile)
|
||||||
iTile = OnSelectTile(iTile);
|
iTile = OnSelectTile(iTile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 'E' KEYPRESS : Go straight to start of extended art
|
||||||
|
if (keystatus[0x12])
|
||||||
|
{
|
||||||
|
SelectAllTiles(iTile);
|
||||||
|
|
||||||
|
if (iTile == FIRST_EXTENDED_TILE)
|
||||||
|
iTile = SECOND_EXTENDED_TILE;
|
||||||
|
else iTile = FIRST_EXTENDED_TILE;
|
||||||
|
|
||||||
|
keystatus[0x12] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Adjust top-left to ensure tilenum is within displayed range of tiles
|
// Adjust top-left to ensure tilenum is within displayed range of tiles
|
||||||
//
|
//
|
||||||
|
@ -2134,6 +2149,7 @@ static long OnGotoTile(long iTile)
|
||||||
{
|
{
|
||||||
if (quitevent) quitevent = 0;
|
if (quitevent) quitevent = 0;
|
||||||
}
|
}
|
||||||
|
idle();
|
||||||
|
|
||||||
ch = bgetchar();
|
ch = bgetchar();
|
||||||
|
|
||||||
|
@ -2195,6 +2211,15 @@ static long OnSelectTile(long iTile)
|
||||||
long i, j;
|
long i, j;
|
||||||
char ch;
|
char ch;
|
||||||
|
|
||||||
|
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
||||||
|
{
|
||||||
|
if (s_TileGroups[i].pIds != NULL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == NUM_TILE_GROUPS) // no tile groups
|
||||||
|
return (iTile);
|
||||||
|
|
||||||
SelectAllTiles(iTile);
|
SelectAllTiles(iTile);
|
||||||
|
|
||||||
bflushchars();
|
bflushchars();
|
||||||
|
@ -2209,7 +2234,8 @@ static long OnSelectTile(long iTile)
|
||||||
|
|
||||||
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
||||||
{
|
{
|
||||||
printext256(10L, (i+1)*16, whitecol, -1, s_TileGroups[i].szText, 0);
|
if (s_TileGroups[i].szText != NULL)
|
||||||
|
printext256(10L, (i+1)*16, whitecol, -1, s_TileGroups[i].szText, 0);
|
||||||
}
|
}
|
||||||
showframe(1);
|
showframe(1);
|
||||||
|
|
||||||
|
@ -2219,22 +2245,24 @@ static long OnSelectTile(long iTile)
|
||||||
|
|
||||||
bDone = 0;
|
bDone = 0;
|
||||||
|
|
||||||
while (keystatus[1] == 0 && (0 == bDone))
|
while (keystatus[1] == 0 && (!bDone))
|
||||||
{
|
{
|
||||||
if (handleevents())
|
if (handleevents())
|
||||||
{
|
{
|
||||||
if (quitevent) quitevent = 0;
|
if (quitevent) quitevent = 0;
|
||||||
}
|
}
|
||||||
|
idle();
|
||||||
|
|
||||||
ch = bgetchar();
|
ch = bgetchar();
|
||||||
|
|
||||||
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
||||||
{
|
{
|
||||||
if ((ch == s_TileGroups[i].key1) || (ch == s_TileGroups[i].key2))
|
if (s_TileGroups[i].pIds != NULL)
|
||||||
{
|
if ((ch == s_TileGroups[i].key1) || (ch == s_TileGroups[i].key2))
|
||||||
iTile = LoadTileSet(iTile, s_TileGroups[i].pIds, s_TileGroups[i].nIds);
|
{
|
||||||
bDone = 1;
|
iTile = LoadTileSet(iTile, s_TileGroups[i].pIds, s_TileGroups[i].nIds);
|
||||||
}
|
bDone = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2252,7 +2280,7 @@ const char * GetTilePixels(const long idTile)
|
||||||
|
|
||||||
if ((idTile >= 0) && (idTile < MAXTILES))
|
if ((idTile >= 0) && (idTile < MAXTILES))
|
||||||
{
|
{
|
||||||
if (0 == waloff[idTile])
|
if (!waloff[idTile])
|
||||||
{
|
{
|
||||||
loadtile(idTile);
|
loadtile(idTile);
|
||||||
}
|
}
|
||||||
|
@ -3290,11 +3318,11 @@ static void Keys3d(void)
|
||||||
sprite[searchwall].cstat = i;
|
sprite[searchwall].cstat = i;
|
||||||
|
|
||||||
if (sprite[searchwall].cstat&16)
|
if (sprite[searchwall].cstat&16)
|
||||||
sprintf(getmessage,"Sprite (%d) wall aligned",searchwall);
|
sprintf(getmessage,"Sprite (%d) now wall aligned",searchwall);
|
||||||
else if (sprite[searchwall].cstat&32)
|
else if (sprite[searchwall].cstat&32)
|
||||||
sprintf(getmessage,"Sprite (%d) floor aligned",searchwall);
|
sprintf(getmessage,"Sprite (%d) now floor aligned",searchwall);
|
||||||
else
|
else
|
||||||
sprintf(getmessage,"Sprite (%d) un-aligned",searchwall);
|
sprintf(getmessage,"Sprite (%d) now view aligned",searchwall);
|
||||||
message(getmessage);
|
message(getmessage);
|
||||||
asksave = 1;
|
asksave = 1;
|
||||||
}
|
}
|
||||||
|
@ -4498,11 +4526,11 @@ static void Keys2d(void)
|
||||||
sprite[cursprite].cstat = i;
|
sprite[cursprite].cstat = i;
|
||||||
|
|
||||||
if (sprite[cursprite].cstat&16)
|
if (sprite[cursprite].cstat&16)
|
||||||
sprintf(getmessage,"Sprite (%d) is wall aligned",cursprite);
|
sprintf(getmessage,"Sprite (%d) now wall aligned",cursprite);
|
||||||
else if (sprite[cursprite].cstat&32)
|
else if (sprite[cursprite].cstat&32)
|
||||||
sprintf(getmessage,"Sprite (%d) is floor aligned",cursprite);
|
sprintf(getmessage,"Sprite (%d) now floor aligned",cursprite);
|
||||||
else
|
else
|
||||||
sprintf(getmessage,"Sprite (%d) is un-aligned",cursprite);
|
sprintf(getmessage,"Sprite (%d) now view aligned",cursprite);
|
||||||
message(getmessage);
|
message(getmessage);
|
||||||
asksave = 1;
|
asksave = 1;
|
||||||
|
|
||||||
|
@ -5426,7 +5454,13 @@ enum {
|
||||||
T_EOF = -2,
|
T_EOF = -2,
|
||||||
T_ERROR = -1,
|
T_ERROR = -1,
|
||||||
T_INCLUDE = 0,
|
T_INCLUDE = 0,
|
||||||
T_LOADGRP = 1,
|
T_DEFINE = 1,
|
||||||
|
T_LOADGRP,
|
||||||
|
T_TILEGROUP,
|
||||||
|
T_NAME,
|
||||||
|
T_TILE,
|
||||||
|
T_TILERANGE,
|
||||||
|
T_KEY
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -5456,17 +5490,14 @@ static int getatoken(scriptfile *sf, tokenlist *tl, int ntokens)
|
||||||
static tokenlist grptokens[] =
|
static tokenlist grptokens[] =
|
||||||
{
|
{
|
||||||
{ "include", T_INCLUDE },
|
{ "include", T_INCLUDE },
|
||||||
|
{ "#include", T_INCLUDE },
|
||||||
{ "loadgrp", T_LOADGRP },
|
{ "loadgrp", T_LOADGRP },
|
||||||
};
|
};
|
||||||
|
|
||||||
int loadgroupfiles(char *fn)
|
int parsegroupfiles(scriptfile *script)
|
||||||
{
|
{
|
||||||
int tokn;
|
int tokn;
|
||||||
char *cmdtokptr;
|
char *cmdtokptr;
|
||||||
scriptfile *script;
|
|
||||||
|
|
||||||
script = scriptfile_fromfile(fn);
|
|
||||||
if (!script) return -1;
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
@ -5502,7 +5533,7 @@ int loadgroupfiles(char *fn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loadgroupfiles((char *)included);
|
parsegroupfiles(included);
|
||||||
scriptfile_close(included);
|
scriptfile_close(included);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5515,6 +5546,165 @@ int loadgroupfiles(char *fn)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadgroupfiles(char *fn)
|
||||||
|
{
|
||||||
|
scriptfile *script;
|
||||||
|
|
||||||
|
script = scriptfile_fromfile(fn);
|
||||||
|
if (!script) return -1;
|
||||||
|
|
||||||
|
parsegroupfiles(script);
|
||||||
|
|
||||||
|
scriptfile_close(script);
|
||||||
|
scriptfile_clearsymbols();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static tokenlist tgtokens[] =
|
||||||
|
{
|
||||||
|
{ "include", T_INCLUDE },
|
||||||
|
{ "#include", T_INCLUDE },
|
||||||
|
{ "define", T_DEFINE },
|
||||||
|
{ "#define", T_DEFINE },
|
||||||
|
{ "tilegroup", T_TILEGROUP },
|
||||||
|
};
|
||||||
|
|
||||||
|
static tokenlist tgtokens2[] =
|
||||||
|
{
|
||||||
|
{ "tilegroup", T_TILEGROUP },
|
||||||
|
{ "name", T_NAME },
|
||||||
|
{ "tile", T_TILE },
|
||||||
|
{ "tilerange", T_TILERANGE },
|
||||||
|
{ "key", T_KEY },
|
||||||
|
};
|
||||||
|
|
||||||
|
int parsetilegroups(scriptfile *script)
|
||||||
|
{
|
||||||
|
int tokn;
|
||||||
|
char *cmdtokptr;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
tokn = getatoken(script,tgtokens,sizeof(tgtokens)/sizeof(tokenlist));
|
||||||
|
cmdtokptr = script->ltextptr;
|
||||||
|
switch (tokn)
|
||||||
|
{
|
||||||
|
case T_INCLUDE:
|
||||||
|
{
|
||||||
|
char *fn;
|
||||||
|
if (!scriptfile_getstring(script,&fn))
|
||||||
|
{
|
||||||
|
scriptfile *included;
|
||||||
|
|
||||||
|
included = scriptfile_fromfile(fn);
|
||||||
|
if (!included)
|
||||||
|
{
|
||||||
|
initprintf("Warning: Failed including %s on line %s:%d\n",
|
||||||
|
fn, script->filename,scriptfile_getlinum(script,cmdtokptr));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parsetilegroups(included);
|
||||||
|
scriptfile_close(included);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_DEFINE:
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
int number;
|
||||||
|
|
||||||
|
if (scriptfile_getstring(script,&name)) break;
|
||||||
|
if (scriptfile_getsymbol(script,&number)) break;
|
||||||
|
if (scriptfile_addsymbolvalue(name,number) < 0)
|
||||||
|
initprintf("Warning: Symbol %s was NOT redefined to %d on line %s:%d\n",
|
||||||
|
name,number,script->filename,scriptfile_getlinum(script,cmdtokptr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_TILEGROUP:
|
||||||
|
{
|
||||||
|
char *end, *name;
|
||||||
|
int g, i;
|
||||||
|
|
||||||
|
if (scriptfile_getnumber(script,&g)) break;
|
||||||
|
|
||||||
|
if ((unsigned)g >= NUM_TILE_GROUPS) break;
|
||||||
|
|
||||||
|
if (s_TileGroups[g].pIds == NULL)
|
||||||
|
s_TileGroups[g].pIds = Bcalloc(MAX_TILE_GROUP_ENTRIES,sizeof(long));
|
||||||
|
|
||||||
|
// if (scriptfile_getstring(script,&name)) break;
|
||||||
|
|
||||||
|
if (scriptfile_getbraces(script,&end)) break;
|
||||||
|
while (script->textptr < end)
|
||||||
|
{
|
||||||
|
int token = getatoken(script,tgtokens2,sizeof(tgtokens2)/sizeof(tokenlist));
|
||||||
|
switch (token)
|
||||||
|
{
|
||||||
|
case T_NAME:
|
||||||
|
{
|
||||||
|
if (scriptfile_getstring(script,&name)) break;
|
||||||
|
if (s_TileGroups[g].szText != NULL)
|
||||||
|
Bfree(s_TileGroups[g].szText);
|
||||||
|
|
||||||
|
s_TileGroups[g].szText = strdup(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_TILE:
|
||||||
|
{
|
||||||
|
if (scriptfile_getsymbol(script,&i)) break;
|
||||||
|
if (i >= 0 && i < MAXTILES && s_TileGroups[g].nIds < MAX_TILE_GROUP_ENTRIES)
|
||||||
|
s_TileGroups[g].pIds[s_TileGroups[g].nIds++] = i;
|
||||||
|
// OSD_Printf("added tile %d to group %d\n",i,g);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_TILERANGE:
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
if (scriptfile_getsymbol(script,&i)) break;
|
||||||
|
if (scriptfile_getsymbol(script,&j)) break;
|
||||||
|
if (i < 0 || i >= MAXTILES || j < 0 || j >= MAXTILES) break;
|
||||||
|
while (s_TileGroups[g].nIds < MAX_TILE_GROUP_ENTRIES && i < j)
|
||||||
|
{
|
||||||
|
s_TileGroups[g].pIds[s_TileGroups[g].nIds++] = i++;
|
||||||
|
// OSD_Printf("added tile %d to group %d\n",i,g);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_KEY:
|
||||||
|
{
|
||||||
|
char *c;
|
||||||
|
if (scriptfile_getstring(script,&c)) break;
|
||||||
|
s_TileGroups[g].key1 = Btoupper(c[0]);
|
||||||
|
s_TileGroups[g].key2 = Btolower(c[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case T_EOF:
|
||||||
|
return(0);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadtilegroups(char *fn)
|
||||||
|
{
|
||||||
|
scriptfile *script;
|
||||||
|
|
||||||
|
script = scriptfile_fromfile(fn);
|
||||||
|
if (!script) return -1;
|
||||||
|
|
||||||
|
parsetilegroups(script);
|
||||||
|
|
||||||
scriptfile_close(script);
|
scriptfile_close(script);
|
||||||
scriptfile_clearsymbols();
|
scriptfile_clearsymbols();
|
||||||
|
@ -5684,14 +5874,25 @@ int ExtInit(void)
|
||||||
OSD_SetParameters(0,2, 0,0, 4,0);
|
OSD_SetParameters(0,2, 0,0, 4,0);
|
||||||
registerosdcommands();
|
registerosdcommands();
|
||||||
|
|
||||||
|
loadtilegroups("tiles.cfg");
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtUnInit(void)
|
void ExtUnInit(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
// setvmode(0x03);
|
// setvmode(0x03);
|
||||||
uninitgroupfile();
|
uninitgroupfile();
|
||||||
writesetup(setupfilename);
|
writesetup(setupfilename);
|
||||||
|
|
||||||
|
for (i = 0; (unsigned)i < NUM_TILE_GROUPS; i++)
|
||||||
|
{
|
||||||
|
if (s_TileGroups[i].pIds != NULL)
|
||||||
|
Bfree(s_TileGroups[i].pIds);
|
||||||
|
if (s_TileGroups[i].szText != NULL)
|
||||||
|
Bfree(s_TileGroups[i].szText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtPreCheckKeys(void) // just before drawrooms
|
void ExtPreCheckKeys(void) // just before drawrooms
|
||||||
|
|
|
@ -8443,11 +8443,10 @@ static void autoloadgrps(const char *fn)
|
||||||
while (findfiles) { Bsprintf(tempbuf,"autoload/%s/%s",fn,findfiles->name); initprintf("Using group file '%s'.\n",tempbuf); initgroupfile(tempbuf); findfiles = findfiles->next; }
|
while (findfiles) { Bsprintf(tempbuf,"autoload/%s/%s",fn,findfiles->name); initprintf("Using group file '%s'.\n",tempbuf); initgroupfile(tempbuf); findfiles = findfiles->next; }
|
||||||
}
|
}
|
||||||
|
|
||||||
static int loadgroupfiles(const char *fn)
|
static int parsegroupfiles(scriptfile *script)
|
||||||
{
|
{
|
||||||
int tokn;
|
int tokn;
|
||||||
char *cmdtokptr;
|
char *cmdtokptr;
|
||||||
scriptfile *script;
|
|
||||||
|
|
||||||
tokenlist grptokens[] =
|
tokenlist grptokens[] =
|
||||||
{
|
{
|
||||||
|
@ -8457,9 +8456,6 @@ static int loadgroupfiles(const char *fn)
|
||||||
{ "cachesize", T_CACHESIZE },
|
{ "cachesize", T_CACHESIZE },
|
||||||
};
|
};
|
||||||
|
|
||||||
script = scriptfile_fromfile((char *)fn);
|
|
||||||
if (!script) return -1;
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
tokn = getatoken(script,grptokens,sizeof(grptokens)/sizeof(tokenlist));
|
tokn = getatoken(script,grptokens,sizeof(grptokens)/sizeof(tokenlist));
|
||||||
|
@ -8510,7 +8506,7 @@ static int loadgroupfiles(const char *fn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loadgroupfiles((const char *)included);
|
parsegroupfiles(included);
|
||||||
scriptfile_close(included);
|
scriptfile_close(included);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8522,6 +8518,17 @@ static int loadgroupfiles(const char *fn)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int loadgroupfiles(const char *fn)
|
||||||
|
{
|
||||||
|
scriptfile *script;
|
||||||
|
|
||||||
|
script = scriptfile_fromfile((char *)fn);
|
||||||
|
if (!script) return -1;
|
||||||
|
|
||||||
|
parsegroupfiles(script);
|
||||||
|
|
||||||
scriptfile_close(script);
|
scriptfile_close(script);
|
||||||
scriptfile_clearsymbols();
|
scriptfile_clearsymbols();
|
||||||
|
|
|
@ -178,164 +178,37 @@ static const long ZoomToThumbSize[] =
|
||||||
|
|
||||||
#define INITIAL_ZOOM 2
|
#define INITIAL_ZOOM 2
|
||||||
|
|
||||||
|
struct
|
||||||
// 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,
|
long *pIds ; // ptr to list of tile Ids
|
||||||
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
|
long nIds ; // num of tile ids
|
||||||
char key1 ; // key1 and key2 are two alternative keypresses used to
|
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 key2 ; // select tile set. Bodge to do eary upper/lower case handling
|
||||||
char *szText ; // description to present to user.
|
char *szText ; // description to present to user.
|
||||||
} s_TileGroups[] =
|
} s_TileGroups[] =
|
||||||
{
|
{
|
||||||
{ s_idActors, NUM_ACTORS, 'A', 'a', "(A) Actor group" },
|
{ NULL, 0, 0, 0, NULL },
|
||||||
{ s_idDoors, NUM_DOORS, 'D', 'd', "(D) Door group" },
|
{ NULL, 0, 0, 0, NULL },
|
||||||
{ s_idGoodies, NUM_GOODIES, 'G', 'g', "(G) Goodies (ammo, weapons, etc)" },
|
{ NULL, 0, 0, 0, NULL },
|
||||||
{ s_idRespawns, NUM_RESPAWNS, 'R', 'r', "(R) Respawning Items" },
|
{ NULL, 0, 0, 0, NULL },
|
||||||
{ s_idSwitches, NUM_SWITCHES, 'S', 's', "(S) Switch group" },
|
{ NULL, 0, 0, 0, NULL },
|
||||||
{ s_idExplosions, NUM_EXPLOSIONS, 'X', 'x', "(X) eXplosions, fire, sparks, etc" }
|
{ NULL, 0, 0, 0, NULL },
|
||||||
|
{ NULL, 0, 0, 0, NULL },
|
||||||
|
{ NULL, 0, 0, 0, NULL },
|
||||||
|
{ NULL, 0, 0, 0, NULL },
|
||||||
|
{ NULL, 0, 0, 0, NULL },
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
#define NUM_TILE_GROUPS (sizeof(s_TileGroups)/sizeof(s_TileGroups[0]))
|
#define NUM_TILE_GROUPS (sizeof(s_TileGroups)/sizeof(s_TileGroups[0]))
|
||||||
|
#define MAX_TILE_GROUP_ENTRIES 128
|
||||||
|
|
||||||
|
|
||||||
#define FIRST_USER_ART_TILE 3584
|
#define FIRST_USER_ART_TILE 3584
|
||||||
// Some atomic tiles are sprinkled in the V1.3d's area but
|
// Some atomic tiles are sprinkled in the V1.3d's area but
|
||||||
// this is where the main atomic tiles start :-
|
// this is where the main atomic tiles start :-
|
||||||
#define FIRST_ATOMIC_TILE 4096
|
#define FIRST_ATOMIC_TILE 4096
|
||||||
|
#define FIRST_EXTENDED_TILE 6144
|
||||||
|
#define SECOND_EXTENDED_TILE 9216
|
||||||
|
|
||||||
extern short localartfreq[MAXTILES];
|
extern short localartfreq[MAXTILES];
|
||||||
extern short localartlookup[MAXTILES], localartlookupnum;
|
extern short localartlookup[MAXTILES], localartlookupnum;
|
||||||
|
|
Loading…
Reference in a new issue