diff --git a/src/deh_soc.c b/src/deh_soc.c index f7946ccc9c099c07666ce21a83bbd1f7e9221bcd..a00d2aad3ff6ffc6b4fad882b25edfbbba836525 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -1064,7 +1064,10 @@ void readspriteinfo(MYFILE *f, INT32 num, boolean sprite2) } } else + { + info->name = spriteinfo[num]->name; M_Memcpy(spriteinfo[num], info, sizeof(spriteinfo_t)); + } } else { diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 4e152e3951053362a4d292b0d330486748762d38..4c4bd7362babc30b14cc104d6c2d20e9f5601943 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1096,7 +1096,7 @@ static boolean HWR_CanInterpolateSprite2(modelspr2frames_t *spr2frame) return spr2frame->interpolate; } -static modelspr2frames_t *HWR_GetModelSprite2Frames(md2_t *md2, UINT16 spr2) +static modelspr2frames_t *HWR_GetModelSprite2Frames(md2_t *md2, UINT32 spr2) { if (!md2 || !md2->model) return NULL; @@ -1121,9 +1121,9 @@ static modelspr2frames_t *HWR_GetModelSprite2Frames(md2_t *md2, UINT16 spr2) return NULL; } -static modelspr2frames_t *HWR_GetModelSprite2(md2_t *md2, skin_t *skin, UINT16 spr2, player_t *player) +static modelspr2frames_t *HWR_GetModelSprite2(md2_t *md2, skin_t *skin, UINT32 spr2, player_t *player) { - UINT16 super = 0; + UINT32 super = 0; UINT8 i = 0; if (!md2 || !md2->model || !skin) diff --git a/src/info.c b/src/info.c index aab2a7dee65e35b64602ff71c02644135c96da3c..7763a5c9fe1dc0cfa9bb47ffe4f75a4f6cef91d1 100644 --- a/src/info.c +++ b/src/info.c @@ -22414,8 +22414,10 @@ UINT32 P_AllocateState(const char *name) } void R_ResizeSprites(void); +#ifndef NOHW extern void HWR_AllocateMD2Model(void); extern void HWR_AllocateLSpr(void); +#endif UINT32 P_AllocateSpriteinfo(const char *name) { @@ -22424,8 +22426,10 @@ UINT32 P_AllocateSpriteinfo(const char *name) memset(spriteinfo[numspriteinfo-1], 0, sizeof(spriteinfo_t)); spriteinfo[numspriteinfo-1]->name = name; R_ResizeSprites(); +#ifndef NOHW HWR_AllocateMD2Model(); HWR_AllocateLSpr(); +#endif return numspriteinfo-1; } @@ -22488,8 +22492,10 @@ void P_InitializeTables(void) memset(spriteinfo[i], 0, sizeof(spriteinfo_t)); spriteinfo[i]->name = sprnames[i]; } +#ifndef NOHW HWR_AllocateMD2Model(); HWR_AllocateLSpr(); +#endif numplayersprites = sizeof(startplayersprites) / sizeof(startplayersprites[0]); playersprites = Z_Malloc(sizeof(*playersprites) * numplayersprites, PU_STATIC, NULL); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index a1e22ea57f85509ba75af6e8ee1d9045d5aae087..f33ad6c0f9ff28a198a191198959f54905e4bf82 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -3138,8 +3138,8 @@ static int lib_pIsStateSprite2Super(lua_State *L) // Not a real function. Who cares? I know I don't. static int lib_pGetSuperSprite2(lua_State *L) { - int animID = luaL_checkinteger(L, 1) & SPR2F_MASK; - if (animID < 0 || animID >= numplayersprites) + UINT32 animID = luaL_checkinteger(L, 1) & SPR2F_MASK; + if (animID >= numplayersprites) return luaL_error(L, "sprite2 %d out of range (0 - %d)", animID, numplayersprites-1); lua_pushinteger(L, animID | SPR2F_SUPER); diff --git a/src/p_mobj.h b/src/p_mobj.h index 2f013a2f30fac7f7d117cb190fcbc5bd1db17e54..3c6615ee1f2a6b7d6a8f668b4c8fab051b31be1d 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -306,9 +306,9 @@ typedef struct mobj_s angle_t old_angle, old_pitch, old_roll; // orientation interpolation angle_t old_angle2, old_pitch2, old_roll2; angle_t spriteroll, old_spriteroll, old_spriteroll2; - spritenum_t sprite; // used to find patch_t and flip value + UINT32 sprite; // used to find patch_t and flip value UINT32 frame; // frame number, plus bits see p_pspr.h - UINT16 sprite2; // player sprites + UINT32 sprite2; // player sprites UINT16 anim_duration; // for FF_ANIMATE states UINT32 renderflags; // render flags diff --git a/src/p_saveg.c b/src/p_saveg.c index 906fc17b964f8b49b3ebd4f8dc6ba767620f4eec..39ceff19eb8b869287072ab46d14c0ae8f13bd68 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -2066,9 +2066,9 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type) if (diff & MD_TICS) WRITEINT32(save_p, mobj->tics); if (diff & MD_SPRITE) { - WRITEUINT16(save_p, mobj->sprite); + WRITEUINT32(save_p, mobj->sprite); if (mobj->sprite == SPR_PLAY) - WRITEUINT16(save_p, mobj->sprite2); + WRITEUINT32(save_p, mobj->sprite2); } if (diff & MD_FRAME) { @@ -3096,9 +3096,9 @@ static thinker_t* LoadMobjThinker(actionf_p1 thinker) else mobj->tics = mobj->state->tics; if (diff & MD_SPRITE) { - mobj->sprite = READUINT16(save_p); + mobj->sprite = READUINT32(save_p); if (mobj->sprite == SPR_PLAY) - mobj->sprite2 = READUINT16(save_p); + mobj->sprite2 = READUINT32(save_p); } else { mobj->sprite = mobj->state->sprite; diff --git a/src/r_picformats.c b/src/r_picformats.c index 195fa9c94f834838d8e00ab4939fca7bcfe4e195..ea053d03698a5238052502e3e07ba3b567b3e1ab 100644 --- a/src/r_picformats.c +++ b/src/r_picformats.c @@ -1598,9 +1598,9 @@ static void R_ParseSpriteInfo(boolean spr2) } else { - for (i = 0; i <= numplayersprites; i++) + for (i = 0; (UINT32)i <= numplayersprites; i++) { - if (i == numplayersprites) + if ((UINT32)i == numplayersprites) I_Error("Error parsing SPRTINFO lump: Unknown sprite2 name \"%s\"", newSpriteName); if (!memcmp(newSpriteName,playersprites[i]->name,4)) { @@ -1679,7 +1679,10 @@ static void R_ParseSpriteInfo(boolean spr2) } } else + { + info->name = spriteinfo[sprnum]->name; M_Memcpy(spriteinfo[sprnum], info, sizeof(spriteinfo_t)); + } } else { diff --git a/src/r_skins.c b/src/r_skins.c index fc9232db8ac63f9621de81082eb9ad0198a4118f..abb8c58236d6da223beb3a6d597acd3dd5fca284 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -609,10 +609,10 @@ static void R_LoadSkinSprites(UINT16 wadnum, UINT16 *lump, UINT16 *lastlump, ski skin->sprites = Z_Realloc(skin->sprites, sizeof(*skin->sprites) * numplayersprites, PU_STATIC, NULL); skin->sprinfo = Z_Realloc(skin->sprinfo, sizeof(*skin->sprinfo) * numplayersprites, PU_STATIC, NULL); - memset(&skin->sprinfo[skin->numsprites], 0, sizeof(*skin->sprinfo) * (numplayersprites < skin->numsprites)); + memset(&skin->sprinfo[skin->numsprites], 0, sizeof(*skin->sprinfo) * (numplayersprites - skin->numsprites)); skin->super.sprites = Z_Realloc(skin->super.sprites, sizeof(*skin->super.sprites) * numplayersprites, PU_STATIC, NULL); skin->super.sprinfo = Z_Realloc(skin->super.sprinfo, sizeof(*skin->super.sprinfo) * numplayersprites, PU_STATIC, NULL); - memset(&skin->super.sprinfo[skin->numsprites], 0, sizeof(*skin->super.sprinfo) * (numplayersprites < skin->numsprites)); + memset(&skin->super.sprinfo[skin->numsprites], 0, sizeof(*skin->super.sprinfo) * (numplayersprites - skin->numsprites)); skin->numsprites = numplayersprites; *lump += 1; // start after S_SKIN