diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index dbab801dfa662d43886319353a91c5bc954bd305..d14a43944bfc23d9bce4986dc7ac336bc3deb56f 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -428,7 +428,7 @@ static int libd_cachePatch(lua_State *L) return 1; } -// v.getSpritePatch(sprite, [frame, [angle]]) +// v.getSpritePatch(sprite, [frame, [angle, [rollangle]]]) static int libd_getSpritePatch(lua_State *L) { UINT32 i; // sprite prefix @@ -479,13 +479,31 @@ static int libd_getSpritePatch(lua_State *L) if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range? return 0; +#ifdef ROTSPRITE + if (lua_isnumber(L, 4)) + { + // rotsprite????? + angle_t rollangle = luaL_checkangle(L, 4); + INT32 rot = R_GetRollAngle(rollangle); + + if (rot) { + if (!(sprframe->rotsprite.cached & (1<<angle))) + R_CacheRotSprite(i, frame, NULL, sprframe, angle, sprframe->flip & (1<<angle)); + LUA_PushUserdata(L, sprframe->rotsprite.patch[angle][rot], META_PATCH); + lua_pushboolean(L, false); + lua_pushboolean(L, true); + return 3; + } + } +#endif + // push both the patch and it's "flip" value LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH); lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0); return 2; } -// v.getSprite2Patch(skin, sprite, [super?,] [frame, [angle]]) +// v.getSprite2Patch(skin, sprite, [super?,] [frame, [angle, [rollangle]]]) static int libd_getSprite2Patch(lua_State *L) { INT32 i; // skin number @@ -574,6 +592,24 @@ static int libd_getSprite2Patch(lua_State *L) if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range? return 0; +#ifdef ROTSPRITE + if (lua_isnumber(L, 4)) + { + // rotsprite????? + angle_t rollangle = luaL_checkangle(L, 4); + INT32 rot = R_GetRollAngle(rollangle); + + if (rot) { + if (!(sprframe->rotsprite.cached & (1<<angle))) + R_CacheRotSprite(SPR_PLAY, frame, &skins[i].sprinfo[j], sprframe, angle, sprframe->flip & (1<<angle)); + LUA_PushUserdata(L, sprframe->rotsprite.patch[angle][rot], META_PATCH); + lua_pushboolean(L, false); + lua_pushboolean(L, true); + return 3; + } + } +#endif + // push both the patch and it's "flip" value LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH); lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0);