diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index b0ba6b304aa..cbbd9bc7052 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -77,25 +77,22 @@
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
#define ui_borg_intents "EAST-2:26,SOUTH:5"
-//Upper-middle right (damage indicators)
-#define ui_toxin "EAST-1:28,CENTER+5:27"
-#define ui_fire "EAST-1:28,CENTER+4:25"
-#define ui_oxygen "EAST-1:28,CENTER+3:23"
-#define ui_pressure "EAST-1:28,CENTER+2:21"
-#define ui_alien_toxin "EAST-1:28,CENTER+5:25"
-#define ui_alien_fire "EAST-1:28,CENTER+4:25"
-#define ui_alien_oxygen "EAST-1:28,CENTER+3:25"
-#define ui_alien_nightvision "EAST-1:28,CENTER+2:25"
+//Upper-middle right (alerts)
+#define ui_alert1 "EAST-1:28,CENTER+5:27"
+#define ui_alert2 "EAST-1:28,CENTER+4:25"
+#define ui_alert3 "EAST-1:28,CENTER+3:23"
+#define ui_alert4 "EAST-1:28,CENTER+2:21"
+#define ui_alert5 "EAST-1:28,CENTER+1:19"
+
//Middle right (status indicators)
-#define ui_nutrition "EAST-1:28,CENTER-3:11"
-#define ui_temp "EAST-1:28,CENTER-2:13"
-#define ui_healthdoll "EAST-1:28,CENTER-1:15"
-#define ui_health "EAST-1:28,CENTER:17"
-#define ui_internal "EAST-1:28,CENTER+1:19"
+#define ui_healthdoll "EAST-1:28,CENTER-2:13"
+#define ui_health "EAST-1:28,CENTER-1:15"
+#define ui_internal "EAST-1:28,CENTER:17"
//borgs and aliens
+#define ui_alien_nightvision "EAST-1:28,CENTER:17"
#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator.
#define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator.
#define ui_alienplasmadisplay "EAST-1:28,CENTER-2:15"
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
new file mode 100644
index 00000000000..5dffc0127b2
--- /dev/null
+++ b/code/_onclick/hud/alert.dm
@@ -0,0 +1,204 @@
+//A system to manage and display alerts on screen without needing you to do it yourself
+
+//PUBLIC - call these wherever you want
+
+
+/mob/proc/throw_alert(category, id, severity, obj/new_master)
+
+/* Proc to create or update an alert. Returns 1 if the alert is new or updated, 0 if it was thrown already
+
+ category is a text string. Each mob may only have one alert per category; the previous one will be replaced
+
+ id is a text string, If you don't provide one, category will be used as id
+ Either way it MUST match a type path like so: /obj/screen/alert/[id]
+ Also the alert's icon_state will be [id] so you must add it to screen_alert.dmi
+
+ severity is an optional number that will be placed at the end of the icon_state for this alert
+ For example, high pressure's id is "highpressure" and can be serverity 1 or 2 to get "highpressure1" or "highpressure2" as icon_states
+
+ new_master is optional and sets the alert's icon state to "template" in the ui_style icons with the master as an overlay.
+ Clicks are forwarded to master */
+
+ if(!category)
+ return
+ if(!id)
+ id = category
+
+ var/obj/screen/alert/alert
+ if(alerts[category])
+ alert = alerts[category]
+ if(new_master && new_master != alert.master)
+ WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [alert.master]")
+// alert.overlays.Cut() // This is apparently an invalid expression
+ clear_alert(category)
+ return .()
+ else if(alert.icon_state == "[id][severity]")
+// src << "threw alert not in need of update [category] [id] [severity]"
+ return 0
+// src << "updating alert [category] [id] [severity]"
+ else
+ alert = PoolOrNew(/obj/screen/alert)
+// src << "throwing new alert [category] [id] [severity]"
+
+ if(new_master)
+ var/old_layer = new_master.layer
+ new_master.layer = FLOAT_LAYER
+ alert.overlays += new_master
+ new_master.layer = old_layer
+ alert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts()
+ alert.master = new_master
+ else
+ alert.icon_state = "[id][severity]"
+
+ alerts[category] = alert
+ if(client && hud_used)
+ hud_used.reorganize_alerts()
+ alert.transform = matrix(32, 6, MATRIX_TRANSLATE)
+ animate(alert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
+
+ var/obj/screen/alert/path_as_obj = text2path("/obj/screen/alert/[id]")
+ // BYOND magic-fu - we'll be storing a path in this reference and retrieving vars from it.
+ if(!path_as_obj)
+ ERROR("[src] threw alert [category] with invalid path /obj/screen/alert/[id]")
+ return 0
+ alert.name = initial(path_as_obj.name)
+ alert.desc = initial(path_as_obj.desc)
+ alert.mouse_opacity = 1
+
+ return alert
+
+// Proc to clear an existing alert.
+/mob/proc/clear_alert(category)
+ var/obj/screen/alert/alert = alerts[category]
+ if(!alert)
+ return 0
+
+ alerts -= category
+ if(client && hud_used)
+ hud_used.reorganize_alerts()
+ client.screen -= alert
+ qdel(alert)
+
+// Make sure any alerts you throw have a path that matches /obj/screen/alert/[id] or /obj/screen/alert/[category]
+
+/obj/screen/alert
+ icon = 'icons/mob/screen_alert.dmi'
+ icon_state = "default"
+ name = "Alert"
+ desc = "Something seems to have gone wrong with this alert, so report this bug please"
+
+/obj/screen/alert/oxy
+ name = "Choking"
+ desc = "You're not getting enough oxygen. Find some good air before you pass out! \
+The box in your backpack has an oxygen tank and gas mask in it."
+
+/obj/screen/alert/tox_in_air
+ name = "Toxic Gas"
+ desc = "There's highly flammable, toxic plasma in the air and you're breathing it in. Find some fresh air. \
+The box in your backpack has an oxygen tank and gas mask in it."
+
+/obj/screen/alert/fat
+ name = "Fat"
+ desc = "You ate too much food, lardass. Run around the station and lose some weight."
+
+/obj/screen/alert/hungry
+ name = "Hungry"
+ desc = "Some food would be good right about now."
+
+/obj/screen/alert/starving
+ name = "Starving"
+ desc = "Some food would be to kill for right about now. The hunger pains make moving around a chore."
+
+/obj/screen/alert/hot
+ name = "Too Hot"
+ desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit."
+
+/obj/screen/alert/cold
+ name = "Too Cold"
+ desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit."
+
+/obj/screen/alert/lowpressure
+ name = "Low Pressure"
+ desc = "The air around you is hazardously thin. A space suit would protect you."
+
+/obj/screen/alert/highpressure
+ name = "High Pressure"
+ desc = "The air around you is hazardously thick. A fire suit would protect you."
+
+/obj/screen/alert/alien_tox
+ name = "Plasma"
+ desc = "There's flammable plasma in the air. If it lights up, you'll be toast."
+
+/obj/screen/alert/alien_fire
+// This alert is temporarily gonna be thrown for all hot air but one day it will be used for literally being on fire
+ name = "Burning"
+ desc = "It's too hot! Flee to space or at least away from the flames. Standing on weeds will heal you up."
+
+/obj/screen/alert/nocell
+ name = "Missing Power Cell"
+ desc = "Unit has no power cell. No modules available until a power cell is reinstalled. Robotics may provide assistance."
+
+/obj/screen/alert/emptycell
+ name = "Out of Power"
+ desc = "Unit's power cell has no charge remaining. No modules available until power cell is recharged. \
+Reharging stations are available in robotics, the dormitory's bathrooms. and the AI satelite."
+
+/obj/screen/alert/lowcell
+ name = "Low Charge"
+ desc = "Unit's power cell is running low. Reharging stations are available in robotics, the dormitory's bathrooms. and the AI satelite."
+
+/obj/screen/alert/buckled
+ name = "Buckled"
+ desc = "You've been buckled to something and can't move. Click the alert to unbuckle unless you're handcuffed."
+
+/obj/screen/alert/handcuffed // Not used right now.
+ name = "Handcuffed"
+ desc = "You're handcuffed and can't act. If anyone drags you, you won't be able to move. Click the alert to free yourself."
+
+// PRIVATE = only edit, use, or override these if you're editing the system as a whole
+
+// Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there
+/datum/hud/proc/reorganize_alerts()
+ var/list/alerts = mymob.alerts
+ var/icon_pref
+ if(!hud_shown)
+ for(var/i = 1, i <= alerts.len, i++)
+ mymob.client.screen -= alerts[alerts[i]]
+ return 1
+ for(var/i = 1, i <= alerts.len, i++)
+ var/obj/screen/alert/alert = alerts[alerts[i]]
+ if(alert.icon_state == "template")
+ if(!icon_pref)
+ icon_pref = ui_style2icon(mymob.client.prefs.UI_style)
+ alert.icon = icon_pref
+ switch(i)
+ if(1)
+ . = ui_alert1
+ if(2)
+ . = ui_alert2
+ if(3)
+ . = ui_alert3
+ if(4)
+ . = ui_alert4
+ if(5)
+ . = ui_alert5 // Right now there's 5 slots
+ alert.screen_loc = .
+ mymob.client.screen |= alert
+ return 1
+
+/mob
+ var/list/alerts = list() // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly
+
+/obj/screen/alert/Click(location, control, params)
+ if(!usr || !usr.client)
+ return
+ var/paramslist = params2list(params)
+ if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
+ usr << "[name] - [desc]"
+ return
+ if(master)
+ return usr.client.Click(master, location, control, params)
+
+/obj/screen/alert/Destroy()
+ PlaceInPool(src)
+ return 1 // Don't destroy me, I have a family!
\ No newline at end of file
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 9e9c2aa3dac..4f13c983594 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -111,24 +111,6 @@
//begin indicators
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon = 'icons/mob/screen_alien.dmi'
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_alien_oxygen
-
- mymob.toxin = new /obj/screen()
- mymob.toxin.icon = 'icons/mob/screen_alien.dmi'
- mymob.toxin.icon_state = "tox0"
- mymob.toxin.name = "toxin"
- mymob.toxin.screen_loc = ui_alien_toxin
-
- mymob.fire = new /obj/screen()
- mymob.fire.icon = 'icons/mob/screen_alien.dmi'
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_alien_fire
-
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen_alien.dmi'
mymob.healths.icon_state = "health0"
@@ -164,6 +146,6 @@
mymob.client.screen = null
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, alien_plasma_display, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.healths, nightvisionicon, alien_plasma_display, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += adding + other
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index 47b519f9066..3f9ea8e37d6 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -18,26 +18,6 @@
adding += using
move_intent = using
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon = 'icons/mob/screen_alien.dmi'
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_alien_oxygen
-
- mymob.toxin = new /obj/screen()
- mymob.toxin.icon = 'icons/mob/screen_alien.dmi'
- mymob.toxin.icon_state = "tox0"
- mymob.toxin.name = "toxin"
- mymob.toxin.screen_loc = ui_alien_toxin
-
-
- mymob.fire = new /obj/screen()
- mymob.fire.icon = 'icons/mob/screen_alien.dmi'
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_alien_fire
-
-
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen_alien.dmi'
mymob.healths.icon_state = "health0"
@@ -72,5 +52,5 @@
mymob.client.screen = null
- mymob.client.screen += list( mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list( mymob.zone_sel, mymob.healths, nightvisionicon, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += adding + other
\ No newline at end of file
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index ac6f4c89414..c84ae5a071c 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -225,21 +225,16 @@ datum/hud/New(mob/owner)
action_intent.screen_loc = ui_acti //Restore intent selection to the original position
mymob.client.screen += mymob.zone_sel //This one is a special snowflake
- mymob.client.screen += mymob.bodytemp //As are the rest of these...
- mymob.client.screen += mymob.fire
- mymob.client.screen += mymob.healths
+ mymob.client.screen += mymob.healths //As are the rest of these.
mymob.client.screen += mymob.healthdoll
mymob.client.screen += mymob.internals
- mymob.client.screen += mymob.nutrition_icon
- mymob.client.screen += mymob.oxygen
- mymob.client.screen += mymob.pressure
- mymob.client.screen += mymob.toxin
mymob.client.screen += lingstingdisplay
mymob.client.screen += lingchemdisplay
hidden_inventory_update()
persistant_inventory_update()
mymob.update_action_buttons()
+ reorganize_alerts()
if(HUD_STYLE_REDUCED) //Reduced HUD
hud_shown = 0 //Governs behavior of other procs
if(adding)
@@ -265,6 +260,7 @@ datum/hud/New(mob/owner)
hidden_inventory_update()
persistant_inventory_update()
mymob.update_action_buttons()
+ reorganize_alerts()
if(HUD_STYLE_NOHUD) //No HUD
hud_shown = 0 //Governs behavior of other procs
if(adding)
@@ -278,21 +274,16 @@ datum/hud/New(mob/owner)
//These ones are not a part of 'adding', 'other' or 'hotkeybuttons' but we want them gone.
mymob.client.screen -= mymob.zone_sel //zone_sel is a mob variable for some reason.
- mymob.client.screen -= mymob.bodytemp
- mymob.client.screen -= mymob.fire
mymob.client.screen -= mymob.healths
mymob.client.screen -= mymob.healthdoll
mymob.client.screen -= mymob.internals
- mymob.client.screen -= mymob.nutrition_icon
- mymob.client.screen -= mymob.oxygen
- mymob.client.screen -= mymob.pressure
- mymob.client.screen -= mymob.toxin
mymob.client.screen -= lingstingdisplay
mymob.client.screen -= lingchemdisplay
hidden_inventory_update()
persistant_inventory_update()
mymob.update_action_buttons()
+ reorganize_alerts()
hud_version = display_hud_version
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 37002c8025e..4d2ea2b32f0 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -252,34 +252,10 @@
mymob.throw_icon.screen_loc = ui_drop_throw
hotkeybuttons += mymob.throw_icon
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_oxygen
-
- mymob.pressure = new /obj/screen()
- mymob.pressure.icon_state = "pressure0"
- mymob.pressure.name = "pressure"
- mymob.pressure.screen_loc = ui_pressure
-
- mymob.toxin = new /obj/screen()
- mymob.toxin.icon_state = "tox0"
- mymob.toxin.name = "toxin"
- mymob.toxin.screen_loc = ui_toxin
mymob.internals = new /obj/screen/internals()
mymob.internals.screen_loc = ui_internal
- mymob.fire = new /obj/screen()
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_fire
-
- mymob.bodytemp = new /obj/screen()
- mymob.bodytemp.icon_state = "temp1"
- mymob.bodytemp.name = "body temperature"
- mymob.bodytemp.screen_loc = ui_temp
-
mymob.healths = new /obj/screen()
mymob.healths.icon_state = "health0"
mymob.healths.name = "health"
@@ -289,11 +265,6 @@
mymob.healthdoll.name = "health doll"
mymob.healthdoll.screen_loc = ui_healthdoll
- mymob.nutrition_icon = new /obj/screen()
- mymob.nutrition_icon.icon_state = "nutrition0"
- mymob.nutrition_icon.name = "nutrition"
- mymob.nutrition_icon.screen_loc = ui_nutrition
-
mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
@@ -336,7 +307,7 @@
mymob.client.screen = null
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.internals, mymob.healths, mymob.healthdoll, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
mymob.client.screen += adding + hotkeybuttons
inventory_shown = 0;
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 0f2b38e9d3e..3cd2871960c 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -86,34 +86,9 @@
mymob.throw_icon.icon = ui_style
mymob.throw_icon.screen_loc = ui_drop_throw
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_oxygen
-
- mymob.pressure = new /obj/screen()
- mymob.pressure.icon_state = "pressure0"
- mymob.pressure.name = "pressure"
- mymob.pressure.screen_loc = ui_pressure
-
- mymob.toxin = new /obj/screen()
- mymob.toxin.icon_state = "tox0"
- mymob.toxin.name = "toxin"
- mymob.toxin.screen_loc = ui_toxin
-
mymob.internals = new /obj/screen/internals()
mymob.internals.screen_loc = ui_internal
- mymob.fire = new /obj/screen()
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_fire
-
- mymob.bodytemp = new /obj/screen()
- mymob.bodytemp.icon_state = "temp1"
- mymob.bodytemp.name = "body temperature"
- mymob.bodytemp.screen_loc = ui_temp
-
mymob.healths = new /obj/screen()
mymob.healths.icon_state = "health0"
mymob.healths.name = "health"
@@ -164,5 +139,5 @@
using.screen_loc = ui_pull_resist
adding += using
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.internals, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += adding + other
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 4f9d70a1b5e..fe5b38db0ab 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -110,13 +110,6 @@
adding += using
action_intent = using
-//Cell
- mymobR.cells = new /obj/screen()
- mymobR.cells.icon = 'icons/mob/screen_cyborg.dmi'
- mymobR.cells.icon_state = "charge-empty"
- mymobR.cells.name = "cell"
- mymobR.cells.screen_loc = ui_toxin
-
//Health
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen_cyborg.dmi'
@@ -132,25 +125,6 @@
mymob.throw_icon = new /obj/screen/robot/store()
mymob.throw_icon.screen_loc = ui_borg_store
-//Temp
- mymob.bodytemp = new /obj/screen()
- mymob.bodytemp.icon_state = "temp0"
- mymob.bodytemp.name = "body temperature"
- mymob.bodytemp.screen_loc = ui_temp
-
-
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon = 'icons/mob/screen_cyborg.dmi'
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_oxygen
-
- mymob.fire = new /obj/screen()
- mymob.fire.icon = 'icons/mob/screen_cyborg.dmi'
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_fire
-
mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen_cyborg.dmi'
mymob.pullin.icon_state = "pull0"
@@ -176,7 +150,7 @@
mymob.client.screen = null
- mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymobR.cells, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
+ mymob.client.screen += list(mymob.zone_sel, mymob.hands, mymob.healths, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += adding + other
return
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 0f72c9d92ac..39df1504e1e 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -823,7 +823,8 @@ var/list/sacrificed = list()
))
user << "The [cultist] is already free."
return
- cultist.buckled = null
+ if(cultist.buckled)
+ cultist.buckled.unbuckle_mob()
if (cultist.handcuffed)
cultist.handcuffed.loc = cultist.loc
cultist.handcuffed = null
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 381eeb06196..78933650b03 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -42,6 +42,7 @@
buckled_mob = M
M.update_canmove()
post_buckle_mob(M)
+ M.throw_alert("buckled", new_master = src)
return 1
/obj/proc/unbuckle_mob()
@@ -50,6 +51,7 @@
buckled_mob.buckled = null
buckled_mob.anchored = initial(buckled_mob.anchored)
buckled_mob.update_canmove()
+ buckled_mob.clear_alert("buckled")
buckled_mob = null
post_buckle_mob(.)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 1349bd16bbc..17c514f8ffe 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -44,6 +44,7 @@
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user)
if(!target.handcuffed)
user.drop_item()
+ //target.throw_alert("handcuffed", src) // Can't do this because escaping cuffs isn't standardized. Also zipties.
if(trashtype)
target.handcuffed = new trashtype(target)
qdel(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index df449794738..0a9f02bf133 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -16,8 +16,7 @@
if(ishuman(L) || ismonkey(L) || iscorgi(L))
if(L.buckled)
- L.buckled = 0
- L.anchored = 0
+ L.buckled.unbuckle_mob()
if(L.client)
L.client.perspective = EYE_PERSPECTIVE
L.client.eye = src
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 7ef86c2c9ab..cba4f274cf5 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -90,22 +90,19 @@
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(bodytemperature > 360.15)
//Body temperature is too hot.
- fire_alert = max(fire_alert, 1)
+ throw_alert("alien_fire")
switch(bodytemperature)
if(360 to 400)
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
- fire_alert = max(fire_alert, 2)
if(400 to 460)
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
- fire_alert = max(fire_alert, 2)
if(460 to INFINITY)
if(on_fire)
apply_damage(HEAT_DAMAGE_LEVEL_3, BURN)
- fire_alert = max(fire_alert, 2)
else
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
- fire_alert = max(fire_alert, 2)
- return
+ else
+ clear_alert("alien_fire")
/mob/living/carbon/alien/ex_act(severity, target)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index 1ecd703175b..ea2d5f9164b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -1,9 +1,6 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/mob/living/carbon/alien/humanoid
- oxygen_alert = 0
- toxins_alert = 0
- fire_alert = 0
pass_flags = PASSTABLE
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index a658992e26b..248333825ae 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -16,12 +16,12 @@
if(Toxins_pp) // Detect toxins in air
adjustToxLoss(breath.toxins*250)
- toxins_alert = max(toxins_alert, 1)
+ throw_alert("alien_tox")
toxins_used = breath.toxins
else
- toxins_alert = 0
+ clear_alert("alien_tox")
//Breathe in toxins and out oxygen
breath.toxins -= toxins_used
@@ -30,15 +30,6 @@
//BREATH TEMPERATURE
handle_breath_temperature(breath)
-/mob/living/carbon/alien/handle_breath_temperature(datum/gas_mixture/breath)
- if(breath.temperature > (T0C+66)) // Hot air hurts :(
- if(prob(20))
- src << "You feel a searing heat in your lungs!"
- fire_alert = max(fire_alert, 1)
- else
- fire_alert = 0
-
- return 1
/mob/living/carbon/alien/handle_regular_status_updates()
..()
@@ -106,8 +97,5 @@
pullin.icon_state = "pull0"
- if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
- if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
- if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
return 1
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 68dacd83a09..11d0dbc0995 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -35,7 +35,6 @@
if (notransform)
return
- fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
tinttotal = tintcheck() //here as both hud updates and status updates call it
if(..())
@@ -357,4 +356,4 @@
I.loc = get_turf(src)
visible_message("\the [I] falls out of [name]'s [L.getDisplayName()]!","\the [I] falls out of your [L.getDisplayName()]!")
-#undef HUMAN_MAX_OXYLOSS
\ No newline at end of file
+#undef HUMAN_MAX_OXYLOSS
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index e985b1508da..495288de5d6 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -598,23 +598,15 @@
if(icon_num)
H.healthdoll.overlays += image('icons/mob/screen_gen.dmi',"[L.name][icon_num]")
- if(H.nutrition_icon)
- switch(H.nutrition)
- if(NUTRITION_LEVEL_FULL to INFINITY)
- H.nutrition_icon.icon_state = "nutritionFAT"
- if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL)
- H.nutrition_icon.icon_state = "nutrition0"
- if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
- H.nutrition_icon.icon_state = "nutrition1"
- if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
- H.nutrition_icon.icon_state = "nutrition2"
- if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
- H.nutrition_icon.icon_state = "nutrition3"
- else
- H.nutrition_icon.icon_state = "nutrition4"
-
- if(H.pressure)
- H.pressure.icon_state = "pressure[H.pressure_alert]"
+ switch(H.nutrition)
+ if(NUTRITION_LEVEL_FULL to INFINITY)
+ H.throw_alert("nutrition","fat")
+ if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL)
+ H.clear_alert("nutrition")
+ if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
+ H.throw_alert("nutrition","hungry")
+ else
+ H.throw_alert("nutrition","starving")
if(H.pullin)
if(H.pulling) H.pullin.icon_state = "pull"
@@ -622,31 +614,7 @@
// if(rest) //Not used with new UI
// if(resting || lying || sleeping) rest.icon_state = "rest1"
// else rest.icon_state = "rest0"
- if(H.toxin)
- if(H.hal_screwyhud == 4 || H.toxins_alert) H.toxin.icon_state = "tox1"
- else H.toxin.icon_state = "tox0"
- if(H.oxygen)
- if(H.hal_screwyhud == 3 || H.oxygen_alert) H.oxygen.icon_state = "oxy1"
- else H.oxygen.icon_state = "oxy0"
- if(H.fire)
- if(H.fire_alert) H.fire.icon_state = "fire[H.fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat.
- else H.fire.icon_state = "fire0"
- if(H.bodytemp)
- if(!(HEATRES in specflags))
- switch(H.bodytemperature) //310.055 optimal body temp
- if(370 to INFINITY) H.bodytemp.icon_state = "temp4"
- if(350 to 370) H.bodytemp.icon_state = "temp3"
- if(335 to 350) H.bodytemp.icon_state = "temp2"
- switch(H.bodytemperature)
- if(320 to 335) H.bodytemp.icon_state = "temp1"
- if(300 to 320) H.bodytemp.icon_state = "temp0"
- if(295 to 300) H.bodytemp.icon_state = "temp-1"
- if(!(COLDRES in specflags))
- switch(H.bodytemperature)
- if(280 to 295) H.bodytemp.icon_state = "temp-2"
- if(260 to 280) H.bodytemp.icon_state = "temp-3"
- if(-INFINITY to 260) H.bodytemp.icon_state = "temp-4"
return 1
@@ -1105,7 +1073,7 @@
H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
+ H.throw_alert("oxy")
return 0
@@ -1138,18 +1106,12 @@
else
H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
- /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose)
- spawn(0) emote("cough")
- var/ratio = O2_pp/safe_oxygen_max
- oxyloss += 5*ratio
- oxygen_used = breath.oxygen*ratio/6
- oxygen_alert = max(oxygen_alert, 1)*/
+ H.throw_alert("oxy")
else // We're in safe limits
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
oxygen_used = breath.oxygen/6
- H.oxygen_alert = 0
+ H.clear_alert("oxy")
breath.oxygen -= oxygen_used
breath.carbon_dioxide += oxygen_used
@@ -1174,9 +1136,9 @@
//adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second
if(H.reagents)
H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- H.toxins_alert = max(H.toxins_alert, 1)
+ H.throw_alert("tox_in_air")
else
- H.toxins_alert = 0
+ H.clear_alert("tox_in_air")
if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here.
for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
@@ -1195,39 +1157,24 @@
/datum/species/proc/handle_breath_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
if( (abs(310.15 - breath.temperature) > 50) && !(mutations_list[COLDRES] in H.dna.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
- if(breath.temperature < 260.15)
- if(prob(20))
- H << "You feel your face freezing and an icicle forming in your lungs!"
- else if(breath.temperature > 360.15 && !(HEATRES in specflags))
- if(prob(20))
- H << "You feel your face burning and a searing heat in your lungs!"
if(!(mutations_list[COLDRES] in H.dna.mutations)) // COLD DAMAGE
switch(breath.temperature)
if(-INFINITY to 120)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head")
- H.fire_alert = max(H.fire_alert, 1)
if(120 to 200)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head")
- H.fire_alert = max(H.fire_alert, 1)
if(200 to 260)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head")
- H.fire_alert = max(H.fire_alert, 1)
if(!(HEATRES in specflags)) // HEAT DAMAGE
switch(breath.temperature)
if(360 to 400)
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head")
- H.fire_alert = max(H.fire_alert, 2)
if(400 to 1000)
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head")
- H.fire_alert = max(H.fire_alert, 2)
if(1000 to INFINITY)
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head")
- H.fire_alert = max(H.fire_alert, 2)
-
- return
-
/datum/species/proc/handle_environment(datum/gas_mixture/environment, var/mob/living/carbon/human/H)
if(!environment)
return
@@ -1255,35 +1202,37 @@
// +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt.
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(HEATRES in specflags))
//Body temperature is too hot.
- H.fire_alert = max(H.fire_alert, 1)
switch(H.bodytemperature)
if(360 to 400)
+ H.throw_alert("temp","hot",1)
H.apply_damage(HEAT_DAMAGE_LEVEL_1*heatmod, BURN)
- H.fire_alert = max(H.fire_alert, 2)
if(400 to 460)
+ H.throw_alert("temp","hot",2)
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
- H.fire_alert = max(H.fire_alert, 2)
if(460 to INFINITY)
+ H.throw_alert("temp","hot",3)
if(H.on_fire)
H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN)
- H.fire_alert = max(H.fire_alert, 2)
else
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
- H.fire_alert = max(H.fire_alert, 2)
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(mutations_list[COLDRES] in H.dna.mutations))
- H.fire_alert = max(H.fire_alert, 1)
if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(H.bodytemperature)
if(200 to 260)
+ H.throw_alert("temp","cold",1)
H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod, BURN)
- H.fire_alert = max(H.fire_alert, 1)
if(120 to 200)
+ H.throw_alert("temp","cold",2)
H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod, BURN)
- H.fire_alert = max(H.fire_alert, 1)
if(-INFINITY to 120)
+ H.throw_alert("temp","cold",3)
H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod, BURN)
- H.fire_alert = max(H.fire_alert, 1)
+ else
+ H.clear_alert("temp")
+
+ else
+ H.clear_alert("temp")
// Account for massive pressure differences. Done by Polymorph
// Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense!
@@ -1294,23 +1243,21 @@
if(HAZARD_HIGH_PRESSURE to INFINITY)
if(!(HEATRES in specflags))
H.adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
- H.pressure_alert = 2
+ H.throw_alert("pressure","highpressure",2)
else
- H.pressure_alert = 1
+ H.clear_alert("pressure")
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
- H.pressure_alert = 1
+ H.throw_alert("pressure","highpressure",1)
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
- H.pressure_alert = 0
+ H.clear_alert("pressure")
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
- H.pressure_alert = -1
+ H.throw_alert("pressure","lowpressure",1)
else
if(H.dna.check_mutation(COLDRES) || (COLDRES in specflags))
- H.pressure_alert = -1
+ H.clear_alert("pressure")
else
H.adjustBruteLoss( LOW_PRESSURE_DAMAGE )
- H.pressure_alert = -2
-
- return
+ H.throw_alert("pressure","lowpressure",2)
//////////
// FIRE //
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index af12d66b2f7..b4181b590a0 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -151,7 +151,7 @@
return
adjustOxyLoss(1)
failed_last_breath = 1
- oxygen_alert = max(oxygen_alert, 1)
+ throw_alert("oxy")
return 0
@@ -181,13 +181,13 @@
else
adjustOxyLoss(3)
failed_last_breath = 1
- oxygen_alert = max(oxygen_alert, 1)
+ throw_alert("oxy")
else //Enough oxygen
failed_last_breath = 0
adjustOxyLoss(-5)
oxygen_used = breath.oxygen/6
- oxygen_alert = 0
+ clear_alert("oxy")
breath.oxygen -= oxygen_used
breath.carbon_dioxide += oxygen_used
@@ -212,9 +212,9 @@
var/ratio = (breath.toxins/safe_tox_max) * 10
if(reagents)
reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- toxins_alert = max(toxins_alert, 1)
+ throw_alert("tox_in_air")
else
- toxins_alert = 0
+ clear_alert("tox_in_air")
//TRACE GASES
if(breath.trace_gases.len)
@@ -235,16 +235,6 @@
//Fourth and final link in a breath chain
/mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath)
- if(breath.temperature > (T0C+66)) // Hot air hurts :(
- if(prob(20))
- src << "You feel a searing heat in your lungs!"
- fire_alert = max(fire_alert, 2)
- else
- fire_alert = 0
- if(breath.temperature < (T0C-20))
- if(prob(20))
- src << "You feel your face freezing and an icicle forming in your lungs!"
- return
/mob/living/carbon/proc/get_breath_from_internal(volume_needed)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index ef48338388d..f9589c35ca9 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -71,16 +71,16 @@
switch(adjusted_pressure)
if(HAZARD_HIGH_PRESSURE to INFINITY)
adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
- pressure_alert = 2
+ throw_alert("pressure","highpressure",2)
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
- pressure_alert = 1
+ throw_alert("pressure","highpressure",1)
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
- pressure_alert = 0
+ clear_alert("pressure")
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
- pressure_alert = -1
+ throw_alert("pressure","lowpressure",1)
else
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
- pressure_alert = -2
+ throw_alert("pressure","lowpressure",2)
return
@@ -97,8 +97,7 @@
handle_hud_icons_health()
- if(pressure)
- pressure.icon_state = "pressure[pressure_alert]"
+
if(pullin)
if(pulling)
@@ -106,30 +105,7 @@
else
pullin.icon_state = "pull0"
- if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
- if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
- if (fire) fire.icon_state = "fire[fire_alert ? 2 : 0]"
-
- if(bodytemp)
- switch(bodytemperature) //310.055 optimal body temp
- if(345 to INFINITY)
- bodytemp.icon_state = "temp4"
- if(335 to 345)
- bodytemp.icon_state = "temp3"
- if(327 to 335)
- bodytemp.icon_state = "temp2"
- if(316 to 327)
- bodytemp.icon_state = "temp1"
- if(300 to 316)
- bodytemp.icon_state = "temp0"
- if(295 to 300)
- bodytemp.icon_state = "temp-1"
- if(280 to 295)
- bodytemp.icon_state = "temp-2"
- if(260 to 280)
- bodytemp.icon_state = "temp-3"
- else
- bodytemp.icon_state = "temp-4"
+ //blame the person who coded them. Temporary fix added.
return 1
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 59e4ca94bec..d90e464cee2 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -190,45 +190,28 @@
src.mind.special_role = "traitor"
ticker.mode.traitors += src.mind
- if (src.cells)
- if (src.cell)
- var/cellcharge = src.cell.charge/src.cell.maxcharge
- switch(cellcharge)
- if(0.75 to INFINITY)
- src.cells.icon_state = "charge4"
- if(0.5 to 0.75)
- src.cells.icon_state = "charge3"
- if(0.25 to 0.5)
- src.cells.icon_state = "charge2"
- if(0 to 0.25)
- src.cells.icon_state = "charge1"
- else
- src.cells.icon_state = "charge0"
+ if (src.cell)
+ var/cellcharge = src.cell.charge/src.cell.maxcharge
+ switch(cellcharge)
+ if(0.75 to INFINITY)
+ clear_alert("charge")
+ if(0.5 to 0.75)
+ throw_alert("charge","lowcell",1)
+ if(0.25 to 0.5)
+ throw_alert("charge","lowcell",2)
+ if(0.01 to 0.25)
+ throw_alert("charge","lowcell",3)
+ else
+ throw_alert("charge","emptycell")
+ else
+ throw_alert("charge","nocell")
+
+
+ if(pullin)
+ if(pulling)
+ pullin.icon_state = "pull"
else
- src.cells.icon_state = "charge-empty"
-
- if(bodytemp)
- switch(bodytemperature) //310.055 optimal body temp
- if(335 to INFINITY)
- bodytemp.icon_state = "temp2"
- if(320 to 335)
- bodytemp.icon_state = "temp1"
- if(300 to 320)
- bodytemp.icon_state = "temp0"
- if(260 to 300)
- bodytemp.icon_state = "temp-1"
- else
- bodytemp.icon_state = "temp-2"
-
- if(pullin)
- if(pulling)
- pullin.icon_state = "pull"
- else
- pullin.icon_state = "pull0"
-
-//Oxygen and fire does nothing yet!!
-// if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]"
-// if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]"
+ pullin.icon_state = "pull0"
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 1038950db3d..9b0ada14b2b 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -11,7 +11,6 @@
//Hud stuff
- var/obj/screen/cells = null
var/obj/screen/inv1 = null
var/obj/screen/inv2 = null
var/obj/screen/inv3 = null
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 6a4aa3f319f..3f3581d1dc9 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -13,15 +13,10 @@
var/obj/screen/hands = null
var/obj/screen/pullin = null
var/obj/screen/internals = null
- var/obj/screen/oxygen = null
var/obj/screen/i_select = null
var/obj/screen/m_select = null
- var/obj/screen/toxin = null
- var/obj/screen/fire = null
- var/obj/screen/bodytemp = null
var/obj/screen/healths = null
var/obj/screen/throw_icon = null
- var/obj/screen/nutrition_icon = null
var/obj/screen/pressure = null
var/obj/screen/damageoverlay = null
/*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob.
diff --git a/html/changelogs/MrPerson.yml b/html/changelogs/MrPerson.yml
index 6378584f30e..e4290930325 100644
--- a/html/changelogs/MrPerson.yml
+++ b/html/changelogs/MrPerson.yml
@@ -1,2 +1,4 @@
author: MrPerson
-changes: []
+changes:
+ - rscadd: "Expanded the on-screen alerts you get on the top-right of your screen. You can shift-click them to get a description of what's wrong and maybe how to fix it."
+ - rscadd: "Getting buckled to something will show an alert of what you're buckled to. If you're not handcuffed, you can click the alert to unbuckle."
\ No newline at end of file
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
new file mode 100644
index 00000000000..f1b776ad5a1
Binary files /dev/null and b/icons/mob/screen_alert.dmi differ
diff --git a/icons/mob/screen_alien.dmi b/icons/mob/screen_alien.dmi
index 2044d989759..8b37786d021 100644
Binary files a/icons/mob/screen_alien.dmi and b/icons/mob/screen_alien.dmi differ
diff --git a/icons/mob/screen_cyborg.dmi b/icons/mob/screen_cyborg.dmi
index 2df7c1c35c4..002768f9d2a 100644
Binary files a/icons/mob/screen_cyborg.dmi and b/icons/mob/screen_cyborg.dmi differ
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
index 0966d2de5e2..7e756cc2141 100644
Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index fb5b4c33a2e..848209caaa3 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -76,6 +76,7 @@
#include "code\_onclick\telekinesis.dm"
#include "code\_onclick\hud\_defines.dm"
#include "code\_onclick\hud\ai.dm"
+#include "code\_onclick\hud\alert.dm"
#include "code\_onclick\hud\alien.dm"
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\drones.dm"