From f905cfc0201087730ff85f91723510b714665951 Mon Sep 17 00:00:00 2001 From: ShadowLarkens Date: Wed, 13 May 2020 19:36:01 -0700 Subject: [PATCH 1/2] Ported /tg/ style screen alerts, replacing the hunger icon with them This adds throw_alert() and /obj/screen/alert, a system that allows you to do custom hud alerts for any variety of things from "You're too cold!" to mecha status indicators for the pilot. There's quite a few things that actually got replaced; the fire/oxy/tox/co2 alerts are all now just alerts, as is nutrition. The xenochimera feral indicator would probably be a good candidate for conversion, but I didn't touch it in this PR. There's also a number of new alerts, such as blindness, highness, legcuffed, buckled, handcuffed, and probably some more I missed; read code/_onclick/hud/alert.dm and see for yourself! Additionally, a number of tweaks have been done to resisting code, to make it so that there's an indicator when you're buckled or handcuffed, and can just click the alert to start resisting. This includes a refactor that combines the logic for lockers, holders, micros escaping from shoes, and struggling in a gut all into one proc, called container_resist(). This means that vore bellies actually no longer need the resist override, but it's been left in place just in case someone finds something else they want to use it for. Also, the health and internals indicator got moved down one tile each. Needed room for the alerts. If we add the oxygen tank action buttons from /tg/ and remove the internals indicator, the health indicator can go back where it was originally. --- code/_onclick/hud/_defines.dm | 18 +- code/_onclick/hud/alert.dm | 443 ++++++++++++++++++ code/_onclick/hud/alien_larva.dm | 8 +- code/_onclick/hud/hud.dm | 6 + code/_onclick/hud/human.dm | 45 -- code/_onclick/hud/robot.dm | 33 +- code/datums/mind.dm | 13 + code/game/area/areas.dm | 1 + .../changeling/powers/escape_restraints.dm | 2 +- .../gamemodes/changeling/powers/revive.dm | 2 +- .../technomancer/spells/resurrect.dm | 2 +- code/game/machinery/computer/arcade.dm | 4 +- code/game/machinery/computer/cloning.dm | 7 +- code/game/mecha/mecha.dm | 36 ++ code/game/objects/buckling.dm | 2 + code/game/objects/items/devices/defib.dm | 8 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- .../items/weapons/implants/implantfreedom.dm | 2 +- .../items/weapons/tools/wirecutters.dm | 2 +- code/game/objects/objs.dm | 5 +- .../structures/crates_lockers/closets.dm | 46 +- code/modules/clothing/clothing_vr.dm | 28 ++ code/modules/mob/dead/observer/observer.dm | 12 +- code/modules/mob/holder.dm | 16 + code/modules/mob/living/bot/secbot.dm | 2 +- code/modules/mob/living/carbon/alien/life.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 16 +- code/modules/mob/living/carbon/human/human.dm | 7 +- .../mob/living/carbon/human/human_resist.dm | 31 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 185 +++----- .../carbon/human/species/station/alraune.dm | 23 +- .../species/station/traits_vr/neutral.dm | 3 - .../mob/living/carbon/human/update_icons.dm | 3 + code/modules/mob/living/carbon/resist.dm | 232 ++++----- code/modules/mob/living/life.dm | 7 +- code/modules/mob/living/living.dm | 62 +-- code/modules/mob/living/living_defense.dm | 3 + code/modules/mob/living/silicon/laws.dm | 2 + code/modules/mob/living/silicon/robot/life.dm | 84 ++-- .../modules/mob/living/silicon/robot/robot.dm | 5 +- code/modules/mob/living/simple_mob/life.dm | 98 ++-- .../mob/living/simple_mob/simple_hud.dm | 46 -- .../mob/living/simple_mob/simple_mob.dm | 1 - code/modules/mob/login.dm | 1 - code/modules/mob/mob.dm | 15 +- code/modules/mob/mob_defines.dm | 6 - code/modules/organs/organ_external.dm | 12 +- code/modules/surgery/implant.dm | 2 + code/modules/vore/eating/belly_obj_vr.dm | 3 + code/modules/vore/eating/living_vr.dm | 54 +-- icons/mob/screen/midnight.dmi | Bin 36925 -> 35193 bytes icons/mob/screen_alert.dmi | Bin 0 -> 119574 bytes vorestation.dme | 1 + 54 files changed, 970 insertions(+), 683 deletions(-) create mode 100644 code/_onclick/hud/alert.dm create mode 100644 icons/mob/screen_alert.dmi diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index fa14c1ca48..bc11bad8bc 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -78,6 +78,13 @@ #define ui_ai_multicam "SOUTH+1:6,WEST+12:16" #define ui_ai_add_multicam "SOUTH+1:6,WEST+13:16" +//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" + //Gun buttons #define ui_gun1 "EAST-2:26,SOUTH+2:7" #define ui_gun2 "EAST-1:28, SOUTH+3:7" @@ -96,13 +103,12 @@ #define ui_alien_oxygen "EAST-1:28,NORTH-4:25" //Middle right (status indicators) -#define ui_nutrition "EAST-1:28,CENTER-2:11" -#define ui_temp "EAST-1:28,CENTER-1:13" -#define ui_health "EAST-1:28,CENTER:15" -#define ui_internal "EAST-1:28,CENTER+1:17" +#define ui_temp "EAST-1:28,CENTER-2:13" +#define ui_health "EAST-1:28,CENTER-1:15" +#define ui_internal "EAST-1:28,CENTER:17" //borgs -#define ui_borg_health "EAST-1:28,CENTER-1:13" //borgs have the health display where humans have the pressure damage indicator. -#define ui_alien_health "EAST-1:28,CENTER-1:13" //aliens have the health display where humans have the pressure damage indicator. +#define ui_borg_health "EAST-1:28,CENTER-2:13" //borgs have the health display where humans have the pressure damage indicator. +#define ui_alien_health "EAST-1:28,CENTER-2:13" //aliens have the health display where humans have the pressure damage indicator. #define ui_ling_chemical_display "EAST-1:28,CENTER-3:15" #define ui_wiz_energy_display "EAST-1:28,CENTER-3:15" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm new file mode 100644 index 0000000000..3a7727a9f6 --- /dev/null +++ b/code/_onclick/hud/alert.dm @@ -0,0 +1,443 @@ +//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, type, severity, obj/new_master) + +/* Proc to create or update an alert. Returns the alert 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 + path is a type path of the actual alert type to throw + severity is an optional number that will be placed at the end of the icon_state for this alert + For example, high pressure's icon_state is "highpressure" and can be serverity 1 or 2 to get "highpressure1" or "highpressure2" + 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 + + 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]") + clear_alert(category) + return .() + else if(alert.type != type) + clear_alert(category) + return .() + else if(!severity || severity == alert.severity) + if(alert.timeout) + clear_alert(category) + return .() + else //no need to update + return 0 + else + alert = new type + + if(new_master) + var/old_layer = new_master.layer + var/old_plane = new_master.plane + new_master.layer = LAYER_HUD_ABOVE + new_master.plane = PLANE_PLAYER_HUD_ABOVE + alert.overlays += new_master + new_master.layer = old_layer + new_master.plane = old_plane + 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 = "[initial(alert.icon_state)][severity]" + alert.severity = 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) + + if(alert.timeout) + spawn(alert.timeout) + if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout) + clear_alert(category) + alert.timeout = world.time + alert.timeout - world.tick_lag + 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) + +/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" + mouse_opacity = 1 + var/timeout = 0 //If set to a number, this alert will clear itself after that many deciseconds + var/severity = 0 + var/alerttooltipstyle = "" + + +/obj/screen/alert/MouseEntered(location,control,params) + openToolTip(usr, src, params, title = name, content = desc, theme = alerttooltipstyle) + + +/obj/screen/alert/MouseExited() + closeToolTip(usr) + + +//Gas alerts +/obj/screen/alert/not_enough_oxy + name = "Choking (No O2)" + 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 breath mask in it." + icon_state = "not_enough_oxy" + +/obj/screen/alert/too_much_oxy + name = "Choking (O2)" + desc = "There's too much oxygen in the air, and you're breathing it in! Find some good air before you pass out!" + icon_state = "too_much_oxy" + +/obj/screen/alert/not_enough_nitro + name = "Choking (No N)" + desc = "You're not getting enough nitrogen. Find some good air before you pass out!" + icon_state = "not_enough_nitro" + +/obj/screen/alert/too_much_nitro + name = "Choking (N)" + desc = "There's too much nitrogen in the air, and you're breathing it in! Find some good air before you pass out!" + icon_state = "too_much_nitro" + +/obj/screen/alert/not_enough_co2 + name = "Choking (No CO2)" + desc = "You're not getting enough carbon dioxide. Find some good air before you pass out!" + icon_state = "not_enough_co2" + +/obj/screen/alert/too_much_co2 + name = "Choking (CO2)" + desc = "There's too much carbon dioxide in the air, and you're breathing it in! Find some good air before you pass out!" + icon_state = "too_much_co2" + +/obj/screen/alert/too_much_co2/plant + name = "Livin' the good life" + desc = "There's so much carbon dioxide in the air, you're in fucking heaven. Watch out for passed out fleshies, though." + icon_state = "too_much_co2" + +/obj/screen/alert/not_enough_tox + name = "Choking (No Phoron)" + desc = "You're not getting enough phoron. Find some good air before you pass out!" + icon_state = "not_enough_tox" + +/obj/screen/alert/tox_in_air + name = "Choking (Phoron)" + desc = "There's highly flammable, toxic phoron 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." + icon_state = "too_much_tox" + +/obj/screen/alert/not_enough_fuel + name = "Choking (No Volatile fuel)" + desc = "You're not getting enough volatile fuel. Find some good air before you pass out!" + icon_state = "not_enough_tox" + +/obj/screen/alert/not_enough_n2o + name = "Choking (No Sleeping Gas)" + desc = "You're not getting enough sleeping gas. Find some good air before you pass out!" + icon_state = "not_enough_tox" +//End gas alerts + + +/obj/screen/alert/fat + name = "Fat" + desc = "You ate too much food, lardass. Run around the station and lose some weight." + icon_state = "fat" + +/obj/screen/alert/fat/vampire + desc = "You drank too much blood, lardass. Run around the station and lose some weight." + icon_state = "v_fat" + +/obj/screen/alert/fat/synth + desc = "Your battery is full! Don't overvolt it." + icon_state = "c_fat" + +/obj/screen/alert/hungry + name = "Hungry" + desc = "Some food would be good right about now." + icon_state = "hungry" + +/obj/screen/alert/hungry/vampire + desc = "You could use a bloodsnack or two." + icon_state = "v_hungry" + +/obj/screen/alert/hungry/synth + desc = "Battery's running a bit low, could use a topoff." + icon_state = "c_hungry" + +/obj/screen/alert/starving + name = "Starving" + desc = "You're severely malnourished. The hunger pains make moving around a chore." + icon_state = "starving" + +/obj/screen/alert/starving/vampire + desc = "You *need* blood; go rip out someone's throat already!" + icon_state = "v_starving" + +/obj/screen/alert/starving/synth + desc = "Your battery is about to die! Charge it ASAP!" + icon_state = "c_starving" + +/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." + icon_state = "hot" + +/obj/screen/alert/hot/robot + desc = "The air around you is too hot for a humanoid. Be careful to avoid exposing them to this enviroment." + +/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." + icon_state = "cold" + +/obj/screen/alert/cold/robot + desc = "The air around you is too cold for a humanoid. Be careful to avoid exposing them to this enviroment." + +/obj/screen/alert/lowpressure + name = "Low Pressure" + desc = "The air around you is hazardously thin. A space suit would protect you." + icon_state = "lowpressure" + +/obj/screen/alert/highpressure + name = "High Pressure" + desc = "The air around you is hazardously thick. A fire suit would protect you." + icon_state = "highpressure" + +/obj/screen/alert/blind + name = "Blind" + desc = "You can't see! This may be caused by a genetic defect, eye trauma, being unconscious, \ +or something covering your eyes." + icon_state = "blind" + +/obj/screen/alert/high + name = "High" + desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already." + icon_state = "high" + +/obj/screen/alert/embeddedobject + name = "Embedded Object" + desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ +If you're feeling frisky, right click on yourself and select \"Remove embedded object\" to pull the object out." + icon_state = "embeddedobject" + +/obj/screen/alert/embeddedobject/Click() + if(isliving(usr)) + var/mob/living/carbon/human/M = usr + return M.help_shake_act(M) + +/obj/screen/alert/asleep + name = "Asleep" + desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." + icon_state = "asleep" + +/obj/screen/alert/weightless + name = "Weightless" + desc = "Gravity has ceased affecting you, and you're floating around aimlessly. You'll need something large and heavy, like a \ +wall or lattice, to push yourself off if you want to move. A jetpack would enable free range of motion. A pair of \ +magboots would let you walk around normally on the floor. Barring those, you can throw things, use a fire extinguisher, \ +or shoot a gun to move around via Newton's 3rd Law of Motion." + icon_state = "weightless" + +/obj/screen/alert/fire + name = "On Fire" + desc = "You're on fire. Stop, drop and roll to put the fire out or move to a vacuum area." + icon_state = "fire" + +/obj/screen/alert/fire/Click() + if(isliving(usr)) + var/mob/living/L = usr + return L.resist() + + +//ALIENS + +/obj/screen/alert/alien_tox + name = "Plasma" + desc = "There's flammable plasma in the air. If it lights up, you'll be toast." + icon_state = "alien_tox" + alerttooltipstyle = "alien" + +/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 = "Too Hot" + desc = "It's too hot! Flee to space or at least away from the flames. Standing on weeds will heal you." + icon_state = "alien_fire" + alerttooltipstyle = "alien" + +/obj/screen/alert/alien_vulnerable + name = "Severed Matriarchy" + desc = "Your queen has been killed, you will suffer movement penalties and loss of hivemind. A new queen cannot be made until you recover." + icon_state = "alien_noqueen" + alerttooltipstyle = "alien" + +//BLOBS + +/obj/screen/alert/nofactory + name = "No Factory" + desc = "You have no factory, and are slowly dying!" + icon_state = "blobbernaut_nofactory" + alerttooltipstyle = "blob" + +//SILICONS + +/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." + icon_state = "nocell" + +/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. \ +Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." + icon_state = "emptycell" + +/obj/screen/alert/lowcell + name = "Low Charge" + desc = "Unit's power cell is running low. Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." + icon_state = "lowcell" + +//Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg +/obj/screen/alert/hacked + name = "Hacked" + desc = "Hazardous non-standard equipment detected. Please ensure any usage of this equipment is in line with unit's laws, if any." + icon_state = "hacked" + +/obj/screen/alert/locked + name = "Locked Down" + desc = "Unit has been remotely locked down. Usage of a Robotics Control Console like the one in the Research Director's \ +office by your AI master or any qualified human may resolve this matter. Robotics may provide further assistance if necessary." + icon_state = "locked" + +/obj/screen/alert/newlaw + name = "Law Update" + desc = "Laws have potentially been uploaded to or removed from this unit. Please be aware of any changes \ +so as to remain in compliance with the most up-to-date laws." + icon_state = "newlaw" + timeout = 300 + +//MECHS + +/obj/screen/alert/low_mech_integrity + name = "Mech Damaged" + desc = "Mech integrity is low." + icon_state = "low_mech_integrity" + + +//GHOSTS +//TODO: expand this system to replace the pollCandidates/CheckAntagonist/"choose quickly"/etc Yes/No messages +/obj/screen/alert/notify_cloning + name = "Revival" + desc = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!" + icon_state = "template" + timeout = 300 + +/obj/screen/alert/notify_cloning/Click() + if(!usr || !usr.client) return + var/mob/observer/dead/G = usr + G.reenter_corpse() + +// /obj/screen/alert/notify_jump +// name = "Body created" +// desc = "A body was created. You can enter it." +// icon_state = "template" +// timeout = 300 +// var/atom/jump_target = null +// var/attack_not_jump = null + +// /obj/screen/alert/notify_jump/Click() +// if(!usr || !usr.client) return +// if(!jump_target) return +// var/mob/dead/observer/G = usr +// if(!istype(G)) return +// if(attack_not_jump) +// jump_target.attack_ghost(G) +// else +// var/turf/T = get_turf(jump_target) +// if(T && isturf(T)) +// G.loc = T + +//OBJECT-BASED + +/obj/screen/alert/restrained/buckled + name = "Buckled" + desc = "You've been buckled to something. Click the alert to unbuckle unless you're handcuffed." + +/obj/screen/alert/restrained/handcuffed + 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." + +/obj/screen/alert/restrained/legcuffed + name = "Legcuffed" + desc = "You're legcuffed, which slows you down considerably. Click the alert to free yourself." + +/obj/screen/alert/restrained/Click() + if(isliving(usr)) + var/mob/living/L = usr + return L.resist() +// 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 + else + . = "" + 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() + ..() + severity = 0 + master = null + screen_loc = "" + return QDEL_HINT_QUEUE diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 2ec9da3b27..960582b4b1 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -21,13 +21,7 @@ mymob.healths.name = "health" mymob.healths.screen_loc = ui_alien_health - mymob.fire = new /obj/screen() - mymob.fire.icon = 'icons/mob/screen1_alien.dmi' - mymob.fire.icon_state = "fire0" - mymob.fire.name = "fire" - mymob.fire.screen_loc = ui_fire - mymob.client.screen = list() - mymob.client.screen += list( mymob.healths, mymob.fire) //, mymob.rest, mymob.sleep, mymob.mach ) + mymob.client.screen += list( mymob.healths) //, mymob.rest, mymob.sleep, mymob.mach ) mymob.client.screen += src.adding + src.other mymob.client.screen += mymob.client.void \ No newline at end of file diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 6e1b184071..830dd65546 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -324,6 +324,11 @@ datum/hud/New(mob/owner) else mymob.instantiate_hud(src) + persistant_inventory_update() + mymob.reload_fullscreen() // Reload any fullscreen overlays this mob has. + mymob.update_action_buttons() + reorganize_alerts() + /mob/proc/instantiate_hud(var/datum/hud/HUD) return @@ -388,6 +393,7 @@ datum/hud/New(mob/owner) hud_used.hidden_inventory_update() hud_used.persistant_inventory_update() update_action_buttons() + hud_used.reorganize_alerts() //Similar to button_pressed_F12() but keeps zone_sel, gun_setting_icon, and healths. /mob/proc/toggle_zoom_hud() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index adbee61eb8..173398fda6 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -246,27 +246,6 @@ hud_elements |= mymob.internals if(hud_data.has_warnings) - mymob.oxygen = new /obj/screen() - mymob.oxygen.icon = ui_style - mymob.oxygen.icon_state = "oxy0" - mymob.oxygen.name = "oxygen" - mymob.oxygen.screen_loc = ui_oxygen - hud_elements |= mymob.oxygen - - mymob.toxin = new /obj/screen() - mymob.toxin.icon = ui_style - mymob.toxin.icon_state = "tox0" - mymob.toxin.name = "toxin" - mymob.toxin.screen_loc = ui_toxin - hud_elements |= mymob.toxin - - mymob.fire = new /obj/screen() - mymob.fire.icon = ui_style - mymob.fire.icon_state = "fire0" - mymob.fire.name = "fire" - mymob.fire.screen_loc = ui_fire - hud_elements |= mymob.fire - mymob.healths = new /obj/screen() mymob.healths.icon = ui_style mymob.healths.icon_state = "health0" @@ -274,30 +253,6 @@ mymob.healths.screen_loc = ui_health hud_elements |= mymob.healths - if(hud_data.has_pressure) - mymob.pressure = new /obj/screen() - mymob.pressure.icon = ui_style - mymob.pressure.icon_state = "pressure0" - mymob.pressure.name = "pressure" - mymob.pressure.screen_loc = ui_pressure - hud_elements |= mymob.pressure - - if(hud_data.has_bodytemp) - mymob.bodytemp = new /obj/screen() - mymob.bodytemp.icon = ui_style - mymob.bodytemp.icon_state = "temp1" - mymob.bodytemp.name = "body temperature" - mymob.bodytemp.screen_loc = ui_temp - hud_elements |= mymob.bodytemp - - if(hud_data.has_nutrition) - mymob.nutrition_icon = new /obj/screen() - mymob.nutrition_icon.icon = ui_style - mymob.nutrition_icon.icon_state = "nutrition0" - mymob.nutrition_icon.name = "nutrition" - mymob.nutrition_icon.screen_loc = ui_nutrition - hud_elements |= mymob.nutrition_icon - //VOREStation Addition begin mymob.shadekin_dark_display = new /obj/screen/shadekin/darkness() mymob.shadekin_dark_display.screen_loc = ui_shadekin_dark_display diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 392854742a..c71e0004c8 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -85,15 +85,6 @@ var/obj/screen/robot_inventory src.adding += using action_intent = using -//Cell - mymob:cells = new /obj/screen() - mymob:cells.icon = ui_style - mymob:cells.icon_state = "charge-empty" - mymob:cells.alpha = ui_alpha - mymob:cells.name = "cell" - mymob:cells.screen_loc = ui_toxin - src.other += mymob:cells - //Health mymob.healths = new /obj/screen() mymob.healths.icon = ui_style @@ -142,28 +133,6 @@ var/obj/screen/robot_inventory robot_inventory.screen_loc = ui_borg_inventory src.other += robot_inventory -//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 = ui_style - mymob.oxygen.icon_state = "oxy0" - mymob.oxygen.alpha = ui_alpha - mymob.oxygen.name = "oxygen" - mymob.oxygen.screen_loc = ui_oxygen - src.other += mymob.oxygen - - mymob.fire = new /obj/screen() - mymob.fire.icon = ui_style - mymob.fire.icon_state = "fire0" - mymob.fire.alpha = ui_alpha - mymob.fire.name = "fire" - mymob.fire.screen_loc = ui_fire - src.other += mymob.fire - mymob.pullin = new /obj/screen() mymob.pullin.icon = ui_style mymob.pullin.icon_state = "pull0" @@ -195,7 +164,7 @@ var/obj/screen/robot_inventory mymob.client.screen = list() - mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, robot_inventory, mymob.gun_setting_icon) + mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.hands, mymob.healths, mymob.pullin, robot_inventory, mymob.gun_setting_icon) mymob.client.screen += src.adding + src.other mymob.client.screen += mymob.client.void diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7f16c60bde..10a7b4b7b9 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -480,6 +480,19 @@ else return 0 +/datum/mind/proc/get_ghost(even_if_they_cant_reenter) + for(var/mob/observer/dead/G in player_list) + if(G.mind == src) + if(G.can_reenter_corpse || even_if_they_cant_reenter) + return G + break + +/datum/mind/proc/grab_ghost(force) + var/mob/observer/dead/G = get_ghost(even_if_they_cant_reenter = force) + . = G + if(G) + G.reenter_corpse() + //Initialisation procs /mob/living/proc/mind_initialize() if(mind) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index f403606db2..2dac39e0e7 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -400,6 +400,7 @@ var/list/mob/living/forced_ambiance_list = new if(has_gravity) thunk(M) M.update_floating( M.Check_Dense_Object() ) + M.update_gravity(has_gravity) /area/proc/thunk(mob) if(istype(get_turf(mob), /turf/space)) // Can't fall onto nothing. diff --git a/code/game/gamemodes/changeling/powers/escape_restraints.dm b/code/game/gamemodes/changeling/powers/escape_restraints.dm index 08700b1e04..ced80d35bf 100644 --- a/code/game/gamemodes/changeling/powers/escape_restraints.dm +++ b/code/game/gamemodes/changeling/powers/escape_restraints.dm @@ -34,7 +34,7 @@ C.handcuffed = null if(C.buckled && C.buckled.buckle_require_restraints) C.buckled.unbuckle_mob() - C.update_inv_handcuffed() + C.update_handcuffed() if (C.client) C.client.screen -= W W.forceMove(C.loc) diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 420b1173c8..e483498155 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -50,7 +50,7 @@ H.handcuffed = null if(H.buckled && H.buckled.buckle_require_restraints) H.buckled.unbuckle_mob() - H.update_inv_handcuffed() + H.update_handcuffed() if (H.client) H.client.screen -= W W.forceMove(H.loc) diff --git a/code/game/gamemodes/technomancer/spells/resurrect.dm b/code/game/gamemodes/technomancer/spells/resurrect.dm index 02c072b90d..41dc9ce34f 100644 --- a/code/game/gamemodes/technomancer/spells/resurrect.dm +++ b/code/game/gamemodes/technomancer/spells/resurrect.dm @@ -44,7 +44,7 @@ for(var/mob/observer/dead/ghost in player_list) if(ghost.mind == H.mind) ghost.notify_revive("The Technomancer [user.real_name] is trying to revive you. \ - Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg') + Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg', source = user) break H.adjustBruteLoss(-40) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 86f3fe93da..0ce27d99bb 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -672,10 +672,10 @@ src.visible_message("The machine states, 'YOU ARE UNDER ARREST, RAIDER!' and shoots handcuffs onto [usr]!", "You hear something say 'YOU ARE UNDER ARREST, RAIDER!' and a clinking sound") var/obj/item/weapon/handcuffs/C = new(src.loc) var/mob/living/carbon/human/H = usr - if(istype(usr)) + if(istype(H)) C.forceMove(H) H.handcuffed = C - H.update_inv_handcuffed() + H.update_handcuffed() else C.throw_at(usr,16,3,src) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 90c09acb44..30c15f6d04 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -323,10 +323,9 @@ if ((!subject.ckey) || (!subject.client)) scantemp = "Error: Mental interface failure." if(subject.stat == DEAD && subject.mind && subject.mind.key) // If they're dead and not in their body, tell them to get in it. - for(var/mob/observer/dead/ghost in player_list) - if(ghost.ckey == ckey(subject.mind.key)) - ghost.notify_revive("Someone is trying to scan your body in the cloner. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg') - break + var/mob/observer/dead/ghost = subject.get_ghost() + if(ghost) + ghost.notify_revive("Someone is trying to scan your body in the cloner. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg', source = src) return if (!isnull(find_record(subject.ckey))) scantemp = "Subject already in database." diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index a5516c4c33..990a99bc05 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -629,6 +629,7 @@ //////////////////////////////////////// /obj/mecha/take_damage(amount, type="brute") + update_damage_alerts() if(amount) var/damage = absorbDamage(amount,type) health -= damage @@ -969,6 +970,7 @@ if(src.healthYou repair some damage to [src.name].") src.health += min(10, initial(src.health)-src.health) + update_damage_alerts() else to_chat(user, "The [src.name] is at full integrity") return @@ -1319,6 +1321,8 @@ src.verbs += /obj/mecha/verb/eject src.log_append_to_last("[H] moved in as pilot.") src.icon_state = src.reset_icon() + update_cell_alerts() + update_damage_alerts() set_dir(dir_in) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(occupant.client && cloaked_selfimage) @@ -1401,6 +1405,8 @@ occupant.loc = mmi mmi.mecha = null occupant.canmove = 0 + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") occupant = null icon_state = src.reset_icon()+"-open" set_dir(dir_in) @@ -1975,12 +1981,14 @@ return call((proc_res["dynusepower"]||src), "dynusepower")(amount) /obj/mecha/proc/dynusepower(amount) + update_cell_alerts() if(get_charge()) cell.use(amount) return 1 return 0 /obj/mecha/proc/give_power(amount) + update_cell_alerts() if(!isnull(get_charge())) cell.give(amount) return 1 @@ -2158,3 +2166,31 @@ //src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) return */ + +/obj/mecha/proc/update_cell_alerts() + if(occupant && cell) + var/cellcharge = cell.charge/cell.maxcharge + switch(cellcharge) + if(0.75 to INFINITY) + occupant.clear_alert("charge") + if(0.5 to 0.75) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 1) + if(0.25 to 0.5) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 2) + if(0.01 to 0.25) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 3) + else + occupant.throw_alert("charge", /obj/screen/alert/emptycell) + +/obj/mecha/proc/update_damage_alerts() + if(occupant) + var/integrity = health/initial(health)*100 + switch(integrity) + if(30 to 45) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 1) + if(15 to 35) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 2) + if(-INFINITY to 15) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 3) + else + occupant.clear_alert("mech damage") \ No newline at end of file diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index c1e6b9adda..3d4c2ffe37 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -73,6 +73,7 @@ //VOREStation Add End post_buckle_mob(M) + M.throw_alert("buckled", /obj/screen/alert/restrained/buckled, new_master = src) return TRUE /atom/movable/proc/unbuckle_mob(mob/living/buckled_mob, force = FALSE) @@ -88,6 +89,7 @@ buckled_mob.anchored = initial(buckled_mob.anchored) buckled_mob.update_canmove() buckled_mob.update_floating( buckled_mob.Check_Dense_Object() ) + buckled_mob.clear_alert("buckled") // buckled_mob = null buckled_mobs -= buckled_mob diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 80d9dc081b..8df119f0d5 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -386,11 +386,9 @@ // This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled /obj/item/weapon/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/user) - if(!H.client && !H.teleop) - for(var/mob/observer/dead/ghost in player_list) - if(ghost.mind == H.mind) - ghost.notify_revive("Someone is trying to resuscitate you. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg') - break + var/mob/observer/dead/ghost = H.get_ghost() + if(ghost) + ghost.notify_revive("Someone is trying to resuscitate you. Re-enter your body if you want to be revived!", 'sound/effects/genetics.ogg', source = src) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process user.visible_message("\The [user] begins to place [src] on [H]'s chest.", "You begin to place [src] on [H]'s chest...") diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 763b89c353..2f7e3d6e08 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -98,7 +98,7 @@ user.drop_from_inventory(cuffs) cuffs.loc = target target.handcuffed = cuffs - target.update_inv_handcuffed() + target.update_handcuffed() target.drop_r_hand() target.drop_l_hand() target.stop_pulling() diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm index b55274cc92..6e4f5f7a16 100644 --- a/code/game/objects/items/weapons/implants/implantfreedom.dm +++ b/code/game/objects/items/weapons/implants/implantfreedom.dm @@ -27,7 +27,7 @@ source.handcuffed = null if(source.buckled && source.buckled.buckle_require_restraints) source.buckled.unbuckle_mob() - source.update_inv_handcuffed() + source.update_handcuffed() if (source.client) source.client.screen -= W if (W) diff --git a/code/game/objects/items/weapons/tools/wirecutters.dm b/code/game/objects/items/weapons/tools/wirecutters.dm index 28e9e8f6cf..91a48299c6 100644 --- a/code/game/objects/items/weapons/tools/wirecutters.dm +++ b/code/game/objects/items/weapons/tools/wirecutters.dm @@ -37,7 +37,7 @@ C.handcuffed = null if(C.buckled && C.buckled.buckle_require_restraints) C.buckled.unbuckle_mob() - C.update_inv_handcuffed() + C.update_handcuffed() return else ..() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2a361f1d46..1d58533771 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -199,4 +199,7 @@ // Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. /obj/proc/is_safe_to_step(mob/living/L) - return TRUE \ No newline at end of file + return TRUE + +/obj/proc/container_resist(var/mob/living) + return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 55cb97c3cb..d14ccc602b 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -403,8 +403,7 @@ return 0 //closed but not sealed... return 1 -/obj/structure/closet/proc/mob_breakout(var/mob/living/escapee) - +/obj/structure/closet/container_resist(var/mob/living/escapee) if(breakout || !req_breakout()) return @@ -415,30 +414,31 @@ visible_message("\The [src] begins to shake violently!") - breakout = 1 //can't think of a better way to do this right now. - for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2 - if(!do_after(escapee, 50)) //5 seconds - breakout = 0 - return - if(!escapee || escapee.incapacitated() || escapee.loc != src) - breakout = 0 - return //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened - //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... - if(!req_breakout()) - breakout = 0 - return + spawn(0) + breakout = 1 //can't think of a better way to do this right now. + for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2 + if(!do_after(escapee, 50)) //5 seconds + breakout = 0 + return + if(!escapee || escapee.incapacitated() || escapee.loc != src) + breakout = 0 + return //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened + //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... + if(!req_breakout()) + breakout = 0 + return + playsound(src.loc, breakout_sound, 100, 1) + animate_shake() + add_fingerprint(escapee) + + //Well then break it! + breakout = 0 + to_chat(escapee, "You successfully break out!") + visible_message("\The [escapee] successfully broke out of \the [src]!") playsound(src.loc, breakout_sound, 100, 1) + break_open() animate_shake() - add_fingerprint(escapee) - - //Well then break it! - breakout = 0 - to_chat(escapee, "You successfully break out!") - visible_message("\The [escapee] successfully broke out of \the [src]!") - playsound(src.loc, breakout_sound, 100, 1) - break_open() - animate_shake() /obj/structure/closet/proc/break_open() sealed = 0 diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm index 470cb94c06..2d708d90b8 100644 --- a/code/modules/clothing/clothing_vr.dm +++ b/code/modules/clothing/clothing_vr.dm @@ -55,6 +55,34 @@ ..() +/obj/item/clothing/shoes/container_resist(mob/living/micro) + var/mob/living/carbon/human/macro = loc + if(!istype(macro)) + to_chat(micro, "You start to climb out of [src]!") + if(do_after(micro, 50, src)) + to_chat(micro, "You climb out of [src]!") + micro.forceMove(loc) + return + + var/escape_message_micro = "You start to climb out of [src]!" + var/escape_message_macro = "Something is trying to climb out of your [src]!" + var/escape_time = 60 + + if(macro.shoes == src) + escape_message_micro = "You start to climb around the larger creature's feet and ankles!" + escape_time = 100 + + to_chat(micro, "[escape_message_micro]") + to_chat(macro, "[escape_message_macro]") + if(!do_after(micro, escape_time, macro)) + to_chat(micro, "You're pinned underfoot!") + to_chat(macro, "You pin the escapee underfoot!") + return + + to_chat(micro, "You manage to escape [src]!") + to_chat(macro, "Someone has climbed out of your [src]!") + micro.forceMove(macro.loc) + /obj/item/clothing/gloves sprite_sheets = list( SPECIES_TESHARI = 'icons/mob/species/seromi/gloves.dmi', diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 349859029f..936f9d85f9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -827,7 +827,7 @@ mob/observer/dead/MayRespawn(var/feedback = 0) // Lets a ghost know someone's trying to bring them back, and for them to get into their body. // Mostly the same as TG's sans the hud element, since we don't have TG huds. -/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE) +/mob/observer/dead/proc/notify_revive(var/message, var/sound, flashwindow = TRUE, var/atom/source) if((last_revive_notification + 2 MINUTES) > world.time) return last_revive_notification = world.time @@ -836,6 +836,16 @@ mob/observer/dead/MayRespawn(var/feedback = 0) window_flash(client) if(message) to_chat(src, "[message]") + if(source) + var/obj/screen/alert/A = throw_alert("\ref[source]_notify_revive", /obj/screen/alert/notify_cloning) + if(A) + if(client && client.prefs && client.prefs.UI_style) + A.icon = ui_style2icon(client.prefs.UI_style) + A.desc = message + var/old_layer = source.layer + source.layer = FLOAT_LAYER + A.overlays += source + source.layer = old_layer to_chat(src, "(Click to re-enter)") if(sound) SEND_SOUND(src, sound(sound)) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 0febfdc5c4..707503dab6 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -89,6 +89,22 @@ var/list/holder_mob_icon_cache = list() else if(H.r_hand == src) H.update_inv_r_hand() +/obj/item/weapon/holder/container_resist(mob/living/held) + var/mob/M = loc + if(istype(M)) + M.drop_from_inventory(src) + to_chat(M, "\The [held] wriggles out of your grip!") + to_chat(held, "You wiggle out of [M]'s grip!") + else if(istype(loc, /obj/item/clothing/accessory/holster)) + var/obj/item/clothing/accessory/holster/holster = loc + if(holster.holstered == src) + holster.clear_holster() + to_chat(held, "You extricate yourself from [holster].") + held.forceMove(get_turf(held)) + else if(isitem(loc)) + to_chat(held, "You struggle free of [loc].") + held.forceMove(get_turf(held)) + //Mob specific holders. /obj/item/weapon/holder/diona origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 3839e2ed85..0c979ba008 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -311,7 +311,7 @@ H.handcuffed = new /obj/item/weapon/handcuffs/cable(H) // Better to be cable cuffed than stun-locked else H.handcuffed = new /obj/item/weapon/handcuffs(H) - H.update_inv_handcuffed() + H.update_handcuffed() busy = FALSE else if(istype(M, /mob/living)) var/mob/living/L = M diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 0bd0ac89b1..370ec77422 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -148,11 +148,11 @@ if(environment.temperature > (T0C+66)) adjustFireLoss((environment.temperature - (T0C+66))/5) // Might be too high, check in testing. - if (fire) fire.icon_state = "fire2" + throw_alert("alien_fire", /obj/screen/alert/alien_fire) if(prob(20)) to_chat(src, "You feel a searing heat!") else - if (fire) fire.icon_state = "fire0" + clear_alert("alien_fire") /mob/living/carbon/alien/handle_fire() if(..()) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c11cf6bac0..f5e2f59c89 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -310,7 +310,7 @@ else if (W == handcuffed) handcuffed = null - update_inv_handcuffed() + update_handcuffed() if(buckled && buckled.buckle_require_restraints) buckled.unbuckle_mob() @@ -318,9 +318,8 @@ legcuffed = null update_inv_legcuffed() else - ..() + ..() - return //generates realistic-ish pulse output based on preset levels /mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate @@ -403,3 +402,14 @@ if(does_not_breathe) return FALSE return ..() + +/mob/living/carbon/proc/update_handcuffed() + if(handcuffed) + drop_l_hand() + drop_r_hand() + stop_pulling() + throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = handcuffed) + else + clear_alert("handcuffed") + update_action_buttons() //some of our action buttons might be unusable when we're handcuffed. + update_inv_handcuffed() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9687bde18f..0af9f90225 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1679,4 +1679,9 @@ if(istype(loc, /turf/simulated)) var/turf/T = loc T.add_blood(src) - . = ..() \ No newline at end of file + . = ..() + +/mob/living/carbon/human/reduce_cuff_time() + if(istype(gloves, /obj/item/clothing/gloves/gauntlets/rig)) + return 2 + return ..() diff --git a/code/modules/mob/living/carbon/human/human_resist.dm b/code/modules/mob/living/carbon/human/human_resist.dm index 56d42c1a15..f9ef85c94b 100644 --- a/code/modules/mob/living/carbon/human/human_resist.dm +++ b/code/modules/mob/living/carbon/human/human_resist.dm @@ -1,30 +1,7 @@ -/mob/living/carbon/human/process_resist() - //drop && roll - if((on_fire || has_modifier_of_type(/datum/modifier/fire)) && !buckled) - adjust_fire_stacks(-1.2) - Weaken(3) - spin(32,2) - visible_message( - "[src] rolls on the floor, trying to put themselves out!", - "You stop, drop, and roll!" - ) - sleep(30) - if(fire_stacks <= 0 && !(has_modifier_of_type(/datum/modifier/fire))) - visible_message( - "[src] has successfully extinguished themselves!", - "You extinguish yourself." - ) - ExtinguishMob() - return TRUE - - if(handcuffed) - spawn() escape_handcuffs() - else if(legcuffed) - spawn() escape_legcuffs() - else if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) - spawn() escape_straight_jacket() - else - ..() +/mob/living/carbon/human/resist_restraints() + if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + return escape_straight_jacket() + return ..() #define RESIST_ATTACK_DEFAULT 0 #define RESIST_ATTACK_CLAWS 1 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 0d9e58b7cb..379dfd4b8f 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -172,7 +172,7 @@ This saves us from having to call add_fingerprint() any time something is put in handcuffed = null if(buckled && buckled.buckle_require_restraints) buckled.unbuckle_mob() - update_inv_handcuffed() + update_handcuffed() else if (W == legcuffed) legcuffed = null update_inv_legcuffed() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 1856fad689..135c5df17c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -25,12 +25,6 @@ #define HUMAN_COMBUSTION_TEMP 524 //524k is the sustained combustion temperature of human fat /mob/living/carbon/human - var/oxygen_alert = 0 - var/phoron_alert = 0 - var/co2_alert = 0 - var/fire_alert = 0 - var/pressure_alert = 0 - var/temperature_alert = 0 var/in_stasis = 0 var/heartbeat = 0 @@ -46,7 +40,6 @@ //code. Very ugly. I dont care. Moving this stuff here so its easy //to find it. blinded = 0 - fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. //TODO: seperate this out // update the current life tick, can be used to e.g. only do something every 4 ticks @@ -384,8 +377,7 @@ if(suiciding) failed_last_breath = 1 adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster - oxygen_alert = max(oxygen_alert, 1) - suiciding -- + suiciding-- return 0 if(does_not_breathe) @@ -405,9 +397,10 @@ if(!L.is_bruised() && prob(8)) rupture_lung() - oxygen_alert = max(oxygen_alert, 1) - + throw_alert("pressure", /obj/screen/alert/lowpressure) return 0 + else + clear_alert("pressure") var/safe_pressure_min = species.minimum_breath_pressure // Minimum safe partial pressure of breathable gas in kPa @@ -466,6 +459,7 @@ var/inhale_pp = (inhaling/breath.total_moles)*breath_pressure var/toxins_pp = (poison/breath.total_moles)*breath_pressure + // To be clear, this isn't how much they're exhaling -- it's the amount of the species exhale_gas that they just var/exhaled_pp = (exhaling/breath.total_moles)*breath_pressure // Not enough to breathe @@ -478,10 +472,23 @@ adjustOxyLoss(max(HUMAN_MAX_OXYLOSS*(1-ratio), 0)) failed_inhale = 1 - oxygen_alert = max(oxygen_alert, 1) + switch(breath_type) + if("oxygen") + throw_alert("oxy", /obj/screen/alert/not_enough_oxy) + if("phoron") + throw_alert("oxy", /obj/screen/alert/not_enough_tox) + if("nitrogen") + throw_alert("oxy", /obj/screen/alert/not_enough_nitro) + if("carbon_dioxide") + throw_alert("oxy", /obj/screen/alert/not_enough_co2) + if("volatile_fuel") + throw_alert("oxy", /obj/screen/alert/not_enough_fuel) + if("sleeping_agent") + throw_alert("oxy", /obj/screen/alert/not_enough_n2o) + else // We're in safe limits - oxygen_alert = 0 + clear_alert("oxy") inhaled_gas_used = inhaling/6 @@ -492,16 +499,15 @@ // Too much exhaled gas in the air if(exhaled_pp > safe_exhaled_max) - if (!co2_alert|| prob(15)) + if (prob(15)) var/word = pick("extremely dizzy","short of breath","faint","confused") to_chat(src, "You feel [word].") adjustOxyLoss(HUMAN_MAX_OXYLOSS) - co2_alert = 1 failed_exhale = 1 else if(exhaled_pp > safe_exhaled_max * 0.7) - if (!co2_alert || prob(1)) + if (!prob(1)) var/word = pick("dizzy","short of breath","faint","momentarily confused") to_chat(src, "You feel [word].") @@ -511,26 +517,22 @@ //give them some oxyloss, up to the limit - we don't want people falling unconcious due to CO2 alone until they're pretty close to safe_exhaled_max. if (getOxyLoss() < 50*ratio) adjustOxyLoss(HUMAN_MAX_OXYLOSS) - co2_alert = 1 failed_exhale = 1 else if(exhaled_pp > safe_exhaled_max * 0.6) - if (prob(0.3)) + if(prob(0.3)) var/word = pick("a little dizzy","short of breath") to_chat(src, "You feel [word].") - else - co2_alert = 0 - // Too much poison in the air. if(toxins_pp > safe_toxins_max) var/ratio = (poison/safe_toxins_max) * 10 if(reagents) reagents.add_reagent("toxin", CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE)) breath.adjust_gas(poison_type, -poison/6, update = 0) //update after - phoron_alert = max(phoron_alert, 1) + throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) else - phoron_alert = 0 + clear_alert("tox_in_air") // If there's some other shit in the air lets deal with it here. if(breath.gas["sleeping_agent"]) @@ -573,25 +575,24 @@ if(breath.temperature >= species.breath_heat_level_1) if(breath.temperature < species.breath_heat_level_2) apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) + throw_alert("temp", /obj/screen/alert/hot, 1) else if(breath.temperature < species.breath_heat_level_3) apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) + throw_alert("temp", /obj/screen/alert/hot, 2) else apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Heat") - fire_alert = max(fire_alert, 2) + throw_alert("temp", /obj/screen/alert/hot, 3) else if(breath.temperature <= species.breath_cold_level_1) if(breath.temperature > species.breath_cold_level_2) apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) + throw_alert("temp", /obj/screen/alert/cold, 1) else if(breath.temperature > species.breath_cold_level_3) apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) + throw_alert("temp", /obj/screen/alert/cold, 2) else apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Cold") - fire_alert = max(fire_alert, 1) - + throw_alert("temp", /obj/screen/alert/cold, 3) //breathing in hot/cold air also heats/cools you a bit var/temp_adj = breath.temperature - bodytemperature @@ -613,6 +614,9 @@ else if(breath.temperature <= species.cold_discomfort_level) species.get_environment_discomfort(src,"cold") + else + clear_alert("temp") + breath.update_values() return 1 @@ -653,7 +657,7 @@ loc_temp = environment.temperature if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1) - pressure_alert = 0 + clear_alert("pressure") return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection (convection) @@ -674,7 +678,6 @@ // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(bodytemperature >= species.heat_level_1) //Body temperature is too hot. - fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode @@ -691,11 +694,9 @@ burn_dam = HEAT_DAMAGE_LEVEL_1 take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) else if(bodytemperature <= species.cold_level_1) //Body temperature is too cold. - fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode @@ -713,7 +714,6 @@ cold_dam = COLD_DAMAGE_LEVEL_1 take_overall_damage(burn=cold_dam, used_weapon = "Low Body Temperature") - fire_alert = max(fire_alert, 1) // 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! @@ -723,13 +723,13 @@ if(adjusted_pressure >= species.hazard_high_pressure) var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") - pressure_alert = 2 + throw_alert("pressure", /obj/screen/alert/highpressure, 2) else if(adjusted_pressure >= species.warning_high_pressure) - pressure_alert = 1 + throw_alert("pressure", /obj/screen/alert/highpressure, 1) else if(adjusted_pressure >= species.warning_low_pressure) - pressure_alert = 0 + clear_alert("pressure") else if(adjusted_pressure >= species.hazard_low_pressure) - pressure_alert = -1 + throw_alert("pressure", /obj/screen/alert/lowpressure, 1) else if( !(COLD_RESISTANCE in mutations)) if(!isSynthetic() || !nif || !nif.flag_check(NIF_O_PRESSURESEAL,NIF_FLAGS_OTHER)) //VOREStation Edit - NIF pressure seals @@ -747,9 +747,9 @@ // Firesuits (Min protection = 0.2 atmospheres) decrease oxyloss to 1/5 adjustOxyLoss(pressure_dam) - pressure_alert = -2 + throw_alert("pressure", /obj/screen/alert/lowpressure, 2) else - pressure_alert = -1 + clear_alert("pressure") return @@ -1009,12 +1009,14 @@ //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar. if(client || sleeping > 3) AdjustSleeping(-1) + throw_alert("asleep", /obj/screen/alert/asleep) if( prob(2) && health && !hal_crit ) spawn(0) emote("snore") //CONSCIOUS else set_stat(CONSCIOUS) + clear_alert("asleep") //Periodically double-check embedded_flag if(embedded_flag && !(life_tick % 10)) @@ -1046,19 +1048,24 @@ SetBlinded(0) blinded = 0 eye_blurry = 0 + clear_alert("blind") else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind. SetBlinded(1) blinded = 1 eye_blurry = 1 + throw_alert("blind", /obj/screen/alert/blind) else //You have the requisite organs if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own blinded = 1 + throw_alert("blind", /obj/screen/alert/blind) else if(eye_blind) // Blindness, heals slowly over time AdjustBlinded(-1) blinded = 1 + throw_alert("blind", /obj/screen/alert/blind) else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster eye_blurry = max(eye_blurry-3, 0) blinded = 1 + throw_alert("blind", /obj/screen/alert/blind) //blurry sight if(vision.is_bruised()) // Vision organs impaired? Permablurry. @@ -1213,83 +1220,41 @@ healths_ma.overlays += health_images healths.appearance = healths_ma - if(nutrition_icon) - var/prefix = isSynthetic() ? "c" : null - switch(nutrition) - if(450 to INFINITY) nutrition_icon.icon_state = "[prefix]nutrition0" - if(350 to 450) nutrition_icon.icon_state = "[prefix]nutrition1" - if(250 to 350) nutrition_icon.icon_state = "[prefix]nutrition2" - if(150 to 250) nutrition_icon.icon_state = "[prefix]nutrition3" - else nutrition_icon.icon_state = "[prefix]nutrition4" - if(pressure) - pressure.icon_state = "pressure[pressure_alert]" + var/fat_alert = /obj/screen/alert/fat + var/hungry_alert = /obj/screen/alert/hungry + var/starving_alert = /obj/screen/alert/starving -// if(rest) //Not used with new UI -// if(resting || lying || sleeping) rest.icon_state = "rest1" -// else rest.icon_state = "rest0" - if(toxin) - if(hal_screwyhud == 4 || (phoron_alert && !does_not_breathe)) toxin.icon_state = "tox1" - else toxin.icon_state = "tox0" - if(oxygen) - if(hal_screwyhud == 3 || (oxygen_alert && !does_not_breathe)) oxygen.icon_state = "oxy1" - else oxygen.icon_state = "oxy0" - if(fire) - if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for cold and 2 for heat. - else fire.icon_state = "fire0" + if(get_species() == SPECIES_CUSTOM) + var/datum/species/custom/C = species + if(/datum/trait/bloodsucker in C.traits) + fat_alert = /obj/screen/alert/fat/vampire + hungry_alert = /obj/screen/alert/hungry/vampire + starving_alert = /obj/screen/alert/starving/vampire + else if(isSynthetic()) + fat_alert = /obj/screen/alert/fat/synth + hungry_alert = /obj/screen/alert/hungry/synth + starving_alert = /obj/screen/alert/starving/synth - if(bodytemp) - if (!species) - switch(bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) bodytemp.icon_state = "temp4" - if(350 to 370) bodytemp.icon_state = "temp3" - if(335 to 350) bodytemp.icon_state = "temp2" - if(320 to 335) bodytemp.icon_state = "temp1" - if(300 to 320) 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" + switch(nutrition) + if(450 to INFINITY) + throw_alert("nutrition", fat_alert) + // if(350 to 450) + // if(250 to 350) // Alternative more-detailed tiers, not used. + if(250 to 450) + clear_alert("nutrition") + if(150 to 250) + throw_alert("nutrition", hungry_alert) else - //TODO: precalculate all of this stuff when the species datum is created - var/base_temperature = species.body_temperature - if(base_temperature == null) //some species don't have a set metabolic temperature - base_temperature = (species.heat_level_1 + species.cold_level_1)/2 - - var/temp_step - if (bodytemperature >= base_temperature) - temp_step = (species.heat_level_1 - base_temperature)/4 - - if (bodytemperature >= species.heat_level_1) - bodytemp.icon_state = "temp4" - else if (bodytemperature >= base_temperature + temp_step*3) - bodytemp.icon_state = "temp3" - else if (bodytemperature >= base_temperature + temp_step*2) - bodytemp.icon_state = "temp2" - else if (bodytemperature >= base_temperature + temp_step*1) - bodytemp.icon_state = "temp1" - else - bodytemp.icon_state = "temp0" - - else if (bodytemperature < base_temperature) - temp_step = (base_temperature - species.cold_level_1)/4 - - if (bodytemperature <= species.cold_level_1) - bodytemp.icon_state = "temp-4" - else if (bodytemperature <= base_temperature - temp_step*3) - bodytemp.icon_state = "temp-3" - else if (bodytemperature <= base_temperature - temp_step*2) - bodytemp.icon_state = "temp-2" - else if (bodytemperature <= base_temperature - temp_step*1) - bodytemp.icon_state = "temp-1" - else - bodytemp.icon_state = "temp0" + throw_alert("nutrition", starving_alert) if(blinded) overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + throw_alert("blind", /obj/screen/alert/blind) else if(!machine) clear_fullscreens() + clear_alert("blind") if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription if(glasses) //to every /obj/item @@ -1301,6 +1266,10 @@ set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) + if(druggy) + throw_alert("high", /obj/screen/alert/high) + else + clear_alert("high") if(config.welder_vision) var/found_welder diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index f55935ac9e..8a0d93243a 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -146,9 +146,11 @@ else H.adjustOxyLoss(ALRAUNE_CRIT_MAX_OXYLOSS) - H.oxygen_alert = max(H.oxygen_alert, 1) + H.throw_alert("pressure", /obj/screen/alert/lowpressure) return // skip air processing if there's no air + else + H.clear_alert("pressure") // now into the good stuff @@ -188,10 +190,10 @@ H.adjustOxyLoss(max(ALRAUNE_MAX_OXYLOSS*(1-ratio), 0)) failed_inhale = 1 - H.oxygen_alert = max(H.oxygen_alert, 1) + H.throw_alert("oxy", /obj/screen/alert/not_enough_co2) else // We're in safe limits - H.oxygen_alert = 0 + H.clear_alert("oxy") inhaled_gas_used = inhaling/6 breath.adjust_gas("carbon_dioxide", -inhaled_gas_used, update = 0) //update afterwards @@ -199,10 +201,9 @@ //Now we handle CO2. if(inhale_pp > safe_exhaled_max * 0.7) // For a human, this would be too much exhaled gas in the air. But plants don't care. - H.co2_alert = 1 // Give them the alert on the HUD. They'll be aware when the good stuff is present. - + H.throw_alert("co2", /obj/screen/alert/too_much_co2/plant) // Give them the alert on the HUD. They'll be aware when the good stuff is present. else - H.co2_alert = 0 + H.clear_alert("co2") //do the CO2 buff stuff here @@ -225,9 +226,9 @@ if(H.reagents) H.reagents.add_reagent("toxin", CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE)) breath.adjust_gas(poison_type, -poison/6, update = 0) //update after - H.phoron_alert = max(H.phoron_alert, 1) + H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) else - H.phoron_alert = 0 + H.clear_alert("tox_in_air") // If there's some other shit in the air lets deal with it here. if(breath.gas["sleeping_agent"]) @@ -271,24 +272,18 @@ if(breath.temperature >= breath_heat_level_1) if(breath.temperature < breath_heat_level_2) H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, bodypart, used_weapon = "Excessive Heat") - H.fire_alert = max(H.fire_alert, 2) else if(breath.temperature < breath_heat_level_3) H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, bodypart, used_weapon = "Excessive Heat") - H.fire_alert = max(H.fire_alert, 2) else H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, bodypart, used_weapon = "Excessive Heat") - H.fire_alert = max(H.fire_alert, 2) else if(breath.temperature <= breath_cold_level_1) if(breath.temperature > breath_cold_level_2) H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, bodypart, used_weapon = "Excessive Cold") - H.fire_alert = max(H.fire_alert, 1) else if(breath.temperature > breath_cold_level_3) H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, bodypart, used_weapon = "Excessive Cold") - H.fire_alert = max(H.fire_alert, 1) else H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, bodypart, used_weapon = "Excessive Cold") - H.fire_alert = max(H.fire_alert, 1) //breathing in hot/cold air also heats/cools you a bit diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index b4e04f745e..5950d069d5 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -68,9 +68,6 @@ /datum/trait/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/bloodsuck - spawn(10 SECONDS) // Ugh! - if(H?.nutrition_icon) - H.nutrition_icon.icon = 'icons/mob/screen/vamp_hunger_vr.dmi' /datum/trait/succubus_drain name = "Succubus Drain" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 2903bf604f..7b735b0dbe 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -855,11 +855,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(QDESTROYING(src)) return + clear_alert("legcuffed") remove_layer(LEGCUFF_LAYER) if(!legcuffed) return //Not legcuffed, why bother. + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) + overlays_standing[LEGCUFF_LAYER] = legcuffed.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_legcuffed_str, default_icon = INV_LCUFF_DEF_ICON, default_layer = LEGCUFF_LAYER) apply_layer(LEGCUFF_LAYER) diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 248fe5c6a6..8af9d9e20d 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -1,173 +1,99 @@ -/mob/living/carbon/process_resist() - - //drop && roll - if(on_fire && !buckled) - adjust_fire_stacks(-1.2) - Weaken(3) - spin(32,2) +/mob/living/carbon/resist_fire() + adjust_fire_stacks(-1.2) + Weaken(3) + spin(32,2) + visible_message( + "[src] rolls on the floor, trying to put themselves out!", + "You stop, drop, and roll!" + ) + sleep(30) + if(fire_stacks <= 0) visible_message( - "[src] rolls on the floor, trying to put themselves out!", - "You stop, drop, and roll!" + "[src] has successfully extinguished themselves!", + "You extinguish yourself." ) - sleep(30) - if(fire_stacks <= 0) - visible_message( - "[src] has successfully extinguished themselves!", - "You extinguish yourself." - ) - ExtinguishMob() - return TRUE + ExtinguishMob() + return TRUE +/mob/living/carbon/resist_restraints() + var/obj/item/I = null if(handcuffed) - spawn() escape_handcuffs() + I = handcuffed else if(legcuffed) - spawn() escape_legcuffs() - else - ..() + I = legcuffed + + if(I) + setClickCooldown(100) + cuff_resist(I, cuff_break = can_break_cuffs()) -/mob/living/carbon/proc/escape_handcuffs() - //if(!(last_special <= world.time)) return +/mob/living/carbon/proc/reduce_cuff_time() + return FALSE - //This line represent a significant buff to grabs... - // We don't have to check the click cooldown because /mob/living/verb/resist() has done it for us, we can simply set the delay - setClickCooldown(100) +/mob/living/carbon/proc/cuff_resist(obj/item/weapon/handcuffs/I, breakouttime = 1200, cuff_break = 0) + + if(istype(I)) + breakouttime = I.breakouttime - if(can_break_cuffs()) //Don't want to do a lot of logic gating here. - break_handcuffs() + var/displaytime = breakouttime / 10 + + var/reduceCuffTime = reduce_cuff_time() + if(reduceCuffTime) + breakouttime /= reduceCuffTime + displaytime /= reduceCuffTime + + if(cuff_break) + visible_message("[src] is trying to break [I]!", + "You attempt to break your [I]. (This will take around 5 seconds and you need to stand still)") + + if(do_after(src, 5 SECONDS, target = src, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(!I || buckled) + return + visible_message("[src] manages to break [I]!", + "You successfully break your [I].") + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + + if(I == handcuffed) + handcuffed = null + update_handcuffed() + else if(I == legcuffed) + legcuffed = null + update_inv_legcuffed() + + if(buckled && buckled.buckle_require_restraints) + buckled.unbuckle_mob() + + qdel(I) + else + to_chat(src, "You fail to break [I].") + return + + visible_message("[src] attempts to remove [I]!", + "You attempt to remove [I]. (This will take around [displaytime] seconds and you need to stand still)") + if(do_after(src, breakouttime, target = src, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) + visible_message("[src] manages to remove [I]!", + "You successfully remove [I].") + drop_from_inventory(I) + +/mob/living/carbon/resist_buckle() + if(!buckled) return - var/obj/item/weapon/handcuffs/HC = handcuffed + if(!restrained()) + return ..() - //A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type - var/breakouttime = 1200 - var/displaytime = 2 //Minutes to display in the "this will take X minutes." - //If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future... - if(istype(HC)) - breakouttime = HC.breakouttime - displaytime = breakouttime / 600 //Minutes - - var/mob/living/carbon/human/H = src - if(istype(H) && H.gloves && istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig)) - breakouttime /= 2 - displaytime /= 2 - - visible_message( - "\The [src] attempts to remove \the [HC]!", - "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" - ) - - if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) - if(!handcuffed) - return - visible_message( - "\The [src] manages to remove \the [handcuffed]!", - "You successfully remove \the [handcuffed]." - ) - drop_from_inventory(handcuffed) - -/mob/living/carbon/proc/escape_legcuffs() - //if(!(last_special <= world.time)) return - - //This line represent a significant buff to grabs... - // We don't have to check the click cooldown because /mob/living/verb/resist() has done it for us, we can simply set the delay setClickCooldown(100) - - if(can_break_cuffs()) //Don't want to do a lot of logic gating here. - break_legcuffs() - return - - var/obj/item/weapon/handcuffs/legcuffs/LC = legcuffed - - //A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/handcuffs/legcuffs type - var/breakouttime = 1200 - var/displaytime = 2 //Minutes to display in the "this will take X minutes." - //If you are legcuffed with actual legcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future... - if(istype(LC)) - breakouttime = LC.breakouttime - displaytime = breakouttime / 600 //Minutes - - var/mob/living/carbon/human/H = src - if(istype(H) && H.shoes && istype(H.shoes,/obj/item/clothing/shoes/magboots/rig)) - breakouttime /= 2 - displaytime /= 2 - visible_message( - "\The [src] attempts to remove \the [LC]!", - "You attempt to remove \the [LC]. (This will take around [displaytime] minutes and you need to stand still)" + "[src] attempts to unbuckle themself!", + "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" ) - if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DISABLED & INCAPACITATION_KNOCKDOWN)) - if(!legcuffed) + if(do_after(src, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) + if(!buckled) return - visible_message( - "\The [src] manages to remove \the [legcuffed]!", - "You successfully remove \the [legcuffed]." - ) - drop_from_inventory(legcuffed) - legcuffed = null - update_inv_legcuffed() + visible_message("[src] manages to unbuckle themself!", + "You successfully unbuckle yourself.") + buckled.user_unbuckle_mob(src, src) /mob/living/carbon/proc/can_break_cuffs() if(HULK in mutations) return 1 - -/mob/living/carbon/proc/break_handcuffs() - visible_message( - "[src] is trying to break \the [handcuffed]!", - "You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)" - ) - - if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if(!handcuffed || buckled) - return - - visible_message( - "[src] manages to break \the [handcuffed]!", - "You successfully break your [handcuffed.name]." - ) - - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - - qdel(handcuffed) - handcuffed = null - if(buckled && buckled.buckle_require_restraints) - buckled.unbuckle_mob() - update_inv_handcuffed() - -/mob/living/carbon/proc/break_legcuffs() - to_chat(src, "You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)") - visible_message("[src] is trying to break the legcuffs!") - - if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) - if(!legcuffed || buckled) - return - - visible_message( - "[src] manages to break the legcuffs!", - "You successfully break your legcuffs." - ) - - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - - qdel(legcuffed) - legcuffed = null - update_inv_legcuffed() - -/mob/living/carbon/escape_buckle() - if(!buckled) return - - if(!restrained()) - ..() - else - setClickCooldown(100) - visible_message( - "[usr] attempts to unbuckle themself!", - "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" - ) - - if(do_after(usr, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) - if(!buckled) - return - visible_message("[usr] manages to unbuckle themself!", - "You successfully unbuckle yourself.") - buckled.user_unbuckle_mob(src, src) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index c1ec71a84e..2fdfcf4c56 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -160,9 +160,14 @@ //Eyes if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own SetBlinded(1) + throw_alert("blind", /obj/screen/alert/blind) else if(eye_blind) //blindness, heals slowly over time AdjustBlinded(-1) - else if(eye_blurry) //blurry eyes heal slowly + throw_alert("blind", /obj/screen/alert/blind) + else + clear_alert("blind") + + if(eye_blurry) //blurry eyes heal slowly eye_blurry = max(eye_blurry-1, 0) //Ears diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index d74f43bced..316bb2be88 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -860,53 +860,25 @@ default behaviour is: process_resist() /mob/living/proc/process_resist() - //Getting out of someone's inventory. - if(istype(src.loc, /obj/item/weapon/holder)) - escape_inventory(src.loc) - return - //unbuckling yourself if(buckled) - spawn() escape_buckle() + resist_buckle() return TRUE - //Breaking out of a locker? - if( src.loc && (istype(src.loc, /obj/structure/closet)) ) - var/obj/structure/closet/C = loc - spawn() C.mob_breakout(src) + if(isobj(loc)) + var/obj/C = loc + C.container_resist(src) return TRUE - if(istype(loc,/obj/item/clothing)) - spawn() escape_clothes(loc) + else if(canmove) + if(on_fire) + resist_fire() //stop, drop, and roll + else + resist_restraints() if(attempt_vr(src,"vore_process_resist",args)) return TRUE //VOREStation Code -/mob/living/proc/escape_inventory(obj/item/weapon/holder/H) - if(H != src.loc) return - - var/mob/M = H.loc //Get our mob holder (if any). - - if(istype(M)) - M.drop_from_inventory(H) - to_chat(M, "\The [H] wriggles out of your grip!") - to_chat(src, "You wriggle out of \the [M]'s grip!") - - // Update whether or not this mob needs to pass emotes to contents. - for(var/atom/A in M.contents) - if(istype(A,/mob/living/simple_mob/animal/borer) || istype(A,/obj/item/weapon/holder)) - return - - else if(istype(H.loc,/obj/item/clothing/accessory/holster)) - var/obj/item/clothing/accessory/holster/holster = H.loc - if(holster.holstered == H) - holster.clear_holster() - to_chat(src, "You extricate yourself from \the [holster].") - H.forceMove(get_turf(H)) - else if(istype(H.loc,/obj/item)) - to_chat(src, "You struggle free of \the [H.loc].") - H.forceMove(get_turf(H)) - -/mob/living/proc/escape_buckle() +/mob/living/proc/resist_buckle() if(buckled) if(istype(buckled, /obj/vehicle)) var/obj/vehicle/vehicle = buckled @@ -922,6 +894,12 @@ default behaviour is: if(resisting) visible_message("[src] resists!") +/mob/living/proc/resist_fire() + return + +/mob/living/proc/resist_restraints() + return + /mob/living/verb/lay_down() set name = "Rest" set category = "IC" @@ -1335,3 +1313,11 @@ default behaviour is: BRAIN:[getBrainLoss()] "} + +/mob/living/update_gravity(has_gravity) + if(!ticker) + return + if(has_gravity) + clear_alert("weightless") + else + throw_alert("weightless", /obj/screen/alert/weightless) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 428cff3659..b74edbcbba 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -328,6 +328,7 @@ O.loc = src src.embedded += O src.verbs += /mob/proc/yank_out_object + throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) //This is called when the mob is thrown into a dense turf /mob/living/proc/turf_collision(var/turf/T, var/speed) @@ -366,6 +367,7 @@ if(fire_stacks > 0 && !on_fire) on_fire = 1 handle_light() + throw_alert("fire", /obj/screen/alert/fire) update_fire() /mob/living/proc/ExtinguishMob() @@ -373,6 +375,7 @@ on_fire = 0 fire_stacks = 0 handle_light() + clear_alert("fire") update_fire() if(has_modifier_of_type(/datum/modifier/fire)) diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm index 0071586458..5de4e9c3e2 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -11,6 +11,7 @@ return laws.zeroth_law != null /mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg, notify = TRUE) + throw_alert("newlaw", /obj/screen/alert/newlaw) laws_sanity_check() laws.set_zeroth_law(law, law_borg) if(notify) @@ -76,6 +77,7 @@ log_and_message_admins("cleared the supplied laws of [src]") /mob/living/silicon/proc/notify_of_law_change(message) + throw_alert("newlaw", /obj/screen/alert/newlaw) if((last_law_notification + 1 SECOND) > world.time) return last_law_notification = world.time diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index dbffa182fe..74aad9bae0 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -248,35 +248,22 @@ src.mind.special_role = "traitor" traitors.current_antagonists |= 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" - else - src.cells.icon_state = "charge-empty" + update_cell() - if(bodytemp) - switch(src.bodytemperature) //310.055 optimal body temp - if(335 to INFINITY) - src.bodytemp.icon_state = "temp2" - if(320 to 335) - src.bodytemp.icon_state = "temp1" - if(300 to 320) - src.bodytemp.icon_state = "temp0" - if(260 to 300) - src.bodytemp.icon_state = "temp-1" + var/turf/T = get_turf(src) + var/datum/gas_mixture/environment = T.return_air() + if(environment) + switch(environment.temperature) //310.055 optimal body temp + if(400 to INFINITY) + throw_alert("temp", /obj/screen/alert/hot/robot, 2) + if(360 to 400) + throw_alert("temp", /obj/screen/alert/hot/robot, 1) + if(260 to 360) + clear_alert("temp") + if(200 to 260) + throw_alert("temp", /obj/screen/alert/cold/robot, 1) else - src.bodytemp.icon_state = "temp-2" + throw_alert("temp", /obj/screen/alert/cold/robot, 2) //Oxygen and fire does nothing yet!! // if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]" @@ -298,20 +285,43 @@ if(client && !client.adminobs) reset_view(null) + if(emagged) + throw_alert("hacked", /obj/screen/alert/hacked) + else + clear_alert("hacked") + return 1 +/mob/living/silicon/robot/proc/update_cell() + if(cell) + var/cellcharge = cell.charge/cell.maxcharge + switch(cellcharge) + if(0.75 to INFINITY) + clear_alert("charge") + if(0.5 to 0.75) + throw_alert("charge", /obj/screen/alert/lowcell, 1) + if(0.25 to 0.5) + throw_alert("charge", /obj/screen/alert/lowcell, 2) + if(0.01 to 0.25) + throw_alert("charge", /obj/screen/alert/lowcell, 3) + else + throw_alert("charge", /obj/screen/alert/emptycell) + else + throw_alert("charge", /obj/screen/alert/nocell) + + /mob/living/silicon/robot/proc/update_items() - if (src.client) - src.client.screen -= src.contents - for(var/obj/I in src.contents) + if(client) + client.screen -= contents + for(var/obj/I in contents) if(I && !(istype(I,/obj/item/weapon/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi))) - src.client.screen += I - if(src.module_state_1) - src.module_state_1:screen_loc = ui_inv1 - if(src.module_state_2) - src.module_state_2:screen_loc = ui_inv2 - if(src.module_state_3) - src.module_state_3:screen_loc = ui_inv3 + client.screen += I + if(module_state_1) + module_state_1:screen_loc = ui_inv1 + if(module_state_2) + module_state_2:screen_loc = ui_inv2 + if(module_state_3) + module_state_3:screen_loc = ui_inv3 updateicon() /mob/living/silicon/robot/proc/process_killswitch() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9a6c384e0c..63267c6e09 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -34,7 +34,6 @@ //Hud stuff - var/obj/screen/cells = null var/obj/screen/inv1 = null var/obj/screen/inv2 = null var/obj/screen/inv3 = null @@ -935,6 +934,10 @@ // They stay locked down if their wire is cut. if(wires.LockedCut()) state = 1 + if(state) + throw_alert("locked", /obj/screen/alert/locked) + else + clear_alert("locked") lockdown = state lockcharge = state update_canmove() diff --git a/code/modules/mob/living/simple_mob/life.dm b/code/modules/mob/living/simple_mob/life.dm index d4ed684deb..781589dad1 100644 --- a/code/modules/mob/living/simple_mob/life.dm +++ b/code/modules/mob/living/simple_mob/life.dm @@ -52,19 +52,14 @@ healths.icon_state = "health7" //Updates the nutrition while we're here - if(nutrition_icon) - var/food_per = (nutrition / initial(nutrition)) * 100 - switch(food_per) - if(90 to INFINITY) - nutrition_icon.icon_state = "nutrition0" - if(75 to 90) - nutrition_icon.icon_state = "nutrition1" - if(50 to 75) - nutrition_icon.icon_state = "nutrition2" - if(25 to 50) - nutrition_icon.icon_state = "nutrition3" - if(0 to 25) - nutrition_icon.icon_state = "nutrition4" + var/food_per = (nutrition / initial(nutrition)) * 100 + switch(food_per) + if(90 to INFINITY) + clear_alert("nutrition") + if(50 to 90) + throw_alert("nutrition", /obj/screen/alert/hungry) + if(-INFINITY to 50) + throw_alert("nutrition", /obj/screen/alert/starving) // Override for special bullshit. /mob/living/simple_mob/proc/handle_special() @@ -91,54 +86,55 @@ if( abs(Environment.temperature - bodytemperature) > temperature_range ) //VOREStation Edit: heating adjustments bodytemperature += ((Environment.temperature - bodytemperature) / 5) - if(min_oxy) - if(Environment.gas["oxygen"] < min_oxy) - atmos_unsuitable = 1 - if(max_oxy) - if(Environment.gas["oxygen"] > max_oxy) - atmos_unsuitable = 1 - if(min_tox) - if(Environment.gas["phoron"] < min_tox) - atmos_unsuitable = 2 - if(max_tox) - if(Environment.gas["phoron"] > max_tox) - atmos_unsuitable = 2 - if(min_n2) - if(Environment.gas["nitrogen"] < min_n2) - atmos_unsuitable = 1 - if(max_n2) - if(Environment.gas["nitrogen"] > max_n2) - atmos_unsuitable = 1 - if(min_co2) - if(Environment.gas["carbon_dioxide"] < min_co2) - atmos_unsuitable = 1 - if(max_co2) - if(Environment.gas["carbon_dioxide"] > max_co2) - atmos_unsuitable = 1 + if(min_oxy && Environment.gas["oxygen"] < min_oxy) + atmos_unsuitable = 1 + throw_alert("oxy", /obj/screen/alert/not_enough_oxy) + else if(max_oxy && Environment.gas["oxygen"] > max_oxy) + atmos_unsuitable = 1 + throw_alert("oxy", /obj/screen/alert/too_much_oxy) + else + clear_alert("oxy") + + if(min_tox && Environment.gas["phoron"] < min_tox) + atmos_unsuitable = 2 + throw_alert("tox_in_air", /obj/screen/alert/not_enough_tox) + else if(max_tox && Environment.gas["phoron"] > max_tox) + atmos_unsuitable = 2 + throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) + else + clear_alert("tox_in_air") + + if(min_n2 && Environment.gas["nitrogen"] < min_n2) + atmos_unsuitable = 1 + throw_alert("n2o", /obj/screen/alert/not_enough_nitro) + else if(max_n2 && Environment.gas["nitrogen"] > max_n2) + atmos_unsuitable = 1 + throw_alert("n2o", /obj/screen/alert/too_much_nitro) + else + clear_alert("n2o") + + if(min_co2 && Environment.gas["carbon_dioxide"] < min_co2) + atmos_unsuitable = 1 + throw_alert("co2", /obj/screen/alert/not_enough_co2) + else if(max_co2 && Environment.gas["carbon_dioxide"] > max_co2) + atmos_unsuitable = 1 + throw_alert("co2", /obj/screen/alert/too_much_co2) + else + clear_alert("co2") //Atmos effect if(bodytemperature < minbodytemp) - fire_alert = 2 adjustFireLoss(cold_damage_per_tick) - if(fire) - fire.icon_state = "fire1" + throw_alert("temp", /obj/screen/alert/cold, 3) else if(bodytemperature > maxbodytemp) - fire_alert = 1 adjustFireLoss(heat_damage_per_tick) - if(fire) - fire.icon_state = "fire2" + throw_alert("temp", /obj/screen/alert/hot, 3) else - fire_alert = 0 - if(fire) - fire.icon_state = "fire0" + clear_alert("temp") if(atmos_unsuitable) adjustOxyLoss(unsuitable_atoms_damage) - if(oxygen) - oxygen.icon_state = "oxy1" - else if(oxygen) - if(oxygen) - oxygen.icon_state = "oxy0" + else adjustOxyLoss(-unsuitable_atoms_damage) diff --git a/code/modules/mob/living/simple_mob/simple_hud.dm b/code/modules/mob/living/simple_mob/simple_hud.dm index fe851648b4..c16af17ae9 100644 --- a/code/modules/mob/living/simple_mob/simple_hud.dm +++ b/code/modules/mob/living/simple_mob/simple_hud.dm @@ -159,53 +159,7 @@ healths.screen_loc = ui_health hud_elements |= healths - //Oxygen dep icon - oxygen = new /obj/screen() - oxygen.icon = ui_style - oxygen.icon_state = "oxy0" - oxygen.name = "oxygen" - oxygen.screen_loc = ui_oxygen - hud_elements |= oxygen - //Toxins present icon - toxin = new /obj/screen() - toxin.icon = ui_style - toxin.icon_state = "tox0" - toxin.name = "toxin" - toxin.screen_loc = ui_toxin - hud_elements |= toxin - - //Fire warning - fire = new /obj/screen() - fire.icon = ui_style - fire.icon_state = "fire0" - fire.name = "fire" - fire.screen_loc = ui_fire - hud_elements |= fire - - //Pressure warning - pressure = new /obj/screen() - pressure.icon = ui_style - pressure.icon_state = "pressure0" - pressure.name = "pressure" - pressure.screen_loc = ui_pressure - hud_elements |= pressure - - //Body temp warning - bodytemp = new /obj/screen() - bodytemp.icon = ui_style - bodytemp.icon_state = "temp0" - bodytemp.name = "body temperature" - bodytemp.screen_loc = ui_temp - hud_elements |= bodytemp - - //Nutrition status - nutrition_icon = new /obj/screen() - nutrition_icon.icon = ui_style - nutrition_icon.icon_state = "nutrition0" - nutrition_icon.name = "nutrition" - nutrition_icon.screen_loc = ui_nutrition - hud_elements |= nutrition_icon pain = new /obj/screen( null ) diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 3b063e1ac4..82d16472c1 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -67,7 +67,6 @@ var/maxbodytemp = 350 // Maximum of above var/heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp var/cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - var/fire_alert = 0 // 0 = fine, 1 = hot, 2 = cold var/min_oxy = 5 // Oxygen in moles, minimum, 0 is 'no minimum' var/max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum' diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 34a7035d22..e83f10116a 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -51,7 +51,6 @@ else client.eye = src client.perspective = MOB_PERSPECTIVE - reload_fullscreen() // Reload any fullscreen overlays this mob has. add_click_catcher() update_client_color() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6232f90dd7..4d3187bdd2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -22,16 +22,10 @@ pullin = null purged = null internals = null - oxygen = null i_select = null m_select = null - toxin = null - fire = null - bodytemp = null healths = null throw_icon = null - nutrition_icon = null - pressure = null pain = null item_use_icon = null gun_move_icon = null @@ -962,6 +956,7 @@ mob/proc/yank_out_object() valid_objects = get_visible_implants(0) if(valid_objects.len == 1) //Yanking out last object - removing verb. src.verbs -= /mob/proc/yank_out_object + clear_alert("embeddedobject") if(ishuman(src)) var/mob/living/carbon/human/H = src @@ -1233,3 +1228,11 @@ mob/proc/yank_out_object() /mob/proc/GetAltName() return "" + +/mob/proc/get_ghost(even_if_they_cant_reenter = 0) + if(mind) + return mind.get_ghost(even_if_they_cant_reenter) + +/mob/proc/grab_ghost(force) + if(mind) + return mind.grab_ghost(force = force) \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 111bcab799..375dd0a755 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -16,16 +16,10 @@ var/obj/screen/pullin = null var/obj/screen/purged = 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/pain = null var/obj/screen/gun/item/item_use_icon = null var/obj/screen/gun/radio/radio_use_icon = null diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 22249811c8..7f4c48f89f 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -469,6 +469,8 @@ This function completely restores a damaged organ to perfect condition. if(!istype(implanted_object,/obj/item/weapon/implant) && !istype(implanted_object,/obj/item/device/nif)) // We don't want to remove REAL implants. Just shrapnel etc. //VOREStation Edit - NIFs pls implanted_object.loc = get_turf(src) implants -= implanted_object + if(!owner.has_embedded_objects()) + owner.clear_alert("embeddedobject") if(owner && !ignore_prosthetic_prefs) if(owner.client && owner.client.prefs && owner.client.prefs.real_name == owner.real_name) @@ -1184,6 +1186,7 @@ Note that amputating the affected organ does in fact remove the infection from t implants += W owner.embedded_flag = 1 owner.verbs += /mob/proc/yank_out_object + owner.throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) W.add_blood(owner) if(ismob(W.loc)) var/mob/living/H = W.loc @@ -1372,4 +1375,11 @@ Note that amputating the affected organ does in fact remove the infection from t if(bling.body_parts_covered & src.body_part) covering_clothing |= bling - return covering_clothing \ No newline at end of file + return covering_clothing + +/mob/living/carbon/human/proc/has_embedded_objects() + . = 0 + for(var/obj/item/organ/external/L in organs) + for(var/obj/item/I in L.implants) + if(!istype(I,/obj/item/weapon/implant) && !istype(I,/obj/item/device/nif)) + return 1 \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index e7e6eb6b4b..624d94443c 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -206,6 +206,8 @@ user.visible_message("[user] takes something out of incision on [target]'s [affected.name] with \the [tool]!", \ "You take [obj] out of incision on [target]'s [affected.name]s with \the [tool]!" ) affected.implants -= obj + if(!target.has_embedded_objects()) + target.clear_alert("embeddedobject") BITSET(target.hud_updateflag, IMPLOYAL_HUD) diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 9cc0dd7224..373da4d551 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -720,3 +720,6 @@ dupe.emote_lists[K] += I return dupe + +/obj/belly/container_resist(mob/M) + return relay_resist(M) \ No newline at end of file diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index e73eff48f3..492482eb5c 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -185,10 +185,11 @@ // /mob/living/proc/vore_process_resist() //Are we resisting from inside a belly? - if(isbelly(loc)) - var/obj/belly/B = loc - B.relay_resist(src) - return TRUE //resist() on living does this TRUE thing. + // if(isbelly(loc)) + // var/obj/belly/B = loc + // B.relay_resist(src) + // return TRUE //resist() on living does this TRUE thing. + // Note: This is no longer required, as the refactors to resisting allow bellies to just define container_resist //Other overridden resists go here return FALSE @@ -509,51 +510,6 @@ "oxygen" = 21, "nitrogen" = 79) -// Procs for micros stuffed into boots and the like to escape from them -/mob/living/proc/escape_clothes(obj/item/clothing/C) - ASSERT(loc == C) - - if(ishuman(C.loc)) //In a /mob/living/carbon/human - var/mob/living/carbon/human/H = C.loc - if(H.shoes == C) //Being worn - to_chat(src," You start to climb around the larger creature's feet and ankles!") - to_chat(H,"Something is trying to climb out of your [C]!") - var/original_loc = H.loc - for(var/escape_time = 100,escape_time > 0,escape_time--) - if(H.loc != original_loc) - to_chat(src,"You're pinned back underfoot!") - to_chat(H,"You pin the escapee back underfoot!") - return - if(loc != C) - return - sleep(1) - - to_chat(src,"You manage to escape \the [C]!") - to_chat(H,"Somone has climbed out of your [C]!") - forceMove(H.loc) - - else //Being held by a human - to_chat(src,"You start to climb out of \the [C]!") - to_chat(H,"Something is trying to climb out of your [C]!") - for(var/escape_time = 60,escape_time > 0,escape_time--) - if(H.shoes == C) - to_chat(src,"You're pinned underfoot!") - to_chat(H,"You pin the escapee underfoot!") - return - if(loc != C) - return - sleep(1) - to_chat(src,"You manage to escape \the [C]!") - to_chat(H,"Somone has climbed out of your [C]!") - forceMove(H.loc) - - to_chat(src,"You start to climb out of \the [C]!") - sleep(50) - if(loc == C) - to_chat(src,"You climb out of \the [C]!") - forceMove(C.loc) - return - /mob/living/proc/feed_grabbed_to_self_falling_nom(var/mob/living/user, var/mob/living/prey) var/belly = user.vore_selected return perform_the_nom(user, prey, user, belly, delay = 1) //1/10th of a second is probably fine. diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi index a2519bf1d5a10cf18c2522186e80fba99759a164..e0ff03e0bfe7c155a80b96577777c4d0349f3049 100644 GIT binary patch delta 12937 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 delta 14682 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%0AJej1|SIIpQ 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 D*=7C} diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi new file mode 100644 index 0000000000000000000000000000000000000000..32921f321304f77e2ef4e8708b4fd5c9e160c73c GIT binary patch literal 119574 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 literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index 489d0deb3f..72e5d5e390 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -149,6 +149,7 @@ #include "code\_onclick\hud\ability_screen_objects.dm" #include "code\_onclick\hud\action.dm" #include "code\_onclick\hud\ai.dm" +#include "code\_onclick\hud\alert.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\gun_mode.dm" From 17c80270e4ddfeeebe43b6aed7ba74fddb7e511f Mon Sep 17 00:00:00 2001 From: ShadowLarkens Date: Wed, 13 May 2020 19:53:42 -0700 Subject: [PATCH 2/2] Fix broken span --- code/modules/mob/holder.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 707503dab6..1315c94a47 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -93,7 +93,7 @@ var/list/holder_mob_icon_cache = list() var/mob/M = loc if(istype(M)) M.drop_from_inventory(src) - to_chat(M, "\The [held] wriggles out of your grip!") + to_chat(M, "\The [held] wriggles out of your grip!") to_chat(held, "You wiggle out of [M]'s grip!") else if(istype(loc, /obj/item/clothing/accessory/holster)) var/obj/item/clothing/accessory/holster/holster = loc