From 9c71415b8fa52e0f6812f7726af5d24e6465eac3 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 00:17:38 -0400 Subject: [PATCH 1/7] Speed up ring respawn for anything more than 1v1s --- src/p_mobj.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 63af474e4..d3ea3a411 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11008,16 +11008,20 @@ void P_RespawnSpecials(void) else { if (pcount == 1) // No respawn when alone + { return; + } else if (pcount > 1) { - time = (120 - ((pcount-2) * 10)) * TICRATE; + time = (120 - ((pcount-2) * 20)) * TICRATE; // If the map is longer or shorter than 3 laps, then adjust ring respawn to account for this. // 5 lap courses would have more retreaded ground, while 2 lap courses would have less. if ((mapheaderinfo[gamemap-1]->numlaps != 3) - && !(mapheaderinfo[gamemap-1]->levelflags & LF_SECTIONRACE)) + && !(mapheaderinfo[gamemap-1]->levelflags & LF_SECTIONRACE)) + { time = (time * 3) / max(1, mapheaderinfo[gamemap-1]->numlaps); + } if (time < 10*TICRATE) { From b36213859674ae71530f8f029e6d10a8747241e9 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 02:36:58 -0400 Subject: [PATCH 2/7] Less quad orbis & lightning shield --- src/k_kart.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index becb9f56c..119e813c4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -357,15 +357,15 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] = /*Invincibility*/ { 0, 0, 0, 0, 3, 4, 6, 9 }, // Invincibility /*Banana*/ { 2, 3, 1, 0, 0, 0, 0, 0 }, // Banana /*Eggman Monitor*/ { 1, 2, 0, 0, 0, 0, 0, 0 }, // Eggman Monitor - /*Orbinaut*/ { 5, 4, 2, 2, 0, 0, 0, 0 }, // Orbinaut - /*Jawz*/ { 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz - /*Mine*/ { 0, 2, 3, 1, 0, 0, 0, 0 }, // Mine + /*Orbinaut*/ { 5, 5, 2, 2, 0, 0, 0, 0 }, // Orbinaut + /*Jawz*/ { 0, 4, 2, 1, 0, 0, 0, 0 }, // Jawz + /*Mine*/ { 0, 3, 3, 1, 0, 0, 0, 0 }, // Mine /*Land Mine*/ { 3, 0, 0, 0, 0, 0, 0, 0 }, // Land Mine /*Ballhog*/ { 0, 0, 2, 2, 0, 0, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0, 2, 4, 0 }, // Self-Propelled Bomb /*Grow*/ { 0, 0, 0, 1, 2, 3, 0, 0 }, // Grow /*Shrink*/ { 0, 0, 0, 0, 0, 0, 2, 0 }, // Shrink - /*Lightning Shield*/ { 1, 2, 0, 0, 0, 0, 0, 0 }, // Lightning Shield + /*Lightning Shield*/ { 1, 0, 0, 0, 0, 0, 0, 0 }, // Lightning Shield /*Bubble Shield*/ { 0, 1, 2, 1, 0, 0, 0, 0 }, // Bubble Shield /*Flame Shield*/ { 0, 0, 0, 0, 0, 1, 3, 5 }, // Flame Shield /*Hyudoro*/ { 3, 0, 0, 0, 0, 0, 0, 0 }, // Hyudoro @@ -373,13 +373,13 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS-1][8] = /*Super Ring*/ { 2, 1, 1, 0, 0, 0, 0, 0 }, // Super Ring /*Kitchen Sink*/ { 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink /*Drop Target*/ { 3, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target - /*Sneaker x2*/ { 0, 0, 2, 2, 1, 0, 0, 0 }, // Sneaker x2 - /*Sneaker x3*/ { 0, 0, 0, 2, 6,10, 5, 0 }, // Sneaker x3 + /*Sneaker x2*/ { 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2 + /*Sneaker x3*/ { 0, 0, 0, 1, 6,10, 5, 0 }, // Sneaker x3 /*Banana x3*/ { 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3 /*Banana x10*/ { 0, 0, 0, 1, 0, 0, 0, 0 }, // Banana x10 /*Orbinaut x3*/ { 0, 0, 1, 0, 0, 0, 0, 0 }, // Orbinaut x3 - /*Orbinaut x4*/ { 0, 0, 0, 1, 1, 0, 0, 0 }, // Orbinaut x4 - /*Jawz x2*/ { 0, 0, 1, 2, 0, 0, 0, 0 } // Jawz x2 + /*Orbinaut x4*/ { 0, 0, 0, 2, 0, 0, 0, 0 }, // Orbinaut x4 + /*Jawz x2*/ { 0, 0, 1, 2, 1, 0, 0, 0 } // Jawz x2 }; static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] = From 9a250d38082787052df379a6d7743f93bc968c1e Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 20:09:10 -0400 Subject: [PATCH 3/7] Maintain tether in air setpieces --- src/k_kart.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index a2898ae41..e05c9b077 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1892,9 +1892,14 @@ static void K_UpdateDraft(player_t *player) } // No one to draft off of? Then you can knock that off. - if (player->draftleeway) // Prevent small disruptions from stopping your draft. + if (player->draftleeway > 0) // Prevent small disruptions from stopping your draft. { - player->draftleeway--; + if (P_IsObjectOnGround(player->mo) == true) + { + // Allow maintaining tether in air setpieces. + player->draftleeway--; + } + if (player->lastdraft >= 0 && player->lastdraft < MAXPLAYERS && playeringame[player->lastdraft] From ba8c511bb405d9f7fc19a999a16ade2b89e8cfac Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 20:11:07 -0400 Subject: [PATCH 4/7] Make infinite tether rainbowy --- src/k_kart.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index e05c9b077..34f829f48 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1700,9 +1700,13 @@ static void K_DrawDraftCombiring(player_t *player, player_t *victim, fixed_t cur UINT8 c; if (maxdist == 0) - c = 0; + { + c = leveltime % CHAOTIXBANDCOLORS; + } else + { c = FixedMul(CHAOTIXBANDCOLORS<> FRACBITS; + } stepx = (victim->mo->x - player->mo->x) / CHAOTIXBANDLEN; stepy = (victim->mo->y - player->mo->y) / CHAOTIXBANDLEN; From 0141ea5a7ceb4bbfc9d389c79f4e2dd31062808e Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 20:27:19 -0400 Subject: [PATCH 5/7] Infinite tether uses lightning shield effects --- src/k_collide.c | 6 ++++++ src/k_kart.c | 12 ++++++++++-- src/p_enemy.c | 26 +++++++++++++------------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/k_collide.c b/src/k_collide.c index 7b0854a01..128364cfc 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -675,6 +675,12 @@ static inline BlockItReturn_t PIT_LightningShieldAttack(mobj_t *thing) return BMIT_ABORT; } + if (thing == NULL || P_MobjWasRemoved(thing)) + { + // Invalid? + return BMIT_ABORT; + } + if (thing == lightningSource) { // Don't explode yourself!! diff --git a/src/k_kart.c b/src/k_kart.c index 34f829f48..8000c3378 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1725,8 +1725,16 @@ static void K_DrawDraftCombiring(player_t *player, player_t *victim, fixed_t cur curz + (P_RandomRange(24,48)*mapobjectscale), MT_SIGNSPARKLE); - P_SetMobjState(band, S_SIGNSPARK1 + (leveltime % 11)); - P_SetScale(band, (band->destscale = (3*player->mo->scale)/2)); + if (maxdist == 0) + { + P_SetMobjState(band, S_KSPARK1 + (leveltime % 8)); + P_SetScale(band, (band->destscale = player->mo->scale/2)); + } + else + { + P_SetMobjState(band, S_SIGNSPARK1 + (leveltime % 11)); + P_SetScale(band, (band->destscale = (3*player->mo->scale)/2)); + } band->color = colors[c]; band->colorized = true; diff --git a/src/p_enemy.c b/src/p_enemy.c index 724cb8f39..2c69e7bfe 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -14032,21 +14032,21 @@ void A_LightningFollowPlayer(mobj_t *actor) if (!actor->target) return; + if (actor->extravalue1) // Make the radius also follow the player somewhat accuratly { - if (actor->extravalue1) // Make the radius also follow the player somewhat accuratly - { - sx = actor->target->x + FixedMul((actor->target->scale*actor->extravalue1), FINECOSINE((actor->angle)>>ANGLETOFINESHIFT)); - sy = actor->target->y + FixedMul((actor->target->scale*actor->extravalue1), FINESINE((actor->angle)>>ANGLETOFINESHIFT)); - P_MoveOrigin(actor, sx, sy, actor->target->z); - } - else // else just teleport to player directly - P_MoveOrigin(actor, actor->target->x, actor->target->y, actor->target->z); - - K_MatchGenericExtraFlags(actor, actor->target); // copy our target for graviflip - actor->momx = actor->target->momx; - actor->momy = actor->target->momy; - actor->momz = actor->target->momz; // Give momentum since we don't teleport to our player literally every frame. + sx = actor->target->x + FixedMul((actor->target->scale*actor->extravalue1), FINECOSINE((actor->angle)>>ANGLETOFINESHIFT)); + sy = actor->target->y + FixedMul((actor->target->scale*actor->extravalue1), FINESINE((actor->angle)>>ANGLETOFINESHIFT)); + P_MoveOrigin(actor, sx, sy, actor->target->z); } + else // else just teleport to player directly + { + P_MoveOrigin(actor, actor->target->x, actor->target->y, actor->target->z); + } + + K_MatchGenericExtraFlags(actor, actor->target); // copy our target for graviflip + actor->momx = actor->target->momx; + actor->momy = actor->target->momy; + actor->momz = actor->target->momz; // Give momentum since we don't teleport to our player literally every frame. } // A_FZBoomFlash: From 3678eb486885f1bc36fef5a20725f05deb49866b Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 20:31:13 -0400 Subject: [PATCH 6/7] Lightning Shield tether is stronger --- src/k_kart.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 8000c3378..66ee6d26a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3126,6 +3126,12 @@ static void K_GetKartBoostPower(player_t *player) draftspeed *= 2; } + if (player->itemtype == KITEM_LIGHTNINGSHIELD) + { + // infinite tether + draftspeed *= 2; + } + speedboost += FixedMul(draftspeed, player->draftpower); // (Drafting suffers no boost stack penalty.) numboosts++; } From accf8035e06b71113a65987d0a82ea3d3b74d65c Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 21:43:53 -0400 Subject: [PATCH 7/7] Make lightning tether bigger --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 66ee6d26a..de8d3e004 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1728,7 +1728,7 @@ static void K_DrawDraftCombiring(player_t *player, player_t *victim, fixed_t cur if (maxdist == 0) { P_SetMobjState(band, S_KSPARK1 + (leveltime % 8)); - P_SetScale(band, (band->destscale = player->mo->scale/2)); + P_SetScale(band, (band->destscale = player->mo->scale)); } else {