From 37f0239e8807e4f6089caf0820a0382ef6c45885 Mon Sep 17 00:00:00 2001 From: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:14:29 +0200 Subject: [PATCH 1/4] mostly ported, just gotta move the icon files over --- .../lavaland_surface_syndicate_base1.dmm | 2 +- _maps/map_files/Blueshift/Blueshift.dmm | 2 +- _maps/map_files/BoxStation/BoxStation.dmm | 4 +- .../map_files/Deltastation/DeltaStation2.dmm | 2 +- _maps/map_files/Graveyard/Graveyard.dmm | 6 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 2 +- _maps/map_files/MetaStation/MetaStation.dmm | 6 +- _maps/map_files/Ouroboros/Ouroboros.dmm | 2 +- _maps/map_files/Theseus/Theseus.dmm | 6 +- _maps/map_files/Voidraptor/VoidRaptor.dmm | 6 +- _maps/map_files/generic/CentCom.dmm | 2 +- _maps/map_files/tramstation/tramstation.dmm | 4 +- _maps/templates/lazy_templates/nukie_base.dmm | 2 +- .../traits/monkestation/declarations.dm | 2 + code/_globalvars/traits/_traits.dm | 1 + code/datums/id_trim/jobs.dm | 1 + code/modules/jobs/job_types/virologist.dm | 2 + code/modules/mob/dead/observer/observer.dm | 17 +++ code/modules/research/techweb/all_nodes.dm | 2 + .../code/datums/actions/items/toggles.dm | 2 + .../datums/components/crafting/tailoring.dm | 20 +++ .../datums/components/pathology_glasses.dm | 118 ++++++++++++++++++ .../code/datums/elements/virus_viewer.dm | 56 +++++++++ .../code/modules/client/client_colour.dm | 3 + .../code/modules/clothing/glasses/glasses.dm | 2 +- .../code/modules/mob/living/init_signals.dm | 11 ++ .../research/designs/medical_designs.dm | 20 +++ .../disease/base_disease_folder/_base.dm | 2 +- .../disease/base_disease_folder/admin.dm | 15 ++- .../base_disease_folder/general_procs.dm | 6 +- .../modules/virology/effects/cleanables.dm | 2 +- .../virology/effects/pathogen_cloud.dm | 6 +- .../virology/items/_base_item_additions.dm | 4 +- .../virology/items/pathology_glasses.dm | 48 +++++++ .../modules/virology/items/science_goggles.dm | 52 -------- tgstation.dme | 6 +- 36 files changed, 352 insertions(+), 92 deletions(-) create mode 100644 monkestation/code/datums/actions/items/toggles.dm create mode 100644 monkestation/code/datums/components/crafting/tailoring.dm create mode 100644 monkestation/code/datums/components/pathology_glasses.dm create mode 100644 monkestation/code/datums/elements/virus_viewer.dm create mode 100644 monkestation/code/modules/virology/items/pathology_glasses.dm delete mode 100644 monkestation/code/modules/virology/items/science_goggles.dm diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 56089d6fcc33..4682296718ca 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -2359,7 +2359,7 @@ /obj/item/pen/red, /obj/item/hand_labeler, /obj/item/restraints/handcuffs, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/storage/box/monkeycubes/mousecubes, /obj/item/storage/box/monkeycubes/mousecubes, /turf/open/floor/iron/white/side{ diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm index a95cb5b9546a..259a6ff10e60 100644 --- a/_maps/map_files/Blueshift/Blueshift.dmm +++ b/_maps/map_files/Blueshift/Blueshift.dmm @@ -27002,7 +27002,7 @@ /obj/item/clothing/gloves/latex, /obj/item/healthanalyzer, /obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/machinery/light_switch/directional/south, /obj/structure/cable, /obj/structure/disposalpipe/segment{ diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 68e4b5935c3f..9b178c2290a2 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -20407,7 +20407,7 @@ /obj/item/hand_labeler, /obj/item/reagent_containers/spray/cleaner, /obj/item/radio/headset/headset_med, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/extrapolator, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, @@ -68395,7 +68395,7 @@ /obj/item/hand_labeler, /obj/item/reagent_containers/spray/cleaner, /obj/item/radio/headset/headset_med, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/extrapolator, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index b231ec1a3dd2..44774c832567 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -74688,7 +74688,7 @@ pixel_y = 3 }, /obj/item/clothing/gloves/latex, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/glasses/hud/health, /obj/item/device/antibody_scanner, /obj/item/device/antibody_scanner, diff --git a/_maps/map_files/Graveyard/Graveyard.dmm b/_maps/map_files/Graveyard/Graveyard.dmm index 656dc0e33c9a..b1265769e82c 100644 --- a/_maps/map_files/Graveyard/Graveyard.dmm +++ b/_maps/map_files/Graveyard/Graveyard.dmm @@ -9706,9 +9706,9 @@ /area/graveyard/bunker/science) "dIY" = ( /obj/machinery/light/directional/west, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 9553433c5639..9e67abc05362 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -36651,7 +36651,7 @@ /obj/structure/extinguisher_cabinet/directional/south, /obj/machinery/light/directional/south, /obj/structure/table/glass, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/glasses/hud/health, /obj/item/healthanalyzer, /obj/item/clothing/gloves/latex, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index f8ceb07fca11..505142e5158e 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -32389,9 +32389,9 @@ /obj/structure/closet/secure_closet/wall/directional/west{ name = "Pathologist Equipment" }, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, diff --git a/_maps/map_files/Ouroboros/Ouroboros.dmm b/_maps/map_files/Ouroboros/Ouroboros.dmm index 3bab030d28a3..b107ffb44928 100644 --- a/_maps/map_files/Ouroboros/Ouroboros.dmm +++ b/_maps/map_files/Ouroboros/Ouroboros.dmm @@ -24313,7 +24313,7 @@ /obj/effect/turf_decal/bot, /obj/structure/table/glass, /obj/item/clothing/gloves/latex, -/obj/item/clothing/glasses/science{ +/obj/item/clothing/glasses/pathology{ pixel_y = 6 }, /obj/item/clothing/glasses/hud/health, diff --git a/_maps/map_files/Theseus/Theseus.dmm b/_maps/map_files/Theseus/Theseus.dmm index 903ce6488894..02d231f3fb6a 100644 --- a/_maps/map_files/Theseus/Theseus.dmm +++ b/_maps/map_files/Theseus/Theseus.dmm @@ -73219,9 +73219,9 @@ /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 1 diff --git a/_maps/map_files/Voidraptor/VoidRaptor.dmm b/_maps/map_files/Voidraptor/VoidRaptor.dmm index ba8ab83de824..525134a9b6b2 100644 --- a/_maps/map_files/Voidraptor/VoidRaptor.dmm +++ b/_maps/map_files/Voidraptor/VoidRaptor.dmm @@ -5058,9 +5058,9 @@ /obj/structure/closet/secure_closet/wall/directional/west{ name = "Pathologist Equipment" }, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, /obj/item/clothing/gloves/latex, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index e1bdfecb4bbb..b3719521cab9 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -8059,7 +8059,7 @@ pixel_y = 3 }, /obj/item/plant_analyzer, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/reagent_containers/spray/chemsprayer/bioterror{ pixel_x = -6; pixel_y = 10 diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index e3e238f4627c..666122d8bfb5 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -47314,8 +47314,8 @@ /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/cup/tube, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, +/obj/item/clothing/glasses/pathology, /obj/item/clothing/glasses/hud/health, /obj/item/reagent_containers/syringe/antiviral, /obj/item/reagent_containers/syringe/antiviral, diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index 6e25c3477759..29cfa208b8d0 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -1746,7 +1746,7 @@ pixel_y = 3 }, /obj/item/plant_analyzer, -/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/pathology, /obj/item/reagent_containers/spray/chemsprayer/bioterror{ pixel_x = -6; pixel_y = 10 diff --git a/code/__DEFINES/traits/monkestation/declarations.dm b/code/__DEFINES/traits/monkestation/declarations.dm index 29777a2e6fbc..19aaa6a90dea 100644 --- a/code/__DEFINES/traits/monkestation/declarations.dm +++ b/code/__DEFINES/traits/monkestation/declarations.dm @@ -123,6 +123,8 @@ #define TRAIT_TRASH_ITEM "trash_item" /// This item came from a gift. #define TRAIT_GIFT_ITEM "gift_item" +/// The mob can see pathogen clouds and such. +#define TRAIT_VIRUS_SCANNER "virus_scanner" // /atom/movable /// Things with this trait can pass through wooden barricades. diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index c598bf6b2eeb..c61c556f738d 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -510,6 +510,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, + "TRAIT_VIRUS_SCANNER" = TRAIT_VIRUS_SCANNER, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, "TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED, "TRAIT_WATER_BREATHING" = TRAIT_WATER_BREATHING, diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 460000a14994..5f93dc054877 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -364,6 +364,7 @@ ACCESS_RC_ANNOUNCE, ACCESS_SURGERY, ACCESS_VIROLOGY, + ACCESS_PHARMACY, // MONKESTATION EDIT: Pathologists now have access to pharmacy due to their need for chems. Hopefully doesn't get abused too much and MDs have this too. ) minimal_wildcard_access = list( ACCESS_CMO, diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 5ea786330b18..fa32804d08f2 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -69,3 +69,5 @@ duffelbag = /obj/item/storage/backpack/duffelbag/virology box = /obj/item/storage/box/survival/medical + + glasses = /obj/item/clothing/glasses/pathology //monkestation edit diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 8bebfd4241b9..fb2a775194e4 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -34,6 +34,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/ghostvision = 1 //is the ghost able to see things humans can't? var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() var/data_huds_on = 0 //Are data HUDs currently enabled? + var/disease_view = FALSE //Is disease view currently enabled? (Init signals is on living and I'm not poking that bear.) MONKESTATION EDIT var/health_scan = FALSE //Are health scans currently enabled? var/chem_scan = FALSE //Are chem scans currently enabled? var/gas_scan = FALSE //Are gas scans currently enabled? @@ -784,6 +785,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, span_notice("Data HUDs enabled.")) data_huds_on = 1 +// MONKESTATION ADDITION START +/mob/dead/observer/verb/toggle_disease_view() + set name = "Toggle Disease View" + set desc = "Toggles whether you see disease infection vectors. (dormant, blood, contact and airborne)" + set category = "Ghost" + + if(disease_view) + RemoveElement(/datum/element/virus_viewer) + to_chat(src, span_notice("Disease view disabled.")) + else + AddElement(/datum/element/virus_viewer) + to_chat(src, span_notice("Disease view enabled.")) + + disease_view = !disease_view +// MONKESTATION ADDITION END + /mob/dead/observer/verb/toggle_health_scan() set name = "Toggle Health Scan" set desc = "Toggles whether you health-scan living beings on click" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index eec721008d09..47b6ec03a2ed 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1295,6 +1295,7 @@ "diagnostic_hud", "health_hud", "scigoggles", + "pathology_goggles", // monkestation edit "security_hud", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) @@ -1310,6 +1311,7 @@ "night_visision_goggles", "nvgmesons", "nv_scigoggles", + "nv_pathology_goggles", // monkestation edit "security_hud_night", "mech_light_amplification", ) diff --git a/monkestation/code/datums/actions/items/toggles.dm b/monkestation/code/datums/actions/items/toggles.dm new file mode 100644 index 000000000000..b32feb2d3eed --- /dev/null +++ b/monkestation/code/datums/actions/items/toggles.dm @@ -0,0 +1,2 @@ +/datum/action/item_action/toggle_virus_view + name = "Toggle Viral Analyzer" diff --git a/monkestation/code/datums/components/crafting/tailoring.dm b/monkestation/code/datums/components/crafting/tailoring.dm new file mode 100644 index 000000000000..c2da4cd7526c --- /dev/null +++ b/monkestation/code/datums/components/crafting/tailoring.dm @@ -0,0 +1,20 @@ + +/datum/crafting_recipe/virus_analyzer_glasses + name = "Viral Analyzer Glasses" + result = /obj/item/clothing/glasses/sunglasses/pathology + time = 2 SECONDS + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + reqs = list( + /obj/item/clothing/glasses/pathology = 1, + /obj/item/clothing/glasses/sunglasses = 1, + /obj/item/stack/cable_coil = 5 + ) + category = CAT_EQUIPMENT + +/datum/crafting_recipe/virus_analyzer_removal + name = "Viral Analyzer removal" + result = /obj/item/clothing/glasses/sunglasses + time = 2 SECONDS + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + reqs = list(/obj/item/clothing/glasses/sunglasses/pathology = 1) + category = CAT_EQUIPMENT diff --git a/monkestation/code/datums/components/pathology_glasses.dm b/monkestation/code/datums/components/pathology_glasses.dm new file mode 100644 index 000000000000..c30ba653337a --- /dev/null +++ b/monkestation/code/datums/components/pathology_glasses.dm @@ -0,0 +1,118 @@ +// This is a component for glasses that makes them able to see pathogens and also toggle viewing them. +// Mainly used by "viral analyzer goggles", "viral analyzer glasses" and "night vision viral analyzer goggles", but works with any type of glasses. + +/datum/component/pathology_glasses + var/icon_state_on = null + var/icon_state_off = null + + var/worn_icon_state_on = null + var/worn_icon_state_off = null + + var/glass_color_type_on = /datum/client_colour/glass_colour/lightgreen + var/glass_color_type_off = /datum/client_colour/glass_colour/lightpurple + var/use_glass_color = FALSE + + var/color_cutoffs_on = null + var/color_cutoffs_off = null + var/use_color_cutoffs = FALSE + + var/enabled = TRUE + + var/action = /datum/action/item_action/toggle_virus_view + +/datum/component/pathology_glasses/Initialize(icon_state_on, icon_state_off, worn_icon_state_on = icon_state_on, worn_icon_state_off = icon_state_off, glass_color_type_on, glass_color_type_off, use_glass_color = FALSE, color_cutoffs_on, color_cutoffs_off, use_color_cutoffs = FALSE) + var/obj/item/clothing/glasses/glasses = parent + + if(!istype(glasses)) + return COMPONENT_INCOMPATIBLE + + src.icon_state_on = icon_state_on + src.icon_state_off = icon_state_off + src.worn_icon_state_on = worn_icon_state_on + src.worn_icon_state_off = worn_icon_state_off + src.use_glass_color = use_glass_color + src.use_color_cutoffs = use_color_cutoffs + + if(use_glass_color) + src.glass_color_type_on ||= glass_color_type_on + src.glass_color_type_off ||= glass_color_type_off + glasses.glass_colour_type = glass_color_type_on + + if(use_color_cutoffs) + src.color_cutoffs_on = color_cutoffs_on + src.color_cutoffs_off = color_cutoffs_off + glasses.color_cutoffs = color_cutoffs_on + + action = glasses.add_item_action(action) // Doing it after setting the icon state vars makes sure the item action has the correct sprite. + +/datum/component/pathology_glasses/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_UI_ACTION_CLICK, PROC_REF(on_action_click)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + +/datum/component/pathology_glasses/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_UI_ACTION_CLICK, COMSIG_ITEM_EQUIPPED)) + +/datum/component/pathology_glasses/proc/on_action_click(datum/source, mob/living/user, datum/action/action) + SIGNAL_HANDLER + + if(src.action != action) + return + + if(enabled) + disable(user) + else + enable(user) + +/datum/component/pathology_glasses/proc/on_equipped(datum/source, mob/living/user, slot) + SIGNAL_HANDLER + + if(!(slot & ITEM_SLOT_EYES)) + return + + if(enabled) + ADD_CLOTHING_TRAIT(user, TRAIT_VIRUS_SCANNER) + + RegisterSignal(user, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(on_item_unequipped)) + +/datum/component/pathology_glasses/proc/on_item_unequipped(mob/living/user, obj/item/item) + SIGNAL_HANDLER + + if(item != parent) + return + + if(enabled) + REMOVE_CLOTHING_TRAIT(user, TRAIT_VIRUS_SCANNER) + + UnregisterSignal(user, COMSIG_MOB_UNEQUIPPED_ITEM) + +/datum/component/pathology_glasses/proc/enable(mob/living/user) + enabled = TRUE + update_icon_states(user) + + ADD_CLOTHING_TRAIT(user, TRAIT_VIRUS_SCANNER) + + playsound(get_turf(parent), 'sound/machines/click.ogg', vol = 30, vary = TRUE) + +/datum/component/pathology_glasses/proc/disable(mob/living/user) + enabled = FALSE + update_icon_states(user) + + REMOVE_CLOTHING_TRAIT(user, TRAIT_VIRUS_SCANNER) + + playsound(get_turf(parent), 'sound/machines/click.ogg', vol = 30, vary = TRUE) + +/datum/component/pathology_glasses/proc/update_icon_states(mob/living/user) + var/obj/item/clothing/glasses/glasses = parent + + glasses.icon_state = enabled ? icon_state_on : icon_state_off + glasses.worn_icon_state = enabled ? worn_icon_state_on : worn_icon_state_off + + if(use_glass_color) + glasses.change_glass_color(user, enabled ? glass_color_type_on : glass_color_type_off) + + if(use_color_cutoffs) + glasses.color_cutoffs = enabled ? color_cutoffs_on : color_cutoffs_off + user.update_sight() + + user.update_worn_glasses() + glasses.update_item_action_buttons() diff --git a/monkestation/code/datums/elements/virus_viewer.dm b/monkestation/code/datums/elements/virus_viewer.dm new file mode 100644 index 000000000000..9c35d95747c0 --- /dev/null +++ b/monkestation/code/datums/elements/virus_viewer.dm @@ -0,0 +1,56 @@ +/datum/element/virus_viewer + +/datum/element/virus_viewer/Attach(mob/user) + . = ..() + if(!ismob(user)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(enable_virus_view)) + RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(disable_virus_view)) + + enable_virus_view(user) + +/datum/element/virus_viewer/Detach(mob/user) + . = ..() + + UnregisterSignal(user, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT)) + + disable_virus_view(user) + +/datum/element/virus_viewer/proc/enable_virus_view(mob/user) + SIGNAL_HANDLER + + if(!user.client) + return + + GLOB.virus_viewers += user + + for(var/obj/item/item in GLOB.infected_items) + if(item.pathogen) + user.client.images |= item.pathogen + for(var/mob/living/living_mob in GLOB.infected_contact_mobs) + if(living_mob.pathogen) + user.client.images |= living_mob.pathogen + for(var/obj/effect/pathogen_cloud/cloud as anything in GLOB.pathogen_clouds) + if(cloud.pathogen) + user.client.images |= cloud.pathogen + for(var/obj/effect/decal/cleanable/cleanable in GLOB.infected_cleanables) + if(cleanable.pathogen) + user.client.images |= cleanable.pathogen + +/datum/element/virus_viewer/proc/disable_virus_view(mob/user) + SIGNAL_HANDLER + + GLOB.virus_viewers -= user // Even if the user doesn't have a client anymore we need to make sure they're out of the list. + + if(!user.client) + return + + for(var/obj/item/item in GLOB.infected_items) + user.client.images -= item.pathogen + for(var/mob/living/living_mob in GLOB.infected_contact_mobs) + user.client.images -= living_mob.pathogen + for(var/obj/effect/pathogen_cloud/cloud as anything in GLOB.pathogen_clouds) + user.client.images -= cloud.pathogen + for(var/obj/effect/decal/cleanable/cleanable in GLOB.infected_cleanables) + user.client.images -= cleanable.pathogen diff --git a/monkestation/code/modules/client/client_colour.dm b/monkestation/code/modules/client/client_colour.dm index 270965492b61..1603c293d39d 100644 --- a/monkestation/code/modules/client/client_colour.dm +++ b/monkestation/code/modules/client/client_colour.dm @@ -14,6 +14,9 @@ fade_in = 0.5 SECONDS fade_out = 0.5 SECONDS +/datum/client_colour/glass_colour/lightpurple + colour = "#ffccff" + #undef PRIORITY_ABSOLUTE #undef PRIORITY_HIGH #undef PRIORITY_NORMAL diff --git a/monkestation/code/modules/clothing/glasses/glasses.dm b/monkestation/code/modules/clothing/glasses/glasses.dm index e989aa924148..f3616c3984d0 100644 --- a/monkestation/code/modules/clothing/glasses/glasses.dm +++ b/monkestation/code/modules/clothing/glasses/glasses.dm @@ -1,6 +1,6 @@ /obj/item/clothing/glasses/crueltysquad_glasses name = "CS inactive vision augmenter" - desc = "a pair of glasses usually designed to identify targets for execution, although this mechanic has been removed for civilian casual use." + desc = "A pair of glasses usually designed to identify targets for execution, although this mechanic has been removed for civilian casual use." icon = 'monkestation/icons/obj/clothing/glasses.dmi' worn_icon = 'monkestation/icons/obj/clothing/eyes.dmi' icon_state = "crueltysquad_glasses" diff --git a/monkestation/code/modules/mob/living/init_signals.dm b/monkestation/code/modules/mob/living/init_signals.dm index e014df6bb2e3..0b95d6359236 100644 --- a/monkestation/code/modules/mob/living/init_signals.dm +++ b/monkestation/code/modules/mob/living/init_signals.dm @@ -9,6 +9,9 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_CLOWN_DISBELIEVER), PROC_REF(on_clown_disbeliever_trait_gain)) RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_CLOWN_DISBELIEVER), PROC_REF(on_clown_disbeliever_trait_loss)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_VIRUS_SCANNER), PROC_REF(on_virus_scanner_trait_gain)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_VIRUS_SCANNER), PROC_REF(on_virus_scanner_trait_loss)) + /mob/living/proc/on_ignoredamageslowdown_trait_gain(datum/source) SIGNAL_HANDLER add_movespeed_mod_immunities(TRAIT_IGNOREDAMAGESLOWDOWN, /datum/movespeed_modifier/damage_slowdown) @@ -35,3 +38,11 @@ SIGNAL_HANDLER for(var/datum/atom_hud/alternate_appearance/basic/clown_disbelief/clown_to_hide in GLOB.active_alternate_appearances) clown_to_hide.hide_from(src) + +/mob/living/proc/on_virus_scanner_trait_gain(datum/source) + SIGNAL_HANDLER + AddElement(/datum/element/virus_viewer) + +/mob/living/proc/on_virus_scanner_trait_loss(datum/source) + SIGNAL_HANDLER + RemoveElement(/datum/element/virus_viewer) diff --git a/monkestation/code/modules/research/designs/medical_designs.dm b/monkestation/code/modules/research/designs/medical_designs.dm index 38564ed4f046..e564b8888907 100644 --- a/monkestation/code/modules/research/designs/medical_designs.dm +++ b/monkestation/code/modules/research/designs/medical_designs.dm @@ -92,3 +92,23 @@ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/pathology_goggles + name = "Viral Analyzer Goggles" + desc = "A pair of goggles fitted with an analyzer for viral particles and reagents." + id = "pathology_goggles" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) + build_path = /obj/item/clothing/glasses/pathology + category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/nv_pathology_goggles + name = "Night Vision Viral Analyzer Goggles" + desc = "A pair of night vision goggles fitted with an analyzer for viral particles and reagents." + id = "nv_pathology_goggles" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/titanium = 350) + build_path = /obj/item/clothing/glasses/night/pathology + category = list(RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL diff --git a/monkestation/code/modules/virology/disease/base_disease_folder/_base.dm b/monkestation/code/modules/virology/disease/base_disease_folder/_base.dm index a2cf174a2509..0f8a9f000189 100644 --- a/monkestation/code/modules/virology/disease/base_disease_folder/_base.dm +++ b/monkestation/code/modules/virology/disease/base_disease_folder/_base.dm @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(virusDB, list()) if(!length(pathogen_info)) GLOB.infected_contact_mobs -= affected_mob if(affected_mob.pathogen) - for(var/mob/living/goggle_wearer in GLOB.science_goggles_wearers) + for(var/mob/living/goggle_wearer in GLOB.virus_viewers) goggle_wearer.client?.images -= affected_mob.pathogen // Add resistance by boosting whichever antigen is needed diff --git a/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm b/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm index a27769533615..876d86b904eb 100644 --- a/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm +++ b/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm @@ -166,17 +166,22 @@ /client/proc/disease_view() set category = "Admin.Debug" set name = "Disease View" - set desc = "See viro Overlay" + set desc = "See disease visuals" if(!holder) return if(!mob) return - if(mob.disease_view) - mob.stopvirusView() + if(isobserver(mob)) + var/mob/dead/observer/observer = mob + observer.toggle_disease_view() // The trait doesn't work if you're an observer, so this redirects the call to the observer verb. + return + if(HAS_TRAIT_FROM(mob, TRAIT_VIRUS_SCANNER, ADMIN_TRAIT)) + REMOVE_TRAIT(mob, TRAIT_VIRUS_SCANNER, ADMIN_TRAIT) + to_chat(mob, span_notice("Admin disease view disabled.")) else - mob.virusView() - mob.disease_view = !mob.disease_view + ADD_TRAIT(mob, TRAIT_VIRUS_SCANNER, ADMIN_TRAIT) + to_chat(mob, span_notice("Admin disease view enabled.")) /client/proc/diseases_panel() set category = "Admin.Logging" diff --git a/monkestation/code/modules/virology/disease/base_disease_folder/general_procs.dm b/monkestation/code/modules/virology/disease/base_disease_folder/general_procs.dm index f96eb0ed2a0c..46a01d0a964a 100644 --- a/monkestation/code/modules/virology/disease/base_disease_folder/general_procs.dm +++ b/monkestation/code/modules/virology/disease/base_disease_folder/general_procs.dm @@ -79,7 +79,7 @@ infectedMob.pathogen = image('monkestation/code/modules/virology/icons/effects.dmi',infectedMob,"pathogen_contact") infectedMob.pathogen.plane = HUD_PLANE infectedMob.pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/living/L in GLOB.science_goggles_wearers) + for (var/mob/living/L in GLOB.virus_viewers) if (L.client) L.client.images |= infectedMob.pathogen return @@ -90,7 +90,7 @@ infectedMob.pathogen = image('monkestation/code/modules/virology/icons/effects.dmi',infectedMob,"pathogen_blood") infectedMob.pathogen.plane = HUD_PLANE infectedMob.pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/living/L in GLOB.science_goggles_wearers) + for (var/mob/living/L in GLOB.virus_viewers) if (L.client) L.client.images |= infectedMob.pathogen return @@ -101,7 +101,7 @@ infectedMob.pathogen = image('monkestation/code/modules/virology/icons/effects.dmi',infectedMob,"pathogen_blood-old2") infectedMob.pathogen.plane = HUD_PLANE infectedMob.pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/living/L in GLOB.science_goggles_wearers) + for (var/mob/living/L in GLOB.virus_viewers) if (L.client) L.client.images |= infectedMob.pathogen return diff --git a/monkestation/code/modules/virology/effects/cleanables.dm b/monkestation/code/modules/virology/effects/cleanables.dm index 881057a3ea51..cf59f1c84750 100644 --- a/monkestation/code/modules/virology/effects/cleanables.dm +++ b/monkestation/code/modules/virology/effects/cleanables.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_INIT(infected_cleanables, list()) pathogen = image('monkestation/code/modules/virology/icons/effects.dmi',src,"pathogen_blood") pathogen.plane = HUD_PLANE pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/L in GLOB.science_goggles_wearers) + for (var/mob/L in GLOB.virus_viewers) if (L.client) L.client.images |= pathogen diff --git a/monkestation/code/modules/virology/effects/pathogen_cloud.dm b/monkestation/code/modules/virology/effects/pathogen_cloud.dm index 7f0228a7636f..b4a1eb5e13b7 100644 --- a/monkestation/code/modules/virology/effects/pathogen_cloud.dm +++ b/monkestation/code/modules/virology/effects/pathogen_cloud.dm @@ -1,5 +1,5 @@ GLOBAL_LIST_INIT(pathogen_clouds, list()) -GLOBAL_LIST_INIT(science_goggles_wearers, list()) +GLOBAL_LIST_INIT(virus_viewers, list()) /obj/effect/pathogen_cloud name = "" @@ -55,7 +55,7 @@ GLOBAL_LIST_INIT(science_goggles_wearers, list()) pathogen = image('monkestation/code/modules/virology/icons/96x96.dmi',src,"pathogen_airborne") pathogen.plane = HUD_PLANE pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/living/wearer as anything in GLOB.science_goggles_wearers) + for (var/mob/living/wearer as anything in GLOB.virus_viewers) if(QDELETED(wearer) || QDELETED(wearer.client)) continue wearer.client.images |= pathogen @@ -86,7 +86,7 @@ GLOBAL_LIST_INIT(science_goggles_wearers, list()) SSpathogen_clouds.current_run_clouds -= src if (pathogen) - for (var/mob/living/wearer as anything in GLOB.science_goggles_wearers) + for (var/mob/living/wearer as anything in GLOB.virus_viewers) if(QDELETED(wearer) || QDELETED(wearer.client)) continue wearer.client.images -= pathogen diff --git a/monkestation/code/modules/virology/items/_base_item_additions.dm b/monkestation/code/modules/virology/items/_base_item_additions.dm index 01cc72325222..827e4366161f 100644 --- a/monkestation/code/modules/virology/items/_base_item_additions.dm +++ b/monkestation/code/modules/virology/items/_base_item_additions.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(infected_items, list()) pathogen = image('monkestation/code/modules/virology/icons/effects.dmi', src, "pathogen_contact") pathogen.plane = HUD_PLANE pathogen.appearance_flags = RESET_COLOR|RESET_ALPHA - for (var/mob/L in GLOB.science_goggles_wearers) + for (var/mob/L in GLOB.virus_viewers) if (L.client) L.client.images |= pathogen if (decay) @@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(infected_items, list()) if(!length(viruses)) GLOB.infected_items -= src if (pathogen) - for (var/mob/L in GLOB.science_goggles_wearers) + for (var/mob/L in GLOB.virus_viewers) if(L.client) L.client.images -= pathogen diff --git a/monkestation/code/modules/virology/items/pathology_glasses.dm b/monkestation/code/modules/virology/items/pathology_glasses.dm new file mode 100644 index 000000000000..6732091b237d --- /dev/null +++ b/monkestation/code/modules/virology/items/pathology_glasses.dm @@ -0,0 +1,48 @@ +/obj/item/clothing/glasses/pathology + name = "viral analyzer goggles" + desc = "A pair of goggles fitted with an analyzer for viral particles and reagents. Comes with a handy toggle for avoiding visual overload." + + icon = 'monkestation/icons/obj/clothing/glasses.dmi' + worn_icon = 'monkestation/icons/obj/clothing/eyes.dmi' + icon_state = "pathology_on" + worn_icon_state = "pathology_on" + + clothing_traits = list(TRAIT_REAGENT_SCANNER) + +/obj/item/clothing/glasses/pathology/Initialize(mapload) + . = ..() + AddComponent(/datum/component/pathology_glasses, icon_state_on = "pathology_on", icon_state_off = "pathology_off", use_glass_color = TRUE) + +/obj/item/clothing/glasses/sunglasses/pathology + name = "viral analyzer glasses" + desc = "A pair of sunglasses fitted with an analyzer for viral particles and reagents. Comes with a handy toggle for avoiding visual overload." + + icon = 'monkestation/icons/obj/clothing/glasses.dmi' + worn_icon = 'monkestation/icons/obj/clothing/eyes.dmi' + icon_state = "sunhudpatho_on" + worn_icon_state = "sunhudpatho_on" + +/obj/item/clothing/glasses/sunglasses/pathology/Initialize(mapload) + . = ..() + AddComponent(/datum/component/pathology_glasses, icon_state_on = "sunhudpatho_on", icon_state_off = "sunhudpatho_off") + +/obj/item/clothing/glasses/night/pathology + name = "night vision viral analyzer goggles" + desc = "A pair of night vision goggles fitted with an analyzer for viral particles and reagents. Comes with a handy toggle for avoiding visual overload." + + icon = 'monkestation/icons/obj/clothing/glasses.dmi' + worn_icon = 'monkestation/icons/obj/clothing/eyes.dmi' + icon_state = "pathohudnight_on" + worn_icon_state = "pathohudnight_on" + +/obj/item/clothing/glasses/night/pathology/Initialize(mapload) + . = ..() + AddComponent( \ + /datum/component/pathology_glasses, \ + icon_state_on = "pathohudnight_on", \ + icon_state_off = "pathohudnight_off", \ + use_glass_color = TRUE, \ + color_cutoffs_on = list(20, 30, 20), \ + color_cutoffs_off = list(30, 20, 30), \ + use_color_cutoffs = TRUE, \ + ) diff --git a/monkestation/code/modules/virology/items/science_goggles.dm b/monkestation/code/modules/virology/items/science_goggles.dm deleted file mode 100644 index bd0fce71843f..000000000000 --- a/monkestation/code/modules/virology/items/science_goggles.dm +++ /dev/null @@ -1,52 +0,0 @@ -/obj/item/clothing/glasses/science/proc/enable(mob/M) - M.virusView() - -/obj/item/clothing/glasses/science/proc/disable(mob/M) - M.stopvirusView() - -/obj/item/clothing/glasses/science/equipped(mob/M, slot) - ..() - if(slot != ITEM_SLOT_EYES) - return - enable(M) - RegisterSignal(M, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(clear_effects)) - -/obj/item/clothing/glasses/science/proc/clear_effects(mob/living/source, obj/item/dropped_item) - SIGNAL_HANDLER - if(dropped_item != src) - return - - if (!source.client) - return - disable(source) - UnregisterSignal(source, list(COMSIG_MOB_UNEQUIPPED_ITEM)) - -/mob/proc/virusView() - if(!client) - return - GLOB.science_goggles_wearers.Add(src) - for (var/obj/item/I in GLOB.infected_items) - if (I.pathogen) - client.images |= I.pathogen - for (var/mob/living/L in GLOB.infected_contact_mobs) - if (L.pathogen) - client.images |= L.pathogen - for (var/obj/effect/pathogen_cloud/C as anything in GLOB.pathogen_clouds) - if (C.pathogen) - client.images |= C.pathogen - for (var/obj/effect/decal/cleanable/C in GLOB.infected_cleanables) - if (C.pathogen) - client.images |= C.pathogen - -/mob/proc/stopvirusView() - if(!client) - return - GLOB.science_goggles_wearers.Remove(src) - for (var/obj/item/I in GLOB.infected_items) - client.images -= I.pathogen - for (var/mob/living/L in GLOB.infected_contact_mobs) - client.images -= L.pathogen - for(var/obj/effect/pathogen_cloud/C as anything in GLOB.pathogen_clouds) - client.images -= C.pathogen - for (var/obj/effect/decal/cleanable/C in GLOB.infected_cleanables) - client.images -= C.pathogen diff --git a/tgstation.dme b/tgstation.dme index 20c3939cd87b..578049b28c72 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5949,6 +5949,7 @@ #include "monkestation\code\datums\stamina_container.dm" #include "monkestation\code\datums\twitch_data.dm" #include "monkestation\code\datums\achievements\misc_achievements.dm" +#include "monkestation\code\datums\actions\items\toggles.dm" #include "monkestation\code\datums\actions\mobs\assume_form.dm" #include "monkestation\code\datums\ai\idle_behaviors\idle_dukeman.dm" #include "monkestation\code\datums\ai\monkey\dukeman_controller.dm" @@ -5972,6 +5973,7 @@ #include "monkestation\code\datums\components\irradiated.dm" #include "monkestation\code\datums\components\lock_on_cursor.dm" #include "monkestation\code\datums\components\multi_hit.dm" +#include "monkestation\code\datums\components\pathology_glasses.dm" #include "monkestation\code\datums\components\pixel_shift.dm" #include "monkestation\code\datums\components\throw_bounce.dm" #include "monkestation\code\datums\components\turf_checker_complex.dm" @@ -5979,6 +5981,7 @@ #include "monkestation\code\datums\components\uplink.dm" #include "monkestation\code\datums\components\wound_converter.dm" #include "monkestation\code\datums\components\crafting\robot.dm" +#include "monkestation\code\datums\components\crafting\tailoring.dm" #include "monkestation\code\datums\components\riding\riding_mob.dm" #include "monkestation\code\datums\components\riding\riding_vehicle.dm" #include "monkestation\code\datums\diseases\advance\symptoms\clockwork.dm" @@ -5988,6 +5991,7 @@ #include "monkestation\code\datums\elements\loomable.dm" #include "monkestation\code\datums\elements\trash_if_empty.dm" #include "monkestation\code\datums\elements\uncompressed_storage.dm" +#include "monkestation\code\datums\elements\virus_viewer.dm" #include "monkestation\code\datums\ert\moff_inspectors.dm" #include "monkestation\code\datums\id_trim\jobs.dm" #include "monkestation\code\datums\id_trim\outfits.dm" @@ -8540,7 +8544,7 @@ #include "monkestation\code\modules\virology\items\disease_disk.dm" #include "monkestation\code\modules\virology\items\extrapolator.dm" #include "monkestation\code\modules\virology\items\mousecubes.dm" -#include "monkestation\code\modules\virology\items\science_goggles.dm" +#include "monkestation\code\modules\virology\items\pathology_glasses.dm" #include "monkestation\code\modules\virology\items\vials.dm" #include "monkestation\code\modules\virology\items\virusdish.dm" #include "monkestation\code\modules\virology\items\clothing\mask.dm" From eaa1e46b7337e64b5322a8d302348427296c9e89 Mon Sep 17 00:00:00 2001 From: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:54:27 +0200 Subject: [PATCH 2/4] done --- .../disease/base_disease_folder/admin.dm | 1 - monkestation/icons/obj/clothing/eyes.dmi | Bin 473 -> 1700 bytes monkestation/icons/obj/clothing/glasses.dmi | Bin 1002 -> 1930 bytes 3 files changed, 1 deletion(-) diff --git a/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm b/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm index 876d86b904eb..9ac13074b65f 100644 --- a/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm +++ b/monkestation/code/modules/virology/disease/base_disease_folder/admin.dm @@ -162,7 +162,6 @@ return 1 -/mob/var/disease_view = FALSE /client/proc/disease_view() set category = "Admin.Debug" set name = "Disease View" diff --git a/monkestation/icons/obj/clothing/eyes.dmi b/monkestation/icons/obj/clothing/eyes.dmi index dd404ec95c06f87e1fd783ef50f3fe22db5a0582..eaeae31c1451bd3a77ca988cf1a115e8c072cfaf 100644 GIT binary patch literal 1700 zcmbVNc{J1s9RH1ttfNTnutZXhybK|uG~|fsaFwgYkUS#|ijiaV8&O!tJoh;>ZzNZ- zxkJ-9vnkE8~>aE+1qdT4y|p>!e&Kh}UrQjS>Y zN~I9M<&TQmje!&Sb6d3-jKdul7r4Hz?qZYMfdk%Wot(<5Di00@$ggRbwXw*G<8v*N zum_IrxS=A)sYES$10s;*0ASM$OI!&`9nJ7ricEQ+0&x{#K1cGxdN&qJzX~EO& z;2H9&l{{hhR1DFd}?agDaw>BRd_6wj@)*uEf+D45yk9a;~F(-t#KoKb-ROP(a zVZZ)vPNTp)n$3SZfoLoVx`1NW8_>}@JFZ=x1joYK+yM6f&Ydy3*K4rCX}6u9PGvYJ ziD1!@-o5vLvI;zyQC*DUGPXb^6Z&zN?eO-We)kfm8MQ#?RKzSt(-8#`Rs@qW$zOW416C0l8s>P$VwQOU7@2nOY`$v`&P!F|p_X zT#(z3h3}05-raAR^d$4wnIT^r70pjpuyW(v619h`n3`$`2BJ&% zQN>xHq3KmY&$3K!>Uo3;t-jvy!}4(TxD^e(-a8#TSP%let7M783Db{Ks;YFVH^`WP zq~@09_Pm%FZ+dS#1O^4%45#vOU@zZDefOXpi_GaWnsym>ju%w)9 zjHl?&GmUvEODRXUq~SZ|BN50#iT&U>R5^Zs5=~?R9_0BO`5v#dmrkX=5Qzc4G{<;g z7yjRk#d^RBFJ60SYttuMI>T3JebCH=xN(2|3?+(@Gj7BEh~{oK)zQ0QYvJ5PSI#Dt z9l@PgWO%PN(@Ed9uul3Ktr})72?)pVA90(TMW(l!HD-dO(r8G_(OG8B2QgVS;d~I^BGgA(uldJlJ26_43xIRN9L3zkUZl168*GSWLw|?y1|T zOkjD1R}h4G`{1~0ACHlR$vPN-@X+sD;W0Zt0g0)bQt_VZ*skH%^Ap+Nu=1(*U>R&w zK$sT*YIzBw@<=Tfvl|*Myu+U+D_VSv&PdqtpbXG}q-voRU*bCAZe-SiU|TKsiX0$< puiN+c0sNfIr+fGhHMsYKTzNx0|4G^7;+?kxAgydItIWOb{Q*p?>*D|b literal 473 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 NxCQ8l~O$T{(bui0zSz304@Tgy7VswX^} znQ%<^fBC9oNs0w?buO9qsSTVKr2AfVxgq&Dd*1ra3 z?cF9qd~1%V#fXS9wKwh#?tYvzbw~c*?Pt!tJM-?yocTN6v!8tPX3yQq`{tWxzwtAW z;R~H<+3Ls8E75?5@I899VwOI3DmCVNXUD4R#V$`?&`*?4<=`EmJ8xld^Br$U`NtGT~aD{_uF*mlmo^=jRv z?}f3)Z>4dh3w>vpHSceoz2E`m^@o-3WS9t*-Y!(BvyuDlTkmD@XM;d+jo8fG;h@cN|9cD9(ji$&w) zhp4$9_crLW*1AMWbSg2g@Kby7;fnem_xmj^8QQCUI))g z@8LWyp!YFu{gE%yOEfQBeRiNq_{ow?vmLi8kL^ejYxADbo-y~%^hK^Nf3o+#wVU#9 i{sJt?(Dx Date: Thu, 30 Jan 2025 18:30:41 +0200 Subject: [PATCH 3/4] its already in there lol --- code/datums/id_trim/jobs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 5f93dc054877..460000a14994 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -364,7 +364,6 @@ ACCESS_RC_ANNOUNCE, ACCESS_SURGERY, ACCESS_VIROLOGY, - ACCESS_PHARMACY, // MONKESTATION EDIT: Pathologists now have access to pharmacy due to their need for chems. Hopefully doesn't get abused too much and MDs have this too. ) minimal_wildcard_access = list( ACCESS_CMO, From e382bfe8a3f756c89a843790be2f7fa4e5918654 Mon Sep 17 00:00:00 2001 From: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com> Date: Thu, 30 Jan 2025 18:43:32 +0200 Subject: [PATCH 4/4] ugh --- code/modules/jobs/job_types/virologist.dm | 2 -- monkestation/code/modules/jobs/job_types/virologist.dm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index fa32804d08f2..5ea786330b18 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -69,5 +69,3 @@ duffelbag = /obj/item/storage/backpack/duffelbag/virology box = /obj/item/storage/box/survival/medical - - glasses = /obj/item/clothing/glasses/pathology //monkestation edit diff --git a/monkestation/code/modules/jobs/job_types/virologist.dm b/monkestation/code/modules/jobs/job_types/virologist.dm index 7d2143f2540c..639820363cb7 100644 --- a/monkestation/code/modules/jobs/job_types/virologist.dm +++ b/monkestation/code/modules/jobs/job_types/virologist.dm @@ -1,5 +1,5 @@ /datum/outfit/job/virologist - glasses = /obj/item/clothing/glasses/science + glasses = /obj/item/clothing/glasses/pathology backpack_contents = list( /obj/item/extrapolator = 1, /obj/item/storage/box/tube = 1,