Add support for getting super sprites with v.getSprite2Patch

You can either add FF_SPR2SUPER directly to the sprite2 arg if it's a number, or you can use the new (optional) boolean arg between sprite2 and frame, where as you'd expect false = normal and true = super.
This commit is contained in:
Monster Iestyn 2017-07-09 16:33:43 +01:00
parent 3d2fd5d5a4
commit e485ac3a7e

View file

@ -344,6 +344,7 @@ static int libd_cachePatch(lua_State *L)
return 1;
}
// v.getSpritePatch(sprite, [frame, [angle]])
static int libd_getSpritePatch(lua_State *L)
{
UINT32 i; // sprite prefix
@ -393,6 +394,7 @@ static int libd_getSpritePatch(lua_State *L)
return 2;
}
// v.getSprite2Patch(skin, sprite, [super?,] [frame, [angle]])
static int libd_getSprite2Patch(lua_State *L)
{
INT32 i; // skin number
@ -401,6 +403,7 @@ static int libd_getSprite2Patch(lua_State *L)
UINT8 angle = 0;
spritedef_t *sprdef;
spriteframe_t *sprframe;
boolean super = false; // add FF_SPR2SUPER to sprite2 if true
HUDONLY
// get skin first!
@ -427,6 +430,11 @@ static int libd_getSprite2Patch(lua_State *L)
if (lua_isnumber(L, 1)) // sprite number given, e.g. SPR2_STND
{
j = lua_tonumber(L, 1);
if (j & FF_SPR2SUPER) // e.g. SPR2_STND|FF_SPR2SUPER
{
super = true;
j &= ~FF_SPR2SUPER; // remove flag so the next check doesn't fail
}
if (j >= free_spr2)
return 0;
}
@ -436,12 +444,23 @@ static int libd_getSprite2Patch(lua_State *L)
for (j = 0; j < free_spr2; j++)
if (fastcmp(name, spr2names[j]))
break;
// if you want super flags you'll have to use the optional boolean following this
if (j >= free_spr2)
return 0;
}
else
return 0;
if (lua_isboolean(L, 2)) // optional boolean for superness
{
super = lua_toboolean(L, 2); // note: this can override FF_SPR2SUPER from sprite number
lua_remove(L, 2); // remove
}
// if it's not boolean then just assume it's the frame number
if (super)
j |= FF_SPR2SUPER;
sprdef = &skins[i].sprites[j];
// set frame number