diff --git a/src/objects/orbinaut.c b/src/objects/orbinaut.c index 22632d33e..9fb5b0818 100644 --- a/src/objects/orbinaut.c +++ b/src/objects/orbinaut.c @@ -220,7 +220,7 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) // ^ remove all of P_DamageMobj and start over P_PlayRinglossSound(t2); P_PlayerRingBurst(t2->player, 5); - P_DamageMobj(t2, t1, t1->target, 1, DMG_WOMBO | DMG_STUMBLE); + P_DamageMobj(t2, t1, t1->target, 1, DMG_WOMBO | DMG_WHUMBLE); } else { diff --git a/src/objects/super-flicky.cpp b/src/objects/super-flicky.cpp index 15181e847..f97654dd6 100644 --- a/src/objects/super-flicky.cpp +++ b/src/objects/super-flicky.cpp @@ -33,6 +33,7 @@ #define flicky_delay(o) ((o)->movecount) #define flicky_mode(o) ((o)->extravalue1) #define flicky_fly(o) ((o)->extravalue2) +#define flicky_soundtimer(o) ((o)->cusval) #define controller_source(o) ((o)->target) #define controller_chasing(o) ((o)->tracer) @@ -69,7 +70,8 @@ constexpr fixed_t kRebound = 8*FRACUNIT/9; constexpr tic_t kDelay = 8; constexpr tic_t kDamageCooldown = TICRATE; constexpr tic_t kStunTime = 10*TICRATE; -constexpr tic_t kBlockTime = 5*TICRATE; +constexpr tic_t kBlockTime = 10*TICRATE; +constexpr tic_t kOwnerStunnedCooldown = 2*TICRATE; constexpr int kRiseTime = 1*TICRATE; constexpr int kRiseSpeed = 4; @@ -248,6 +250,9 @@ struct Flicky : mobj_t Fly fly() const { return static_cast(flicky_fly(this)); } void fly(Fly n) { flicky_fly(this) = static_cast(n); } + tic_t soundtimer() const { return flicky_soundtimer(this); } + void soundtimer(tic_t n) { flicky_soundtimer(this) = n; } + mobj_t* source() const { return controller()->source(); } static void spawn(Controller* controller, int phase) @@ -303,6 +308,11 @@ struct Flicky : mobj_t void refocus() { + if (soundtimer() > 0) + { + soundtimer(soundtimer() - 1); + } + if (controller()->ending()) { if (controller()->time_remaining() == kRiseTime) @@ -612,7 +622,15 @@ struct Flicky : mobj_t light_up(true); flags = info->flags; - S_StartSound(this, sfx_s3k9f); + // Put this sound on a cooldown specifically because + // it plays rapidly "at the edge of transform range". + // I don't know why that happens so just never play + // the sound close together. + if (!soundtimer()) + { + S_StartSound(this, sfx_s3k9f); + soundtimer(2*TICRATE); + } } void try_nerf() @@ -630,7 +648,7 @@ struct Flicky : mobj_t { if (owner_in_pain()) { - delay(1); + delay(kOwnerStunnedCooldown); } } diff --git a/src/p_local.h b/src/p_local.h index 421bf35fc..ecb677b65 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -524,8 +524,8 @@ struct BasicFF_t #define DMG_STING 0x04 #define DMG_KARMA 0x05 // Karma Bomb explosion -- works like DMG_EXPLODE, but steals half of their bumpers & deletes the rest #define DMG_VOLTAGE 0x06 -#define DMG_STUMBLE 0x07 -#define DMG_WHUMBLE 0x08 +#define DMG_STUMBLE 0x07 // Does not award points in Battle +#define DMG_WHUMBLE 0x08 // <-- But this one DOES! //// Death types - cannot be combined with damage types #define DMG_INSTAKILL 0x80 #define DMG_DEATHPIT 0x81