diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 7779528a974..7a1d71821ff 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -171,3 +171,5 @@ ///from living/flash_act(), when a mob is successfully flashed. #define COMSIG_MOB_FLASHED "mob_flashed" +/// from mob/get_status_tab_items(): (list/items) +#define COMSIG_MOB_GET_STATUS_TAB_ITEMS "mob_get_status_tab_items" diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 29e088394a1..15d8be04e13 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(statpanels) ///how many subsystem fires between most tab updates var/default_wait = 10 ///how many subsystem fires between updates of the status tab - var/status_wait = 6 + var/status_wait = 2 ///how many subsystem fires between updates of the MC tab var/mc_wait = 5 ///how many full runs this subsystem has completed. used for variable rate refreshes. diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 391be310aa6..3f83bbf2905 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -68,10 +68,18 @@ /// Called by carbons after they connect the tank to their breathing apparatus. /obj/item/tank/proc/after_internals_opened(mob/living/carbon/carbon_target) breathing_mob = carbon_target + RegisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) /// Called by carbons after they disconnect the tank from their breathing apparatus. /obj/item/tank/proc/after_internals_closed(mob/living/carbon/carbon_target) breathing_mob = null + UnregisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + +/obj/item/tank/proc/get_status_tab_item(mob/living/source, list/items) + SIGNAL_HANDLER + items += "Internal Atmosphere Info: [name]" + items += "Tank Pressure: [air_contents.return_pressure()] kPa" + items += "Distribution Pressure: [distribute_pressure] kPa" /// Attempts to toggle the mob's internals on or off using this tank. Returns TRUE if successful. /obj/item/tank/proc/toggle_internals(mob/living/carbon/mob_target) @@ -106,7 +114,6 @@ return /obj/item/tank/Destroy() - UnregisterSignal(air_contents, COMSIG_GASMIX_MERGED) air_contents = null STOP_PROCESSING(SSobj, src) return ..() @@ -121,7 +128,7 @@ . += span_notice("If you want any more information you'll need to get closer.") return - . += span_notice("The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.") + . += span_notice("The pressure gauge reads [round(air_contents.return_pressure(),0.01)] kPa.") var/celsius_temperature = air_contents.temperature-T0C var/descriptive diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index fca6bb55851..ff9b03559a0 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -142,6 +142,7 @@ RegisterSignal(living_mob, COMSIG_MOB_LOGIN, PROC_REF(on_login)) RegisterSignal(living_mob, COMSIG_LIVING_LIFE, PROC_REF(on_life)) RegisterSignal(living_mob, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_fullhealed)) + RegisterSignal(living_mob, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) RegisterSignals(living_mob, list(COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON), PROC_REF(on_click_sting)) if(living_mob.hud_used) @@ -199,7 +200,7 @@ /datum/antagonist/changeling/remove_innate_effects(mob/living/mob_override) var/mob/living/living_mob = mob_override || owner.current handle_clown_mutation(living_mob, removing = FALSE) - UnregisterSignal(living_mob, list(COMSIG_MOB_LOGIN, COMSIG_LIVING_LIFE, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON)) + UnregisterSignal(living_mob, list(COMSIG_MOB_LOGIN, COMSIG_LIVING_LIFE, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_GET_STATUS_TAB_ITEMS, COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON)) if(living_mob.hud_used) var/datum/hud/hud_used = living_mob.hud_used @@ -305,6 +306,11 @@ return COMSIG_MOB_CANCEL_CLICKON +/datum/antagonist/changeling/proc/get_status_tab_item(mob/living/source, list/items) + SIGNAL_HANDLER + items += "Chemical Storage: [chem_charges]/[total_chem_storage]" + items += "Absorbed DNA: [absorbed_count]" + /* * Adjust the chem charges of the ling by [amount] * and clamp it between 0 and override_cap (if supplied) or total_chem_storage (if no override supplied) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 8a2607fa341..5e3ad6558a0 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -14,6 +14,13 @@ . += "Use it in hand to turn it off/on and Alt-click to swap between \"detect death\" mode and \"detect critical state\" mode." . += "[src.scanning ? "The sensor is on and you can see [health_scan] displayed on the screen" : "The sensor is off"]." +/obj/item/assembly/health/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change) + . = ..() + if(iscarbon(old_loc)) + UnregisterSignal(old_loc, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + if(iscarbon(loc)) + RegisterSignal(loc, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) + /obj/item/assembly/health/activate() if(!..()) return FALSE//Cooldown check @@ -76,3 +83,7 @@ else balloon_alert(user, span_warning("secure it first!")) toggle_scan() + +/obj/item/assembly/health/proc/get_status_tab_item(mob/living/carbon/source, list/items) + SIGNAL_HANDLER + items += "Health: [round((source.health / source.maxHealth) * 100)]%" diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 34fa23f3669..59fdcc016bc 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -64,19 +64,26 @@ cell = new cell(src) /// Start Processing on the space suit when it is worn to heat the wearer -/obj/item/clothing/suit/space/equipped(mob/user, slot) +/obj/item/clothing/suit/space/equipped(mob/living/user, slot) . = ..() if(slot & ITEM_SLOT_OCLOTHING) // Check that the slot is valid START_PROCESSING(SSobj, src) update_hud_icon(user) // update the hud + RegisterSignal(user, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) // On removal stop processing, save battery -/obj/item/clothing/suit/space/dropped(mob/user) +/obj/item/clothing/suit/space/dropped(mob/living/user) . = ..() STOP_PROCESSING(SSobj, src) - var/mob/living/carbon/human/human = user - if(istype(human)) - human.update_spacesuit_hud_icon("0") + UnregisterSignal(user, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + var/mob/living/carbon/carbon_user = user + if(istype(carbon_user)) + carbon_user.update_spacesuit_hud_icon("0") + +/obj/item/clothing/suit/space/proc/get_status_tab_item(mob/living/source, list/items) + SIGNAL_HANDLER + items += "Thermal Regulator: [thermal_on ? "On" : "Off"]" + items += "Cell Charge: [cell ? "[round(cell.percent(), 0.1)]%" : "No Cell!"]" // Space Suit temperature regulation and power usage /obj/item/clothing/suit/space/process(delta_time) diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index d1822221d2b..ca2ba755cce 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -39,11 +39,8 @@ INITIALIZE_IMMEDIATE(/mob/dead) /mob/dead/get_status_tab_items() . = ..() - . += "" - if(SSticker.HasRoundStarted()) return - var/time_remaining = SSticker.GetTimeLeft() if(time_remaining > 0) . += "Time To Start: [round(time_remaining/10)]s" diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index 1c08976beb0..f20e5cf3b4b 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -185,3 +185,8 @@ if(user.incapacitated()) return return relaydrive(user, direction) + +/mob/living/basic/get_status_tab_items() + . = ..() + . += "Health: [round((health / maxHealth) * 100)]%" + . += "Combat Mode: [combat_mode ? "On" : "Off"]" diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index f35c2f6bc1b..c3ada1aa5e3 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -73,10 +73,6 @@ /mob/living/carbon/alien/reagent_check(datum/reagent/R, delta_time, times_fired) //can metabolize all reagents return FALSE -/mob/living/carbon/alien/get_status_tab_items() - . = ..() - . += "Combat mode: [combat_mode ? "On" : "Off"]" - /mob/living/carbon/alien/getTrail() if(getBruteLoss() < 200) return pick (list("xltrails_1", "xltrails2")) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 5bdddf2e818..65c477925a7 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -72,12 +72,18 @@ if(isalien(organ_owner)) var/mob/living/carbon/alien/target_alien = organ_owner target_alien.updatePlasmaDisplay() + RegisterSignal(organ_owner, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) /obj/item/organ/internal/alien/plasmavessel/Remove(mob/living/carbon/organ_owner, special = FALSE) ..() if(isalien(organ_owner)) var/mob/living/carbon/alien/organ_owner_alien = organ_owner organ_owner_alien.updatePlasmaDisplay() + UnregisterSignal(organ_owner, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + +/obj/item/organ/internal/alien/plasmavessel/proc/get_status_tab_item(mob/living/carbon/source, list/items) + SIGNAL_HANDLER + items += "Plasma Stored: [stored_plasma]/[max_plasma]" #define QUEEN_DEATH_DEBUFF_DURATION 2400 @@ -332,7 +338,7 @@ /obj/item/organ/internal/stomach/alien/proc/eject_stomach(list/turf/targets, spit_range, content_speed, particle_delay, particle_count=4) var/atom/spit_as = owner || src - /// Throw out the stuff in our stomach + // Throw out the stuff in our stomach for(var/atom/movable/thing as anything in stomach_contents) thing.forceMove(spit_as.drop_location()) if(length(targets)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ab8fdf658be..6a1fe23b05d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -40,7 +40,7 @@ if(!isnum(held_index)) CRASH("You passed [held_index] into swap_hand instead of a number. WTF man") - + var/oindex = active_hand_index active_hand_index = held_index if(hud_used) @@ -406,17 +406,6 @@ var/turf/target = get_turf(loc) I.safe_throw_at(target,I.throw_range,I.throw_speed,src, force = move_force) -/mob/living/carbon/get_status_tab_items() - . = ..() - var/obj/item/organ/internal/alien/plasmavessel/vessel = getorgan(/obj/item/organ/internal/alien/plasmavessel) - if(vessel) - . += "Plasma Stored: [vessel.stored_plasma]/[vessel.max_plasma]" - var/obj/item/organ/internal/heart/vampire/darkheart = getorgan(/obj/item/organ/internal/heart/vampire) - if(darkheart) - . += "Current blood level: [blood_volume]/[BLOOD_VOLUME_MAXIMUM]." - if(locate(/obj/item/assembly/health) in src) - . += "Health: [health]" - /mob/living/carbon/attack_ui(slot, params) if(!has_hand_for_held_index(active_hand_index)) return 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 57835a277af..188dca7954d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -78,26 +78,6 @@ //...and display them. add_to_all_human_data_huds() -/mob/living/carbon/human/get_status_tab_items() - . = ..() - var/obj/item/tank/target_tank = internal || external - if(target_tank) - var/datum/gas_mixture/internal_air = target_tank.return_air() - . += "" - . += "Internal Atmosphere Info: [target_tank.name]" - . += "Tank Pressure: [internal_air.return_pressure()]" - . += "Distribution Pressure: [target_tank.distribute_pressure]" - if(istype(wear_suit, /obj/item/clothing/suit/space)) - var/obj/item/clothing/suit/space/S = wear_suit - . += "Thermal Regulator: [S.thermal_on ? "on" : "off"]" - . += "Cell Charge: [S.cell ? "[round(S.cell.percent(), 0.1)]%" : "!invalid!"]" - if(mind) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - . += "" - . += "Chemical Storage: [changeling.chem_charges]/[changeling.total_chem_storage]" - . += "Absorbed DNA: [changeling.absorbed_count]" - /mob/living/carbon/human/reset_perspective(atom/new_eye, force_reset = FALSE) if(dna?.species?.prevent_perspective_change && !force_reset) // This is in case a species needs to prevent perspective changes in certain cases, like Dullahans preventing perspective changes when they're looking through their head. update_fullscreen() diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index ad6f5ca04ff..d69bc4c95b1 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -195,5 +195,17 @@ name = "vampire heart" color = "#1C1C1C" +/obj/item/organ/internal/heart/vampire/Insert(mob/living/carbon/receiver, special, drop_if_replaced) + . = ..() + RegisterSignal(receiver, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) + +/obj/item/organ/internal/heart/vampire/Remove(mob/living/carbon/heartless, special) + . = ..() + UnregisterSignal(heartless, COMSIG_MOB_GET_STATUS_TAB_ITEMS) + +/obj/item/organ/internal/heart/vampire/proc/get_status_tab_item(mob/living/carbon/source, list/items) + SIGNAL_HANDLER + items += "Blood Level: [source.blood_volume]/[BLOOD_VOLUME_MAXIMUM]" + #undef VAMPIRES_PER_HOUSE #undef VAMP_DRAIN_AMOUNT diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 57e9bd47f72..35da7ead15a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -266,15 +266,11 @@ /mob/living/silicon/robot/get_status_tab_items() . = ..() - . += "" if(cell) . += "Charge Left: [cell.charge]/[cell.maxcharge]" else . += "No Cell Inserted!" - if(model) - for(var/datum/robot_energy_storage/st in model.storages) - . += "[st.name]: [st.energy]/[st.max_energy]" if(connected_ai) . += "Master AI: [connected_ai.name]" diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 528d5acc993..8b23311053a 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -889,11 +889,15 @@ var/recharge_rate = 1000 var/energy -/datum/robot_energy_storage/New(obj/item/robot_model/R = null) +/datum/robot_energy_storage/New(obj/item/robot_model/model) energy = max_energy - if(R) - R.storages |= src - return + if(model) + model.storages |= src + RegisterSignal(model.robot, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item)) + +/datum/robot_energy_storage/proc/get_status_tab_item(mob/living/silicon/robot/source, list/items) + SIGNAL_HANDLER + items += "[name]: [energy]/[max_energy]" /datum/robot_energy_storage/proc/use_charge(amount) if (energy >= amount) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 84d204d8d7f..b558453d7f5 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -159,9 +159,7 @@ /mob/living/simple_animal/parrot/get_status_tab_items() . = ..() - . += "" . += "Held Item: [held_item]" - . += "Combat mode: [combat_mode ? "On" : "Off"]" /mob/living/simple_animal/parrot/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, list/message_mods = list(), message_range) . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 57a4354783b..1e574f433a5 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -449,8 +449,8 @@ /mob/living/simple_animal/get_status_tab_items() . = ..() - . += "" . += "Health: [round((health / maxHealth) * 100)]%" + . += "Combat Mode: [combat_mode ? "On" : "Off"]" /mob/living/simple_animal/proc/drop_loot() if(loot.len) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a723f46b65b..20c3d54bdf1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -831,7 +831,8 @@ /// Adds this list to the output to the stat browser /mob/proc/get_status_tab_items() - . = list() + . = list("") //we want to offset unique stuff from standard stuff + SEND_SIGNAL(src, COMSIG_MOB_GET_STATUS_TAB_ITEMS, .) /** * Convert a list of spells into a displyable list for the statpanel