Add compat for old P_SetScale behavior, fixes Malicious Metropolis
This commit is contained in:
parent
1d31cefa0e
commit
792bb65e9e
4 changed files with 16 additions and 7 deletions
|
|
@ -970,7 +970,7 @@ static int lib_pSetScale(lua_State *L)
|
|||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
if (newscale < FRACUNIT/100)
|
||||
newscale = FRACUNIT/100;
|
||||
P_SetScale(mobj, newscale);
|
||||
P_SetScale2(mobj, newscale, lua_compatmode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -897,7 +897,7 @@ static int mobj_set(lua_State *L)
|
|||
return luaL_error(L, "mobj.type %d out of range (0 - %d).", newtype, NUMMOBJTYPES-1);
|
||||
mo->type = newtype;
|
||||
mo->info = &mobjinfo[newtype];
|
||||
P_SetScale(mo, mo->scale);
|
||||
P_SetScale2(mo, mo->scale, lua_compatmode);
|
||||
break;
|
||||
}
|
||||
case mobj_info:
|
||||
|
|
@ -972,7 +972,7 @@ static int mobj_set(lua_State *L)
|
|||
if (scale < FRACUNIT/100)
|
||||
scale = FRACUNIT/100;
|
||||
mo->destscale = scale;
|
||||
P_SetScale(mo, scale);
|
||||
P_SetScale2(mo, scale, lua_compatmode);
|
||||
mo->old_scale = scale;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
14
src/p_mobj.c
14
src/p_mobj.c
|
|
@ -6165,7 +6165,7 @@ void P_SpawnParaloop(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 numb
|
|||
//
|
||||
// Sets the sprite scaling
|
||||
//
|
||||
void P_SetScale(mobj_t *mobj, fixed_t newscale)
|
||||
void P_SetScale2(mobj_t *mobj, fixed_t newscale, boolean compat)
|
||||
{
|
||||
player_t *player;
|
||||
fixed_t oldscale;
|
||||
|
|
@ -6177,8 +6177,16 @@ void P_SetScale(mobj_t *mobj, fixed_t newscale)
|
|||
|
||||
mobj->scale = newscale;
|
||||
|
||||
mobj->radius = FixedMul(FixedDiv(mobj->radius, oldscale), newscale);
|
||||
mobj->height = FixedMul(FixedDiv(mobj->height, oldscale), newscale);
|
||||
if (compat)
|
||||
{
|
||||
mobj->radius = FixedMul(mobj->info->radius, newscale);
|
||||
mobj->height = FixedMul(mobj->info->height, newscale);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->radius = FixedMul(FixedDiv(mobj->radius, oldscale), newscale);
|
||||
mobj->height = FixedMul(FixedDiv(mobj->height, oldscale), newscale);
|
||||
}
|
||||
|
||||
player = mobj->player;
|
||||
|
||||
|
|
|
|||
|
|
@ -566,7 +566,8 @@ boolean P_SupermanLook4Players(mobj_t *actor);
|
|||
boolean P_PrecipThinker(precipmobj_t *mobj);
|
||||
void P_NullPrecipThinker(precipmobj_t *mobj);
|
||||
void P_FreePrecipMobj(precipmobj_t *mobj);
|
||||
void P_SetScale(mobj_t *mobj, fixed_t newscale);
|
||||
#define P_SetScale(mobj, newscale) P_SetScale2(mobj, newscale, false)
|
||||
void P_SetScale2(mobj_t *mobj, fixed_t newscale, boolean compat);
|
||||
void P_XYMovement(mobj_t *mo);
|
||||
void P_RingXYMovement(mobj_t *mo);
|
||||
void P_SceneryXYMovement(mobj_t *mo);
|
||||
|
|
|
|||
Loading…
Reference in a new issue