From 78cffc210111b00582f2fc6357ed8a08514ededa Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sun, 22 Jun 2025 04:02:06 -0400 Subject: [PATCH] Adds a new halloween species: Spirits (#90711) Adds 2 new species: Spirits and Ghosts Spirits are available roundstart during Halloween, Wabbajack and Xenobio's black slime extract Ghosts are available through Magic mirrors They fly around, and don't have legs and instead float around. They also can't get legs implanted onto themselves. They also do have organs, so they are affected by flashbangs, they do get hungry, they do need oxygen to survive (they don't take damage in space but they do suffocate & get slowdown), and can process chems. Gibbing a ghost gives ectoplasm, an ingredient for ghost burgers. Chaplains also got a buff here, null rod-type weapons' bane is now against Spirit mobs, rather than hardcoded revenants. This means it now includes Spirits/Ghosts, but also Soulscythes & Cult shades. Also re-adds https://github.com/tgstation/tgstation/pull/81630 which was reverted in https://github.com/tgstation/tgstation/pull/86506 which I assume was accidental. Ghosts have an innate ability to become incorporeal, which allows them to phase through walls and stuff. Using this will immediately make them drop any non-ghost limb/organ (not implants cause I thought it would be funny). This ability is not available if they have holy water in their system, and like revenants they also can't walk over blessed tiles with it. They are also invisible to cameras while using this (not the obscura though). Sprites taken from observers directly, if anyone wants to make custom sprites for them feel free. If anyone wants to make this obtainable somehow in-game as well I wouldn't be opposed, halloween is just where I thought it would fit most. This also adds a lot of fixes that I encountered trying to add this, from systems that have been neglected throughout the years. https://github.com/user-attachments/assets/e368d710-80a0-4c63-b271-1abe3dd41a5e We haven't gotten a new halloween species in a long time and thought it would be fun if you can play as an actual ghost, the soul that remains after a person passes, so Halloween feels more haunted. It's overall made in just good fun, with a bonus that Ghosts are a cool species to play with as well for Wizards & maybe Chaplains in the future (Dead sect when?) :cl: add: Added a new halloween species: Spirits, a species without legs and instead floats. add: Added a new magic mirror species: Ghosts, like spirits but with the ability to become incorporeal, traversing through solid wall. fix: Mobs unable to use storage items now can't use storage items. fix: Mobs unable to use items can now not open airlocks & closets fix: Mobs unable to pick items up can no longer pick items up and immediately drop, moving one tile at a time. fix: Mobs with intentional missing limbs (Alien larva) no longer show their limbs as missing on examine (again) fix: Golems' pref page had a missing icon, it now has one. /:cl: --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> (cherry picked from commit 096c0324028ba263e702abcc9deac7510e091941) --- code/__DEFINES/DNA.dm | 6 +- .../signals/signals_mob/signals_mob_main.dm | 3 + code/__DEFINES/is_helpers.dm | 1 + code/__DEFINES/mobs.dm | 15 +- code/__DEFINES/surgery.dm | 6 +- code/__DEFINES/traits/declarations.dm | 6 + code/__DEFINES/traits/sources.dm | 2 + code/_globalvars/traits/_traits.dm | 6 +- code/_onclick/hud/screen_objects.dm | 18 +- code/datums/mind/_mind.dm | 19 ++ code/datums/storage/storage.dm | 10 +- code/game/atom/alternate_appearance.dm | 38 +-- code/game/machinery/doors/door.dm | 6 +- code/game/objects/effects/blessing.dm | 13 +- code/game/objects/items.dm | 5 +- .../items/devices/scanners/health_analyzer.dm | 2 +- code/game/objects/items/stacks/medical.dm | 5 +- code/game/objects/items/weaponry.dm | 2 +- .../structures/crates_lockers/closets.dm | 3 + code/game/turfs/turf.dm | 2 + code/modules/antagonists/ert/ert.dm | 8 +- .../antagonists/heretic/heretic_antag.dm | 2 + .../antagonists/survivalist/survivalist.dm | 8 +- code/modules/antagonists/wizard/wizard.dm | 12 +- .../jobs/job_types/chaplain/chaplain.dm | 4 +- .../job_types/chaplain/chaplain_nullrod.dm | 2 +- code/modules/library/bibles.dm | 4 +- code/modules/lost_crew/damages/melee.dm | 2 +- code/modules/lost_crew/damages/projectile.dm | 2 +- code/modules/mining/equipment/mining_tools.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 4 +- .../living/basic/cult/constructs/wraith.dm | 1 + .../basic/space_fauna/revenant/_revenant.dm | 2 +- code/modules/mob/living/brain/brain_item.dm | 7 + code/modules/mob/living/carbon/carbon.dm | 10 +- code/modules/mob/living/carbon/examine.dm | 14 +- .../mob/living/carbon/human/_species.dm | 13 +- code/modules/mob/living/carbon/human/human.dm | 9 +- .../mob/living/carbon/human/human_defense.dm | 2 +- .../carbon/human/species_types/ghost.dm | 256 ++++++++++++++++++ .../carbon/human/species_types/golems.dm | 2 +- code/modules/mob/living/living.dm | 2 + code/modules/mob/login.dm | 3 +- code/modules/photography/camera/camera.dm | 4 +- .../camera/camera_image_capturing.dm | 12 +- code/modules/photography/photos/photo.dm | 2 +- .../guns/ballistic/bows/bow_arrows.dm | 2 +- .../guns/ballistic/bows/bow_types.dm | 2 +- code/modules/religion/burdened/psyker.dm | 2 +- code/modules/religion/deaconize.dm | 2 +- .../religion/honorbound/honorbound_trauma.dm | 2 +- .../religion/sparring/sparring_datum.dm | 2 +- .../surgery/bodyparts/dismemberment.dm | 53 ++-- code/modules/surgery/bodyparts/helpers.dm | 29 +- .../species_parts/ghost_bodyparts.dm | 51 ++++ .../surgery/organs/internal/ears/_ears.dm | 7 + .../surgery/organs/internal/eyes/_eyes.dm | 8 + .../surgery/organs/internal/liver/_liver.dm | 7 + .../surgery/organs/internal/lungs/_lungs.dm | 7 + .../organs/internal/stomach/_stomach.dm | 7 + .../surgery/organs/internal/tongue/_tongue.dm | 9 + .../modules/surgery/prosthetic_replacement.dm | 2 +- ...enshot_humanoids__datum_species_spirit.png | Bin 0 -> 2011 bytes ..._humanoids__datum_species_spirit_ghost.png | Bin 0 -> 2011 bytes config/game_options.txt | 1 + icons/hud/actions.dmi | Bin 8689 -> 9792 bytes icons/mob/human/species/ghost.dmi | Bin 0 -> 2324 bytes icons/obj/medical/organs/organs.dmi | Bin 52916 -> 52665 bytes tgstation.dme | 2 + 69 files changed, 622 insertions(+), 130 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species_types/ghost.dm create mode 100644 code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm create mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit.png create mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit_ghost.png create mode 100644 icons/mob/human/species/ghost.dmi diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 706f2d760d5..fa90b1ee083 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -213,10 +213,8 @@ GLOBAL_LIST_INIT(organ_process_order, list( ORGAN_SLOT_XENO_RESINSPINNER, ORGAN_SLOT_XENO_ACIDGLAND, ORGAN_SLOT_XENO_NEUROTOXINGLAND, - ORGAN_SLOT_XENO_EGGSAC,)) - -//Defines for Golem Species IDs -#define SPECIES_GOLEM "golem" + ORGAN_SLOT_XENO_EGGSAC, +)) // Defines for used in creating "perks" for the species preference pages. /// A key that designates UI icon displayed on the perk. diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 2e11369e52d..53fa1021a0f 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -80,6 +80,9 @@ #define COMSIG_MOB_MIND_BEFORE_MIDROUND_ROLL "mob_mind_transferred_out_of" #define CANCEL_ROLL (1<<1) +///signal sent when a mob has their holy role set. Sent to the mob having their role changed. +#define COMSIG_MOB_MIND_SET_HOLY_ROLE "mob_mind_set_holy_role" + ///from base of obj/allowed(mob/M): (/obj) returns ACCESS_ALLOWED if mob has id access to the obj #define COMSIG_MOB_TRIED_ACCESS "tried_access" #define ACCESS_ALLOWED (1<<0) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4109dd9a7d3..aafd2954450 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -115,6 +115,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( //Human sub-species #define isabductor(A) (is_species(A, /datum/species/abductor)) +#define isspirit(A) (is_species(A, /datum/species/spirit)) #define isgolem(A) (is_species(A, /datum/species/golem)) #define islizard(A) (is_species(A, /datum/species/lizard)) #define isashwalker(A) (is_species(A, /datum/species/lizard/ashwalker)) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 9dd06dae572..0c48ccdcf43 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -153,18 +153,20 @@ #define BODYTYPE_PLANT (1<<6) //This limb is shadowy and will regen if shadowheal is active #define BODYTYPE_SHADOW (1<<7) +//This limb is a ghost limb and can phase through walls. +#define BODYTYPE_GHOST (1<<8) // SKYRAT EDIT ADDITION /// Nanomachine bodypart -#define BODYTYPE_NANO (1<<8) +#define BODYTYPE_NANO (1<<9) ///The limb fits a modular custom shape -#define BODYSHAPE_CUSTOM (1<<9) +#define BODYSHAPE_CUSTOM (1<<10) ///The limb fits a taur body -#define BODYSHAPE_TAUR (1<<10) +#define BODYSHAPE_TAUR (1<<11) ///The limb causes shoes to no longer be displayed, useful for taurs. -#define BODYSHAPE_HIDE_SHOES (1<<11) +#define BODYSHAPE_HIDE_SHOES (1<<12) ///The limb causes glasses and hats to be drawn on layers 5 and 4 respectively. Currently used for snouts with the (Top) suffix, which are drawn on layer 6 and would normally cover facewear -#define BODYSHAPE_ALT_FACEWEAR_LAYER (1<<12) +#define BODYSHAPE_ALT_FACEWEAR_LAYER (1<<13) // SKYRAT EDIT END @@ -188,11 +190,14 @@ #define SPECIES_DULLAHAN "dullahan" #define SPECIES_ETHEREAL "ethereal" #define SPECIES_ETHEREAL_LUSTROUS "lustrous" +#define SPECIES_GHOST "ghost" +#define SPECIES_GOLEM "golem" #define SPECIES_FELINE "felinid" #define SPECIES_FLYPERSON "fly" #define SPECIES_HUMAN "human" #define SPECIES_JELLYPERSON "jelly" #define SPECIES_SLIMEPERSON "slime" +#define SPECIES_SPIRIT "spirit" #define SPECIES_LUMINESCENT "luminescent" #define SPECIES_STARGAZER "stargazer" #define SPECIES_LIZARD "lizard" diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm index 4ebd7bad0b7..a79522e6e21 100644 --- a/code/__DEFINES/surgery.dm +++ b/code/__DEFINES/surgery.dm @@ -32,10 +32,12 @@ #define ORGAN_HAZARDOUS (1<<12) /// This is an external organ, not an inner one. Used in several checks. #define ORGAN_EXTERNAL (1<<13) +/// This is a ghost organ, which can be used for wall phasing. +#define ORGAN_GHOST (1<<14) /// This is a mutant organ, having this makes you a -derived mutant to health analyzers. -#define ORGAN_MUTANT (1<<14) +#define ORGAN_MUTANT (1<<15) /// BUBBER EDIT ADD - Nanoswarm organ -#define ORGAN_NANOMACHINE (1<<15) +#define ORGAN_NANOMACHINE (1<<16) /// Scarring on the right eye #define RIGHT_EYE_SCAR (1<<0) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 7b8d40cd831..7cd1083b798 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -750,6 +750,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Cannot be turned into a funny skeleton by the plasma river #define TRAIT_NO_PLASMA_TRANSFORM "no_plasma_transform" +/// Mind trait that allows you to see blessed tiles. +#define TRAIT_SEE_BLESSED_TILES "sees_blessed_tiles" + /// Weather immunities, also protect mobs inside them. #define TRAIT_LAVA_IMMUNE "lava_immune" //Used by lava turfs and The Floor Is Lava. #define TRAIT_ASHSTORM_IMMUNE "ashstorm_immune" @@ -976,6 +979,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// This mob always lands on their feet when they fall, for better or for worse. #define TRAIT_CATLIKE_GRACE "catlike_grace" +///Won't show up on cameras when they snap a photo. +#define TRAIT_INVISIBLE_TO_CAMERA "invisible_to_camera" + ///if the atom has a sticker attached to it #define TRAIT_STICKERED "stickered" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index bd374ac0a67..edea6b63478 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -33,6 +33,8 @@ #define CHANGELING_TRAIT "changeling" #define CULT_TRAIT "cult" #define LICH_TRAIT "lich" +///Comes from a holy source. +#define HOLY_TRAIT "holy" #define VENDING_MACHINE_TRAIT "vending_machine" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 046a269a910..9b72332fd42 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -311,6 +311,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GARLIC_BREATH" = TRAIT_GARLIC_BREATH, "TRAIT_GARLIC_REAGENT" = TRAIT_GARLIC_REAGENT, "TRAIT_GENELESS" = TRAIT_GENELESS, + "TRAIT_GHOSTROLE_ON_REVIVE" = TRAIT_GHOSTROLE_ON_REVIVE, "TRAIT_GIANT" = TRAIT_GIANT, "TRAIT_GODMODE" = TRAIT_GODMODE, "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, @@ -357,6 +358,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_IS_WET" = TRAIT_IS_WET, "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, + "TRAIT_SEE_BLESSED_TILES" = TRAIT_SEE_BLESSED_TILES, "TRAIT_SYNDIE_KISS" = TRAIT_SYNDIE_KISS, "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, @@ -624,9 +626,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NOGRAV_ALWAYS_DRIFT" = TRAIT_NOGRAV_ALWAYS_DRIFT, "TRAIT_SPEECH_BOOSTER" = TRAIT_SPEECH_BOOSTER, "TRAIT_MINING_PARRYING" = TRAIT_MINING_PARRYING, - "TRAIT_ILLUSORY_EFFECT" = TRAIT_ILLUSORY_EFFECT, - "TRAIT_GHOSTROLE_ON_REVIVE" = TRAIT_GHOSTROLE_ON_REVIVE, "TRAIT_IGNORE_FIRE_PROTECTION" = TRAIT_IGNORE_FIRE_PROTECTION, + "TRAIT_ILLUSORY_EFFECT" = TRAIT_ILLUSORY_EFFECT, + "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, "TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR, "TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR, "HUMAN_SENSORS_VISIBLE_WITHOUT_SUIT" = HUMAN_SENSORS_VISIBLE_WITHOUT_SUIT, diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 6b40f5858b9..4062759c1fa 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -763,6 +763,9 @@ var/mob/living/carbon/C = usr C.check_self_for_injuries() +/atom/movable/screen/healthdoll/proc/update_body_zones() + return + /atom/movable/screen/healthdoll/living icon_state = "fullhealth0" screen_loc = ui_living_healthdoll @@ -777,15 +780,22 @@ /atom/movable/screen/healthdoll/human/Initialize(mapload, datum/hud/hud_owner) . = ..() + if(isnull(hud_owner)) //we require a hud owner to work properly, so return out. + return + update_body_zones() + update_appearance() + +/atom/movable/screen/healthdoll/human/update_body_zones() limbs = list() - for(var/i in GLOB.all_body_zones) + vis_contents.Cut() + var/mob/living/carbon/human/owner = hud.mymob + for(var/body_zone in owner.get_all_limbs()) var/atom/movable/screen/healthdoll_limb/limb = new(src, null) // layer chest above other limbs, it's the center after all - limb.layer = i == BODY_ZONE_CHEST ? layer + 0.05 : layer - limbs[i] = limb + limb.layer = body_zone == BODY_ZONE_CHEST ? layer + 0.05 : layer + limbs[body_zone] = limb // why viscontents? why not overlays? - because i want to animate filters vis_contents += limb - update_appearance() /atom/movable/screen/healthdoll/human/Destroy() QDEL_LIST_ASSOC_VAL(limbs) diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index e676a877864..ad05f409ff6 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -139,6 +139,9 @@ if(NAMEOF(src, assigned_role)) set_assigned_role(var_value) . = TRUE + if(NAMEOF(src, holy_role)) + set_holy_role(var_value) + . = TRUE if(!isnull(.)) datum_flags |= DF_VAR_EDITED return @@ -508,6 +511,22 @@ . = assigned_role assigned_role = new_role +///Sets your holy role, giving/taking away traits related to if you're gaining/losing it. +/datum/mind/proc/set_holy_role(new_holy_role) + if(holy_role == new_holy_role) + return + var/was_holy = holy_role + holy_role = new_holy_role + if(holy_role) + ADD_TRAIT(src, TRAIT_SEE_BLESSED_TILES, HOLY_TRAIT) + else + REMOVE_TRAIT(src, TRAIT_SEE_BLESSED_TILES, HOLY_TRAIT) + SEND_SIGNAL(current, COMSIG_MOB_MIND_SET_HOLY_ROLE, new_holy_role) + //the signal stops tracking when losing holy roles, but since we're gaining it, give us our HUDs if we're becoming holy. + if(!was_holy && holy_role) + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(current) + /// Sets us to the passed job datum, then greets them to their new job. /// Use this one for when you're assigning this mind to a new job for the first time, /// or for when someone's receiving a job they'd really want to be greeted to. diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 0f5b2b4deb7..ca22f81573e 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -921,7 +921,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return open_storage_on_signal(source, user) ? CLICK_ACTION_SUCCESS : NONE /// Opens the storage to the mob, showing them the contents to their UI. -/datum/storage/proc/open_storage(mob/to_show, can_reach_target = parent) // BUBBER EDIT CHANGE - ORIGINAL: /datum/storage/proc/open_storage(mob/to_show) +/datum/storage/proc/open_storage(mob/living/to_show, can_reach_target = parent) // BUBBER EDIT CHANGE - ORIGINAL: /datum/storage/proc/open_storage(mob/living/to_show) if(isobserver(to_show)) show_contents(to_show) return FALSE @@ -929,6 +929,14 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(!isliving(to_show) || !to_show.can_perform_action(can_reach_target, ALLOW_RESTING | FORBID_TELEKINESIS_REACH)) // BUBBER EDIT CHANGE -- ORIGINAL: if(!isliving(to_show) || !to_show.can_perform_action(parent, ALLOW_RESTING | FORBID_TELEKINESIS_REACH)) return FALSE + //because of the check above, it's safe to assume we're living now. + if(!(to_show.mobility_flags & MOBILITY_STORAGE)) + return FALSE + + //because of the check above, it's safe to assume we're living now. + if(!(to_show.mobility_flags & MOBILITY_STORAGE)) + return FALSE + if(locked) if(!silent) parent.balloon_alert(to_show, "closed!") diff --git a/code/game/atom/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm index 09b5c1190d1..6df75d2508a 100644 --- a/code/game/atom/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -101,6 +101,13 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) var/add_ghost_version = FALSE var/datum/atom_hud/alternate_appearance/basic/observers/ghost_appearance uses_global_hud_category = FALSE + ///List of signals we hook onto which we'll update HUDs when we receive this. + var/list/signals_registering = list( + COMSIG_MOB_ANTAGONIST_REMOVED, + COMSIG_MOB_GHOSTIZED, + COMSIG_MOB_MIND_TRANSFERRED_INTO, + COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, + ) /datum/atom_hud/alternate_appearance/basic/New(key, image/I, options = AA_TARGET_SEE_APPEARANCE) ..() @@ -131,20 +138,10 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) QDEL_NULL(ghost_appearance) /datum/atom_hud/alternate_appearance/basic/track_mob(mob/new_viewer) - RegisterSignals(new_viewer, list( - COMSIG_MOB_ANTAGONIST_REMOVED, - COMSIG_MOB_GHOSTIZED, - COMSIG_MOB_MIND_TRANSFERRED_INTO, - COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, - ), PROC_REF(check_hud), override = TRUE) + RegisterSignals(new_viewer, signals_registering, PROC_REF(check_hud), override = TRUE) /datum/atom_hud/alternate_appearance/basic/untrack_mob(mob/former_viewer) - UnregisterSignal(former_viewer, list( - COMSIG_MOB_ANTAGONIST_REMOVED, - COMSIG_MOB_GHOSTIZED, - COMSIG_MOB_MIND_TRANSFERRED_INTO, - COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, - )) + UnregisterSignal(former_viewer, signals_registering) /datum/atom_hud/alternate_appearance/basic/add_atom_to_hud(atom/A) LAZYINITLIST(A.hud_list) @@ -189,13 +186,18 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) antag_datum_type = /datum/antagonist/cult /datum/atom_hud/alternate_appearance/basic/blessed_aware + signals_registering = list( + COMSIG_MOB_ANTAGONIST_REMOVED, + COMSIG_MOB_GHOSTIZED, + COMSIG_MOB_MIND_TRANSFERRED_INTO, + COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, + COMSIG_MOB_MIND_SET_HOLY_ROLE, + ) -/datum/atom_hud/alternate_appearance/basic/blessed_aware/mobShouldSee(mob/M) - if(M.mind?.holy_role) - return TRUE - if (istype(M, /mob/living/basic/construct/wraith)) - return TRUE - if(isrevenant(M) || IS_WIZARD(M) || IS_HERETIC(M)) +/datum/atom_hud/alternate_appearance/basic/blessed_aware/mobShouldSee(mob/viewing_mob) + if(!viewing_mob.mind) + return FALSE + if(HAS_MIND_TRAIT(viewing_mob, TRAIT_SEE_BLESSED_TILES)) return TRUE return FALSE diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 517fe1a65ae..eda6b70b69d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -314,7 +314,7 @@ return return ..() -/obj/machinery/door/proc/try_to_activate_door(mob/user, access_bypass = FALSE) +/obj/machinery/door/proc/try_to_activate_door(mob/living/user, access_bypass = FALSE) add_fingerprint(user) if(operating || (obj_flags & EMAGGED) || !can_open_with_hands) return @@ -328,6 +328,10 @@ run_animation(DOOR_DENY_ANIMATION) /obj/machinery/door/allowed(mob/M) + if(isliving(M)) + var/mob/living/living_user = M + if(!(living_user.mobility_flags & MOBILITY_USE)) + return FALSE if(emergency) return TRUE if(unrestricted_side(M)) diff --git a/code/game/objects/effects/blessing.dm b/code/game/objects/effects/blessing.dm index 5308625a4d9..540be85db4e 100644 --- a/code/game/objects/effects/blessing.dm +++ b/code/game/objects/effects/blessing.dm @@ -9,19 +9,18 @@ /obj/effect/blessing/Initialize(mapload) . = ..() - for(var/obj/effect/blessing/B in loc) - if(B != src) - return INITIALIZE_HINT_QDEL - var/image/I = image(icon = 'icons/effects/effects.dmi', icon_state = "blessed", layer = ABOVE_NORMAL_TURF_LAYER, loc = src) - I.alpha = 64 - I.appearance_flags = RESET_ALPHA - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessed_aware, "blessing", I) + var/image/blessing_icon = image(icon = 'icons/effects/effects.dmi', icon_state = "blessed", layer = ABOVE_NORMAL_TURF_LAYER, loc = src) + blessing_icon.alpha = 64 + blessing_icon.appearance_flags = RESET_ALPHA + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessed_aware, "blessing", blessing_icon) + RegisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORTING, PROC_REF(block_cult_teleport)) /obj/effect/blessing/Destroy() UnregisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORTING) return ..() +///Called from intercept teleport signal, blocks cult teleporting from being able to teleport on us. /obj/effect/blessing/proc/block_cult_teleport(datum/source, channel, turf/origin) SIGNAL_HANDLER diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d5525f5393c..3a0e8de4a0a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -606,12 +606,15 @@ return return attempt_pickup(user) -/obj/item/proc/attempt_pickup(mob/user, skip_grav = FALSE) +/obj/item/proc/attempt_pickup(mob/living/user, skip_grav = FALSE) . = TRUE if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup. return + if(!(user.mobility_flags & MOBILITY_PICKUP)) + return + if(!skip_grav) //Heavy gravity makes picking up things very slow. var/grav = user.has_gravity() diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 5d09226154e..92bb20f69d4 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -229,7 +229,7 @@ if(mode == SCANNER_VERBOSE) // Follow same body zone list every time so it's consistent across all humans - for(var/zone in GLOB.all_body_zones) + for(var/zone in carbontarget.get_all_limbs()) var/obj/item/bodypart/limb = carbontarget.get_bodypart(zone) if(isnull(limb)) dmgreport += "" diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 93379d0436b..3f1ae1fb3b4 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -248,8 +248,7 @@ /// Checks a bunch of stuff to see if we can heal the patient, including can_heal /// Gives a feedback if we can't ultimatly heal the patient (unless silent is TRUE) /obj/item/stack/medical/proc/try_heal_checks(mob/living/patient, mob/living/user, healed_zone, silent = FALSE) - if(!(healed_zone in GLOB.all_body_zones)) - stack_trace("Invalid zone ([healed_zone || "null"]) passed to try_heal_checks.") + if(!(healed_zone in patient.get_all_limbs())) healed_zone = BODY_ZONE_CHEST if(!can_heal(patient, user, healed_zone, silent)) @@ -747,7 +746,7 @@ oof_ouch.apply_wound(bone, wound_source = "bone gel") var/datum/wound/blunt/bone/critical/oof_OUCH = new oof_OUCH.apply_wound(bone, wound_source = "bone gel") - for(var/zone in GLOB.all_body_zones) + for(var/zone in patient.get_all_limbs()) patient.apply_damage(60, BRUTE, zone) use(1) return BRUTELOSS diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index c0c7f060805..ec8ed1ea802 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -919,7 +919,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune) \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) /obj/item/melee/skateboard/holyboard/proc/on_cult_rune_removed(obj/effect/target, mob/living/user) SIGNAL_HANDLER diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a1c3f213d1a..d80fd500987 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -433,6 +433,9 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) return TRUE if(welded || locked) return FALSE + if(isliving(user)) + if(!(user.mobility_flags & MOBILITY_USE)) + return FALSE if(strong_grab) if(user) to_chat(user, span_danger("[pulledby] has an incredibly strong grip on [src], preventing it from opening.")) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3212516f471..c7517f2ee8d 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -516,6 +516,8 @@ GLOBAL_LIST_EMPTY(station_turfs) qdel(L) /turf/proc/Bless() + if(locate(/obj/effect/blessing) in src) + return new /obj/effect/blessing(src) ////////////////////////////// diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 325bdd70a60..45c7bd1c957 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -132,14 +132,14 @@ /datum/antagonist/ert/medic/inquisitor/on_gain() . = ..() - owner.holy_role = HOLY_ROLE_PRIEST + owner.set_holy_role(HOLY_ROLE_PRIEST) /datum/antagonist/ert/security/inquisitor outfit = /datum/outfit/centcom/ert/security/inquisitor /datum/antagonist/ert/security/inquisitor/on_gain() . = ..() - owner.holy_role = HOLY_ROLE_PRIEST + owner.set_holy_role(HOLY_ROLE_PRIEST) /datum/antagonist/ert/chaplain role = "Chaplain" @@ -150,14 +150,14 @@ /datum/antagonist/ert/chaplain/on_gain() . = ..() - owner.holy_role = HOLY_ROLE_PRIEST + owner.set_holy_role(HOLY_ROLE_PRIEST) /datum/antagonist/ert/commander/inquisitor outfit = /datum/outfit/centcom/ert/commander/inquisitor /datum/antagonist/ert/commander/inquisitor/on_gain() . = ..() - owner.holy_role = HOLY_ROLE_PRIEST + owner.set_holy_role(HOLY_ROLE_PRIEST) /datum/antagonist/ert/intern name = "CentCom Intern" diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 69ed76df700..b9472e0081c 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -274,6 +274,7 @@ gain_knowledge(starting_knowledge) + ADD_TRAIT(owner, TRAIT_SEE_BLESSED_TILES, REF(src)) addtimer(CALLBACK(src, PROC_REF(passive_influence_gain)), passive_gain_timer) // Gain +1 knowledge every 20 minutes. return ..() @@ -283,6 +284,7 @@ var/datum/heretic_knowledge/knowledge = researched_knowledge[knowledge_index] knowledge.on_lose(owner.current, src) + REMOVE_TRAIT(owner, TRAIT_SEE_BLESSED_TILES, REF(src)) QDEL_LIST_ASSOC_VAL(researched_knowledge) return ..() diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm index 01000da5908..8bb77ab71c0 100644 --- a/code/modules/antagonists/survivalist/survivalist.dm +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -51,11 +51,13 @@ /datum/antagonist/survivalist/magic/on_gain() . = ..() - ADD_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) + owner.add_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(owner.current) /datum/antagonist/survivalist/magic/on_removal() - REMOVE_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) - return..() + owner.remove_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) + return ..() /// Applied by the battle royale objective /datum/antagonist/survivalist/battle_royale diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 617908b5ba6..db9203fdf49 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -59,10 +59,12 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) /datum/antagonist/wizard_minion/on_gain() create_objectives() . = ..() - ADD_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) + owner.add_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(owner.current) /datum/antagonist/wizard_minion/on_removal() - REMOVE_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) + owner.remove_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) return ..() /datum/antagonist/wizard_minion/proc/create_objectives() @@ -90,7 +92,9 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) . = ..() if(allow_rename) rename_wizard() - ADD_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) + owner.add_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(owner.current) /datum/antagonist/wizard/Destroy() QDEL_NULL(ritual) @@ -184,7 +188,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) qdel(spell) owner.current.actions -= spell - REMOVE_TRAIT(owner, TRAIT_MAGICALLY_GIFTED, REF(src)) + owner.remove_traits(list(TRAIT_MAGICALLY_GIFTED, TRAIT_SEE_BLESSED_TILES), REF(src)) return ..() /datum/antagonist/wizard/proc/equip_wizard() diff --git a/code/modules/jobs/job_types/chaplain/chaplain.dm b/code/modules/jobs/job_types/chaplain/chaplain.dm index 6de60d67004..6f84c0f840a 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain.dm @@ -45,7 +45,7 @@ var/obj/item/book/bible/booze/holy_bible = new if(GLOB.religion) if(human_spawned.mind) - human_spawned.mind.holy_role = HOLY_ROLE_PRIEST + human_spawned.mind.set_holy_role(HOLY_ROLE_PRIEST) holy_bible.deity_name = GLOB.deity holy_bible.name = GLOB.bible_name // These checks are important as there's no guarantee the "HOLY_ROLE_HIGHPRIEST" chaplain has selected a bible skin. @@ -62,7 +62,7 @@ GLOB.religious_sect.on_conversion(human_spawned) return if(human_spawned.mind) - human_spawned.mind.holy_role = HOLY_ROLE_HIGHPRIEST + human_spawned.mind.set_holy_role(HOLY_ROLE_HIGHPRIEST) var/new_religion = player_client?.prefs?.read_preference(/datum/preference/name/religion) || DEFAULT_RELIGION var/new_deity = player_client?.prefs?.read_preference(/datum/preference/name/deity) || DEFAULT_DEITY diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index 4d958b7e7ff..ff0690ffaed 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -35,7 +35,7 @@ on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune, /obj/effect/cosmic_rune), \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) if((!GLOB.holy_weapon_type || !station_holy_item) && type == /obj/item/nullrod) var/list/rods = list() diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 4b84c32873e..112f75aa402 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -371,12 +371,12 @@ GLOBAL_LIST_INIT(bibleitemstates, list( tip_text = "Clear rune", \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune, /obj/effect/cosmic_rune), \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) /obj/item/book/bible/syndicate/attack_self(mob/living/carbon/human/user, modifiers) if(!uses || !istype(user)) return - user.mind.holy_role = HOLY_ROLE_PRIEST + user.mind.set_holy_role(HOLY_ROLE_PRIEST) uses -= 1 to_chat(user, span_userdanger("You try to open the book AND IT BITES YOU!")) playsound(src.loc, 'sound/effects/snap.ogg', 50, TRUE) diff --git a/code/modules/lost_crew/damages/melee.dm b/code/modules/lost_crew/damages/melee.dm index 4896930772a..462e22a2b41 100644 --- a/code/modules/lost_crew/damages/melee.dm +++ b/code/modules/lost_crew/damages/melee.dm @@ -13,7 +13,7 @@ var/hits = ((max_hits - min_hits) * severity + min_hits) for(var/i in 1 to hits) weapon.attack(body, body) //needs an attacker, no reason it cant be the body as well - body.zone_selected = pick(GLOB.all_body_zones) + body.zone_selected = pick(body.get_all_limbs()) /datum/corpse_damage/cause_of_death/melee_weapon/proc/get_weapon(mob/living/carbon/human/body) return new weapon(null) diff --git a/code/modules/lost_crew/damages/projectile.dm b/code/modules/lost_crew/damages/projectile.dm index 64541cf1eaf..f38ef63dc45 100644 --- a/code/modules/lost_crew/damages/projectile.dm +++ b/code/modules/lost_crew/damages/projectile.dm @@ -13,7 +13,7 @@ var/hits = ((max_hits - min_hits) * severity + min_hits) for(var/i in 1 to hits) - body.projectile_hit(projectile, def_zone = pick(GLOB.all_body_zones), piercing_hit = TRUE) + body.projectile_hit(projectile, def_zone = pick(body.get_all_limbs()), piercing_hit = TRUE) /datum/corpse_damage/cause_of_death/projectile/laser projectile = /obj/projectile/beam/laser diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index c881d9dce45..00620f1074d 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -373,7 +373,7 @@ var/atom/throw_target = get_edge_target_turf(target_mob, get_dir(user, get_step_away(target_mob, user))) target_mob.throw_at(throw_target, 2, 2, user, gentle = TRUE) target_mob.Knockdown(2 SECONDS) - var/body_zone = pick(GLOB.all_body_zones) + var/body_zone = pick(user.get_all_limbs()) user.apply_damage(force / recoil_factor, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE)) to_chat(user, span_danger("The weight of the Big Slappy recoils!")) log_combat(user, user, "recoiled Big Slappy into") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a2e605fdcc3..db9ded291ca 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -66,6 +66,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /// The POI we're orbiting (orbit menu) var/orbiting_ref + ///The description camera obscuras have when they get a photo of us. + var/photo_description = "You can also see a g-g-g-g-ghooooost!" var/static/list/observer_hud_traits = list( TRAIT_SECURITY_HUD, TRAIT_MEDICAL_HUD, @@ -148,7 +150,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) - return "You can also see a g-g-g-g-ghooooost!" + return photo_description /mob/dead/observer/narsie_act() var/old_color = color diff --git a/code/modules/mob/living/basic/cult/constructs/wraith.dm b/code/modules/mob/living/basic/cult/constructs/wraith.dm index e73718d4fe3..141c23bdcc2 100644 --- a/code/modules/mob/living/basic/cult/constructs/wraith.dm +++ b/code/modules/mob/living/basic/cult/constructs/wraith.dm @@ -20,6 +20,7 @@ /mob/living/basic/construct/wraith/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_SEE_BLESSED_TILES, INNATE_TRAIT) var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/jaunt = locate() in actions if(isnull(jaunt)) return . diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 5ac15722a5b..2f8c4318802 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -95,7 +95,7 @@ /mob/living/basic/revenant/Initialize(mapload) . = ..() AddElement(/datum/element/simple_flying) - add_traits(list(TRAIT_SPACEWALK, TRAIT_SIXTHSENSE, TRAIT_FREE_HYPERSPACE_MOVEMENT), INNATE_TRAIT) + add_traits(list(TRAIT_SPACEWALK, TRAIT_SIXTHSENSE, TRAIT_FREE_HYPERSPACE_MOVEMENT, TRAIT_SEE_BLESSED_TILES), INNATE_TRAIT) grant_actions_by_list(abilities) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 759b04c91e1..27e50cd4b4f 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -498,6 +498,13 @@ desc = "This juicy piece of meat has a oversized brain stem and cerebellum, with not much of a limbic system to speak of at all. You would expect its owner to be pretty cold blooded." organ_traits = list(TRAIT_TACKLING_TAILED_DEFENDER) +/obj/item/organ/brain/ghost + name = "ghost brain" + desc = "How are you even able to hold this?" + icon_state = "brain-ghost" + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/brain/abductor name = "grey brain" desc = "A piece of juicy meat found in an ayy lmao's head." diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0323136b0c6..56ce9cb85c5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -922,7 +922,7 @@ /// Creates body parts for this carbon completely from scratch. /// Optionally takes a map of body zones to what type to instantiate instead of them. /mob/living/carbon/proc/create_bodyparts(list/overrides) - var/list/bodyparts_paths = bodyparts.Copy() + var/list/bodyparts_paths = overrides?.Copy() || bodyparts.Copy() bodyparts = list() for(var/obj/item/bodypart/bodypart_path as anything in bodyparts_paths) var/real_body_part_path = overrides?[initial(bodypart_path.body_zone)] || bodypart_path @@ -969,7 +969,6 @@ synchronize_bodytypes() synchronize_bodyshapes() - ///Proc to hook behavior on bodypart removals. Do not directly call. You're looking for [/obj/item/bodypart/proc/drop_limb()]. /mob/living/carbon/proc/remove_bodypart(obj/item/bodypart/old_bodypart, special) SHOULD_NOT_OVERRIDE(TRUE) @@ -1297,6 +1296,13 @@ return AddComponent(/datum/component/rot, 6 MINUTES, 10 MINUTES, 1) +/mob/living/carbon/get_photo_description(obj/item/camera/camera) + if(HAS_TRAIT(src, TRAIT_INVISIBLE_TO_CAMERA)) + if(camera.see_ghosts) + return /mob/dead/observer::photo_description + return null + return ..() + /** * This proc is used to determine whether or not the mob can handle touching an acid affected object. */ diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 558e9e6e28c..225084863c9 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -49,12 +49,10 @@ if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/brain)) . += span_deadsay("It appears that [t_his] brain is missing...") - var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) var/list/disabled = list() for(var/obj/item/bodypart/body_part as anything in bodyparts) if(body_part.bodypart_disabled) disabled += body_part - missing -= body_part.body_zone for(var/obj/item/embedded as anything in body_part.embedded_objects) if(embedded.get_embed().stealthy_embed) continue @@ -85,16 +83,16 @@ //stores missing limbs var/l_limbs_missing = 0 var/r_limbs_missing = 0 - for(var/gone in missing) - if(gone == BODY_ZONE_HEAD) - . += span_deadsay("[t_His] [parse_zone(gone)] is missing!") + for(var/missing_limb in get_missing_limbs()) + if(missing_limb == BODY_ZONE_HEAD) + . += span_deadsay("[t_His] [parse_zone(missing_limb)] is missing!") continue - if(gone == BODY_ZONE_L_ARM || gone == BODY_ZONE_L_LEG) + if(missing_limb == BODY_ZONE_L_ARM || missing_limb == BODY_ZONE_L_LEG) l_limbs_missing++ - else if(gone == BODY_ZONE_R_ARM || gone == BODY_ZONE_R_LEG) + else if(missing_limb == BODY_ZONE_R_ARM || missing_limb == BODY_ZONE_R_LEG) r_limbs_missing++ - . += span_boldwarning("[capitalize(t_his)] [parse_zone(gone)] is missing!") + . += span_boldwarning("[capitalize(t_his)] [parse_zone(missing_limb)] is missing!") if(l_limbs_missing >= 2 && r_limbs_missing == 0) . += span_tinydanger("[t_He] look[p_s()] all right now...") diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index ccc66e12bc9..16cd84c494d 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -388,6 +388,9 @@ GLOBAL_LIST_EMPTY(features_by_species) human_who_gained_species.mob_respiration_type = inherent_respiration_type human_who_gained_species.butcher_results = knife_butcher_results?.Copy() + //update body zones to match what they are supposed to have + human_who_gained_species.hud_used?.healthdoll.update_body_zones() + // BUBBER EDIT BEGIN - Bake digitigrade into the species on apply try_make_digitigrade(human_who_gained_species) // BUBBER EDIT END @@ -438,6 +441,9 @@ GLOBAL_LIST_EMPTY(features_by_species) human_who_gained_species.living_flags &= ~STOP_OVERLAY_UPDATE_BODY_PARTS + //we don't allow it to update during species transition, so update it now + human_who_gained_species.hud_used?.healthdoll.update_appearance() + /** * Proc called when a carbon is no longer this species. * @@ -639,6 +645,8 @@ GLOBAL_LIST_EMPTY(features_by_species) switch(slot) if(ITEM_SLOT_HANDS) + if(!(H.mobility_flags & MOBILITY_PICKUP)) + return FALSE if(H.get_empty_held_indexes()) return TRUE return FALSE @@ -2066,7 +2074,10 @@ GLOBAL_LIST_EMPTY(features_by_species) /// Creates body parts for the target completely from scratch based on the species /datum/species/proc/create_fresh_body(mob/living/carbon/target) - target.create_bodyparts(bodypart_overrides) + var/list/override_limbs = list() + for(var/bodypart in bodypart_overrides) + override_limbs += bodypart_overrides[bodypart] + target.create_bodyparts(override_limbs) /** * Checks if the species has a head with these head flags, by default. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 169072407aa..bea69cc45ce 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -747,7 +747,8 @@ // Updates the health bar, also sends signal . = ..() // Handles changing limb colors and stuff - hud_used.healthdoll?.update_appearance() + if(!(living_flags & STOP_OVERLAY_UPDATE_BODY_PARTS)) + hud_used.healthdoll?.update_appearance() /mob/living/carbon/human/fully_heal(heal_flags = HEAL_ALL) if(heal_flags & HEAL_NEGATIVE_MUTATIONS) @@ -1204,6 +1205,12 @@ /mob/living/carbon/human/species/lizard/silverscale race = /datum/species/lizard/silverscale +/mob/living/carbon/human/species/spirit + race = /datum/species/spirit + +/mob/living/carbon/human/species/ghost + race = /datum/species/spirit/ghost + /mob/living/carbon/human/species/ethereal race = /datum/species/ethereal diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 83f2339b7e4..3b469cf4ab3 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -566,7 +566,7 @@ combined_msg += span_notice("You check yourself for injuries.") - var/list/missing = GLOB.all_body_zones.Copy() + var/list/missing = get_all_limbs() for(var/obj/item/bodypart/body_part as anything in bodyparts) missing -= body_part.body_zone diff --git a/code/modules/mob/living/carbon/human/species_types/ghost.dm b/code/modules/mob/living/carbon/human/species_types/ghost.dm new file mode 100644 index 00000000000..78785177b85 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species_types/ghost.dm @@ -0,0 +1,256 @@ +///Spirit mob that lacks legs but still roams the station as part of the unliving. +/datum/species/spirit + name = "Spirit" + id = SPECIES_SPIRIT + inherent_traits = list( + TRAIT_GENELESS, + TRAIT_NEVER_WOUNDED, + TRAIT_NOBLOOD, + TRAIT_NODISMEMBER, + TRAIT_NO_DNA_COPY, + TRAIT_NO_PLASMA_TRANSFORM, + TRAIT_NO_UNDERWEAR, + TRAIT_UNHUSKABLE, + TRAIT_NO_FLOATING_ANIM, + TRAIT_MOVE_FLYING, + ) + inherent_biotypes = MOB_SPIRIT + no_equip_flags = ITEM_SLOT_FEET + changesource_flags = MIRROR_BADMIN | WABBAJACK | SLIME_EXTRACT + sexes = FALSE + meat = /obj/item/ectoplasm + + mutantheart = null + mutantappendix = null + mutantears = /obj/item/organ/ears/ghost + mutantstomach = /obj/item/organ/stomach/ghost + mutantliver = /obj/item/organ/liver/ghost + mutantlungs = /obj/item/organ/lungs/ghost + mutanteyes = /obj/item/organ/eyes/ghost + mutantbrain = /obj/item/organ/brain/ghost + mutanttongue = /obj/item/organ/tongue/ghost + + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/ghost, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/ghost/spirit, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/ghost, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/ghost, + ) + + ///Boolean on whether this species type is available at roundstart during halloween, used to deny subtypes. + var/halloween_exclusive = TRUE + +/datum/species/spirit/check_roundstart_eligible() + if(check_holidays(HALLOWEEN) && halloween_exclusive) + return TRUE + return ..() + +/datum/species/spirit/get_physical_attributes() + return "Spirits are the spiritual remains of long-passed entities. They lack legs, can fly, but still eat, breathe, hear and see." + +/datum/species/spirit/get_species_description() + return "Spirits are spirits of long-dead creatures whom, for one reason or another, still roam around." + +/datum/species/spirit/get_species_lore() + return list( + "Spirits are the non-physical remains that linger onto their mortal coil. \ + They still need their protein and organs to keep themselves \"alive\", \ + which leads to many of them still believing they are still part of the living, \ + whether or not they are is a very open-ended debate between philosophers.", + ) + +/datum/species/spirit/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "body", + SPECIES_PERK_NAME = "Leg-less", + SPECIES_PERK_DESC = "Ghosts lack legs and float, preventing you from falling into holes in the ground.", + )) + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "shoe-prints", + SPECIES_PERK_NAME = "No Feet", + SPECIES_PERK_DESC = "You lack feet, therefore the ability to wear any shoes!", + )) + + return to_add + +/** + * Ghost subtype + * This is the type of ghost that can actually phase through walls, + * exclusive to magic mirrors & admins, as roundstart-ability to phase anywhere + * is not something that is generally fun to play against. + */ +/datum/species/spirit/ghost + name = "Ghost" + id = SPECIES_GHOST + inherent_traits = list( + TRAIT_GENELESS, + TRAIT_NEVER_WOUNDED, + TRAIT_NOBLOOD, + TRAIT_NODISMEMBER, + TRAIT_NO_DNA_COPY, + TRAIT_NO_PLASMA_TRANSFORM, + TRAIT_NO_UNDERWEAR, + TRAIT_UNHUSKABLE, + TRAIT_NO_FLOATING_ANIM, + TRAIT_MOVE_FLYING, + //ghost-unique + TRAIT_SEE_BLESSED_TILES, + ) + //they have a different chest. + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/ghost, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/ghost, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/ghost, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/ghost, + ) + changesource_flags = MIRROR_BADMIN | MIRROR_PRIDE | MIRROR_MAGIC + halloween_exclusive = FALSE + + ///Innate passthrough ability given to ghosts that allows them to phase but drops their stuff. + var/datum/action/innate/toggle_passthrough/passthrough_ability + +/datum/species/spirit/ghost/get_physical_attributes() + return "Ghosts are the spiritual remains of long-passed entities. They lack legs, can fly, can choose at will to become incorporeal, \ + but still eat, breathe, hear and see." + +/datum/species/spirit/ghost/get_species_lore() + return list( + "Ghosts are one of the spookiest creatures known in the galaxy. \ + While they still need their protein to sustain themselves, they are able to control their own bodies, \ + going through walls and getting rid of all their posessions at will. \ + Most knowledge known about them is kept secret by Nanotrasen's top Chaplains, who are keen \ + to keep it private.", + ) + +/datum/species/spirit/ghost/on_species_gain(mob/living/carbon/human/new_ghost, datum/species/old_species, pref_load, regenerate_icons) + . = ..() + passthrough_ability = new(src) + passthrough_ability.Grant(new_ghost) + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(new_ghost) + +/datum/species/spirit/ghost/on_species_loss(mob/living/carbon/human/former_ghost, datum/species/new_species, pref_load) + . = ..() + QDEL_NULL(passthrough_ability) + //this has to be called after parent so inherent traits is cleared before we update our HUDs + for(var/datum/atom_hud/alternate_appearance/basic/blessed_aware/blessed_hud in GLOB.active_alternate_appearances) + blessed_hud.check_hud(former_ghost) + +/datum/species/spirit/ghost/create_pref_unique_perks() + var/list/to_add = ..() + + to_add += list(list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "ghost", + SPECIES_PERK_NAME = "Incorporeal", + SPECIES_PERK_DESC = "Ghost are able to control their body to the extent where you can willingly make yourself able \ + to phase through anything, including your own equipment.", + )) + + return to_add + +/** + * Passthrough ability + * + * Ghost innate ability that allows them to enter ghost mode, + * which gives them the phasing ability, but makes them drop everything + * and completely unable to wear anything. + */ +/datum/action/innate/toggle_passthrough + name = "Toggle passthrough" + desc = "Toggles your ability to phase through everything, including your gear and any incompatible organs/limbs." + button_icon = 'icons/hud/actions.dmi' + button_icon_state = "ghost" + +/datum/action/innate/toggle_passthrough/Grant(mob/grant_to) + . = ..() + RegisterSignal(grant_to, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_new_limb)) + +/datum/action/innate/toggle_passthrough/Remove(mob/remove_from) + swap_mode(force_off = TRUE) + UnregisterSignal(remove_from, COMSIG_CARBON_POST_ATTACH_LIMB) + return ..() + +/datum/action/innate/toggle_passthrough/Activate() + . = ..() + if(!iscarbon(owner)) + return + swap_mode() + +/datum/action/innate/toggle_passthrough/IsAvailable(feedback) + if(!isliving(owner)) + return FALSE + var/mob/living/living_owner = owner + if(living_owner.has_reagent(/datum/reagent/water/holywater)) + return FALSE + //technically you can trap a ghost by blessing them as theyre phasing, + //but they can still be dragged out. + if(locate(/obj/effect/blessing) in get_turf(owner)) + return FALSE + var/obj/item/bodypart/chest/their_chest = living_owner.get_bodypart(BODY_ZONE_CHEST) + if(!their_chest || !(their_chest.bodytype & BODYTYPE_GHOST)) + return FALSE + return ..() + +///Called when the owner of this action gets a new limb, if it isn't a ghost-limb +///the action will turn itself off, and you'll lose said limb if you try using this action again. +/datum/action/innate/toggle_passthrough/proc/on_new_limb(mob/source, obj/item/bodypart/new_part, special) + SIGNAL_HANDLER + if(!iscarbon(owner)) + return + if(!(new_part.bodytype & BODYTYPE_GHOST)) + swap_mode(force_off = TRUE) + +///Swaps the mode, allowing us to phase through stuff but drops everything. Optional 'force_off' arg to prevent being able to turn it on. +/datum/action/innate/toggle_passthrough/proc/swap_mode(force_off) + //we can only turn off, early return if we're trying to turn it on instead. + if(force_off && HAS_TRAIT_FROM(owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT)) + return + + var/mob/living/carbon/carbon_owner = owner + var/datum/species/carbon_species = carbon_owner.dna.species + + //drop any limbs & organs that can't phase, now that you're phasing. + for(var/obj/item/bodypart/bodypart as anything in carbon_owner.bodyparts) + if(!(bodypart.bodytype & BODYTYPE_GHOST)) + bodypart.drop_limb(special = FALSE, dismembered = FALSE, move_to_floor = TRUE) + for(var/obj/item/organ/organ as anything in carbon_owner.organs) + if(!(organ.organ_flags & ORGAN_GHOST)) + organ.Remove(owner, special = FALSE) + + if(HAS_TRAIT_FROM(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT)) + REMOVE_TRAIT(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT) + carbon_owner.add_traits(list( + TRAIT_MOVE_PHASING, + TRAIT_PIERCEIMMUNE, + TRAIT_INVISIBLE_TO_CAMERA, + TRAIT_HANDS_BLOCKED, //MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_STORAGE + TRAIT_PULL_BLOCKED, //MOBILITY_PULL + TRAIT_UI_BLOCKED, //MOBILITY_UI + ), SPECIES_TRAIT) + carbon_species.update_no_equip_flags(carbon_owner, ALL) + RegisterSignal(carbon_owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(attempt_move)) + else + ADD_TRAIT(carbon_owner, TRAIT_NO_FLOATING_ANIM, SPECIES_TRAIT) + carbon_owner.remove_traits(list( + TRAIT_MOVE_PHASING, + TRAIT_PIERCEIMMUNE, + TRAIT_INVISIBLE_TO_CAMERA, + TRAIT_HANDS_BLOCKED, + TRAIT_PULL_BLOCKED, + TRAIT_UI_BLOCKED, + ), SPECIES_TRAIT) + carbon_species.update_no_equip_flags(carbon_owner, initial(carbon_species.no_equip_flags)) + UnregisterSignal(carbon_owner, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + +///Called when attempting to move to a new tile while the action is active, returns to cancel moving. +/datum/action/innate/toggle_passthrough/proc/attempt_move(mob/source, new_loc, direct) + SIGNAL_HANDLER + if(locate(/obj/effect/blessing) in new_loc) + to_chat(source, span_warning("Holy energies block your path!")) + return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index e610f05bb54..77921120468 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -85,7 +85,7 @@ to_add += list(list( SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "pickaxe", + SPECIES_PERK_ICON = "tools", SPECIES_PERK_NAME = "Natural Miners", SPECIES_PERK_DESC = "Golems can see dimly in the dark, sense minerals, break boulders, and mine stone with their bare hands. \ They can even smelt ores in an internal furnace, if their surrounding environment is hot enough.", diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fe1b697352b..b03e31f1063 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2664,6 +2664,8 @@ GLOBAL_LIST_EMPTY(fire_appearances) /// Proc to append behavior to the condition of being handsblocked. Called when the condition starts. /mob/living/proc/on_handsblocked_start() + if(active_storage) + active_storage.hide_contents(src) drop_all_held_items() add_traits(list(TRAIT_UI_BLOCKED, TRAIT_PULL_BLOCKED), TRAIT_HANDS_BLOCKED) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 6d1d404f35e..f6290670449 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -94,8 +94,7 @@ //Reload alternate appearances for(var/datum/atom_hud/alternate_appearance/alt_hud as anything in GLOB.active_alternate_appearances) - if(!alt_hud.apply_to_new_mob(src)) - alt_hud.hide_from(src, absolute = TRUE) + alt_hud.check_hud(src) update_client_colour() update_mouse_pointer() diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 1c6ac03dffd..9e9f635fe50 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -305,7 +305,9 @@ mobs_spotted += mob if(mob.stat == DEAD) dead_spotted += mob - desc += mob.get_photo_description(src) + var/info = mob.get_photo_description(src) + if(!isnull(info)) + desc += info var/psize_x = (size_x * 2 + 1) * ICON_SIZE_X var/psize_y = (size_y * 2 + 1) * ICON_SIZE_Y diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index 8f850ab1cf2..2b0387d6728 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -44,10 +44,12 @@ lighting_overlay.underlays += backdrop lighting_overlay.blend_mode = BLEND_MULTIPLY lighting += lighting_overlay - for(var/i in T.contents) - var/atom/A = i - if(!A.invisibility || (see_ghosts && isobserver(A))) - atoms += new /obj/effect/appearance_clone(newT, A) + for(var/atom/found_atom as anything in T.contents) + if(HAS_TRAIT(found_atom, TRAIT_INVISIBLE_TO_CAMERA)) + if(see_ghosts) + atoms += new /obj/effect/appearance_clone(newT, found_atom) + else if(!found_atom.invisibility || (see_ghosts && isobserver(found_atom))) + atoms += new /obj/effect/appearance_clone(newT, found_atom) skip_normal = TRUE wipe_atoms = TRUE center = locate(cloned_center_x, cloned_center_y, bottom_left.z) @@ -64,7 +66,7 @@ lighting += lighting_overlay for(var/atom/movable/A in T) if(A.invisibility) - if(!(see_ghosts && isobserver(A))) + if(!(see_ghosts && (isobserver(A) || HAS_TRAIT(A, TRAIT_INVISIBLE_TO_CAMERA)))) continue atoms += A CHECK_TICK diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 7189a64dbcb..450746c71a2 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -53,7 +53,7 @@ if(!seen) P.mobs_seen -= seen_ref continue - if(!isobserver(seen)) + if(!isobserver(seen) && !isspirit(seen)) continue set_custom_materials(list(/datum/material/hauntium =SHEET_MATERIAL_AMOUNT)) grind_results = list(/datum/reagent/hauntium = 20) diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm index bdf7897afaf..ff826883b26 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm @@ -117,7 +117,7 @@ /obj/projectile/bullet/arrow/holy/Initialize(mapload) . = ..() //50 damage to revenants - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 30) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 30) /// plastic arrows // completely dogshit quality and they break when they hit something. diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/code/modules/projectiles/guns/ballistic/bows/bow_types.dm index cc6bfbb6477..daa938015cc 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_types.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_types.dm @@ -37,7 +37,7 @@ on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune) \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 25, requires_combat_mode = FALSE) /obj/item/gun/ballistic/bow/divine/proc/on_cult_rune_removed(obj/effect/target, mob/living/user) SIGNAL_HANDLER diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index 446e794436d..6a608059c49 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -179,7 +179,7 @@ on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune, /obj/effect/cosmic_rune), \ ) - AddElement(/datum/element/bane, target_type = /mob/living/basic/revenant, damage_multiplier = 0, added_damage = 25) + AddElement(/datum/element/bane, mob_biotypes = MOB_SPIRIT, damage_multiplier = 0, added_damage = 25) name = pick(possible_names) desc = possible_names[name] diff --git a/code/modules/religion/deaconize.dm b/code/modules/religion/deaconize.dm index 20e8465ea5e..ea20e85054a 100644 --- a/code/modules/religion/deaconize.dm +++ b/code/modules/religion/deaconize.dm @@ -65,7 +65,7 @@ if(honor && (potential_deacon in honor.guilty)) honor.guilty -= potential_deacon to_chat(user, span_notice("[GLOB.deity] has bound [potential_deacon] to the code! They are now a holy role! (albeit the lowest level of such)")) - potential_deacon.mind.holy_role = HOLY_ROLE_DEACON + potential_deacon.mind.set_holy_role(HOLY_ROLE_DEACON) GLOB.religious_sect.on_conversion(potential_deacon) playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE) return TRUE diff --git a/code/modules/religion/honorbound/honorbound_trauma.dm b/code/modules/religion/honorbound/honorbound_trauma.dm index c26eb39f3b6..7b36d75f518 100644 --- a/code/modules/religion/honorbound/honorbound_trauma.dm +++ b/code/modules/religion/honorbound/honorbound_trauma.dm @@ -206,7 +206,7 @@ if(SCHOOL_NECROMANCY, SCHOOL_FORBIDDEN, SCHOOL_SANGUINE) to_chat(user, span_userdanger("[GLOB.deity] is enraged by your use of forbidden magic!")) lightningbolt(user) - user.mind.holy_role = NONE + user.mind.set_holy_role(NONE) qdel(src) owner.add_mood_event("honorbound", /datum/mood_event/banished) //add mood event after we already cleared our events to_chat(user, span_userdanger("You have been excommunicated! You are no longer holy!")) diff --git a/code/modules/religion/sparring/sparring_datum.dm b/code/modules/religion/sparring/sparring_datum.dm index 1e8abfc9f69..fbe0fe93070 100644 --- a/code/modules/religion/sparring/sparring_datum.dm +++ b/code/modules/religion/sparring/sparring_datum.dm @@ -287,7 +287,7 @@ to_chat(loser, span_userdanger("[GLOB.deity] is enraged by your lackluster sparring record!")) lightningbolt(loser) loser.add_mood_event("sparring", /datum/mood_event/banished) - loser.mind.holy_role = NONE + loser.mind.set_holy_role(NONE) to_chat(loser, span_userdanger("You have been excommunicated! You are no longer holy!")) if(STAKES_MONEY_MATCH) to_chat(loser, span_userdanger("You've lost all your money to [winner]!")) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 442ba1975bd..d0d9d1e6e83 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -389,7 +389,7 @@ /mob/living/carbon/proc/regenerate_limbs(list/excluded_zones = list()) SEND_SIGNAL(src, COMSIG_CARBON_REGENERATE_LIMBS, excluded_zones) - var/list/zone_list = GLOB.all_body_zones.Copy() + var/list/zone_list = get_all_limbs() var/list/dismembered_by_copy = body_zone_dismembered_by?.Copy() @@ -403,30 +403,31 @@ if(get_bodypart(limb_zone)) return FALSE limb = newBodyPart(limb_zone, 0, 0) - if(limb) - if(!limb.try_attach_limb(src, TRUE)) - qdel(limb) - return FALSE - limb.update_limb(is_creating = TRUE) - if (LAZYLEN(dismembered_by_copy)) - var/datum/scar/scaries = new - var/datum/wound/loss/phantom_loss = new // stolen valor, really - phantom_loss.loss_wounding_type = dismembered_by_copy?[limb_zone] - if (phantom_loss.loss_wounding_type) - scaries.generate(limb, phantom_loss) - LAZYREMOVE(dismembered_by_copy, limb_zone) // in case we're using a passed list - else - qdel(scaries) - qdel(phantom_loss) + if(!limb) + return + if(!limb.try_attach_limb(src, TRUE)) + qdel(limb) + return FALSE + limb.update_limb(is_creating = TRUE) + if (LAZYLEN(dismembered_by_copy)) + var/datum/scar/scaries = new + var/datum/wound/loss/phantom_loss = new // stolen valor, really + phantom_loss.loss_wounding_type = dismembered_by_copy?[limb_zone] + if (phantom_loss.loss_wounding_type) + scaries.generate(limb, phantom_loss) + LAZYREMOVE(dismembered_by_copy, limb_zone) // in case we're using a passed list + else + qdel(scaries) + qdel(phantom_loss) - //Copied from /datum/species/proc/on_species_gain() - for(var/obj/item/organ/organ_path as anything in dna.species.mutant_organs) - //Load a persons preferences from DNA - var/zone = initial(organ_path.zone) - if(zone != limb_zone) - continue - var/obj/item/organ/new_organ = SSwardrobe.provide_type(organ_path) - new_organ.Insert(src) + //Copied from /datum/species/proc/on_species_gain() + for(var/obj/item/organ/organ_path as anything in dna.species.mutant_organs) + //Load a persons preferences from DNA + var/zone = initial(organ_path.zone) + if(zone != limb_zone) + continue + var/obj/item/organ/new_organ = SSwardrobe.provide_type(organ_path) + new_organ.Insert(src) - update_body_parts() - return TRUE + update_body_parts() + return TRUE diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 1e817454451..c5fc38a8b6c 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -11,6 +11,15 @@ if(bodypart.body_zone == zone) return bodypart +///Returns TRUE/FALSE on whether the mob should have a limb in a given zone, used for species-restrictions. +/mob/living/carbon/proc/should_have_limb(zone) + if(!zone || !dna) + return TRUE + var/datum/species/carbon_species = dna.species + if(zone in carbon_species.bodypart_overrides) + return TRUE + return FALSE + /// Replaces a single limb and deletes the old one if there was one /mob/living/carbon/proc/del_and_replace_bodypart(obj/item/bodypart/new_limb, special) var/obj/item/bodypart/old_limb = get_bodypart(new_limb.body_zone) @@ -112,9 +121,21 @@ /mob/living/carbon/proc/get_hand_of_item(obj/item/I) return get_bodypart(get_hand_zone_of_item(I)) -/mob/living/carbon/proc/get_missing_limbs() +///Returns a list of all limbs this mob should have. +/mob/living/proc/get_all_limbs() as /list RETURN_TYPE(/list) - var/list/full = GLOB.all_body_zones.Copy() + return GLOB.all_body_zones.Copy() + +///Returns a list of all limbs this mob should have. +/mob/living/carbon/get_all_limbs() + if(dna) + return dna.species.bodypart_overrides.Copy() + return ..() + +///Returns a list of all missing limbs this mob should have on them, but don't. +/mob/living/carbon/proc/get_missing_limbs() as /list + RETURN_TYPE(/list) + var/list/full = get_all_limbs() for(var/zone in full) if(get_bodypart(zone)) full -= zone @@ -131,7 +152,7 @@ return list() /mob/living/carbon/get_disabled_limbs() - var/list/full = GLOB.all_body_zones.Copy() + var/list/full = get_all_limbs() var/list/disabled = list() for(var/zone in full) var/obj/item/bodypart/affecting = get_bodypart(zone) @@ -172,6 +193,8 @@ // FUCK YOU AUGMENT CODE - With love, Kapu /mob/living/carbon/proc/newBodyPart(zone) var/path = dna.species.bodypart_overrides[zone] + if(isnull(path)) + return null var/obj/item/bodypart/new_bodypart = new path() return new_bodypart diff --git a/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm new file mode 100644 index 00000000000..adeaa04067c --- /dev/null +++ b/code/modules/surgery/bodyparts/species_parts/ghost_bodyparts.dm @@ -0,0 +1,51 @@ +/obj/item/bodypart/head/ghost + icon = 'icons/mob/human/species/ghost.dmi' + icon_static = 'icons/mob/human/species/ghost.dmi' + icon_state = "ghost_head" + biological_state = BIO_FLESH + bodytype = BODYTYPE_GHOST + limb_id = SPECIES_GHOST + is_dimorphic = FALSE + should_draw_greyscale = FALSE + dmg_overlay_type = null + + head_flags = HEAD_HAIR | HEAD_FACIAL_HAIR | HEAD_DEBRAIN + teeth_count = 0 + +/obj/item/bodypart/chest/ghost + icon = 'icons/mob/human/species/ghost.dmi' + icon_static = 'icons/mob/human/species/ghost.dmi' + icon_state = "ghost_chest" + biological_state = BIO_FLESH + acceptable_bodyshape = BODYTYPE_GHOST + bodytype = BODYTYPE_GHOST + limb_id = SPECIES_GHOST + is_dimorphic = FALSE + should_draw_greyscale = FALSE + dmg_overlay_type = null + wing_types = null + +//slightly different sprite meant to differentiate spirit from ghost. +/obj/item/bodypart/chest/ghost/spirit + icon_state = "spirit_chest" + limb_id = SPECIES_SPIRIT + +/obj/item/bodypart/arm/left/ghost + icon = 'icons/mob/human/species/ghost.dmi' + icon_static = 'icons/mob/human/species/ghost.dmi' + icon_state = "ghost_l_arm" + biological_state = BIO_FLESH|BIO_JOINTED + bodytype = BODYTYPE_GHOST + limb_id = SPECIES_GHOST + should_draw_greyscale = FALSE + dmg_overlay_type = null + +/obj/item/bodypart/arm/right/ghost + icon = 'icons/mob/human/species/ghost.dmi' + icon_static = 'icons/mob/human/species/ghost.dmi' + icon_state = "ghost_r_arm" + biological_state = BIO_FLESH|BIO_JOINTED + bodytype = BODYTYPE_GHOST + limb_id = SPECIES_GHOST + should_draw_greyscale = FALSE + dmg_overlay_type = null diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 774dfb4478e..826851f5e17 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -205,6 +205,13 @@ /datum/bodypart_overlay/mutant/cat_ears/color_image(image/overlay, layer, obj/item/bodypart/limb) return // We color base ears manually above in get_image +/obj/item/organ/ears/ghost + name = "ghost ears" + desc = "All the more to hear you... though it can't hear through walls." + icon_state = "ears-ghost" + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/ears/penguin name = "penguin ears" desc = "The source of a penguin's happy feet." diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 87c3e5fad6a..26ecc2d864e 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -1133,6 +1133,14 @@ pupils_name = "sensor clusters" penlight_message = "are two clustered hemispheres of thermal sensors" +/obj/item/organ/eyes/ghost + name = "ghost eyes" + desc = "Despite lacking pupils, these can see pretty well." + icon_state = "eyes-ghost" + blink_animation = FALSE + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/eyes/snail name = "snail eyes" desc = "These eyes seem to have a large range, but might be cumbersome with glasses." diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm index 1bd09e48ed8..d887ad3d36c 100644 --- a/code/modules/surgery/organs/internal/liver/_liver.dm +++ b/code/modules/surgery/organs/internal/liver/_liver.dm @@ -220,6 +220,13 @@ liver_resistance = 0.333 * LIVER_DEFAULT_TOX_RESISTANCE // -66% toxTolerance = 15 // complete toxin immunity like xenos have would be too powerful +/obj/item/organ/liver/ghost + name = "ghost liver" + desc = "Processes the last alcohol they drank in their time alive." + icon_state = "liver-ghost" + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/liver/cybernetic name = "basic cybernetic liver" desc = "A very basic device designed to mimic the functions of a human liver. Handles toxins slightly worse than an organic liver." diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 2204a9c8b8f..f74da8d786d 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -974,6 +974,13 @@ /obj/item/organ/lungs/cybernetic/surplus/hear_breath_noise(mob/living/hearer) return span_danger("[owner.p_Their()] lungs emit [breath_noise].") +/obj/item/organ/lungs/ghost + name = "ghost lungs" + desc = "No one knows what this is even supposed to breathe." + icon_state = "lungs-ghost" + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/lungs/lavaland name = "blackened frilled lungs" // blackened from necropolis exposure desc = "Exposure to the necropolis has mutated these lungs to breathe the air of Indecipheres, the lava-covered moon." diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm index ee7947717fb..585f18ee4cb 100644 --- a/code/modules/surgery/organs/internal/stomach/_stomach.dm +++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm @@ -559,4 +559,11 @@ foodtype_flags = PODPERSON_ORGAN_FOODTYPES color = COLOR_LIME +/obj/item/organ/stomach/ghost + name = "ghost stomach" + desc = "Ghosts eat plenty, you know? And it's not just your life, I swear!" + icon_state = "stomach-ghost" + movement_type = PHASING + organ_flags = parent_type::organ_flags | ORGAN_GHOST + #undef STOMACH_METABOLISM_CONSTANT diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index ff5af0562a9..ab0c34545bd 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -373,6 +373,15 @@ bomb = 50 fire = 100 +/obj/item/organ/tongue/ghost + name = "ghost tongue" + desc = "You feel spooked even thinking about someone talking through this." + icon_state = "tongue-ghost" + movement_type = PHASING + say_mod = "boos" + sense_of_taste = FALSE + organ_flags = parent_type::organ_flags | ORGAN_GHOST + /obj/item/organ/tongue/abductor name = "superlingual matrix" desc = "A mysterious structure that allows for instant communication between users. Pretty impressive until you need to eat something." diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index f4d8e6ed826..e2e9aec1587 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -22,7 +22,7 @@ if(!iscarbon(target)) return FALSE var/mob/living/carbon/carbon_target = target - if(!carbon_target.get_bodypart(user.zone_selected)) //can only start if limb is missing + if(!carbon_target.get_bodypart(user.zone_selected) && carbon_target.should_have_limb(user.zone_selected)) //can only start if limb is missing return TRUE return FALSE diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_spirit.png new file mode 100644 index 0000000000000000000000000000000000000000..c43c67f12a8b01a144cee7919749a370690ce131 GIT binary patch literal 2011 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 literal 8689 zcmZ{KRa6|!^Y-FyK|`Ru7ln8LCaRC4Tfr_%c4pJ5&M<_NX@*4ly`VCU71n3!g z$=i5-_Hc0Xa&UD40Q~YYQu}aG-x5bp9P28ZF}AfOnw5Mbyup1ZdXy~AT~E;++@|e? zgSUS%F%fey@%KjqsPj3+l`zmJY_gQKXDiMDQq56q?>Y1LlMPBj!o<%czK@xV7{)A= zO0_yv4<~<($|IaMtJYVBl-NFMq^eAZ+K1_+7@!>1(x#FWyp*(ZZ}qY2pemD(r9leN zH2W(mVdHERix{k~pSW2E9^tanIC%#Ev12p;|D=jixL#5p5?+Wql;pNr!>wa~7W|Di zZu+oJC!BQLfz~KeElKFfCjtO4OsdGs>iI35=KK5U+AJZYSp##uO4BLQDQws&d}%VF z^vYD|QzW$V=osEVQhqVCzt~z1J1fp=+nGkIlPO^u5@%R}DQ!};NbqpKF_i0K7-!0; zIp9L3o%Wv@MICZ}I#2JkkX?4yn~I9=@2p6Q76uhQb`<7SgpYlB_qH%z@w5AZSlXBX z8~mme#3S}F9itl{5%5@2TKuSbZ1LcxnzWY)U4l&rR=rvf1hd9kr`?1zkYUNall6g2 z)YoIL3R6j`U|?WChB@EA7u}b>6G9Q0wZ}KDQfEnXYwO2ih_wcM9J^tHOD#8rFn}u^ z>zCQctgBRl*~L==O@}~>Dl^zglgIXnD5f^coqo6 zJJDsSsLn+5n4ox=AHsC|Q9h@##hMIAV(t5-(6D;-rbZRwHv0iau1~jZEcu!1&sU}L z-&vINZJBniCZt_kS3I9@prF?;%1WF_#5mwp?)qd7M-OayIq_vX=}zFVQUZ?DSs3C` z!OHp0X=6cv8Hd6`Pm${^pPG7XrD5QH#q2nf1|J*+y|qpm^0KDuY4P%h<&vL9o}D$tJ>XG zLm(ChWRe@oB9^sBGZmT(yZZ%!grT2p`91gkWz^wdCa=_&m6g4Ndv{sBF}VkQixHMS zyA6~jM!z-|6n>s4hZN4-Nqg7R@cPArxVF1JIxHO=9Kg>2c6Rnr2*ern3+Gpy9?)6< zhZ7y!E-*oi256T0CI?Rn4rT7B+Xd45J_hR*<}!prb>n`&tmC&^qAnA1+JG@g0jT4S zK6v?fV15-MNj|x*&4*lSS&9dmGs)@88lDN~n;9b7?Bsx<;$yjS-c8G=RcYy?x84GD z*S^aAeN@soZ0Qa=N5SCTqfMh-9rjxEOpMLge`uBxUjtx&Fz5rmME}TN<+=!1{q0R= z8uW`OG5C?{gEji`d>xwQ;5U-6=ceXP_a{H*zH?`d&Dj3F?e^*04eG)c8q-XiHSUf) z^x`~9ZGb#XKufmXocgtsQGH{$vA=DiXe5{X2p-rd2{y^dFTdSbtlc|dTlaan?bOtL zmz;(__kQ~?>(aF_Rl@L=vLfe4yh+Gm0`@r1)Lv-K@$8m`YkT_V47I*1a<)L!j)cs8 zpf5&gDos=CKusMriMBjh-`&V#mI8_0se{XeI>kE=uwR1xV5t&khvC@TEBxr4Z)>`S zc8oj?cJlwA6n6L(${Tn-L&`<5{}j>D-(oa8a*$1nGs7ifWN?T-kp?ZMX$pk{?`AZy zUNRA_4hjv1gB$@c$+&5rVgLI**$~R%JCNU3ZMK=l`OXDx8!K;jIG4y6%Q%Y=!jbI3?F7Jbo3lw8i#IqFC1E2+RO;!%yquN-!P>J87Cy}H zXGAP=_IS+H(9{Kt5#`fMS-$v|GWzsdZcqom|B9}C+yq;xGZbF@IXIrBR2@FAyj#F- z0PL<9TI*0Hyi2R$ZV#L|Ydqd}>WRU^?BSG&)1s;>V>=Q`F)0knmbq}Wn@;_UP6Yq{N&hT-_en&Z(IrX{o?pkGqml|JY))V zfub-kgj-yR|F{~K16#LH7oeBsLVc$&jy)sm*}28WM~Ka)vwF}xG7xg9Jw^rfy% zCFX4os+XFmrP@d~V%44`h>@E+iE_#?N>Pi=t*|E=tKkzWoHjLjQ}^u$QEiU$YzBZF z^Bfv8v7BRAUrtc-FZh$5zC55nO%xb9%7bG0(Joo+#yLAP*lwar zV82>y_bGIsLYfhEWkqfbnD~$>{5P;`HN;(XpRV*r-4)kyy4!g8Z8y1~z)RNF+|zSw zme}q+hZti}tXj+!?E0pMZu|O%jhmJ(RL6y@bAs(wJw_tpJS88UqoTEtln41FlZo;o zp@)9`;1O0{PjBGVV)x`%0IYBh&k8EpDKL@byq90BclTE1jcj?dsM3QsLkCljMU7Wv zl#3zQ7QR~>pR^j_rB3)SUrhfbexF{ORHCt{NF8h4SmzbU)(U=YH<(n>V5bNqzd9ZG zw7UD+AUBk|=al~;xADY;Co$hQ{{-Tm-w9I?af$ga|A`WKG+SlOgLvi<%1tN?dBDkq z?1yxFcxH=vSHqVa8^+eiMy{UpQ^0pm;TXd(42WzPEShVA9=v z&AYJkW5^H^)Zf!$UwN$l$J^_^Ymw4Cz7ec+8q5CSP@Roe0vsmKMC=bUybS5cx!VFk7YjH|L5+^$$W#c1}Y?IXS^9Z|=kzo}Q_x0MqKQ#wt{WzSN@u}nN;&}kwP z*)+Oi_g^R4xbFfNEovcRnK{I-6D3~}(sMcRwC|dB z#ULUTdM}@Fa)HwI@?eSvj)eJsJC_jRa(lrdN^kaB#A+JW)YPQpq==(BzjAeFRR&lCMdr8r5JT`XrEswtc{`cbPl--aY z5Wc&+TlVv3lXYQs!RqhS6zd{8P<`!!9gCn~#^t5QP8VE3L1E{Moo9&}u4Jtcg_M^e zpeOIdDK<9N=(krDo8i;ORql-@zi02!L@h7}?fB35cxmFg1I@)R$N69Oau$H<>S|)o z1}Bm4vFD?I{-9d^x#*VYw2?QZbsNG@6RC_z0g>})nVbJ3)s*PVvIrS7Gc*H>ixcsF z86~!zC{Q;yr}GW8(+Qd#{LwMoKG=KS^V(aiPE}fo%>U)-EIliWG4>shcvfQD?V?>{ zB(4NcmUwi0{PVmO|FM}%G*2ES=*q%toXR~^W5n*czO1V&uWmhv08E|*v4py;%WI)M zB8dF`{o|Klw97PvKWk0j4$h%SE33L*+7rFDa zs}_`RP(Cp+u`O(10=80$r|LtRn_w^&SHi)|tm5x4`Y35$uUoUAC1MuO8kBl@b@l#a zD(*X}kK5XiFu!|0A#UI`Zk{w4ke{dkiYM8|-JtbROH=BsUh)+-@I|0!RK3n-(m!Jq zWF!?5uFblQt6+Dwy)_AHcF)Mj_yBwfYHDg~-w4M;hM}aTCB3PM4{&Ruiq<$RS2a?z z(Ba908Bu_NM}e(_$7?^4>&_jJ|eLoTN#Q<=N+$h2~wn>7NA7xQ=@h);@jY{Qqr59R{Ob zs1Pz7g2T|Ppy!};537K}A7*ZHn_jSN7qbrC(oHz*b3&WGzCH$BAK#pj(YeRS5C-Kc zpW;cWfpEC0*hG4XiRk%OuFCu087N|ArB~~FZj(xNiK7_Hdf$57?+H!`OAqg(T|!*? z$n6EFGlNRxOQ(`e+!Pj`w{-k`3Q)0kyliZ2R)C1-gxkZ_PG2xe*>l<5Q1uPB@K0*B zL7U9Q@ilTL?CtmOD>yhfKD$lXVjg&zc6nmzTyf?D%Q`Ini#kBif_|D6JziDbOWf$; zk`K8M&OWlA+csy<=7p5K1o2vg;88vYH3EYNf@OCbx)jbB$bt9c4wk05+w_uVeN!`= z71uR&bp#T2wzi5-J@#JUvm%NA()N5hwX5_J%!Tj!=ixeKn;%{X%DLjXZ#311Ttvxl z9=CM9WfrBcXc4lFPzVHN^Cc0H7Kb8($WHVaf^xZ+?!D59t>I*$wB8ep_PD#|QdF`4 zSwIaliauy~Q#iOQeLPhBhcsb0tVRy=B|-5sL&#yy?pFKzPuC~&8RtL=s+oKGBX2rC z399RWf`FsVl=8Wd=*>TBmCeT5Y@Z*imRh5Hqa}eV>v>{B z<=}`B$Tj3Ib{>KY2saztUuVI>&&+f2TU_QDfX8fPHCR79>!bchIujGmN()EQVu$b4 z|E$F-88w$Ja$WDyvvVawx2hcFv52aD`4K`JsGFW*jeX5$H&L((SL5?>Vvv#<-WVTK z{@_-5DQ_x;7GbVw3$6cxD(-V8Po|)Oz8m~T{ih=A(ac-lGM7t3F0F50y7&?u-gj1* z^XFVu?Xwu7onUBeGqUqMByx5HA&(48zq)1|XlK7v3?`XNSg-|of6VKwZsQP zFkEbX4;|Yf)cLhPAXdFdWkP80YpFc_3o-fu*?ze8+_NCLb7yz=gXi9Vgft>D_sm(7 z$HQ+9=V~YgD~?8$KOm{MXiv{92p7PrVd*J?q>GV5FU&1^3BTkwF70oLE$R$B4=$`y zyFKB463B*~aB8-QZQYrZ5gJ{u;|K>A~xt#Vt=j6FU$0SHuAY$AI zp8slA^uGr?5=Oq2r)pw0GE`>jG>5e0yT6|AK0Uu~^v%2(qFko4puS7bgs`NEd>Ks! z`yi`&j$qH#TBk1$@a3xT@UwtWfF|cY&wR(P`~4--;}tKS1C2}vercsJhY^?GsE(@C zTa*+O)Z6pULb z$!?PC^F?t`W#zP{c#D9kSp7+1_TIrx$`!U>!r91#T)+mO$s$BXzVKNIP}{^I2H`3t z9~krT$Z@&#*!{XL(I>o)|AZuEJ)86Vq{eH`>gF(c+9g_N*XSw1!}^+Mnq2H~+2sdS z8ScLPF44Vldvvc@#<|WmTG2a?GYk|B8gtiwd`6fxFB;m1oSt9(ctBJLvnPWpYO#& z-C9-lUWR|8R53gV`o`)gP*#j}-u=xHQkQT&J9ZZHlep^T*Vg&)yE`4KdM>0{A>Ii{ zXOPfosu^${cUpRi?jk(O8!g`+&kOo>6ln3s!80{8a~Ni$(KV)@uBDIx!BM>5YLM{H z8|UtbGz7v?LIawKhYV|Y#8uvpgK%v-k!o3ny^5El_dLeh~kX;6=&8G0`D z`DZPg{TTMZ+(f8@?TDEFRwOp>`5h?5`68J9EVonJFL;=jWWz6i^tv|~T_&sE45MRf zo!_7D@bC~Y3k{Sou5&d4TmNeO0<&J+N_x$&m>#`8Ju~ymh_lwXRh3FIpoOg)Q>#j^ z*63G>**`?S?;6S3?_=%{nOEmzx}GP?%}O-3iI^MJA!9yK{F)UnND3jf*KcwyeX0%KLrnPuvk z`)V^3OWuDlRXXI>4f9{km^?M!=XSpd;^?(@%fz)v6fAopprZ>35g$EU>5 z^UY6(5)vHw%5U{rXHQhYqf<2F*`yCXT!fvp`9f8z;Iyqc;dN9@G;=kA z*x7XX++~{3e6v1E+Kn?Mg}fU&y|2tSKCENWOl!B#tP#*<#vZ@BhCUaxIzkO-$-y-F z<|%NDqE{DfA(fGUFZX@OrHXrUhx3d&r*VsN@(e}<&(k25!qKUam&({e9U&pjR0?!8 zRKz1$=?w-J72ksoMDbv^=1Od)LUMS91hkYB~qOrJsXr3Q}Wpdf0f?d`ws zmUU>Y)UN7+v9kgTF9Zj=7hcD)I$8LcX_mZ$G#08CD99}uQMczU{Lk{RLXbR>W&2NF zvYz7JCmsNQ*cPo^_M)q94VF|8*`Gg=w)wm{wj%I;%>bjpL${KtuWp?Z_Fl$Er`)Lo zDkoewMe|3a5cd*w)nWbf<(D%KR4_0sB9xg0lOi){)<#mYL*?ZUh z?=YH=nSe$}Sw+t8?i5LJrIx%qKJuS(Hug5s1e(`b%L&1w-mhf8u1rmZ8EcgAmTfqUK9|JOYxEJ$P=LPcdkh*X zpjkK)t8QR$7-J*X$*Hc{L8|`ja<{z~?$N2sHKrst<+b4cJME(VSi7qA`ovc0Ez@S>V~$!mRG5P_%7CEaYw+Wv=f}-_ z5Mv_!_Z~#kVGs{FD_0Q0=5ZyN>>OU*28QMwE8tq)v_hlLguLPMDFaHTl`SgmUnT6l zjq`3aTE@oO^XX=dx#*Bz!pV`)W7+bl5`EFCUo0sZd$Of78`XEak^dgR5Pr{hUWHX# z7bI?O(zy9_oaD(lnBEoIWp*FCSNFYcgwPWRX?!LtLK#XL#ovydF1yrR?MC{Tw7^Wd z;cfCKbAFdA%T+Mh)pzXZ<*4m zN|a0|KTU9pX~e*hOr6daGXK~FMNWP6*qH_A3~C7lZ-lUL%U{*?gH}%)OZDEn8#%M- ze?2k4QroWr_@GHEZiG-)g;Bsu))>-wRY1?7t-XpC7sDOYlsc4*NCf@&~r`M~u3Tj7n`pXN{i>%}?fTS^TC- z6h1bRx;$K$Ak%E&h6$T>&ncF?#~d86LB(r(6yX zX5ZzJMmu_#c=XS2Tyc<60Zj2sQE32DScG*zC2-4sDiD=7;UA-*y9`|FVF$m8wW_N? z&{8e-O3<Hhz&{x zZo@8<{anxQLe+?hy)ObV6Fo=B;jWyQsgyj_UbH~nO#sFitO)>5T2u;PZEluw?FVi$ zIN|gpQx~C#5RIbF%DOHdW1%E)zixoaea#^Rjc1X@(g}Y}pa9K$=N8S*F(z7K;&RDK zOEQNlr9FYDEtJOrS#N&ZL_m(lam+Lm*S9M4m88SX zS0q7Ja``_cH`4e+n&sSIMNYdJm;K>nFL_vUd?QOG3+teUc8fLHnJ@jb9azcM}FlVL{XlQ{JAPzBl)0uC8At&J_4d$U@lr zZ$I)uukdPjkK`I_u>9&n;Gyc~cO1~SG^KrcuQ196vEh?)j%^{_cXm%;$+r-KxO<@1 z>sBW0fj;O*&V+Sk&u0eHqjMUn(BtzUnVn}*)DW#()ZnlJK!j^+$vo4HAY|+k+Pd)u z-n;yTPeH=n(h)W!&ibwkVZHz_sA;&J!Jo&Yofz{E-ZgDo}DCG(>5J76ojhrN`0v~Mer4%iD&0Jg(wa(BLLGK)^TSW-7~ zWj@uEZWrQx)rdv{Ng&)>JV{u+Y*opL*!t^SCl32|VzafdP^c1`1$-UN12u>;Lt&h#jjh?qC1E9u zdzHsdSKG`0d~E@K+E$;WN_4CKlvlA-VCAzQ)b&Aul$A;vBBfNF@Qpy7h%EY-fj%Mi z__WE_IcU+Ht=!iIlk?y>P>^TBjzBZ#c{~6oAEkR^h5PW7(5!MBQ&XIxYsDN1KN|+X zv{*?5eDFK^fFp&|wE^{jBxGq}p@|@u<6Cpd9U}&G>M;19xb7wIkgiBEY%qMs?N^s@ zH_o>Xi*jN2FAk!ck@<45_OkF7H6=Y9V9O)OD{n7gA>|}@@)KYKxrC#JY7!Ol&{Wfm zM;wQLDuY$QzJvmOb#n+N>@5s)rHQ1h$=5&7+AzcO(wJB_!~CexKr*I_Nj7 zzCyWzgCdce4rnCx{`g9j4SD#010el>WWF&1%V$JFN)>Yq4fziTKt(}AzW$?S`2PVB Cu{GiV diff --git a/icons/mob/human/species/ghost.dmi b/icons/mob/human/species/ghost.dmi new file mode 100644 index 0000000000000000000000000000000000000000..42185e3db54b612fd1c531fa31bb1d969dd65690 GIT binary patch literal 2324 zcmbVOXH=6}8vej2O$1biA`(Cl7(_}C2w;K~ff+zhSDJ{(8YH1dY9@pt;;=$&ln61% zxPa0XVM72}B19=cDWQcr0wRVo@DUP7vgqubv*(OIcK64D z4OY|49p!zcznpN5`cNn9rm3KodDqKLsQN$}b5l<`qw^u{2I=6wj5D1FZ@MN1^{w}R zI`Ttz`&jL!2DXGOteJryqsH`mT`XR}4ESRvU8NJw#}J=9002o-7l%{l;|n?CXTrx$ zD|bvsWL9OW>P4qjoNZkMdSo+~(l*sN=Cy5>e)DRk&%>)O@A6R!JL9=azwr&KQ6t3D z)G_+a^zAoXE|89Pnz1OEn+*u*;59_ZdVp?AdjPls;Jg*PZeUSB%Mcl5Qm&Yx0>KDw z((z2CDV6Xh~#Lq zZ%8Fsz~ufmW%71wvTRvS-D!{#y?=Xk%H%}cO8!{SXTRxjmIzg^O0S#|$jR7xZht7m z^^ZP0$e5-sa`Oe2O?sEqwzlr;4K3I5T_!}sAe{>sl8r;=y8@6Ax;9!PE|EB0SH6%@ z0gY8Gv+6)wOW{5q#8%y6gK?ZUc*Ua;0!5V;i86QFF)NDCh<@-%g&u#xP&TXFn5sjQ zt}~^Jzl&a2&G)eiT;kJW)i~Q!qqL)8^vrb$jiR-|;@CDeXkFMwZPl*}e7grKF6;ju z+pI}lY#4;6+iNZh6g8Ert${Eo{NuZAuAbjC8>~%C+W=1GsaRJH5_4z>*58Qs4D&Ve z)JU%3GZ-+j1%1Xa7z=IL>w5)Ekez4K7fU0VBobK;QK(Oe3rF>qvJicbEKoScMAho# zeK=Y@zOQ1$Mk%mYsVYKlr7p3_`~`ny#=aNBY~~J0R8u|`FH140a$w*+uCT2e;q)v^ zadB@lb_oNs~Y*4WQ?eb-LHF17IZQp|EjB}rDc2tHpgQBC}%v452McQWsVEkpP; zO1F^qPq9WWa5Z=WDQ1`%+)Syl92&v2GiWSjE!ml|GZQ?t53h18LO~#q!4s{KO zg!@n9;x}9o+AUIZd`dK5($;1zu9Ypu#_v5E|6@V2MfeRJk8E)~8kb^*Jy2+ONUNG4 zZp^HKOS8OiG0>aZK+phe>hq7L$kdkvMKe%u1h;nNe3-KpGL^$3;E$W41qYIANA2%i zPl9yy^Dv-m&d8iojQ~WVlOQ*pD49Hk?@l7ccbdH~MI-Ag+i$e}8-UCqB|YxuI(0E9 z#!jN6^CSYl#4kStMHbDCYndNU;e3$Sdo9giK)qjZx;9I{|Jbz(0mgF&d6+bNTflfg zKYRDU(K7O5u{U2&`sPx>YS~el8i`iMP zv!&5DfN?r@UR}L#byeZEeUZF@8Z^LvQ`5uK=0(rkGHbH*4ow)f(7`Yg2?K(wb&_jO zF|NHD<7{znAbiT;Epx6@2953MTdm-Rf1Lr3eL~u^K z{n0u+r)RFK;_-MW0_GN);VnSTaqq(0G_uNVzf6X2t7q{-Ja%VWPxlS)`Vz$d&f32} zw_y^XOjnnAz8!HR%v|(v!~h0c7BJB3sLS#@QQ1NJh=Bpb_o9cDNIOGPIekN~Q~K~WiVSPVF=_3xSRr`xxnYmFpWYVm`?oo^1{;^^*BWp_FCUq@6)D*ylh literal 0 HcmV?d00001 diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index ba48010d7da822406399bd3b6f1ccaf683391ec2..ea3fe2f29df9ad020f948670a88fd9920966d47d 100644 GIT binary patch literal 52665 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 literal 52916 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 CSD(%R diff --git a/tgstation.dme b/tgstation.dme index b674778eae3..d20d2f8ee91 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5558,6 +5558,7 @@ #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" #include "code\modules\mob\living\carbon\human\species_types\felinid.dm" #include "code\modules\mob\living\carbon\human\species_types\flypeople.dm" +#include "code\modules\mob\living\carbon\human\species_types\ghost.dm" #include "code\modules\mob\living\carbon\human\species_types\golems.dm" #include "code\modules\mob\living\carbon\human\species_types\humans.dm" #include "code\modules\mob\living\carbon\human\species_types\jellypeople.dm" @@ -6438,6 +6439,7 @@ #include "code\modules\surgery\bodyparts\wounds.dm" #include "code\modules\surgery\bodyparts\species_parts\android_parts.dm" #include "code\modules\surgery\bodyparts\species_parts\ethereal_bodyparts.dm" +#include "code\modules\surgery\bodyparts\species_parts\ghost_bodyparts.dm" #include "code\modules\surgery\bodyparts\species_parts\lizard_bodyparts.dm" #include "code\modules\surgery\bodyparts\species_parts\misc_bodyparts.dm" #include "code\modules\surgery\bodyparts\species_parts\moth_bodyparts.dm"