diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 45953a2e47b..4a1e4f20f98 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -55,6 +55,7 @@
#define DATA_HUD_ABDUCTOR 18
#define ANTAG_HUD_DEVIL 19
#define ANTAG_HUD_EVENTMISC 20
+#define ANTAG_HUD_BLOB 21
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index e5948a47e30..365a4309413 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -22,7 +22,8 @@ var/datum/atom_hud/huds = list( \
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),\
ANTAG_HUD_DEVIL = new/datum/atom_hud/antag/hidden(),\
- ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden()\
+ ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\
+ ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\
)
/datum/atom_hud
diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm
index 3c3906a25eb..3a70d05029e 100644
--- a/code/defines/procs/announce.dm
+++ b/code/defines/procs/announce.dm
@@ -95,7 +95,7 @@
receivers -= M
garbled_receivers |= M
for(var/mob/M in GLOB.dead_mob_list)
- if(M.client && M.stat == DEAD)
+ if(M.client && M.stat == DEAD && !isnewplayer(M))
receivers |= M
return list(receivers, garbled_receivers)
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index 30934a07214..0f8e52a90b2 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -43,9 +43,11 @@ var/list/blob_nodes = list()
for(var/j = 0, j < cores_to_spawn, j++)
if(!possible_blobs.len)
break
+
var/datum/mind/blob = pick(possible_blobs)
infected_crew += blob
blob.special_role = SPECIAL_ROLE_BLOB
+ update_blob_icons_added(blob)
blob.restricted_roles = restricted_jobs
log_game("[key_name(blob)] has been selected as a Blob")
possible_blobs -= blob
@@ -67,8 +69,11 @@ var/list/blob_nodes = list()
var/datum/mind/blobmind = blob.mind
if(!istype(blobmind))
return 0
+
infected_crew += blobmind
blobmind.special_role = SPECIAL_ROLE_BLOB
+ update_blob_icons_added(blobmind)
+
log_game("[key_name(blob)] has been selected as a Blob")
greet_blob(blobmind)
to_chat(blob, "You feel very tired and bloated! You don't have long before you burst!")
@@ -186,16 +191,21 @@ var/list/blob_nodes = list()
return ..()
/datum/game_mode/blob/proc/stage(var/stage)
-
switch(stage)
if(0)
send_intercept(1)
declared = 1
-
if(1)
event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
-
if(2)
send_intercept(2)
- return
+/datum/game_mode/proc/update_blob_icons_added(datum/mind/mob_mind)
+ var/datum/atom_hud/antag/antaghud = huds[ANTAG_HUD_BLOB]
+ antaghud.join_hud(mob_mind.current)
+ set_antag_hud(mob_mind.current, "hudblob")
+
+/datum/game_mode/proc/update_blob_icons_removed(datum/mind/mob_mind)
+ var/datum/atom_hud/antag/antaghud = huds[ANTAG_HUD_BLOB]
+ antaghud.leave_hud(mob_mind.current)
+ set_antag_hud(mob_mind.current, null)
\ No newline at end of file
diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm
index e93556ca843..2586c63bc91 100644
--- a/code/game/gamemodes/cult/cult_comms.dm
+++ b/code/game/gamemodes/cult/cult_comms.dm
@@ -42,7 +42,7 @@
for(var/mob/M in GLOB.player_list)
if(iscultist(M))
to_chat(M, my_message)
- else if(M in GLOB.dead_mob_list)
+ else if((M in GLOB.dead_mob_list) && !isnewplayer(M))
to_chat(M, " (F) [my_message] ")
log_say("(CULT) [message]", user)
diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm
index 2c2fdfbab84..a15dd83c035 100644
--- a/code/modules/events/blob.dm
+++ b/code/modules/events/blob.dm
@@ -7,21 +7,27 @@
/datum/event/blob/start()
processing = FALSE //so it won't fire again in next tick
+
var/turf/T = pick(blobstart)
if(!T)
return kill()
+
var/list/candidates = pollCandidates("Do you want to play as a blob infested mouse?", ROLE_BLOB, 1)
if(!candidates.len)
return kill()
+
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in GLOB.all_vent_pumps)
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
if(temp_vent.parent.other_atmosmch.len > 50)
vents += temp_vent
+
var/obj/vent = pick(vents)
var/mob/living/simple_animal/mouse/blobinfected/B = new(vent.loc)
var/mob/M = pick(candidates)
B.key = M.key
+ SSticker.mode.update_blob_icons_added(B.mind)
+
to_chat(B, "You are now a mouse, infected with blob spores. Find somewhere isolated... before you burst and become the blob! Use ventcrawl (alt-click on vents) to move around.")
var/image/alert_overlay = image('icons/mob/blob.dmi', "blank_blob")
notify_ghosts("Infected Mouse has appeared in [get_area(B)].", source = B, alert_overlay = alert_overlay)
diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm
index 419bebfe2c1..fd0b73bc67b 100644
--- a/code/modules/events/sentience.dm
+++ b/code/modules/events/sentience.dm
@@ -1,6 +1,8 @@
/datum/event/sentience
/datum/event/sentience/start()
+ processing = FALSE //so it won't fire again in next tick
+
var/ghostmsg = "Do you want to awaken as a sentient being?"
var/list/candidates = pollCandidates(ghostmsg, ROLE_SENTIENT, 1)
var/list/potential = list()
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 25b188911ad..57725da8eb2 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -455,6 +455,7 @@
colour = "alien"
key = "y"
flags = RESTRICTED | HIVEMIND
+ follow = TRUE
/datum/language/wryn/check_special_condition(mob/other)
var/mob/living/carbon/M = other
@@ -485,7 +486,7 @@
colour = "alien"
key = "a"
flags = RESTRICTED | HIVEMIND
- follow = 1
+ follow = TRUE
/datum/language/terrorspider
name = "Spider Hivemind"
@@ -496,7 +497,7 @@
colour = "terrorspider"
key = "ts"
flags = RESTRICTED | HIVEMIND
- follow = 1
+ follow = TRUE
/datum/language/ling
name = "Changeling"
@@ -505,10 +506,11 @@
colour = "changeling"
key = "g"
flags = RESTRICTED | HIVEMIND
+ follow = TRUE
/datum/language/ling/broadcast(mob/living/speaker, message, speaker_mask)
if(speaker.mind && speaker.mind.changeling)
- ..(speaker,message,speaker.mind.changeling.changelingID)
+ ..(speaker, message, speaker.mind.changeling.changelingID)
else if(speaker.mind && speaker.mind.linglink)
..()
else
@@ -521,6 +523,7 @@
colour = "shadowling"
key = "8"
flags = RESTRICTED | HIVEMIND
+ follow = TRUE
/datum/language/shadowling/broadcast(mob/living/speaker, message, speaker_mask)
if(speaker.mind && speaker.mind.special_role == SPECIAL_ROLE_SHADOWLING)
@@ -539,6 +542,7 @@
colour = "abductor"
key = "zw" //doesn't matter, this is their default and only language
flags = RESTRICTED | HIVEMIND
+ follow = TRUE
/datum/language/abductor/broadcast(mob/living/speaker, message, speaker_mask)
..(speaker,message,speaker.real_name)
@@ -567,6 +571,7 @@
colour = "alien"
key = "bo"
flags = RESTRICTED | HIVEMIND
+ follow = TRUE
/datum/language/corticalborer/broadcast(mob/living/speaker, message, speaker_mask)
var/mob/living/simple_animal/borer/B
@@ -590,7 +595,7 @@
exclaim_verb = "declares"
key = "b"
flags = RESTRICTED | HIVEMIND
- follow = 1
+ follow = TRUE
var/drone_only
/datum/language/binary/broadcast(mob/living/speaker, message, speaker_mask)
@@ -636,8 +641,8 @@
colour = "say_quote"
key = "d"
flags = RESTRICTED | HIVEMIND
- drone_only = 1
- follow = 1
+ drone_only = TRUE
+ follow = TRUE
/datum/language/drone
name = "Drone"
@@ -647,7 +652,7 @@
exclaim_verb = "declares"
key = "]"
flags = RESTRICTED
- follow = 1
+ follow = TRUE
syllables = list ("beep", "boop")
/datum/language/swarmer
@@ -659,7 +664,7 @@
colour = "say_quote"
key = "z"//Zwarmer...Or Zerg!
flags = RESTRICTED | HIVEMIND
- follow = 1
+ follow = TRUE
// Language handling.
/mob/proc/add_language(language)
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index ee858138f70..69a2e1160b0 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -73,7 +73,11 @@
stat = CONSCIOUS
return
health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss()
+
update_stat("updatehealth([reason])")
+ med_hud_set_health()
+ med_hud_set_status()
+ handle_hud_icons_health()
/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index adf81753827..bf2158ae58e 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -17,7 +17,7 @@
. = -1 //hunters are sanic
. += ..() //but they still need to slow down on stun
-/mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates()
+/mob/living/carbon/alien/humanoid/hunter/handle_hud_icons_health()
..() //-Yvarov
if(healths)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 6a9565fc449..3acb1fe8713 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -42,7 +42,7 @@
alien_organs += new /obj/item/organ/internal/xenos/neurotoxin
..()
-/mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates()
+/mob/living/carbon/alien/humanoid/sentinel/handle_hud_icons_health()
..() //-Yvarov
if(healths)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm
index f5355a38d67..a64602d030c 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm
@@ -48,29 +48,26 @@
alien_organs += new /obj/item/organ/internal/xenos/neurotoxin
..()
-/mob/living/carbon/alien/humanoid/empress
+/mob/living/carbon/alien/humanoid/empress/handle_hud_icons_health()
+ ..() //-Yvarov
- handle_regular_hud_updates()
-
- ..() //-Yvarov
-
- if(src.healths)
- if(src.stat != 2)
- switch(health)
- if(250 to INFINITY)
- src.healths.icon_state = "health0"
- if(175 to 250)
- src.healths.icon_state = "health1"
- if(100 to 175)
- src.healths.icon_state = "health2"
- if(50 to 100)
- src.healths.icon_state = "health3"
- if(0 to 50)
- src.healths.icon_state = "health4"
- else
- src.healths.icon_state = "health5"
- else
- src.healths.icon_state = "health6"
+ if(healths)
+ if(stat != 2)
+ switch(health)
+ if(250 to INFINITY)
+ healths.icon_state = "health0"
+ if(175 to 250)
+ healths.icon_state = "health1"
+ if(100 to 175)
+ healths.icon_state = "health2"
+ if(50 to 100)
+ healths.icon_state = "health3"
+ if(0 to 50)
+ healths.icon_state = "health4"
+ else
+ healths.icon_state = "health5"
+ else
+ healths.icon_state = "health6"
/mob/living/carbon/alien/humanoid/empress/verb/lay_egg()
set name = "Lay Egg (250)"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index d80d773325e..14124afef3e 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -32,7 +32,7 @@
. = ..()
. += 3
-/mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates()
+/mob/living/carbon/alien/humanoid/queen/handle_hud_icons_health()
..() //-Yvarov
if(healths)
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index e0c58c484d8..e538717ce56 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -59,8 +59,7 @@
handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc
if(client)
- //regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT
- handle_regular_hud_updates() //IT JUST REMOVES FUCKING HUD IMAGES
+ handle_regular_hud_updates()
..()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index beb474539f1..03a4f59f197 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -485,6 +485,8 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM)
if(A)
if(O.client.prefs && O.client.prefs.UI_style)
A.icon = ui_style2icon(O.client.prefs.UI_style)
+ if(title)
+ A.name = title
A.desc = message
A.action = action
A.target = source
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index b7f6b5c8f6a..849db6579a5 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