Move g_noFloorPal[] to the engine side and adapt other stuff accordingly.

- 'nofloorpalrange' DEF token: now handled for both game and editor (for the
  latter, it's effective only for "shade preview" mode, [']+[X]).
- in generatefogpals(), assign g_noFloorPal[] = 1 for every generated (default)
  fog pal; get rid of its return value / g_firstFogPal

git-svn-id: https://svn.eduke32.com/eduke32@4811 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2014-12-13 22:33:04 +00:00
parent c9943bcde0
commit 70cbde87eb
8 changed files with 38 additions and 55 deletions

View file

@ -936,6 +936,8 @@ typedef struct {
extern palette_t curpalette[256], curpalettefaded[256], palfadergb; extern palette_t curpalette[256], curpalettefaded[256], palfadergb;
extern char palfadedelta; extern char palfadedelta;
extern int8_t g_noFloorPal[MAXPALOOKUPS];
extern int32_t novoxmips; extern int32_t novoxmips;
#ifdef DEBUGGINGAIDS #ifdef DEBUGGINGAIDS
@ -1078,7 +1080,7 @@ int32_t initengine(void);
void uninitengine(void); void uninitengine(void);
void initspritelists(void); void initspritelists(void);
int32_t loadlookups(int32_t fp); int32_t loadlookups(int32_t fp);
int32_t generatefogpals(void); void generatefogpals(void);
void fillemptylookups(void); void fillemptylookups(void);
int32_t loadboard(const char *filename, char flags, vec3_t *dapos, int16_t *daang, int16_t *dacursectnum); int32_t loadboard(const char *filename, char flags, vec3_t *dapos, int16_t *daang, int16_t *dacursectnum);
int32_t loadmaphack(const char *filename); int32_t loadmaphack(const char *filename);

View file

@ -250,7 +250,7 @@ static int32_t defsparser(scriptfile *script)
{ "music", T_MUSIC }, { "music", T_MUSIC },
{ "sound", T_SOUND }, { "sound", T_SOUND },
{ "animsounds", T_ANIMSOUNDS }, // dummy { "animsounds", T_ANIMSOUNDS }, // dummy
{ "nofloorpalrange", T_NOFLOORPALRANGE }, // dummy { "nofloorpalrange", T_NOFLOORPALRANGE },
{ "texhitscanrange", T_TEXHITSCANRANGE }, { "texhitscanrange", T_TEXHITSCANRANGE },
{ "nofullbrightrange", T_NOFULLBRIGHTRANGE }, { "nofullbrightrange", T_NOFULLBRIGHTRANGE },
// other stuff // other stuff
@ -467,6 +467,20 @@ static int32_t defsparser(scriptfile *script)
makepalookup(p, NULL, r, g, b, 1); makepalookup(p, NULL, r, g, b, 1);
} }
break; break;
case T_NOFLOORPALRANGE:
{
int32_t b,e,i;
if (scriptfile_getnumber(script,&b)) break;
if (scriptfile_getnumber(script,&e)) break;
b = max(b, 1);
e = min(e, MAXPALOOKUPS-1);
for (i=b; i<=e; i++)
g_noFloorPal[i] = 1;
}
break;
case T_LOADGRP: case T_LOADGRP:
{ {
char *bs; char *bs;
@ -2050,15 +2064,6 @@ static int32_t defsparser(scriptfile *script)
} }
break; break;
case T_NOFLOORPALRANGE:
{
int32_t b,e;
if (EDUKE32_PREDICT_FALSE(scriptfile_getnumber(script,&b))) break;
if (EDUKE32_PREDICT_FALSE(scriptfile_getnumber(script,&e))) break;
}
break;
case T_TEXHITSCANRANGE: case T_TEXHITSCANRANGE:
case T_NOFULLBRIGHTRANGE: case T_NOFULLBRIGHTRANGE:
{ {

View file

@ -188,6 +188,11 @@ static intptr_t slopalookup[16384]; // was 2048
palette_t palookupfog[MAXPALOOKUPS]; palette_t palookupfog[MAXPALOOKUPS];
#endif #endif
// For every pal number, whether tsprite pal should not be taken over from
// floor pal.
// NOTE: g_noFloorPal[0] is irrelevant as it's never checked.
int8_t g_noFloorPal[MAXPALOOKUPS];
static void *pic = NULL; static void *pic = NULL;
// The tile file number (tilesXXX <- this) of each tile: // The tile file number (tilesXXX <- this) of each tile:
@ -8335,15 +8340,11 @@ int32_t loadlookups(int32_t fp)
return 0; return 0;
} }
// Returns: void generatefogpals(void)
// - if generated fog shade tables, their first palnum P (fog pals are [P .. P+3])
// - if didn't (no room), 0
int32_t generatefogpals(void)
{ {
int32_t j, firstfogpal=0; // Find a gap of four consecutive unused pal numbers to generate fog shade
// tables.
// Find a gap of four consecutive unused pal numbers to generate fog shade tables. for (int32_t j=1; j<=255-3; j++)
for (j=1; j<=255-3; j++)
if (!palookup[j] && !palookup[j+1] && !palookup[j+2] && !palookup[j+3]) if (!palookup[j] && !palookup[j+1] && !palookup[j+2] && !palookup[j+3])
{ {
makepalookup(j, NULL, 15, 15, 15, 1); makepalookup(j, NULL, 15, 15, 15, 1);
@ -8351,19 +8352,19 @@ int32_t generatefogpals(void)
makepalookup(j+2, NULL, 0, 15, 0, 1); makepalookup(j+2, NULL, 0, 15, 0, 1);
makepalookup(j+3, NULL, 0, 0, 15, 1); makepalookup(j+3, NULL, 0, 0, 15, 1);
firstfogpal = j; g_noFloorPal[j] = 1;
g_noFloorPal[j+1] = 1;
g_noFloorPal[j+2] = 1;
g_noFloorPal[j+3] = 1;
break; break;
} }
return firstfogpal;
} }
void fillemptylookups(void) void fillemptylookups(void)
{ {
int32_t j;
// Alias remaining unused pal numbers to the base shade table. // Alias remaining unused pal numbers to the base shade table.
for (j=1; j<MAXPALOOKUPS; j++) for (int32_t j=1; j<MAXPALOOKUPS; j++)
if (!palookup[j]) if (!palookup[j])
makepalookup(j, NULL, 0,0,0, 1); makepalookup(j, NULL, 0,0,0, 1);
} }

