mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-19 12:01:36 +00:00
Refactor R_ParseSpriteInfo
Splits up the function, thus makes me want to kill myself less.
This commit is contained in:
parent
499c61a9f2
commit
58bc3294fa
1 changed files with 87 additions and 58 deletions
|
|
@ -1396,12 +1396,56 @@ boolean Picture_PNGDimensions(UINT8 *png, INT32 *width, INT32 *height, INT16 *to
|
|||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// R_ParseSpriteInfoFrame
|
||||
//
|
||||
// Parse a SPRTINFO frame.
|
||||
//
|
||||
static void R_ParseSpriteInfoFrame(spriteinfo_t *info)
|
||||
struct ParseSpriteInfoState {
|
||||
boolean spr2;
|
||||
spriteinfo_t *info;
|
||||
spritenum_t sprnum;
|
||||
playersprite_t spr2num;
|
||||
INT32 skinnumbers[MAXSKINS];
|
||||
INT32 foundskins;
|
||||
};
|
||||
|
||||
static void R_ParseSpriteInfoSkin(struct ParseSpriteInfoState *parser)
|
||||
{
|
||||
char *sprinfoToken;
|
||||
size_t sprinfoTokenLength;
|
||||
|
||||
INT32 skinnum;
|
||||
char *skinName = NULL;
|
||||
|
||||
// Skin name
|
||||
sprinfoToken = M_GetToken(NULL);
|
||||
if (sprinfoToken == NULL)
|
||||
{
|
||||
I_Error("Error parsing SPRTINFO lump: Unexpected end of file where skin frame should be");
|
||||
}
|
||||
|
||||
// copy skin name yada yada
|
||||
sprinfoTokenLength = strlen(sprinfoToken);
|
||||
skinName = (char *)Z_Malloc((sprinfoTokenLength+1)*sizeof(char),PU_STATIC,NULL);
|
||||
M_Memcpy(skinName,sprinfoToken,sprinfoTokenLength*sizeof(char));
|
||||
skinName[sprinfoTokenLength] = '\0';
|
||||
strlwr(skinName);
|
||||
|
||||
skinnum = R_SkinAvailable(skinName);
|
||||
if (skinnum == -1)
|
||||
I_Error("Error parsing SPRTINFO lump: Unknown skin \"%s\"", skinName);
|
||||
|
||||
parser->skinnumbers[parser->foundskins] = skinnum;
|
||||
parser->foundskins++;
|
||||
|
||||
Z_Free(sprinfoToken);
|
||||
}
|
||||
|
||||
static void copy_to_skin (struct ParseSpriteInfoState *parser, INT32 skinnum)
|
||||
{
|
||||
skin_t *skin = &skins[skinnum];
|
||||
spriteinfo_t *sprinfo = skin->sprinfo;
|
||||
|
||||
M_Memcpy(&sprinfo[parser->spr2num], parser->info, sizeof(spriteinfo_t));
|
||||
}
|
||||
|
||||
static void R_ParseSpriteInfoFrame(struct ParseSpriteInfoState *parser)
|
||||
{
|
||||
char *sprinfoToken;
|
||||
size_t sprinfoTokenLength;
|
||||
|
|
@ -1480,9 +1524,26 @@ static void R_ParseSpriteInfoFrame(spriteinfo_t *info)
|
|||
}
|
||||
|
||||
// set fields
|
||||
info->pivot[frameFrame].x = frameXPivot;
|
||||
info->pivot[frameFrame].y = frameYPivot;
|
||||
info->pivot[frameFrame].rotaxis = frameRotAxis;
|
||||
parser->info->pivot[frameFrame].x = frameXPivot;
|
||||
parser->info->pivot[frameFrame].y = frameYPivot;
|
||||
parser->info->pivot[frameFrame].rotaxis = frameRotAxis;
|
||||
|
||||
if (parser->spr2)
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
if (!parser->foundskins)
|
||||
I_Error("Error parsing SPRTINFO lump: No skins specified in this sprite2 definition");
|
||||
|
||||
for (i = 0; i < parser->foundskins; i++)
|
||||
{
|
||||
copy_to_skin(parser, parser->skinnumbers[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
M_Memcpy(&spriteinfo[parser->sprnum], parser->info, sizeof(spriteinfo_t));
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1492,15 +1553,18 @@ static void R_ParseSpriteInfoFrame(spriteinfo_t *info)
|
|||
//
|
||||
static void R_ParseSpriteInfo(boolean spr2)
|
||||
{
|
||||
spriteinfo_t *info;
|
||||
char *sprinfoToken;
|
||||
size_t sprinfoTokenLength;
|
||||
char newSpriteName[5]; // no longer dynamically allocated
|
||||
spritenum_t sprnum = NUMSPRITES;
|
||||
playersprite_t spr2num = NUMPLAYERSPRITES;
|
||||
|
||||
struct ParseSpriteInfoState parser = {
|
||||
.spr2 = spr2,
|
||||
.sprnum = NUMSPRITES,
|
||||
.spr2num = NUMPLAYERSPRITES,
|
||||
.foundskins = 0,
|
||||
};
|
||||
|
||||
INT32 i;
|
||||
INT32 skinnumbers[MAXSKINS];
|
||||
INT32 foundskins = 0;
|
||||
|
||||
// Sprite name
|
||||
sprinfoToken = M_GetToken(NULL);
|
||||
|
|
@ -1508,6 +1572,7 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
{
|
||||
I_Error("Error parsing SPRTINFO lump: Unexpected end of file where sprite name should be");
|
||||
}
|
||||
|
||||
sprinfoTokenLength = strlen(sprinfoToken);
|
||||
if (sprinfoTokenLength != 4)
|
||||
{
|
||||
|
|
@ -1520,6 +1585,7 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
// ^^ we've confirmed that the token is == 4 characters so it will never overflow a 5 byte char buffer
|
||||
strupr(newSpriteName); // Just do this now so we don't have to worry about it
|
||||
}
|
||||
|
||||
Z_Free(sprinfoToken);
|
||||
|
||||
if (!spr2)
|
||||
|
|
@ -1530,7 +1596,7 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
I_Error("Error parsing SPRTINFO lump: Unknown sprite name \"%s\"", newSpriteName);
|
||||
if (!memcmp(newSpriteName,sprnames[i],4))
|
||||
{
|
||||
sprnum = i;
|
||||
parser.sprnum = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1543,15 +1609,15 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
I_Error("Error parsing SPRTINFO lump: Unknown sprite2 name \"%s\"", newSpriteName);
|
||||
if (!memcmp(newSpriteName,spr2names[i],4))
|
||||
{
|
||||
spr2num = i;
|
||||
parser.spr2num = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// allocate a spriteinfo
|
||||
info = Z_Calloc(sizeof(spriteinfo_t), PU_STATIC, NULL);
|
||||
info->available = true;
|
||||
parser.info = Z_Calloc(sizeof(spriteinfo_t), PU_STATIC, NULL);
|
||||
parser.info->available = true;
|
||||
|
||||
// Left Curly Brace
|
||||
sprinfoToken = M_GetToken(NULL);
|
||||
|
|
@ -1571,53 +1637,16 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
{
|
||||
if (stricmp(sprinfoToken, "SKIN")==0)
|
||||
{
|
||||
INT32 skinnum;
|
||||
char *skinName = NULL;
|
||||
if (!spr2)
|
||||
I_Error("Error parsing SPRTINFO lump: \"SKIN\" token found outside of a sprite2 definition");
|
||||
|
||||
Z_Free(sprinfoToken);
|
||||
|
||||
// Skin name
|
||||
sprinfoToken = M_GetToken(NULL);
|
||||
if (sprinfoToken == NULL)
|
||||
{
|
||||
I_Error("Error parsing SPRTINFO lump: Unexpected end of file where skin frame should be");
|
||||
}
|
||||
|
||||
// copy skin name yada yada
|
||||
sprinfoTokenLength = strlen(sprinfoToken);
|
||||
skinName = (char *)Z_Malloc((sprinfoTokenLength+1)*sizeof(char),PU_STATIC,NULL);
|
||||
M_Memcpy(skinName,sprinfoToken,sprinfoTokenLength*sizeof(char));
|
||||
skinName[sprinfoTokenLength] = '\0';
|
||||
strlwr(skinName);
|
||||
Z_Free(sprinfoToken);
|
||||
|
||||
skinnum = R_SkinAvailable(skinName);
|
||||
if (skinnum == -1)
|
||||
I_Error("Error parsing SPRTINFO lump: Unknown skin \"%s\"", skinName);
|
||||
|
||||
skinnumbers[foundskins] = skinnum;
|
||||
foundskins++;
|
||||
R_ParseSpriteInfoSkin(&parser);
|
||||
}
|
||||
else if (stricmp(sprinfoToken, "FRAME")==0)
|
||||
{
|
||||
R_ParseSpriteInfoFrame(info);
|
||||
Z_Free(sprinfoToken);
|
||||
if (spr2)
|
||||
{
|
||||
if (!foundskins)
|
||||
I_Error("Error parsing SPRTINFO lump: No skins specified in this sprite2 definition");
|
||||
for (i = 0; i < foundskins; i++)
|
||||
{
|
||||
size_t skinnum = skinnumbers[i];
|
||||
skin_t *skin = &skins[skinnum];
|
||||
spriteinfo_t *sprinfo = skin->sprinfo;
|
||||
M_Memcpy(&sprinfo[spr2num], info, sizeof(spriteinfo_t));
|
||||
}
|
||||
}
|
||||
else
|
||||
M_Memcpy(&spriteinfo[sprnum], info, sizeof(spriteinfo_t));
|
||||
R_ParseSpriteInfoFrame(&parser);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1636,7 +1665,7 @@ static void R_ParseSpriteInfo(boolean spr2)
|
|||
I_Error("Error parsing SPRTINFO lump: Expected \"{\" for sprite \"%s\", got \"%s\"",newSpriteName,sprinfoToken);
|
||||
}
|
||||
Z_Free(sprinfoToken);
|
||||
Z_Free(info);
|
||||
Z_Free(parser.info);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue