diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png index 5df14e3223eee..8aed33f103e84 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png differ diff --git a/modular_doppler/loadout_categories/categories/clothing.dm b/modular_doppler/loadout_categories/categories/clothing.dm index 461a0e0207781..e60c2f9de0213 100644 --- a/modular_doppler/loadout_categories/categories/clothing.dm +++ b/modular_doppler/loadout_categories/categories/clothing.dm @@ -127,6 +127,10 @@ name = "Sleeveless Labcoat" item_path = /obj/item/clothing/suit/toggle/labcoat/lalunevest +/datum/loadout_item/suit/labocat_medical + name = "Medical Labcoat" + item_path = /obj/item/clothing/suit/toggle/labcoat/medical + /* * JACKETS */ diff --git a/modular_doppler/loadout_categories/categories/shoes.dm b/modular_doppler/loadout_categories/categories/shoes.dm index 21f1d9a7dc265..166bed6252078 100644 --- a/modular_doppler/loadout_categories/categories/shoes.dm +++ b/modular_doppler/loadout_categories/categories/shoes.dm @@ -23,6 +23,10 @@ else outfit.shoes = item_path +/datum/loadout_item/shoes/medical + name = "Medical Shoes" + item_path = /obj/item/clothing/shoes/medical + /datum/loadout_item/shoes/sneakers name = "Sneakers" item_path = /obj/item/clothing/shoes/sneakers diff --git a/modular_doppler/modular_cosmetics/code/face/designs.dm b/modular_doppler/modular_cosmetics/code/face/designs.dm new file mode 100644 index 0000000000000..c8cd1e71514fc --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/face/designs.dm @@ -0,0 +1,165 @@ +/* +* Designs +*/ + +/datum/design/health_hud_aviator + name = "Medical HUD Aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses." + id = "health_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_aviator + name = "Security HUD Aviators" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This HUD has been fitted inside of a pair of sunglasses." + id = "security_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_aviator + name = "Diagnostic HUD Aviators" + desc = "A heads-up display used to analyze and determine faults within robotic machinery. This HUD has been fitted inside of a pair of sunglasses." + id = "diagnostic_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_aviator + name = "Meson HUD Aviators" + desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. This HUD has been fitted inside of a pair of sunglasses." + id = "meson_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_aviator + name = "Science Aviators" + desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance." + id = "science_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/health_hud_projector + name = "Retinal Projector Medical HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "health_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_projector + name = "Retinal Projector Security HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "security_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_projector + name = "Retinal Projector Diagnostic HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "diagnostic_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_projector + name = "Retinal Projector Meson HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "meson_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_projector + name = "Science Retinal Projector" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "science_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_doppler/modular_cosmetics/code/face/glasses.dm b/modular_doppler/modular_cosmetics/code/face/glasses.dm index d5c913946ab54..1b144f368a1ec 100644 --- a/modular_doppler/modular_cosmetics/code/face/glasses.dm +++ b/modular_doppler/modular_cosmetics/code/face/glasses.dm @@ -1,3 +1,8 @@ +#define MODE_OFF "off" +#define MODE_OFF_FLASH_PROTECTION "flash protection" +#define MODE_ON "on" +#define MODE_FREEZE_ANIMATION "freeze" + /obj/item/clothing/glasses/eyepatch/wrap name = "eye wrap" desc = "A glorified bandage. At least this one's actually made for your head..." @@ -68,3 +73,543 @@ RESKIN_WORN_ICON_STATE = "nvgsechud" ) ) + +/obj/item/clothing/glasses/hud/eyepatch + name = "HUD eyepatch" + desc = "A simple HUD designed to interface with optical nerves of a lost eye. This one seems busted." + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + icon_state = "hudpatch" + base_icon_state = "hudpatch" + inhand_icon_state = "sunhudmed" + uses_advanced_reskins = TRUE + actions_types = list(/datum/action/item_action/flip) + var/flipped = FALSE + +/obj/item/clothing/glasses/hud/eyepatch/click_alt(mob/user) + . = ..() + flip_eyepatch() + +/obj/item/clothing/glasses/hud/eyepatch/attack_self(mob/user) + . = ..() + flip_eyepatch() + +/obj/item/clothing/glasses/hud/eyepatch/proc/flip_eyepatch() + flipped = !flipped + icon_state = flipped ? "[base_icon_state]_flipped" : base_icon_state + if (!ismob(loc)) + return + var/mob/user = loc + user.update_worn_glasses() + if (!ishuman(user)) + return + var/mob/living/carbon/human/human_user = user + if (human_user.get_eye_scars() & (flipped ? RIGHT_EYE_SCAR : LEFT_EYE_SCAR)) + tint = INFINITY + else + tint = initial(tint) + human_user.update_tint() + +/obj/item/clothing/glasses/hud/eyepatch/equipped(mob/living/user, slot) + if (!ishuman(user)) + return ..() + var/mob/living/carbon/human/human_user = user + // lol lmao + if (human_user.get_eye_scars() & (flipped ? RIGHT_EYE_SCAR : LEFT_EYE_SCAR)) + tint = INFINITY + else + tint = initial(tint) + return ..() + +/obj/item/clothing/glasses/hud/eyepatch/dropped(mob/living/user) + . = ..() + tint = initial(tint) + +/obj/item/clothing/glasses/hud/eyepatch/attack_self(mob/user, modifiers) + . = ..() + icon_state = (icon_state == base_icon_state) ? "[base_icon_state]_flipped" : base_icon_state + user.update_worn_glasses() + +/obj/item/clothing/glasses/hud/eyepatch/sec + name = "security HUD eyepatch" + desc = "Lost your eye beating an innocent clown? Incompatible with cybernetics? Thankfully, modern technology has a replacement. Protects against flashes 50% of the time, none of the time." + clothing_traits = list(TRAIT_SECURITY_HUD) + glass_colour_type = /datum/client_colour/glass_colour/red + + unique_reskin = list( + "Eyepatch" = list( + RESKIN_ICON_STATE = "hudpatch", + RESKIN_WORN_ICON_STATE = "hudpatch" + ), + "Fake Blindfold" = list( + RESKIN_ICON_STATE = "secfold", + RESKIN_WORN_ICON_STATE = "secfold" + ) + ) +/obj/item/clothing/glasses/hud/eyepatch/med + name = "medical HUD eyepatch" + desc = "Do no harm; but, maybe harm has befallen you-- or your poor eyeball. Thankfully there's a way to continue your oath, thankfully it didn't mention strange experimental surgeries." + icon_state = "medpatch" + base_icon_state = "medpatch" + clothing_traits = list(TRAIT_MEDICAL_HUD) + glass_colour_type = /datum/client_colour/glass_colour/lightblue + + unique_reskin = list( + "Eyepatch" = list( + RESKIN_ICON_STATE = "medpatch", + RESKIN_WORN_ICON_STATE = "medpatch" + ), + "Fake Blindfold" = list( + RESKIN_ICON_STATE = "medfold", + RESKIN_WORN_ICON_STATE = "medfold" + ) + ) + +/obj/item/clothing/glasses/hud/eyepatch/meson + name = "mesons HUD eyepatch" + desc = "For those that only want to go half insane when staring at the supermatter." + icon_state = "mesonpatch" + base_icon_state = "mesonpatch" + clothing_traits = list(TRAIT_MADNESS_IMMUNE) + vision_flags = SEE_TURFS + color_cutoffs = list(5, 15, 5) + lighting_cutoff = LIGHTING_CUTOFF_MEDIUM + glass_colour_type = /datum/client_colour/glass_colour/lightgreen + + unique_reskin = list( + "Eyepatch" = list( + RESKIN_ICON_STATE = "mesonpatch", + RESKIN_WORN_ICON_STATE = "mesonpatch" + ), + "Fake Blindfold" = list( + RESKIN_ICON_STATE = "mesonfold", + RESKIN_WORN_ICON_STATE = "mesonfold" + ) + ) + +/obj/item/clothing/glasses/hud/eyepatch/diagnostic + name = "diagnostic HUD eyepatch" + desc = "Lost your eyeball to a rogue borg? Forgot to wear eye protection sawing off a prosthetic? Got bored? Whatever the reason, this bit of tech will help you still repair machines. They'll never need it since they usually do it themselves, but it's the thought that counts." + icon_state = "robopatch" + base_icon_state = "robopatch" + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) + glass_colour_type = /datum/client_colour/glass_colour/lightorange + + unique_reskin = list( + "Eyepatch" = list( + RESKIN_ICON_STATE = "robopatch", + RESKIN_WORN_ICON_STATE = "robopatch" + ), + "Fake Blindfold" = list( + RESKIN_ICON_STATE = "robofold", + RESKIN_WORN_ICON_STATE = "robofold" + ) + ) + +/obj/item/clothing/glasses/hud/eyepatch/sci + name = "science HUD eyepatch" + desc = "Every few years, the aspiring mad scientist says to themselves 'I've got the castle, the evil laugh and equipment, but what I need is a look', thankfully, Dr. Galox has already covered that for you dear friend - while it doesn't do much beyond scan chemicals, what it lacks in use it makes up for in style." + icon_state = "scipatch" + base_icon_state = "scipatch" + clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) + + unique_reskin = list( + "Eyepatch" = list( + RESKIN_ICON_STATE = "scipatch", + RESKIN_WORN_ICON_STATE = "scipatch" + ), + "Fake Blindfold" = list( + RESKIN_ICON_STATE = "scifold", + RESKIN_WORN_ICON_STATE = "scifold" + ) + ) + + +/// BLINDFOLD HUDS /// +/obj/item/clothing/glasses/trickblindfold/obsolete + name = "obsolete fake blindfold" + desc = "An ornate fake blindfold, devoid of any electronics. It's belived to be originally worn by members of a bygone military force that sought to protect humanity." + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + icon_state = "obsoletefold" + base_icon_state = "obsoletefold" + +/obj/item/clothing/glasses/hud/eyepatch/sec/blindfold + name = "sec blindfold HUD" + desc = "a fake blindfold with a security HUD inside, helps you look like blind justice. This won't provide the same protection that you'd get from sunglasses." + icon_state = "secfold" + base_icon_state = "secfold" + +/obj/item/clothing/glasses/hud/eyepatch/med/blindfold + name = "medical blindfold HUD" + desc = "a fake blindfold with a medical HUD inside, great for helping keep a poker face when dealing with patients." + icon_state = "medfold" + base_icon_state = "medfold" + +/obj/item/clothing/glasses/hud/eyepatch/meson/blindfold + name = "meson blindfold HUD" + desc = "A fake blindfold with meson lenses inside. Doesn't shield against welding." + icon_state = "mesonfold" + base_icon_state = "mesonfold" + +/obj/item/clothing/glasses/hud/eyepatch/diagnostic/blindfold + name = "diagnostic blindfold HUD" + desc = "A fake blindfold with a diagnostic HUD inside, excellent for working on androids." + icon_state = "robofold" + base_icon_state = "robofold" + +/obj/item/clothing/glasses/hud/eyepatch/sci/blindfold + name = "science blindfold HUD" + desc = "A fake blindfold with a science HUD inside, provides a way to get used to blindfolds before you eventually end up needing the real thing." + icon_state = "scifold" + base_icon_state = "scifold" + +/obj/item/clothing/glasses/hud/ar + name = "\improper AR glasses" + icon = 'icons/obj/clothing/glasses.dmi' + icon_state = "glasses_regular" + desc = "A heads-up display that provides important info in (almost) real time. These don't really seem to work" + actions_types = list(/datum/action/item_action/toggle_mode) + glass_colour_type = /datum/client_colour/glass_colour/gray + /// Defines sound to be played upon mode switching + var/modeswitch_sound = 'sound/effects/pop.ogg' + /// Iconstate for when the status is off (TODO: off_state --> modes_states list for expandability) + var/off_state = "salesman_fzz" + /// Sets a list of modes to cycle through + var/list/modes = list(MODE_OFF, MODE_ON) + /// The current operating mode + var/mode + /// Defines messages that will be shown to the user upon switching modes (e.g. turning it on) + var/list/modes_msg = list(MODE_ON = "optical matrix enabled", MODE_OFF = "optical matrix disabled") + +/// Reuse logic from engine_goggles.dm +/obj/item/clothing/glasses/hud/ar/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_EYES) + + // Set our initial values + mode = MODE_ON + +/obj/item/clothing/glasses/hud/ar/Destroy() + . = ..() + STOP_PROCESSING(SSobj, src) + +/obj/item/clothing/glasses/hud/ar/equipped(mob/living/carbon/human/user, slot) + if(mode != MODE_OFF || slot != slot_flags) + return ..() + // when off: don't apply any huds or traits. but keep the list as-is so that we can still add them later + var/traits = clothing_traits + clothing_traits = null + . = ..() + clothing_traits = traits + +/obj/item/clothing/glasses/hud/ar/proc/toggle_mode(mob/user, voluntary) + + if(!istype(user) || user.incapacitated) + return + + if(mode == modes[mode]) + return // If there is only really one mode to cycle through, early return + + if(mode == MODE_FREEZE_ANIMATION) + icon = initial(icon) /// Resets icon to initial value after MODE_FREEZE_ANIMATION, since MODE_FREEZE_ANIMATION replaces it with non-animated version of initial + + mode = get_next_mode(mode) + + switch(mode) + if(MODE_ON) + balloon_alert(user, span_notice("[modes_msg[mode]]")) + reset_vars() // Resets all the vars to their initial values (THIS PRESUMES THE DEFAULT STATE IS ON) + add_hud(user) + if(MODE_FREEZE_ANIMATION) + balloon_alert(user, span_notice("[modes_msg[mode]]")) + freeze_animation() + if(MODE_OFF) + if(MODE_OFF_FLASH_PROTECTION in modes) + flash_protect = FLASH_PROTECTION_FLASH + balloon_alert(user, span_notice("[modes_msg[MODE_OFF_FLASH_PROTECTION]]")) + else + balloon_alert(user, span_notice("[modes_msg[mode]]")) + icon_state = off_state + disable_vars(user) + remove_hud(user) + + playsound(src, modeswitch_sound, 50, TRUE) // play sound set in vars! + update_sight(user) + update_item_action_buttons() + update_appearance() + +/obj/item/clothing/glasses/hud/ar/proc/get_next_mode(current_mode) + switch(current_mode) + if(MODE_ON) + if(MODE_FREEZE_ANIMATION in modes) // AR projectors go from on to freeze animation mode + return MODE_FREEZE_ANIMATION + else + return MODE_OFF + if(MODE_OFF) + return MODE_ON + if(MODE_FREEZE_ANIMATION) + return MODE_OFF + +/obj/item/clothing/glasses/hud/ar/proc/add_hud(mob/user) + var/mob/living/carbon/human/human = user + if(!ishuman(user) || human.glasses != src) // Make sure they're a human wearing the glasses first + return + for(var/trait in clothing_traits) + if(trait == TRAIT_NEARSIGHTED_CORRECTED) // this isn't a HUD! + continue + ADD_CLOTHING_TRAIT(human, trait) + +/obj/item/clothing/glasses/hud/ar/proc/remove_hud(mob/user) + var/mob/living/carbon/human/human = user + if(!ishuman(user) || human.glasses != src) // Make sure they're a human wearing the glasses first + return + for(var/trait in clothing_traits) + if(trait == TRAIT_NEARSIGHTED_CORRECTED) // this isn't a HUD! + continue + REMOVE_CLOTHING_TRAIT(human, trait) + +/obj/item/clothing/glasses/hud/ar/proc/reset_vars() + worn_icon = initial(worn_icon) + icon_state = initial(icon_state) + flash_protect = initial(flash_protect) + tint = initial(tint) + color_cutoffs = initial(color_cutoffs) + vision_flags = initial(vision_flags) + +/obj/item/clothing/glasses/hud/ar/proc/disable_vars(mob/user) + vision_flags = 0 /// Sets vision_flags to 0 to disable meson view mainly + color_cutoffs = null // Resets lighting_alpha to user's default one + +/// Create new icon and worn_icon, with only the first frame of every state and setting that as icon. +/// this practically freezes the animation :) +/obj/item/clothing/glasses/hud/ar/proc/freeze_animation() + var/icon/frozen_icon = new(icon, frame = 1) + icon = frozen_icon + var/icon/frozen_worn_icon = new(worn_icon, frame = 1) + worn_icon = frozen_worn_icon + +// Blah blah, fix vision and update icons +/obj/item/clothing/glasses/hud/ar/proc/update_sight(mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/human = user + if(human.glasses == src) + human.update_sight() + +/obj/item/clothing/glasses/hud/ar/attack_self(mob/user) + toggle_mode(user, TRUE) + +/obj/item/clothing/glasses/hud/ar/aviator + name = "aviators" + desc = "A pair of designer sunglasses with electrochromatic darkening lenses!" + icon_state = "aviator" + off_state = "aviator_off" + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + flash_protect = FLASH_PROTECTION_FLASH + modes = list(MODE_OFF, MODE_ON) + tint = 0 + +/obj/item/clothing/glasses/fake_sunglasses/aviator + name = "aviators" + desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes." + icon_state = "aviator" + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + +// Security Aviators +/obj/item/clothing/glasses/hud/ar/aviator/security + name = "security HUD aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This HUD has been fitted inside of a pair of sunglasses with toggleable electrochromatic tinting." + icon_state = "aviator_sec" + off_state = "aviator_sec_flash" + flash_protect = FLASH_PROTECTION_NONE + clothing_traits = list(TRAIT_SECURITY_HUD) + glass_colour_type = /datum/client_colour/glass_colour/red + modes = list(MODE_OFF_FLASH_PROTECTION, MODE_ON) + modes_msg = list(MODE_OFF_FLASH_PROTECTION = "flash protection mode", MODE_ON = "optical matrix enabled") + +// Medical Aviators +/obj/item/clothing/glasses/hud/ar/aviator/health + name = "medical HUD aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses." + icon_state = "aviator_med" + flash_protect = FLASH_PROTECTION_NONE + clothing_traits = list(TRAIT_MEDICAL_HUD) + glass_colour_type = /datum/client_colour/glass_colour/lightblue + +// (Normal) meson scanner Aviators +/obj/item/clothing/glasses/hud/ar/aviator/meson + name = "meson HUD aviators" + desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions. This HUD has been fitted inside of a pair of sunglasses." + icon_state = "aviator_meson" + flash_protect = FLASH_PROTECTION_NONE + clothing_traits = list(TRAIT_MADNESS_IMMUNE) + vision_flags = SEE_TURFS + color_cutoffs = list(5, 15, 5) + glass_colour_type = /datum/client_colour/glass_colour/lightgreen + +// diagnostic Aviators +/obj/item/clothing/glasses/hud/ar/aviator/diagnostic + name = "diagnostic HUD aviators" + desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This HUD has been fitted inside of a pair of sunglasses." + icon_state = "aviator_diagnostic" + flash_protect = FLASH_PROTECTION_NONE + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) + glass_colour_type = /datum/client_colour/glass_colour/lightorange + +// Science Aviators +/obj/item/clothing/glasses/hud/ar/aviator/science + name = "science aviators" + desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance." + icon_state = "aviator_sci" + flash_protect = FLASH_PROTECTION_NONE + glass_colour_type = /datum/client_colour/glass_colour/purple + resistance_flags = ACID_PROOF + armor_type = /datum/armor/aviator_science + clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) + +/datum/armor/aviator_science + fire = 80 + acid = 100 + +/obj/item/clothing/glasses/hud/ar/aviator/security/prescription + name = "prescription security HUD aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This HUD has been fitted inside of a pair of sunglasses with toggleable electrochromatic tinting which. Has lenses that help correct eye sight." + clothing_traits = list(TRAIT_SECURITY_HUD, TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/hud/ar/aviator/health/prescription + name = "prescription medical HUD aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses which has lenses that help correct eye sight." + clothing_traits = list(TRAIT_MEDICAL_HUD, TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/hud/ar/aviator/meson/prescription + name = "prescription meson HUD aviators" + desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions. This HUD has been fitted inside of a pair of sunglasses which has lenses that help correct eye sight." + clothing_traits = list(TRAIT_MADNESS_IMMUNE, TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/hud/ar/aviator/diagnostic/prescription + name = "prescription diagnostic HUD aviators" + desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This HUD has been fitted inside of a pair of sunglasses which has lenses that help correct eye sight." + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD, TRAIT_NEARSIGHTED_CORRECTED) + +/obj/item/clothing/glasses/hud/ar/aviator/science/prescription + name = "prescription science aviators" + desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance, which has lenses that help correct eye sight." + clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER, TRAIT_NEARSIGHTED_CORRECTED) + +// Retinal projector + +/obj/item/clothing/glasses/hud/ar/projector + name = "retinal projector" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than a visor." + icon_state = "projector" + icon = 'modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi' + flags_cover = null /// It doesn't actually cover up any parts + off_state = "projector-off" + modes = list(MODE_OFF, MODE_ON, MODE_FREEZE_ANIMATION) + modes_msg = list(MODE_ON = "projector enabled", MODE_FREEZE_ANIMATION = "continuous beam mode", MODE_OFF = "projector disabled" ) + +/obj/item/clothing/glasses/hud/ar/projector/meson + name = "retinal projector meson HUD" + icon_state = "projector_meson" + vision_flags = SEE_TURFS + color_cutoffs = list(10, 30, 10) + +/obj/item/clothing/glasses/hud/ar/projector/health + name = "retinal projector health HUD" + icon_state = "projector_med" + clothing_traits = list(TRAIT_MEDICAL_HUD) + +/obj/item/clothing/glasses/hud/ar/projector/security + name = "retinal projector security HUD" + icon_state = "projector_sec" + clothing_traits = list(TRAIT_SECURITY_HUD) + +/obj/item/clothing/glasses/hud/ar/projector/diagnostic + name = "retinal projector diagnostic HUD" + icon_state = "projector_diagnostic" + clothing_traits = list(TRAIT_DIAGNOSTIC_HUD) + +/obj/item/clothing/glasses/hud/ar/projector/science + name = "science retinal projector" + icon_state = "projector_sci" + clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER) + +//Eyepatches// +/datum/crafting_recipe/secpatch + name = "Security Eyepatch HUD" + result = /obj/item/clothing/glasses/hud/eyepatch/sec + reqs = list(/obj/item/clothing/glasses/hud/security = 1, /obj/item/clothing/glasses/eyepatch = 1, /obj/item/stack/cable_coil = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) //Tools needed and requirements are kept the same as craftable HUD sunglasses// + category = CAT_CLOTHING + +/datum/crafting_recipe/secpatchremoval + name = "Security Eyepatch HUD removal" + result = /obj/item/clothing/glasses/eyepatch + reqs = list(/obj/item/clothing/glasses/hud/eyepatch/sec = 1) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/medpatch + name = "Medical Eyepatch HUD" + result = /obj/item/clothing/glasses/hud/eyepatch/med + reqs = list(/obj/item/clothing/glasses/hud/health = 1, /obj/item/clothing/glasses/eyepatch = 1, /obj/item/stack/cable_coil = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/medpatchremoval + name = "Medical Eyepatch HUD removal" + result = /obj/item/clothing/glasses/eyepatch + reqs = list(/obj/item/clothing/glasses/hud/eyepatch/med = 1) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/mesonpatch + name = "Meson Eyepatch HUD" + result = /obj/item/clothing/glasses/hud/eyepatch/meson + reqs = list(/obj/item/clothing/glasses/meson = 1, /obj/item/clothing/glasses/eyepatch = 1, /obj/item/stack/cable_coil = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/mesonpatchremoval + name = "Meson Eyepatch HUD removal" + result = /obj/item/clothing/glasses/eyepatch + reqs = list(/obj/item/clothing/glasses/hud/eyepatch/meson = 1) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/robopatch + name = "Diagnostic Eyepatch HUD" + result = /obj/item/clothing/glasses/hud/eyepatch/diagnostic + reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1, /obj/item/clothing/glasses/eyepatch = 1, /obj/item/stack/cable_coil = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/robopatchremoval + name = "Diagnostic Eyepatch HUD removal" + result = /obj/item/clothing/glasses/eyepatch + reqs = list(/obj/item/clothing/glasses/hud/eyepatch/diagnostic = 1) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/scipatch + name = "Science Eyepatch HUD" + result = /obj/item/clothing/glasses/hud/eyepatch/sci + reqs = list(/obj/item/clothing/glasses/science = 1, /obj/item/clothing/glasses/eyepatch = 1, /obj/item/stack/cable_coil = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING + +/datum/crafting_recipe/scipatchremoval + name = "Science Eyepatch HUD removal" + result = /obj/item/clothing/glasses/eyepatch + reqs = list(/obj/item/clothing/glasses/hud/eyepatch/sci = 1) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + category = CAT_CLOTHING +//eyepatches end// + +#undef MODE_OFF +#undef MODE_OFF_FLASH_PROTECTION +#undef MODE_ON +#undef MODE_FREEZE_ANIMATION diff --git a/modular_doppler/modular_cosmetics/code/garment_bag_overrides.dm b/modular_doppler/modular_cosmetics/code/garment_bag_overrides.dm index 889eada8dfd05..1f4696b347750 100644 --- a/modular_doppler/modular_cosmetics/code/garment_bag_overrides.dm +++ b/modular_doppler/modular_cosmetics/code/garment_bag_overrides.dm @@ -31,11 +31,22 @@ new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/science(src) /obj/item/storage/bag/garment/chief_medical/PopulateContents() - . = ..() - new /obj/item/clothing/under/misc/doppler_uniform/medical(src) new /obj/item/clothing/neck/doppler_mantle/medical(src) new /obj/item/clothing/head/beret/doppler_command/medical(src) new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/medical(src) + new /obj/item/clothing/gloves/latex/nitrile(src) + new /obj/item/clothing/head/beret/medical/cmo(src) + new /obj/item/clothing/suit/toggle/labcoat/cmo(src) + new /obj/item/clothing/head/utility/surgerycap/cmo(src) + new /obj/item/clothing/neck/cloak/cmo(src) + new /obj/item/clothing/shoes/medical(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck/skirt(src) + new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt/scrubs(src) + /obj/item/storage/bag/garment/engineering_chief/PopulateContents() . = ..() diff --git a/modular_doppler/modular_cosmetics/code/head/head.dm b/modular_doppler/modular_cosmetics/code/head/head.dm index 38454578fa78a..0d4422baa278f 100644 --- a/modular_doppler/modular_cosmetics/code/head/head.dm +++ b/modular_doppler/modular_cosmetics/code/head/head.dm @@ -33,3 +33,7 @@ greyscale_config_worn = /datum/greyscale_config/maid_headband/worn greyscale_colors = "#edf9ff" flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/hooded/winterhood + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/hoods.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/head/hoods.dmi' diff --git a/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm b/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm index adf43acb06a22..a8159abcbd3d0 100644 --- a/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm +++ b/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm @@ -1,6 +1,9 @@ /obj/item/clothing/shoes supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/feet.dmi', BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi') @@ -8,7 +11,10 @@ /obj/item/clothing/shoes/sneakers supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/sneakers/worn, BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/sneakers/worn/digi) @@ -44,3 +50,7 @@ /datum/greyscale_config/sneakers_marisa/worn/digi name = "Worn Digi Marisa Sneakers" icon_file = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi' + +/obj/item/clothing/shoes/wheelys + supported_bodyshapes = null + bodyshape_icon_files = null diff --git a/modular_doppler/modular_cosmetics/code/shoes/medical.dm b/modular_doppler/modular_cosmetics/code/shoes/medical.dm new file mode 100644 index 0000000000000..4a485bdeaee41 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/shoes/medical.dm @@ -0,0 +1,15 @@ +/obj/item/clothing/shoes/medical + name = "medical shoes" + icon = 'modular_doppler/modular_cosmetics/icons/obj/shoes/working.dmi' + icon_state = "medical_doppler" + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi' + armor_type = /datum/armor/sneakers_white + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) + bodyshape_icon_files = list( + BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/shoes/working_digi.dmi' + ) diff --git a/modular_doppler/modular_cosmetics/code/suits/basesuits.dm b/modular_doppler/modular_cosmetics/code/suits/basesuits.dm index 19688ac500047..1603b8b8cd159 100644 --- a/modular_doppler/modular_cosmetics/code/suits/basesuits.dm +++ b/modular_doppler/modular_cosmetics/code/suits/basesuits.dm @@ -1,24 +1,39 @@ /obj/item/clothing/suit/bio_suit supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) - bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/head/bio.dmi', + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/bio.dmi', BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/bio_digi.dmi') /obj/item/clothing/suit/wizrobe supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/wizard.dmi', BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/wizard_digi.dmi') - +/obj/item/clothing/suit/hooded/wintercoat/medical + supported_bodyshapes = null + bodyshape_icon_files = null + icon = 'modular_doppler/modular_cosmetics/icons/obj/suit/wintercoat.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi' /obj/item/clothing/suit/toggle/labcoat supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION - supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) - bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi', - BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi') - -//God damnit TG you *fuckwits*, why didn't you subtype these properly + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) + bodyshape_icon_files = list( + BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi' + ) + +//mfw they aren't subtyped properly /obj/item/clothing/suit/toggle/labcoat/genetics greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) @@ -40,8 +55,8 @@ /obj/item/clothing/suit/toggle/labcoat/interdyne greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) - - +/obj/item/clothing/suit/toggle/labcoat/cmo + icon = 'modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi' /// SPACESUITS /obj/item/clothing/head/helmet/space @@ -49,6 +64,10 @@ bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/head/spacehelm.dmi', BODYSHAPE_SNOUTED_T = 'modular_doppler/modular_cosmetics/icons/mob/head/spacehelm_muzzled.dmi') +/obj/item/clothing/head/helmet/space/plasmaman + supported_bodyshapes = null + bodyshape_icon_files = null + /obj/item/clothing/suit/space supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) diff --git a/modular_doppler/modular_cosmetics/code/suits/labcoat.dm b/modular_doppler/modular_cosmetics/code/suits/labcoat.dm index d923591e01a8d..038b88be90a3c 100644 --- a/modular_doppler/modular_cosmetics/code/suits/labcoat.dm +++ b/modular_doppler/modular_cosmetics/code/suits/labcoat.dm @@ -18,3 +18,15 @@ icon = 'modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi' worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi' supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/toggle/labcoat/medical + name = "medical labcoat" + desc = "A suit that protects against minor chemical spills. This one is greener than you'd typically expect." + icon = 'modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi' + icon_state = "labcoat_med" + +/obj/item/clothing/suit/toggle/labcoat/medical/unbuttoned + name = "unbuttoned medical labcoat" + desc = "Someone has taken to the task of cutting the top few buttons off this labcoat. It's particularly slutty in just the way you'd expect." + icon_state = "labcoat_opentop" diff --git a/modular_doppler/modular_cosmetics/code/under/base_overrides.dm b/modular_doppler/modular_cosmetics/code/under/base_overrides.dm new file mode 100644 index 0000000000000..09e86558a0bf8 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/under/base_overrides.dm @@ -0,0 +1,38 @@ +/// ==MEDICAL BREAKER== +/obj/item/clothing/under/rank/medical + icon = 'modular_doppler/modular_cosmetics/icons/obj/under/base/medical.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) + bodyshape_icon_files = list( + BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical_digi.dmi' + ) + +/obj/item/clothing/under/rank/medical/scrubs + icon = 'modular_doppler/modular_cosmetics/icons/obj/under/base/medical.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi' + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list( + BODYSHAPE_HUMANOID, + BODYSHAPE_DIGITIGRADE + ) + bodyshape_icon_files = list( + BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/under/base/medical_digi.dmi' + ) + +/obj/item/clothing/under/rank/medical/scrubs/blue + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is a grayish blue." + +/obj/item/clothing/under/rank/medical/scrubs/green + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." + icon_state = "scrubsgreen" + +/obj/item/clothing/under/rank/medical/scrubs/purple + name = "wine-red scrubs" // Yes, I know the above word reads purple. + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is a wine red." + icon_state = "scrubswine" diff --git a/modular_doppler/modular_cosmetics/code/under/medical_extra.dm b/modular_doppler/modular_cosmetics/code/under/medical_extra.dm index 4bddb234f918e..ee06577bd1ff9 100644 --- a/modular_doppler/modular_cosmetics/code/under/medical_extra.dm +++ b/modular_doppler/modular_cosmetics/code/under/medical_extra.dm @@ -16,3 +16,27 @@ body_parts_covered = CHEST|GROIN|ARMS dying_key = DYE_REGISTRY_JUMPSKIRT female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY + +/obj/item/clothing/under/rank/medical/scrubs/skirt + name = "scrub-skirt" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a grayish blue, and is a sort of skirt. Or robe. Or scrobe." + icon_state = "scrubsblue_skirt" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + supported_bodyshapes = null + +/obj/item/clothing/under/rank/medical/scrubs/skirt/green + name = "green scrub-skirt" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a neat green, and is a sort of skirt. Or robe. Or scrobe." + icon_state = "scrubsgreen_skirt" + +/obj/item/clothing/under/rank/medical/scrubs/skirt/purple + name = "wine-red scrub-skirt" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is a wine red, and is a sort of skirt. Or robe. Or scrobe." + icon_state = "scrubswine_skirt" + +/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt/scrubs + name = "chief medical officer scrub-skirt" + desc = "It's a sort of skirt, robe, or scrobe, worn by those with the experience to be \"Chief Medical Officer\"." + icon_state = "cmo_scrubskirt" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + supported_bodyshapes = null diff --git a/modular_doppler/modular_cosmetics/code/uniform_overrides.dm b/modular_doppler/modular_cosmetics/code/uniform_overrides.dm index 85a7587216eef..f0317ee07659d 100644 --- a/modular_doppler/modular_cosmetics/code/uniform_overrides.dm +++ b/modular_doppler/modular_cosmetics/code/uniform_overrides.dm @@ -10,3 +10,18 @@ uniform = /obj/item/clothing/under/rank/civilian/janitor/doppler suit = /obj/item/clothing/suit/apron/janitor_cloak gloves = /obj/item/clothing/gloves/botanic_leather/janitor + +/datum/outfit/job/cmo + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck + shoes = /obj/item/clothing/shoes/medical + +/datum/outfit/job/doctor + shoes = /obj/item/clothing/shoes/medical + suit = /obj/item/clothing/suit/toggle/labcoat/medical + +/datum/outfit/job/chemist + shoes = /obj/item/clothing/shoes/medical + +/datum/outfit/job/paramedic + shoes = /obj/item/clothing/shoes/medical + suit = /obj/item/clothing/suit/toggle/labcoat/medical diff --git a/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi b/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi index 7ea21b08d6617..75b053659af77 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi and b/modular_doppler/modular_cosmetics/icons/mob/face/glasses.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/hands/gloves.dmi b/modular_doppler/modular_cosmetics/icons/mob/hands/gloves.dmi index 4fe32e363c2fd..281ac9d75505d 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/hands/gloves.dmi and b/modular_doppler/modular_cosmetics/icons/mob/hands/gloves.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/hoods.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/hoods.dmi index 792459b786250..b6a5ecd0b3e44 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/head/hoods.dmi and b/modular_doppler/modular_cosmetics/icons/mob/head/hoods.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi b/modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi index 1eb4e350043ad..ae2a68724fb62 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi and b/modular_doppler/modular_cosmetics/icons/mob/shoes/working.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/shoes/working_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/shoes/working_digi.dmi new file mode 100644 index 0000000000000..902f09e2992ff Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/shoes/working_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi index bdf732408e4d4..f2f42c800b1c6 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi and b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi index ba04f18237553..d6687fb111c1c 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi and b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi index 2aff3f7d7074f..2869dcff2a69c 100644 Binary files a/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi and b/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi b/modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi new file mode 100644 index 0000000000000..fcad541490a89 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/under/base/medical.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/under/base/medical_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/under/base/medical_digi.dmi new file mode 100644 index 0000000000000..33d10ab0f7738 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/under/base/medical_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi b/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi index de504774fd17a..aec580db0dac9 100644 Binary files a/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi and b/modular_doppler/modular_cosmetics/icons/obj/face/glasses.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/hands/gloves.dmi b/modular_doppler/modular_cosmetics/icons/obj/hands/gloves.dmi index 0f164baaba1ac..7cf3233758db5 100644 Binary files a/modular_doppler/modular_cosmetics/icons/obj/hands/gloves.dmi and b/modular_doppler/modular_cosmetics/icons/obj/hands/gloves.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/head/hoods.dmi b/modular_doppler/modular_cosmetics/icons/obj/head/hoods.dmi index f92acda7790c6..35ed6c934aa78 100644 Binary files a/modular_doppler/modular_cosmetics/icons/obj/head/hoods.dmi and b/modular_doppler/modular_cosmetics/icons/obj/head/hoods.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/shoes/working.dmi b/modular_doppler/modular_cosmetics/icons/obj/shoes/working.dmi index 4d28d21c73ead..93c277d51e18e 100644 Binary files a/modular_doppler/modular_cosmetics/icons/obj/shoes/working.dmi and b/modular_doppler/modular_cosmetics/icons/obj/shoes/working.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi b/modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi index f70feca3b5d6f..37f095aad7da3 100644 Binary files a/modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi and b/modular_doppler/modular_cosmetics/icons/obj/suit/labcoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/suit/wintercoat.dmi b/modular_doppler/modular_cosmetics/icons/obj/suit/wintercoat.dmi new file mode 100644 index 0000000000000..0c8168a2be846 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/suit/wintercoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/under/base/medical.dmi b/modular_doppler/modular_cosmetics/icons/obj/under/base/medical.dmi new file mode 100644 index 0000000000000..2cdbd54dbaaf6 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/under/base/medical.dmi differ diff --git a/modular_doppler/modular_vending/code/tg_vendors/wardrobes.dm b/modular_doppler/modular_vending/code/tg_vendors/wardrobes.dm index 5403d6211f1aa..ad63bed28c713 100644 --- a/modular_doppler/modular_vending/code/tg_vendors/wardrobes.dm +++ b/modular_doppler/modular_vending/code/tg_vendors/wardrobes.dm @@ -1,11 +1,21 @@ /obj/machinery/vending/wardrobe/medi_wardrobe products_doppler = list( - /obj/item/clothing/under/misc/doppler_uniform/medical = 5, /obj/item/radio/headset/headset_med = 3, /obj/item/clothing/gloves/latex/nitrile = 2, /obj/item/clothing/suit/toggle/labcoat/hospitalgown = 5, /obj/item/storage/belt/med_bandolier = 2, /obj/item/clothing/suit/jacket/doppler/departmental_jacket/med = 2, + /obj/item/clothing/suit/toggle/labcoat/medical = 6, + /obj/item/clothing/shoes/medical = 6, + /obj/item/clothing/under/rank/medical/scrubs/skirt = 6, + /obj/item/clothing/under/rank/medical/scrubs/skirt/green = 6, + /obj/item/clothing/under/rank/medical/scrubs/skirt/purple = 6, + ) + excluded_products = list( + /obj/item/clothing/shoes/sneakers/blue = 4, + ) + contraband_doppler = list( + /obj/item/clothing/suit/toggle/labcoat/medical/unbuttoned = 6, ) /obj/machinery/vending/wardrobe/jani_wardrobe diff --git a/modular_doppler/research/designs/hud_designs.dm b/modular_doppler/research/designs/hud_designs.dm new file mode 100644 index 0000000000000..c8cd1e71514fc --- /dev/null +++ b/modular_doppler/research/designs/hud_designs.dm @@ -0,0 +1,165 @@ +/* +* Designs +*/ + +/datum/design/health_hud_aviator + name = "Medical HUD Aviators" + desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This HUD has been fitted inside of a pair of sunglasses." + id = "health_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_aviator + name = "Security HUD Aviators" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This HUD has been fitted inside of a pair of sunglasses." + id = "security_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_aviator + name = "Diagnostic HUD Aviators" + desc = "A heads-up display used to analyze and determine faults within robotic machinery. This HUD has been fitted inside of a pair of sunglasses." + id = "diagnostic_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_aviator + name = "Meson HUD Aviators" + desc = "A heads-up display used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. This HUD has been fitted inside of a pair of sunglasses." + id = "meson_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_aviator + name = "Science Aviators" + desc = "A pair of tacky purple aviator sunglasses that allow the wearer to recognize various chemical compounds with only a glance." + id = "science_hud_aviator" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/aviator/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/health_hud_projector + name = "Retinal Projector Medical HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "health_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/health + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/security_hud_projector + name = "Retinal Projector Security HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "security_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/security + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY, + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/diagnostic_hud_projector + name = "Retinal Projector Diagnostic HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "diagnostic_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/diagnostic + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/meson_hud_projector + name = "Retinal Projector Meson HUD" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "meson_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/meson + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING + +/datum/design/science_hud_projector + name = "Science Retinal Projector" + desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than goggles." + id = "science_hud_projector" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 8, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/clothing/glasses/hud/ar/projector/science + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE + RND_SUBCATEGORY_EQUIPMENT_MEDICAL, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_doppler/research/techweb/all_nodes.dm b/modular_doppler/research/techweb/all_nodes.dm new file mode 100644 index 0000000000000..87089198d7024 --- /dev/null +++ b/modular_doppler/research/techweb/all_nodes.dm @@ -0,0 +1,14 @@ +/datum/techweb_node/hud/New() + design_ids += list( + "health_hud_aviator", + "security_hud_aviator", + "diagnostic_hud_aviator", + "meson_hud_aviator", + "science_hud_aviator", + "health_hud_projector", + "security_hud_projector", + "diagnostic_hud_projector", + "meson_hud_projector", + "science_hud_projector", + ) + return ..() diff --git a/tgstation.dme b/tgstation.dme index 350c7e0e877af..af11b11cd889f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6886,6 +6886,7 @@ #include "modular_doppler\modular_cosmetics\code\belt\crusaderbelt.dm" #include "modular_doppler\modular_cosmetics\code\belt\med_bandolier.dm" #include "modular_doppler\modular_cosmetics\code\face\basemasks.dm" +#include "modular_doppler\modular_cosmetics\code\face\designs.dm" #include "modular_doppler\modular_cosmetics\code\face\glasses.dm" #include "modular_doppler\modular_cosmetics\code\face\masks.dm" #include "modular_doppler\modular_cosmetics\code\face\papermask.dm" @@ -6905,6 +6906,7 @@ #include "modular_doppler\modular_cosmetics\code\shoes\baseshoes.dm" #include "modular_doppler\modular_cosmetics\code\shoes\gags_shoes.dm" #include "modular_doppler\modular_cosmetics\code\shoes\galoshes.dm" +#include "modular_doppler\modular_cosmetics\code\shoes\medical.dm" #include "modular_doppler\modular_cosmetics\code\storage\backpacks.dm" #include "modular_doppler\modular_cosmetics\code\storage\belts.dm" #include "modular_doppler\modular_cosmetics\code\storage\rings.dm" @@ -6914,6 +6916,7 @@ #include "modular_doppler\modular_cosmetics\code\suits\misc.dm" #include "modular_doppler\modular_cosmetics\code\suits\modsuit.dm" #include "modular_doppler\modular_cosmetics\code\suits\shirts.dm" +#include "modular_doppler\modular_cosmetics\code\under\base_overrides.dm" #include "modular_doppler\modular_cosmetics\code\under\doppler_uniforms.dm" #include "modular_doppler\modular_cosmetics\code\under\dresses.dm" #include "modular_doppler\modular_cosmetics\code\under\formal.dm" @@ -7248,7 +7251,9 @@ #include "modular_doppler\religion\code\chaplain.dm" #include "modular_doppler\religion\code\mind.dm" #include "modular_doppler\religion\code\religious_sects.dm" +#include "modular_doppler\research\designs\hud_designs.dm" #include "modular_doppler\research\designs\limbgrower_designs.dm" +#include "modular_doppler\research\techweb\all_nodes.dm" #include "modular_doppler\spacer_swimming\spacer_swim.dm" #include "modular_doppler\sprite_swaps\code\bigclosets.dm" #include "modular_doppler\starter_resources\ore_vent.dm"