Fix DLZ Ring Sucker effect

- Fix infinite loop caused by not actually using the intended object type
- Fix integer multiply of two fixed-scale numbers causing overflow
This commit is contained in:
toaster 2023-10-07 23:26:53 +01:00
parent dbcb39d7ed
commit 756f42bc26

View file

@ -90,7 +90,7 @@ void Obj_DLZRingVaccumCollide(mobj_t *mo, mobj_t *mo2)
if (!P_IsObjectOnGround(mo) || mo->momz) if (!P_IsObjectOnGround(mo) || mo->momz)
return; return;
fake = P_SpawnMobj(mo->x, mo->y, mo->z, MT_FLINGRING); fake = P_SpawnMobj(mo->x, mo->y, mo->z, MT_DLZ_SUCKEDRING);
P_SetScale(fake, mo->scale); P_SetScale(fake, mo->scale);
fake->scalespeed = mapobjectscale/64; fake->scalespeed = mapobjectscale/64;
fake->destscale = 1; fake->destscale = 1;
@ -115,8 +115,8 @@ void Obj_DLZSuckedRingThink(mobj_t *mo)
return; return;
} }
x = t->x + mo->movefactor*FINECOSINE(mo->angle>>ANGLETOFINESHIFT); x = t->x + FixedMul(mo->movefactor, FINECOSINE(mo->angle>>ANGLETOFINESHIFT));
y = t->y + mo->movefactor*FINESINE(mo->angle>>ANGLETOFINESHIFT); y = t->y + FixedMul(mo->movefactor, FINESINE(mo->angle>>ANGLETOFINESHIFT));
P_MoveOrigin(mo, x, y, mo->z); P_MoveOrigin(mo, x, y, mo->z);