From 6927191a24e269a58034fd2468b0fac7b94641e3 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 1 Mar 2023 17:39:36 +0000 Subject: [PATCH] Merge branch 'loops-prep' into 'master' Prep for Sonic Loops See merge request KartKrew/Kart!990 --- src/p_mobj.c | 20 ++++++++++++-------- src/p_mobj.h | 1 + src/p_setup.c | 12 ++++++++---- src/tables.c | 2 +- src/tables.h | 4 ++-- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 571fcc5cd..9101e72cd 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9007,14 +9007,6 @@ void P_MobjThinker(mobj_t *mobj) I_Assert(mobj != NULL); I_Assert(!P_MobjWasRemoved(mobj)); - // Set old position (for interpolation) - mobj->old_x = mobj->x; - mobj->old_y = mobj->y; - mobj->old_z = mobj->z; - mobj->old_angle = mobj->angle; - mobj->old_pitch = mobj->pitch; - mobj->old_roll = mobj->roll; - // Remove dead target/tracer. if (mobj->target && P_MobjWasRemoved(mobj->target)) P_SetTarget(&mobj->target, NULL); @@ -13008,6 +13000,18 @@ void P_SpawnItemPattern(mapthing_t *mthing) } } +void P_SpawnItemLine(mapthing_t *mt1, mapthing_t *mt2) +{ + const mobjtype_t type = P_GetMobjtype(mt1->type); + const fixed_t diameter = 2 * FixedMul(mobjinfo[type].radius, mapobjectscale); + const fixed_t dx = (mt2->x - mt1->x) * FRACUNIT; + const fixed_t dy = (mt2->y - mt1->y) * FRACUNIT; + const fixed_t dist = FixedHypot(dx, dy); + const angle_t angle = R_PointToAngle2(0, 0, dx, dy); + + P_SpawnSingularItemRow(mt1, type, (dist / diameter) + 1, diameter, 0, AngleFixed(angle) / FRACUNIT); +} + // // P_CheckMissileSpawn // Moves the missile forward a bit and possibly explodes it right there. diff --git a/src/p_mobj.h b/src/p_mobj.h index d735d8add..650bfde07 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -531,6 +531,7 @@ fixed_t P_GetMapThingSpawnHeight(const mobjtype_t mobjtype, const mapthing_t* mt mobj_t *P_SpawnMapThing(mapthing_t *mthing); void P_SpawnHoop(mapthing_t *mthing); void P_SpawnItemPattern(mapthing_t *mthing); +void P_SpawnItemLine(mapthing_t *mt1, mapthing_t *mt2); void P_SpawnHoopOfSomething(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle); void P_SpawnPrecipitation(void); void P_SpawnParaloop(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, statenum_t nstate, angle_t rotangle, boolean spawncenter); diff --git a/src/p_setup.c b/src/p_setup.c index 2942bee5d..d63c5f334 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -882,10 +882,13 @@ static void P_SpawnMapThings(boolean spawnemblems) for (i = 0, mt = mapthings; i < nummapthings; i++, mt++) { - if (mt->type == 1700 // MT_AXIS - || mt->type == 1701 // MT_AXISTRANSFER - || mt->type == 1702) // MT_AXISTRANSFERLINE - continue; // These were already spawned + switch (mt->type) + { + case 1700: // MT_AXIS + case 1701: // MT_AXISTRANSFER + case 1702: // MT_AXISTRANSFERLINE + continue; // These were already spawned + } if (mt->type == mobjinfo[MT_BATTLECAPSULE].doomednum) continue; // This will spawn later @@ -6240,6 +6243,7 @@ static void P_ConvertBinaryLinedefTypes(void) lines[i].args[1] |= TMBOT_FORCEDIR; lines[i].args[2] = sides[lines[i].sidenum[0]].textureoffset / FRACUNIT; + break; default: break; } diff --git a/src/tables.c b/src/tables.c index 8c4dc50e1..6a7b7645b 100644 --- a/src/tables.c +++ b/src/tables.c @@ -167,7 +167,7 @@ angle_t FixedAngle(fixed_t fa) return AngleAdj(cfa, cwf, ra); } -INT32 AngleDelta(angle_t a1, angle_t a2) +angle_t AngleDelta(angle_t a1, angle_t a2) { angle_t delta = a1 - a2; diff --git a/src/tables.h b/src/tables.h index 42e5ed899..f170001c5 100644 --- a/src/tables.h +++ b/src/tables.h @@ -23,7 +23,6 @@ #define FINEANGLES 8192 #define FINEMASK (FINEANGLES - 1) #define ANGLETOFINESHIFT 19 // 0x100000000 to 0x2000 -#define FINEANGLE_C(x) ((FixedAngle((x)*FRACUNIT)>>ANGLETOFINESHIFT) & FINEMASK) // ((x*(ANGLE_45/45))>>ANGLETOFINESHIFT) & FINEMASK #define ANGLETOFINE(x) (((x)>>ANGLETOFINESHIFT) & FINEMASK) // Effective size is 10240. @@ -107,7 +106,7 @@ FUNCMATH angle_t FixedAngle(fixed_t fa); // and with a factor, with +factor for (fa/factor) and -factor for (fa*factor) FUNCMATH angle_t FixedAngleC(fixed_t fa, fixed_t factor); // difference between two angle_t -FUNCMATH INT32 AngleDelta(angle_t a1, angle_t a2); +FUNCMATH angle_t AngleDelta(angle_t a1, angle_t a2); FUNCMATH INT32 AngleDeltaSigned(angle_t a1, angle_t a2); FUNCMATH float AngleToFloat(angle_t x); FUNCMATH angle_t FloatToAngle(float f); @@ -133,6 +132,7 @@ void FM_Rotate(matrix_t *dest, angle_t angle, fixed_t x, fixed_t y, fixed_t z); #define FINECOSINE(n) (finecosine[n]>>(FINE_FRACBITS-FRACBITS)) #define FINETANGENT(n) (finetangent[n]>>(FINE_FRACBITS-FRACBITS)) +// FSIN(ANGLE_90) = FRACUNIT #define FSIN(n) FINESINE(ANGLETOFINE(n)) #define FCOS(n) FINECOSINE(ANGLETOFINE(n))