From 7b1df12ed0243342499bfb846b3fd16081fdc45c Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 27 Apr 2026 22:45:28 -0400 Subject: [PATCH] experimental attraction shield EMP attack option AoE attack can put opponent items on a cooldown --- src/d_netcmd.c | 1 + src/d_netcmd.h | 1 + src/k_collide.c | 12 +++++++++++- src/k_kart.c | 1 + src/k_kart.h | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 608eb247f..459e185e3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -720,6 +720,7 @@ consvar_t cv_kartattraction_assistpower = CVAR_INIT ("kartattraction_assistpower // Attraction Shield damage toggles static CV_PossibleValue_t kartattractiondmg_cons_t[] = {{0, "None"}, {DMG_WIPEOUT, "Wipe-out"}, {DMG_FLIPOVER, "Flip-over"}, {DMG_EXPLODE, "Explode"}, {0, NULL}}; consvar_t cv_kartattraction_aoedmg = CVAR_INIT ("kartattraction_aoedmg", "None", CV_NETVAR|CV_CHEAT|CV_GUARD, kartattractiondmg_cons_t, NULL); +consvar_t cv_kartattraction_aoeemp = CVAR_INIT ("kartattraction_aoeemp", "0", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_Unsigned, NULL); // "Arrow Bullet": above a certain speed threshold, an aura in the shape of the Shrink arrow // covers you, signaling protection from (most) items and players. diff --git a/src/d_netcmd.h b/src/d_netcmd.h index b0f2bcd85..e938097fe 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -236,6 +236,7 @@ extern consvar_t cv_kartflame_fastfuel; extern consvar_t cv_kartflame_offroadburn; extern consvar_t cv_kartattraction_assistpower; extern consvar_t cv_kartattraction_aoedmg; +extern consvar_t cv_kartattraction_aoeemp; extern consvar_t cv_kartaltshrink_arrowbullet; extern consvar_t cv_kartaltshrink_arrowbulletthres; diff --git a/src/k_collide.c b/src/k_collide.c index 3493e0dbb..eaa94bac9 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -697,11 +697,13 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing) return BMIT_ABORT; } +#if 0 if (thing->player && (ATTRACTIONAOEDAMAGE == 0 || (!attractionhipower))) { // Don't damage players return BMIT_CONTINUE; } +#endif if (thing == lightningSource) { @@ -746,7 +748,15 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing) if (thing->player) { - P_DamageMobj(thing, lightningSource, lightningSource, 1, ATTRACTIONAOEDAMAGE|DMG_CANTHURTSELF); + if (ATTRACTIONAOEDAMAGE && attractionhipower) + { + P_DamageMobj(thing, lightningSource, lightningSource, 1, ATTRACTIONAOEDAMAGE|DMG_CANTHURTSELF); + } + if (ATTRACTIONAOEEMP && attractionhipower && thing != lightningSource) + { + //todo: filter out teammates + K_SetPlayerItemCooldown(thing->player, TICRATE * ATTRACTIONAOEEMP, false); + } } else { diff --git a/src/k_kart.c b/src/k_kart.c index 44eda4853..bc00858a1 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -456,6 +456,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartflame_offroadburn); CV_RegisterVar(&cv_kartattraction_assistpower); CV_RegisterVar(&cv_kartattraction_aoedmg); + CV_RegisterVar(&cv_kartattraction_aoeemp); CV_RegisterVar(&cv_kartaltshrink_arrowbullet); CV_RegisterVar(&cv_kartaltshrink_arrowbulletthres); diff --git a/src/k_kart.h b/src/k_kart.h index 572fff055..a99786faf 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -139,6 +139,7 @@ extern vector3_t clusterpoint, clusterdtf; #define FLAMEHANDLEBOOST CV_Get(&cv_kartstacking_flame_handleboost) #define FLAMESTACKABLE CV_Get(&cv_kartstacking_flame_stackable) +#define ATTRACTIONAOEEMP CV_Get(&cv_kartattraction_aoeemp) #define ATTRACTIONAOEDAMAGE CV_Get(&cv_kartattraction_aoedmg) #define ATTRACTIONSPEEDHIMIN CV_Get(&cv_kartstacking_attraction_speedboost_himin) #define ATTRACTIONSPEEDHIMAX CV_Get(&cv_kartstacking_attraction_speedboost_himax)