View file

@ -10284,17 +10284,15 @@ void ExtAnalyzeSprites(int32_t ourx, int32_t oury, int32_t oura, int32_t smoothr
*/ */
if (shadepreview) if (shadepreview)
{ {
int32_t wallaligned = (tspr->cstat & 16);
int32_t fpal;
if (tspr->sectnum<0) if (tspr->sectnum<0)
continue; continue;
fpal = sector[tspr->sectnum].floorpal; const int32_t wallaligned = (tspr->cstat & 16);
const int32_t fpal = sector[tspr->sectnum].floorpal;
// 1st rule // 1st rule
// Compare with game.c:G_MaybeTakeOnFloorPal() // Compare with game.c:G_MaybeTakeOnFloorPal()
if (fpal > 0 && (!g_firstFogPal || !(fpal >= g_firstFogPal && fpal <= g_firstFogPal+3))) if (fpal && !g_noFloorPal[fpal])
tspr->pal = fpal; tspr->pal = fpal;
// 2nd and 3rd rule minus "actor condition" // 2nd and 3rd rule minus "actor condition"

View file

@ -1037,8 +1037,6 @@ uint8_t *basepaltable[BASEPALCOUNT] = {
NULL /*anim_pal*/ NULL /*anim_pal*/
}; };
int32_t g_firstFogPal;
int32_t G_LoadLookups(void) int32_t G_LoadLookups(void)
{ {
int32_t fp, j; int32_t fp, j;
@ -1073,7 +1071,7 @@ int32_t G_LoadLookups(void)
kclose(fp); kclose(fp);
g_firstFogPal = generatefogpals(); generatefogpals();
fillemptylookups(); fillemptylookups();

View file

@ -112,7 +112,6 @@ void G_DoAutoload(const char *dirname);
extern uint8_t *basepaltable[BASEPALCOUNT]; extern uint8_t *basepaltable[BASEPALCOUNT];
extern int32_t g_firstFogPal;
extern int32_t G_LoadLookups(void); extern int32_t G_LoadLookups(void);
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -114,8 +114,6 @@ double g_moveActorsTime = 0; // in ms, smoothed
char boardfilename[BMAX_PATH] = {0}, currentboardfilename[BMAX_PATH] = {0}; char boardfilename[BMAX_PATH] = {0}, currentboardfilename[BMAX_PATH] = {0};
int8_t g_noFloorPal[MAXPALOOKUPS]; // 1 if sprite pal should not be taken over from floor pal
int32_t voting = -1; int32_t voting = -1;
int32_t vote_map = -1, vote_episode = -1; int32_t vote_map = -1, vote_episode = -1;
@ -7033,8 +7031,7 @@ static int32_t G_MaybeTakeOnFloorPal(spritetype *datspr, int32_t sect)
{ {
int32_t dapal = sector[sect].floorpal; int32_t dapal = sector[sect].floorpal;
if (dapal && (!g_firstFogPal || !(dapal >= g_firstFogPal && dapal <= g_firstFogPal+3)) if (dapal && !g_noFloorPal[dapal]
&& !g_noFloorPal[dapal]
&& !A_CheckSpriteFlags(datspr->owner,SFLAG_NOPAL)) && !A_CheckSpriteFlags(datspr->owner,SFLAG_NOPAL))
{ {
datspr->pal = dapal; datspr->pal = dapal;
@ -9355,7 +9352,6 @@ static int32_t parsedefinitions_game(scriptfile *script, int32_t preload)
#ifdef USE_LIBVPX #ifdef USE_LIBVPX
{ "animsounds", T_ANIMSOUNDS }, { "animsounds", T_ANIMSOUNDS },
#endif #endif
{ "nofloorpalrange", T_NOFLOORPALRANGE },
}; };
static const tokenlist sound_musictokens[] = static const tokenlist sound_musictokens[] =
@ -9594,20 +9590,6 @@ static int32_t parsedefinitions_game(scriptfile *script, int32_t preload)
} }
break; break;
#endif // defined USE_LIBVPX #endif // defined USE_LIBVPX
case T_NOFLOORPALRANGE:
{
int32_t b,e,i;
if (scriptfile_getnumber(script,&b)) break;
if (scriptfile_getnumber(script,&e)) break;
b = max(b, 1);
e = min(e, MAXPALOOKUPS-1);
for (i=b; i<=e; i++)
g_noFloorPal[i] = 1;
}
break;
case T_SOUND: case T_SOUND:
{ {
char *tinttokptr = script->ltextptr; char *tinttokptr = script->ltextptr;

View file

@ -304,8 +304,6 @@ extern palette_t DefaultCrosshairColors;
extern uint32_t g_frameDelay; extern uint32_t g_frameDelay;
extern int8_t g_noFloorPal[MAXPALOOKUPS];
extern user_defs ud; extern user_defs ud;
int32_t A_CheckInventorySprite(spritetype *s); int32_t A_CheckInventorySprite(spritetype *s);