mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-25 23:11:20 +00:00
Fix Trick Panel TERRAIN not working
This commit is contained in:
parent
8d6d8fff6b
commit
7559169144
6 changed files with 96 additions and 65 deletions
|
|
@ -503,13 +503,17 @@ extern char liveeventbackup[256];
|
|||
void M_StartupLocale(void);
|
||||
extern void *(*M_Memcpy)(void* dest, const void* src, size_t n) FUNCNONNULL;
|
||||
char *va(const char *format, ...) FUNCPRINTF;
|
||||
|
||||
char *M_GetToken(const char *inputString);
|
||||
void M_UnGetToken(void);
|
||||
UINT32 M_GetTokenPos(void);
|
||||
|
||||
void M_TokenizerOpen(const char *inputString);
|
||||
void M_TokenizerClose(void);
|
||||
const char *M_TokenizerRead(UINT32 i);
|
||||
UINT32 M_TokenizerGetEndPos(void);
|
||||
void M_TokenizerSetEndPos(UINT32 newPos);
|
||||
|
||||
char *sizeu1(size_t num);
|
||||
char *sizeu2(size_t num);
|
||||
char *sizeu3(size_t num);
|
||||
|
|
|
|||
|
|
@ -86,29 +86,31 @@ static brightmapStorage_t *K_GetBrightmapStorageByTextureName(const char *checkN
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static boolean K_BRIGHTLumpParser(size_t size)
|
||||
static boolean K_BRIGHTLumpParser(UINT8 *data, size_t size)
|
||||
|
||||
Parses inputted lump data as a BRIGHT lump.
|
||||
|
||||
Input Arguments:-
|
||||
data - Pointer to lump data.
|
||||
size - The length of the lump data.
|
||||
|
||||
Return:-
|
||||
false if any errors occured, otherwise true.
|
||||
--------------------------------------------------*/
|
||||
static boolean K_BRIGHTLumpParser(size_t size)
|
||||
static boolean K_BRIGHTLumpParser(UINT8 *data, size_t size)
|
||||
{
|
||||
const char *tkn = M_TokenizerRead(0);
|
||||
char *tkn = M_GetToken((char *)data);
|
||||
size_t pos = 0;
|
||||
|
||||
while (tkn && (pos = M_TokenizerGetEndPos()) < size)
|
||||
while (tkn && (pos = M_GetTokenPos()) < size)
|
||||
{
|
||||
boolean valid = true;
|
||||
|
||||
if (stricmp(tkn, "texture") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -121,8 +123,9 @@ static boolean K_BRIGHTLumpParser(size_t size)
|
|||
bms->textureHash = quickncasehash(tkn, 8);
|
||||
}
|
||||
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -148,14 +151,17 @@ static boolean K_BRIGHTLumpParser(size_t size)
|
|||
valid = false;
|
||||
}
|
||||
|
||||
Z_Free(tkn);
|
||||
|
||||
if (valid == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
tkn = M_TokenizerRead(0);
|
||||
tkn = M_GetToken(NULL);
|
||||
}
|
||||
|
||||
Z_Free(tkn);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -192,10 +198,7 @@ void K_InitBrightmapsPwad(INT32 wadNum)
|
|||
size = W_LumpLengthPwad(wadNum, lumpNum);
|
||||
|
||||
CONS_Printf(M_GetText("Loading BRIGHT from %s\n"), name);
|
||||
|
||||
M_TokenizerOpen((char *)data);
|
||||
K_BRIGHTLumpParser(size);
|
||||
M_TokenizerClose();
|
||||
K_BRIGHTLumpParser(data, size);
|
||||
|
||||
free(name);
|
||||
Z_Free(data);
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@ typedef struct brightmapStorage_s
|
|||
// Stores data for brightmap definitions,
|
||||
// before putting them into texturebrightmaps.
|
||||
|
||||
char textureName[8]; // The texture's name.
|
||||
char textureName[9]; // The texture's name.
|
||||
UINT32 textureHash; // The texture name's hash.
|
||||
|
||||
char brightmapName[8]; // The brightmap's name.
|
||||
char brightmapName[9]; // The brightmap's name.
|
||||
UINT32 brightmapHash; // The brightmap name's hash.
|
||||
} brightmapStorage_t;
|
||||
|
||||
|
|
|
|||
105
src/k_terrain.c
105
src/k_terrain.c
|
|
@ -1087,7 +1087,7 @@ void K_UpdateTerrainOverlay(mobj_t *mo)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_FlagBoolean(UINT32 *inputFlags, UINT32 newFlag, const char *val)
|
||||
static void K_FlagBoolean(UINT32 *inputFlags, UINT32 newFlag, char *val)
|
||||
|
||||
Sets a flag to true or false depending on
|
||||
the string input.
|
||||
|
|
@ -1100,7 +1100,7 @@ void K_UpdateTerrainOverlay(mobj_t *mo)
|
|||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_FlagBoolean(UINT32 *inputFlags, UINT32 newFlag, const char *val)
|
||||
static void K_FlagBoolean(UINT32 *inputFlags, UINT32 newFlag, char *val)
|
||||
{
|
||||
if (stricmp(val, "true") == 0)
|
||||
{
|
||||
|
|
@ -1158,7 +1158,7 @@ static void K_NewSplashDefs(void)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_ParseSplashParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseSplashParameter(size_t i, char *param, char *val)
|
||||
|
||||
Parser function for Splash blocks.
|
||||
|
||||
|
|
@ -1170,7 +1170,7 @@ static void K_NewSplashDefs(void)
|
|||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_ParseSplashParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseSplashParameter(size_t i, char *param, char *val)
|
||||
{
|
||||
t_splash_t *splash = &splashDefs[i];
|
||||
|
||||
|
|
@ -1260,7 +1260,7 @@ static void K_NewFootstepDefs(void)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_ParseFootstepParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseFootstepParameter(size_t i, char *param, char *val)
|
||||
|
||||
Parser function for Footstep blocks.
|
||||
|
||||
|
|
@ -1272,7 +1272,7 @@ static void K_NewFootstepDefs(void)
|
|||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_ParseFootstepParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseFootstepParameter(size_t i, char *param, char *val)
|
||||
{
|
||||
t_footstep_t *footstep = &footstepDefs[i];
|
||||
|
||||
|
|
@ -1367,7 +1367,7 @@ static void K_NewOverlayDefs(void)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_ParseOverlayParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseOverlayParameter(size_t i, char *param, char *val)
|
||||
|
||||
Parser function for Overlay blocks.
|
||||
|
||||
|
|
@ -1379,7 +1379,7 @@ static void K_NewOverlayDefs(void)
|
|||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_ParseOverlayParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseOverlayParameter(size_t i, char *param, char *val)
|
||||
{
|
||||
t_overlay_t *overlay = &overlayDefs[i];
|
||||
|
||||
|
|
@ -1449,7 +1449,7 @@ static void K_NewTerrainDefs(void)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static void K_ParseTerrainParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseTerrainParameter(size_t i, char *param, char *val)
|
||||
|
||||
Parser function for Terrain blocks.
|
||||
|
||||
|
|
@ -1461,7 +1461,7 @@ static void K_NewTerrainDefs(void)
|
|||
Return:-
|
||||
None
|
||||
--------------------------------------------------*/
|
||||
static void K_ParseTerrainParameter(size_t i, const char *param, const char *val)
|
||||
static void K_ParseTerrainParameter(size_t i, char *param, char *val)
|
||||
{
|
||||
terrain_t *terrain = &terrainDefs[i];
|
||||
|
||||
|
|
@ -1486,7 +1486,7 @@ static void K_ParseTerrainParameter(size_t i, const char *param, const char *val
|
|||
}
|
||||
else if (stricmp(param, "offroad") == 0)
|
||||
{
|
||||
terrain->offroad = FLOAT_TO_FIXED(atof(val));
|
||||
terrain->offroad = (UINT8)get_number(val); // offroad strength enum?
|
||||
}
|
||||
else if (stricmp(param, "damageType") == 0)
|
||||
{
|
||||
|
|
@ -1536,7 +1536,7 @@ static void K_NewTerrainFloorDefs(void)
|
|||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static boolean K_DoTERRAINLumpParse(size_t num, void (*parser)(size_t, const char *, const char *))
|
||||
static boolean K_DoTERRAINLumpParse(size_t num, void (*parser)(UINT32, char *, char *))
|
||||
|
||||
Runs another parser function for the TERRAIN
|
||||
lump, handling the nitty-gritty parts of the
|
||||
|
|
@ -1549,53 +1549,61 @@ static void K_NewTerrainFloorDefs(void)
|
|||
Return:-
|
||||
false if any errors occured, otherwise true.
|
||||
--------------------------------------------------*/
|
||||
static boolean K_DoTERRAINLumpParse(size_t num, void (*parser)(size_t, const char *, const char *))
|
||||
static boolean K_DoTERRAINLumpParse(size_t num, void (*parser)(size_t, char *, char *))
|
||||
{
|
||||
const char *param, *val;
|
||||
char *param, *val;
|
||||
|
||||
param = M_TokenizerRead(0);
|
||||
param = M_GetToken(NULL);
|
||||
|
||||
if (!fastcmp(param, "{"))
|
||||
{
|
||||
Z_Free(param);
|
||||
CONS_Alert(CONS_WARNING, "Invalid TERRAIN data capsule!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
Z_Free(param);
|
||||
|
||||
while (true)
|
||||
{
|
||||
param = M_TokenizerRead(0);
|
||||
param = M_GetToken(NULL);
|
||||
|
||||
if (fastcmp(param, "}"))
|
||||
{
|
||||
Z_Free(param);
|
||||
break;
|
||||
}
|
||||
|
||||
val = M_TokenizerRead(1);
|
||||
val = M_GetToken(NULL);
|
||||
parser(num, param, val);
|
||||
|
||||
Z_Free(param);
|
||||
Z_Free(val);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
static boolean K_TERRAINLumpParser(size_t size)
|
||||
static boolean K_TERRAINLumpParser(UINT8 *data, size_t size)
|
||||
|
||||
Parses inputted lump data as a TERRAIN lump.
|
||||
|
||||
Input Arguments:-
|
||||
data - Pointer to lump data.
|
||||
size - The length of the lump data.
|
||||
|
||||
Return:-
|
||||
false if any errors occured, otherwise true.
|
||||
--------------------------------------------------*/
|
||||
static boolean K_TERRAINLumpParser(size_t size)
|
||||
static boolean K_TERRAINLumpParser(UINT8 *data, size_t size)
|
||||
{
|
||||
const char *tkn = M_TokenizerRead(0);
|
||||
char *tkn = M_GetToken((char *)data);
|
||||
UINT32 tknHash = 0;
|
||||
size_t pos = 0;
|
||||
size_t i;
|
||||
|
||||
while (tkn && (pos = M_TokenizerGetEndPos()) < size)
|
||||
while (tkn && (pos = M_GetTokenPos()) < size)
|
||||
{
|
||||
boolean valid = true;
|
||||
|
||||
|
|
@ -1608,8 +1616,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
// Check for valid fields.
|
||||
else if (stricmp(tkn, "splash") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1648,8 +1657,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "footstep") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1688,8 +1698,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "overlay") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1728,8 +1739,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "terrain") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1768,8 +1780,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "floor") == 0 || stricmp(tkn, "texture") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1777,8 +1790,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
{
|
||||
// "optional" is ZDoom syntax
|
||||
// We don't use it, but we can ignore it.
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
}
|
||||
|
||||
if (tkn && pos < size)
|
||||
|
|
@ -1806,8 +1820,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
f->textureHash = tknHash;
|
||||
}
|
||||
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1844,8 +1859,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "defaultTerrain") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1882,8 +1898,9 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
}
|
||||
else if (stricmp(tkn, "defaultOffroadFootstep") == 0)
|
||||
{
|
||||
tkn = M_TokenizerRead(0);
|
||||
pos = M_TokenizerGetEndPos();
|
||||
Z_Free(tkn);
|
||||
tkn = M_GetToken(NULL);
|
||||
pos = M_GetTokenPos();
|
||||
|
||||
if (tkn && pos < size)
|
||||
{
|
||||
|
|
@ -1924,14 +1941,17 @@ static boolean K_TERRAINLumpParser(size_t size)
|
|||
valid = false;
|
||||
}
|
||||
|
||||
Z_Free(tkn);
|
||||
|
||||
if (valid == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
tkn = M_TokenizerRead(0);
|
||||
tkn = M_GetToken(NULL);
|
||||
}
|
||||
|
||||
Z_Free(tkn);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1977,10 +1997,7 @@ void K_InitTerrain(UINT16 wadNum)
|
|||
size = W_LumpLengthPwad(wadNum, lumpNum);
|
||||
|
||||
CONS_Printf(M_GetText("Loading TERRAIN from %s\n"), name);
|
||||
|
||||
M_TokenizerOpen((char *)data);
|
||||
K_TERRAINLumpParser(size);
|
||||
M_TokenizerClose();
|
||||
K_TERRAINLumpParser(data, size);
|
||||
|
||||
free(name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ typedef struct t_splash_s
|
|||
// Splash definition.
|
||||
// These are particles spawned when hitting the floor.
|
||||
|
||||
char name[TERRAIN_NAME_LEN]; // Lookup name.
|
||||
char name[TERRAIN_NAME_LEN+1]; // Lookup name.
|
||||
UINT32 hash; // Lookup name's hash.
|
||||
|
||||
UINT16 mobjType; // Thing type. MT_NULL to not spawn anything.
|
||||
|
|
@ -48,7 +48,7 @@ typedef struct t_footstep_s
|
|||
// Footstep definition.
|
||||
// These are particles spawned when moving fast enough on a floor.
|
||||
|
||||
char name[TERRAIN_NAME_LEN]; // Lookup name.
|
||||
char name[TERRAIN_NAME_LEN+1]; // Lookup name.
|
||||
UINT32 hash; // Lookup name's hash.
|
||||
|
||||
UINT16 mobjType; // Thing type. MT_NULL to not spawn anything.
|
||||
|
|
@ -80,7 +80,7 @@ typedef struct t_overlay_s
|
|||
// Overlay definition.
|
||||
// These are sprites displayed on top of the base object.
|
||||
|
||||
char name[TERRAIN_NAME_LEN]; // Lookup name.
|
||||
char name[TERRAIN_NAME_LEN+1]; // Lookup name.
|
||||
UINT32 hash; // Lookup name's hash.
|
||||
|
||||
UINT16 states[TOV__MAX]; // State to use when the object is still.
|
||||
|
|
@ -103,7 +103,7 @@ typedef struct terrain_s
|
|||
// Terrain definition.
|
||||
// These are all of the properties that the floor gets.
|
||||
|
||||
char name[TERRAIN_NAME_LEN]; // Lookup name.
|
||||
char name[TERRAIN_NAME_LEN+1]; // Lookup name.
|
||||
UINT32 hash; // Lookup name's hash.
|
||||
|
||||
size_t splashID; // Splash defintion ID.
|
||||
|
|
@ -113,7 +113,7 @@ typedef struct terrain_s
|
|||
fixed_t friction; // The default friction of this texture.
|
||||
fixed_t offroad; // The default offroad level of this texture.
|
||||
INT16 damageType; // The default damage type of this texture. (Negative means no damage).
|
||||
UINT8 trickPanel; // Trick panel strength
|
||||
fixed_t trickPanel; // Trick panel strength
|
||||
fixed_t floorClip; // Offset for sprites on this ground
|
||||
UINT32 flags; // Flag values (see: terrain_flags_t)
|
||||
} terrain_t;
|
||||
|
|
@ -123,7 +123,7 @@ typedef struct t_floor_s
|
|||
// Terrain floor definition.
|
||||
// Ties a texture name to a terrain definition.
|
||||
|
||||
char textureName[8]; // Floor texture name.
|
||||
char textureName[9]; // Floor texture name.
|
||||
UINT32 textureHash; // Floor texture hash.
|
||||
size_t terrainID; // Terrain definition ID.
|
||||
} t_floor_t;
|
||||
|
|
|
|||
|
|
@ -2074,6 +2074,13 @@ void M_UnGetToken(void)
|
|||
endPos = oldendPos;
|
||||
}
|
||||
|
||||
/** Returns the current token's position.
|
||||
*/
|
||||
UINT32 M_GetTokenPos(void)
|
||||
{
|
||||
return endPos;
|
||||
}
|
||||
|
||||
#define NUMTOKENS 2
|
||||
static const char *tokenizerInput = NULL;
|
||||
static UINT32 tokenCapacity[NUMTOKENS] = {0};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue