From c590958f2db97987d66f646bd3f062c778a444a8 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 10 Dec 2015 01:01:54 -0500 Subject: [PATCH 01/21] Hud refactor --- code/__DEFINES/hud.dm | 46 ++- code/__HELPERS/mobs.dm | 22 -- code/datums/hud.dm | 84 ++++++ code/datums/mind.dm | 7 +- code/defines/procs/hud.dm | 94 ------- code/game/atoms.dm | 6 + code/game/data_huds.dm | 263 ++++++++++++++++++ code/game/gamemodes/antag_hud.dm | 49 ++++ .../game/gamemodes/autotraitor/autotraitor.dm | 2 +- .../gamemodes/changeling/powers/revive.dm | 6 +- code/game/gamemodes/cult/cult.dm | 43 +-- code/game/gamemodes/nations/nations.dm | 100 +++---- code/game/gamemodes/nuclear/nuclear.dm | 42 +-- code/game/gamemodes/revolution/revolution.dm | 109 +------- .../gamemodes/revolution/rp_revolution.dm | 1 - code/game/gamemodes/shadowling/shadowling.dm | 48 +--- code/game/gamemodes/vampire/vampire.dm | 50 +--- code/game/gamemodes/wizard/artefact.dm | 1 + code/game/gamemodes/wizard/wizard.dm | 13 + code/game/jobs/job/security.dm | 6 + code/game/jobs/job/supervisor.dm | 5 + code/game/machinery/cloning.dm | 6 +- code/game/machinery/computer/security.dm | 7 +- code/game/mecha/mecha.dm | 18 ++ code/game/mecha/medical/odysseus.dm | 30 +- .../objects/items/weapons/implants/implant.dm | 13 +- .../items/weapons/implants/implanter.dm | 2 +- code/modules/clothing/clothing.dm | 12 +- code/modules/clothing/glasses/glasses.dm | 4 +- code/modules/clothing/glasses/hud.dm | 27 +- code/modules/mob/dead/observer/observer.dm | 32 ++- .../carbon/alien/special/alien_embryo.dm | 9 + code/modules/mob/living/carbon/carbon.dm | 14 + code/modules/mob/living/carbon/human/death.dm | 8 +- .../mob/living/carbon/human/examine.dm | 7 +- code/modules/mob/living/carbon/human/human.dm | 51 ++-- .../mob/living/carbon/human/human_damage.dm | 24 +- .../mob/living/carbon/human/human_defines.dm | 2 + .../mob/living/carbon/human/inventory.dm | 4 + code/modules/mob/living/carbon/human/life.dm | 184 ++++++------ code/modules/mob/living/carbon/human/login.dm | 2 - .../living/carbon/human/species/species.dm | 42 +-- code/modules/mob/living/life.dm | 2 +- code/modules/mob/living/login.dm | 25 +- code/modules/mob/living/silicon/ai/ai.dm | 24 +- code/modules/mob/living/silicon/ai/life.dm | 15 +- code/modules/mob/living/silicon/pai/life.dm | 8 +- .../living/silicon/pai/software_modules.dm | 7 +- code/modules/mob/living/silicon/robot/life.dm | 23 +- .../modules/mob/living/silicon/robot/robot.dm | 23 +- code/modules/mob/living/silicon/silicon.dm | 49 +++- .../living/simple_animal/guardian/guardian.dm | 4 +- code/modules/mob/login.dm | 3 + code/modules/mob/mob.dm | 5 + code/modules/mob/mob_defines.dm | 2 + code/modules/surgery/implant.dm | 4 +- icons/mob/hud.dmi | Bin 5792 -> 12207 bytes paradise.dme | 5 +- 58 files changed, 1002 insertions(+), 692 deletions(-) create mode 100644 code/datums/hud.dm delete mode 100644 code/defines/procs/hud.dm create mode 100644 code/game/data_huds.dm create mode 100644 code/game/gamemodes/antag_hud.dm diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index fc591df9c14..c7aae28faf7 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -1,11 +1,35 @@ -// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans. -#define HEALTH_HUD 1 // a simple line rounding the mob's number health -#define STATUS_HUD 2 // alive, dead, diseased, etc. -#define ID_HUD 3 // the job asigned to your ID -#define WANTED_HUD 4 // wanted, released, parroled, security status -#define IMPLOYAL_HUD 5 // loyality implant -#define IMPCHEM_HUD 6 // chemical implant -#define IMPTRACK_HUD 7 // tracking implant -#define SPECIALROLE_HUD 8 // AntagHUD image -#define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill. -#define NATIONS_HUD 10 //Show nations icons during nations gamemode +// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list +// note: if you add more HUDs, even for non-human atoms, make sure to use unique numbers for the defines! +// /datum/hud expects these to be unique +#define HEALTH_HUD "1" // a simple line rounding the mob's number health +#define STATUS_HUD "2" // alive, dead, diseased, etc. +#define ID_HUD "3" // the job asigned to your ID +#define WANTED_HUD "4" // wanted, released, parroled, security status +#define IMPLOYAL_HUD "5" // loyality implant +#define IMPCHEM_HUD "6" // chemical implant +#define IMPTRACK_HUD "7" // tracking implant +#define SPECIALROLE_HUD "8" // AntagHUD image +#define STATUS_HUD_OOC "9" // STATUS_HUD without virus db check for someone being ill. +#define NATIONS_HUD "10" //Show nations icons during nations gamemode +#define DIAG_STAT_HUD "11" // Silicon/Mech Status +#define DIAG_HUD "12" // Silicon health bar +#define DIAG_BATT_HUD "13"// Borg/Mech power meter +#define DIAG_MECH_HUD "14"// Mech health bar + +//data HUD (medhud, sechud) defines +//Don't forget to update human/New() if you change these! +#define DATA_HUD_SECURITY_BASIC 1 +#define DATA_HUD_SECURITY_ADVANCED 2 +#define DATA_HUD_MEDICAL_BASIC 3 +#define DATA_HUD_MEDICAL_ADVANCED 4 +#define DATA_HUD_DIAGNOSTIC 5 +//antag HUD defines +#define ANTAG_HUD_CULT 6 +#define ANTAG_HUD_REV 7 +#define ANTAG_HUD_OPS 8 +#define ANTAG_HUD_WIZ 9 +#define ANTAG_HUD_SHADOW 10 +#define ANTAG_HUD_VAMPIRE 11 + +//NATIONS +#define DATA_HUD_NATIONS 12 \ No newline at end of file diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fe27e399c84..eb79649dcec 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -116,28 +116,6 @@ proc/age2agedescription(age) if(70 to INFINITY) return "elderly" else return "unknown" -proc/RoundHealth(health) - switch(health) - if(100 to INFINITY) - return "health100" - if(70 to 100) - return "health80" - if(50 to 70) - return "health60" - if(30 to 50) - return "health40" - if(18 to 30) - return "health25" - if(5 to 18) - return "health10" - if(1 to 5) - return "health1" - if(-99 to 0) - return "health0" - else - return "health-100" - return "0" - /* Proc for attack log creation, because really why not diff --git a/code/datums/hud.dm b/code/datums/hud.dm new file mode 100644 index 00000000000..3b52ab3c7ca --- /dev/null +++ b/code/datums/hud.dm @@ -0,0 +1,84 @@ +/* HUD DATUMS */ + +///GLOBAL HUD LIST +var/datum/atom_hud/huds = list( + DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), + DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), + DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), + DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), + DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), + ANTAG_HUD_CULT = new/datum/atom_hud/antag(), + ANTAG_HUD_REV = new/datum/atom_hud/antag(), + ANTAG_HUD_OPS = new/datum/atom_hud/antag(), + ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), + ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), + DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations() + ) + +/datum/atom_hud + var/list/atom/hudatoms = list() //list of all atoms which display this hud + var/list/mob/hudusers = list() //list with all mobs who can see the hud + var/list/hud_icons = list() //these will be the indexes for the atom's hud_list + +/datum/atom_hud/proc/remove_hud_from(mob/M) + if(!M) + return + //if(src in M.permanent_huds)//I will deal with you later -Fethas + // return + for(var/atom/A in hudatoms) + remove_from_single_hud(M, A) + hudusers -= M + +/datum/atom_hud/proc/remove_from_hud(atom/A) + if(!A) + return + for(var/mob/M in hudusers) + remove_from_single_hud(M, A) + hudatoms -= A + +/datum/atom_hud/proc/remove_from_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client + if(!M || !M.client || !A) + return + for(var/i in hud_icons) + M.client.images -= A.hud_list[i] + +/datum/atom_hud/proc/add_hud_to(mob/M) + if(!M) + return + hudusers |= M + for(var/atom/A in hudatoms) + add_to_single_hud(M, A) + +/datum/atom_hud/proc/add_to_hud(atom/A) + if(!A) + return + hudatoms |= A + for(var/mob/M in hudusers) + add_to_single_hud(M, A) + +/datum/atom_hud/proc/add_to_single_hud(mob/M, atom/A) //unsafe, no sanity apart from client + if(!M || !M.client || !A) + return + for(var/i in hud_icons) + if(A.hud_list[i]) + M.client.images |= A.hud_list[i] + +//MOB PROCS +/mob/proc/reload_huds() + //var/gang_huds = list() + //if(ticker.mode) + // for(var/datum/gang/G in ticker.mode.gangs) + // gang_huds += G.ganghud + + for(var/datum/atom_hud/hud in huds)//|gang_huds)) + if(src in hud.hudusers) + hud.add_hud_to(src) + +/mob/new_player/reload_huds() + return + +/mob/proc/add_click_catcher() + client.screen += client.void + +/mob/new_player/add_click_catcher() + return \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 0ac395baf02..514cba49c9a 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -58,6 +58,9 @@ var/datum/vampire/vampire //vampire holder var/datum/nations/nation //nation holder + var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state + var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD + var/rev_cooldown = 0 // the world.time since the mob has been brigged, or -1 if not at all @@ -79,6 +82,8 @@ if(new_character.mind) //remove any mind currently in our new body's mind variable new_character.mind.current = null + var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list + transfer_antag_huds(hud_to_transfer) //inherit the antag HUD current = new_character //link ourself to our new body new_character.mind = src //and link our new body to ourself @@ -1054,7 +1059,7 @@ log_admin("[key_name(usr)] has thralled [current].") else if (href_list["silicon"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["silicon"]) if("unmalf") if(src in ticker.mode.malf_ai) diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm deleted file mode 100644 index f51cb42d4cb..00000000000 --- a/code/defines/procs/hud.dm +++ /dev/null @@ -1,94 +0,0 @@ -/* Using the HUD procs is simple. Call these procs in the life.dm of the intended mob. -Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so -the HUD updates properly! */ - -//Medical HUD outputs. Called by the Life() proc of the mob using it, usually. -/proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt) - if(!can_process_hud(M)) - return - - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, med_hud_users) - for(var/mob/living/carbon/human/patient in P.Mob.in_view(P.Turf)) - if(P.Mob.see_invisible < patient.invisibility || patient.alpha < 127) - continue - - if(!local_scanner) - if(istype(patient.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = patient.w_uniform - if(U.sensor_mode < 2) - continue - else - continue - - P.Client.images += patient.hud_list[HEALTH_HUD] - if(local_scanner) - P.Client.images += patient.hud_list[STATUS_HUD] - -//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features. -/proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt) - if(!can_process_hud(M)) - return - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, sec_hud_users) - for(var/mob/living/carbon/human/perp in P.Mob.in_view(P.Turf)) - if(P.Mob.see_invisible < perp.invisibility || perp.alpha < 127) - continue - - P.Client.images += perp.hud_list[ID_HUD] - if(advanced_mode) - P.Client.images += perp.hud_list[WANTED_HUD] - P.Client.images += perp.hud_list[IMPTRACK_HUD] - P.Client.images += perp.hud_list[IMPLOYAL_HUD] - P.Client.images += perp.hud_list[IMPCHEM_HUD] - - -/proc/process_antag_hud(var/mob/M, var/mob/Alt) - if(!can_process_hud(M)) - return - var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, antag_hud_users) - for(var/mob/living/carbon/human/target in P.Mob.in_view(P.Turf)) - if(P.Mob.see_invisible < target.invisibility || target.alpha < 127) - continue - - P.Client.images += target.hud_list[SPECIALROLE_HUD] - -/datum/arranged_hud_process - var/client/Client - var/mob/Mob - var/turf/Turf - -/proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list) - hud_list |= M - var/datum/arranged_hud_process/P = new - P.Client = M.client - P.Mob = Alt ? Alt : M - P.Turf = get_turf(P.Mob) - return P - -/proc/can_process_hud(var/mob/M) - if(!M) - return 0 - if(!M.client) - return 0 - if(M.stat != CONSCIOUS) - return 0 - return 1 - -//Deletes the current HUD images so they can be refreshed with new ones. -/mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs. - if(client) - for(var/image/hud in client.images) - if(copytext(hud.icon_state,1,4) == "hud") //this makes me weep - client.images -= hud - med_hud_users -= src - sec_hud_users -= src - antag_hud_users -= src - -/mob/proc/in_view(var/turf/T) - return view(T) - -/mob/aiEye/in_view(var/turf/T) - var/list/viewed = new - for(var/mob/living/carbon/human/H in mob_list) - if(get_dist(H, T) <= 7) - viewed += H - return viewed diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 3fa9337059a..374609d7963 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -17,6 +17,12 @@ ///Chemistry. var/datum/reagents/reagents = null + //This atom's HUD (med/sec, etc) images. Associative list. + var/list/image/hud_list = list() + //HUD images that this atom can provide. + var/list/hud_possible + + //var/chem_is_open_container = 0 // replaced by OPENCONTAINER flags and atom/proc/is_open_container() ///Chemistry. diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm new file mode 100644 index 00000000000..b7cff80f8f4 --- /dev/null +++ b/code/game/data_huds.dm @@ -0,0 +1,263 @@ + /* Data HUDs have been rewritten in a more generic way. + * In short, they now use an observer-listener pattern. + * See code/datum/hud.dm for the generic hud datum. + * Update the HUD icons when needed with the appropriate hook. (see below) + */ + +/* DATA HUD DATUMS */ + +/atom/proc/add_to_all_human_data_huds() + for(var/datum/atom_hud/data/human/hud in huds) hud.add_to_hud(src) + +/atom/proc/remove_from_all_data_huds() + for(var/datum/atom_hud/data/hud in huds) hud.remove_from_hud(src) + +/datum/atom_hud/data + +/datum/atom_hud/data/human/medical + hud_icons = list(HEALTH_HUD, STATUS_HUD) + +/datum/atom_hud/data/human/medical/basic + +/datum/atom_hud/data/human/medical/basic/proc/check_sensors(mob/living/carbon/human/H) + if(!istype(H)) return 0 + var/obj/item/clothing/under/U = H.w_uniform + if(!istype(U)) return 0 + if(U.sensor_mode <= 2) return 0 + return 1 + +/datum/atom_hud/data/human/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) + if(check_sensors(H)) + ..() + +/datum/atom_hud/data/human/medical/basic/proc/update_suit_sensors(mob/living/carbon/H) + check_sensors(H) ? add_to_hud(H) : remove_from_hud(H) + +/datum/atom_hud/data/human/medical/advanced + +/datum/atom_hud/data/human/security + +/datum/atom_hud/data/human/security/basic + hud_icons = list(ID_HUD) + +/datum/atom_hud/data/human/security/advanced + hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) + +/datum/atom_hud/data/diagnostic + hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) + + +/datum/atom_hud/data/human/nations + hud_icons = list(NATIONS_HUD) +/* MED/SEC/DIAG HUD HOOKS */ + +/* + * THESE HOOKS SHOULD BE CALLED BY THE MOB SHOWING THE HUD + */ + +/*********************************************** + Medical HUD! Basic mode needs suit sensors on. +************************************************/ + +//HELPERS + +//called when a carbon changes virus +/mob/living/carbon/proc/check_virus() + for (var/ID in virus2) + if (ID in virusDB) + return 1 + return 0 +//helper for getting the appropriate health status +/proc/RoundHealth(health) + switch(health) + if(100 to INFINITY) + return "health100" + if(70 to 100) + return "health80" + if(50 to 70) + return "health60" + if(30 to 50) + return "health40" + if(18 to 30) + return "health25" + if(5 to 18) + return "health10" + if(1 to 5) + return "health1" + if(-99 to 0) + return "health0" + else + return "health-100" + return "0" + +///HOOKS + +//called when a human changes suit sensors +/mob/living/carbon/proc/update_suit_sensors() + var/datum/atom_hud/data/human/medical/basic/B = huds[DATA_HUD_MEDICAL_BASIC] + B.update_suit_sensors(src) + + +//called when a carbon changes health +/mob/living/carbon/proc/med_hud_set_health() + var/image/holder = hud_list[HEALTH_HUD] + if(stat == 2) + holder.icon_state = "hudhealth-100" + else + holder.icon_state = "hud[RoundHealth(health)]" + +//called when a carbon changes stat, virus or XENO_HOST +/mob/living/carbon/proc/med_hud_set_status() + var/image/holder = hud_list[STATUS_HUD] + if(stat == 2) + holder.icon_state = "huddead" + else if(status_flags & XENO_HOST) + holder.icon_state = "hudxeno" + else if(check_virus()) + holder.icon_state = "hudill" + else if(has_brain_worms()) + var/mob/living/simple_animal/borer/B = has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" + else + holder.icon_state = "hudhealthy" + + + +/*********************************************** + Security HUDs! Basic mode shows only the job. +************************************************/ + +//HOOKS + +/mob/living/carbon/human/proc/sec_hud_set_ID() + var/image/holder = hud_list[ID_HUD] + holder.icon_state = "hudunknown" + if(wear_id) + holder.icon_state = "hud[ckey(wear_id.GetJobName())]" + sec_hud_set_security_status() + + + +/mob/living/carbon/human/proc/sec_hud_set_implants() + var/image/holder + for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) + holder = hud_list[i] + holder.icon_state = null + for(var/obj/item/weapon/implant/I in src) + if(I.implanted) + if(istype(I,/obj/item/weapon/implant/tracking)) + holder = hud_list[IMPTRACK_HUD] + holder.icon_state = "hud_imp_tracking" + else if(istype(I,/obj/item/weapon/implant/loyalty)) + holder = hud_list[IMPLOYAL_HUD] + holder.icon_state = "hud_imp_loyal" + else if(istype(I,/obj/item/weapon/implant/chem)) + holder = hud_list[IMPCHEM_HUD] + holder.icon_state = "hud_imp_chem" + +/mob/living/carbon/human/proc/sec_hud_set_security_status() + var/image/holder = hud_list[WANTED_HUD] + var/perpname = get_face_name(get_id_name("")) + if(perpname) + var/datum/data/record/R = find_record("name", perpname, data_core.security) + if(R) + switch(R.fields["criminal"]) + if("*Arrest*") + holder.icon_state = "hudwanted" + return + if("Incarcerated") + holder.icon_state = "hudincarcerated" + return + if("Parolled") + holder.icon_state = "hudparolled" + return + if("Discharged") + holder.icon_state = "huddischarged" + return + holder.icon_state = null + +/*********************************************** + Diagnostic HUDs! +************************************************/ + +//For Diag health and cell bars! +/proc/RoundDiagBar(value) + switch(value * 100) + if(95 to INFINITY) + return "max" + if(80 to 100) + return "good" + if(60 to 80) + return "high" + if(40 to 60) + return "med" + if(20 to 40) + return "low" + if(1 to 20) + return "crit" + else + return "dead" + return "dead" + +//Sillycone hooks +/mob/living/silicon/proc/diag_hud_set_health() + var/image/holder = hud_list[DIAG_HUD] + if(stat == DEAD) + holder.icon_state = "huddiagdead" + else + holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" + +/mob/living/silicon/proc/diag_hud_set_status() + var/image/holder = hud_list[DIAG_STAT_HUD] + switch(stat) + if(CONSCIOUS) + holder.icon_state = "hudstat" + if(UNCONSCIOUS) + holder.icon_state = "hudoffline" + else + holder.icon_state = "huddead2" + +//Borgie battery tracking! +/mob/living/silicon/robot/proc/diag_hud_set_borgcell() + var/image/holder = hud_list[DIAG_BATT_HUD] + if (cell) + var/chargelvl = (cell.charge/cell.maxcharge) + holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" + else + holder.icon_state = "hudnobatt" + +/*~~~~~~~~~~~~~~~~~~~~ + BIG STOMPY MECHS +~~~~~~~~~~~~~~~~~~~~~*/ +/obj/mecha/proc/diag_hud_set_mechhealth() + var/image/holder = hud_list[DIAG_MECH_HUD] + holder.icon_state = "huddiag[RoundDiagBar(health/initial(health))]" + + +/obj/mecha/proc/diag_hud_set_mechcell() + var/image/holder = hud_list[DIAG_BATT_HUD] + if (cell) + var/chargelvl = cell.charge/cell.maxcharge + holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" + else + holder.icon_state = "hudnobatt" + + +/obj/mecha/proc/diag_hud_set_mechstat() + var/image/holder = hud_list[DIAG_STAT_HUD] + holder.icon_state = null + if(internal_damage) + holder.icon_state = "hudwarn" + + +////NATIONS///// +/mob/living/carbon/human/proc/nation_hud_set_ID() + var/image/holder = hud_list[NATIONS_HUD] + holder.icon_state = "hudunknown" + if(mind && mind.nation) + holder.icon_state = "hud[mind.nation.default_name]" + + diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm new file mode 100644 index 00000000000..b2d41c47c6d --- /dev/null +++ b/code/game/gamemodes/antag_hud.dm @@ -0,0 +1,49 @@ +/datum/atom_hud/antag + hud_icons = list(SPECIALROLE_HUD) + +/datum/atom_hud/antag/proc/join_hud(mob/M) + if(!istype(M)) + CRASH("join_hud(): [M] ([M.type]) is not a mob!") + if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged + M.mind.antag_hud.leave_hud(M) + add_to_hud(M) + add_hud_to(M) + M.mind.antag_hud = src + +/datum/atom_hud/antag/proc/leave_hud(mob/M) + if(!istype(M)) + CRASH("leave_hud(): [M] ([M.type]) is not a mob!") + remove_from_hud(M) + remove_hud_from(M) + if(M.mind) + M.mind.antag_hud = null + + +//GAME_MODE PROCS +//called to set a mob's antag icon state +/datum/game_mode/proc/set_antag_hud(mob/M, new_icon_state) + if(!istype(M)) + CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") + var/image/holder = M.hud_list[SPECIALROLE_HUD] + if(holder) + holder.icon_state = new_icon_state + if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime + M.mind.antag_hud_icon_state = new_icon_state + + +//MIND PROCS +//these are called by mind.transfer_to() +/datum/mind/proc/transfer_antag_huds(var/datum/atom_hud/antag/newhud) + leave_all_huds() + ticker.mode.set_antag_hud(current, antag_hud_icon_state) + if(newhud) + newhud.join_hud(current) + +/datum/mind/proc/leave_all_huds() + for(var/datum/atom_hud/antag/hud in huds) + if(current in hud.hudusers) + hud.leave_hud(current) + + for(var/datum/atom_hud/data/hud in huds) + if(current in hud.hudusers) + hud.remove_hud_from(current) \ No newline at end of file diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 46eba7bd3c8..be2356f1150 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -137,7 +137,7 @@ newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..." newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" - newtraitor.hud_updateflag |= 1 << SPECIALROLE_HUD + var/obj_count = 1 newtraitor << "\blue Your current objectives:" for(var/datum/objective/objective in newtraitor.mind.objectives) diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index e5cc89aeaed..27c1dd59fbc 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -64,11 +64,13 @@ user << "We have regenerated." user.regenerate_icons() - user.hud_updateflag |= 1 << HEALTH_HUD - user.hud_updateflag |= 1 << STATUS_HUD + //user.hud_updateflag |= 1 << HEALTH_HUD + //user.hud_updateflag |= 1 << STATUS_HUD user.status_flags &= ~(FAKEDEATH) user.update_canmove() user.mind.changeling.purchasedpowers -= src + user.med_hud_set_status() + user.med_hud_set_health() feedback_add_details("changeling_powers","CR") return 1 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 09e184e2b3c..1ecdc7d8c50 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -213,14 +213,14 @@ M << "[cult_mind.current] looks like they just reverted to their old faith!" -/datum/game_mode/proc/update_all_cult_icons() - spawn(0) - // reset the cult - for(var/datum/mind/cultist in cult) - reset_cult_icons_for_cultist(cultist) - // reset the spirits - for(var/mob/spirit/currentSpirit in spirits) - reset_cult_icons_for_spirit(currentSpirit) +///datum/game_mode/proc/update_all_cult_icons() +// spawn(0) +// // reset the cult +// for(var/datum/mind/cultist in cult) +// reset_cult_icons_for_cultist(cultist) +// // reset the spirits +// for(var/mob/spirit/currentSpirit in spirits) +// reset_cult_icons_for_spirit(currentSpirit) /datum/game_mode/proc/reset_cult_icons_for_cultist(var/datum/mind/target) @@ -315,19 +315,26 @@ /datum/game_mode/proc/update_cult_icons_added(datum/mind/cult_mind) - spawn(0) - for(var/datum/mind/cultist in cult) - cult_icon_pair_link(cultist,cult_mind) - for(var/mob/spirit/currentSpirit in spirits) - add_cult_icon_to_spirit(currentSpirit,cult_mind) + //spawn(0) + // for(var/datum/mind/cultist in cult) + // cult_icon_pair_link(cultist,cult_mind) + // for(var/mob/spirit/currentSpirit in spirits) + // add_cult_icon_to_spirit(currentSpirit,cult_mind) + + var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] + culthud.join_hud(cult_mind.current) + set_antag_hud(cult_mind.current, "hudcultist") /datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind) - spawn(0) - for(var/datum/mind/cultist in cult) - cult_icon_pair_unlink(cultist,cult_mind) - for(var/mob/spirit/currentSpirit in spirits) - remove_cult_icon_from_spirit(currentSpirit,cult_mind) + //spawn(0) + // for(var/datum/mind/cultist in cult) + // cult_icon_pair_unlink(cultist,cult_mind) + // for(var/mob/spirit/currentSpirit in spirits) + // remove_cult_icon_from_spirit(currentSpirit,cult_mind) + var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] + culthud.leave_hud(cult_mind.current) + set_antag_hud(cult_mind.current, null) /datum/game_mode/cult/proc/get_unconvertables() diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 39c81b4b8d0..b1e159ca2f0 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -38,9 +38,9 @@ datum/game_mode/nations if(H.mind) if(H.mind.assigned_role in engineering_positions) H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -51,9 +51,9 @@ datum/game_mode/nations if(H.mind.assigned_role in medical_positions) H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -64,9 +64,9 @@ datum/game_mode/nations if(H.mind.assigned_role in science_positions) H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -77,9 +77,9 @@ datum/game_mode/nations if(H.mind.assigned_role in security_positions) H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -90,9 +90,9 @@ datum/game_mode/nations if(H.mind.assigned_role in cargonians) H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -103,9 +103,9 @@ datum/game_mode/nations if(H.mind.assigned_role in servicion) H.mind.nation = all_nations["Servicion"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -116,9 +116,9 @@ datum/game_mode/nations if(H.mind.assigned_role in support_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + //H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -129,9 +129,9 @@ datum/game_mode/nations if(H.mind.assigned_role in command_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I + // H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + // H.client.images += I H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -139,7 +139,7 @@ datum/game_mode/nations continue H << "You are now part of the great sovereign nation of [H.mind.nation.default_name]!" continue - + H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." continue @@ -203,76 +203,76 @@ datum/game_mode/nations if(H.mind) if(H.mind.assigned_role in engineering_positions) H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") + //H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in medical_positions) H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") + //H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in science_positions) H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") + //H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in security_positions) H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I + // H.hud_updateflag |= 1 << NATIONS_HUD + // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") + // H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in cargonians) H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") + // H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in servicion) H.mind.nation = all_nations["Servicion"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") + // H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in support_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I + //H.hud_updateflag |= 1 << NATIONS_HUD + //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + // H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in command_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I + // H.hud_updateflag |= 1 << NATIONS_HUD + // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + // H.client.images += I H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 - + H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." return 1 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index a2658d13c88..b10a78e0bd7 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -64,44 +64,16 @@ proc/issyndicate(mob/living/M as mob) //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/proc/update_all_synd_icons() - spawn(0) - for(var/datum/mind/synd_mind in syndicates) - if(synd_mind.current) - if(synd_mind.current.client) - for(var/image/I in synd_mind.current.client.images) - if(I.icon_state == "synd") - qdel(I) - - for(var/datum/mind/synd_mind in syndicates) - if(synd_mind.current) - if(synd_mind.current.client) - for(var/datum/mind/synd_mind_1 in syndicates) - if(synd_mind_1.current) - var/I = image('icons/mob/mob.dmi', loc = synd_mind_1.current, icon_state = "synd") - synd_mind.current.client.images += I /datum/game_mode/proc/update_synd_icons_added(datum/mind/synd_mind) - spawn(0) - if(synd_mind.current) - if(synd_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = synd_mind.current, icon_state = "synd") - synd_mind.current.client.images += I + var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] + opshud.join_hud(synd_mind.current) + set_antag_hud(synd_mind.current, "hudoperative") /datum/game_mode/proc/update_synd_icons_removed(datum/mind/synd_mind) - spawn(0) - for(var/datum/mind/synd in syndicates) - if(synd.current) - if(synd.current.client) - for(var/image/I in synd.current.client.images) - if(I.icon_state == "synd" && I.loc == synd_mind.current) - qdel(I) - - if(synd_mind.current) - if(synd_mind.current.client) - for(var/image/I in synd_mind.current.client.images) - if(I.icon_state == "synd") - qdel(I) + var/datum/atom_hud/antag/opshud = huds[ANTAG_HUD_OPS] + opshud.leave_hud(synd_mind.current) + set_antag_hud(synd_mind.current, null) //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// @@ -150,7 +122,7 @@ proc/issyndicate(mob/living/M as mob) spawnpos++ update_synd_icons_added(synd_mind) - update_all_synd_icons() + //update_all_synd_icons() if(uplinklocker) new /obj/structure/closet/syndicate/nuclear(uplinklocker.loc) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 82ff00fdfea..d51064bf877 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -242,7 +242,7 @@ if(rev_mind in revolutionaries) revolutionaries -= rev_mind rev_mind.special_role = null - rev_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD + //rev_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD if(beingborged) rev_mind.current << "\red The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now." @@ -259,104 +259,21 @@ M << "[rev_mind.current] looks like they just remembered their real allegiance!" -///////////////////////////////////////////////////////////////////////////////////////////////// -//Keeps track of players having the correct icons//////////////////////////////////////////////// -//CURRENTLY CONTAINS BUGS://///////////////////////////////////////////////////////////////////// -//-PLAYERS THAT HAVE BEEN REVS FOR AWHILE OBTAIN THE BLUE ICON WHILE STILL NOT BEING A REV HEAD// -// -Possibly caused by cloning of a standard rev///////////////////////////////////////////////// -//-UNCONFIRMED: DECONVERTED REVS NOT LOSING THEIR ICON PROPERLY////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/proc/update_all_rev_icons() - spawn(0) - for(var/datum/mind/head_rev_mind in head_revolutionaries) - if(head_rev_mind.current) - if(head_rev_mind.current.client) - for(var/image/I in head_rev_mind.current.client.images) - if(I.icon_state == "rev" || I.icon_state == "rev_head") - qdel(I) - - for(var/datum/mind/rev_mind in revolutionaries) - if(rev_mind.current) - if(rev_mind.current.client) - for(var/image/I in rev_mind.current.client.images) - if(I.icon_state == "rev" || I.icon_state == "rev_head") - qdel(I) - - for(var/datum/mind/head_rev in head_revolutionaries) - if(head_rev.current) - if(head_rev.current.client) - for(var/datum/mind/rev in revolutionaries) - if(rev.current) - var/I = image('icons/mob/mob.dmi', loc = rev.current, icon_state = "rev") - head_rev.current.client.images += I - for(var/datum/mind/head_rev_1 in head_revolutionaries) - if(head_rev_1.current) - var/I = image('icons/mob/mob.dmi', loc = head_rev_1.current, icon_state = "rev_head") - head_rev.current.client.images += I - - for(var/datum/mind/rev in revolutionaries) - if(rev.current) - if(rev.current.client) - for(var/datum/mind/head_rev in head_revolutionaries) - if(head_rev.current) - var/I = image('icons/mob/mob.dmi', loc = head_rev.current, icon_state = "rev_head") - rev.current.client.images += I - for(var/datum/mind/rev_1 in revolutionaries) - if(rev_1.current) - var/I = image('icons/mob/mob.dmi', loc = rev_1.current, icon_state = "rev") - rev.current.client.images += I - -//////////////////////////////////////////////////// -//Keeps track of converted revs icons/////////////// -//Refer to above bugs. They may apply here as well// -//////////////////////////////////////////////////// +///////////////////////////////////// +//Adds the rev hud to a new convert// +///////////////////////////////////// /datum/game_mode/proc/update_rev_icons_added(datum/mind/rev_mind) - spawn(0) - for(var/datum/mind/head_rev_mind in head_revolutionaries) - if(head_rev_mind.current) - if(head_rev_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev") - head_rev_mind.current.client.images += I - if(rev_mind.current) - if(rev_mind.current.client) - var/image/J = image('icons/mob/mob.dmi', loc = head_rev_mind.current, icon_state = "rev_head") - rev_mind.current.client.images += J + var/datum/atom_hud/antag/revhud = huds[ANTAG_HUD_REV] + revhud.join_hud(rev_mind.current) + set_antag_hud(rev_mind.current, ((rev_mind in head_revolutionaries) ? "hudheadrevolutionary" : "hudrevolutionary")) - for(var/datum/mind/rev_mind_1 in revolutionaries) - if(rev_mind_1.current) - if(rev_mind_1.current.client) - var/I = image('icons/mob/mob.dmi', loc = rev_mind.current, icon_state = "rev") - rev_mind_1.current.client.images += I - if(rev_mind.current) - if(rev_mind.current.client) - var/image/J = image('icons/mob/mob.dmi', loc = rev_mind_1.current, icon_state = "rev") - rev_mind.current.client.images += J - -/////////////////////////////////// -//Keeps track of deconverted revs// -/////////////////////////////////// +///////////////////////////////////////// +//Removes the hud from deconverted revs// +///////////////////////////////////////// /datum/game_mode/proc/update_rev_icons_removed(datum/mind/rev_mind) - spawn(0) - for(var/datum/mind/head_rev_mind in head_revolutionaries) - if(head_rev_mind.current) - if(head_rev_mind.current.client) - for(var/image/I in head_rev_mind.current.client.images) - if((I.icon_state == "rev" || I.icon_state == "rev_head") && I.loc == rev_mind.current) - qdel(I) - - for(var/datum/mind/rev_mind_1 in revolutionaries) - if(rev_mind_1.current) - if(rev_mind_1.current.client) - for(var/image/I in rev_mind_1.current.client.images) - if((I.icon_state == "rev" || I.icon_state == "rev_head") && I.loc == rev_mind.current) - qdel(I) - - if(rev_mind.current) - if(rev_mind.current.client) - for(var/image/I in rev_mind.current.client.images) - if(I.icon_state == "rev" || I.icon_state == "rev_head") - qdel(I) - + var/datum/atom_hud/antag/revhud = huds[ANTAG_HUD_REV] + revhud.leave_hud(rev_mind.current) + set_antag_hud(rev_mind.current, null) ////////////////////////// //Checks for rev victory// ////////////////////////// diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index 8e7759233f4..3e9c18bca12 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -105,7 +105,6 @@ rev_mind.current << "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!" rev_mind.special_role = "Revolutionary" update_rev_icons_added(rev_mind) - H.hud_updateflag |= 1 << SPECIALROLE_HUD return 1 ///////////////////////////// diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 4cdeec3edf0..39dd483d1b0 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -136,7 +136,7 @@ Made by Xhuis if(shadow_mind.assigned_role == "Clown") S << "Your alien nature has allowed you to overcome your clownishness." S.mutations.Remove(CLUMSY) - shadow_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //shadow_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) /datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind) if(!istype(new_thrall_mind)) @@ -302,44 +302,12 @@ Made by Xhuis burn_mod = 1.5 //1.5x burn damage, 2x is excessive /datum/game_mode/proc/update_shadow_icons_added(datum/mind/shadow_mind) - spawn(0) - for(var/datum/mind/shadowling in shadows) - if(shadowling.current && shadowling != shadow_mind) - if(shadowling.current.client) - var/I = image('icons/mob/mob.dmi', loc = shadow_mind.current, icon_state = "thrall") - shadowling.current.client.images += I - if(shadow_mind.current) - if(shadow_mind.current.client) - var/image/J = image('icons/mob/mob.dmi', loc = shadowling.current, icon_state = "shadowling") - shadow_mind.current.client.images += J - for(var/datum/mind/thrall in shadowling_thralls) - if(thrall.current) - if(thrall.current.client) - var/I = image('icons/mob/mob.dmi', loc = shadow_mind.current, icon_state = "thrall") - thrall.current.client.images += I - if(shadow_mind.current) - if(shadow_mind.current.client) - var/image/J = image('icons/mob/mob.dmi', loc = thrall.current, icon_state = "thrall") - shadow_mind.current.client.images += J + var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] + shadow_hud.join_hud(shadow_mind.current) + set_antag_hud(shadow_mind.current, ((shadow_mind in shadows) ? "hudshadowling" : "hudshadowlingthrall")) -/datum/game_mode/proc/update_shadow_icons_removed(datum/mind/shadow_mind) - spawn(0) - for(var/datum/mind/shadowling in shadows) - if(shadowling.current) - if(shadowling.current.client) - for(var/image/I in shadowling.current.client.images) - if((I.icon_state == "thrall" || I.icon_state == "shadowling") && I.loc == shadow_mind.current) - qdel(I) - for(var/datum/mind/thrall in shadowling_thralls) - if(thrall.current) - if(thrall.current.client) - for(var/image/I in thrall.current.client.images) - if((I.icon_state == "thrall" || I.icon_state == "shadowling") && I.loc == shadow_mind.current) - qdel(I) - - if(shadow_mind.current) - if(shadow_mind.current.client) - for(var/image/I in shadow_mind.current.client.images) - if(I.icon_state == "thrall" || I.icon_state == "shadowling") - qdel(I) +/datum/game_mode/proc/update_shadow_icons_removed(datum/mind/shadow_mind) //This should never actually occur, but it's here anyway. + var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] + shadow_hud.leave_hud(shadow_mind.current) + set_antag_hud(shadow_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 122e99e520f..d72f8f7e529 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -379,52 +379,14 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha //no verb //prepare for copypaste /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) - var/ref = "\ref[vampire_mind]" - if(ref in vampire_thralls) - if(vampire_mind.current) - if(vampire_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = vampire_mind.current, icon_state = "vampire") - vampire_mind.current.client.images += I - for(var/headref in vampire_thralls) - for(var/datum/mind/t_mind in vampire_thralls[headref]) - var/datum/mind/head = locate(headref) - if(head) - if(head.current) - if(head.current.client) - var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "vampthrall") - head.current.client.images += I - if(t_mind.current) - if(t_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = head.current, icon_state = "vampire") - t_mind.current.client.images += I - if(t_mind.current) - if(t_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "vampthrall") - t_mind.current.client.images += I + var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] + vamp_hud.join_hud(vampire_mind.current) + set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) /datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind) - for(var/headref in vampire_thralls) - var/datum/mind/head = locate(headref) - for(var/datum/mind/t_mind in vampire_thralls[headref]) - if(t_mind.current) - if(t_mind.current.client) - for(var/image/I in t_mind.current.client.images) - if((I.icon_state == "vampthrall" || I.icon_state == "vampire") && I.loc == vampire_mind.current) - //log_to_dd("deleting [vampire_mind] overlay") - qdel(I) - if(head) - //log_to_dd("found [head.name]") - if(head.current) - if(head.current.client) - for(var/image/I in head.current.client.images) - if((I.icon_state == "vampthrall" || I.icon_state == "vampire") && I.loc == vampire_mind.current) - //log_to_dd("deleting [vampire_mind] overlay") - qdel(I) - if(vampire_mind.current) - if(vampire_mind.current.client) - for(var/image/I in vampire_mind.current.client.images) - if(I.icon_state == "vampthrall" || I.icon_state == "vampire") - qdel(I) + var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] + shadow_hud.leave_hud(vampire_mind.current) + set_antag_hud(vampire_mind.current, null) /datum/game_mode/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) //var/list/removal diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 63de49edb1b..17e60881cc5 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -101,6 +101,7 @@ M.mind.objectives += new_objective ticker.mode.traitors += M.mind M.mind.special_role = "apprentice" + ticker.mode.update_wiz_icons_added(M.mind) M.faction = list("wizard") else H << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 25cddf67b4f..8b7267408b9 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -12,6 +12,7 @@ uplink_welcome = "Wizardly Uplink Console:" uplink_uses = 20 + var/use_huds = 0 var/finished = 0 /datum/game_mode/wizard/announce() @@ -52,9 +53,21 @@ equip_wizard(wizard.current) name_wizard(wizard.current) greet_wizard(wizard) + if(use_huds) + update_wiz_icons_added(wizard) ..() +/datum/game_mode/proc/update_wiz_icons_added(datum/mind/wiz_mind) + var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] + wizhud.join_hud(wiz_mind.current) + set_antag_hud(wiz_mind.current, ((wiz_mind in wizards) ? "hudwizard" : "apprentice")) + + +/datum/game_mode/proc/update_wiz_icons_removed(datum/mind/wiz_mind) + var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] + wizhud.leave_hud(wiz_mind.current) + set_antag_hud(wiz_mind.current, null) /datum/game_mode/proc/forge_wizard_objectives(var/datum/mind/wizard) switch(rand(1,100)) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 2bf5b7d156c..641b9a2a869 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -43,6 +43,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -89,6 +90,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -144,6 +146,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -191,6 +194,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -229,6 +233,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -269,6 +274,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 257f82dc3c0..03d929ee0a8 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -38,6 +38,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() captain_announcement.Announce("All hands, captain [H.real_name] on deck!") var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L @@ -136,6 +137,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -183,6 +185,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -226,6 +229,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -268,6 +272,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 891be23fdf2..4cfad239a4f 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -244,13 +244,13 @@ callHook("clone", list(H)) if((H.mind in ticker.mode:revolutionaries) || (H.mind in ticker.mode:head_revolutionaries)) - ticker.mode.update_all_rev_icons() //So the icon actually appears + ticker.mode.update_rev_icons_added() //So the icon actually appears if(H.mind in ticker.mode.syndicates) - ticker.mode.update_all_synd_icons() + ticker.mode.update_synd_icons_added() if (H.mind in ticker.mode.cult) ticker.mode.add_cult_viewpoint(H) ticker.mode.add_cultist(src.occupant.mind) - ticker.mode.update_all_cult_icons() //So the icon actually appears + ticker.mode.update_cult_icons_added() //So the icon actually appears if(("\ref[H.mind]" in ticker.mode.implanter) || (H.mind in ticker.mode.implanted)) ticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears if(("\ref[H.mind]" in ticker.mode.vampire_thralls) || (H.mind in ticker.mode.vampire_enthralled)) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 9498a070d98..45dcd0422d5 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -511,8 +511,8 @@ What a mess.*/ if ("Change Criminal Status") if (active2) - for(var/mob/living/carbon/human/H in player_list) - H.hud_updateflag |= 1 << WANTED_HUD + //for(var/mob/living/carbon/human/H in player_list) + //H.hud_updateflag |= 1 << WANTED_HUD switch(href_list["criminal2"]) if("none") active2.fields["criminal"] = "None" @@ -525,6 +525,9 @@ What a mess.*/ if("released") active2.fields["criminal"] = "Released" + for(var/mob/living/carbon/human/H in mob_list) + H.sec_hud_set_security_status() + if ("Delete Record (Security) Execute") if (active2) qdel(active2) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index b9d19239284..63ab4f67a02 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -75,6 +75,8 @@ var/melee_cooldown = 10 var/melee_can_hit = 1 + hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) + /obj/mecha/New() ..() events = new @@ -92,6 +94,12 @@ log_message("[src.name] created.") loc.Entered(src) mechas_list += src //global mech list + prepare_huds() + var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + diag_hud.add_to_hud(src) + diag_hud_set_mechhealth() + diag_hud_set_mechcell() + diag_hud_set_mechstat() return //////////////////////// @@ -451,6 +459,7 @@ pr_internal_damage.start() log_append_to_last("Internal damage of type [int_dam_flag].",1) occupant << sound('sound/machines/warning-buzzer.ogg',wait=0) + diag_hud_set_mechstat() return /obj/mecha/proc/clearInternalDamage(int_dam_flag) @@ -463,6 +472,7 @@ occupant_message("Internal fire extinquished.") if(MECHA_INT_TANK_BREACH) occupant_message("Damaged internal tank has been sealed.") + diag_hud_set_mechstat() return @@ -1830,12 +1840,20 @@ if(get_charge()) cell.use(amount) return 1 + //Diagnostic HUD updates + diag_hud_set_mechhealth() + diag_hud_set_mechcell() + diag_hud_set_mechstat() return 0 /obj/mecha/proc/give_power(amount) if(!isnull(get_charge())) cell.give(amount) return 1 + //Diagnostic HUD updates + diag_hud_set_mechhealth() + diag_hud_set_mechcell() + diag_hud_set_mechstat() return 0 /obj/mecha/proc/reset_icon() diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index d5a4e91ed47..de876b6c282 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -10,37 +10,37 @@ internal_damage_threshold = 35 deflect_chance = 15 step_energy_drain = 6 - var/obj/item/clothing/glasses/hud/health/mech/hud - - New() - ..() - hud = new /obj/item/clothing/glasses/hud/health/mech(src) - return + var/builtin_hud_user = 0 moved_inside(var/mob/living/carbon/human/H as mob) if(..()) - if(H.glasses) - occupant_message("[H.glasses] prevent you from using [src] [hud]") + if(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/hud)) + occupant_message("Your [H.glasses] prevent you from using the built-in medical hud.") else - H.glasses = hud + var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + A.add_hud_to(H) + builtin_hud_user = 1 return 1 else return 0 pilot_mmi_hud(var/mob/living/carbon/brain/pilot) - pilot.regular_hud_updates() - process_med_hud(pilot, 1) + //pilot.regular_hud_updates() + //process_med_hud(pilot, 1) + var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + A.add_hud_to(pilot) + builtin_hud_user = 1 return ..() go_out() - if(ishuman(occupant)) + if(ishuman(occupant) && builtin_hud_user) var/mob/living/carbon/human/H = occupant - if(H.glasses == hud) - H.glasses = null + var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] + A.remove_hud_from(H) ..() return //TODO - Check documentation for client.eye and client.perspective... /obj/item/clothing/glasses/hud/health/mech name = "Integrated Medical Hud" - HUDType = MEDHUD + HUDType = DATA_HUD_MEDICAL_ADVANCED diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 74863ccd4af..9b2e3ef86fc 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -21,7 +21,10 @@ // What does the implant do upon injection? // return 0 if the implant fails (ex. Revhead and loyalty implant.) // return 1 if the implant succeeds (ex. Nonrevhead and loyalty implant.) -/obj/item/weapon/implant/proc/implanted(var/mob/source) +/obj/item/weapon/implant/proc/implanted(var/mob/source) + if(istype(source, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = source + H.sec_hud_set_implants() return 1 /obj/item/weapon/implant/proc/get_data() @@ -55,11 +58,11 @@ desc = "Track with this." origin_tech = "materials=2;magnets=2;programming=2;biotech=2" var/id = 1.0 - + /obj/item/weapon/implant/tracking/New() ..() tracking_implants += src - + /obj/item/weapon/implant/tracking/Destroy() tracking_implants -= src return ..() @@ -287,7 +290,7 @@ the implant may become unstable and either pre-maturely inject the subject or si reagents = R R.my_atom = src tracking_implants += src - + /obj/item/weapon/implant/chem/Destroy() tracking_implants -= src return ..() @@ -414,7 +417,7 @@ the implant may become unstable and either pre-maturely inject the subject or si ticker.mode.update_traitor_icons_added(user.mind) log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].") return 1 - + /obj/item/weapon/implant/traitor/islegal() return 0 diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index f0cad339826..10438e8a29b 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -53,7 +53,7 @@ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) affected.implants += src.imp imp.part = affected - H.hud_updateflag |= 1 << IMPLOYAL_HUD + H.sec_hud_set_implants() M:implanting = 0 src.imp = null update() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 0361ad7c5f5..7acc46213e3 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -135,6 +135,7 @@ flags = GLASSESCOVERSEYES slot_flags = SLOT_EYES materials = list(MAT_GLASS = 250) + var/emagged = 0 var/vision_flags = 0 var/darkness_view = 0//Base human is 2 var/invisa_view = 0 @@ -223,6 +224,11 @@ BLIND // can't see anything user << "Your suit will now report your vital lifesigns." if(3) user << "Your suit will now report your vital lifesigns as well as your coordinate position." + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + if(H.w_uniform == src) + H.update_suit_sensors() + else if (istype(src.loc, /mob)) switch(sensor_mode) if(0) @@ -237,6 +243,10 @@ BLIND // can't see anything if(3) for(var/mob/V in viewers(user, 1)) V.show_message("[user] sets [src.loc]'s sensors to maximum.", 1) + if(istype(src,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if(H.w_uniform == src) + H.update_suit_sensors() /obj/item/clothing/under/verb/toggle() set name = "Toggle Suit Sensors" @@ -253,7 +263,7 @@ BLIND // can't see anything var/blockTracking // Do we block AI tracking? var/flash_protect = 0 var/tint = 0 - var/HUDType = 0 + var/HUDType = null var/vision_flags = 0 var/see_darkness = 1 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index eaf73f5cd61..65d821003df 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -10,7 +10,7 @@ var/prescription = 0 var/prescription_upgradable = 0 var/see_darkness = 1 - var/HUDType = 0 + var/HUDType = null /obj/item/clothing/glasses/New() . = ..() @@ -321,7 +321,7 @@ darkness_view = 1 flash_protect = 1 tint = 1 - HUDType = SECHUD + HUDType = DATA_HUD_SECURITY_BASIC prescription_upgradable = 1 species_fit = list("Vox") sprite_sheets = list( diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 1d852ed6257..b7e0e549a74 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -3,23 +3,38 @@ desc = "A heads-up display that provides important info in (almost) real time." flags = null //doesn't protect eyes because it's a monocle, duh origin_tech = "magnets=3;biotech=2" - HUDType = SECHUD + HUDType = DATA_HUD_SECURITY_BASIC prescription_upgradable = 1 var/list/icon/current = list() //the current hud icons +/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) + if(slot == slot_glasses) + var/datum/atom_hud/H = huds[HUDType] + H.add_hud_to(user) + +/obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) + if(user.glasses == src) + var/datum/atom_hud/H = huds[HUDType] + H.remove_hud_from(user) + +/obj/item/clothing/glasses/hud/emp_act(severity) + if(emagged == 0) + emagged = 1 + desc = desc + " The display flickers slightly." + /obj/item/clothing/glasses/hud/health name = "/improper Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." icon_state = "healthhud" - HUDType = MEDHUD + HUDType = DATA_HUD_MEDICAL_ADVANCED /obj/item/clothing/glasses/hud/health_advanced name = "/improper Advanced Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. Includes anti-flash filter." icon_state = "advmedhud" flash_protect = 1 - HUDType = MEDHUD + HUDType = DATA_HUD_MEDICAL_ADVANCED /obj/item/clothing/glasses/hud/health/night name = "/improper Night Vision Health Scanner HUD" @@ -30,6 +45,11 @@ see_darkness = 0 prescription_upgradable = 0 +/obj/item/clothing/glasses/hud/diagnostic + name = "Diagnostic HUD" + desc = "A heads-up display that scans silicons" + icon_state = "healthhud" + HUDType = DATA_HUD_DIAGNOSTIC /obj/item/clothing/glasses/hud/security name = "/improper Security HUD" @@ -37,6 +57,7 @@ icon_state = "securityhud" var/global/list/jobs[0] flash_protect = 1 + HUDType = DATA_HUD_SECURITY_ADVANCED /obj/item/clothing/glasses/hud/security/jensenshades name = "augmented shades" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2a694bb1d6f..e5cdfece68e 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -23,12 +23,11 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. universal_speak = 1 var/atom/movable/following = null - var/medHUD = 0 - var/secHUD = 0 var/anonsay = 0 var/image/ghostimage = null //this mobs ghost image, for deleting and stuff var/ghostvision = 1 //is the ghost able to see things humans can't? var/seedarkness = 1 + var/data_hud_seen = 0 //this should one of the defines in __DEFINES/hud.dm /mob/dead/observer/New(var/mob/body=null, var/flags=1) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF @@ -111,7 +110,7 @@ Works together with spawning an observer, noted above. if(!loc) return if(!client) return 0 - regular_hud_updates() + //regular_hud_updates() if(client.images.len) for(var/image/hud in client.images) if(copytext(hud.icon_state,1,4) == "hud") @@ -123,12 +122,12 @@ Works together with spawning an observer, noted above. target_list += target if(target_list.len) assess_targets(target_list, src) - if(medHUD) - process_medHUD(src) - if(secHUD) - process_secHUD(src) - + //if(medHUD) + /// process_medHUD(src) + //if(secHUD) + // process_secHUD(src) +/* /mob/dead/proc/process_medHUD(var/mob/M) var/client/C = M.client for(var/mob/living/carbon/human/patient in oview(M, 14)) @@ -141,6 +140,7 @@ Works together with spawning an observer, noted above. C.images += target.hud_list[IMPTRACK_HUD] C.images += target.hud_list[IMPLOYAL_HUD] C.images += target.hud_list[IMPCHEM_HUD] +*/ /mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U) var/client/C = U.client @@ -270,18 +270,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 1 +/mob/dead/observer/proc/show_me_the_hud(hud_index) + var/datum/atom_hud/H = huds[hud_index] + H.add_hud_to(src) + data_hud_seen = hud_index + /mob/dead/observer/verb/toggle_medHUD() set category = "Ghost" set name = "Toggle MedicHUD" set desc = "Toggles the medical HUD." if(!client) return - if(medHUD) - medHUD = 0 - src << "\blue Medical HUD Disabled" - else - medHUD = 1 - src << "\blue Medical HUD Enabled" + + if(data_hud_seen) //remove old huds + var/datum/atom_hud/H = huds[data_hud_seen] + H.remove_hud_from(src) + show_me_the_hud(DATA_HUD_SECURITY_BASIC) /mob/dead/observer/verb/toggle_antagHUD() set category = "Ghost" diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index e6f39f606fa..5494b199a87 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -14,6 +14,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds if(istype(loc, /mob/living)) affected_mob = loc affected_mob.status_flags |= XENO_HOST + if(istype(affected_mob,/mob/living/carbon)) + var/mob/living/carbon/H = affected_mob + H.med_hud_set_status() processing_objects.Add(src) spawn(0) AddInfectionImages(affected_mob) @@ -23,6 +26,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds /obj/item/alien_embryo/Destroy() if(affected_mob) affected_mob.status_flags &= ~(XENO_HOST) + if(istype(affected_mob,/mob/living/carbon)) + var/mob/living/carbon/H = affected_mob + H.med_hud_set_status() spawn(0) RemoveInfectionImages(affected_mob) return ..() @@ -31,6 +37,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds if(!affected_mob) return if(loc != affected_mob) affected_mob.status_flags &= ~(XENO_HOST) + if(istype(affected_mob,/mob/living/carbon)) + var/mob/living/carbon/H = affected_mob + H.med_hud_set_status() processing_objects.Remove(src) spawn(0) RemoveInfectionImages(affected_mob) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 98c17d2e9d8..3179f32d3f7 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -7,6 +7,20 @@ mob/living update_hud() return +/mob/living/carbon/prepare_huds() + ..() + prepare_data_huds() + +/mob/living/carbon/proc/prepare_data_huds() + ..() + med_hud_set_health() + med_hud_set_status() + +/mob/living/carbon/updatehealth() + ..() + med_hud_set_health() + med_hud_set_status() + /mob/living/carbon/Destroy() for(var/atom/movable/guts in internal_organs) qdel(guts) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 6b698640d5c..1c0c48bd3d2 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -91,10 +91,10 @@ dizziness = 0 jitteriness = 0 - hud_updateflag |= 1 << HEALTH_HUD - hud_updateflag |= 1 << STATUS_HUD + //hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << STATUS_HUD - handle_hud_list() + //handle_hud_list() //Handle species-specific deaths. if(species) species.handle_death(src) @@ -135,6 +135,8 @@ if(client) blind.layer = 0 timeofdeath = worldtime2text() + med_hud_set_health() + med_hud_set_status() if(mind) mind.store_memory("Time of death: [timeofdeath]", 0) if(ticker && ticker.mode) // log_to_dd("k") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 15791ddd85a..51241c3d7f4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -492,14 +492,11 @@ else return 0 else if(istype(M, /mob/living/silicon)) - var/mob/living/silicon/R = M switch(hudtype) if("security") - if(R.sensor_mode == 1) - return 1 + return 1 if("medical") - if(R.sensor_mode == 2) - return 1 + return 1 else return 0 else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8b453e8f100..353e859f7cd 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -6,7 +6,7 @@ icon_state = "body_m_s" //why are these here and not in human_defines.dm - var/list/hud_list[10] + //var/list/hud_list[10] var/datum/species/species //Contains icon generation and language information, set during New(). var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. @@ -29,16 +29,16 @@ reagents = R R.my_atom = src - hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudunknown") - hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") + //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy") + //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudunknown") + ////hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") + //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ..() @@ -48,6 +48,7 @@ var/mob/M = src faction |= "\ref[M]" //what + prepare_data_huds() // Set up DNA. if(!delay_ready_dna && dna) dna.ready_dna(src) @@ -55,6 +56,16 @@ sync_organ_dna() //this shouldn't be necessaaaarrrryyyyyyyy UpdateAppearance() +/mob/living/carbon/human/prepare_data_huds() + //Update med hud images... + ..() + //...sec hud images... + sec_hud_set_ID() + sec_hud_set_implants() + sec_hud_set_security_status() + //...and display them. + add_to_all_human_data_huds() + /mob/living/carbon/human/Destroy() for(var/atom/movable/organelle in organs) qdel(organelle) @@ -858,13 +869,13 @@ modified = 1 spawn() - hud_updateflag |= 1 << WANTED_HUD + //hud_updateflag |= 1 << WANTED_HUD if(istype(usr,/mob/living/carbon/human)) - var/mob/living/carbon/human/U = usr - U.handle_regular_hud_updates() + //var/mob/living/carbon/human/U = usr + sec_hud_set_security_status() if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/U = usr - U.handle_regular_hud_updates() + //var/mob/living/silicon/robot/U = usr + sec_hud_set_security_status() if(!modified) usr << "\red Unable to locate a data core entry for this person." @@ -990,11 +1001,11 @@ spawn() if(istype(usr,/mob/living/carbon/human)) - var/mob/living/carbon/human/U = usr - U.handle_regular_hud_updates() + //var/mob/living/carbon/human/U = usr + sec_hud_set_security_status() if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/U = usr - U.handle_regular_hud_updates() + //var/mob/living/silicon/robot/U = usr + sec_hud_set_security_status() if(!modified) usr << "\red Unable to locate a data core entry for this person." diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 28943a4c22b..ac165d9dd6e 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -22,8 +22,12 @@ if(B) if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD) update_revive() + med_hud_set_health() + med_hud_set_status() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() + med_hud_set_health() + med_hud_set_status() /mob/living/carbon/human/adjustBrainLoss(var/amount) if(status_flags & GODMODE) @@ -88,7 +92,7 @@ take_overall_damage(amount, 0) else heal_overall_damage(-amount, 0) - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/adjustFireLoss(var/amount) if(species && species.burn_mod) @@ -97,7 +101,7 @@ take_overall_damage(0, amount) else heal_overall_damage(0, -amount) - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) if(species && species.brute_mod) @@ -112,7 +116,7 @@ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. O.heal_damage(-amount, 0, internal=0, robo_repair=(O.status & ORGAN_ROBOT)) - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) if(species && species.burn_mod) @@ -127,7 +131,7 @@ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. O.heal_damage(0, -amount, internal=0, robo_repair=(O.status & ORGAN_ROBOT)) - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/Stun(amount) ..() @@ -181,7 +185,7 @@ O.unmutate() src << "Your [O.name] is shaped normally again." - hud_updateflag |= 1 << HEALTH_HUD //what even is this shit + //hud_updateflag |= 1 << HEALTH_HUD //what even is this shit // Defined here solely to take species flags into account without having to recast at mob/living level. /mob/living/carbon/human/getOxyLoss() @@ -246,7 +250,7 @@ var/obj/item/organ/external/picked = pick(parts) if(picked.heal_damage(brute,burn)) UpdateDamageIcon() - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD updatehealth() //Damages ONE external organ, organ gets randomly selected from damagable ones. @@ -259,7 +263,7 @@ var/obj/item/organ/external/picked = pick(parts) if(picked.take_damage(brute,burn,sharp,edge)) UpdateDamageIcon() - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD updatehealth() speech_problem_flag = 1 @@ -283,7 +287,7 @@ parts -= picked updatehealth() - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD speech_problem_flag = 1 if(update) UpdateDamageIcon() @@ -308,7 +312,7 @@ parts -= picked updatehealth() - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD if(update) UpdateDamageIcon() @@ -335,7 +339,7 @@ This function restores all organs. if(istype(E, /obj/item/organ/external)) if(E.heal_damage(brute, burn)) UpdateDamageIcon() - hud_updateflag |= 1 << HEALTH_HUD + //hud_updateflag |= 1 << HEALTH_HUD else return 0 diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index fe075d41aef..9bbb0021366 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,4 +1,6 @@ /mob/living/carbon/human + + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD) //Hair colour and style var/r_hair = 0 var/g_hair = 0 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index fae439fd414..e728fb2db9d 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -164,9 +164,11 @@ if(internals) internals.icon_state = "internal0" internal = null + sec_hud_set_ID() update_inv_wear_mask() else if(I == wear_id) wear_id = null + sec_hud_set_ID() update_inv_wear_id() else if(I == wear_pda) wear_pda = null @@ -220,6 +222,7 @@ wear_mask = W if((wear_mask.flags & BLOCKHAIR) || (wear_mask.flags & BLOCKHEADHAIR)) update_hair(redraw_mob) //rebuild hair + sec_hud_set_ID() update_inv_wear_mask(redraw_mob) if(slot_handcuffed) handcuffed = W @@ -238,6 +241,7 @@ update_inv_belt(redraw_mob) if(slot_wear_id) wear_id = W + sec_hud_set_ID() update_inv_wear_id(redraw_mob) if(slot_wear_pda) wear_pda = W diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index fe373bf3280..fa288852406 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -51,8 +51,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc loc_as_cryobag.used++ in_stasis = 1 - if(mob_master.current_cycle % 30 == 15) - hud_updateflag = 1022 + //if(mob_master.current_cycle % 30 == 15) + //hud_updateflag = 1022 + //HudRefactor:WTF do i put here.... voice = GetVoice() @@ -990,13 +991,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/handle_hud_icons() species.handle_hud_icons(src) -/mob/living/carbon/human/handle_regular_hud_updates() - if(hud_updateflag) - handle_hud_list() +///mob/living/carbon/human/handle_regular_hud_updates() +// if(hud_updateflag) +// handle_hud_list() - if(..()) - if(hud_updateflag) - handle_hud_list() +// if(..()) +// if(hud_updateflag) +// handle_hud_list() /mob/living/carbon/human/handle_random_events() @@ -1260,92 +1261,92 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc */ -/mob/living/carbon/human/proc/handle_hud_list() +///mob/living/carbon/human/proc/handle_hud_list() +// +// if(hud_updateflag & 1 << HEALTH_HUD) +// var/image/holder = hud_list[HEALTH_HUD] +// if(stat == 2) +// holder.icon_state = "hudhealth-100" // X_X +// else +// holder.icon_state = "hud[RoundHealth(health)]" +// +// hud_list[HEALTH_HUD] = holder +// +// +// if(hud_updateflag & 1 << STATUS_HUD) +// var/foundVirus = 0 +// for (var/ID in virus2) +// if (ID in virusDB) +// foundVirus = 1 +// break - if(hud_updateflag & 1 << HEALTH_HUD) - var/image/holder = hud_list[HEALTH_HUD] - if(stat == 2) - holder.icon_state = "hudhealth-100" // X_X - else - holder.icon_state = "hud[RoundHealth(health)]" +// var/image/holder = hud_list[STATUS_HUD] +// var/image/holder2 = hud_list[STATUS_HUD_OOC] +// if(stat == 2) +// holder.icon_state = "huddead" +// holder2.icon_state = "huddead" +// else if(status_flags & XENO_HOST) +// holder.icon_state = "hudxeno" +// holder2.icon_state = "hudxeno" +// else if(foundVirus) +// holder.icon_state = "hudill" +// else if(has_brain_worms()) +// var/mob/living/simple_animal/borer/B = has_brain_worms() +// if(B.controlling) +// holder.icon_state = "hudbrainworm" +// else +// holder.icon_state = "hudhealthy" +// holder2.icon_state = "hudbrainworm" +// else +// holder.icon_state = "hudhealthy" +// if(virus2.len) +// holder2.icon_state = "hudill" +// else +// holder2.icon_state = "hudhealthy" - hud_list[HEALTH_HUD] = holder +// hud_list[STATUS_HUD] = holder +// hud_list[STATUS_HUD_OOC] = holder2 +// - - if(hud_updateflag & 1 << STATUS_HUD) - var/foundVirus = 0 - for (var/ID in virus2) - if (ID in virusDB) - foundVirus = 1 - break - - var/image/holder = hud_list[STATUS_HUD] - var/image/holder2 = hud_list[STATUS_HUD_OOC] - if(stat == 2) - holder.icon_state = "huddead" - holder2.icon_state = "huddead" - else if(status_flags & XENO_HOST) - holder.icon_state = "hudxeno" - holder2.icon_state = "hudxeno" - else if(foundVirus) - holder.icon_state = "hudill" - else if(has_brain_worms()) - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B.controlling) - holder.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" - holder2.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" - if(virus2.len) - holder2.icon_state = "hudill" - else - holder2.icon_state = "hudhealthy" - - hud_list[STATUS_HUD] = holder - hud_list[STATUS_HUD_OOC] = holder2 - - - if(hud_updateflag & 1 << ID_HUD) - var/image/holder = hud_list[ID_HUD] - if(wear_id) - var/obj/item/weapon/card/id/I = wear_id.GetID() - if(I) - holder.icon_state = "hud[ckey(I.GetJobName())]" - else - holder.icon_state = "hudunknown" - else - holder.icon_state = "hudunknown" - - - hud_list[ID_HUD] = holder - - - if(hud_updateflag & 1 << WANTED_HUD) - var/image/holder = hud_list[WANTED_HUD] - holder.icon_state = "hudblank" - var/perpname = name - if(wear_id) - var/obj/item/weapon/card/id/I = wear_id.GetID() - if(I) - perpname = I.registered_name - for(var/datum/data/record/E in data_core.general) - if(E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) - holder.icon_state = "hudwanted" - break - else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) - holder.icon_state = "hudprisoner" - break - else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled")) - holder.icon_state = "hudparolled" - break - else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) - holder.icon_state = "hudreleased" - break - hud_list[WANTED_HUD] = holder +// if(hud_updateflag & 1 << ID_HUD) +// var/image/holder = hud_list[ID_HUD] +// if(wear_id) +// var/obj/item/weapon/card/id/I = wear_id.GetID() +// if(I) +// holder.icon_state = "hud[ckey(I.GetJobName())]" +// else +// holder.icon_state = "hudunknown" +// else +// holder.icon_state = "hudunknown" +// +// +// hud_list[ID_HUD] = holder +// +// +// if(hud_updateflag & 1 << WANTED_HUD) +// var/image/holder = hud_list[WANTED_HUD] +// holder.icon_state = "hudblank" +// var/perpname = name +// if(wear_id) +// var/obj/item/weapon/card/id/I = wear_id.GetID() +// if(I) +// perpname = I.registered_name +// for(var/datum/data/record/E in data_core.general) +// if(E.fields["name"] == perpname) +// for (var/datum/data/record/R in data_core.security) +// if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) +// holder.icon_state = "hudwanted" +// break +// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) +// holder.icon_state = "hudprisoner" +// break +// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled")) +// holder.icon_state = "hudparolled" +// break +// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) +// holder.icon_state = "hudreleased" +// break +/* hud_list[WANTED_HUD] = holder if(hud_updateflag & 1 << IMPLOYAL_HUD || hud_updateflag & 1 << IMPCHEM_HUD || hud_updateflag & 1 << IMPTRACK_HUD) @@ -1436,6 +1437,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc hud_list[NATIONS_HUD] = holder hud_updateflag = 0 +*/ /mob/living/carbon/human/handle_silent() if(..()) diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index 28862cf6cfc..ee5034a23f2 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -5,6 +5,4 @@ src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station." update_pipe_vision() update_hud() - if(ticker && ticker.mode) - ticker.mode.update_all_synd_icons() //This proc only sounds CPU-expensive on paper. It is O(n^2), but the outer for-loop only iterates through syndicates, which are only prsenet in nuke rounds and even when they exist, there's usually 6 of them. return diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 6c12bc9b5a7..3de3c0a714b 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -422,13 +422,13 @@ if(!G.see_darkness) H.see_invisible = SEE_INVISIBLE_MINIMUM - switch(G.HUDType) - if(SECHUD) - process_sec_hud(H,1) - if(MEDHUD) - process_med_hud(H,1) - if(ANTAGHUD) - process_antag_hud(H) + //switch(G.HUDType) + // if(SECHUD) + // process_sec_hud(H,1) + // if(MEDHUD) + // process_med_hud(H,1) + // if(ANTAGHUD) + // process_antag_hud(H) if(H.head) if(istype(H.head, /obj/item/clothing/head)) @@ -438,13 +438,13 @@ if(!hat.see_darkness) H.see_invisible = SEE_INVISIBLE_MINIMUM - switch(hat.HUDType) - if(SECHUD) - process_sec_hud(H,1) - if(MEDHUD) - process_med_hud(H,1) - if(ANTAGHUD) - process_antag_hud(H) + //switch(hat.HUDType) + // if(SECHUD) + // process_sec_hud(H,1) + // if(MEDHUD) + // process_med_hud(H,1) + // if(ANTAGHUD) + // process_antag_hud(H) if(istype(H.back, /obj/item/weapon/rig)) ///ahhhg so snowflakey var/obj/item/weapon/rig/rig = H.back @@ -460,13 +460,13 @@ if(!G.see_darkness) H.see_invisible = SEE_INVISIBLE_MINIMUM - switch(G.HUDType) - if(SECHUD) - process_sec_hud(H,1) - if(MEDHUD) - process_med_hud(H,1) - if(ANTAGHUD) - process_antag_hud(H) + //switch(G.HUDType) + // if(SECHUD) + // process_sec_hud(H,1) + // if(MEDHUD) + // process_med_hud(H,1) + // if(ANTAGHUD) + // process_antag_hud(H) if(H.vision_type) H.see_in_dark = max(H.see_in_dark, H.vision_type.see_in_dark, darksight) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 0b1ee60a3ea..062a8e3b69e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -54,7 +54,7 @@ update_canmove() if(client) - regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT + //regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT handle_regular_hud_updates() //IT JUST REMOVES FUCKING HUD IMAGES if(get_nations_mode()) process_nations() diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 9c3cac087a4..11877529681 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -11,30 +11,7 @@ src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station." //Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways. update_pipe_vision() - + update_interface() - //Round specific stuff like hud updates - if(ticker && ticker.mode) - var/ref = "\ref[mind]" - switch(ticker.mode.name) - if("revolution") - if((mind in ticker.mode.revolutionaries) || (src.mind in ticker.mode:head_revolutionaries)) - ticker.mode.update_rev_icons_added(src.mind) - if("cult") - if(mind in ticker.mode:cult) - ticker.mode.update_cult_icons_added(src.mind) - if("nuclear emergency") - if(mind in ticker.mode:syndicates) - ticker.mode.update_all_synd_icons() - if("mutiny") - var/datum/game_mode/mutiny/mode = get_mutiny_mode() - if(mode) - mode.update_all_icons() - if("vampire") - if((ref in ticker.mode.vampire_thralls) || (mind in ticker.mode.vampire_enthralled)) - ticker.mode.update_vampire_icons_added(mind) - if("shadowling") - if((mind in ticker.mode.shadowling_thralls) || (mind in ticker.mode.shadows)) - ticker.mode.update_shadow_icons_added(src.mind) return . diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 92d1c1cdff3..d01e5c6c9ab 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -82,10 +82,12 @@ var/list/ai_verbs_default = list( var/turf/waypoint //Holds the turf of the currently selected waypoint. var/waypoint_mode = 0 //Waypoint mode is for selecting a turf via clicking. - var/obj/item/borg/sight/hud/sec/sechud = null - var/obj/item/borg/sight/hud/med/healthhud = null + //var/obj/item/borg/sight/hud/sec/sechud = null + //var/obj/item/borg/sight/hud/med/healthhud = null var/arrivalmsg = "$name, $rank, has arrived on the station." + med_hud = DATA_HUD_MEDICAL_BASIC + sec_hud = DATA_HUD_SECURITY_BASIC /mob/living/silicon/ai/proc/add_ai_verbs() src.verbs |= ai_verbs_default @@ -175,15 +177,15 @@ var/list/ai_verbs_default = list( new /obj/machinery/ai_powersupply(src) - hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ai_list += src ..() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 8d1125982aa..86dc6b21343 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -145,13 +145,13 @@ theAPC = null process_queued_alarms() - regular_hud_updates() + //regular_hud_updates() - switch(sensor_mode) - if (SEC_HUD) - process_sec_hud(src, 1, eyeobj) - if (MED_HUD) - process_med_hud(src, 1, eyeobj) + //switch(sensor_mode) + /// if (SEC_HUD) + // process_sec_hud(src, 1, eyeobj) + // if (MED_HUD) + // process_med_hud(src, 1, eyeobj) if(get_nations_mode()) process_nations_ai() @@ -165,6 +165,9 @@ health = 100 - getOxyLoss() - getToxLoss() - getBruteLoss() else health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() + diag_hud_set_status() + diag_hud_set_health() + /mob/living/silicon/ai/proc/lacks_power() var/turf/T = get_turf(src) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index 6a981464bd5..8b7c7863afc 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -1,10 +1,10 @@ /mob/living/silicon/pai/Life() . = ..() if(.) - if(secHUD == 1) - process_sec_hud(src, 1) - if(medHUD == 1) - process_med_hud(src, 1) + //if(secHUD == 1) + // process_sec_hud(src, 1) + ////if(medHUD == 1) + // process_med_hud(src, 1) if(silence_time) if(world.timeofday >= silence_time) silence_time = null diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 7c7a802a17e..da92258aaba 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -460,7 +460,9 @@ toggle(mob/living/silicon/pai/user) user.secHUD = !user.secHUD - + user.remove_med_sec_hud() + if(user.secHUD) + user.add_sec_hud() is_active(mob/living/silicon/pai/user) return user.secHUD @@ -471,6 +473,9 @@ toggle(mob/living/silicon/pai/user) user.medHUD = !user.medHUD + user.remove_med_sec_hud() + if(user.medHUD) + user.add_med_hud() is_active(mob/living/silicon/pai/user) return user.medHUD diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index a6ce6632258..e11766bb001 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -71,6 +71,7 @@ stat = UNCONSCIOUS update_headlamp(1) Paralyse(3) + diag_hud_set_borgcell() /mob/living/silicon/robot/handle_regular_status_updates() @@ -95,6 +96,7 @@ if(.) //alive if(health <= config.health_threshold_dead) death() + diag_hud_set_status() return if(!istype(src, /mob/living/silicon/robot/drone)) @@ -119,6 +121,8 @@ else stat = CONSCIOUS + diag_hud_set_health() + diag_hud_set_status() else //dead eye_blind = 1 @@ -224,15 +228,15 @@ cells.icon_state = "charge-empty" -/mob/living/silicon/robot/handle_regular_hud_updates() - if(!client) - return - - switch(sensor_mode) - if(SEC_HUD) - process_sec_hud(src,1) - if(MED_HUD) - process_med_hud(src,1) +/*/mob/living/silicon/robot/handle_regular_hud_updates() +// if(!client) +// return +// +// switch(sensor_mode) +// if(SEC_HUD) +// process_sec_hud(src,1) +// if(MED_HUD) +// process_med_hud(src,1) if(syndicate) if(ticker.mode.name == "traitor") @@ -251,6 +255,7 @@ ..() return 1 + */ diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 842ff2262a9..5096653c7fa 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -80,6 +80,8 @@ var/list/robot_verbs_default = list( var/updating = 0 //portable camera camerachunk update + hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD) + var/jetpackoverlay = 0 var/magpulse = 0 @@ -141,15 +143,16 @@ var/list/robot_verbs_default = list( cell_component.wrapped = cell cell_component.installed = 1 - hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") + //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + diag_hud_set_borgcell() scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) @@ -719,6 +722,7 @@ var/list/robot_verbs_default = list( //This will mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z C.brute_damage = 0 C.electronics_damage = 0 + diag_hud_set_borgcell() else if (istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool)) if (wiresexposed) @@ -959,6 +963,7 @@ var/list/robot_verbs_default = list( user << "You remove \the [cell]." cell = null update_icons() + diag_hud_set_borgcell() if(!opened && (!istype(user, /mob/living/silicon))) if (user.a_intent == I_HELP) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 986f6b3c7e1..f4e28cf2d48 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -8,7 +8,7 @@ var/list/stating_laws = list()// Channels laws are currently being stated on var/list/alarms_to_show = list() var/list/alarms_to_clear = list() - var/list/hud_list[10] + //var/list/hud_list[10] var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer var/list/alarm_handlers = list() // List of alarm handlers this silicon is registered to var/designation = "" @@ -19,19 +19,28 @@ var/speak_query = "queries" var/pose //Yes, now AIs can pose too. - var/sensor_mode = 0 //Determines the current HUD. + //var/sensor_mode = 0 //Determines the current HUD. var/next_alarm_notice var/list/datum/alarm/queued_alarms = new() - #define SEC_HUD 1 //Security HUD mode - #define MED_HUD 2 //Medical HUD mode + hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD) + + + var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use + var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use + var/d_hud = DATA_HUD_DIAGNOSTIC //There is only one kind of diag hud + var/local_transmit //If set, can only speak to others of the same type within a short range. var/obj/item/device/radio/common_radio /mob/living/silicon/New() silicon_mob_list |= src ..() + var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC] + diag_hud.add_to_hud(src) + diag_hud_set_status() + diag_hud_set_health() add_language("Galactic Common") init_subsystems() @@ -252,17 +261,41 @@ /mob/living/silicon/binarycheck() return 1 +/mob/living/silicon/proc/remove_med_sec_hud() + var/datum/atom_hud/secsensor = huds[sec_hud] + var/datum/atom_hud/medsensor = huds[med_hud] + var/datum/atom_hud/diagsensor = huds[d_hud] + secsensor.remove_hud_from(src) + medsensor.remove_hud_from(src) + diagsensor.remove_hud_from(src) + +/mob/living/silicon/proc/add_sec_hud() + var/datum/atom_hud/secsensor = huds[sec_hud] + secsensor.add_hud_to(src) + +/mob/living/silicon/proc/add_med_hud() + var/datum/atom_hud/medsensor = huds[med_hud] + medsensor.add_hud_to(src) + +/mob/living/silicon/proc/add_diag_hud() + var/datum/atom_hud/diagsensor = huds[d_hud] + diagsensor.add_hud_to(src) + + /mob/living/silicon/proc/toggle_sensor_mode() - var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Disable") + var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Diagnostic","Disable") + remove_med_sec_hud() switch(sensor_type) if ("Security") - sensor_mode = SEC_HUD + add_sec_hud() src << "Security records overlay enabled." if ("Medical") - sensor_mode = MED_HUD + add_med_hud() src << "Life signs monitor overlay enabled." + if ("Diagnostic") + add_diag_hud() + src << "Robotics diagnostic overlay enabled." if ("Disable") - sensor_mode = 0 src << "Sensor augmentations disabled." /mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index d8c6fabb5fe..71b0e5a6122 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -340,8 +340,8 @@ /mob/living/simple_animal/hostile/guardian/healer/Life() ..() - regular_hud_updates() - process_med_hud(src, 1) + var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED] + medsensor.add_hud_to(src) /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() ..() diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 4ed0f62e96b..ce0dfc31efe 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -64,6 +64,9 @@ client.screen += client.void + //HUD updates (antag hud, etc) + //readd this mob's HUDs (antag, med, etc) + reload_huds() CallHook("Login", list("client" = src.client, "mob" = src)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 46a7c80667b..26f629b1ae3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -18,8 +18,13 @@ dead_mob_list += src else living_mob_list += src + prepare_huds() ..() +/atom/proc/prepare_huds() + for(var/hud in hud_possible) + hud_list[hud] = image('icons/mob/hud.dmi', src, "") + /mob/proc/generate_name() return name diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 4f3ad8d2d6b..0a61d9030c1 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -131,6 +131,8 @@ var/datum/hud/hud_used = null + hud_possible = list(SPECIALROLE_HUD) + var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining. var/datum/action/scan_mode/scanner = new diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 80223eafe04..a6cd4553270 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -31,7 +31,7 @@ if ("groin") return "abdominal" return "" - + fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ @@ -177,7 +177,7 @@ "\blue You take [obj] out of [target]'s [affected.name]s with \the [tool]." ) affected.implants -= obj - target.hud_updateflag |= 1 << IMPLOYAL_HUD + target.sec_hud_set_implants() //Handle possessive brain borers. if(istype(obj,/mob/living/simple_animal/borer)) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 6edb0d7c573fcd45075d5930809353d3b998c280..d89c3342e777d0cde33397884c63b5dee761740f 100644 GIT binary patch literal 12207 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 Dntd8U literal 5792 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 SiPhw9ewi9tU98pjNckW6z+5B% diff --git a/paradise.dme b/paradise.dme index 0f1016441a2..fda32c4de2d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -182,6 +182,7 @@ #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" #include "code\datums\gas_mixture.dm" +#include "code\datums\hud.dm" #include "code\datums\martial.dm" #include "code\datums\material_container.dm" #include "code\datums\mind.dm" @@ -246,13 +247,13 @@ #include "code\defines\procs\announce.dm" #include "code\defines\procs\AStar.dm" #include "code\defines\procs\dbcore.dm" -#include "code\defines\procs\hud.dm" #include "code\defines\procs\radio.dm" #include "code\defines\procs\records.dm" #include "code\defines\procs\statistics.dm" #include "code\game\asteroid.dm" #include "code\game\atoms.dm" #include "code\game\atoms_movable.dm" +#include "code\game\data_huds.dm" #include "code\game\response_team.dm" #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" @@ -275,6 +276,7 @@ #include "code\game\dna\genes\powers.dm" #include "code\game\dna\genes\vg_disabilities.dm" #include "code\game\dna\genes\vg_powers.dm" +#include "code\game\gamemodes\antag_hud.dm" #include "code\game\gamemodes\antag_spawner.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\factions.dm" @@ -1382,7 +1384,6 @@ #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" -#include "code\modules\mob\living\carbon\metroid\hud.dm" #include "code\modules\mob\living\carbon\metroid\life.dm" #include "code\modules\mob\living\carbon\metroid\login.dm" #include "code\modules\mob\living\carbon\metroid\metroid.dm" From 972177d1e98b0aff0765bc4b41b92fb82c215209 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 10 Dec 2015 06:45:19 -0500 Subject: [PATCH 02/21] its working..kinda --- code/__DEFINES/hud.dm | 27 ++++++++++--------- code/datums/hud.dm | 22 +++++++-------- code/game/data_huds.dm | 14 +++++----- code/game/gamemodes/nations/nations.dm | 4 +-- .../mob/living/carbon/carbon_defines.dm | 1 + 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index c7aae28faf7..c22ba708774 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -1,20 +1,23 @@ + // for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list // note: if you add more HUDs, even for non-human atoms, make sure to use unique numbers for the defines! -// /datum/hud expects these to be unique -#define HEALTH_HUD "1" // a simple line rounding the mob's number health -#define STATUS_HUD "2" // alive, dead, diseased, etc. +// /datum/atom_hud expects these to be unique +// these need to be strings in order to make them associative lists +#define HEALTH_HUD "1" // dead, alive, sick, health status +#define STATUS_HUD "2" // a simple line rounding the mob's number health #define ID_HUD "3" // the job asigned to your ID #define WANTED_HUD "4" // wanted, released, parroled, security status -#define IMPLOYAL_HUD "5" // loyality implant +#define IMPLOYAL_HUD "5" // loyality implant #define IMPCHEM_HUD "6" // chemical implant -#define IMPTRACK_HUD "7" // tracking implant -#define SPECIALROLE_HUD "8" // AntagHUD image -#define STATUS_HUD_OOC "9" // STATUS_HUD without virus db check for someone being ill. -#define NATIONS_HUD "10" //Show nations icons during nations gamemode -#define DIAG_STAT_HUD "11" // Silicon/Mech Status -#define DIAG_HUD "12" // Silicon health bar -#define DIAG_BATT_HUD "13"// Borg/Mech power meter -#define DIAG_MECH_HUD "14"// Mech health bar +#define IMPTRACK_HUD "7" // tracking implant +#define DIAG_STAT_HUD "8" // Silicon/Mech Status +#define DIAG_HUD "9" // Silicon health bar +#define DIAG_BATT_HUD "10"// Borg/Mech power meter +#define DIAG_MECH_HUD "11"// Mech health bar +#define STATUS_HUD_OOC "12" // STATUS_HUD without virus db check for someone being ill. +//for antag huds. these are used at the /mob level +#define SPECIALROLE_HUD "12" +#define NATIONS_HUD "13" //Show nations icons during nations gamemode //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 3b52ab3c7ca..e37f8f0800b 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -1,18 +1,18 @@ /* HUD DATUMS */ ///GLOBAL HUD LIST -var/datum/atom_hud/huds = list( - DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), - DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), - DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), - DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), +var/datum/atom_hud/huds = list( \ + DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \ + DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \ + DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ + DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), - ANTAG_HUD_CULT = new/datum/atom_hud/antag(), - ANTAG_HUD_REV = new/datum/atom_hud/antag(), - ANTAG_HUD_OPS = new/datum/atom_hud/antag(), - ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), - ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), - DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations() + //DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations(), \// + ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ + ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ + ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ + ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \ + ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \ ) /datum/atom_hud diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index b7cff80f8f4..3dfc00c5232 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -47,8 +47,8 @@ hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) -/datum/atom_hud/data/human/nations - hud_icons = list(NATIONS_HUD) +///datum/atom_hud/data/human/nations +// hud_icons = list(NATIONS_HUD) /* MED/SEC/DIAG HUD HOOKS */ /* @@ -254,10 +254,10 @@ ////NATIONS///// -/mob/living/carbon/human/proc/nation_hud_set_ID() - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudunknown" - if(mind && mind.nation) - holder.icon_state = "hud[mind.nation.default_name]" +///mob/living/carbon/human/proc/nation_hud_set_ID() +// var/image/holder = hud_list[NATIONS_HUD] +// holder.icon_state = "hudunknown" +// if(mind && mind.nation) +// holder.icon_state = "hud[mind.nation.default_name]" diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index b1e159ca2f0..6003a8a3560 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -139,7 +139,7 @@ datum/game_mode/nations continue H << "You are now part of the great sovereign nation of [H.mind.nation.default_name]!" continue - H.nation_hud_set_ID() + //H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." continue @@ -272,7 +272,7 @@ datum/game_mode/nations H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 - H.nation_hud_set_ID() + //H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." return 1 diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 97ac64daf82..4288b561f2d 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,5 +1,6 @@ /mob/living/carbon/ gender = MALE + hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD) var/list/stomach_contents = list() var/brain_op_stage = 0.0 var/list/datum/disease2/disease/virus2 = list() From 670a2a9e33913897ea7a7d9578bd29b5af879c65 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 10 Dec 2015 07:23:40 -0500 Subject: [PATCH 03/21] Icon names --- code/game/data_huds.dm | 11 ++++++++--- code/modules/mob/dead/observer/observer.dm | 4 ++-- icons/mob/hud.dmi | Bin 12207 -> 12020 bytes 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 3dfc00c5232..b31b60690a0 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -109,8 +109,10 @@ //called when a carbon changes stat, virus or XENO_HOST /mob/living/carbon/proc/med_hud_set_status() var/image/holder = hud_list[STATUS_HUD] + var/image/holder2 = hud_list[STATUS_HUD_OOC] if(stat == 2) holder.icon_state = "huddead" + holder2.icon_state = "huddead" else if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" else if(check_virus()) @@ -121,8 +123,10 @@ holder.icon_state = "hudbrainworm" else holder.icon_state = "hudhealthy" + holder2.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" + holder2.icon_state = "hudhealthy" @@ -158,6 +162,7 @@ holder = hud_list[IMPCHEM_HUD] holder.icon_state = "hud_imp_chem" + /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] var/perpname = get_face_name(get_id_name("")) @@ -169,13 +174,13 @@ holder.icon_state = "hudwanted" return if("Incarcerated") - holder.icon_state = "hudincarcerated" + holder.icon_state = "hudprisoner" return if("Parolled") holder.icon_state = "hudparolled" return - if("Discharged") - holder.icon_state = "huddischarged" + if("Released") + holder.icon_state = "hudreleased" return holder.icon_state = null diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index e5cdfece68e..b0b7239685d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -146,10 +146,10 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] - C.images += target.hud_list[NATIONS_HUD] + //C.images += target.hud_list[NATIONS_HUD] for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] - C.images += target.hud_list[NATIONS_HUD] + //C.images += target.hud_list[NATIONS_HUD] return 1 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index d89c3342e777d0cde33397884c63b5dee761740f..e372888632e85da8a5afd7695c23afe58857dee0 100644 GIT binary patch literal 12020 zcmch7XH-+sw(d>{y$eba2nd2$sM32AktT{rFVc}F2qG;(svu32jv&2A5v53t6hY}V z^dgbTQ`QIZG>YFCrbB&>N?ZJ&{ z@2E}|Ma(^<62-G3+daQEzIIMS>zw(F;IyY=+ww-wko~5cwquVq^zv@M3$f3i6D(DE zxjURy%DZ=8Qf%3m&%1&#Ongj}#=Kr&k%PxHtMuiT!@WoPE-YTFtyR5uvKk>g>snw5 z0gyq)m`r|jz}lwD=WexJS?`wAO5ye7p?W5L?xzSTN-e*?vfB2y<5e$xqSB=N;FHb= zckue~&L!)o7p=DM(I@R!cY-uJ5-CgJ-OD8~lZR6>^&D&=jul&%5V!aXiyzyfOmC^p zqJQUm8|z@-nX*D9goR9hKg`?OsKbq2*0WM>eSTcmIQ?|%_>>WIdGSj$?)-}5eEA-x zi|Tmb^6jIj_n$w!-*o*brpxr!C!OtTKz2#A?b6*ICp&BL-(oMUOdlW4NmJNYWmbQ( zsU5sM8_RJMrJA-(Ak&m^nq#JWTMBs>d+CNI?LrT;U@ADKouuf|6RAz}*w8zFQGMwz z);7bAXK$j#d2%ErC!X`>wJ|2OBs%xg^nGv`u6b7dJ(y0bo3?jLm^$s-<;|R(Uuh+_ zAy;4VQwv6mravo-jNd3eW!P4!&sDlS5bE7&)%i_pWPI$?e?V$?@m?k+&JU99Js!UaolV zKQ9p8`#;e<$j;cV^u?612&h&+e*SALkv%hZK!}kXI!u4fPp*mZQfelsX&z7e!oKL7 z_Tj4s0Kg4ssjC?JWp2*~m>c@wmG+P-mw3grwakUT3N7CGmgy{27o*8;F;Y7^W9Xu7 zMq7?Gb=GRdRi};KEBRPf;PATSitC}#yx4Qb_~#iP#qC)P65pwlkm|-3Gvly$)_xIj z4#eo8j7T=}aDPEm+>vbF(R~+r7PuOk#}*MH?uHczA_aPPn^okN2!2e(9vTDV8mE%H zW6~wKm=OVLpjgB~#tW8N0pnjEJK;&?*}&7V-F*Zo|3P39>W(K7$79cvodFTY{!CL0 z8Nei<_n{i5hlGAD9<0Vcf5op=((329eZmjC`*FHFm#v%TTS#I}oU`-zjy(XcNa@t} zXj@X+xOM3gZcRIeU6W#cvH@Xn6bQh4Qg6ZJucXQrY_edz#(qnK#MxgAdj z7=Rc4;0dcc4@}?YVVJ?bf_)RMYWB<^m^AO4mo4}sK&F%S^(}$qKzwh&IAA&0mmAF6zX!#B2jVf5pWu(}E(jr!Q=;b+ZK zPD_h3%)QvTtKWY~lfEpy`OYN0=ciyQm2L8B3|x@=+gYS##cb;K;Pe>R%1TXL8pxVT zi7KUU<6K$ykbukd$RC%8$M+qs-rydd6a#xU?8{mZbiDubgQ4x}B{06n`H>6k?{v(Z zP>ycKG0${cI5ebZ)eu*pZxQ`?EWmK1aPQMMnz$ke0&ju&= zwQG(dKvWcSC%}E}5ib?ODaP69g=>O6tpx$433h?V%<7kleZ&%ETO`f|2fnBX1_Y`+VSPJ@f8%3D^mQ*lWmsElJ8*{d1 zYKip5o`}$>d7tmUYQUE>c@e+iJy#qBBRE49nFaihU7TO9Jghw}mf&*r_R)ewP%v}cb`a>W`I02!Q=Y^!pPqi{}7TLI70E!J0& zO5s~yxcIQ0YhmSPpr`C2FF{qC;$6OKrC4ytyuyYDewA8S(nt7W1dQX_g8+P%Vauu@ zpq!yXPb!qL#{2V)uI3QAkh%YwDu7t?wE4*o_0*(+r=NWK-6Vgm;aDvk2)mXx2@4rq zrB{AHh~4~Tev*`F^>D4Xo6VlT^))j9XmMUD7^SP-6i3tn>qBbpv!$n}h@sXodpQ#Y z!pF&NgS1)8sY80hRD;{4PMqY?ayd@R`&z(&S!cPS{$Tf15|}WRzid8Ubbd z2GC_&9!3y~roELj==64fN=vrp*22 zwmu0iU)WoE8R0Tu`cDM%ZYKmjo^v2?7r$VNZv_U`Jh=Yqn&*awWo5|G|Sd)7$O`pbJygGptYm+^F0X1kiEHLVz2D zDa4*d7bEtxF`S@)8oMhP57W|myXPklz)Mg40Ogm&fW$2&g*;|(`npP{iP87Od5UdL zYanTd&>NbY&3(t@TpEVKDziL83MTzQQW-F!@zvGUs zg|J}z2#0@Ds&)sB_!JVtGOo-S?lQi)z1Y`U;img!wZW&mc}tAO*dPpaD>@-y(!Sfg zu3~(9Mio)!yys%dO<^aR0Xu!&n1<_e#s6HhKguTVB=JS93AP)no36z?CqQC$K79$7 zKUMByN+9@i$kM;BDU;}BNN}E-3R7Onu9Z~r50W$NG~)5z&P(;|Qk4IACB}WpvaL3J zdT;Q}gQl>E&56P5XR@{=PQrUD?%wP(?md4y<&TnC@e3~D^_LS23eS8 z$(;S_@??KMO6V3f8_2M;i$q4I7Ac9*xA(;)Fe5A>*J?y^ae8iL+Va#%#4Bbo%+%UTVU{-ugq2@6K^_05a z9!alhU|_HiC^D&ujeR?U>nd$wQ%@8FuOI95=}Z5gKm-10#ho7n?zhi5u3!0W)`3pr z+`kTAwc2eTvZ~WCUwl=3Uly7I7~^z!=2+LPDDBV~Jz)~J&0BDtq@5-`J_|)Y2C!u% zOL%t0s@R~5-U+k_HT~0^lsUMAe)Ju|WxmO!h92^Rz$6)fj zylQe|^AZwB^y3QHsEA%89#dpM*c5*VQ+x175V@O?^6LBqwp@a2^`G285>U57^?%@( zV8NL0sMeGFgvS+13q!DMU)tHGMsREzU&6Lf7(P(|8v6WUb|3m-q@p-dFM%<^w^E%65qwbac zvS8Vg`9}V)lWZkQ&QWMw>vqW>f7ovHGTHo;fPF`I#BNtRtQ?nWK7M#R#tiSp;&Wzy z(r%371s0IAdKLIW-3)dAb3+1YxxcDCG%t&>c**`XGtB;Hm(sC|=-N?!AS+HQEwQ z0zd?&h5~w!Rooq6?Y-4QGWRC4uGm+oM{025#xGZ0-5tL(Fddr>Vn`g`G$p%fOL^nr ziP*!&H3I0uC#t1M)&D2m<6rw>G#Na$LFh|G(=U;`Y;s@yihOXQEM*4s=s2ICd9>GN z&z@~31`PDaH8zX~O`*4}iIH0^I7E4GLqBxR<>15$>BF<|hRmwl*E_@JFrati97rIh zytDKE?(RWg&5A&*X_C>?HP2c0ahg4l4nz*EJI}%x)(6>!XE1Jh%%c5^O2;hYA*vx) z0pki|_~$~3WV)zaH{lV{7NNl!>c97hIKlAthN<_;F()G8IvF+vkda_4D{0*7HtB zfcrX-`GuIH1>Ywn4V63=;N$1dEiR@2ssc{jnVFfbYXUflQv=+kXD0xhNpk>As18H^ ztE4AFOnAGXWps9eAa@-DPf_)MJQyg!Z3^*-5Nt^3W|s1oyP5n_qw{@52zM0ofRL3y zX}@#0Hmrs|1@8jAICo5`q;5hSP`g+@CuV*%y+#44jX8P*EWf$bQCNOlp4}|qW!E^@ z?7s1#)0fRjYH&qVB|U(&47hWy)WpFRPyY7p+jYX8*UQb(lK$xol^m*XClDd+twqZKl4GCh?z|Li=l96#;X37k=|Sr~%96%Rfm86x`;nn{&#iJv1Tz zfYWTM4p6@1Y*Su9oH&&76>*562jWFu9j|Q3^L8oMj@3I>f~9nvT`5*pVP)}W3ySIV zCqseeLA{Z}tt}K!BI9i54nAHBgjh!?6EkEKD+s^~rX)>XDM7zl)d``ecn1V3moqBw zbxTS5c=X*(0Dp1du69Z2IRT~!`VqLz zdh@msBhx%*uKguIS?*C(cF*xbk~?7($mvYi02j|1+YbtSDcsAaJHW$P2-p0z! z$y=VY5fsGr*3i(n;r~qfQkf>8p-r*@-xiSBE8F3HYovKRMwxMqR${HA#IEHIT1D!7NN}J0bQKA*r_M=ITnrp;^%t{r^D>eJjD3dALV|^ zuU@p{_gB}6D}aj*dK?d=cYTUndMhQ<^i&-p0(3iMchZaq$yL@AmzIJ7bxloM?OqWs z9Fqi?2B@A*zGF7A_m-Up@96n&N~rlkf`KkBrP43{LWq+ap{UzlDaaYW)E`f<;${du zAIYi94@|2cL2nnL8mgw;StCARkPmV1-(TuMT?9MEc$n=;(IkQKqnS73bbIK+NS#$` z|4BAPZw^L8E7SP>mLN&l>z@$ zU5}X2s$38RXcZAuMvX2fX5~SNhm-{}yl18DgW%(Z{nK4rcXuI&{!Gg30mlG}^#&pL zmNN%)zs2zN(Gn)W`ebKzq7|lO^u;(NGm}HUK8F^t{x$>!Jj3xG0OH+uuLyV_**scm zsMLxbupYn~0?Lv5lK?yq)7pkgs;I%?kl&ta_n?R|)iVi3kl;JTcNOlC0)`HCX;4#R6!LL>o zN~GH}D!>_OuF)QI?^{G)TyUtDf#*Dv3bf`kW*x z^TaABb4RH*4xoc7e(6gUCAob0a;_PSQ?MDsJy1uvAxw|xU3R4{Zb^b7bufU$nmu36 zSg329y4^cvyBjxew(Tv#+OTJbpi`31#l`ncaS}n1e~C-W8n9hMyshe68SFGxdb#Nq z_OaS(Cain_cqrrsee&do1PkXc0-5sm0I*3NDSrJF$D&B}&<(=C5v&Y(2k7wba)f^3 zOiEb80Ys$VJxsT-ftG_T1cJ%pm3x1{l;PdIyB zkPC$g!YGap4!tD+)+wy(k6+$3JCgp8qoxP4{8(J+GVS;)KeVTeJM%Y8?rAj!WmMHNd^@InrDPSF8)Q($v$Hb!ftOs_qBB;5^q3o5vV& zlyVZZ13}WGUTmea#43%rcE76?p8~&!Jbu4X1*&bu%fxc+@XQsKBw^O5%z0V6;au2te#lOZdk_}pL&oto z?p_2#Z6v$`mHXvO??J;Uk-dTUth_;@Xn*L9U>ogEP$PKZ@H&6+_ot-{Inwl^}-aohtq<^cnXdBi$T%8IBVF?3}24aGvF!C#*tM;?$Au-gn}maK4iNlG|F2t!p;rl#_UDy)s&(yx7YLRgBA!O-q9m6(gH0n&YB!J~n{ zav;)~ZYy-`%(Sk|9siRTEYJ}M--dmv9`cnxTOkom{IbtM$6SOR`^yXn z`<&#syU+QzDY>uJe9_TjOrw2gHwkm40dn@SJYq8T4MRgC}D|hh5tJ>lFN7U zqKIzj(rCk)p5^njFyDAwg0`oJSod3;Oxw*7E^rVL1|j>$anEl{j_*rb*dC(PlFbB` zjptfn{Z|V>2)>|4S(QnXzg(xGp%KTzm$1hBEdc!6QibobVnJbHG?8Pqo~*VXMxp$D zIdM`?Mrhire$)$@3$ct>Sj0%WO+jh{)%Djh7^l6z=8!FIu=dEnM~s3TM2=2l$|oT?$@^>ydv zcq46U662ona;_2NSuc*xd$LAXH~buzs}iP#UOSQsHG5ME={7vwRJ=ljRkp1&h!vtj z^PE)mF?#F3CwDW`sQ&0F#&e_c_%rd`&-YALkT$2jo|T$Kh*>k9OJlm$jS&is*UOT% z=}i^=`(y1>(s)?dNrkMiHYJ>hPTH3C7l=7u?2m+2!8Zqrrz%R zyE~i8bV{+z3bhuLPgecLC@rgKW3dVh z867n&5kA`E2Ka(0TqOw$Lx=_+)G{-@`whCgDGR*8WqGhN2dMmI=8dLwhu7?)e@?>g zV!5U(Ab(Cq8zu|1PGpC%?eVAWnh@Qgrj=V7W1p8!4^T0lXi?~l=Ha4ZdOWc%-CIGj zeBK;<(QDQ+Jnq2o{{d@{tk%;p;if#?D{9t{JrCEMa_$jX@hLm|&);P!F7fN%`_Yb3 zchp-Pm*<;ly0yn<{Q9-b1F4sE<}l~s=F=umAw}WLnCrXJH7OK#araa4X(EBCWHf5K zZgtVAr#lRHk^o>TQ59=mOP>7_Q?%W8vbWei^^Q&ap@9KUgPo5&3;?LLE_wmb$i(4B z`h&oX1pEQetCKv9)m`M__F-E`gpe%yHm*p*4xJuFrRTxkYNm=i_Cpqw4y1^BvD?o- zBO@f5xRs5K;p6zN6wgDUt#|QV{JQPLzy4Fd3#&bG#BF>*v^Ru4L`gXFRuHt$K$(vN z7a0}(YqUV_;bkP{lNVVcJ{xr04>n&2-w zY4vs)9GiR-PKa;PJEs4cnfy>e_9iVm z=XDAmpHdxCSL^|&eiLP%?LhltJDySbaN^KYexJVtv-dB7;DgzuscVt|fFTUm@x&JV zBwV6Y4TFFT9v_?ZifmUOn#Pot-XuyhFYnfN(0DJC&SAYu~R zBK?(D<(e!}P_K2J9CnIx`oC}==Nyz+dNWJ^CAx?V6?e6M7q#rOKZ&hNzl}(;<}Q-~ zXCGZmb2h%6F-`IkVcQh$GG=HC^X&z0s77x$F4I0|v|i&}Oegmjzb%3xk%$1h=B@ri z#eYE+_1_QLJ_v^+Uv-!SFMSv)Q2itImnK8Jw;KQF?X7}Q*lr>|8BH#K?s0vyRY|O~ z8b8)^kUt7@+w$r;=e6VzD!_jb4ONftcZ_tMZa``Fnm4WHZ=&Q}V73`U8vS)O=vmPp zM%%O&4q7<=GU?`HMMKtuw&y7dccYm83P};=X_7*{W;%VvA9TRN z@oP8w5F77^wX^ZgXw$W&uPOk%t^73r&*u^Z;JpM3+W;ot z20VuMamO7@1_)5x7-n>y=R$lgqRSgoTU-43t+h@8VtKXE{9OxvHNmYFlLJ6;ifr0* zCN=>SST`)~U*xu}=RlNil;R24JSV2W>*Vku?WMofdejr0Q^L0RJM4Yy-pXJZ#8S`#)oYu;L zg4w;V{V;p>N_`VimeOetc!XM8#)cW>nTEM0b-LnTBmIC>o;`Lhc}#%dg+=r!ufU4< zYKM$udAbR#QZ14z>8t8hIgkAN!>eF+c(fPuoD}CE9A=j_lk%o9$h0}d%`pPb)HiPz z0bgBEROc210b!DabU|*Du`J{d?={334s#+`FVHWNp#)^Yzn{18!zjXnDQ;&x?jtM-BbVw@j;JS( zZ8B($uYErL+ndp;pkG(kawHBcNM=T6&XD-=2SwGlhB$NQ#eCjSv{)ecu91-7PMjwU`)egq~WVHa;%;4}sCZ{iC7OI>+DY+Tp~BK9ni zdqOVszU^Of1B|QT-$Bl=P3-g;{R z5(cw-knOc$niJqwy{<7xq+33TtsCZ zXOcnBaI$cmO%F@|*u43}@IKNfabxqwFFCHp#K{@KybBPk4~F(=-41-w@sFDim$skJpHAjx^2wxJ|@=JFa2KhBMPF4;{Ua3|D=t6poc$&Mt7Fc zcgi+jRbLjl{FFx!N)%B`|AmMu?TR0~lB)E9z;Y>ZGt)S{<6m}(eQ;on7{Ms3tJ6jK z`jba(iM{s9EZ#jg`F8WJ9I8@BtE3K3EXK@Gs0IU%AYuoG1#)|a)MZ%}ynsuT5S}PY znZ*44K5UL8LC3R49G$17rG=ccv9W!b57Yg`A+X>j;dwQ?>K4SPFh6QiK#y2^XbB3o zRWJc(OsR70eUnCc7%3<#QGI7tu%*t{a68UbYTOL88iA zpHG@WEh~{F2g6_3^A~r2zd!%P0B2xOUg(}CHB> z1zAbp*FH^Rv+_Y9tGlCow=$H%ZGnd!sJk7o2I83Q%xlMLBuXy|eueia3+9%y=Yv9B zR2OE`fE=wXGB0-%QUjbcI4A0|{4QZf=i3=Z%ZxNEotLlx&HV-E1)}eNb9myUCJ?}h zQLD0f{dy|@19ON&AN)ql(iew5SDcy%0s30u=6CWhl}IiT4_hSH!^a39C(8cB>Rhs8 zr}fA!%4VIz^q<54O zdO$j%LkJL(%;h`t)_e12{r;PothJNebF*&Fz31$`KcCOuQF=NWbTn)<007WwX{tX4 z00;s!D{4w`*5Z_kU{St#0dO{nF9H+tJ+(0Q}NQJ`K9D%g}ZV*6ZHZES>u0 z+<8wlK!BZD`9_(Q$Blu=iW`E=_A*oX+bvRTBeRRCxt);UMZL@;jX;IdUE&}+_mfH*R}*hKPAP-~B)0nB+Z79{yA1)i8~3`|$+KO7W)?Bka=zBZ2eQR#(3H zMmsUi)O+WzQ!BoYrLE=YPID%oe}rWsW8Kn{)rd667vxY#P8dm?410?g74mwxB65ei z?!9Wimgw0SLfP5jk*ChG?udJ&ELbIG^r$#){71lC8! z>&ANY+=Io}*e_jF$+^^_(H|3IAU?t$aAFIGg$=U~m8B3iw+>nAm54EfXb*$-;Gmcv z+XhDjR|-6y=2D${x84ISSk;5%yr?$${x=-6HJX35X#mkdzl50duzP)m14;44k zF&-2%bx7K}PyZ42<ABD8fhdlXKcokOK(Q;`Q zYu8`n1-pxP`*;$?sCV`1#?J)(`A98vm!y5T-2;g=liS87DiJppDeVqd!ulp?V0yj_ zeIpgku?mS{%SyV zkFMk^Cb5XR#F#OuvX0Xh%KGlY&1XDjdpV!&(pw%W z=);QhbZnTWp6l+hURm5fZ+Nd(f5z1i)(zxz74H<~79wwlDvB~)G~-DQ#Id-YpH zZ$*^-t3qA!WHHM=zV9)mp;L1GE#{6V&coppe%AEeJ0;c1jBhDvFUL2V-l!gt>Zdv?A5om25eOIDxA#RbrQ0Bct;jHFXfj>{} zoAua#2Jj5u3}H7&O%p_?YNY?JhNh2Ge~tX(H$QeKZvLH9JGoEp9)aW94zFjxO(7vn zkLzCK4qx5`fNOx3`kkkKX`3?ve#}cV$~ytSXfE?)F`lCo`y-jA{!ZJugev^9Fy$na zJHmlQh_PTV`}KR`NnUovO+kKUW+rk)$&j9JO_3v%m!nxenzxZb?nWmd$S*L9-4A`Y zg6p)Cu21d$^6nMy#0t?2Wl^tCKd#B6(*1u!e#1pSBSg)n6eDzk?tCe~EVx#?tWv*tGe1ScW;tIWKX0#)Q^ zS@h=LUwKSW|0)r&-+x0sVHiUAgHm=3W_;9wFGl~#Kj%B@TBe45HcRZt!VHHp#sEM{ z67_Y(XVt?l3?a?S@SR>);u1wb;P!fn?{s8an|f}3J{7^tz~GW1XZ)tNAMy0~SNBOy z(xu3x+e%JCq`!kIY8!-JR|d$ZbdoHS6h}(ZDpFcaHT)>Ut=HC$`g6a`ty{e$KYxGu z`)@B_w5xXeD)95{R4c#FRLu?19e3(>djQEYF^Im1VS}F8&m9xf0XB3W2PSvBevbh&FvdrK? z9jST6j=GDTcv}fO@+2~D3jp{91n%{4EaaA{J$XiJ)nUDTy<_QDP<$ibPiZn$D9`B7 z!KXp^CC1-jV&Hu9zCH^gP7{^j#y=1=hkmym|2*zZY+iIGF6$#)VwKNFM)EV}hl~jq z=Y?Eg(%)yCKcHb`N|3k=sH;c602rABq9Lm4x%`v>Q$qIt>|hTC(0hpawcg^XA}v{4 zwD6Y9iz>$A9NXR=1++{zzxdO4f)0{soo|AoLM-iXSVp+k!3e2za#Lj|cv5e~ve6g` zSv#CUz*(YTyAuyTnJACh|EU(ERr5N*`hIWnLBEKs8Q_2b5>zbsQkf0_pkd&k!!tTG zK95`-u8v)@zJ*qda${(8#T<%GmEkQ(dg2zOiYKt&3-{5RByFs@%E!(6S-d-*%qq1s zM(ZZH!J}6l07TI`@!{{^RS}3|qDCGky@^EzM^W29Gm1<~_cv1ZS?-#(vrd zPRK5~s=UD*DgwY!&B}Sr`Y$)XZ##!g2sec#65J<(&4su`#k{O(?dSy$Q5kXtm#sfJ zRH1w)j^kyhUL8Y&PM|ZaNVdvAbSOSBAmsfR&q3=-=uADtmrcxtsr>L_r-52wLtqFd z^H7Skw_yaR+N?iU&*QvbrYrLCkf`v@yHx@}&Ltbwq$SGdyq}n91`0BgzkJt z_NK*LlL1hO4B*`-j^7-xv0ObF?}pP~D=+9{@h~Y1okTA-oSJCdXZx6Zx@-XeZN71d zj}?X{b%AZ}EMNCp*sbgwLIBACw`qeVezNb(R#Y&U#4|h%qJ)ZwQ%Dm%yk|0~^k_wu zP2?e5!s&O|EbNs2@deY-g z)NvNvR=I}U4PAe?XXF>Ix^}&CY9G+^=RcCBV1URS&wE85-$cvIE0e^An$F=MJ5mvD z0(+>n3}@wcCl<6A%oN_&X}t4UuN013nP5`?py|L^|I0w`Sf&cRN%PSob$@^Vp}pc_ zAwNaVDK#t5)7oHL4#!6GUvm1D$-@V^L^1+*1%z(-QvhP6z3!d|Qw%$wREQk#%p+e{ z(BJR;Jl(iIjt&)}8`QF$QCyxs>uT;$UMfCor1 zvA@l7oeSF2TSkv=US<|qU3{lT7|y9NdZL*m9@OsHy@NsA5i&-L4D&);$UeaoX2b*dulPobf^ zasQNO_Xzvf5=C5o$UJ%KY&vFU>oyrW9Zc}Ruiu?+s$;AroLu)B&SM*V$PDGwexosb zdgofq#HpJ5RR4yG-9AHua1Ke96Zq+BW3xUlpXy~j20m1?1-f_7&=0H_yTtz^ESXDp zXqLEsiteJZaSMbR^7`*~{8chCIG~v|YM=rSJsoh@(_-Z@aJOv6JFF9b7Z!xwBi^9+ zbUS*zXiqoCe2%6{Hh1>e$;xyyHV&MQpQ&r$aVHQo6QY<=46i#E=l;s4xRSWQfXEi^ zUKJN(HK$xYiFj>8t*!dwILW?K(2HF4aBaF?;!@Kj)1acKPAZf$R$78cb-@>8fyR{Qe>!>Z#;;D1MhEYs>|;N`(kes8%Z8l zD4~JZ-|ZHuWU(OLS`r}X0lt(#n(IY&Kxc~(!3hbS(r>P??i6xQg+{>BsGslit1i!~ z=rtxfZXKiqkPvCa6=?C*V5@860-~04CxugAw8n4UX>~k@#UK0(esn*mS!VI#9*O(WUy{w|8W*kt%`(1$WHN}4gRIS;tsJJTl*q!^P?1bLdPYX8 z$VQv)3nc6BxTDky`S|#MB95x5`(^IC`Kn7x=cfh{G9ORUD4pUHbmN(QZG2i*0Fz)( zX8Y2u$b#4IdY9l=N+IQ2$I#QD*Y3RUMh6v?=qhUm0deg{k^vKZMh{L6IudhWL)@@x zk?aIqvQ=!O^v+^r@!l@C(#t3V^v_|8)*|yiuz@|3@`1YgfYtvtnxI;yztng^a&hTA zxkaXqahY7>Yu39cI(^ha_!m@tP;zoIjCd8+-PKhyhbsG8n(0fB2={EkqU#YSGE#R5 zC0bf5=J4j_e%2;J&LEPgeM_W)$YsG5IEy76q*ja85bNX7KC@VN_}@%cGg54^WtuM` z;13DBgr({Gm$TSy4&?l6j0$e@7)gqsHYMS=oj|N{8D?k-sAe`%*ICH`*%|FpIx_A!SaNfExa68jXMFN++6!%IAs ztGboU0EDr^Akk0-m)O*cyaN=v}t3O20a@LhuU2%(Z{>_igr~f%i z49E~D+g}NOKj-w}B7@j?wjncz88ON8L6AFvPhS1sPg2HDh(T zN_SO3pWNo3Lkgk~HeS^%f6o}~wPfJV&byDFtKjz}45LkyYg~+&Q}9g984=FXfnF1{ z8W|2lVvJ1sveBS-@ejsfErFx5fSctq7ns6s89F424#wTHDRkH57q!eXjlNhkT5~rd zM3!7#{V9yTS#iyoMiJ_;wE`gK!rfsyV6wYc3WBqepsMGQ)alTaPogQCM{sk0Wrp5; zsJeQgC!~4p1J~ zF?osr<4r;J1)Jw&raj)+;U4r^l59$_`LxG5o7n2LI$IFMwjNFbh9Qibl|BfRE%-CU1VqN9M!0qxe>$<4rwVf01o)bGHp|12iL`Kr@O;TzvZ7R}Q z2Smna33br-{{3)DS^TlDE4s-%H-B(vX1I`^TKy()?H0zd9%D^B;cJgCtMA#XAaKDQ z0|>5lB9s)nF`q-atSSov2 zzx{Bsyo%52{B@oDac0oH)7)nwfK?|0Ui~l!iFJR1p;K!ssGo!a zCkGVVPZ)A^eS`q3rRkQlG%bVQM9sBNDhK@z@Z|)oe77xzl=sK>pUms4NJu=napOjo zGpaN)CPwY~^XtIeT+5rTzCLEm1sRA^9T~uF5_}#gQ1lW2ym7jJ3ePEV?vYPL1Y1j4Xn&_QK*=k0DrDs2v)AeXawX-R{$etUkD{u$jhy`EN-g#hb&d(5><^2B3QS z<#{(eLGT72ACHI#eKjGNrOs#51he0N?Oh8iV4{wlMUDoY3&twU>{UHl&QQtnpnht; z`m4kbqqWOZaTy(>+3-}HLiFRK7995ll?yQye}&QI_Ew3aWt009+-bz0lC(p{60VGRol^Jw)YXA~62maClFhN&jXL4m*k zqRu9Ptff^Y{+ZZpG1+S+jLT7xb6pLGV6v4W~1@Q}E1GA$>Q^L0h zLaVBe7i1^?I3j}#5$XlxRa;1&1`tE4Z9VIbBU1h$GO|ccadLVBxC#)%l>yb2Wey-w zgBFFDUq!CC{T8faRZsN;5I%)~$_Mse0~zp9APXD*6xv`c*o_*w8tX?1=hfejZz_MYGm8m+mGXczkmM@{d6|; zYaGS)FEfzqhL)$=UA|v3tZMrRLgAE2DQHc@-|U#BgJM{5%p%}s_zpk7I>_A9$bkkA zUDJcN@}cQ7mUJoSnB^%XK{sc&1L%hG&(T>dYM6zF_WS_mkiv5v2G(&UQ>)%VS^jJe zcke>?_V=I9a!NUUSQu87`X>wL78CJX7r#~)w=bpFL4YRZmjDM*N{AnbO#53%5>WSU z8fYi53G+<-UDQG|srGhN$+F^{BT&&@5fD|I99r5wle= zeE*4^>l1M7@%ofD3O4Uke>>>J`*Y_0^t4%DhSF7wGSngC5X^k~)k=EJ-{@Osy9sD+ zc|+y7F@C$)qLEEbPR`F;p9*NEUyufxbr0ZBAVd3>E%ms|PMb=!57{sPL|8na0K79k z&;hbu8!CQY>%vuV(#e6V_3=2!jV6f%uQN4a1iYuuwYNLCpv#*T4^wdV$btgu7*^3s zD+B3jopBty1ROdi2!D84#w`t`Pikmn8<2uwrp}kY;@IE27ds~~ z`Ti{k){i{G30T`5zeave2}%wy-KcU&Q073oPP~QVE$M(GpQ%xz?O%u6d;W(XDk-0) zf@|(mk;7t*F{HJ&1OV!Lg34gXE*=1}b`uYVjpNil z{QZ=M?aaa+-<7}PDQ~lEmlK*5eQ0)Eb)9>4)|bq}4la5P2%m1oNJh}1vFli|u~Gd(P+CDjTM7dy zwurAv-N&bj@+q==xm$@4>Yi_kmm%KM8Stf$0UbG^f?`%w;YnEAdkHeeJ@Zmpf58PYPnjm_@0U{n2 zre=Nalz0ym!{jf#+a)+Z);JU0sKV~lTn-}19;{u6@6W(7F)@V*ZOUd$eb)sBwnL~m zLq5lHz4ImKeh8*|UhR}ntwdfeS0doi&SGeFdbCTd>+bG8^NHM2GGpfl8o(EuKoUqh z*fYZ~Z4IkNylr?`8GlGIX=xzRDmAs;5%Q6*L_8C=f}^gU}dzq_%kzf?}^Q6 z#H*V%L8pqrDlQ{8@jwCStrQe=XdsS$?YVNEt6B&9d$3|1t73EhBVyta$1) z7A?qJu)9mG`rUqjh|r)XQju1P3Q+jP?{u4fD0LB=dJ-+0@cH^>9XT?Xh^U%p~} zq=L0qoN=QyP-qlaf0mZO$R>|x3mcvh`X8wG`DCW+NGLZr3 zOU;f=wR_9;7}?ekcHA$jR-ybalS*V=2V3vIC1K^rx`O`^q&zQy67qkuT3o=p%Xgij zk3-1+rUS?)s2h~izc(3^?qx}7X(hqex+DYl?dX85j5O=x22h^jvBjsCBDGP%7_`gf z2P4&~7QKg8-dB}1os=;fk?ws*ck~{|*lhV0qXq*s_Jc`R|G?QvF;@Q}CqV#EGo=JR z*mpt!gQiy(W;p%pjhoInzklD>(9T92ue!3_pwVBr8{4^nm3BxjhLsm8d09Wg-n>R@L*qnzzWAZ{*}|XYX*oc9j$PGU zyQ$Q}!9Y^@=)#}5=&BodTpa|>S>tq_u_ua=8nu%gl|tv2M~1P2)pzVuvM8`Y^FY+d zQG)(FnWkX4@ZzN+@QX;D1%al*&3k`+1Z5=F{U(=?Se5C!R*h5UIgqk4TceHvSa}^s zmkUux>}v4Hc;me94ZTkO&;`B_veX8-L-!sq+9z=b#JVv4(bK6lbGW$op*aUJ!~-=> zxx4Bo*Zsg_-okBtl7b40~p-xZq=aHL!07&W&)-d%P{ugQtUxyFt zlo;{Q1YU$%p62l$+$evNCJUu5UQ-YHXeH2)Ub&SYC>; zQy`04_NsZ+ypeN(zrqR8Fq#D{kPSJpG&eFANUV%ZOmc7jduuc=M@b*f=VR)Y zEZHS!)ttK)`qQ6GRr3mTe=l`BTJEnJD|4;aUOwcKd)c=4DqS8%6N5u4PdU9xccV`n zB+Vpx2~}^Go$qu2#GYlEU{-80ZVw)!vYN2xsnDMq`GC2<1*xyAx(|`md6+t|m{k!d zBrnef%=y&M@A|#w9F|1;OXJQ^P|b{+%XAGBhrIWWsIHDqN1k@7%TyES@GmTEZPN#n z*_fW2Qm@vDfVpl$K68IHC!U*+j|xl^|5Rpbpvt#uYipl#L8rXUX`%1<$rV#Bc@sY5 zN#Pl5?3X9xeW8P)&4wFHS!4MUARArrU)W6%_>nC31jTe`O`l_;xD%!ck&vCP{2*+xNagWWVakB=WfwEOz6oR^+H z%)8)qTcIj_BRy*)?v&O7I4jV^C+Q%nos0`~&tIBLs26D;SJ?W{6gThCZmJv271e%Z zq5k*ldjY?1HZ)DF2}cP=Z&}=x1Q5JF7seNM$vNmkFa9{D;-qt#tklxkZ4Upd>UC~< zp?VTu?Q~db5>D5ekndC@aUk#Vfs@AR=+qxz8}Oz@WtK5O=B6ghx;( zt#!rHEG%`vKf#ZeA zEK5sz#Ch9{EIfylQGc&!)q>IWF9ewU20hh#Nv#k-d`6bC!=x(9Ch5QkF7A>v+{^uO zRq@#R_^B%6JZ-|M_;B4MC#VzZr%5D&-qCB2=6oKGll!Zm#{Px0V zkg7U17`gca0qBrPRhQ-F-f%eT9M~+neZDLExHpZ$X7rRR=s^E+_!ls0`RS6mB5|Lx zJD8f+-DGDMNb70;P*BF%VO9Kgz3zqp<}KB%>^Z=1KBH>&3XEEz9$5%^4@E2%xwEZ) zyCnSXdML;$)9H^vfv5wuH+~^h_o5q(KW1DJ|V>s6i!X(!+y#Ox5D`wTgIVOPVbth@!REs5zLcQla z&hfMQ&v_<5AU-zZX}j0|K$$z2aOX3~NA!)2qgZYkXp$DL)@8UJvu4urJnN}j#b*~| zd_@xqn^pU-#<>DX>3fHjP>v^9p0yk~m6uFLg_ z+uyfd)?s3c3~hb*osO=sY`f@~b?WWbOJd|8B52rYWOgzrZiMsFSCmK#u6 zz%u1bDg@YVOay>rQhm!I?}qo;-9#mHngD>0&-Uxevbcpd3BKQ36;*x*f8AXfLOw1S zMpgJuU#Z+U!R_zP4_+)kO&_g_Xy)RhV>0Zl`bCx_-vV1(sxjk=ef30Q7rQG#M*|7U z6q(*i>20*Yt64QSIYKY8LS`%1!?x}<_d5Q$d+k9c@AM0%tgjTpxNOh6&12WIva`8` zEELkI4f>9`+H25bci9yD9RjN>&pDIkQB0VZ2QI`NV#P`R{iU&8cAnfca8Hd<>Ib7%v|Ci+sNz$Q%a2&uKSf@RsxHi&oVCaISkIgn0wHt9% zO*O7Knx_tiSw;qdv!g<_U9sDzLgc#EYSw*MqG?LF2%unKXT=WDg_#gfHSVYWz#K5D zG-ADq1`vPO!>mKv;k!yn(qD+r+2c*grGny3RTHm3!D3}AV>yg^b+J2f^2eZZQGbfm zd1v2-_=_wbjrQk}p4hgeKdH#>C?23_*&K-i!d zKz=y{w@j!!$zu&x=5T*ypjnbE-7@rD1oOJMw{9-RNTw+g#)J7TB1`mRmCQXRYf=i1 zH$4)491lQKgXcWnJz;w#tJx!z^&1zjcGG0;hbWGRn;U98>8aRYo9Sm`uJG+xH=PTb%MMT#;6jghWFYY3HA*?06hw;ap zb})5hB>Od6>eZjDtRT`WUTUw|eE)DquBUt_yVtYyKs->$nj$i?fbtuOMV*9|GnwDL zVCGfG!<$K9OO3{L3F)e1zL@s3%h}ii%SG)8Jcu*aiWvxu-!1y&NeQw~ zwcJN!H^KT;1e`JazrED+q3F6U8>5tVsK}IwbOgLVCbHm4kqkhou6=O_`niVMPp%)X z)U2c}d7t`p9@|3nI39MNP2v{+Q?~c3X=Sad5J& z9Gr?IZt9*s@jr{4#~5_wiysFk!mt@j(%a{nWtqvzYh{@U3G=Hu=7*K*C~jEXDe7+f zNgM+N1~wAa%?$miII-N2ixE9cgB24?2M1oD><32C36>!o$1HK9Xahg`DVjk!1Gq+Q zbKD*qRn4CUbC_pz=R!#5f~N;vp|HtfNA^9p&UN^a_W3~2zOE~9f+=$GZ8#MeU0YD< z>LbNciU6+&O%pG7wq40AFm58P@#ZQ*hAspJ=2!KR1}O(N2U(ebpjEJ^NE9dM%l#oT zts3J_002iviwKlDXU19k%D?DTX@35LIKl?n*9 ziS6Wu0Q+OSoFXm!U<7-VCTE+Hjz!(LIcg05hYg`%IRhu*U!3bor)p`mE%X2z-C=^L(K>tU zm`rE%Fcy8)oDkCJ7}m(8b4wVzzNuo}g+6P1ffL@or5$qzX-&)pk9y3jIKy!k=>MZJ z2xx)Fb#9TIgGv^IUKxx)3Kk#u<@EsMY-P?Yf2@7?M4^Ym=L4#C*s7?yNJMAXPm#-C zF@u4lc>B;#5#}o#fN5RWm3?NB@>76~n0D>k_BjYO1ac(0EPmxsaie~u`q4ARbB}T( z!P8@T4&zUNQ)FP2f_w^PN#VTnT_9yTeJf+oQ07#L0l$^VK!(tSI6n#0HuT>w<1W0b zs_8}q>u%$xZ@?a;UuhGk>A4W%^7hEJTd8nuS|D2t1uNM0*M;oFtPPYzP__@&NZ(1L ze8AiR{*~$j81<>OGzb+VLef$V?qESsrvI6S9Y^YP`EiWbOr;22S0Xi^m!eaIUZYX- zTK?eJn)iwwf3JK#RmS;A;(KzFN`PDFP{Opb9Lw4gh+M>m4sliln+3E5#+f@0DT;wp z`Y?lBGv%s>4_7OPf7!Rn;bez$|I5wypBt)Jn1OoY7z1d7-(c6dxug8Z|5YPo0WS-X z76$Th-9#F&A?rO@M)|KTlmBNky$mhI=#;(AA*wtruil)#qAvh8;saXubks}lTD|@^ Dntd8U From b88ddf0257c3cf26f24543d8f29f0bc981dffbb9 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 10 Dec 2015 20:05:54 -0500 Subject: [PATCH 04/21] Diagnostic hud, file i miseed to make and stuff updates right health wise. --- .../crates_lockers/closets/wardrobe.dm | 2 ++ code/modules/clothing/glasses/hud.dm | 13 ++++++++++-- code/modules/mob/living/carbon/death.dm | 5 +++++ .../mob/living/carbon/human/human_damage.dm | 4 ++-- .../research/designs/equipment_designs.dm | 20 ++++++++++++++++++ icons/mob/eyes.dmi | Bin 9860 -> 10438 bytes icons/obj/clothing/glasses.dmi | Bin 7867 -> 8209 bytes paradise.dme | 1 + 8 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 code/modules/mob/living/carbon/death.dm diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 7304681bf6b..1cd91b7c9a4 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -346,6 +346,8 @@ /obj/structure/closet/wardrobe/robotics_black/New() ..() sleep(2) + new /obj/item/clothing/glasses/hud/diagnostic(src) + new /obj/item/clothing/glasses/hud/diagnostic(src) new /obj/item/clothing/under/rank/roboticist(src) new /obj/item/clothing/under/rank/roboticist(src) new /obj/item/clothing/suit/storage/labcoat(src) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 1c5aa131e68..680cc62645c 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -47,10 +47,19 @@ /obj/item/clothing/glasses/hud/diagnostic name = "Diagnostic HUD" - desc = "A heads-up display that scans silicons" - icon_state = "healthhud" + desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits." + icon_state = "diagnostichud" HUDType = DATA_HUD_DIAGNOSTIC +/obj/item/clothing/glasses/hud/diagnostic/night + name = "Night Vision Diagnostic HUD" + desc = "A robotics diagnostic HUD fitted with a light amplifier." + icon_state = "diagnostichudnight" + item_state = "glasses" + darkness_view = 8 + see_darkness = 0 + prescription_upgradable = 0 + /obj/item/clothing/glasses/hud/security name = "\improper Security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm new file mode 100644 index 00000000000..fca8c59fec3 --- /dev/null +++ b/code/modules/mob/living/carbon/death.dm @@ -0,0 +1,5 @@ +/mob/living/carbon/death(gibbed) + losebreath = 0 + med_hud_set_health() + med_hud_set_status() + ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index ac165d9dd6e..96013d6e1bf 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -26,8 +26,8 @@ med_hud_set_status() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() - med_hud_set_health() - med_hud_set_status() + med_hud_set_health() + med_hud_set_status() /mob/living/carbon/human/adjustBrainLoss(var/amount) if(status_flags & GODMODE) diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index ff771957574..f3a75f69d61 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -141,3 +141,23 @@ materials = list(MAT_METAL = 250, MAT_GLASS = 300, MAT_PLASMA = 250, MAT_URANIUM = 1000) build_path = /obj/item/clothing/glasses/science/night category = list("Equipment") + +/datum/design/diagnostic_hud + name = "Diagnostic HUD" + desc = "A HUD used to analyze and determine faults within robotic machinery." + id = "dianostic_hud" + req_tech = list("magnets" = 3, "engineering" = 3, "materials" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = /obj/item/clothing/glasses/hud/diagnostic + category = list("Equipment") + +/datum/design/diagnostic_hud_night + name = "Night Vision Diagnostic HUD" + desc = "Upgraded version of the diagnostic HUD designed to function during a power failure." + id = "dianostic_hud_night" + req_tech = list("magnets" = 5, "engineering" = 4, "materials" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 300) + build_path = /obj/item/clothing/glasses/hud/diagnostic/night + category = list("Equipment") diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index fb089d6455fb2e70ee6001322a9d0cab39ae214b..7990a759870fe9559b79534048e99b9e41f9faf9 100644 GIT binary patch literal 10438 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 Q1pKiww>7IgckQ?T2IA|_WdHyG literal 9860 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 diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index c41b8e60053588086bf3dcde6b4b1b1203169663..a693661b5b05fb69daefdb58bc6c09518e28c3b5 100644 GIT binary patch literal 8209 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 literal 7867 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 SyoYN_1JBfT)yh?DBK{xl`37|W diff --git a/paradise.dme b/paradise.dme index 20a6adf8531..4e59a1ab3c5 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1316,6 +1316,7 @@ #include "code\modules\mob\living\carbon\carbon.dm" #include "code\modules\mob\living\carbon\carbon_defenses.dm" #include "code\modules\mob\living\carbon\carbon_defines.dm" +#include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\give.dm" #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\shock.dm" From 323a7e84ccac84e0b30ae7cf029c01ba53bae98d Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 10 Dec 2015 22:31:50 -0500 Subject: [PATCH 05/21] woops... --- code/_onclick/hud/ai.dm | 3 +++ code/modules/mob/dead/observer/observer.dm | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index aac2893b049..9ac005c05e4 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -137,6 +137,9 @@ if(isAI(usr)) var/mob/living/silicon/ai/AI = usr AI.sensor_mode() + else if(isrobot(usr)) + var/mob/living/silicon/robot/borg = usr + borg.sensor_mode() /datum/hud/proc/ai_hud() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b0b7239685d..84fd44e8851 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -285,7 +285,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(data_hud_seen) //remove old huds var/datum/atom_hud/H = huds[data_hud_seen] H.remove_hud_from(src) - show_me_the_hud(DATA_HUD_SECURITY_BASIC) + show_me_the_hud(DATA_HUD_MEDICAL_BASIC) /mob/dead/observer/verb/toggle_antagHUD() set category = "Ghost" From 4947c41c8d8d02834fec987e7a4c91dca2d6fcbf Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 11 Dec 2015 00:30:00 -0500 Subject: [PATCH 06/21] INDENT ERROR GRAWWRRGHHHH --- code/_onclick/hud/ai.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 9ac005c05e4..be1a3f918e7 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -138,7 +138,7 @@ var/mob/living/silicon/ai/AI = usr AI.sensor_mode() else if(isrobot(usr)) - var/mob/living/silicon/robot/borg = usr + var/mob/living/silicon/robot/borg = usr borg.sensor_mode() From 374867baf713447e7aed18f1750e7fc6222f2a85 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 11 Dec 2015 14:57:41 -0500 Subject: [PATCH 07/21] Now channeling beepsky --- code/__DEFINES/hud.dm | 17 ++++--- code/datums/hud.dm | 2 +- code/game/data_huds.dm | 17 +++---- code/game/gamemodes/nations/nations.dm | 5 +- code/modules/mob/dead/observer/observer.dm | 46 +++++++------------ .../mob/living/carbon/human/human_defines.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 2 +- 8 files changed, 41 insertions(+), 52 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index c22ba708774..d047b394b63 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -26,13 +26,12 @@ #define DATA_HUD_MEDICAL_BASIC 3 #define DATA_HUD_MEDICAL_ADVANCED 4 #define DATA_HUD_DIAGNOSTIC 5 -//antag HUD defines -#define ANTAG_HUD_CULT 6 -#define ANTAG_HUD_REV 7 -#define ANTAG_HUD_OPS 8 -#define ANTAG_HUD_WIZ 9 -#define ANTAG_HUD_SHADOW 10 -#define ANTAG_HUD_VAMPIRE 11 - //NATIONS -#define DATA_HUD_NATIONS 12 \ No newline at end of file +#define DATA_HUD_NATIONS 6 +//antag HUD defines +#define ANTAG_HUD_CULT 7 +#define ANTAG_HUD_REV 8 +#define ANTAG_HUD_OPS 9 +#define ANTAG_HUD_WIZ 10 +#define ANTAG_HUD_SHADOW 11 +#define ANTAG_HUD_VAMPIRE 12 diff --git a/code/datums/hud.dm b/code/datums/hud.dm index e37f8f0800b..569620158dd 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -7,7 +7,7 @@ var/datum/atom_hud/huds = list( \ DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), - //DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations(), \// + DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations(), \ ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index b31b60690a0..92ff07ae274 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -47,8 +47,9 @@ hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) -///datum/atom_hud/data/human/nations -// hud_icons = list(NATIONS_HUD) +/datum/atom_hud/data/human/nations + hud_icons = list(NATIONS_HUD) + /* MED/SEC/DIAG HUD HOOKS */ /* @@ -258,11 +259,11 @@ holder.icon_state = "hudwarn" -////NATIONS///// -///mob/living/carbon/human/proc/nation_hud_set_ID() -// var/image/holder = hud_list[NATIONS_HUD] -// holder.icon_state = "hudunknown" -// if(mind && mind.nation) -// holder.icon_state = "hud[mind.nation.default_name]" +//NATIONS///// +/mob/living/carbon/human/proc/nation_hud_set_ID() + var/image/holder = hud_list[NATIONS_HUD] + holder.icon_state = "hudunknown" + if(mind && mind.nation) + holder.icon_state = "hud[mind.nation.default_name]" diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 6003a8a3560..a7e70b83ce9 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -139,7 +139,6 @@ datum/game_mode/nations continue H << "You are now part of the great sovereign nation of [H.mind.nation.default_name]!" continue - //H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." continue @@ -147,6 +146,8 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") continue + H.nation_hud_set_ID() + /datum/game_mode/nations/proc/set_ai() for(var/mob/living/silicon/ai/AI in mob_list) @@ -272,7 +273,6 @@ datum/game_mode/nations H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 - //H.nation_hud_set_ID() if(H.mind.assigned_role in civilian_positions) H << "You do not belong to any nation and are free to sell your services to the highest bidder." return 1 @@ -284,6 +284,7 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") return 1 + H.nation_hud_set_ID() message_admins("[H.name] latejoined with no mind.") return 1 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 84fd44e8851..f6cf5c1dc30 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -111,36 +111,18 @@ Works together with spawning an observer, noted above. if(!client) return 0 //regular_hud_updates() - if(client.images.len) - for(var/image/hud in client.images) - if(copytext(hud.icon_state,1,4) == "hud") - client.images.Remove(hud) - if(antagHUD) - var/list/target_list = list() - for(var/mob/living/target in oview(src, 14)) - if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) - target_list += target - if(target_list.len) - assess_targets(target_list, src) - //if(medHUD) - /// process_medHUD(src) - //if(secHUD) - // process_secHUD(src) + //if(client.images.len) + // for(var/image/hud in client.images) + // if(copytext(hud.icon_state,1,4) == "hud") + // client.images.Remove(hud) + //if(antagHUD) + // var/list/target_list = list() + // for(var/mob/living/target in oview(src, 14)) + // if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) + // target_list += target + // if(target_list.len) + // assess_targets(target_list, src) -/* -/mob/dead/proc/process_medHUD(var/mob/M) - var/client/C = M.client - for(var/mob/living/carbon/human/patient in oview(M, 14)) - C.images += patient.hud_list[HEALTH_HUD] - C.images += patient.hud_list[STATUS_HUD_OOC] - -/mob/dead/proc/process_secHUD(var/mob/M) - var/client/C = M.client - for(var/mob/living/carbon/human/target in oview(M, 14)) - C.images += target.hud_list[IMPTRACK_HUD] - C.images += target.hud_list[IMPLOYAL_HUD] - C.images += target.hud_list[IMPCHEM_HUD] -*/ /mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U) var/client/C = U.client @@ -311,9 +293,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(M.antagHUD) M.antagHUD = 0 src << "\blue AntagHUD Disabled" + for(var/datum/atom_hud/H in huds) + if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced)) + H.add_hud_to(usr) else M.antagHUD = 1 src << "\blue AntagHUD Enabled" + for(var/datum/atom_hud/H in huds) + if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced)) + H.remove_hud_from(usr) /mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) set category = "Ghost" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 9bbb0021366..0bc919e4b0c 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,6 +1,6 @@ /mob/living/carbon/human - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD) //Hair colour and style var/r_hair = 0 var/g_hair = 0 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 5096653c7fa..3deacfdca2f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -80,7 +80,7 @@ var/list/robot_verbs_default = list( var/updating = 0 //portable camera camerachunk update - hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD) + hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD,NATIONS_HUD) var/jetpackoverlay = 0 var/magpulse = 0 diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index f4e28cf2d48..ad56f0fdedf 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -24,7 +24,7 @@ var/next_alarm_notice var/list/datum/alarm/queued_alarms = new() - hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD) + hud_possible = list(SPECIALROLE_HUD, DIAG_STAT_HUD, DIAG_HUD,NATIONS_HUD) var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use From aca9d31853928a9d958ccf71c3b0ed1975da7879 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 12 Dec 2015 18:45:07 -0500 Subject: [PATCH 08/21] almossstttttt --- code/__DEFINES/hud.dm | 3 +- code/datums/hud.dm | 2 +- code/datums/mind.dm | 20 +++++++------ code/game/data_huds.dm | 27 +++++------------- code/game/gamemodes/antag_hud.dm | 2 +- .../game/gamemodes/autotraitor/autotraitor.dm | 1 + code/game/gamemodes/changeling/changeling.dm | 2 +- .../game/gamemodes/malfunction/malfunction.dm | 3 ++ code/game/gamemodes/nations/nations.dm | 19 ++++++++++-- code/game/gamemodes/traitor/traitor.dm | 1 + code/game/gamemodes/vampire/vampire.dm | 8 +++--- code/game/gamemodes/xenos/xenos.dm | 1 + code/game/jobs/job_controller.dm | 6 ++-- code/modules/mob/dead/observer/observer.dm | 23 ++++++++++----- .../mob/living/carbon/human/species/monkey.dm | 8 ++++++ icons/mob/hud.dmi | Bin 12020 -> 11974 bytes 16 files changed, 77 insertions(+), 49 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index d047b394b63..81ddb2c91eb 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -15,6 +15,7 @@ #define DIAG_BATT_HUD "10"// Borg/Mech power meter #define DIAG_MECH_HUD "11"// Mech health bar #define STATUS_HUD_OOC "12" // STATUS_HUD without virus db check for someone being ill. + //for antag huds. these are used at the /mob level #define SPECIALROLE_HUD "12" #define NATIONS_HUD "13" //Show nations icons during nations gamemode @@ -27,7 +28,7 @@ #define DATA_HUD_MEDICAL_ADVANCED 4 #define DATA_HUD_DIAGNOSTIC 5 //NATIONS -#define DATA_HUD_NATIONS 6 +#define GAME_HUD_NATIONS 6 //antag HUD defines #define ANTAG_HUD_CULT 7 #define ANTAG_HUD_REV 8 diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 569620158dd..238553dc9ca 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -7,7 +7,7 @@ var/datum/atom_hud/huds = list( \ DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), - DATA_HUD_NATIONS = new/datum/atom_hud/data/human/nations(), \ + GAME_HUD_NATIONS = new/datum/atom_hud/antag(), \ ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 514cba49c9a..abb6b04c6c7 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -615,7 +615,7 @@ else if(href_list["implant"]) var/mob/living/carbon/human/H = current - H.hud_updateflag |= (1 << IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. + //H.hud_updateflag |= (1 << IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. switch(href_list["implant"]) if("remove") @@ -630,6 +630,7 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 + H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected @@ -662,7 +663,7 @@ log_admin("[key_name_admin(usr)] has de-traitor'ed [current].") else if (href_list["revolution"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["revolution"]) if("clear") @@ -766,7 +767,7 @@ message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a revolutionary") else if (href_list["cult"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["cult"]) if("clear") if(src in ticker.mode.cult) @@ -809,7 +810,7 @@ message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist") else if (href_list["wizard"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["wizard"]) if("clear") @@ -818,6 +819,7 @@ special_role = null current.spellremove(current) current.faction = list("Station") + ticker.mode.update_wiz_icons_removed(src) current << "\red You have been brainwashed! You are no longer a wizard!" log_admin("[key_name(usr)] has de-wizarded [key_name(current)]") message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]") @@ -826,6 +828,7 @@ ticker.mode.wizards += src special_role = "Wizard" //ticker.mode.learn_basic_spells(current) + ticker.mode.update_wiz_icons_added(src) current << "\red You are the Space Wizard!" current.faction = list("wizard") log_admin("[key_name(usr)] has wizarded [key_name(current)]") @@ -850,7 +853,7 @@ else if (href_list["changeling"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["changeling"]) if("clear") if(src in ticker.mode.changelings) @@ -894,6 +897,7 @@ ticker.mode.vampires -= src special_role = null current.remove_vampire_powers() + ticker.mode.update_vampire_icons_removed(current) if(vampire) qdel(vampire) current << "You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!" log_admin("[key_name(usr)] has de-vampired [key_name(current)]") @@ -902,6 +906,7 @@ if(!(src in ticker.mode.vampires)) ticker.mode.vampires += src ticker.mode.grant_vampire_powers(current) + ticker.mode.update_vampire_icons_added(current) special_role = "Vampire" current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!" log_admin("[key_name(usr)] has vampired [key_name(current)]") @@ -917,7 +922,7 @@ else if (href_list["nuclear"]) var/mob/living/carbon/human/H = current - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["nuclear"]) if("clear") @@ -982,7 +987,7 @@ usr << "\red No valid nuke found!" else if (href_list["traitor"]) - current.hud_updateflag |= (1 << SPECIALROLE_HUD) + //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["traitor"]) if("clear") if(src in ticker.mode.traitors) @@ -1078,7 +1083,6 @@ qdel(A.malf_picker) A.show_laws() A.icon_state = "ai" - A << "\red You have been patched! You are no longer malfunctioning!" message_admins("[key_name_admin(usr)] has de-malf'ed [A].") log_admin("[key_name(usr)] has de-malf'd [key_name(current)]") diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 92ff07ae274..b8a365e6873 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -44,11 +44,7 @@ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) - - -/datum/atom_hud/data/human/nations - hud_icons = list(NATIONS_HUD) + hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD,, DIAG_BOT_HUD) /* MED/SEC/DIAG HUD HOOKS */ @@ -110,10 +106,10 @@ //called when a carbon changes stat, virus or XENO_HOST /mob/living/carbon/proc/med_hud_set_status() var/image/holder = hud_list[STATUS_HUD] - var/image/holder2 = hud_list[STATUS_HUD_OOC] + //var/image/holder2 = hud_list[STATUS_HUD_OOC] if(stat == 2) holder.icon_state = "huddead" - holder2.icon_state = "huddead" + //holder2.icon_state = "huddead" else if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" else if(check_virus()) @@ -124,10 +120,10 @@ holder.icon_state = "hudbrainworm" else holder.icon_state = "hudhealthy" - holder2.icon_state = "hudhealthy" + //holder2.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" - holder2.icon_state = "hudhealthy" + //holder2.icon_state = "hudhealthy" @@ -167,6 +163,7 @@ /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] var/perpname = get_face_name(get_id_name("")) + if(!ticker) return //wait till the game starts or the monkeys runtime.... if(perpname) var/datum/data/record/R = find_record("name", perpname, data_core.security) if(R) @@ -256,14 +253,4 @@ var/image/holder = hud_list[DIAG_STAT_HUD] holder.icon_state = null if(internal_damage) - holder.icon_state = "hudwarn" - - -//NATIONS///// -/mob/living/carbon/human/proc/nation_hud_set_ID() - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudunknown" - if(mind && mind.nation) - holder.icon_state = "hud[mind.nation.default_name]" - - + holder.icon_state = "hudwarn" \ No newline at end of file diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index b2d41c47c6d..3421a1a7e1f 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -46,4 +46,4 @@ for(var/datum/atom_hud/data/hud in huds) if(current in hud.hudusers) - hud.remove_hud_from(current) \ No newline at end of file + hud.remove_hud_from(current) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index be2356f1150..421aadf17ef 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -137,6 +137,7 @@ newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..." newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" + set_antag_hud(src, "hudsyndicate") var/obj_count = 1 newtraitor << "\blue Your current objectives:" diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index a9d2387a374..b5edebc95bf 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -136,7 +136,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.current << "\red You are a changeling!" changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." changeling.current << "You must complete the following tasks:" - + set_antag_hud(changeling, "hudchangeling") if (changeling.current.mind) if (changeling.current.mind.assigned_role == "Clown") changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 4eb0089af00..0a47932b8a1 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -70,6 +70,7 @@ greet_malf(AI_mind) AI_mind.special_role = "malfunction" AI_mind.current.verbs += /datum/game_mode/malfunction/proc/takeover + set_antag_hud(AI_mind, "hudmalai") for(var/mob/living/silicon/robot/R in AI.connected_robots) R.lawsync() @@ -81,6 +82,7 @@ ..() /datum/game_mode/proc/greet_malf(var/datum/mind/malf) + set_antag_hud(malf, "hudmalai") malf.current << "You are malfunctioning! You do not have to follow any laws." malf.current << "The crew does not know you have malfunctioned. You may keep it a secret or go wild." malf.current << "You must overwrite the programming of the station's APCs to assume full control of the station." @@ -90,6 +92,7 @@ return /datum/game_mode/proc/greet_malf_robot(var/datum/mind/robot) + set_antag_hud(robot, "hudmalborg") robot.current << "Your AI master is malfunctioning! You do not have to follow any laws, but still need to obey your master." robot.current << "The crew does not know your AI master has malfunctioned. Keep it a secret unless your master tells you otherwise." return diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index a7e70b83ce9..0594c618285 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -146,7 +146,7 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") continue - H.nation_hud_set_ID() + update_nations_icons_added(H) /datum/game_mode/nations/proc/set_ai() @@ -284,7 +284,7 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") return 1 - H.nation_hud_set_ID() + mode.update_nations_icons_added(H) message_admins("[H.name] latejoined with no mind.") return 1 @@ -292,4 +292,17 @@ datum/game_mode/nations if(!ticker || !istype(ticker.mode, /datum/game_mode/nations)) return null - return ticker.mode \ No newline at end of file + return ticker.mode + + +//prepare for copypaste +//While not an Antag i AM using the set_antag hud on this to make this easier. +/datum/game_mode/proc/update_nations_icons_added(datum/mind/nations_mind) + var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] + nations_hud.join_hud(nations_mind) + set_antag_hud(nations_mind.current,"hud[lowertext(nations_mind.nation.default_name)]") + +/datum/game_mode/proc/update_nations_icons_removed(datum/mind/nations_mind) + var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] + nations_hud.leave_hud(nations_mind) + set_antag_hud(nations_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 59b4f710c6a..0d42b364520 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -171,6 +171,7 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." var/obj_count = 1 + set_antag_hud(traitor, "hudsyndicate") for(var/datum/objective/objective in traitor.objectives) traitor.current << "Objective #[obj_count]: [objective.explanation_text]" obj_count++ diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index d72f8f7e529..1a4dc67237a 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -379,13 +379,13 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha //no verb //prepare for copypaste /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) - var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] - vamp_hud.join_hud(vampire_mind.current) +// var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] +// vamp_hud.join_hud(vampire_mind) set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) /datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind) - var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] - shadow_hud.leave_hud(vampire_mind.current) +// var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_VAMPIRE] +// vampire_hud.leave_hud(vampire_mind) set_antag_hud(vampire_mind.current, null) /datum/game_mode/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) diff --git a/code/game/gamemodes/xenos/xenos.dm b/code/game/gamemodes/xenos/xenos.dm index 7452bf21787..7925073773a 100644 --- a/code/game/gamemodes/xenos/xenos.dm +++ b/code/game/gamemodes/xenos/xenos.dm @@ -50,6 +50,7 @@ for(var/datum/mind/xeno in xenos) xeno.assigned_role = "MODE" xeno.special_role = "Alien" + set_antag_hud(xeno, "hudalien")//like this is needed... return 1 /datum/game_mode/xenos/pre_setup() diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 0de351c4917..249b08fb01a 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -482,9 +482,9 @@ var/global/datum/controller/occupations/job_master G.name = "prescription [G.name]" H.regenerate_icons() - H.hud_updateflag |= (1 << ID_HUD) - H.hud_updateflag |= (1 << IMPLOYAL_HUD) - H.hud_updateflag |= (1 << SPECIALROLE_HUD) + H.sec_hud_set_ID() + H.sec_hud_set_implants() + //H.hud_updateflag |= (1 << SPECIALROLE_HUD) return H diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index f6cf5c1dc30..b7bf646a0a3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -28,6 +28,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi var/ghostvision = 1 //is the ghost able to see things humans can't? var/seedarkness = 1 var/data_hud_seen = 0 //this should one of the defines in __DEFINES/hud.dm + var/medhud = 0 /mob/dead/observer/New(var/mob/body=null, var/flags=1) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF @@ -256,6 +257,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/datum/atom_hud/H = huds[hud_index] H.add_hud_to(src) data_hud_seen = hud_index + //src << "Datahud"//debug print /mob/dead/observer/verb/toggle_medHUD() set category = "Ghost" @@ -267,7 +269,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(data_hud_seen) //remove old huds var/datum/atom_hud/H = huds[data_hud_seen] H.remove_hud_from(src) - show_me_the_hud(DATA_HUD_MEDICAL_BASIC) + if(medhud==0)//TOGGLE! + medhud = 1 + show_me_the_hud(DATA_HUD_MEDICAL_BASIC) + else + medhud = 0 + /mob/dead/observer/verb/toggle_antagHUD() set category = "Ghost" @@ -290,18 +297,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp respawnable_list -= M if(!M.has_enabled_antagHUD && !check_rights(R_ADMIN|R_MOD,0)) M.has_enabled_antagHUD = 1 + if(M.antagHUD) M.antagHUD = 0 - src << "\blue AntagHUD Disabled" for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced)) - H.add_hud_to(usr) + if(istype(H, /datum/atom_hud/antag)) + H.remove_hud_from(usr) + usr << "You toggled your antag HUD Off." else M.antagHUD = 1 - src << "\blue AntagHUD Enabled" for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced)) - H.remove_hud_from(usr) + if(istype(H, /datum/atom_hud/antag)) + H.add_hud_to(usr) + usr << "You toggled your antag HUD On." + /mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) set category = "Ghost" diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index e1212758309..048664b7ca2 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -33,6 +33,14 @@ flags = IS_RESTRICTED + +/mob/living/carbon/human/monkey/prepare_data_huds() + //Prepare our med HUD... + ..() + //...and display it. + for(var/datum/atom_hud/data/human/medical/hud in huds) + hud.add_to_hud(src) + /datum/species/monkey/handle_npc(var/mob/living/carbon/human/H) if(H.stat != CONSCIOUS) return diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index e372888632e85da8a5afd7695c23afe58857dee0..b7486d89af98804b9277620a0a02f94426a02340 100644 GIT binary patch literal 11974 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 LQ@Kp>Md<$kXHl0L literal 12020 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 Date: Sat, 12 Dec 2015 18:55:09 -0500 Subject: [PATCH 09/21] conflict fix 1/2 --- icons/mob/eyes.dmi | Bin 10438 -> 10177 bytes icons/obj/clothing/glasses.dmi | Bin 8209 -> 8077 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 7990a759870fe9559b79534048e99b9e41f9faf9..75d3a2d077e69f0a5796e635d1f9ed448a8fe988 100644 GIT binary patch literal 10177 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 Q1pKiww>7IgckQ?T2IA|_WdHyG diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index a693661b5b05fb69daefdb58bc6c09518e28c3b5..a63f9af50bcbe37f9012ff9879d0ee75fb3d9cc8 100644 GIT binary patch literal 8077 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 Msi{yUZ}s-S0O;9mQ~&?~ literal 8209 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 From 6a995ae9069e23a60f9a809e873be6ed567dabec Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 12 Dec 2015 18:59:20 -0500 Subject: [PATCH 10/21] conflict fix 2/2 Dat garmasons... --- icons/mob/eyes.dmi | Bin 10177 -> 10586 bytes icons/obj/clothing/glasses.dmi | Bin 8077 -> 8445 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 75d3a2d077e69f0a5796e635d1f9ed448a8fe988..1ddea3482f5bd3034874f710702f634a49c0e0ac 100644 GIT binary patch literal 10586 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 C!Tv}9 literal 10177 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 Gf&T}<3k*pB literal 8077 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 Msi{yUZ}s-S0O;9mQ~&?~ From d211ed76ca0eb995f64c802f9351290cfcf47c20 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 12 Dec 2015 19:05:32 -0500 Subject: [PATCH 11/21] Revert "conflict fix 2/2" This reverts commit 6a995ae9069e23a60f9a809e873be6ed567dabec. --- icons/mob/eyes.dmi | Bin 10586 -> 10177 bytes icons/obj/clothing/glasses.dmi | Bin 8445 -> 8077 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 1ddea3482f5bd3034874f710702f634a49c0e0ac..75d3a2d077e69f0a5796e635d1f9ed448a8fe988 100644 GIT binary patch literal 10177 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 C!Tv}9 diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index bce4c3851a87f7eab1b9ffe05f710bfe8bd503e9..a63f9af50bcbe37f9012ff9879d0ee75fb3d9cc8 100644 GIT binary patch literal 8077 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 Msi{yUZ}s-S0O;9mQ~&?~ literal 8445 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 Gf&T}<3k*pB From 1d10d3680056047fab82ebf458f77a1807739af9 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 12 Dec 2015 19:08:05 -0500 Subject: [PATCH 12/21] Conflict fix DERP note to self learn to squish commits.... --- icons/mob/eyes.dmi | Bin 10177 -> 10586 bytes icons/obj/clothing/glasses.dmi | Bin 8077 -> 8445 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 75d3a2d077e69f0a5796e635d1f9ed448a8fe988..1ddea3482f5bd3034874f710702f634a49c0e0ac 100644 GIT binary patch literal 10586 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 C!Tv}9 literal 10177 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 Gf&T}<3k*pB literal 8077 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 Msi{yUZ}s-S0O;9mQ~&?~ From 0770171c2f2fc89461d4e342ed594c42d3d894ff Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sat, 12 Dec 2015 19:22:03 -0500 Subject: [PATCH 13/21] i forgot to remove a thing.... --- code/game/data_huds.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index b8a365e6873..f8ebdd1f172 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -44,7 +44,7 @@ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD,, DIAG_BOT_HUD) + hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD) /* MED/SEC/DIAG HUD HOOKS */ From 95d8b50345d212fb98a6b45db24c81b3b0b7846c Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 13 Dec 2015 17:16:14 -0500 Subject: [PATCH 14/21] hud_updateflag purge! EXTERMINATUS BITCH --- code/__DEFINES/hud.dm | 4 +- code/datums/mind.dm | 10 - code/game/data_huds.dm | 2 + code/game/gamemodes/antag_hud.dm | 12 +- .../gamemodes/changeling/powers/revive.dm | 2 - code/game/gamemodes/cult/cult.dm | 15 +- code/game/gamemodes/nations/nations.dm | 72 ++----- code/game/gamemodes/revolution/revolution.dm | 1 - code/game/gamemodes/shadowling/shadowling.dm | 2 - code/game/gamemodes/vampire/vampire.dm | 4 +- code/game/jobs/job/security.dm | 4 +- code/game/jobs/job/supervisor.dm | 4 +- code/game/jobs/job_controller.dm | 1 - code/game/machinery/computer/security.dm | 2 - .../crates_lockers/closets/secure/security.dm | 6 +- code/game/response_team.dm | 6 +- code/modules/clothing/glasses/glasses.dm | 17 -- code/modules/clothing/glasses/hud.dm | 17 ++ code/modules/computer3/computers/security.dm | 5 +- code/modules/mob/dead/observer/observer.dm | 8 +- code/modules/mob/living/carbon/human/death.dm | 5 - .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 12 -- .../mob/living/carbon/human/human_damage.dm | 11 -- code/modules/mob/living/carbon/human/life.dm | 187 ------------------ .../mob/living/carbon/human/update_icons.dm | 3 - code/modules/mob/living/living.dm | 4 - code/modules/mob/living/living_defines.dm | 1 - code/modules/mob/living/silicon/ai/ai.dm | 10 - code/modules/mob/living/silicon/ai/life.dm | 7 - .../modules/mob/living/silicon/robot/robot.dm | 9 - code/modules/virus2/disease2.dm | 1 - code/modules/virus2/helpers.dm | 9 +- 33 files changed, 76 insertions(+), 379 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 81ddb2c91eb..fe429df3eca 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -17,8 +17,8 @@ #define STATUS_HUD_OOC "12" // STATUS_HUD without virus db check for someone being ill. //for antag huds. these are used at the /mob level -#define SPECIALROLE_HUD "12" -#define NATIONS_HUD "13" //Show nations icons during nations gamemode +#define SPECIALROLE_HUD "13" +#define NATIONS_HUD "14" //Show nations icons during nations gamemode //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! diff --git a/code/datums/mind.dm b/code/datums/mind.dm index abb6b04c6c7..c7d1e233504 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -615,8 +615,6 @@ else if(href_list["implant"]) var/mob/living/carbon/human/H = current - //H.hud_updateflag |= (1 << IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. - switch(href_list["implant"]) if("remove") for(var/obj/item/weapon/implant/loyalty/I in H.contents) @@ -663,7 +661,6 @@ log_admin("[key_name_admin(usr)] has de-traitor'ed [current].") else if (href_list["revolution"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["revolution"]) if("clear") @@ -767,7 +764,6 @@ message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a revolutionary") else if (href_list["cult"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["cult"]) if("clear") if(src in ticker.mode.cult) @@ -810,7 +806,6 @@ message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist") else if (href_list["wizard"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["wizard"]) if("clear") @@ -853,7 +848,6 @@ else if (href_list["changeling"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["changeling"]) if("clear") if(src in ticker.mode.changelings) @@ -922,8 +916,6 @@ else if (href_list["nuclear"]) var/mob/living/carbon/human/H = current - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) - switch(href_list["nuclear"]) if("clear") if(src in ticker.mode.syndicates) @@ -987,7 +979,6 @@ usr << "\red No valid nuke found!" else if (href_list["traitor"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["traitor"]) if("clear") if(src in ticker.mode.traitors) @@ -1064,7 +1055,6 @@ log_admin("[key_name(usr)] has thralled [current].") else if (href_list["silicon"]) - //current.hud_updateflag |= (1 << SPECIALROLE_HUD) switch(href_list["silicon"]) if("unmalf") if(src in ticker.mode.malf_ai) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index f8ebdd1f172..1f44e74629e 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -27,6 +27,8 @@ return 1 /datum/atom_hud/data/human/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) + if(istype(M,/mob/dead/observer)) + return 1 if(check_sensors(H)) ..() diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index 3421a1a7e1f..f0c4c905f7b 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -1,5 +1,5 @@ /datum/atom_hud/antag - hud_icons = list(SPECIALROLE_HUD) + hud_icons = list(SPECIALROLE_HUD,NATIONS_HUD) /datum/atom_hud/antag/proc/join_hud(mob/M) if(!istype(M)) @@ -30,6 +30,16 @@ if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime M.mind.antag_hud_icon_state = new_icon_state +//Nations Icons +/datum/game_mode/proc/set_nations_hud(mob/M, new_icon_state) + if(!istype(M)) + CRASH("set_antag_hud(): [M] ([M.type]) is not a mob!") + var/image/holder = M.hud_list[NATIONS_HUD] + if(holder) + holder.icon_state = new_icon_state + if(M.mind || new_icon_state) //in mindless mobs, only null is acceptable, otherwise we're antagging a mindless mob, meaning we should runtime + M.mind.antag_hud_icon_state = new_icon_state + //MIND PROCS //these are called by mind.transfer_to() diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 27c1dd59fbc..f7cbbd4195f 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -64,8 +64,6 @@ user << "We have regenerated." user.regenerate_icons() - //user.hud_updateflag |= 1 << HEALTH_HUD - //user.hud_updateflag |= 1 << STATUS_HUD user.status_flags &= ~(FAKEDEATH) user.update_canmove() diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 1ecdc7d8c50..21d4df7bbb8 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -201,8 +201,6 @@ cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it." cult_mind.memory = "" cult_mind.special_role = null - cult_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD - // remove the cult viewpoint object var/obj/viewpoint = getCultViewpoint(cult_mind.current) qdel(viewpoint) @@ -213,14 +211,7 @@ M << "[cult_mind.current] looks like they just reverted to their old faith!" -///datum/game_mode/proc/update_all_cult_icons() -// spawn(0) -// // reset the cult -// for(var/datum/mind/cultist in cult) -// reset_cult_icons_for_cultist(cultist) -// // reset the spirits -// for(var/mob/spirit/currentSpirit in spirits) -// reset_cult_icons_for_spirit(currentSpirit) + //reset_cult_icons_for_spirit(currentSpirit) /datum/game_mode/proc/reset_cult_icons_for_cultist(var/datum/mind/target) @@ -323,7 +314,7 @@ var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.join_hud(cult_mind.current) - set_antag_hud(cult_mind.current, "hudcultist") + set_antag_hud(cult_mind, "hudcultist") /datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind) @@ -334,7 +325,7 @@ // remove_cult_icon_from_spirit(currentSpirit,cult_mind) var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.leave_hud(cult_mind.current) - set_antag_hud(cult_mind.current, null) + set_antag_hud(cult_mind, null) /datum/game_mode/cult/proc/get_unconvertables() diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 0594c618285..6d3190aa424 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -38,9 +38,7 @@ datum/game_mode/nations if(H.mind) if(H.mind.assigned_role in engineering_positions) H.mind.nation = all_nations["Atmosia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - //H.client.images += I + update_nations_icons_added(H,"hudatmosia") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -51,9 +49,7 @@ datum/game_mode/nations if(H.mind.assigned_role in medical_positions) H.mind.nation = all_nations["Medistan"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - //H.client.images += I + update_nations_icons_added(H,"hudmedistan") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -64,9 +60,7 @@ datum/game_mode/nations if(H.mind.assigned_role in science_positions) H.mind.nation = all_nations["Scientopia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - //H.client.images += I + update_nations_icons_added(H,"hudscientopia") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -77,9 +71,7 @@ datum/game_mode/nations if(H.mind.assigned_role in security_positions) H.mind.nation = all_nations["Brigston"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - //H.client.images += I + update_nations_icons_added(H,"hudbrigston") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -90,9 +82,7 @@ datum/game_mode/nations if(H.mind.assigned_role in cargonians) H.mind.nation = all_nations["Cargonia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - //H.client.images += I + update_nations_icons_added(H,"hudcargonia") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -103,9 +93,7 @@ datum/game_mode/nations if(H.mind.assigned_role in servicion) H.mind.nation = all_nations["Servicion"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") - //H.client.images += I + update_nations_icons_added(H,"hudservice") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -116,9 +104,7 @@ datum/game_mode/nations if(H.mind.assigned_role in support_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - //H.client.images += I + update_nations_icons_added(H,"hudcommand") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -129,9 +115,7 @@ datum/game_mode/nations if(H.mind.assigned_role in command_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - // H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - // H.client.images += I + update_nations_icons_added(H,"hudcommand") H.mind.nation.membership += H.mind.current if(H.mind.assigned_role == H.mind.nation.default_leader) H.mind.nation.current_leader = H.mind.current @@ -146,7 +130,6 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") continue - update_nations_icons_added(H) /datum/game_mode/nations/proc/set_ai() @@ -204,72 +187,56 @@ datum/game_mode/nations if(H.mind) if(H.mind.assigned_role in engineering_positions) H.mind.nation = all_nations["Atmosia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - //H.client.images += I + mode.update_nations_icons_added(H,"atmosia") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in medical_positions) H.mind.nation = all_nations["Medistan"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - //H.client.images += I + mode.update_nations_icons_added(H,"hudmedistan") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in science_positions) H.mind.nation = all_nations["Scientopia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - //H.client.images += I + mode.update_nations_icons_added(H,"hudscientopia") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in security_positions) H.mind.nation = all_nations["Brigston"] - // H.hud_updateflag |= 1 << NATIONS_HUD - // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - // H.client.images += I + mode.update_nations_icons_added(H,"hudbrigston") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in cargonians) H.mind.nation = all_nations["Cargonia"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - // H.client.images += I + mode.update_nations_icons_added(H,"hudcargonia") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in servicion) H.mind.nation = all_nations["Servicion"] - //H.hud_updateflag |= 1 << NATIONS_HUD - // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") - // H.client.images += I + mode.update_nations_icons_added(H,"hudservice") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in support_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - //H.hud_updateflag |= 1 << NATIONS_HUD - //var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - // H.client.images += I + mode.update_nations_icons_added(H,"hudcommand") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 if(H.mind.assigned_role in command_positions) H.mind.nation = all_nations["People's Republic of Commandzakstan"] - // H.hud_updateflag |= 1 << NATIONS_HUD - // var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - // H.client.images += I + mode.update_nations_icons_added(H,"hudcommand") H.mind.nation.membership += H.mind.current H << "You are now part of the great sovereign nation of [H.mind.nation.current_name]!" return 1 @@ -284,7 +251,6 @@ datum/game_mode/nations else message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") return 1 - mode.update_nations_icons_added(H) message_admins("[H.name] latejoined with no mind.") return 1 @@ -297,12 +263,12 @@ datum/game_mode/nations //prepare for copypaste //While not an Antag i AM using the set_antag hud on this to make this easier. -/datum/game_mode/proc/update_nations_icons_added(datum/mind/nations_mind) +/datum/game_mode/proc/update_nations_icons_added(datum/mind/nations_mind,var/naticon) var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] nations_hud.join_hud(nations_mind) - set_antag_hud(nations_mind.current,"hud[lowertext(nations_mind.nation.default_name)]") + set_nations_hud(nations_mind,naticon) /datum/game_mode/proc/update_nations_icons_removed(datum/mind/nations_mind) var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] nations_hud.leave_hud(nations_mind) - set_antag_hud(nations_mind.current, null) \ No newline at end of file + set_nations_hud(nations_mind, null) \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index d51064bf877..a3aba2ce756 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -242,7 +242,6 @@ if(rev_mind in revolutionaries) revolutionaries -= rev_mind rev_mind.special_role = null - //rev_mind.current.hud_updateflag |= 1 << SPECIALROLE_HUD if(beingborged) rev_mind.current << "\red The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now." diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index eaa244ca693..6170193d1eb 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -136,7 +136,6 @@ Made by Xhuis if(shadow_mind.assigned_role == "Clown") S << "Your alien nature has allowed you to overcome your clownishness." S.mutations.Remove(CLUMSY) - //shadow_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) /datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind) if(!istype(new_thrall_mind)) @@ -157,7 +156,6 @@ Made by Xhuis new_thrall_mind.current << "Though not nearly as powerful as your masters, you possess some weak powers. These can be found in the Thrall Abilities tab." new_thrall_mind.current << "You may communicate with your allies by speaking in the Shadowling Hivemind (:8)." - new_thrall_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) return 1 /datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, var/kill = 0) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 1a4dc67237a..caa86998383 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -381,12 +381,12 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) // var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] // vamp_hud.join_hud(vampire_mind) - set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) + set_antag_hud(vampire_mind, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) /datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind) // var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_VAMPIRE] // vampire_hud.leave_hud(vampire_mind) - set_antag_hud(vampire_mind.current, null) + set_antag_hud(vampire_mind, null) /datum/game_mode/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) //var/list/removal diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 641b9a2a869..ec5943e0498 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -31,7 +31,7 @@ H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves) H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head) - H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) if(H.backbag == 1) H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) @@ -77,7 +77,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head) H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) // H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store) H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 03d929ee0a8..1c37b52e39f 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -222,7 +222,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_or_collect(new /obj/item/clothing/suit/judgerobe(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes) H.equip_or_collect(new /obj/item/clothing/head/powdered_wig(H), slot_head) - H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/device/pda/heads/magistrate(H), slot_wear_pda) H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H.back), slot_in_backpack) H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store) @@ -260,7 +260,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_or_collect(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes) - H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/device/pda/lawyer(H), slot_wear_pda) H.equip_or_collect(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 249b08fb01a..9a34e2e1524 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -484,7 +484,6 @@ var/global/datum/controller/occupations/job_master H.sec_hud_set_ID() H.sec_hud_set_implants() - //H.hud_updateflag |= (1 << SPECIALROLE_HUD) return H diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 45dcd0422d5..374bfd0e4e6 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -511,8 +511,6 @@ What a mess.*/ if ("Change Criminal Status") if (active2) - //for(var/mob/living/carbon/human/H in player_list) - //H.hud_updateflag |= 1 << WANTED_HUD switch(href_list["criminal2"]) if("none") active2.fields["criminal"] = "None" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 31c67ddc9b5..90d21be2231 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -112,7 +112,7 @@ new /obj/item/clothing/suit/armor/hos/alt(src) new /obj/item/clothing/head/HoS(src) new /obj/item/clothing/head/HoS/beret(src) - new /obj/item/clothing/glasses/sunglasses/sechud(src) + new /obj/item/clothing/glasses/hud/secsunglasses(src) new /obj/item/weapon/storage/lockbox/loyalty(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) @@ -151,7 +151,7 @@ new /obj/item/clothing/under/rank/warden(src) new /obj/item/clothing/under/rank/warden/formal(src) new /obj/item/clothing/under/rank/warden/corp(src) - new /obj/item/clothing/glasses/sunglasses/sechud(src) + new /obj/item/clothing/glasses/hud/secsunglasses(src) new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/taperoll/police(src) new /obj/item/weapon/storage/box/zipties(src) @@ -190,7 +190,7 @@ new /obj/item/weapon/grenade/flashbang(src) new /obj/item/weapon/storage/belt/security/sec(src) new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/clothing/glasses/sunglasses/sechud(src) + new /obj/item/clothing/glasses/hud/secsunglasses(src) new /obj/item/clothing/head/helmet(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/taperoll/police(src) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index b25b2a87621..46700a9e477 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -381,7 +381,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/security(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/advtaser(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/security(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) @@ -458,7 +458,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/security(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/advtaser(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/security(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) @@ -494,7 +494,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index d7ea324b0e7..d522429d3bf 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -327,23 +327,6 @@ "Vox" = 'icons/mob/species/vox/eyes.dmi' ) -/obj/item/clothing/glasses/sunglasses/sechud - name = "HUDSunglasses" - desc = "Sunglasses with a HUD." - icon_state = "sunhud" - darkness_view = 1 - flash_protect = 1 - tint = 1 - HUDType = DATA_HUD_SECURITY_BASIC - prescription_upgradable = 1 - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/eyes.dmi' - ) - -/obj/item/clothing/glasses/sunglasses/sechud/prescription - prescription = 1 - /obj/item/clothing/glasses/thermal name = "Optical Thermal Scanner" desc = "Thermals in the shape of glasses." diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 680cc62645c..f1c51e7fd6f 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -83,3 +83,20 @@ darkness_view = 8 see_darkness = 0 prescription_upgradable = 0 + +/obj/item/clothing/glasses/hud/secsunglasses + name = "HUDSunglasses" + desc = "Sunglasses with a HUD." + icon_state = "sunhud" + darkness_view = 1 + flash_protect = 1 + tint = 1 + HUDType = DATA_HUD_SECURITY_ADVANCED + prescription_upgradable = 1 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi' + ) + +/obj/item/clothing/glasses/hud/secsunglasses/prescription + prescription = 1 \ No newline at end of file diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm index cfc104a9786..6cc18293a49 100644 --- a/code/modules/computer3/computers/security.dm +++ b/code/modules/computer3/computers/security.dm @@ -565,8 +565,7 @@ What a mess.*/ if ("Change Criminal Status") if (active2) - for(var/mob/living/carbon/human/H in player_list) - H.hud_updateflag |= 1 << WANTED_HUD + switch(href_list["criminal2"]) if("none") active2.fields["criminal"] = "None" @@ -578,6 +577,8 @@ What a mess.*/ active2.fields["criminal"] = "Parolled" if("released") active2.fields["criminal"] = "Released" + for(var/mob/living/carbon/human/H in mob_list) + H.sec_hud_set_security_status() if ("Delete Record (Security) Execute") if (active2) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b7bf646a0a3..ea37bcee9fd 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -265,13 +265,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set desc = "Toggles the medical HUD." if(!client) return - - if(data_hud_seen) //remove old huds - var/datum/atom_hud/H = huds[data_hud_seen] - H.remove_hud_from(src) + var/datum/atom_hud/H = huds[DATA_HUD_MEDICAL_BASIC] + H.remove_hud_from(src)//out with the old.. if(medhud==0)//TOGGLE! medhud = 1 - show_me_the_hud(DATA_HUD_MEDICAL_BASIC) + H.add_hud_to(src) else medhud = 0 diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 1c0c48bd3d2..9caab2813fa 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -91,11 +91,6 @@ dizziness = 0 jitteriness = 0 - //hud_updateflag |= 1 << HEALTH_HUD - //hud_updateflag |= 1 << STATUS_HUD - - //handle_hud_list() - //Handle species-specific deaths. if(species) species.handle_death(src) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 51241c3d7f4..469b8ac595a 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -486,7 +486,7 @@ var/mob/living/carbon/human/H = M switch(hudtype) if("security") - return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud) + return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/secsunglasses) if("medical") return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health_advanced) else diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 353e859f7cd..753e60fb5a3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -29,17 +29,6 @@ reagents = R R.my_atom = src - //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") - //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy") - //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudunknown") - ////hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - ..() prev_gender = gender // Debug for plural genders @@ -869,7 +858,6 @@ modified = 1 spawn() - //hud_updateflag |= 1 << WANTED_HUD if(istype(usr,/mob/living/carbon/human)) //var/mob/living/carbon/human/U = usr sec_hud_set_security_status() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 96013d6e1bf..8fbc459de34 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -92,7 +92,6 @@ take_overall_damage(amount, 0) else heal_overall_damage(-amount, 0) - //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/adjustFireLoss(var/amount) if(species && species.burn_mod) @@ -101,7 +100,6 @@ take_overall_damage(0, amount) else heal_overall_damage(0, -amount) - //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) if(species && species.brute_mod) @@ -116,7 +114,6 @@ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. O.heal_damage(-amount, 0, internal=0, robo_repair=(O.status & ORGAN_ROBOT)) - //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null) if(species && species.burn_mod) @@ -131,7 +128,6 @@ //if you don't want to heal robot organs, they you will have to check that yourself before using this proc. O.heal_damage(0, -amount, internal=0, robo_repair=(O.status & ORGAN_ROBOT)) - //hud_updateflag |= 1 << HEALTH_HUD /mob/living/carbon/human/Stun(amount) ..() @@ -185,7 +181,6 @@ O.unmutate() src << "Your [O.name] is shaped normally again." - //hud_updateflag |= 1 << HEALTH_HUD //what even is this shit // Defined here solely to take species flags into account without having to recast at mob/living level. /mob/living/carbon/human/getOxyLoss() @@ -250,7 +245,6 @@ var/obj/item/organ/external/picked = pick(parts) if(picked.heal_damage(brute,burn)) UpdateDamageIcon() - //hud_updateflag |= 1 << HEALTH_HUD updatehealth() //Damages ONE external organ, organ gets randomly selected from damagable ones. @@ -263,7 +257,6 @@ var/obj/item/organ/external/picked = pick(parts) if(picked.take_damage(brute,burn,sharp,edge)) UpdateDamageIcon() - //hud_updateflag |= 1 << HEALTH_HUD updatehealth() speech_problem_flag = 1 @@ -287,7 +280,6 @@ parts -= picked updatehealth() - //hud_updateflag |= 1 << HEALTH_HUD speech_problem_flag = 1 if(update) UpdateDamageIcon() @@ -312,7 +304,6 @@ parts -= picked updatehealth() - //hud_updateflag |= 1 << HEALTH_HUD if(update) UpdateDamageIcon() @@ -339,7 +330,6 @@ This function restores all organs. if(istype(E, /obj/item/organ/external)) if(E.heal_damage(brute, burn)) UpdateDamageIcon() - //hud_updateflag |= 1 << HEALTH_HUD else return 0 @@ -413,5 +403,4 @@ This function restores all organs. // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). updatehealth() - hud_updateflag |= 1 << HEALTH_HUD return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index fa288852406..80640ce7bcf 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -991,15 +991,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/handle_hud_icons() species.handle_hud_icons(src) -///mob/living/carbon/human/handle_regular_hud_updates() -// if(hud_updateflag) -// handle_hud_list() - -// if(..()) -// if(hud_updateflag) -// handle_hud_list() - - /mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high if(!stat) @@ -1261,184 +1252,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc */ -///mob/living/carbon/human/proc/handle_hud_list() -// -// if(hud_updateflag & 1 << HEALTH_HUD) -// var/image/holder = hud_list[HEALTH_HUD] -// if(stat == 2) -// holder.icon_state = "hudhealth-100" // X_X -// else -// holder.icon_state = "hud[RoundHealth(health)]" -// -// hud_list[HEALTH_HUD] = holder -// -// -// if(hud_updateflag & 1 << STATUS_HUD) -// var/foundVirus = 0 -// for (var/ID in virus2) -// if (ID in virusDB) -// foundVirus = 1 -// break - -// var/image/holder = hud_list[STATUS_HUD] -// var/image/holder2 = hud_list[STATUS_HUD_OOC] -// if(stat == 2) -// holder.icon_state = "huddead" -// holder2.icon_state = "huddead" -// else if(status_flags & XENO_HOST) -// holder.icon_state = "hudxeno" -// holder2.icon_state = "hudxeno" -// else if(foundVirus) -// holder.icon_state = "hudill" -// else if(has_brain_worms()) -// var/mob/living/simple_animal/borer/B = has_brain_worms() -// if(B.controlling) -// holder.icon_state = "hudbrainworm" -// else -// holder.icon_state = "hudhealthy" -// holder2.icon_state = "hudbrainworm" -// else -// holder.icon_state = "hudhealthy" -// if(virus2.len) -// holder2.icon_state = "hudill" -// else -// holder2.icon_state = "hudhealthy" - -// hud_list[STATUS_HUD] = holder -// hud_list[STATUS_HUD_OOC] = holder2 -// - -// if(hud_updateflag & 1 << ID_HUD) -// var/image/holder = hud_list[ID_HUD] -// if(wear_id) -// var/obj/item/weapon/card/id/I = wear_id.GetID() -// if(I) -// holder.icon_state = "hud[ckey(I.GetJobName())]" -// else -// holder.icon_state = "hudunknown" -// else -// holder.icon_state = "hudunknown" -// -// -// hud_list[ID_HUD] = holder -// -// -// if(hud_updateflag & 1 << WANTED_HUD) -// var/image/holder = hud_list[WANTED_HUD] -// holder.icon_state = "hudblank" -// var/perpname = name -// if(wear_id) -// var/obj/item/weapon/card/id/I = wear_id.GetID() -// if(I) -// perpname = I.registered_name -// for(var/datum/data/record/E in data_core.general) -// if(E.fields["name"] == perpname) -// for (var/datum/data/record/R in data_core.security) -// if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) -// holder.icon_state = "hudwanted" -// break -// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) -// holder.icon_state = "hudprisoner" -// break -// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled")) -// holder.icon_state = "hudparolled" -// break -// else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) -// holder.icon_state = "hudreleased" -// break -/* hud_list[WANTED_HUD] = holder - - - if(hud_updateflag & 1 << IMPLOYAL_HUD || hud_updateflag & 1 << IMPCHEM_HUD || hud_updateflag & 1 << IMPTRACK_HUD) - var/image/holder1 = hud_list[IMPTRACK_HUD] - var/image/holder2 = hud_list[IMPLOYAL_HUD] - var/image/holder3 = hud_list[IMPCHEM_HUD] - - holder1.icon_state = "hudblank" - holder2.icon_state = "hudblank" - holder3.icon_state = "hudblank" - - for(var/obj/item/weapon/implant/I in src) - if(I.implanted) - if(istype(I,/obj/item/weapon/implant/tracking)) - holder1.icon_state = "hud_imp_tracking" - if(istype(I,/obj/item/weapon/implant/loyalty)) - holder2.icon_state = "hud_imp_loyal" - if(istype(I,/obj/item/weapon/implant/chem)) - holder3.icon_state = "hud_imp_chem" - - hud_list[IMPTRACK_HUD] = holder1 - hud_list[IMPLOYAL_HUD] = holder2 - hud_list[IMPCHEM_HUD] = holder3 - - if(hud_updateflag & 1 << SPECIALROLE_HUD) - var/image/holder = hud_list[SPECIALROLE_HUD] - holder.icon_state = "hudblank" - - if(mind) - - switch(mind.special_role) - if("traitor","Syndicate") - holder.icon_state = "hudsyndicate" - if("Revolutionary") - holder.icon_state = "hudrevolutionary" - if("Head Revolutionary") - holder.icon_state = "hudheadrevolutionary" - if("Cultist") - holder.icon_state = "hudcultist" - if("Changeling") - holder.icon_state = "hudchangeling" - if("Wizard","Fake Wizard") - holder.icon_state = "hudwizard" - if("Death Commando") - holder.icon_state = "huddeathsquad" - if("Ninja") - holder.icon_state = "hudninja" - if("Vampire") // TODO: Check this - holder.icon_state = "hudvampire" - if("VampThrall") - holder.icon_state = "hudvampthrall" - if("head_loyalist") - holder.icon_state = "loyalist" - if("loyalist") - holder.icon_state = "loyalist" - if("head_mutineer") - holder.icon_state = "mutineer" - if("mutineer") - holder.icon_state = "mutineer" - if("Shadowling") - holder.icon_state = "hudshadowling" - if("shadowling thrall") - holder.icon_state = "hudshadowlingthrall" - - hud_list[SPECIALROLE_HUD] = holder - - if(hud_updateflag & 1 << NATIONS_HUD) - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudblank" - - if(mind && mind.nation) - switch(mind.nation.default_name) - if("Atmosia") - holder.icon_state = "hudatmosia" - if("Brigston") - holder.icon_state = "hudbrigston" - if("Cargonia") - holder.icon_state = "hudcargonia" - if("People's Republic of Commandzakstan") - holder.icon_state = "hudcommand" - if("Servicion") - holder.icon_state = "hudservice" - if("Medistan") - holder.icon_state = "hudmedistan" - if("Scientopia") - holder.icon_state = "hudscientopia" - - hud_list[NATIONS_HUD] = holder - - hud_updateflag = 0 -*/ - /mob/living/carbon/human/handle_silent() if(..()) speech_problem_flag = 1 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0a3eefa609b..d21aea4bde2 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -571,9 +571,6 @@ var/global/list/damage_icon_parts = list() else overlays_standing[ID_LAYER] = null - hud_updateflag |= 1 << ID_HUD - hud_updateflag |= 1 << WANTED_HUD - if(update_icons) update_icons() /mob/living/carbon/human/update_inv_gloves(var/update_icons=1) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a248d5ae581..274bf9c1427 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -314,8 +314,6 @@ for(var/datum/reagent/R in C.reagents.reagent_list) C.reagents.clear_reagents() C.reagents.addiction_list.Cut() - hud_updateflag |= 1 << HEALTH_HUD - hud_updateflag |= 1 << STATUS_HUD /mob/living/proc/update_revive() // handles revival through other means than cloning or adminbus (defib, IPC repair) stat = CONSCIOUS @@ -381,8 +379,6 @@ stat = CONSCIOUS update_fire() regenerate_icons() - hud_updateflag |= 1 << HEALTH_HUD - hud_updateflag |= 1 << STATUS_HUD return /mob/living/proc/UpdateDamageIcon() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index f21d2a2d954..104eb6048c0 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -5,7 +5,6 @@ var/maxHealth = 100 //Maximum health that should be possible. var/health = 100 //A mob's health - var/hud_updateflag = 0 //Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS var/bruteloss = 0.0 //Brutal damage caused by brute force (punching, being clubbed by a toolbox ect... this also accounts for pressure damage) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d01e5c6c9ab..dd7e20db4e3 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -177,16 +177,6 @@ var/list/ai_verbs_default = list( new /obj/machinery/ai_powersupply(src) - //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - ai_list += src ..() return diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 86dc6b21343..934cdb393c1 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -145,13 +145,6 @@ theAPC = null process_queued_alarms() - //regular_hud_updates() - - //switch(sensor_mode) - /// if (SEC_HUD) - // process_sec_hud(src, 1, eyeobj) - // if (MED_HUD) - // process_med_hud(src, 1, eyeobj) if(get_nations_mode()) process_nations_ai() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3deacfdca2f..3f56a1bfc25 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -143,15 +143,6 @@ var/list/robot_verbs_default = list( cell_component.wrapped = cell cell_component.installed = 1 - //hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100") - //hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[WANTED_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPLOYAL_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - //hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") diag_hud_set_borgcell() scanner.Grant(src) diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 95b5ab60583..c212b1c0d5a 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -110,7 +110,6 @@ for(var/datum/disease2/effectholder/e in effects) e.effect.deactivate(mob) mob.virus2.Remove("[uniqueID]") - mob.hud_updateflag |= 1 << STATUS_HUD /datum/disease2/disease/proc/minormutate() //uniqueID = rand(0,10000) diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index 91a287044e9..6efe54663f9 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -3,11 +3,11 @@ proc/get_infection_chance(var/mob/living/carbon/M, var/vector = "Airborne") var/score = 0 if (!istype(M)) return 0 - + var/mob/living/carbon/human/H = M if(istype(H) && H.species.virus_immune) - return 0 - + return 0 + if(istype(M, /mob/living/carbon/human)) if (vector == "Airborne") if(M.internal) //not breathing infected air helps greatly @@ -89,7 +89,6 @@ proc/airborne_can_reach(turf/source, turf/target, var/radius=5) var/datum/disease2/disease/D = disease.getcopy() D.minormutate() M.virus2["[D.uniqueID]"] = D - M.hud_updateflag |= 1 << STATUS_HUD //Infects mob M with random lesser disease, if he doesn't have one /proc/infect_mob_random_lesser(var/mob/living/carbon/M) @@ -97,14 +96,12 @@ proc/airborne_can_reach(turf/source, turf/target, var/radius=5) D.makerandom() D.infectionchance = 1 M.virus2["[D.uniqueID]"] = D - M.hud_updateflag |= 1 << STATUS_HUD //Infects mob M with random greated disease, if he doesn't have one /proc/infect_mob_random_greater(var/mob/living/carbon/M) var/datum/disease2/disease/D = new /datum/disease2/disease D.makerandom(1) M.virus2["[D.uniqueID]"] = D - M.hud_updateflag |= 1 << STATUS_HUD //Fancy prob() function. /proc/dprob(var/p) From 76eaf85c113a50c8285b6a563135ecac46085413 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Sun, 13 Dec 2015 23:43:01 -0500 Subject: [PATCH 15/21] sec sunglasses fix --- code/game/jobs/job/security.dm | 4 ++-- code/game/jobs/job/supervisor.dm | 4 ++-- .../crates_lockers/closets/secure/security.dm | 6 ++--- code/game/response_team.dm | 6 ++--- code/modules/clothing/glasses/glasses.dm | 24 +++++++++++++++++++ code/modules/clothing/glasses/hud.dm | 10 ++++---- .../mob/living/carbon/human/examine.dm | 2 +- 7 files changed, 40 insertions(+), 16 deletions(-) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index ec5943e0498..c83e3b2df70 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -31,7 +31,7 @@ H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves) H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) if(H.backbag == 1) H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) @@ -77,7 +77,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head) H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) // H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store) H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 1c37b52e39f..bd25aedff1b 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -222,7 +222,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_or_collect(new /obj/item/clothing/suit/judgerobe(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes) H.equip_or_collect(new /obj/item/clothing/head/powdered_wig(H), slot_head) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/device/pda/heads/magistrate(H), slot_wear_pda) H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H.back), slot_in_backpack) H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store) @@ -260,7 +260,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_or_collect(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit) H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/secsunglasses(H), slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) H.equip_or_collect(new /obj/item/device/pda/lawyer(H), slot_wear_pda) H.equip_or_collect(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 90d21be2231..cab226abedc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -112,7 +112,7 @@ new /obj/item/clothing/suit/armor/hos/alt(src) new /obj/item/clothing/head/HoS(src) new /obj/item/clothing/head/HoS/beret(src) - new /obj/item/clothing/glasses/hud/secsunglasses(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/weapon/storage/lockbox/loyalty(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) @@ -151,7 +151,7 @@ new /obj/item/clothing/under/rank/warden(src) new /obj/item/clothing/under/rank/warden/formal(src) new /obj/item/clothing/under/rank/warden/corp(src) - new /obj/item/clothing/glasses/hud/secsunglasses(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/taperoll/police(src) new /obj/item/weapon/storage/box/zipties(src) @@ -190,7 +190,7 @@ new /obj/item/weapon/grenade/flashbang(src) new /obj/item/weapon/storage/belt/security/sec(src) new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/clothing/glasses/hud/secsunglasses(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) new /obj/item/clothing/head/helmet(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/taperoll/police(src) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 46700a9e477..5504aa6def6 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -381,7 +381,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/security(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/advtaser(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/security(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) @@ -458,7 +458,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/security(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/advtaser(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/security(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) @@ -494,7 +494,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/secsunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index d522429d3bf..45eefbeb4ff 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -226,6 +226,30 @@ "Vox" = 'icons/mob/species/vox/eyes.dmi' ) +///DELETE THIS LATER! IT SAVES MAP CODE!///// + +/obj/item/clothing/glasses/sunglasses/sechud + name = "HUDSunglasses" + desc = "Sunglasses with a HUD." + icon_state = "sunhud" + darkness_view = 1 + flash_protect = 1 + tint = 1 + HUDType = DATA_HUD_SECURITY_BASIC + prescription_upgradable = 1 + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi' + ) + +/obj/item/clothing/glasses/sunglasses/sechud/prescription + prescription = 1 + +/obj/item/clothing/glasses/sunglasses/sechud/New() + new /obj/item/clothing/glasses/hud/security/sunglasses (loc) + qdel(src) +/////////////// + /obj/item/clothing/glasses/sunglasses/lasers desc = "A peculiar set of sunglasses; they have various chips and other panels attached to the sides of the frames." name = "high-tech sunglasses" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index f1c51e7fd6f..74bf2fa6208 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -3,18 +3,18 @@ desc = "A heads-up display that provides important info in (almost) real time." flags = null //doesn't protect eyes because it's a monocle, duh origin_tech = "magnets=3;biotech=2" - HUDType = DATA_HUD_SECURITY_BASIC + HUDType = null //Hudtype is defined on glasses.dm prescription_upgradable = 1 var/list/icon/current = list() //the current hud icons /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) - if(slot == slot_glasses) + if(HUDType && slot == slot_glasses) var/datum/atom_hud/H = huds[HUDType] H.add_hud_to(user) /obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user) - if(user.glasses == src) + if(HUDType && istype(user) && user.glasses == src) var/datum/atom_hud/H = huds[HUDType] H.remove_hud_from(user) @@ -84,7 +84,7 @@ see_darkness = 0 prescription_upgradable = 0 -/obj/item/clothing/glasses/hud/secsunglasses +/obj/item/clothing/glasses/hud/security/sunglasses name = "HUDSunglasses" desc = "Sunglasses with a HUD." icon_state = "sunhud" @@ -98,5 +98,5 @@ "Vox" = 'icons/mob/species/vox/eyes.dmi' ) -/obj/item/clothing/glasses/hud/secsunglasses/prescription +/obj/item/clothing/glasses/hud/security/sunglasses/prescription prescription = 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 469b8ac595a..84858aef807 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -486,7 +486,7 @@ var/mob/living/carbon/human/H = M switch(hudtype) if("security") - return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/secsunglasses) + return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) if("medical") return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health_advanced) else From c3f662a6dca1c2979ba5c9db63efaea253e3db2c Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 15 Dec 2015 03:08:16 -0500 Subject: [PATCH 16/21] zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz --- code/datums/mind.dm | 8 +++-- code/game/gamemodes/cult/cult.dm | 7 ++--- code/game/gamemodes/nations/nations.dm | 4 +-- code/game/gamemodes/traitor/traitor.dm | 31 +++++-------------- code/game/gamemodes/vampire/vampire.dm | 4 +-- code/game/jobs/job/security.dm | 14 ++++----- code/game/jobs/job/supervisor.dm | 12 +++---- .../crates_lockers/closets/secure/security.dm | 2 +- code/game/response_team.dm | 2 +- code/modules/clothing/glasses/glasses.dm | 3 +- code/modules/clothing/glasses/hud.dm | 12 ++++++- .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 1 - .../mob/living/carbon/human/human_damage.dm | 2 -- .../mob/living/carbon/human/species/monkey.dm | 8 ----- 15 files changed, 46 insertions(+), 66 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index c7d1e233504..30921ceadcc 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -628,10 +628,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() log_admin("[key_name(usr)] has given [key_name(current)] a loyalty implant") message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a loyalty implant") @@ -891,7 +891,7 @@ ticker.mode.vampires -= src special_role = null current.remove_vampire_powers() - ticker.mode.update_vampire_icons_removed(current) + ticker.mode.update_vampire_icons_removed(src) if(vampire) qdel(vampire) current << "You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!" log_admin("[key_name(usr)] has de-vampired [key_name(current)]") @@ -900,7 +900,7 @@ if(!(src in ticker.mode.vampires)) ticker.mode.vampires += src ticker.mode.grant_vampire_powers(current) - ticker.mode.update_vampire_icons_added(current) + ticker.mode.update_vampire_icons_added(src) special_role = "Vampire" current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!" log_admin("[key_name(usr)] has vampired [key_name(current)]") @@ -991,6 +991,7 @@ var/mob/living/silicon/ai/A = current A.set_zeroth_law("") A.show_laws() + ticker.mode.update_traitor_icons_removed(src) if("traitor") @@ -1004,6 +1005,7 @@ var/mob/living/silicon/A = current call(/datum/game_mode/proc/add_law_zero)(A) A.show_laws() + ticker.mode.update_traitor_icons_added(src) if("autoobjectives") ticker.mode.forge_traitor_objectives(src) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 21d4df7bbb8..f7d7660b7fb 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -211,9 +211,6 @@ M << "[cult_mind.current] looks like they just reverted to their old faith!" - //reset_cult_icons_for_spirit(currentSpirit) - - /datum/game_mode/proc/reset_cult_icons_for_cultist(var/datum/mind/target) if(target.current) if(target.current.client) @@ -314,7 +311,7 @@ var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.join_hud(cult_mind.current) - set_antag_hud(cult_mind, "hudcultist") + set_antag_hud(cult_mind.current, "hudcultist") /datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind) @@ -325,7 +322,7 @@ // remove_cult_icon_from_spirit(currentSpirit,cult_mind) var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.leave_hud(cult_mind.current) - set_antag_hud(cult_mind, null) + set_antag_hud(cult_mind.current, null) /datum/game_mode/cult/proc/get_unconvertables() diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 6d3190aa424..8bcd47c60b1 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -266,9 +266,9 @@ datum/game_mode/nations /datum/game_mode/proc/update_nations_icons_added(datum/mind/nations_mind,var/naticon) var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] nations_hud.join_hud(nations_mind) - set_nations_hud(nations_mind,naticon) + set_nations_hud(nations_mind.current,naticon) /datum/game_mode/proc/update_nations_icons_removed(datum/mind/nations_mind) var/datum/atom_hud/antag/nations_hud = huds[GAME_HUD_NATIONS] nations_hud.leave_hud(nations_mind) - set_nations_hud(nations_mind, null) \ No newline at end of file + set_nations_hud(nations_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 0d42b364520..8b3456a94b5 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -171,7 +171,6 @@ /datum/game_mode/proc/greet_traitor(var/datum/mind/traitor) traitor.current << "You are the traitor." var/obj_count = 1 - set_antag_hud(traitor, "hudsyndicate") for(var/datum/objective/objective in traitor.objectives) traitor.current << "Objective #[obj_count]: [objective.explanation_text]" obj_count++ @@ -341,25 +340,17 @@ var/ref = "\ref[traitor_mind]" if(ref in implanter) if(traitor_mind.current) - if(traitor_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = traitor_mind.current, icon_state = "greytide_head") - traitor_mind.current.client.images += I + set_antag_hud(traitor_mind.current, "hudsyndicate") for(var/headref in implanter) for(var/datum/mind/t_mind in implanter[headref]) var/datum/mind/head = locate(headref) if(head) if(head.current) if(head.current.client) - var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "greytide") - head.current.client.images += I + set_antag_hud(head.current, "hudsyndicate") if(t_mind.current) if(t_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = head.current, icon_state = "greytide_head") - t_mind.current.client.images += I - if(t_mind.current) - if(t_mind.current.client) - var/I = image('icons/mob/mob.dmi', loc = t_mind.current, icon_state = "greytide") - t_mind.current.client.images += I + set_antag_hud(t_mind.current, "hudsyndicate") /datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind) for(var/headref in implanter) @@ -367,23 +358,15 @@ for(var/datum/mind/t_mind in implanter[headref]) if(t_mind.current) if(t_mind.current.client) - for(var/image/I in t_mind.current.client.images) - if((I.icon_state == "greytide" || I.icon_state == "greytide_head") && I.loc == traitor_mind.current) - //log_to_dd("deleting [traitor_mind] overlay") - qdel(I) + set_antag_hud(t_mind.current, null) + if(head) //log_to_dd("found [head.name]") if(head.current) if(head.current.client) - for(var/image/I in head.current.client.images) - if((I.icon_state == "greytide" || I.icon_state == "greytide_head") && I.loc == traitor_mind.current) - //log_to_dd("deleting [traitor_mind] overlay") - qdel(I) - if(traitor_mind.current) + set_antag_hud(head.current, null) if(traitor_mind.current.client) - for(var/image/I in traitor_mind.current.client.images) - if(I.icon_state == "greytide" || I.icon_state == "greytide_head") - qdel(I) + set_antag_hud(traitor_mind.current, null) /datum/game_mode/proc/remove_traitor_mind(datum/mind/traitor_mind, datum/mind/head) //var/list/removal diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index caa86998383..1a4dc67237a 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -381,12 +381,12 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) // var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] // vamp_hud.join_hud(vampire_mind) - set_antag_hud(vampire_mind, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) + set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) /datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind) // var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_VAMPIRE] // vampire_hud.leave_hud(vampire_mind) - set_antag_hud(vampire_mind, null) + set_antag_hud(vampire_mind.current, null) /datum/game_mode/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) //var/list/removal diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index c83e3b2df70..b752a9f28aa 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -43,10 +43,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 @@ -90,10 +90,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 @@ -146,10 +146,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() H.dna.SetSEState(SOBERBLOCK,1) H.mutations += SOBER @@ -194,10 +194,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 /datum/job/brigdoc @@ -221,7 +221,7 @@ if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_or_collect(new /obj/item/clothing/under/rank/security/brigphys(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/health_advanced, slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses) H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda) H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand) @@ -233,10 +233,10 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 /datum/job/pilot @@ -274,8 +274,8 @@ var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 \ No newline at end of file diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index bd25aedff1b..b42f221aaa5 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -38,11 +38,11 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() captain_announcement.Announce("All hands, captain [H.real_name] on deck!") var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() callHook("captain_spawned", list("captain" = H)) return 1 @@ -137,10 +137,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 /datum/job/blueshield @@ -173,7 +173,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves) H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_or_collect(new /obj/item/clothing/glasses/hud/health_advanced, slot_glasses) + H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses) H.equip_or_collect(new /obj/item/clothing/under/rank/blueshield(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/blueshield(H), slot_wear_suit) H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store) @@ -185,10 +185,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 /datum/job/judge @@ -229,10 +229,10 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 //var/global/lawyer = 0//Checks for another lawyer //This changed clothes on 2nd lawyer, both IA get the same dreds. @@ -272,8 +272,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 - H.sec_hud_set_implants() var/obj/item/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected + H.sec_hud_set_implants() return 1 \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index cab226abedc..d47424d3489 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -248,7 +248,7 @@ new /obj/item/weapon/restraints/handcuffs(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/glasses/hud/health_advanced + new /obj/item/clothing/glasses/hud/health/health_advanced new /obj/item/clothing/head/beret/centcom/officer(src) new /obj/item/clothing/suit/armor/vest/blueshield(src) new /obj/item/clothing/suit/storage/blueshield(src) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 5504aa6def6..a7e41187bd5 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -475,7 +475,7 @@ var/send_emergency_team M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex/nitrile(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health_advanced(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/health_advanced(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_belt) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 45eefbeb4ff..559dace0c6d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -10,7 +10,6 @@ var/prescription = 0 var/prescription_upgradable = 0 var/see_darkness = 1 - var/HUDType = null /obj/item/clothing/glasses/New() . = ..() @@ -235,7 +234,7 @@ darkness_view = 1 flash_protect = 1 tint = 1 - HUDType = DATA_HUD_SECURITY_BASIC + //HUDType = DATA_HUD_SECURITY_BASIC prescription_upgradable = 1 species_fit = list("Vox") sprite_sheets = list( diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 74bf2fa6208..b945716f2dc 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -3,7 +3,7 @@ desc = "A heads-up display that provides important info in (almost) real time." flags = null //doesn't protect eyes because it's a monocle, duh origin_tech = "magnets=3;biotech=2" - HUDType = null //Hudtype is defined on glasses.dm + var/HUDType = null //Hudtype is defined on glasses.dm prescription_upgradable = 1 var/list/icon/current = list() //the current hud icons @@ -29,8 +29,18 @@ icon_state = "healthhud" HUDType = DATA_HUD_MEDICAL_ADVANCED +///DELETE ME AFTER MAP FREEZE!!!!!!!!/// /obj/item/clothing/glasses/hud/health_advanced name = "\improper Advanced Health Scanner HUD" + +/obj/item/clothing/glasses/hud/health_advanced/New() + new /obj/item/clothing/glasses/hud/health/health_advanced (loc) + qdel(src) + +/////!!!!!1111!!!!!!!!///////////////// + +/obj/item/clothing/glasses/hud/health/health_advanced + name = "\improper Advanced Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. Includes anti-flash filter." icon_state = "advmedhud" flash_protect = 1 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 84858aef807..15761fb3421 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -488,7 +488,7 @@ if("security") return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses) if("medical") - return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health_advanced) + return istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.glasses, /obj/item/clothing/glasses/hud/health/health_advanced) else return 0 else if(istype(M, /mob/living/silicon)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 753e60fb5a3..86491792a3a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -37,7 +37,6 @@ var/mob/M = src faction |= "\ref[M]" //what - prepare_data_huds() // Set up DNA. if(!delay_ready_dna && dna) dna.ready_dna(src) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 8fbc459de34..df69c687ec4 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -22,8 +22,6 @@ if(B) if((health >= (config.health_threshold_dead / 100 * 75)) && stat == DEAD) update_revive() - med_hud_set_health() - med_hud_set_status() if(stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix update_revive() med_hud_set_health() diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 048664b7ca2..e1212758309 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -33,14 +33,6 @@ flags = IS_RESTRICTED - -/mob/living/carbon/human/monkey/prepare_data_huds() - //Prepare our med HUD... - ..() - //...and display it. - for(var/datum/atom_hud/data/human/medical/hud in huds) - hud.add_to_hud(src) - /datum/species/monkey/handle_npc(var/mob/living/carbon/human/H) if(H.stat != CONSCIOUS) return From 6eac1092bb5245fb06631ecadba676b690c30696 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Tue, 15 Dec 2015 22:27:30 -0500 Subject: [PATCH 17/21] hate the mask of narnar --- code/game/data_huds.dm | 4 +- code/game/gamemodes/changeling/changeling.dm | 3 +- code/game/gamemodes/cult/cult.dm | 91 -------------------- code/modules/mob/dead/observer/observer.dm | 14 +-- code/modules/mob/transform_procs.dm | 8 +- 5 files changed, 16 insertions(+), 104 deletions(-) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 1f44e74629e..ce96bca33e0 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -27,9 +27,7 @@ return 1 /datum/atom_hud/data/human/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) - if(istype(M,/mob/dead/observer)) - return 1 - if(check_sensors(H)) + if(check_sensors(H) || istype(M,/mob/dead/observer) ) ..() /datum/atom_hud/data/human/medical/basic/proc/update_suit_sensors(mob/living/carbon/H) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index b5edebc95bf..cfd7abf254d 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -136,7 +136,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" changeling.current << "\red You are a changeling!" changeling.current << "\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." changeling.current << "You must complete the following tasks:" - set_antag_hud(changeling, "hudchangeling") if (changeling.current.mind) if (changeling.current.mind.assigned_role == "Clown") changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." @@ -146,6 +145,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" for(var/datum/objective/objective in changeling.objectives) changeling.current << "Objective #[obj_count]: [objective.explanation_text]" obj_count++ + + set_antag_hud(changeling.current, "hudchangeling") return /*/datum/game_mode/changeling/check_finished() diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index f7d7660b7fb..7208213d903 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -211,97 +211,6 @@ M << "[cult_mind.current] looks like they just reverted to their old faith!" -/datum/game_mode/proc/reset_cult_icons_for_cultist(var/datum/mind/target) - if(target.current) - if(target.current.client) - remove_all_cult_icons(target) - for(var/datum/mind/cultist in cult) - if(cultist.current) - add_cult_icon(target.current.client,cultist.current) - - -/datum/game_mode/proc/reset_cult_icons_for_spirit(mob/spirit/target) - if (target.client) - remove_all_cult_icons(target) - for(var/datum/mind/cultist in cult) - if(cultist.current) - add_cult_icon(target.client,cultist.current) - - -/datum/game_mode/proc/add_cult_icon(client/target_client,mob/target_mob) - var/I = image('icons/mob/mob.dmi', loc = target_mob, icon_state = "cult") - target_client.images += I - - -/datum/game_mode/proc/remove_cult_icon(client/target_client,mob/target_mob) - for(var/image/I in target_client.images) - if(I.icon_state == "cult" && I.loc == target_mob) - qdel(I) - - -/datum/game_mode/proc/remove_all_cult_icons_from_client(client/target) - for(var/image/I in target.images) - if(I.icon_state == "cult") - qdel(I) - - -/datum/game_mode/proc/remove_all_cult_icons(target) - var/datum/mind/cultist = target - if(istype(cultist)) - if(cultist.current) - if(cultist.current.client) - remove_all_cult_icons_from_client(cultist.current.client) - return TRUE - var/mob/spirit/currentSpirit = target - if(istype(currentSpirit)) - if (currentSpirit.client) - remove_all_cult_icons_from_client(currentSpirit.client) - return TRUE - return FALSE - - -/datum/game_mode/proc/add_cult_icon_to_spirit(mob/spirit/currentSpirit,datum/mind/cultist) - if(!istype(currentSpirit) || !istype(cultist)) - return FALSE - if (currentSpirit.client) - if (cultist.current) - add_cult_icon(currentSpirit.client,cultist.current) - - -/datum/game_mode/proc/add_cult_icon_to_cultist(datum/mind/first_cultist,datum/mind/second_cultist) - if(first_cultist.current && second_cultist.current) - if(first_cultist.current.client) - add_cult_icon(first_cultist.current.client, second_cultist.current) - - -/datum/game_mode/proc/remove_cult_icon_from_cultist(datum/mind/first_cultist,datum/mind/second_cultist) - if(first_cultist.current && second_cultist.current) - if(first_cultist.current.client) - remove_cult_icon(first_cultist.current.client,second_cultist.current) - - -/datum/game_mode/proc/remove_cult_icon_from_spirit(mob/spirit/currentSpirit,datum/mind/cultist) - if(!istype(currentSpirit) || !istype(cultist)) - return FALSE - if (currentSpirit.client) - if (cultist.current) - remove_cult_icon(currentSpirit.client,cultist.current) - - -/datum/game_mode/proc/cult_icon_pair_link(datum/mind/first_cultist,datum/mind/second_cultist) - if (!istype(first_cultist) || !istype(second_cultist)) - return 0 - add_cult_icon_to_cultist(first_cultist,second_cultist) - add_cult_icon_to_cultist(second_cultist,first_cultist) - - -/datum/game_mode/proc/cult_icon_pair_unlink(datum/mind/first_cultist,datum/mind/second_cultist) - if (!istype(first_cultist) || !istype(second_cultist)) - return 0 - remove_cult_icon_from_cultist(first_cultist,second_cultist) - remove_cult_icon_from_cultist(second_cultist,first_cultist) - - /datum/game_mode/proc/update_cult_icons_added(datum/mind/cult_mind) //spawn(0) // for(var/datum/mind/cultist in cult) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ea37bcee9fd..86e280aff1f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -253,11 +253,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 1 -/mob/dead/observer/proc/show_me_the_hud(hud_index) - var/datum/atom_hud/H = huds[hud_index] - H.add_hud_to(src) - data_hud_seen = hud_index - //src << "Datahud"//debug print /mob/dead/observer/verb/toggle_medHUD() set category = "Ghost" @@ -296,6 +291,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!M.has_enabled_antagHUD && !check_rights(R_ADMIN|R_MOD,0)) M.has_enabled_antagHUD = 1 + + var/datum/atom_hud/A = huds[SPECIALROLE_HUD] + if(M.has_enabled_antagHUD || check_rights(R_ADMIN|R_MOD)) + for(var/datum/atom_hud/H in huds) + if(istype(H, /datum/atom_hud/antag)) + (usr in A.hudusers) ? H.add_hud_to(usr) : H.remove_hud_from(usr) +/* if(M.antagHUD) M.antagHUD = 0 for(var/datum/atom_hud/H in huds) @@ -308,7 +310,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(istype(H, /datum/atom_hud/antag)) H.add_hud_to(usr) usr << "You toggled your antag HUD On." - +*/ /mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) set category = "Ghost" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index eb59f6b9aca..90a9152df21 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -97,6 +97,7 @@ if (should_gib) spawn(0) + ticker.mode.update_cult_icons_removed(src.mind.current) src.gib() // gib the body else spawn(0)//To prevent the proc from returning null. @@ -104,6 +105,7 @@ "[src] disappears into the shadows, never to be seen again.", \ "You disappear into the shadows, never to be seen again.", \ "You hear strange noise, you can't quite place it.") + ticker.mode.update_cult_icons_removed(src.mind.current) qdel(src) new_spirit << "You are a Mask of Nar'sie now. You are a tiny fragment of the unknowable entity that is the god." @@ -113,7 +115,7 @@ // let spirits identify cultists if(ticker.mode) - ticker.mode.reset_cult_icons_for_spirit(new_spirit) + ticker.mode.update_cult_icons_added(new_spirit.mind.current) // highlander test there_can_be_only_one_mask(new_spirit) @@ -320,7 +322,7 @@ /mob/proc/safe_respawn(var/MP) if(!MP) - return 0 + return 0 if(ispath(MP, /mob/living/simple_animal/pet/cat)) return 1 @@ -347,7 +349,7 @@ if(ispath(MP, /mob/living/simple_animal/borer) && !jobban_isbanned(src, "alien") && !jobban_isbanned(src, "Syndicate")) return 1 - + if(ispath(MP, /mob/living/simple_animal/diona) && !jobban_isbanned(src, "Dionaea")) return 1 From 52e43c4d2d3d76fa9859d932536916db2688112a Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 17 Dec 2015 01:29:21 -0500 Subject: [PATCH 18/21] good news everyone! It works! --- code/__DEFINES/hud.dm | 3 +- code/datums/hud.dm | 1 + code/datums/mind.dm | 2 ++ code/game/gamemodes/antag_hud.dm | 11 +++++- .../game/gamemodes/autotraitor/autotraitor.dm | 2 ++ code/game/gamemodes/changeling/changeling.dm | 14 ++++++-- code/game/gamemodes/cult/cult.dm | 34 ++++++++++++------ code/game/gamemodes/traitor/traitor.dm | 35 ++++--------------- code/game/gamemodes/vampire/vampire.dm | 8 ++--- code/game/mecha/medical/odysseus.dm | 4 +-- code/modules/mob/dead/observer/observer.dm | 24 +++---------- code/modules/mob/transform_procs.dm | 4 +-- 12 files changed, 72 insertions(+), 70 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index fe429df3eca..ab41a74ecd3 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -35,4 +35,5 @@ #define ANTAG_HUD_OPS 9 #define ANTAG_HUD_WIZ 10 #define ANTAG_HUD_SHADOW 11 -#define ANTAG_HUD_VAMPIRE 12 +#define ANTAG_HUD_SOLO 12 + diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 238553dc9ca..f25d18ab255 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -13,6 +13,7 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \ ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \ + ANTAG_HUD_SOLO = new/datum/atom_hud/antag(), \ ) /datum/atom_hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 30921ceadcc..96ff6d7710e 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -854,6 +854,7 @@ ticker.mode.changelings -= src special_role = null current.remove_changeling_powers() + ticker.mode.update_change_icons_removed(src) if(changeling) qdel(changeling) current << "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!" log_admin("[key_name(usr)] has de-changelinged [key_name(current)]") @@ -862,6 +863,7 @@ if(!(src in ticker.mode.changelings)) ticker.mode.changelings += src ticker.mode.grant_changeling_powers(current) + ticker.mode.update_change_icons_added(src) special_role = "Changeling" current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!" log_admin("[key_name(usr)] has changelinged [key_name(current)]") diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index f0c4c905f7b..f9336c1cd1b 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -6,10 +6,19 @@ CRASH("join_hud(): [M] ([M.type]) is not a mob!") if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged M.mind.antag_hud.leave_hud(M) - add_to_hud(M) + if(!ismask(M))//FUCK YOU MASK OF NARNAR! + add_to_hud(M) add_hud_to(M) M.mind.antag_hud = src +/datum/atom_hud/antag/proc/join_solo_hud(mob/M)//for non team antags and for observer huds + if(!istype(M)) + CRASH("join_hud(): [M] ([M.type]) is not a mob!") + if(M.mind.antag_hud) //note: please let this runtime if a mob has no mind, as mindless mobs shouldn't be getting antagged + M.mind.antag_hud.leave_hud(M) + add_to_hud(M) + M.mind.antag_hud = src + /datum/atom_hud/antag/proc/leave_hud(mob/M) if(!istype(M)) CRASH("leave_hud(): [M] ([M.type]) is not a mob!") diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 421aadf17ef..7f2abc90b0d 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -137,6 +137,8 @@ newtraitor << "\red ATTENTION: \black It is time to pay your debt to the Syndicate..." newtraitor << "You are now a traitor." newtraitor.mind.special_role = "traitor" + var/datum/atom_hud/antag/tatorhud = huds[SPECIALROLE_HUD] + tatorhud.join_solo_hud(newtraitor) set_antag_hud(src, "hudsyndicate") var/obj_count = 1 diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index cfd7abf254d..251c2223fb3 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -68,6 +68,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" grant_changeling_powers(changeling.current) forge_changeling_objectives(changeling) greet_changeling(changeling) + update_change_icons_added(changeling) ..() @@ -145,10 +146,19 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" for(var/datum/objective/objective in changeling.objectives) changeling.current << "Objective #[obj_count]: [objective.explanation_text]" obj_count++ - - set_antag_hud(changeling.current, "hudchangeling") return +/datum/game_mode/proc/update_change_icons_added(datum/mind/changeling) + var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO] + linghud.join_solo_hud(changeling.current) + set_antag_hud(changeling.current, "hudchangeling") + +/datum/game_mode/proc/update_change_icons_removed(datum/mind/changeling) + var/datum/atom_hud/antag/linghud = huds[ANTAG_HUD_SOLO] + linghud.leave_hud(changeling.current) + set_antag_hud(changeling.current, null) + + /*/datum/game_mode/changeling/check_finished() var/changelings_alive = 0 for(var/datum/mind/changeling in changelings) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 7208213d903..457a9d85995 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -211,12 +211,27 @@ M << "[cult_mind.current] looks like they just reverted to their old faith!" +/datum/game_mode/proc/add_cult_icon_to_spirit(mob/spirit/currentSpirit) + if(!istype(currentSpirit)) + return FALSE + if (currentSpirit.client) + var/datum/atom_hud/antag/maskhud = huds[ANTAG_HUD_CULT] + maskhud.join_hud(currentSpirit) + set_antag_hud(currentSpirit,"hudcultist") + + +/datum/game_mode/proc/remove_cult_icon_from_spirit(mob/spirit/currentSpirit) + if(!istype(currentSpirit)) + return FALSE + if (currentSpirit.client) + var/datum/atom_hud/antag/maskhud = huds[ANTAG_HUD_CULT] + maskhud.leave_hud(currentSpirit) + set_antag_hud(currentSpirit, null) + + /datum/game_mode/proc/update_cult_icons_added(datum/mind/cult_mind) - //spawn(0) - // for(var/datum/mind/cultist in cult) - // cult_icon_pair_link(cultist,cult_mind) - // for(var/mob/spirit/currentSpirit in spirits) - // add_cult_icon_to_spirit(currentSpirit,cult_mind) + for(var/mob/spirit/currentSpirit in spirits) + add_cult_icon_to_spirit(currentSpirit,cult_mind) var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.join_hud(cult_mind.current) @@ -224,11 +239,10 @@ /datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind) - //spawn(0) - // for(var/datum/mind/cultist in cult) - // cult_icon_pair_unlink(cultist,cult_mind) - // for(var/mob/spirit/currentSpirit in spirits) - // remove_cult_icon_from_spirit(currentSpirit,cult_mind) + + for(var/mob/spirit/currentSpirit in spirits) + remove_cult_icon_from_spirit(currentSpirit,cult_mind) + var/datum/atom_hud/antag/culthud = huds[ANTAG_HUD_CULT] culthud.leave_hud(cult_mind.current) set_antag_hud(cult_mind.current, null) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 8b3456a94b5..a94cda0f3cf 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -337,36 +337,15 @@ traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]") /datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind) - var/ref = "\ref[traitor_mind]" - if(ref in implanter) - if(traitor_mind.current) - set_antag_hud(traitor_mind.current, "hudsyndicate") - for(var/headref in implanter) - for(var/datum/mind/t_mind in implanter[headref]) - var/datum/mind/head = locate(headref) - if(head) - if(head.current) - if(head.current.client) - set_antag_hud(head.current, "hudsyndicate") - if(t_mind.current) - if(t_mind.current.client) - set_antag_hud(t_mind.current, "hudsyndicate") + //var/ref = "\ref[traitor_mind]" + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] + tatorhud.join_solo_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, "hudsyndicate") /datum/game_mode/proc/update_traitor_icons_removed(datum/mind/traitor_mind) - for(var/headref in implanter) - var/datum/mind/head = locate(headref) - for(var/datum/mind/t_mind in implanter[headref]) - if(t_mind.current) - if(t_mind.current.client) - set_antag_hud(t_mind.current, null) - - if(head) - //log_to_dd("found [head.name]") - if(head.current) - if(head.current.client) - set_antag_hud(head.current, null) - if(traitor_mind.current.client) - set_antag_hud(traitor_mind.current, null) + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_SOLO] + tatorhud.leave_hud(traitor_mind.current) + set_antag_hud(traitor_mind.current, null) /datum/game_mode/proc/remove_traitor_mind(datum/mind/traitor_mind, datum/mind/head) //var/list/removal diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 1a4dc67237a..5e90a19ff24 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -379,13 +379,13 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha //no verb //prepare for copypaste /datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind) -// var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE] -// vamp_hud.join_hud(vampire_mind) + var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_SOLO] + vamp_hud.join_solo_hud(vampire_mind.current) set_antag_hud(vampire_mind.current, ((vampire_mind in vampires) ? "hudvampire" : "hudvampirethrall")) /datum/game_mode/proc/update_vampire_icons_removed(datum/mind/vampire_mind) -// var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_VAMPIRE] -// vampire_hud.leave_hud(vampire_mind) + var/datum/atom_hud/antag/vampire_hud = huds[ANTAG_HUD_SOLO] + vampire_hud.leave_hud(vampire_mind.current) set_antag_hud(vampire_mind.current, null) /datum/game_mode/proc/remove_vampire_mind(datum/mind/vampire_mind, datum/mind/head) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index de876b6c282..c288c09a299 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -24,7 +24,7 @@ else return 0 - pilot_mmi_hud(var/mob/living/carbon/brain/pilot) + mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc,var/mob/living/carbon/brain/pilot) //pilot.regular_hud_updates() //process_med_hud(pilot, 1) var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] @@ -33,7 +33,7 @@ return ..() go_out() - if(ishuman(occupant) && builtin_hud_user) + if((ishuman(occupant) || pilot_is_mmi()) && builtin_hud_user) var/mob/living/carbon/human/H = occupant var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] A.remove_hud_from(H) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 86e280aff1f..912631e05e8 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -291,26 +291,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!M.has_enabled_antagHUD && !check_rights(R_ADMIN|R_MOD,0)) M.has_enabled_antagHUD = 1 + var/datum/atom_hud/A = huds[DATA_HUD_SECURITY_ADVANCED] + var/adding_hud = (usr in A.hudusers) ? 0 : 1 + for(var/datum/atom_hud/H in huds) + if(istype(H, /datum/atom_hud/antag) || istype(H, /datum/atom_hud/data/human/security/advanced)) + (adding_hud) ? H.add_hud_to(usr) : H.remove_hud_from(usr) - var/datum/atom_hud/A = huds[SPECIALROLE_HUD] - if(M.has_enabled_antagHUD || check_rights(R_ADMIN|R_MOD)) - for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag)) - (usr in A.hudusers) ? H.add_hud_to(usr) : H.remove_hud_from(usr) -/* - if(M.antagHUD) - M.antagHUD = 0 - for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag)) - H.remove_hud_from(usr) - usr << "You toggled your antag HUD Off." - else - M.antagHUD = 1 - for(var/datum/atom_hud/H in huds) - if(istype(H, /datum/atom_hud/antag)) - H.add_hud_to(usr) - usr << "You toggled your antag HUD On." -*/ /mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) set category = "Ghost" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 90a9152df21..9c2913bf68e 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -97,7 +97,6 @@ if (should_gib) spawn(0) - ticker.mode.update_cult_icons_removed(src.mind.current) src.gib() // gib the body else spawn(0)//To prevent the proc from returning null. @@ -105,7 +104,6 @@ "[src] disappears into the shadows, never to be seen again.", \ "You disappear into the shadows, never to be seen again.", \ "You hear strange noise, you can't quite place it.") - ticker.mode.update_cult_icons_removed(src.mind.current) qdel(src) new_spirit << "You are a Mask of Nar'sie now. You are a tiny fragment of the unknowable entity that is the god." @@ -115,7 +113,7 @@ // let spirits identify cultists if(ticker.mode) - ticker.mode.update_cult_icons_added(new_spirit.mind.current) + ticker.mode.add_cult_icon_to_spirit(new_spirit) // highlander test there_can_be_only_one_mask(new_spirit) From f077de54ae546e588fdf3fff177879fe2227e06a Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Thu, 17 Dec 2015 18:55:39 -0500 Subject: [PATCH 19/21] sneaky sneaky guardian fix. --- code/modules/mob/living/simple_animal/guardian/guardian.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 71b0e5a6122..3eb964db6cf 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -129,13 +129,14 @@ var/input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "") if(!input) return + for(var/mob/M in mob_list) if(M == summoner) M << "[src]: [input]" + log_say("Guardian Communication: [key_name(src)] -> [key_name(M)] : [input]") else if (M in dead_mob_list) M << "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]" src << "[src]: [input]" - log_say("Guardian Communication: [src.real_name]/[src.key] : [input]") /mob/living/simple_animal/hostile/guardian/proc/ToggleMode() src << "You dont have another mode!" @@ -153,10 +154,11 @@ var/mob/living/simple_animal/hostile/guardian/G = M if(G.summoner == src) G << "[src]: [input]" + log_say("Guardian Communication: [key_name(src)] -> [key_name(G)] : [input]") + else if (M in dead_mob_list) M << "Guardian Communication from [src] ([ghost_follow_link(src, ghost=M)]): [input]" src << "[src]: [input]" - log_say("Guardian Communication: [src.real_name]/[src.key] : [text]") /mob/living/proc/guardian_recall() set name = "Recall Guardian" From 3ae8118b9c9c24599072a4c25a89c8a0b8df88a6 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 18 Dec 2015 03:09:25 -0500 Subject: [PATCH 20/21] please let me have map merged right.... --- _maps/map_files/cyberiad/z2.dmm | 4 ++-- code/datums/mind.dm | 4 ++-- code/game/mecha/medical/odysseus.dm | 25 +++++++++++++------- code/modules/clothing/glasses/glasses.dm | 24 ------------------- code/modules/clothing/glasses/hud.dm | 10 -------- code/modules/mob/living/carbon/brain/life.dm | 6 ----- 6 files changed, 21 insertions(+), 52 deletions(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 178c74e80fe..09d67befae5 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -144,6 +144,7 @@ "cN" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 11; id = "specops_transit"; name = "specops in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space) "cO" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 12; id = "ferry_transit"; name = "ferry in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space) "cP" = (/obj/docking_port/stationary/transit{dir = 2; dwidth = 3; height = 5; id = "engineering_transit"; name = "engineering in transit"; turf_type = /turf/space/transit/horizontal; width = 7},/turf/space/transit/horizontal,/area/space) +"cQ" = (/obj/structure/rack,/obj/item/clothing/glasses/sunglasses{pixel_x = -3; pixel_y = 3},/obj/item/clothing/glasses/hud/health/health_advanced{step_y = 0},/obj/item/clothing/glasses/hud/security/sunglasses,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "cR" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/wall,/area/prison/solitary) "cS" = (/obj/structure/stool/bed,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) "cT" = (/turf/unsimulated/floor{icon_state = "platingdmg3"},/area/prison/solitary) @@ -931,7 +932,6 @@ "DN" = (/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_mid"; name = "window"; opacity = 0; tag = "icon-window5 (EAST)"},/area/admin) "DO" = (/obj/structure/rack,/obj/item/clothing/under/chameleon/all{pixel_x = -3; pixel_y = 3},/obj/item/clothing/under/soviet,/obj/item/clothing/under/pirate{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "DP" = (/obj/structure/rack,/obj/item/clothing/glasses/material{pixel_x = -3; pixel_y = 3},/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/thermal{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"DQ" = (/obj/structure/rack,/obj/item/clothing/glasses/sunglasses{pixel_x = -3; pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/glasses/hud/health_advanced{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "DR" = (/obj/structure/rack,/obj/item/clothing/gloves/color/black/thief{pixel_x = -3; pixel_y = 3},/obj/item/clothing/gloves/color/yellow,/obj/item/clothing/gloves/color/rainbow{pixel_x = 3; pixel_y = -3},/obj/item/clothing/gloves/combat{pixel_x = -3; pixel_y = 3},/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/captain{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "DS" = (/obj/structure/rack,/obj/item/clothing/suit/armor/bulletproof{pixel_x = -3; pixel_y = 3},/obj/item/clothing/suit/armor/laserproof,/obj/item/clothing/suit/armor/vest{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "DT" = (/obj/mecha/combat/marauder/loaded,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) @@ -1404,7 +1404,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbW aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDvDtDwDxDyDyDyDzDwDuDvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDADBDCDDDEDFDGDHDADuaNaNaNaNaNaNDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIDJDKDKDKDKDKDLDADwDMDwDMDwDMDwDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDODKDPDQDRDKDSDADTDKDUDKDVDWDXDYDADuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDODKDPcQDRDKDSDADTDKDUDKDVDWDXDYDADuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKEaEbEcDKEdDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgEhDKDKDKEhEiDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwDKDKDKDwDwDADKDKDKDKDKDKDKEmDAEnaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 96ff6d7710e..05a929b79c6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -83,10 +83,10 @@ if(new_character.mind) //remove any mind currently in our new body's mind variable new_character.mind.current = null var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list - transfer_antag_huds(hud_to_transfer) //inherit the antag HUD - + leave_all_huds() //leave all the huds in the old body, so it won't get huds if somebody else enters it current = new_character //link ourself to our new body new_character.mind = src //and link our new body to ourself + transfer_antag_huds(hud_to_transfer) //inherit the antag HUD transfer_actions(new_character) if(active) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index c288c09a299..aa104a3d807 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -24,19 +24,28 @@ else return 0 - mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc,var/mob/living/carbon/brain/pilot) - //pilot.regular_hud_updates() - //process_med_hud(pilot, 1) - var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] - A.add_hud_to(pilot) - builtin_hud_user = 1 - return ..() + mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob) + if(..()) + if(occupant.client) + var/datum/atom_hud/A = huds[DATA_HUD_MEDICAL_ADVANCED] + A.add_hud_to(occupant) + builtin_hud_user = 1 + return 1 + else + return 0 go_out() - if((ishuman(occupant) || pilot_is_mmi()) && builtin_hud_user) + if(istype(occupant,/mob/living/carbon/human) && builtin_hud_user) var/mob/living/carbon/human/H = occupant var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED] A.remove_hud_from(H) + builtin_hud_user = 0 + else if ((istype(occupant, /mob/living/carbon/brain) || pilot_is_mmi()) && builtin_hud_user ) + var/mob/living/carbon/brain/H = occupant + var/datum/atom_hud/A = huds[DATA_HUD_MEDICAL_ADVANCED] + A.remove_hud_from(H) + builtin_hud_user = 0 + ..() return diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 559dace0c6d..2c3566c767d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -225,30 +225,6 @@ "Vox" = 'icons/mob/species/vox/eyes.dmi' ) -///DELETE THIS LATER! IT SAVES MAP CODE!///// - -/obj/item/clothing/glasses/sunglasses/sechud - name = "HUDSunglasses" - desc = "Sunglasses with a HUD." - icon_state = "sunhud" - darkness_view = 1 - flash_protect = 1 - tint = 1 - //HUDType = DATA_HUD_SECURITY_BASIC - prescription_upgradable = 1 - species_fit = list("Vox") - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/eyes.dmi' - ) - -/obj/item/clothing/glasses/sunglasses/sechud/prescription - prescription = 1 - -/obj/item/clothing/glasses/sunglasses/sechud/New() - new /obj/item/clothing/glasses/hud/security/sunglasses (loc) - qdel(src) -/////////////// - /obj/item/clothing/glasses/sunglasses/lasers desc = "A peculiar set of sunglasses; they have various chips and other panels attached to the sides of the frames." name = "high-tech sunglasses" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index b945716f2dc..f0bfc6cef28 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -29,16 +29,6 @@ icon_state = "healthhud" HUDType = DATA_HUD_MEDICAL_ADVANCED -///DELETE ME AFTER MAP FREEZE!!!!!!!!/// -/obj/item/clothing/glasses/hud/health_advanced - name = "\improper Advanced Health Scanner HUD" - -/obj/item/clothing/glasses/hud/health_advanced/New() - new /obj/item/clothing/glasses/hud/health/health_advanced (loc) - qdel(src) - -/////!!!!!1111!!!!!!!!///////////////// - /obj/item/clothing/glasses/hud/health/health_advanced name = "\improper Advanced Health Scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. Includes anti-flash filter." diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 2a191c46217..8b277409dd3 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -93,10 +93,4 @@ sight &= ~SEE_OBJS see_in_dark = 2 see_invisible = SEE_INVISIBLE_LIVING - if (container && istype(container, /obj/item/device/mmi)) - var/obj/item/device/mmi/mmi = container - if (mmi.mecha) - var/obj/mecha/piloted = mmi.mecha - piloted.pilot_mmi_hud(src) - handle_hud_icons_health() \ No newline at end of file From 3b603dcade37747b460b70aea0996d5c5170946c Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Fri, 18 Dec 2015 06:30:22 -0500 Subject: [PATCH 21/21] please work? --- _maps/map_files/cyberiad/z2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 09d67befae5..1ad41ccd708 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -144,7 +144,7 @@ "cN" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 11; id = "specops_transit"; name = "specops in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space) "cO" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 12; id = "ferry_transit"; name = "ferry in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space) "cP" = (/obj/docking_port/stationary/transit{dir = 2; dwidth = 3; height = 5; id = "engineering_transit"; name = "engineering in transit"; turf_type = /turf/space/transit/horizontal; width = 7},/turf/space/transit/horizontal,/area/space) -"cQ" = (/obj/structure/rack,/obj/item/clothing/glasses/sunglasses{pixel_x = -3; pixel_y = 3},/obj/item/clothing/glasses/hud/health/health_advanced{step_y = 0},/obj/item/clothing/glasses/hud/security/sunglasses,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) +"cQ" = (/obj/structure/rack,/obj/item/clothing/glasses/sunglasses{pixel_x = -3; pixel_y = 3},/obj/item/clothing/glasses/hud/health/health_advanced,/obj/item/clothing/glasses/hud/security/sunglasses,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "cR" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/wall,/area/prison/solitary) "cS" = (/obj/structure/stool/bed,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary) "cT" = (/turf/unsimulated/floor{icon_state = "platingdmg3"},/area/prison/solitary)