diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c index b929c0e9c..a58b2c581 100644 --- a/src/lua_mobjlib.c +++ b/src/lua_mobjlib.c @@ -676,11 +676,18 @@ static int mobj_set(lua_State *L) case mobj_sprite: { spritenum_t newsprite = luaL_checkinteger(L, 3); - if (lua_compatmode && mo->sprite != SPR_PLAY && newsprite == SPR_PLAY) + if (lua_compatmode) { - UINT8 outframe; - mo->sprite2 = P_KartFrameToSprite2(mo->skin, mo->frame, &outframe); - mo->frame = (mo->frame & ~FF_FRAMEMASK) | outframe; + if (mo->sprite != SPR_PLAY && newsprite == SPR_PLAY) // switch to spr2 + { + UINT8 outframe; + mo->sprite2 = P_KartFrameToSprite2(mo->skin, mo->frame, &outframe); + mo->frame = (mo->frame & ~FF_FRAMEMASK) | outframe; + } + else if (mo->sprite == SPR_PLAY && newsprite != SPR_PLAY) // switch from spr2 + { + mo->frame = spr2frame(mo->sprite2, mo->frame); + } } mo->sprite = newsprite; break; diff --git a/src/r_skins.c b/src/r_skins.c index c1ddf4b67..78b0ecda0 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -118,21 +118,27 @@ UINT8 P_KartFrameToSprite2(skin_t *skin, UINT8 inframe, UINT8 *outframe) break; F('G') spr2 = SPR2_SLWN; + frame = 1; break; F('H') spr2 = SPR2_SLWL; + frame = 1; break; F('I') spr2 = SPR2_SLWR; + frame = 1; break; F('J') spr2 = SPR2_FSTN; + frame = 1; break; F('K') spr2 = SPR2_FSTL; + frame = 1; break; F('L') spr2 = SPR2_FSTR; + frame = 1; break; F('M') F('N') spr2 = SPR2_DRLN;