Merge branch 'mt-reorder' into 'master'

Reorder stuff in P_SpawnMobjFromMapThing

See merge request KartKrew/Kart!1293
This commit is contained in:
Oni 2023-06-16 05:39:38 +00:00
commit abd6e183e9

View file

@ -12321,7 +12321,7 @@ static boolean P_SetupEmblem(mapthing_t *mthing, mobj_t *mobj)
return true; return true;
} }
static boolean P_SetupMace(mapthing_t *mthing, mobj_t *mobj, boolean *doangle) static boolean P_SetupMace(mapthing_t *mthing, mobj_t *mobj)
{ {
fixed_t mlength, mmaxlength, mlengthset, mspeed, mphase, myaw, mpitch, mminlength, mnumspokes, mpinch, mroll, mnumnospokes, mwidth, mwidthset, mmin, msound, radiusfactor, widthfactor; fixed_t mlength, mmaxlength, mlengthset, mspeed, mphase, myaw, mpitch, mminlength, mnumspokes, mpinch, mroll, mnumnospokes, mwidth, mwidthset, mmin, msound, radiusfactor, widthfactor;
angle_t mspokeangle; angle_t mspokeangle;
@ -12366,7 +12366,6 @@ static boolean P_SetupMace(mapthing_t *mthing, mobj_t *mobj, boolean *doangle)
mobj->lastlook = mspeed; mobj->lastlook = mspeed;
mobj->movecount = mobj->lastlook; mobj->movecount = mobj->lastlook;
mobj->angle = FixedAngle(myaw << FRACBITS); mobj->angle = FixedAngle(myaw << FRACBITS);
*doangle = false;
mobj->threshold = (FixedAngle(mpitch << FRACBITS) >> ANGLETOFINESHIFT); mobj->threshold = (FixedAngle(mpitch << FRACBITS) >> ANGLETOFINESHIFT);
mobj->movefactor = mpinch; mobj->movefactor = mpinch;
mobj->movedir = 0; mobj->movedir = 0;
@ -12761,7 +12760,7 @@ static boolean P_MapAlreadyHasStarPost(mobj_t *mobj)
return false; return false;
} }
static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean *doangle) static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj)
{ {
boolean override = LUA_HookMapThingSpawn(mobj, mthing); boolean override = LUA_HookMapThingSpawn(mobj, mthing);
@ -12873,7 +12872,7 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
case MT_CHAINPOINT: case MT_CHAINPOINT:
case MT_FIREBARPOINT: case MT_FIREBARPOINT:
case MT_CUSTOMMACEPOINT: case MT_CUSTOMMACEPOINT:
if (!P_SetupMace(mthing, mobj, doangle)) if (!P_SetupMace(mthing, mobj))
return false; return false;
break; break;
case MT_PARTICLEGEN: case MT_PARTICLEGEN:
@ -13366,23 +13365,18 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
} }
case MT_DUELBOMB: case MT_DUELBOMB:
{ {
// Duel Bomb needs init to match real map thing's angle
mobj->angle = FixedAngle(mthing->angle << FRACBITS);
Obj_DuelBombInit(mobj); Obj_DuelBombInit(mobj);
if (mthing->args[1]) if (mthing->args[1])
{ {
Obj_DuelBombReverse(mobj); Obj_DuelBombReverse(mobj);
} }
*doangle = false;
break; break;
} }
case MT_BANANA: case MT_BANANA:
{ {
// Give Duel bananas a random angle // Give Duel bananas a random angle
mobj->angle = FixedMul(P_RandomFixed(PR_DECORATION), ANGLE_MAX); mobj->angle = FixedMul(P_RandomFixed(PR_DECORATION), ANGLE_MAX);
*doangle = false;
break; break;
} }
case MT_HYUDORO_CENTER: case MT_HYUDORO_CENTER:
@ -13414,37 +13408,9 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
mobj->flags2 |= MF2_BOSSNOTRAP; mobj->flags2 |= MF2_BOSSNOTRAP;
} }
return true;
}
static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y, fixed_t z, mobjtype_t i)
{
mobj_t *mobj = NULL;
boolean doangle = true;
size_t arg = SIZE_MAX;
mobj = P_SpawnMobj(x, y, z, i);
mobj->spawnpoint = mthing;
P_SetScale(mobj, FixedMul(mobj->scale, mthing->scale));
mobj->destscale = FixedMul(mobj->destscale, mthing->scale);
if (!P_SetupSpawnedMapThing(mthing, mobj, &doangle))
{
if (P_MobjWasRemoved(mobj))
return NULL;
return mobj;
}
if (doangle)
{
mobj->angle = FixedAngle(mthing->angle << FRACBITS);
}
if ((mobj->flags & MF_SPRING) if ((mobj->flags & MF_SPRING)
&& mobj->info->damage != 0 && mobj->info->damage != 0
&& mobj->info->mass == 0) && mobj->info->mass == 0)
{ {
// Offset sprite of horizontal springs // Offset sprite of horizontal springs
angle_t a = mobj->angle + ANGLE_180; angle_t a = mobj->angle + ANGLE_180;
@ -13452,9 +13418,24 @@ static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y,
mobj->spryoff = FixedMul(mobj->radius, FINESINE(a >> ANGLETOFINESHIFT)); mobj->spryoff = FixedMul(mobj->radius, FINESINE(a >> ANGLETOFINESHIFT));
} }
return true;
}
static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y, fixed_t z, mobjtype_t i)
{
mobj_t *mobj = NULL;
size_t arg = SIZE_MAX;
mobj = P_SpawnMobj(x, y, z, i);
mobj->spawnpoint = mthing;
mobj->angle = FixedAngle(mthing->angle << FRACBITS);
mobj->pitch = FixedAngle(mthing->pitch << FRACBITS); mobj->pitch = FixedAngle(mthing->pitch << FRACBITS);
mobj->roll = FixedAngle(mthing->roll << FRACBITS); mobj->roll = FixedAngle(mthing->roll << FRACBITS);
P_SetScale(mobj, FixedMul(mobj->scale, mthing->scale));
mobj->destscale = FixedMul(mobj->destscale, mthing->scale);
P_SetThingTID(mobj, mthing->tid); P_SetThingTID(mobj, mthing->tid);
mobj->special = mthing->special; mobj->special = mthing->special;
@ -13484,6 +13465,14 @@ static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y,
M_Memcpy(mobj->stringargs[arg], mthing->stringargs[arg], len + 1); M_Memcpy(mobj->stringargs[arg], mthing->stringargs[arg], len + 1);
} }
if (!P_SetupSpawnedMapThing(mthing, mobj))
{
if (P_MobjWasRemoved(mobj))
return NULL;
return mobj;
}
mthing->mobj = mobj; mthing->mobj = mobj;
// Generic reverse gravity for individual objects flag. // Generic reverse gravity for individual objects flag.