From d9915ca471e0afbfa626f75e2f85e26e98a88f60 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 2 Jul 2023 03:11:11 -0700 Subject: [PATCH 1/3] Start with 20 rings in Sealed Star --- src/g_game.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/g_game.c b/src/g_game.c index a4ec56cf2..1280a8319 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2595,6 +2595,10 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) { rings = 20; } + else if (gametyperules & GTR_CATCHER) + { + rings = 20; + } else { rings = 5; From 2b6da538ac15fabeb50cf3053aa3c528c973c40b Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 2 Jul 2023 04:28:19 -0700 Subject: [PATCH 2/3] UFO not CBT --- src/objects/ufo.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/objects/ufo.c b/src/objects/ufo.c index dacce52e6..bf1857072 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -35,6 +35,9 @@ #define UFO_DAMAGED_SPEED (UFO_BASE_SPEED >> 1) // Speed to add when UFO takes damage. #define UFO_START_SPEED (UFO_BASE_SPEED << 1) // Speed when the map starts. +#define UFO_PITY_DIST (10000) // Let's aim for an exciting finish! Try to stick closer to the player once they're past this threshold. +#define UFO_PITY_BRAKES (600 * FRACUNIT) // Subtract this amount from UFO_SFACING, starting at UFO_PITY_DIST and ending at the finish line. + #define UFO_NUMARMS (3) #define UFO_ARMDELTA (ANGLE_MAX / UFO_NUMARMS) @@ -52,6 +55,8 @@ #define ufo_piece_next(o) ((o)->hnext) #define ufo_piece_prev(o) ((o)->hprev) +#define ufo_intangible(o) ((o)->cusval) + enum { UFO_PIECE_TYPE_POD, @@ -168,9 +173,11 @@ static void UFOUpdateDistanceToFinish(mobj_t *ufo) static void UFOUpdateSpeed(mobj_t *ufo) { const fixed_t baseSpeed = FixedMul(UFO_BASE_SPEED, K_GetKartGameSpeedScalar(gamespeed)); - const UINT32 spacing = FixedMul(FixedMul(UFO_SPACING, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; const UINT32 deadzone = FixedMul(FixedMul(UFO_DEADZONE, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; + UINT32 spacing = FixedMul(FixedMul(UFO_SPACING, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; + UINT32 distanceNerf = FixedMul(FixedMul(UFO_PITY_BRAKES, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; + // Best values of all of the players. UINT32 bestDist = UINT32_MAX; fixed_t bestSpeed = 0; @@ -223,6 +230,13 @@ static void UFOUpdateSpeed(mobj_t *ufo) { INT32 distDelta = 0; + if (bestDist < UFO_PITY_DIST && UFOEmeraldChase(ufo)) + { + INT32 brakeDelta = UFO_PITY_DIST - bestDist; + INT32 distPerNerf = UFO_PITY_DIST / distanceNerf; // Doing this in the sensible way integer overflows. Sorry. + spacing = spacing - (brakeDelta / distPerNerf); + } + if (bestDist > spacing) { wantedDist = bestDist - spacing; @@ -495,6 +509,9 @@ void Obj_SpecialUFOThinker(mobj_t *ufo) UFOUpdateSpeed(ufo); UFOUpdateSound(ufo); + if (ufo_intangible(ufo)) + ufo_intangible(ufo)--; + if (UFOEmeraldChase(ufo) == true) { // Spawn emerald sparkles @@ -768,6 +785,7 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN SetRandomFakePlayerSkin(source->player, true); } + ufo_intangible(ufo) = 30; // Speed up on damage! ufo_speed(ufo) += addSpeed; @@ -819,6 +837,11 @@ void Obj_PlayerUFOCollide(mobj_t *ufo, mobj_t *other) return; // underneath } + if (ufo_intangible(ufo)) + { + return; // We were just hit! + } + if ((other->player->sneakertimer > 0) && !P_PlayerInPain(other->player) && (other->player->flashing == 0)) From 13b8df89506ec6ccf088c899da7ae199b0bb3e48 Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Sun, 2 Jul 2023 15:16:54 -0700 Subject: [PATCH 3/3] Clean up UFO gamespeed calcs --- src/objects/ufo.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/objects/ufo.c b/src/objects/ufo.c index bf1857072..ce994081b 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -172,11 +172,12 @@ static void UFOUpdateDistanceToFinish(mobj_t *ufo) static void UFOUpdateSpeed(mobj_t *ufo) { + const fixed_t mapspeedscale = FixedMul(mapobjectscale, K_GetKartGameSpeedScalar(gamespeed)); const fixed_t baseSpeed = FixedMul(UFO_BASE_SPEED, K_GetKartGameSpeedScalar(gamespeed)); - const UINT32 deadzone = FixedMul(FixedMul(UFO_DEADZONE, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; + const UINT32 deadzone = FixedMul(UFO_DEADZONE, mapspeedscale) >> FRACBITS; - UINT32 spacing = FixedMul(FixedMul(UFO_SPACING, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; - UINT32 distanceNerf = FixedMul(FixedMul(UFO_PITY_BRAKES, mapobjectscale), K_GetKartGameSpeedScalar(gamespeed)) >> FRACBITS; + UINT32 spacing = FixedMul(UFO_SPACING, mapspeedscale) >> FRACBITS; + UINT32 distanceNerf = FixedMul(UFO_PITY_BRAKES, mapspeedscale) >> FRACBITS; // Best values of all of the players. UINT32 bestDist = UINT32_MAX;