configurable attraction shield player damage

was told we want this
This commit is contained in:
minenice55 2026-04-24 23:58:28 -04:00
parent 699153fd52
commit 06a90d9809
8 changed files with 29 additions and 12 deletions

View file

@ -548,11 +548,11 @@ consvar_t cv_kartstacking_flame_stackable = CVAR_INIT ("vanillaboost_flame_stack
consvar_t cv_kartstacking_attraction_speedboost_himin = CVAR_INIT ("vanillaboost_attraction_speedboost_himin", "0.42", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_speedboost_himax = CVAR_INIT ("vanillaboost_attraction_speedboost_himax", "0.50", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_speedboost_normmin = CVAR_INIT ("vanillaboost_attraction_speedboost_normmin", "0.15", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_speedboost_normmax = CVAR_INIT ("vanillaboost_attraction_speedboost_normmax", "0.20", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_accelboost_hi = CVAR_INIT ("vanillaboost_attraction_accelboost_hi", "18.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_accelboost_norm = CVAR_INIT ("vanillaboost_attraction_accelboost_norm", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_handleboost = CVAR_INIT ("vanillaboost_attraction_handleboost", "1.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_speedboost_normmin = CVAR_INIT ("vanillaboost_attraction_speedboost_normmin", "0.24", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_speedboost_normmax = CVAR_INIT ("vanillaboost_attraction_speedboost_normmax", "0.32", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_accelboost_hi = CVAR_INIT ("vanillaboost_attraction_accelboost_hi", "16.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_accelboost_norm = CVAR_INIT ("vanillaboost_attraction_accelboost_norm", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_handleboost = CVAR_INIT ("vanillaboost_attraction_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
consvar_t cv_kartstacking_attraction_stackable = CVAR_INIT ("vanillaboost_attraction_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL);
consvar_t cv_kartstacking_start_speedboost = CVAR_INIT ("vanillaboost_start_speedboost", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL);
@ -718,6 +718,10 @@ consvar_t cv_kartflame_fastfuel = CVAR_INIT ("kartflame_fastfuel", "On", CV_NETV
consvar_t cv_kartflame_offroadburn = CVAR_INIT ("kartflame_offroadburn", "On", CV_NETVAR, CV_OnOff, NULL);
consvar_t cv_kartattraction_assistpower = CVAR_INIT ("kartattraction_assistpower", "0.5", CV_NETVAR|CV_FLOAT, CV_Unsigned, NULL);
// 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_assistpower", "None", CV_NETVAR|CV_FLOAT, kartattractiondmg_cons_t, 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.
// Default threshold percentage is currently 166%.

View file

@ -237,6 +237,7 @@ extern consvar_t cv_kartbubble_boost_offroadignore;
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_kartaltshrink_arrowbullet;
extern consvar_t cv_kartaltshrink_arrowbulletthres;

View file

@ -596,6 +596,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
static mobj_t *lightningSource;
static fixed_t lightningDist;
static boolean attractionhipower;
static inline BlockItReturn_t PIT_ThunderShieldAttack(mobj_t *thing)
{
@ -696,7 +697,7 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing)
return BMIT_ABORT;
}
if (thing->player)
if (thing->player && (ATTRACTIONAOEDAMAGE == 0 || (!attractionhipower)))
{
// Don't damage players
return BMIT_CONTINUE;
@ -741,16 +742,24 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing)
K_SetIndirectItemCooldown(0);
}
P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_VOLTAGE|DMG_CANTHURTSELF);
if (thing->player)
{
P_DamageMobj(thing, lightningSource, lightningSource, 1, ATTRACTIONAOEDAMAGE|DMG_CANTHURTSELF);
}
else
{
P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_VOLTAGE|DMG_CANTHURTSELF);
}
return BMIT_CONTINUE;
}
void K_AttractionShieldAttack(mobj_t *actor, fixed_t size)
void K_AttractionShieldAttack(mobj_t *actor, fixed_t size, boolean hipower)
{
INT32 bx, by, xl, xh, yl, yh;
lightningDist = FixedMul(size, actor->scale);
lightningSource = actor;
attractionhipower = hipower;
// Use blockmap to check for nearby shootables
yh = (unsigned)(actor->y + lightningDist - bmaporgy)>>MAPBLOCKSHIFT;

View file

@ -20,7 +20,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2);
boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2);
boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2);
void K_ThunderShieldAttack(mobj_t *actor, fixed_t size);
void K_AttractionShieldAttack(mobj_t *actor, fixed_t size);
void K_AttractionShieldAttack(mobj_t *actor, fixed_t size, boolean hipower);
boolean K_BubbleShieldReflect(mobj_t *t1, mobj_t *t2);
boolean K_BubbleShieldCanReflect(mobj_t *t);

View file

@ -1923,7 +1923,7 @@ void K_DoAttractionShield(player_t *player, boolean hipower)
}
S_StartSound(player->mo, sfx_zio3);
K_AttractionShieldAttack(player->mo, (cv_kartthunder_radius.value + THUNDERSPRITE) * FRACUNIT);
K_AttractionShieldAttack(player->mo, (cv_kartthunder_radius.value + THUNDERSPRITE) * FRACUNIT, hipower);
// spawn vertical bolt
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THOK);

View file

@ -241,10 +241,11 @@ extern consvar_t cv_karteggmine_slotbrick;
extern consvar_t cv_kartthunder_radius;
#define BUBBLEBOOSTTIME (7 * sneakertime / 10)
#define ATTRACTIONCHARGETIME ((92*TICRATE)/60)
#define ATTRACTIONATTACKTIME_FULL (TICRATE)
#define ATTRACTIONATTACKTIME_MAX (TICRATE/2)
#define ATTRACTIONATTACKTIME_MIN (TICRATE/3)
#define ATTRACTIONATTACKTIME_MAX (3*TICRATE/4)
#define ATTRACTIONATTACKTIME_MIN (TICRATE/2)
#ifdef __cplusplus
} // extern "C"

View file

@ -457,6 +457,7 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartflame_fastfuel);
CV_RegisterVar(&cv_kartflame_offroadburn);
CV_RegisterVar(&cv_kartattraction_assistpower);
CV_RegisterVar(&cv_kartattraction_aoedmg);
CV_RegisterVar(&cv_kartaltshrink_arrowbullet);
CV_RegisterVar(&cv_kartaltshrink_arrowbulletthres);

View file

@ -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 ATTRACTIONAOEDAMAGE CV_Get(&cv_kartattraction_aoedmg)
#define ATTRACTIONSPEEDHIMIN CV_Get(&cv_kartstacking_attraction_speedboost_himin)
#define ATTRACTIONSPEEDHIMAX CV_Get(&cv_kartstacking_attraction_speedboost_himax)
#define ATTRACTIONSPEEDNORMMIN CV_Get(&cv_kartstacking_attraction_speedboost_normmin)