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