diff --git a/src/k_collide.cpp b/src/k_collide.cpp index 38e69c8e4..61c8f528b 100644 --- a/src/k_collide.cpp +++ b/src/k_collide.cpp @@ -19,6 +19,7 @@ #include "k_powerup.h" #include "k_hitlag.h" #include "m_random.h" +#include "k_hud.h" // K_AddMessage angle_t K_GetCollideAngle(mobj_t *t1, mobj_t *t2) { @@ -876,6 +877,9 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim) attackerPlayer->instaWhipCharge = 0; attackerPlayer->flashing = 0; + K_AddMessageForPlayer(victimPlayer, va("Reflect Counter!"), false); + K_AddMessageForPlayer(attackerPlayer, va("Reflected..."), false); + // Localized broly for a local event. if (mobj_t *broly = Obj_SpawnBrolyKi(victim, victimHitlag/2)) { diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 077cf8d9c..4738c8623 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5621,7 +5621,7 @@ typedef struct sfxenum_t sound; } message_t; -static std::deque messages = {"Reflected!", "Get the UFO!", "Worm Bagged", "GOTTEM", "Spectator to die why?", ":ubiktune:", "Barrier closing!"}; +static std::deque messages; static tic_t messagetimer = 0; static messagemode_t messagemode = MM_IN; @@ -5630,9 +5630,31 @@ static tic_t lazyswitch = 4*TICRATE; void K_AddMessage(char *msg, boolean interrupt) { + if (interrupt) + messages.clear(); messages.push_back(msg); } +void K_AddMessageForPlayer(player_t *player, char *msg, boolean interrupt) +{ + if (!P_IsDisplayPlayer(player)) + return; + K_AddMessage(msg, interrupt); +} + +static void K_SwitchMessageMode(messagemode_t mode) +{ + messagemode = mode; + messagetimer = 0; +} + +static void K_NextMessage() +{ + K_SwitchMessageMode(MM_IN); + if (messages.size() > 0) + messages.pop_front(); +} + void K_TickMessages() { if (messages.size() == 0) @@ -5647,31 +5669,17 @@ void K_TickMessages() { case MM_IN: if (messagetimer > messages[0].length()) - { - messagemode = MM_HOLD; - messagetimer = 0; - } + K_SwitchMessageMode(MM_HOLD); break; case MM_HOLD: if (messages.size() > 1 && messagetimer > speedyswitch) // Waiting message, switch to it right away! - { - messagemode = MM_IN; - messagetimer = 0; - messages.pop_front(); - } + K_NextMessage(); else if (messagetimer > lazyswitch) // If there's no pending message, we can chill for a bit. - { - messagemode = MM_OUT; - messagetimer = 0; - } + K_SwitchMessageMode(MM_OUT); break; case MM_OUT: if (messagetimer > messages[0].length()) - { - messagemode = MM_IN; - messagetimer = 0; - messages.pop_front(); - } + K_NextMessage(); break; } } diff --git a/src/k_hud.h b/src/k_hud.h index 20bd238e0..185315d06 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -94,6 +94,7 @@ extern patch_t *kp_eggnum[6]; extern patch_t *kp_facenum[MAXPLAYERS+1]; void K_AddMessage(char *msg, boolean interrupt); +void K_AddMessageForPlayer(player_t *player, char *msg, boolean interrupt); void K_TickMessages(void); #ifdef __cplusplus diff --git a/src/k_kart.c b/src/k_kart.c index b17241488..22d90e2e2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3836,6 +3836,9 @@ void K_DoGuardBreak(mobj_t *t1, mobj_t *t2) { S_StartSound(t1, sfx_gbrk); K_AddHitLag(t1, 24, true); + K_AddMessageForPlayer(t1->player, va("Barrier Break..."), false); + K_AddMessageForPlayer(t2->player, va("Smashed 'em!"), false); + angle_t thrangle = R_PointToAngle2(t1->x, t1->y, t2->x, t2->y); P_Thrust(t1, thrangle, 7*mapobjectscale); diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index 5c3f34148..2f9bae770 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -13,6 +13,7 @@ #include "../k_battle.h" #include "../k_objects.h" #include "../k_kart.h" +#include "../k_hud.h" // K_AddMessage using srb2::math::Fixed; using srb2::Mobj; @@ -114,6 +115,7 @@ public: Spawner* spawner = next(g_battleufo.previousId); UFO* ufo = static_cast(P_SpawnMobjFromMobj(spawner, 0, 0, 250*FRACUNIT - ofs, MT_BATTLEUFO)); + K_AddMessage(va("Get the UFO!"), true); ufo->sprzoff(ofs * spawner->scale());