From 9a250d38082787052df379a6d7743f93bc968c1e Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 23 Aug 2022 20:09:10 -0400 Subject: [PATCH 1/5] 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 2/5] 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 3/5] 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 4/5] 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 5/5] 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 {