mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Clean up parallaxed sky functionality, part 2.
- Rename sky_t members: yscale -> horizfrac, bits -> lognumtiles. - Add default sky (8 tiles, horizfrac=32768 (i.e. 1/2 the scene horiz), offsets all zero) and CLOUDYOCEAN sky (8 tiles, horizfrac=65536, offsets all zero) to multipsky[]. - Get rid of "psky_t g_psky", merely maintaining a g_pskyidx instead. Set it up at map load time so as to keep the behavior of the legacy per-map psky: the last sector index with a matching psky ceiling wins. - In mapstate_t, save g_pskyidx too, not (former) pskybits and pskyoffs[]. - Make on-map-load global psky setup consistent for the game and editor by factoring it out into common.c: G_SetupGlobalPsky(). - Remove a couple of useless initializations, add some static assertions. This commit is more likely to introduce subtle differences in behavior. Specifically, getpsky() now always returns the default sky properties instead of the global sky ones (but with all-zero offsets) when no match for a suiting multi-psky is found. This is only likely to affect the yscale/horizfrac of non-multi-pskies when a global non-default multi-psky has been set up. Bump BYTEVERSION again. git-svn-id: https://svn.eduke32.com/eduke32@3976 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
46e8549b5e
commit
a374a401be
15 changed files with 94 additions and 114 deletions
|
@ -766,8 +766,8 @@ typedef struct {
|
|||
int8_t tileofs[MAXPSKYTILES]; // for 0 <= j < (1<<bits): tile offset relative to basetile
|
||||
} psky_t;
|
||||
|
||||
// Original multi-psky handling, only one per map:
|
||||
EXTERN psky_t g_psky;
|
||||
// Index of map-global (legacy) multi-sky:
|
||||
EXTERN int32_t g_pskyidx;
|
||||
// New multi-psky -- up to MAXPSKYMULTIS (effectively constant after initialization):
|
||||
EXTERN int32_t pskynummultis;
|
||||
EXTERN psky_t multipsky[MAXPSKYMULTIS];
|
||||
|
|
|
@ -77,23 +77,6 @@ void COMMON_clearbackground(int32_t numcols, int32_t numrows);
|
|||
#define EDUKE32_TMRTIC t[ti++]=getticks()
|
||||
#define EDUKE32_TMRPRN do { int ii=0; fprintf(stderr,"%s: ",tmrstr); for (ii=1; ii<ti; ii++) fprintf(stderr,"%d ", t[ii]-t[ii-1]); fprintf(stderr,"\n"); } while (0)
|
||||
|
||||
// Get the multi-psky index corresponding to a base tile number of the sky (for
|
||||
// the game: the *static* value!), or -1 if it's not a multi-psky base tile.
|
||||
static inline int32_t MultiPsky_TileToIdx(int32_t tilenum)
|
||||
{
|
||||
switch (tilenum)
|
||||
{
|
||||
case 80: // MOONSKY1__STATIC:
|
||||
return 0;
|
||||
case 84: // BIGORBIT1__STATIC:
|
||||
return 1;
|
||||
case 89: // LA__STATIC:
|
||||
return 2;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef EXTERNC
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -4485,6 +4485,8 @@ static void parascan(int32_t dax1, int32_t dax2, int32_t sectnum, char dastat, i
|
|||
if (tsizy==0)
|
||||
return;
|
||||
|
||||
dapskyoff = getpsky(&dapyscale, &dapskybits);
|
||||
|
||||
globalshiftval = logtilesizy;
|
||||
|
||||
// before proper non-power-of-two tilesizy drawing
|
||||
|
@ -4497,20 +4499,18 @@ static void parascan(int32_t dax1, int32_t dax2, int32_t sectnum, char dastat, i
|
|||
globaltilesizy = tsizy;
|
||||
globalyscale = 65536 / tsizy;
|
||||
globalshiftval = 0;
|
||||
globalzd = divscale32(((tsizy>>1)+g_psky.yoffs), tsizy) + ((uint32_t)globalypanning<<24);
|
||||
globalzd = divscale32(((tsizy>>1)/*+g_psky.yoffs*/), tsizy) + ((uint32_t)globalypanning<<24);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
globalshiftval = 32-globalshiftval;
|
||||
globalyscale = (8<<(globalshiftval-19));
|
||||
globalzd = (((tsizy>>1)+g_psky.yoffs)<<globalshiftval) + ((uint32_t)globalypanning<<24);
|
||||
globalzd = (((tsizy>>1)/*+g_psky.yoffs*/)<<globalshiftval) + ((uint32_t)globalypanning<<24);
|
||||
}
|
||||
|
||||
//if (globalorientation&256) globalyscale = -globalyscale, globalzd = -globalzd;
|
||||
|
||||
dapskyoff = getpsky(&dapyscale, &dapskybits);
|
||||
|
||||
if (dapyscale != 65536)
|
||||
globalhoriz = mulscale16(globalhoriz-(ydimen>>1),dapyscale) + (ydimen>>1);
|
||||
|
||||
|
@ -8631,7 +8631,6 @@ int32_t initengine(void)
|
|||
|
||||
xyaspect = -1;
|
||||
|
||||
parallaxtype = 2; g_psky.horizfrac = 65536;
|
||||
showinvisibility = 0;
|
||||
|
||||
for (i=1; i<1024; i++)
|
||||
|
|
|
@ -217,25 +217,16 @@ static inline void bricolor(palette_t *wpptr, int32_t dacol)
|
|||
static inline const int8_t *getpsky(int32_t *dapyscale, int32_t *dapskybits)
|
||||
{
|
||||
int32_t j;
|
||||
static const int8_t zeropskyoff[MAXPSKYTILES] = { 0 };
|
||||
|
||||
// First, try a multi-sky.
|
||||
for (j=0; j<pskynummultis; j++)
|
||||
{
|
||||
for (j=pskynummultis; j>0; j--) // NOTE: j==0 on non-early loop end
|
||||
if (globalpicnum == multipskytile[j])
|
||||
{
|
||||
// Have a match.
|
||||
break; // Have a match.
|
||||
|
||||
*dapskybits = multipsky[j].lognumtiles;
|
||||
if (dapyscale)
|
||||
*dapyscale = multipsky[j].horizfrac;
|
||||
return multipsky[j].tileofs;
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to map-global sky.
|
||||
*dapskybits = g_psky.lognumtiles;
|
||||
if (dapyscale)
|
||||
*dapyscale = g_psky.horizfrac;
|
||||
return zeropskyoff;
|
||||
return multipsky[j].tileofs;
|
||||
}
|
||||
#endif /* ENGINE_PRIV_H */
|
||||
|
|
|
@ -3914,11 +3914,11 @@ static void polymer_drawartsky(int16_t tilenum, char palnum, int8_t shad
|
|||
}
|
||||
|
||||
i = 0;
|
||||
j = (1<<g_psky.lognumtiles);
|
||||
j = 8; //(1<<g_psky.lognumtiles);
|
||||
while (i < j)
|
||||
{
|
||||
GLint oldswrap;
|
||||
const int8_t tileofs = g_psky.tileofs[i];
|
||||
const int8_t tileofs = multipsky[g_pskyidx].tileofs[i];
|
||||
|
||||
bglColor4f(glcolors[tileofs][0], glcolors[tileofs][1], glcolors[tileofs][2], 1.0f);
|
||||
bglBindTexture(GL_TEXTURE_2D, glpics[tileofs]);
|
||||
|
|
|
@ -2400,7 +2400,7 @@ static void polymost_drawalls(int32_t bunch)
|
|||
dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size!
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<dapskybits);
|
||||
vv[1] = dd[0]*((double)xdimscale*(double)viewingrange)/(65536.0*65536.0);
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)+g_psky.yoffs)) - vv[1]*ghoriz;
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)/*+g_psky.yoffs*/)) - vv[1]*ghoriz;
|
||||
i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i;
|
||||
|
||||
//Hack to draw black rectangle below sky when looking down...
|
||||
|
@ -2668,7 +2668,7 @@ static void polymost_drawalls(int32_t bunch)
|
|||
dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size!
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<dapskybits);
|
||||
vv[1] = dd[0]*((double)xdimscale*(double)viewingrange)/(65536.0*65536.0);
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)+g_psky.yoffs)) - vv[1]*ghoriz;
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)/*+g_psky.yoffs*/)) - vv[1]*ghoriz;
|
||||
i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i;
|
||||
|
||||
//Hack to draw black rectangle below sky when looking down...
|
||||
|
|
|
@ -722,29 +722,14 @@ void ExtSetupMapFilename(const char *mapname)
|
|||
|
||||
void ExtLoadMap(const char *mapname)
|
||||
{
|
||||
int32_t i;
|
||||
int32_t mskyidx=0;
|
||||
|
||||
getmessageleng = 0;
|
||||
getmessagetimeoff = 0;
|
||||
|
||||
ExtSetupMapFilename(mapname);
|
||||
|
||||
// old-fashioned multi-psky handling
|
||||
// Old-fashioned multi-psky handling setup.
|
||||
G_SetupGlobalPsky();
|
||||
|
||||
Bmemset(g_psky.tileofs, 0, sizeof(g_psky.tileofs));
|
||||
|
||||
for (i=0; i<numsectors; i++)
|
||||
{
|
||||
mskyidx = MultiPsky_TileToIdx(sector[i].ceilingpicnum);
|
||||
if (mskyidx >= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (mskyidx >= 0)
|
||||
Bmemcpy(g_psky.tileofs, multipsky[mskyidx].tileofs, sizeof(g_psky.tileofs));
|
||||
|
||||
g_psky.lognumtiles = 3;
|
||||
parallaxtype = 0;
|
||||
|
||||
//////////
|
||||
|
@ -10470,7 +10455,7 @@ int32_t ExtInit(void)
|
|||
|
||||
ReadHelpFile("m32help.hlp");
|
||||
|
||||
G_MultiPskyInit(MOONSKY1, BIGORBIT1, LA);
|
||||
G_InitMultiPsky(CLOUDYOCEAN, MOONSKY1, BIGORBIT1, LA);
|
||||
|
||||
#ifdef LUNATIC
|
||||
if (Em_CreateState(&g_EmState) == 0)
|
||||
|
|
|
@ -152,32 +152,48 @@ const char *G_ConFile(void)
|
|||
|
||||
//////////
|
||||
|
||||
#define NUMPSKYMULTIS 5
|
||||
EDUKE32_STATIC_ASSERT(NUMPSKYMULTIS <= MAXPSKYMULTIS);
|
||||
EDUKE32_STATIC_ASSERT(PSKYOFF_MAX <= MAXPSKYTILES);
|
||||
|
||||
// Set up new-style multi-psky handling.
|
||||
// NOTE: When adding more multi-pskies, take a look whether the engine-side
|
||||
// MAXPSKYMULTIS needs to be increased.
|
||||
void G_MultiPskyInit(int32_t MOONSKY1__DYN, int32_t BIGORBIT1__DYN, int32_t LA__DYN)
|
||||
// KEEPINSYNC MultiPsky_TileToIdx().
|
||||
void G_InitMultiPsky(int32_t CLOUDYOCEAN__DYN, int32_t MOONSKY1__DYN, int32_t BIGORBIT1__DYN, int32_t LA__DYN)
|
||||
{
|
||||
int32_t i;
|
||||
|
||||
psky_t *moonsky = &multipsky[0];
|
||||
psky_t *spacesky = &multipsky[1];
|
||||
psky_t *citysky = &multipsky[2];
|
||||
psky_t *defaultsky = &multipsky[0];
|
||||
psky_t *oceansky = &multipsky[1];
|
||||
psky_t *moonsky = &multipsky[2];
|
||||
psky_t *spacesky = &multipsky[3];
|
||||
psky_t *citysky = &multipsky[4];
|
||||
|
||||
static int32_t inited;
|
||||
if (inited)
|
||||
return;
|
||||
inited = 1;
|
||||
|
||||
multipskytile[0] = MOONSKY1__DYN;
|
||||
multipskytile[1] = BIGORBIT1__DYN;
|
||||
multipskytile[2] = LA__DYN;
|
||||
multipskytile[0] = -1;
|
||||
multipskytile[1] = CLOUDYOCEAN__DYN;
|
||||
multipskytile[2] = MOONSKY1__DYN;
|
||||
multipskytile[3] = BIGORBIT1__DYN;
|
||||
multipskytile[4] = LA__DYN;
|
||||
|
||||
pskynummultis = 3;
|
||||
pskynummultis = NUMPSKYMULTIS;
|
||||
|
||||
// When adding other multi-skies, take care that the tileofs[] values are
|
||||
// <= PSKYOFF_MAX. (It can be increased up to MAXPSKYTILES, but should be
|
||||
// set as tight as possible.)
|
||||
|
||||
// The default sky properties (all others are implicitly zero):
|
||||
defaultsky->lognumtiles = 3;
|
||||
defaultsky->horizfrac = 32768;
|
||||
|
||||
// CLOUDYOCEAN
|
||||
// Aligns with the drawn scene horizon because it has one itself.
|
||||
oceansky->lognumtiles = 3;
|
||||
oceansky->horizfrac = 65536;
|
||||
|
||||
// MOONSKY1
|
||||
// earth mountain mountain sun
|
||||
moonsky->lognumtiles = 3;
|
||||
|
@ -215,9 +231,25 @@ void G_MultiPskyInit(int32_t MOONSKY1__DYN, int32_t BIGORBIT1__DYN, int32_t LA__
|
|||
for (j=0; j<(1<<multipsky[i].lognumtiles); ++j)
|
||||
Bassert(multipsky[i].tileofs[j] <= PSKYOFF_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
// default in game:
|
||||
g_psky.horizfrac = 32768;
|
||||
void G_SetupGlobalPsky(void)
|
||||
{
|
||||
int32_t i, mskyidx=0;
|
||||
|
||||
// NOTE: Loop must be running backwards for the same behavior as the game
|
||||
// (greatest sector index with matching parallaxed sky takes precedence).
|
||||
for (i=numsectors-1; i>=0; i--)
|
||||
{
|
||||
if (sector[i].ceilingstat & 1)
|
||||
{
|
||||
mskyidx = MultiPsky_TileToIdx(sector[i].ceilingpicnum);
|
||||
if (mskyidx > 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_pskyidx = mskyidx;
|
||||
}
|
||||
|
||||
//////////
|
||||
|
|
|
@ -58,7 +58,28 @@ extern void clearScriptNamePtr(void);
|
|||
|
||||
//////////
|
||||
|
||||
extern void G_MultiPskyInit(int32_t MOONSKY1__DYN, int32_t BIGORBIT1__DYN, int32_t LA__DYN);
|
||||
extern void G_InitMultiPsky(int32_t CLOUDYOCEAN__DYN, int32_t MOONSKY1__DYN, int32_t BIGORBIT1__DYN, int32_t LA__DYN);
|
||||
extern void G_SetupGlobalPsky(void);
|
||||
|
||||
// Get the multi-psky index corresponding to a base tile number of the sky (for
|
||||
// the game: the *static* value!), or 0 as the catch-all.
|
||||
// KEEPINSYNC G_InitMultiPsky().
|
||||
static inline int32_t MultiPsky_TileToIdx(int32_t tilenum)
|
||||
{
|
||||
switch (tilenum)
|
||||
{
|
||||
default:
|
||||
return 0;
|
||||
case 78: // CLOUDYOCEAN__STATIC
|
||||
return 1;
|
||||
case 80: // MOONSKY1__STATIC:
|
||||
return 2;
|
||||
case 84: // BIGORBIT1__STATIC:
|
||||
return 3;
|
||||
case 89: // LA__STATIC:
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
//////////
|
||||
|
||||
|
|
|
@ -59,10 +59,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
// increase by 3, because atomic GRP adds 1, and Shareware adds 2
|
||||
#ifdef LUNATIC
|
||||
// Lunatic
|
||||
# define BYTEVERSION_JF 282
|
||||
# define BYTEVERSION_JF 285
|
||||
#else
|
||||
// Non-Lua build
|
||||
# define BYTEVERSION_JF 282
|
||||
# define BYTEVERSION_JF 285
|
||||
#endif
|
||||
|
||||
#define BYTEVERSION_13 27
|
||||
|
|
|
@ -10719,7 +10719,7 @@ static void G_Startup(void)
|
|||
G_InitDynamicSounds();
|
||||
|
||||
// These depend on having the dynamic tile and/or sound mappings set up:
|
||||
G_MultiPskyInit(MOONSKY1, BIGORBIT1, LA);
|
||||
G_InitMultiPsky(CLOUDYOCEAN, MOONSKY1, BIGORBIT1, LA);
|
||||
Gv_FinalizeWeaponDefaults();
|
||||
G_PostCreateGameState();
|
||||
|
||||
|
|
|
@ -5537,8 +5537,7 @@ void G_SaveMapState(void)
|
|||
Bmemcpy(&save->clouds[0],&clouds[0],sizeof(clouds));
|
||||
Bmemcpy(&save->cloudx[0],&cloudx[0],sizeof(cloudx));
|
||||
Bmemcpy(&save->cloudy[0],&cloudy[0],sizeof(cloudy));
|
||||
Bmemcpy(&save->pskyoff[0],g_psky.tileofs,sizeof(g_psky.tileofs));
|
||||
Bmemcpy(&save->pskybits,&g_psky.lognumtiles,sizeof(g_psky.lognumtiles));
|
||||
Bmemcpy(&save->pskyidx,&g_pskyidx,sizeof(g_pskyidx));
|
||||
Bmemcpy(&save->animategoal[0],&animategoal[0],sizeof(animategoal));
|
||||
Bmemcpy(&save->animatevel[0],&animatevel[0],sizeof(animatevel));
|
||||
Bmemcpy(&save->g_animateCount,&g_animateCount,sizeof(g_animateCount));
|
||||
|
@ -5643,8 +5642,7 @@ void G_RestoreMapState(void)
|
|||
Bmemcpy(&clouds[0],&save->clouds[0],sizeof(clouds));
|
||||
Bmemcpy(&cloudx[0],&save->cloudx[0],sizeof(cloudx));
|
||||
Bmemcpy(&cloudy[0],&save->cloudy[0],sizeof(cloudy));
|
||||
Bmemcpy(g_psky.tileofs,&save->pskyoff[0],sizeof(g_psky.tileofs));
|
||||
Bmemcpy(&g_psky.lognumtiles,&save->pskybits,sizeof(g_psky.lognumtiles));
|
||||
Bmemcpy(&g_pskyidx,&save->pskyidx,sizeof(g_pskyidx));
|
||||
Bmemcpy(&animategoal[0],&save->animategoal[0],sizeof(animategoal));
|
||||
Bmemcpy(&animatevel[0],&save->animatevel[0],sizeof(animatevel));
|
||||
Bmemcpy(&g_animateCount,&save->g_animateCount,sizeof(g_animateCount));
|
||||
|
|
|
@ -964,35 +964,6 @@ static void resetprestat(int32_t snum,int32_t g)
|
|||
|
||||
}
|
||||
|
||||
static inline void G_SetupBackdrop(int16_t sky)
|
||||
{
|
||||
// Get the static value of the base sky tile number.
|
||||
const int32_t ssky = DYNAMICTILEMAP(sky);
|
||||
|
||||
Bmemset(g_psky.tileofs, 0, sizeof(g_psky.tileofs));
|
||||
|
||||
// XXX: why the condition?
|
||||
if (g_psky.horizfrac != 65536)
|
||||
g_psky.horizfrac = 32768;
|
||||
|
||||
if (ssky == CLOUDYOCEAN__STATIC)
|
||||
{
|
||||
g_psky.horizfrac = 65536;
|
||||
}
|
||||
else
|
||||
{
|
||||
int32_t mskyidx = MultiPsky_TileToIdx(ssky);
|
||||
if (mskyidx >= 0)
|
||||
{
|
||||
Bmemcpy(g_psky.tileofs, multipsky[mskyidx].tileofs, sizeof(g_psky.tileofs));
|
||||
if (ssky == LA__STATIC)
|
||||
g_psky.horizfrac = 16384+1024;
|
||||
}
|
||||
}
|
||||
|
||||
g_psky.lognumtiles = 3;
|
||||
}
|
||||
|
||||
// tweak moving sectors with these SE lotags
|
||||
#define FIXSPR_SELOTAGP(k) ((k==0) || (k==6) || (k==14))
|
||||
|
||||
|
@ -1064,6 +1035,8 @@ static inline void prelevel(char g)
|
|||
resetprestat(0,g);
|
||||
g_numClouds = 0;
|
||||
|
||||
G_SetupGlobalPsky();
|
||||
|
||||
for (i=0; i<numsectors; i++)
|
||||
{
|
||||
sector[i].extra = 256;
|
||||
|
@ -1085,7 +1058,6 @@ static inline void prelevel(char g)
|
|||
for (j=0; j<5; j++)
|
||||
tloadtile(sector[i].ceilingpicnum+j, 0);
|
||||
}
|
||||
G_SetupBackdrop(sector[i].ceilingpicnum);
|
||||
|
||||
if (sector[i].ceilingpicnum == CLOUDYSKIES && g_numClouds < 127)
|
||||
clouds[g_numClouds++] = i;
|
||||
|
@ -1432,7 +1404,6 @@ void G_NewGame(int32_t vn, int32_t ln, int32_t sk)
|
|||
ud.player_skill = sk;
|
||||
ud.secretlevel = 0;
|
||||
ud.from_bonus = 0;
|
||||
g_psky.horizfrac = 0;
|
||||
|
||||
ud.last_level = -1;
|
||||
g_lastSaveSlot = -1;
|
||||
|
|
|
@ -1028,7 +1028,7 @@ static const dataspec_t svgm_anmisc[] =
|
|||
{ 0, &clouds[0], sizeof(clouds), 1 },
|
||||
{ 0, &cloudx[0], sizeof(cloudx), 1 },
|
||||
{ 0, &cloudy[0], sizeof(cloudy), 1 },
|
||||
{ 0, &g_psky, sizeof(g_psky), 1 }, // DS_NOCHK?
|
||||
{ 0, &g_pskyidx, sizeof(g_pskyidx), 1 }, // DS_NOCHK?
|
||||
{ 0, &g_earthquakeTime, sizeof(g_earthquakeTime), 1 },
|
||||
|
||||
{ DS_SAVEFN|DS_LOADFN|DS_NOCHK, (void *)sv_prequote, 0, 1 },
|
||||
|
|
|
@ -44,6 +44,7 @@ typedef struct {
|
|||
int32_t lockclock;
|
||||
int32_t msx[2048], msy[2048];
|
||||
int32_t randomseed, g_globalRandom;
|
||||
int32_t pskyidx;
|
||||
|
||||
int16_t SpriteDeletionQueue[1024],g_spriteDeleteQueuePos;
|
||||
int16_t animatesect[MAXANIMATES];
|
||||
|
@ -63,7 +64,6 @@ typedef struct {
|
|||
int16_t numwalls;
|
||||
int16_t prevspritesect[MAXSPRITES];
|
||||
int16_t prevspritestat[MAXSPRITES];
|
||||
int16_t pskyoff[MAXPSKYTILES], pskybits;
|
||||
|
||||
uint16_t g_earthquakeTime;
|
||||
int8_t g_numPlayerSprites;
|
||||
|
|
Loading…
Reference in a new issue