mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
This tail refactor turned into an organ refactor. Funny how that works. (#67017)
* Fuck you (refactors ur tails) * Errors * Wow. Pain. * Fixes up probably everything * finish up here * Fixes hard del maybe * original owner hard del * garbage collection runtime * suck my peen byond * Mapped tails * motherfucker. * motherrfucker. again. * Whooopppppsie * yeah bad idea * Turns out external organs literally just sat in nullspace forever if their parent was deleted, and didnt Remove() themselves, causing harddels. * So anyways I repathed all organs * Fixes * really. * unit test... test * unit test-test but it passes linters this time because im a moh-ron * I've lost track of what im doing at this point * Hopefully fixes hard del? * meh * Update code/datums/dna.dm * things n stuff * repath from master pull
This commit is contained in:
@@ -470,7 +470,7 @@
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/bodypart/chest,
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/item/multitool,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/ruin/powered)
|
||||
|
||||
@@ -286,7 +286,7 @@
|
||||
"oL" = (
|
||||
/obj/structure/bonfire/prelit,
|
||||
/obj/effect/decal/cleanable/ash,
|
||||
/obj/item/organ/tail/lizard,
|
||||
/obj/item/organ/external/tail/lizard,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/structure/stone_tile/slab/cracked,
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
@@ -343,7 +343,7 @@
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
"wp" = (
|
||||
/obj/item/knife/combat/bone,
|
||||
/obj/item/organ/tongue,
|
||||
/obj/item/organ/internal/tongue,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
@@ -402,8 +402,8 @@
|
||||
/turf/open/misc/asteroid/basalt/lava_land_surface,
|
||||
/area/lavaland/surface)
|
||||
"Di" = (
|
||||
/obj/item/organ/lungs,
|
||||
/obj/item/organ/liver,
|
||||
/obj/item/organ/internal/lungs,
|
||||
/obj/item/organ/internal/liver,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
@@ -422,7 +422,7 @@
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
"Eh" = (
|
||||
/obj/item/organ/brain,
|
||||
/obj/item/organ/internal/brain,
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
"EI" = (
|
||||
@@ -465,9 +465,9 @@
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
"Kj" = (
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/eyes,
|
||||
/obj/item/organ/ears,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/item/organ/internal/eyes,
|
||||
/obj/item/organ/internal/ears,
|
||||
/obj/effect/decal/cleanable/blood/gibs/old,
|
||||
/turf/open/misc/asteroid/basalt/wasteland,
|
||||
/area/ruin/unpowered/elephant_graveyard)
|
||||
|
||||
@@ -929,9 +929,9 @@
|
||||
"ja" = (
|
||||
/obj/effect/turf_decal/bot_white,
|
||||
/obj/structure/closet/crate/secure/engineering,
|
||||
/obj/item/organ/cyberimp/arm/toolset,
|
||||
/obj/item/organ/cyberimp/eyes/hud/medical,
|
||||
/obj/item/organ/cyberimp/brain/anti_stun,
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset,
|
||||
/obj/item/organ/internal/cyberimp/eyes/hud/medical,
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_stun,
|
||||
/turf/open/floor/iron/dark/airless,
|
||||
/area/shuttle/caravan/freighter3)
|
||||
"jb" = (
|
||||
|
||||
@@ -353,7 +353,7 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
"be" = (
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/iron/white/corner,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
@@ -444,7 +444,7 @@
|
||||
"bt" = (
|
||||
/obj/structure/table/optable,
|
||||
/obj/effect/mob_spawn/corpse/human/damaged,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/iron/white,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
@@ -835,12 +835,12 @@
|
||||
/obj/structure/closet/crate/freezer{
|
||||
name = "cat ears"
|
||||
},
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
"cv" = (
|
||||
@@ -889,12 +889,12 @@
|
||||
/obj/structure/closet/crate/freezer{
|
||||
name = "cat tails"
|
||||
},
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/ruin/space/has_grav/powered/cat_man)
|
||||
"jc" = (
|
||||
|
||||
@@ -5234,7 +5234,7 @@
|
||||
pixel_x = 17;
|
||||
pixel_y = 12
|
||||
},
|
||||
/obj/item/organ/cyberimp/arm/toolset{
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset{
|
||||
pixel_y = 2;
|
||||
pixel_x = 6
|
||||
},
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
},
|
||||
/obj/item/veilrender/honkrender,
|
||||
/obj/item/clothing/mask/gas/clown_hat,
|
||||
/obj/item/organ/heart/demon,
|
||||
/obj/item/organ/internal/heart/demon,
|
||||
/turf/open/floor/engine/cult{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
@@ -1414,7 +1414,7 @@
|
||||
icon_state = "crateopen"
|
||||
},
|
||||
/obj/item/paper/fluff/awaymissions/caves/shipment_receipt,
|
||||
/obj/item/organ/eyes/robotic/thermals,
|
||||
/obj/item/organ/internal/eyes/robotic/thermals,
|
||||
/obj/item/gun/energy/laser/captain/scattershot,
|
||||
/obj/item/slimepotion/fireproof,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
@@ -2118,7 +2118,7 @@
|
||||
},
|
||||
/area/awaymission/caves/bmp_asteroid/level_three)
|
||||
"YG" = (
|
||||
/obj/item/organ/brain/alien,
|
||||
/obj/item/organ/internal/brain/alien,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
|
||||
@@ -18778,7 +18778,7 @@
|
||||
/obj/structure/table/wood/fancy,
|
||||
/obj/item/book/granter/spell/smoke/lesser,
|
||||
/obj/item/nullrod,
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/holywater,
|
||||
/turf/open/floor/iron/grimy,
|
||||
/area/station/service/chapel/office)
|
||||
|
||||
@@ -50839,7 +50839,7 @@
|
||||
/turf/closed/wall,
|
||||
/area/station/engineering/storage)
|
||||
"qtu" = (
|
||||
/obj/item/organ/tail/monkey,
|
||||
/obj/item/organ/external/tail/monkey,
|
||||
/obj/effect/decal/cleanable/blood/splatter,
|
||||
/turf/open/misc/asteroid/snow/icemoon,
|
||||
/area/icemoon/underground/explored)
|
||||
@@ -67589,7 +67589,7 @@
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/bodypart/chest,
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/internal/heart,
|
||||
/turf/open/misc/asteroid/snow/icemoon,
|
||||
/area/icemoon/underground/explored)
|
||||
"vQG" = (
|
||||
|
||||
@@ -11496,11 +11496,11 @@
|
||||
/obj/structure/closet/crate/freezer{
|
||||
name = "organ storage"
|
||||
},
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/structure/sign/poster/contraband/random/directional/east,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/maintenance/fore)
|
||||
|
||||
@@ -13369,7 +13369,7 @@
|
||||
/obj/item/nullrod{
|
||||
pixel_x = 4
|
||||
},
|
||||
/obj/item/organ/heart,
|
||||
/obj/item/organ/internal/heart,
|
||||
/obj/item/soulstone/anybody/chaplain,
|
||||
/turf/open/floor/cult,
|
||||
/area/station/service/chapel/office)
|
||||
|
||||
@@ -2613,13 +2613,13 @@
|
||||
/area/station/science)
|
||||
"XN" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/organ/cyberimp/bci{
|
||||
/obj/item/organ/internal/cyberimp/bci{
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/organ/cyberimp/bci{
|
||||
/obj/item/organ/internal/cyberimp/bci{
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/item/organ/cyberimp/bci{
|
||||
/obj/item/organ/internal/cyberimp/bci{
|
||||
pixel_y = 5
|
||||
},
|
||||
/turf/open/floor/iron/dark,
|
||||
|
||||
@@ -17376,8 +17376,8 @@
|
||||
/obj/item/reagent_containers/medigel/synthflesh,
|
||||
/obj/item/reagent_containers/medigel/synthflesh,
|
||||
/obj/item/reagent_containers/medigel/synthflesh,
|
||||
/obj/item/organ/heart/cybernetic/tier2,
|
||||
/obj/item/organ/heart/cybernetic/tier2,
|
||||
/obj/item/organ/internal/heart/cybernetic/tier2,
|
||||
/obj/item/organ/internal/heart/cybernetic/tier2,
|
||||
/obj/item/defibrillator,
|
||||
/turf/open/floor/iron/sepia,
|
||||
/area/centcom/central_command_areas/holding)
|
||||
|
||||
@@ -720,7 +720,7 @@
|
||||
/obj/item/stack/medical/gauze,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/whiskey,
|
||||
/obj/item/reagent_containers/glass/bottle/ethanol,
|
||||
/obj/item/organ/stomach,
|
||||
/obj/item/organ/internal/stomach,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/turf/open/floor/iron,
|
||||
/area/shuttle/escape/luxury)
|
||||
|
||||
@@ -198,10 +198,10 @@
|
||||
/area/shuttle/escape/brig)
|
||||
"IM" = (
|
||||
/obj/structure/table/abductor,
|
||||
/obj/item/organ/heart/gland/access{
|
||||
/obj/item/organ/internal/heart/gland/access{
|
||||
pixel_x = 10
|
||||
},
|
||||
/obj/item/organ/heart/gland/egg,
|
||||
/obj/item/organ/internal/heart/gland/egg,
|
||||
/turf/open/floor/plating/abductor,
|
||||
/area/shuttle/escape)
|
||||
"JK" = (
|
||||
|
||||
@@ -1199,7 +1199,7 @@
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/trash/syndi_cakes,
|
||||
/obj/item/organ/stomach,
|
||||
/obj/item/organ/internal/stomach,
|
||||
/obj/machinery/firealarm/directional/north,
|
||||
/obj/machinery/light_switch/directional/east,
|
||||
/turf/open/floor/iron/showroomfloor,
|
||||
|
||||
+8
-11
@@ -40,24 +40,23 @@
|
||||
#define DNA_UNI_IDENTITY_BLOCKS 7
|
||||
|
||||
/// This number needs to equal the total number of DNA blocks
|
||||
#define DNA_FEATURE_BLOCKS 16
|
||||
#define DNA_FEATURE_BLOCKS 15
|
||||
|
||||
#define DNA_MUTANT_COLOR_BLOCK 1
|
||||
#define DNA_ETHEREAL_COLOR_BLOCK 2
|
||||
#define DNA_LIZARD_MARKINGS_BLOCK 3
|
||||
#define DNA_LIZARD_TAIL_BLOCK 4
|
||||
#define DNA_SNOUT_BLOCK 5
|
||||
#define DNA_HORNS_BLOCK 6
|
||||
#define DNA_FRILLS_BLOCK 7
|
||||
#define DNA_SPINES_BLOCK 8
|
||||
#define DNA_HUMAN_TAIL_BLOCK 9
|
||||
#define DNA_TAIL_BLOCK 4
|
||||
#define DNA_LIZARD_TAIL_BLOCK 5
|
||||
#define DNA_SNOUT_BLOCK 6
|
||||
#define DNA_HORNS_BLOCK 7
|
||||
#define DNA_FRILLS_BLOCK 8
|
||||
#define DNA_SPINES_BLOCK 9
|
||||
#define DNA_EARS_BLOCK 10
|
||||
#define DNA_MOTH_WINGS_BLOCK 11
|
||||
#define DNA_MOTH_ANTENNAE_BLOCK 12
|
||||
#define DNA_MOTH_MARKINGS_BLOCK 13
|
||||
#define DNA_MUSHROOM_CAPS_BLOCK 14
|
||||
#define DNA_MONKEY_TAIL_BLOCK 15
|
||||
#define DNA_POD_HAIR_BLOCK 16
|
||||
#define DNA_POD_HAIR_BLOCK 15
|
||||
|
||||
#define DNA_SEQUENCE_LENGTH 4
|
||||
#define DNA_MUTATION_BLOCKS 8
|
||||
@@ -115,7 +114,6 @@
|
||||
#define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" //This one ignores alphabetical order cause the arms should be together
|
||||
#define ORGAN_SLOT_STOMACH "stomach"
|
||||
#define ORGAN_SLOT_STOMACH_AID "stomach_aid"
|
||||
#define ORGAN_SLOT_TAIL "tail"
|
||||
#define ORGAN_SLOT_THRUSTERS "thrusters"
|
||||
#define ORGAN_SLOT_TONGUE "tongue"
|
||||
#define ORGAN_SLOT_VOICE "vocal_cords"
|
||||
@@ -180,7 +178,6 @@ GLOBAL_LIST_INIT(organ_process_order, list(
|
||||
ORGAN_SLOT_HEART_AID,
|
||||
ORGAN_SLOT_BRAIN_ANTIDROP,
|
||||
ORGAN_SLOT_BRAIN_ANTISTUN,
|
||||
ORGAN_SLOT_TAIL,
|
||||
ORGAN_SLOT_PARASITE_EGG,
|
||||
ORGAN_SLOT_REGENERATIVE_CORE,
|
||||
ORGAN_SLOT_XENO_PLASMAVESSEL,
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
// Organ signals
|
||||
/// Called on the organ when it is implanted into someone (mob/living/carbon/receiver)
|
||||
#define COMSIG_ORGAN_IMPLANTED "comsig_organ_implanted"
|
||||
|
||||
/// Called when using the *wag emote
|
||||
#define COMSIG_ORGAN_WAG_TAIL "comsig_wag_tail"
|
||||
/// Called on the organ when it is removed from someone (mob/living/carbon/old_owner)
|
||||
#define COMSIG_ORGAN_REMOVED "comsig_organ_removed"
|
||||
|
||||
///from base of mob/update_transform()
|
||||
#define COMSIG_LIVING_POST_UPDATE_TRANSFORM "living_post_update_transform"
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
///Uses the parent limb's drawcolor value.
|
||||
#define ORGAN_COLOR_INHERIT (1<<0)
|
||||
///Uses /organ/external/proc/override_color()'s return value
|
||||
#define ORGAN_COLOR_OVERRIDE (1<<1)
|
||||
///Uses the parent's haircolor
|
||||
#define ORGAN_COLOR_HAIR (1<<2)
|
||||
|
||||
///Tail wagging
|
||||
#define WAG_ABLE (1<<0)
|
||||
#define WAG_WAGGING (1<<1)
|
||||
@@ -201,6 +201,10 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
|
||||
|
||||
#define isorgan(A) (istype(A, /obj/item/organ))
|
||||
|
||||
#define isinternalorgan(A) (istype(A, /obj/item/organ/internal))
|
||||
|
||||
#define isexternalorgan(A) (istype(A, /obj/item/organ/external))
|
||||
|
||||
#define isclothing(A) (istype(A, /obj/item/clothing))
|
||||
|
||||
#define ispickedupmob(A) (istype(A, /obj/item/clothing/head/mob_holder)) // Checks if clothing item is actually a held mob
|
||||
|
||||
@@ -416,7 +416,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
// example. Through years of training/abuse, their livers have taken
|
||||
// a liking to those substances. Steal a sec officer's liver, eat donuts good.
|
||||
|
||||
// These traits are applied to /obj/item/organ/liver
|
||||
// These traits are applied to /obj/item/organ/internal/liver
|
||||
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law_enforcement_metabolism"
|
||||
#define TRAIT_CULINARY_METABOLISM "culinary_metabolism"
|
||||
#define TRAIT_COMEDY_METABOLISM "comedy_metabolism"
|
||||
@@ -810,7 +810,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
|
||||
/**
|
||||
* Trait granted by [/mob/living/carbon/Initialize] and
|
||||
* granted/removed by [/obj/item/organ/tongue]
|
||||
* granted/removed by [/obj/item/organ/internal/tongue]
|
||||
* Used for ensuring that carbons without tongues cannot taste anything
|
||||
* so it is added in Initialize, and then removed when a tongue is inserted
|
||||
* and readded when a tongue is removed.
|
||||
|
||||
@@ -15,10 +15,9 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list)
|
||||
//bodypart accessories (blizzard intensifies)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, GLOB.animated_tails_list_lizard)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/human, GLOB.animated_tails_list_human)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, GLOB.tails_list, add_blank = TRUE)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/horns,GLOB.horns_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list)
|
||||
@@ -32,7 +31,6 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
|
||||
|
||||
//Species
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
victim.Stun(100)
|
||||
victim.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/stutter)
|
||||
victim.set_timed_status_effect(1000 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
|
||||
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(10, 15)
|
||||
to_chat(victim, "<font color='red' size='8'>HONK</font>")
|
||||
var/obj/item/clothing/shoes/victim_shoes = victim.get_item_by_slot(ITEM_SLOT_FEET)
|
||||
@@ -35,13 +35,13 @@
|
||||
victim.Paralyze(20)
|
||||
victim.Stun(50)
|
||||
victim.set_timed_status_effect(500 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
|
||||
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(7, 10)
|
||||
to_chat(victim, "<font color='red' size='5'>HONK</font>")
|
||||
|
||||
for(var/mob/living/carbon/victim in lightly_honked)
|
||||
victim.Knockdown(20)
|
||||
victim.set_timed_status_effect(200 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
|
||||
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
|
||||
ears?.adjustEarDamage(4, 5)
|
||||
to_chat(victim, "<font color='red' size='2'>HONK</font>")
|
||||
|
||||
+28
-6
@@ -59,10 +59,12 @@
|
||||
return pick(GLOB.backpacklist)
|
||||
|
||||
/proc/random_features()
|
||||
if(!GLOB.tails_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/, GLOB.tails_list, add_blank = TRUE)
|
||||
if(!GLOB.tails_list_human.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE)
|
||||
if(!GLOB.tails_list_lizard.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE)
|
||||
if(!GLOB.snouts_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list)
|
||||
if(!GLOB.horns_list.len)
|
||||
@@ -88,12 +90,12 @@
|
||||
if(!GLOB.pod_hair_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
|
||||
|
||||
//For now we will always return none for tail_human and ears.
|
||||
//For now we will always return none for tail_human and ears. | "For now" he says.
|
||||
return(list(
|
||||
"mcolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]",
|
||||
"ethcolor" = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)],
|
||||
"tail_lizard" = pick(GLOB.tails_list_lizard),
|
||||
"tail_human" = "None",
|
||||
"tail_cat" = "None",
|
||||
"tail_lizard" = "Smooth",
|
||||
"wings" = "None",
|
||||
"snout" = pick(GLOB.snouts_list),
|
||||
"horns" = pick(GLOB.horns_list),
|
||||
@@ -786,9 +788,29 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
return "left foot"
|
||||
if(BODY_ZONE_PRECISE_R_FOOT)
|
||||
return "right foot"
|
||||
if(BODY_ZONE_PRECISE_GROIN)
|
||||
return "groin"
|
||||
else
|
||||
return zone
|
||||
|
||||
///Takes a zone and returns it's "parent" zone, if it has one.
|
||||
/proc/deprecise_zone(precise_zone)
|
||||
switch(precise_zone)
|
||||
if(BODY_ZONE_PRECISE_GROIN)
|
||||
return BODY_ZONE_CHEST
|
||||
if(BODY_ZONE_PRECISE_EYES)
|
||||
return BODY_ZONE_HEAD
|
||||
if(BODY_ZONE_PRECISE_R_HAND)
|
||||
return BODY_ZONE_R_ARM
|
||||
if(BODY_ZONE_PRECISE_L_HAND)
|
||||
return BODY_ZONE_L_ARM
|
||||
if(BODY_ZONE_PRECISE_L_FOOT)
|
||||
return BODY_ZONE_L_LEG
|
||||
if(BODY_ZONE_PRECISE_R_FOOT)
|
||||
return BODY_ZONE_R_LEG
|
||||
else
|
||||
return precise_zone
|
||||
|
||||
///Returns the direction that the initiator and the target are facing
|
||||
/proc/check_target_facings(mob/living/initiator, mob/living/target)
|
||||
/*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head.
|
||||
@@ -817,7 +839,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
mob_occupant = head.brainmob
|
||||
|
||||
else if(isorgan(occupant))
|
||||
var/obj/item/organ/brain/brain = occupant
|
||||
var/obj/item/organ/internal/brain/brain = occupant
|
||||
mob_occupant = brain.brainmob
|
||||
|
||||
return mob_occupant
|
||||
|
||||
@@ -20,8 +20,6 @@ GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name
|
||||
GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name
|
||||
//Lizard Bits (all datum lists indexed by name)
|
||||
GLOBAL_LIST_EMPTY(body_markings_list)
|
||||
GLOBAL_LIST_EMPTY(tails_list_lizard)
|
||||
GLOBAL_LIST_EMPTY(animated_tails_list_lizard)
|
||||
GLOBAL_LIST_EMPTY(snouts_list)
|
||||
GLOBAL_LIST_EMPTY(horns_list)
|
||||
GLOBAL_LIST_EMPTY(frills_list)
|
||||
@@ -30,8 +28,9 @@ GLOBAL_LIST_EMPTY(legs_list)
|
||||
GLOBAL_LIST_EMPTY(animated_spines_list)
|
||||
|
||||
//Mutant Human bits
|
||||
GLOBAL_LIST_EMPTY(tails_list_human)
|
||||
GLOBAL_LIST_EMPTY(animated_tails_list_human)
|
||||
GLOBAL_LIST_EMPTY(tails_list)
|
||||
GLOBAL_LIST_EMPTY(tails_list_human) //Only exists for preference choices. Use "tails_list" otherwise.
|
||||
GLOBAL_LIST_EMPTY(tails_list_lizard) //See above!
|
||||
GLOBAL_LIST_EMPTY(ears_list)
|
||||
GLOBAL_LIST_EMPTY(wings_list)
|
||||
GLOBAL_LIST_EMPTY(wings_open_list)
|
||||
@@ -39,7 +38,6 @@ GLOBAL_LIST_EMPTY(moth_wings_list)
|
||||
GLOBAL_LIST_EMPTY(moth_antennae_list)
|
||||
GLOBAL_LIST_EMPTY(moth_markings_list)
|
||||
GLOBAL_LIST_EMPTY(caps_list)
|
||||
GLOBAL_LIST_EMPTY(tails_list_monkey)
|
||||
GLOBAL_LIST_EMPTY(pod_hair_list)
|
||||
|
||||
GLOBAL_LIST_INIT(color_list_ethereal, list(
|
||||
|
||||
@@ -172,7 +172,7 @@ GLOBAL_LIST_INIT(phobia_objs, list(
|
||||
/obj/item/clothing/head/lizard,
|
||||
/obj/item/clothing/shoes/cowboy/lizard,
|
||||
/obj/item/food/kebab/tail,
|
||||
/obj/item/organ/tail/lizard,
|
||||
/obj/item/organ/external/tail/lizard,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/lizardwine,
|
||||
/obj/item/toy/plush/lizard_plushie,
|
||||
)),
|
||||
@@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(phobia_objs, list(
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/suit/armor/bone,
|
||||
/obj/item/food/meat/slab/human/mutant/skeleton,
|
||||
/obj/item/organ/tongue/bone,
|
||||
/obj/item/organ/internal/tongue/bone,
|
||||
/obj/item/stack/sheet/bone,
|
||||
)),
|
||||
|
||||
@@ -344,8 +344,8 @@ GLOBAL_LIST_INIT(phobia_objs, list(
|
||||
/obj/item/gun/energy/alien,
|
||||
/obj/item/hemostat/alien,
|
||||
/obj/item/melee/baton/abductor,
|
||||
/obj/item/organ/body_egg/alien_embryo,
|
||||
/obj/item/organ/heart/gland,
|
||||
/obj/item/organ/internal/body_egg/alien_embryo,
|
||||
/obj/item/organ/internal/heart/gland,
|
||||
/obj/item/radio/headset/abductor,
|
||||
/obj/item/retractor/alien,
|
||||
/obj/item/scalpel/alien,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
var/desc = "A trauma caused by brain damage, which causes issues to the patient."
|
||||
var/scan_desc = "generic brain trauma" //description when detected by a health scanner
|
||||
var/mob/living/carbon/owner //the poor bastard
|
||||
var/obj/item/organ/brain/brain //the poor bastard's brain
|
||||
var/obj/item/organ/internal/brain/brain //the poor bastard's brain
|
||||
var/gain_text = "<span class='notice'>You feel traumatized.</span>"
|
||||
var/lose_text = "<span class='notice'>You no longer feel traumatized.</span>"
|
||||
var/can_gain = TRUE
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
var/codeword
|
||||
var/objective
|
||||
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/New(obj/item/organ/brain/B, _permanent, _codeword, _objective)
|
||||
/datum/brain_trauma/severe/split_personality/brainwashing/New(obj/item/organ/internal/brain/B, _permanent, _codeword, _objective)
|
||||
..()
|
||||
if(_codeword)
|
||||
codeword = _codeword
|
||||
|
||||
@@ -143,9 +143,9 @@
|
||||
/datum/crafting_recipe/tailclub
|
||||
name = "Tail Club"
|
||||
result = /obj/item/tailclub
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
reqs = list(/obj/item/organ/external/tail/lizard = 1,
|
||||
/obj/item/stack/sheet/iron = 1)
|
||||
blacklist = list(/obj/item/organ/tail/lizard/fake)
|
||||
blacklist = list(/obj/item/organ/external/tail/lizard/fake)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -153,9 +153,9 @@
|
||||
/datum/crafting_recipe/tailwhip
|
||||
name = "Liz O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
reqs = list(/obj/item/organ/external/tail/lizard = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
blacklist = list(/obj/item/organ/tail/lizard/fake)
|
||||
blacklist = list(/obj/item/organ/external/tail/lizard/fake)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -163,7 +163,7 @@
|
||||
/datum/crafting_recipe/catwhip
|
||||
name = "Cat O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip/kitty
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
reqs = list(/obj/item/organ/external/tail/cat = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
@@ -635,7 +635,7 @@
|
||||
name = "Lizard Cloche Hat"
|
||||
result = /obj/item/clothing/head/lizard
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1)
|
||||
reqs = list(/obj/item/organ/external/tail/lizard = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/lizardhat_alternate
|
||||
@@ -649,8 +649,8 @@
|
||||
name = "Kitty Ears"
|
||||
result = /obj/item/clothing/head/kitty/genuine
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/organ/ears/cat = 1)
|
||||
reqs = list(/obj/item/organ/external/tail/cat = 1,
|
||||
/obj/item/organ/internal/ears/cat = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
|
||||
@@ -760,7 +760,7 @@
|
||||
|
||||
/datum/crafting_recipe/flashlight_eyes
|
||||
name = "Flashlight Eyes"
|
||||
result = /obj/item/organ/eyes/robotic/flashlight
|
||||
result = /obj/item/organ/internal/eyes/robotic/flashlight
|
||||
time = 10
|
||||
reqs = list(
|
||||
/obj/item/flashlight = 2,
|
||||
@@ -1288,7 +1288,7 @@
|
||||
reqs = list(/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stack/rods = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/organ/heart/ethereal = 1,
|
||||
/obj/item/organ/internal/heart/ethereal = 1,
|
||||
)
|
||||
category = CAT_MISC
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
// For carbonss we also want to clear out the stomach of any holywater
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
var/obj/item/organ/stomach/belly = carbon_target.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
var/obj/item/organ/internal/stomach/belly = carbon_target.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(belly)
|
||||
holy_to_unholy += belly.reagents.get_reagent_amount(/datum/reagent/water/holywater)
|
||||
belly.reagents.del_reagent(/datum/reagent/water/holywater)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/component/manual_blinking
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
|
||||
var/obj/item/organ/eyes/E
|
||||
var/obj/item/organ/internal/eyes/E
|
||||
var/warn_grace = FALSE
|
||||
var/warn_dying = FALSE
|
||||
var/last_blink
|
||||
@@ -69,18 +69,18 @@
|
||||
/datum/component/manual_blinking/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/obj/item/organ/eyes/new_eyes = O
|
||||
var/obj/item/organ/internal/eyes/new_eyes = O
|
||||
|
||||
if(istype(new_eyes,/obj/item/organ/eyes))
|
||||
if(istype(new_eyes,/obj/item/organ/internal/eyes))
|
||||
E = new_eyes
|
||||
START_PROCESSING(SSdcs, src)
|
||||
|
||||
/datum/component/manual_blinking/proc/check_removed_organ(mob/who_cares, obj/item/organ/O)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/obj/item/organ/eyes/bye_beyes = O // oh come on, that's pretty good
|
||||
var/obj/item/organ/internal/eyes/bye_beyes = O // oh come on, that's pretty good
|
||||
|
||||
if(istype(bye_beyes, /obj/item/organ/eyes))
|
||||
if(istype(bye_beyes, /obj/item/organ/internal/eyes))
|
||||
E = null
|
||||
STOP_PROCESSING(SSdcs, src)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/component/manual_breathing
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
|
||||
var/obj/item/organ/lungs/L
|
||||
var/obj/item/organ/internal/lungs/L
|
||||
var/warn_grace = FALSE
|
||||
var/warn_dying = FALSE
|
||||
var/last_breath
|
||||
@@ -71,18 +71,18 @@
|
||||
/datum/component/manual_breathing/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/obj/item/organ/eyes/new_lungs = O
|
||||
var/obj/item/organ/internal/eyes/new_lungs = O
|
||||
|
||||
if(istype(new_lungs,/obj/item/organ/lungs))
|
||||
if(istype(new_lungs,/obj/item/organ/internal/lungs))
|
||||
L = new_lungs
|
||||
START_PROCESSING(SSdcs, src)
|
||||
|
||||
/datum/component/manual_breathing/proc/check_removed_organ(mob/who_cares, obj/item/organ/O)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/obj/item/organ/lungs/old_lungs = O
|
||||
var/obj/item/organ/internal/lungs/old_lungs = O
|
||||
|
||||
if(istype(old_lungs, /obj/item/organ/lungs))
|
||||
if(istype(old_lungs, /obj/item/organ/internal/lungs))
|
||||
L = null
|
||||
STOP_PROCESSING(SSdcs, src)
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
var/mob/living/carbon/human/lich = new(parent_turf)
|
||||
ADD_TRAIT(lich, TRAIT_NO_SOUL, LICH_TRAIT)
|
||||
|
||||
var/obj/item/organ/brain/new_lich_brain = lich.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/internal/brain/new_lich_brain = lich.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(new_lich_brain) // Prevent MMI cheese
|
||||
new_lich_brain.organ_flags &= ~ORGAN_VITAL
|
||||
new_lich_brain.decoy_override = TRUE
|
||||
@@ -201,7 +201,7 @@
|
||||
var/mob/living/carbon/carbon_body = corpse
|
||||
for(var/obj/item/organ/to_drop as anything in carbon_body.internal_organs)
|
||||
// Skip the brain - it can disappear, we don't need it anymore
|
||||
if(istype(to_drop, /obj/item/organ/brain))
|
||||
if(istype(to_drop, /obj/item/organ/internal/brain))
|
||||
continue
|
||||
|
||||
// For the rest, drop all the organs onto the floor (for style)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
else if(isstructure(parent))
|
||||
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/use_squeak)
|
||||
|
||||
if(istype(parent, /obj/item/organ/liver))
|
||||
if(istype(parent, /obj/item/organ/internal/liver))
|
||||
// Liver squeaking is depending on them functioning like a clown's liver
|
||||
RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_COMEDY_METABOLISM), .proc/on_comedy_metabolism_removal)
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
)
|
||||
return
|
||||
|
||||
var/obj/item/organ/tongue/licking_tongue = user.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
var/obj/item/organ/internal/tongue/licking_tongue = user.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if(licking_tongue)
|
||||
dust_mob(source, user,
|
||||
span_danger("As [user] hesitantly leans in and licks [atom_source] everything goes silent before [user.p_their()] body starts to glow and burst into flames before flashing to ash!"),
|
||||
|
||||
@@ -288,9 +288,10 @@
|
||||
defense_mod += 2
|
||||
|
||||
if(islizard(T))
|
||||
if(!T.getorganslot(ORGAN_SLOT_TAIL)) // lizards without tails are off-balance
|
||||
var/obj/item/organ/external/tail/el_tail = T.getorganslot(ORGAN_SLOT_EXTERNAL_TAIL)
|
||||
if(!el_tail) // lizards without tails are off-balance
|
||||
defense_mod -= 1
|
||||
else if(T.dna.species.is_wagging_tail()) // lizard tail wagging is robust and can swat away assailants!
|
||||
else if(el_tail.wag_flags & WAG_WAGGING) // lizard tail wagging is robust and can swat away assailants!
|
||||
defense_mod += 1
|
||||
|
||||
// OF-FENSE
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/carbon/M = A.affected_mob
|
||||
var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(!ears)
|
||||
return //cutting off your ears to cure the deafness: the ultimate own
|
||||
switch(A.stage)
|
||||
|
||||
@@ -90,12 +90,12 @@
|
||||
var/mob/living/carbon/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(4, 5)
|
||||
var/obj/item/organ/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = M.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(ears)
|
||||
ears.adjustEarDamage(-4, -4)
|
||||
M.adjust_blindness(-2)
|
||||
M.adjust_blurriness(-2)
|
||||
var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(!eyes) // only dealing with eye stuff from here on out
|
||||
return
|
||||
eyes.applyOrganDamage(-2)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/carbon/M = A.affected_mob
|
||||
var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(eyes)
|
||||
switch(A.stage)
|
||||
if(1, 2)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
cure_chance = 7.5 //higher chance to cure, since two reagents are required
|
||||
desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
|
||||
required_organs = list(/obj/item/organ/brain)
|
||||
required_organs = list(/obj/item/organ/internal/brain)
|
||||
severity = DISEASE_SEVERITY_HARMFUL
|
||||
|
||||
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
if(isopenturf(OT))
|
||||
OT.MakeSlippery(TURF_WET_LUBE, 100)
|
||||
if(4)
|
||||
var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in affected_mob.internal_organs
|
||||
var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes/snail) in affected_mob.internal_organs
|
||||
if(!eyes && DT_PROB(2.5, delta_time))
|
||||
var/obj/item/organ/eyes/snail/new_eyes = new()
|
||||
var/obj/item/organ/internal/eyes/snail/new_eyes = new()
|
||||
new_eyes.Insert(affected_mob, drop_if_replaced = TRUE)
|
||||
affected_mob.visible_message(span_warning("[affected_mob]'s eyes fall out, with snail eyes taking its place!"), \
|
||||
span_userdanger("You scream in pain as your eyes are pushed out by your new snail eyes!"))
|
||||
@@ -56,9 +56,9 @@
|
||||
affected_mob.emote("scream")
|
||||
return
|
||||
|
||||
var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.internal_organs
|
||||
var/obj/item/organ/internal/tongue/tongue = locate(/obj/item/organ/internal/tongue/snail) in affected_mob.internal_organs
|
||||
if(!tongue && DT_PROB(2.5, delta_time))
|
||||
var/obj/item/organ/tongue/snail/new_tongue = new()
|
||||
var/obj/item/organ/internal/tongue/snail/new_tongue = new()
|
||||
new_tongue.Insert(affected_mob)
|
||||
to_chat(affected_mob, span_userdanger("You feel your speech slow down..."))
|
||||
return
|
||||
@@ -83,13 +83,13 @@
|
||||
. = ..()
|
||||
if(affected_mob && !is_species(affected_mob, /datum/species/snail)) //undo all the snail fuckening
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in H.internal_organs
|
||||
var/obj/item/organ/internal/tongue/tongue = locate(/obj/item/organ/internal/tongue/snail) in H.internal_organs
|
||||
if(tongue)
|
||||
var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue ()
|
||||
var/obj/item/organ/internal/tongue/new_tongue = new H.dna.species.mutanttongue ()
|
||||
new_tongue.Insert(H)
|
||||
var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in H.internal_organs
|
||||
var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes/snail) in H.internal_organs
|
||||
if(eyes)
|
||||
var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes ()
|
||||
var/obj/item/organ/internal/eyes/new_eyes = new H.dna.species.mutanteyes ()
|
||||
new_eyes.Insert(H)
|
||||
var/obj/item/storage/backpack/bag = H.get_item_by_slot(ITEM_SLOT_BACK)
|
||||
if(istype(bag, /obj/item/storage/backpack/snail))
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
disease_flags = CAN_CARRY|CAN_RESIST
|
||||
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||
visibility_flags = HIDDEN_PANDEMIC
|
||||
required_organs = list(/obj/item/organ/heart)
|
||||
required_organs = list(/obj/item/organ/internal/heart)
|
||||
bypasses_immunity = TRUE // Immunity is based on not having an appendix; this isn't a virus
|
||||
var/sound = FALSE
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
severity = DISEASE_SEVERITY_HARMFUL
|
||||
disease_flags = CAN_CARRY|CAN_RESIST
|
||||
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||
required_organs = list(/obj/item/organ/liver)
|
||||
required_organs = list(/obj/item/organ/internal/liver)
|
||||
bypasses_immunity = TRUE
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
if(!.)
|
||||
return
|
||||
|
||||
var/obj/item/organ/liver/affected_liver = affected_mob.getorgan(/obj/item/organ/liver)
|
||||
var/obj/item/organ/internal/liver/affected_liver = affected_mob.getorgan(/obj/item/organ/internal/liver)
|
||||
if(!affected_liver)
|
||||
affected_mob.visible_message(span_notice("<B>[affected_mob]'s liver is covered in tiny larva! They quickly shrivel and die after being exposed to the open air.</B>"))
|
||||
cure()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
cure_chance = 2.5 //like hell are you getting out of hell
|
||||
desc = "A rare highly transmissible virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
|
||||
required_organs = list(/obj/item/organ/lungs)
|
||||
required_organs = list(/obj/item/organ/internal/lungs)
|
||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||
bypasses_immunity = TRUE // TB primarily impacts the lungs; it's also bacterial or fungal in nature; viral immunity should do nothing.
|
||||
|
||||
|
||||
+9
-17
@@ -195,6 +195,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
L[DNA_ETHEREAL_COLOR_BLOCK] = sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE)
|
||||
if(features["body_markings"])
|
||||
L[DNA_LIZARD_MARKINGS_BLOCK] = construct_block(GLOB.body_markings_list.Find(features["body_markings"]), GLOB.body_markings_list.len)
|
||||
if(features["tail_cat"])
|
||||
L[DNA_TAIL_BLOCK] = construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len)
|
||||
if(features["tail_lizard"])
|
||||
L[DNA_LIZARD_TAIL_BLOCK] = construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len)
|
||||
if(features["snout"])
|
||||
@@ -205,8 +207,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
L[DNA_FRILLS_BLOCK] = construct_block(GLOB.frills_list.Find(features["frills"]), GLOB.frills_list.len)
|
||||
if(features["spines"])
|
||||
L[DNA_SPINES_BLOCK] = construct_block(GLOB.spines_list.Find(features["spines"]), GLOB.spines_list.len)
|
||||
if(features["tail_human"])
|
||||
L[DNA_HUMAN_TAIL_BLOCK] = construct_block(GLOB.tails_list_human.Find(features["tail_human"]), GLOB.tails_list_human.len)
|
||||
if(features["ears"])
|
||||
L[DNA_EARS_BLOCK] = construct_block(GLOB.ears_list.Find(features["ears"]), GLOB.ears_list.len)
|
||||
if(features["moth_wings"] != "Burnt Off")
|
||||
@@ -217,8 +217,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
L[DNA_MOTH_MARKINGS_BLOCK] = construct_block(GLOB.moth_markings_list.Find(features["moth_markings"]), GLOB.moth_markings_list.len)
|
||||
if(features["caps"])
|
||||
L[DNA_MUSHROOM_CAPS_BLOCK] = construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len)
|
||||
if(features["tail_monkey"])
|
||||
L[DNA_MONKEY_TAIL_BLOCK] = construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len)
|
||||
if(features["pod_hair"])
|
||||
L[DNA_POD_HAIR_BLOCK] = construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len)
|
||||
|
||||
@@ -331,8 +329,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE))
|
||||
if(DNA_LIZARD_MARKINGS_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.body_markings_list.Find(features["body_markings"]), GLOB.body_markings_list.len))
|
||||
if(DNA_LIZARD_TAIL_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len))
|
||||
if(DNA_TAIL_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list.Find(features["tail_lizard"]), GLOB.tails_list.len))
|
||||
if(DNA_SNOUT_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len))
|
||||
if(DNA_HORNS_BLOCK)
|
||||
@@ -341,8 +339,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.frills_list.Find(features["frills"]), GLOB.frills_list.len))
|
||||
if(DNA_SPINES_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.spines_list.Find(features["spines"]), GLOB.spines_list.len))
|
||||
if(DNA_HUMAN_TAIL_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_human.Find(features["tail_human"]), GLOB.tails_list_human.len))
|
||||
if(DNA_EARS_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.ears_list.Find(features["ears"]), GLOB.ears_list.len))
|
||||
if(DNA_MOTH_WINGS_BLOCK)
|
||||
@@ -353,8 +349,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.moth_markings_list.Find(features["moth_markings"]), GLOB.moth_markings_list.len))
|
||||
if(DNA_MUSHROOM_CAPS_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.caps_list.Find(features["caps"]), GLOB.caps_list.len))
|
||||
if(DNA_MONKEY_TAIL_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len))
|
||||
if(DNA_POD_HAIR_BLOCK)
|
||||
set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len))
|
||||
|
||||
@@ -578,8 +572,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
dna.features["ethcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_ETHEREAL_COLOR_BLOCK))
|
||||
if(dna.features["body_markings"])
|
||||
dna.features["body_markings"] = GLOB.body_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_MARKINGS_BLOCK), GLOB.body_markings_list.len)]
|
||||
if(dna.features["tail_lizard"])
|
||||
dna.features["tail_lizard"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)]
|
||||
if(dna.features["snout"])
|
||||
dna.features["snout"] = GLOB.snouts_list[deconstruct_block(get_uni_feature_block(features, DNA_SNOUT_BLOCK), GLOB.snouts_list.len)]
|
||||
if(dna.features["horns"])
|
||||
@@ -588,8 +580,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
dna.features["frills"] = GLOB.frills_list[deconstruct_block(get_uni_feature_block(features, DNA_FRILLS_BLOCK), GLOB.frills_list.len)]
|
||||
if(dna.features["spines"])
|
||||
dna.features["spines"] = GLOB.spines_list[deconstruct_block(get_uni_feature_block(features, DNA_SPINES_BLOCK), GLOB.spines_list.len)]
|
||||
if(dna.features["tail_human"])
|
||||
dna.features["tail_human"] = GLOB.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_HUMAN_TAIL_BLOCK), GLOB.tails_list_human.len)]
|
||||
if(dna.features["tail_cat"])
|
||||
dna.features["tail_cat"] = GLOB.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), GLOB.tails_list_human.len)]
|
||||
if(dna.features["tail_lizard"])
|
||||
dna.features["tail_cat"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)]
|
||||
if(dna.features["ears"])
|
||||
dna.features["ears"] = GLOB.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), GLOB.ears_list.len)]
|
||||
if(dna.features["moth_wings"])
|
||||
@@ -604,8 +598,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
dna.features["moth_markings"] = GLOB.moth_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_MOTH_MARKINGS_BLOCK), GLOB.moth_markings_list.len)]
|
||||
if(dna.features["caps"])
|
||||
dna.features["caps"] = GLOB.caps_list[deconstruct_block(get_uni_feature_block(features, DNA_MUSHROOM_CAPS_BLOCK), GLOB.caps_list.len)]
|
||||
if(dna.features["tail_monkey"])
|
||||
dna.features["tail_monkey"] = GLOB.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), GLOB.tails_list_monkey.len)]
|
||||
if(dna.features["pod_hair"])
|
||||
dna.features["pod_hair"] = GLOB.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), GLOB.pod_hair_list.len)]
|
||||
|
||||
@@ -869,7 +861,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
|
||||
|
||||
/mob/living/carbon/human/proc/something_horrible_mindmelt()
|
||||
if(!is_blind())
|
||||
var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes) in internal_organs
|
||||
var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes) in internal_organs
|
||||
if(!eyes)
|
||||
return
|
||||
eyes.Remove(src)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
/datum/element/earhealing/process(delta_time)
|
||||
for(var/i in user_by_item)
|
||||
var/mob/living/carbon/user = user_by_item[i]
|
||||
var/obj/item/organ/ears/ears = user.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = user.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(!ears || HAS_TRAIT_NOT_FROM(user, TRAIT_DEAF, EAR_DAMAGE))
|
||||
continue
|
||||
ears.deaf = max(ears.deaf - 0.25 * delta_time, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
log_combat(user, target, "attacked", "[item.name]", "(Combat mode: [user.combat_mode ? "On" : "Off"])")
|
||||
|
||||
var/obj/item/organ/eyes/eyes = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = target.getorganslot(ORGAN_SLOT_EYES)
|
||||
if (!eyes)
|
||||
return
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/selected_zone = user.zone_selected
|
||||
var/obj/item/bodypart/r_leg = target.get_bodypart(BODY_ZONE_R_LEG)
|
||||
var/obj/item/bodypart/l_leg = target.get_bodypart(BODY_ZONE_L_LEG)
|
||||
var/obj/item/organ/brain/target_brain = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/internal/brain/target_brain = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
|
||||
if(!ishuman(target))
|
||||
return
|
||||
|
||||
@@ -92,10 +92,9 @@
|
||||
timeout = 2 MINUTES
|
||||
|
||||
/datum/mood_event/table/add_effects()
|
||||
if(isfelinid(owner))
|
||||
if(isfelinid(owner)) //Holy snowflake batman!
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.dna.species.start_wagging_tail(H)
|
||||
addtimer(CALLBACK(H.dna.species, /datum/species.proc/stop_wagging_tail, H), 3 SECONDS)
|
||||
SEND_SIGNAL(H, COMSIG_ORGAN_WAG_TAIL, TRUE, 3 SECONDS)
|
||||
description = "They want to play on the table!"
|
||||
mood_change = 2
|
||||
|
||||
|
||||
@@ -280,9 +280,9 @@
|
||||
var/mob/living/carbon/C = user
|
||||
if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
|
||||
return
|
||||
var/obj/item/organ/tongue/tongue
|
||||
var/obj/item/organ/internal/tongue/tongue
|
||||
for(var/org in C.internal_organs)
|
||||
if(istype(org, /obj/item/organ/tongue))
|
||||
if(istype(org, /obj/item/organ/internal/tongue))
|
||||
tongue = org
|
||||
break
|
||||
|
||||
|
||||
@@ -459,7 +459,7 @@
|
||||
|
||||
explosion(owner, light_impact_range = 2, adminlog = TRUE, explosion_cause = src)
|
||||
for(var/mob/living/carbon/human/H in view(2,owner))
|
||||
var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(eyes)
|
||||
to_chat(H, span_userdanger("You are blinded by a shower of blood!"))
|
||||
else
|
||||
@@ -484,7 +484,7 @@
|
||||
. = ..()
|
||||
if(.)//cant add
|
||||
return TRUE
|
||||
var/obj/item/organ/brain/brain = owner.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/internal/brain/brain = owner.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(brain)
|
||||
brain.zone = BODY_ZONE_CHEST
|
||||
|
||||
@@ -502,7 +502,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return TRUE
|
||||
var/obj/item/organ/brain/brain = owner.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/internal/brain/brain = owner.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(brain) //so this doesn't instantly kill you. we could delete the brain, but it lets people cure brain issues they /really/ shouldn't be
|
||||
brain.zone = BODY_ZONE_HEAD
|
||||
UnregisterSignal(owner, COMSIG_CARBON_ATTACH_LIMB)
|
||||
|
||||
@@ -107,8 +107,8 @@
|
||||
if(special) //aheals
|
||||
return
|
||||
|
||||
if(istype(new_organ, /obj/item/organ/eyes))
|
||||
var/obj/item/organ/eyes/new_eyes = new_organ
|
||||
if(istype(new_organ, /obj/item/organ/internal/eyes))
|
||||
var/obj/item/organ/internal/eyes/new_eyes = new_organ
|
||||
if(new_eyes.tint < TINT_BLIND) //unless you added unworking eyes (flashlight eyes), this is removing burden
|
||||
update_burden(FALSE)
|
||||
return
|
||||
@@ -121,8 +121,8 @@
|
||||
if(special) //aheals
|
||||
return
|
||||
|
||||
if(istype(old_organ, /obj/item/organ/eyes))
|
||||
var/obj/item/organ/eyes/old_eyes = old_organ
|
||||
if(istype(old_organ, /obj/item/organ/internal/eyes))
|
||||
var/obj/item/organ/internal/eyes/old_eyes = old_organ
|
||||
if(old_eyes.tint < TINT_BLIND) //unless you were already blinded by them (flashlight eyes), this is adding burden!
|
||||
update_burden(TRUE)
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/possible_throwable = user.pulling
|
||||
if(!possible_throwable.getorganslot(ORGAN_SLOT_TAIL))
|
||||
if(!possible_throwable.getorganslot(ORGAN_SLOT_EXTERNAL_TAIL))
|
||||
return
|
||||
|
||||
if(ishuman(possible_throwable))
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
/datum/quirk/night_vision/proc/refresh_quirk_holder_eyes()
|
||||
var/mob/living/carbon/human/human_quirk_holder = quirk_holder
|
||||
var/obj/item/organ/eyes/eyes = human_quirk_holder.getorgan(/obj/item/organ/eyes)
|
||||
var/obj/item/organ/internal/eyes/eyes = human_quirk_holder.getorgan(/obj/item/organ/internal/eyes)
|
||||
if(!eyes || eyes.lighting_alpha)
|
||||
return
|
||||
// We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes.
|
||||
|
||||
@@ -724,7 +724,7 @@
|
||||
var/brand = initial(drug_container_type.name)
|
||||
quirk_holder.mind.add_memory(MEMORY_QUIRK_DRUG, list(DETAIL_FAV_BRAND = brand), memory_flags = MEMORY_FLAG_NOLOCATION | MEMORY_FLAG_NOPERSISTENCE, story_value = STORY_VALUE_SHIT)
|
||||
// smoker lungs have 25% less health and healing
|
||||
var/obj/item/organ/lungs/smoker_lungs = quirk_holder.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
var/obj/item/organ/internal/lungs/smoker_lungs = quirk_holder.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if (smoker_lungs && !(smoker_lungs.organ_flags & ORGAN_SYNTHETIC)) // robotic lungs aren't affected
|
||||
smoker_lungs.maxHealth = smoker_lungs.maxHealth * 0.75
|
||||
smoker_lungs.healing_factor = smoker_lungs.healing_factor * 0.75
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
// We set override to TRUE as link to holder will be called whenever the preference is applied, given this quirk exists on the mob
|
||||
RegisterSignal(human_holder, COMSIG_CARBON_LOSE_ORGAN, .proc/check_eye_removal, override=TRUE)
|
||||
|
||||
var/obj/item/organ/eyes/eyes_of_the_holder = quirk_holder.getorgan(/obj/item/organ/eyes)
|
||||
var/obj/item/organ/internal/eyes/eyes_of_the_holder = quirk_holder.getorgan(/obj/item/organ/internal/eyes)
|
||||
if(!eyes_of_the_holder)
|
||||
return
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
eyes_of_the_holder.old_eye_color_right = color
|
||||
eyes_of_the_holder.refresh()
|
||||
|
||||
/datum/quirk/heterochromatic/proc/check_eye_removal(datum/source, obj/item/organ/eyes/removed)
|
||||
/datum/quirk/heterochromatic/proc/check_eye_removal(datum/source, obj/item/organ/internal/eyes/removed)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!istype(removed))
|
||||
@@ -342,11 +342,11 @@
|
||||
|
||||
/datum/quirk/item_quirk/tongue_tied/add_unique()
|
||||
var/mob/living/carbon/human/human_holder = quirk_holder
|
||||
var/obj/item/organ/tongue/old_tongue = human_holder.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
var/obj/item/organ/internal/tongue/old_tongue = human_holder.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
old_tongue.Remove(human_holder)
|
||||
qdel(old_tongue)
|
||||
|
||||
var/obj/item/organ/tongue/tied/new_tongue = new(get_turf(human_holder))
|
||||
var/obj/item/organ/internal/tongue/tied/new_tongue = new(get_turf(human_holder))
|
||||
new_tongue.Insert(human_holder)
|
||||
// Only tongues of people with this quirk can't be removed. Manually spawned or found tongues can be.
|
||||
new_tongue.organ_flags |= ORGAN_UNREMOVABLE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/datum/saymode/vocalcords/handle_message(mob/living/user, message, datum/language/language)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
var/obj/item/organ/vocal_cords/V = C.getorganslot(ORGAN_SLOT_VOICE)
|
||||
var/obj/item/organ/internal/vocal_cords/V = C.getorganslot(ORGAN_SLOT_VOICE)
|
||||
if(V?.can_speak_with())
|
||||
V.handle_speech(message) //message
|
||||
V.speak_with(message) //action
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
if(QDELETED(human_mob))
|
||||
return
|
||||
if(prob(1))//low chance of the alternative reality returning to monkey
|
||||
var/obj/item/organ/tail/monkey/monkey_tail = new ()
|
||||
var/obj/item/organ/external/tail/monkey/monkey_tail = new ()
|
||||
monkey_tail.Insert(human_mob, drop_if_replaced = FALSE)
|
||||
var/datum/species/human_species = human_mob.dna?.species
|
||||
if(human_species)
|
||||
|
||||
@@ -946,7 +946,7 @@
|
||||
candidates = living_players
|
||||
for(var/mob/living/carbon/human/candidate in candidates)
|
||||
if( \
|
||||
!candidate.getorgan(/obj/item/organ/brain) \
|
||||
!candidate.getorgan(/obj/item/organ/internal/brain) \
|
||||
|| candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
|
||||
|| candidate.stat == DEAD \
|
||||
|| !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
|
||||
|
||||
@@ -282,7 +282,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
|
||||
|
||||
|
||||
/datum/objective/protect/check_completion()
|
||||
var/obj/item/organ/brain/brain_target
|
||||
var/obj/item/organ/internal/brain/brain_target
|
||||
if(human_check)
|
||||
brain_target = target.current?.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
//Protect will always suceed when someone suicides
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
base_icon_state = "scanner"
|
||||
density = TRUE
|
||||
obj_flags = NO_BUILD // Becomes undense when the door is open
|
||||
occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain)
|
||||
occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/internal/brain)
|
||||
circuit = /obj/item/circuitboard/machine/dnascanner
|
||||
var/locked = FALSE
|
||||
var/damage_coeff
|
||||
|
||||
@@ -262,7 +262,7 @@
|
||||
chemical_list += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01)))
|
||||
if(reagent.overdosed)
|
||||
overdose_list += list(list("name" = reagent.name))
|
||||
var/obj/item/organ/stomach/belly = patient.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
var/obj/item/organ/internal/stomach/belly = patient.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(belly?.reagents.reagent_list.len) //include the stomach contents if it exists
|
||||
for(var/bile in belly.reagents.reagent_list)
|
||||
var/datum/reagent/bit = bile
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
if(istype(AM, /obj/item))
|
||||
var/obj/item/bodypart/head/as_head = AM
|
||||
var/obj/item/mmi/as_mmi = AM
|
||||
if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
|
||||
if(istype(AM, /obj/item/organ/internal/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
|
||||
living_detected = TRUE
|
||||
nom += AM
|
||||
else if(isliving(AM))
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
name = "antag gear"
|
||||
icon_state = "esword"
|
||||
loot = list(
|
||||
|
||||
/obj/item/clothing/glasses/science/night = 15,
|
||||
/obj/item/shield/riot = 12,
|
||||
/obj/item/stack/sheet/mineral/diamond{amount = 15} = 5,
|
||||
|
||||
@@ -25,18 +25,18 @@
|
||||
icon_state = "eyes"
|
||||
spawn_loot_count = 3
|
||||
loot = list(
|
||||
/obj/item/organ/heart/gland/egg = 7,
|
||||
/obj/item/organ/heart/gland/plasma = 7,
|
||||
/obj/item/organ/heart/gland/chem = 5,
|
||||
/obj/item/organ/heart/gland/mindshock = 5,
|
||||
/obj/item/organ/heart/gland/transform = 5,
|
||||
/obj/item/organ/heart/gland/spiderman = 5,
|
||||
/obj/item/organ/heart/gland/slime = 4,
|
||||
/obj/item/organ/heart/gland/trauma = 4,
|
||||
/obj/item/organ/heart/gland/electric = 3,
|
||||
/obj/item/organ/internal/heart/gland/egg = 7,
|
||||
/obj/item/organ/internal/heart/gland/plasma = 7,
|
||||
/obj/item/organ/internal/heart/gland/chem = 5,
|
||||
/obj/item/organ/internal/heart/gland/mindshock = 5,
|
||||
/obj/item/organ/internal/heart/gland/transform = 5,
|
||||
/obj/item/organ/internal/heart/gland/spiderman = 5,
|
||||
/obj/item/organ/internal/heart/gland/slime = 4,
|
||||
/obj/item/organ/internal/heart/gland/trauma = 4,
|
||||
/obj/item/organ/internal/heart/gland/electric = 3,
|
||||
/obj/item/organ/regenerative_core = 2,
|
||||
/obj/item/organ/heart/gland/ventcrawling = 1,
|
||||
/obj/item/organ/body_egg/alien_embryo = 1,
|
||||
/obj/item/organ/internal/heart/gland/ventcrawling = 1,
|
||||
/obj/item/organ/internal/body_egg/alien_embryo = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/medical/memeorgans
|
||||
@@ -44,23 +44,23 @@
|
||||
icon_state = "eyes"
|
||||
spawn_loot_count = 5
|
||||
loot = list(
|
||||
/obj/item/organ/ears/penguin,
|
||||
/obj/item/organ/ears/cat,
|
||||
/obj/item/organ/eyes/moth,
|
||||
/obj/item/organ/eyes/snail,
|
||||
/obj/item/organ/tongue/bone,
|
||||
/obj/item/organ/tongue/fly,
|
||||
/obj/item/organ/tongue/snail,
|
||||
/obj/item/organ/tongue/lizard,
|
||||
/obj/item/organ/tongue/alien,
|
||||
/obj/item/organ/tongue/ethereal,
|
||||
/obj/item/organ/tongue/robot,
|
||||
/obj/item/organ/tongue/zombie,
|
||||
/obj/item/organ/appendix,
|
||||
/obj/item/organ/liver/fly,
|
||||
/obj/item/organ/lungs/plasmaman,
|
||||
/obj/item/organ/tail/cat,
|
||||
/obj/item/organ/tail/lizard,
|
||||
/obj/item/organ/internal/ears/penguin,
|
||||
/obj/item/organ/internal/ears/cat,
|
||||
/obj/item/organ/internal/eyes/moth,
|
||||
/obj/item/organ/internal/eyes/snail,
|
||||
/obj/item/organ/internal/tongue/bone,
|
||||
/obj/item/organ/internal/tongue/fly,
|
||||
/obj/item/organ/internal/tongue/snail,
|
||||
/obj/item/organ/internal/tongue/lizard,
|
||||
/obj/item/organ/internal/tongue/alien,
|
||||
/obj/item/organ/internal/tongue/ethereal,
|
||||
/obj/item/organ/internal/tongue/robot,
|
||||
/obj/item/organ/internal/tongue/zombie,
|
||||
/obj/item/organ/internal/appendix,
|
||||
/obj/item/organ/internal/liver/fly,
|
||||
/obj/item/organ/internal/lungs/plasmaman,
|
||||
/obj/item/organ/external/tail/cat,
|
||||
/obj/item/organ/external/tail/lizard,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/airlock_painter/suicide_act(mob/user)
|
||||
var/obj/item/organ/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
var/obj/item/organ/internal/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
|
||||
if(can_use(user) && L)
|
||||
user.visible_message(span_suicide("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/body_egg
|
||||
/obj/item/organ/internal/body_egg
|
||||
name = "body egg"
|
||||
desc = "All slimy and yuck."
|
||||
icon_state = "innards"
|
||||
@@ -6,23 +6,23 @@
|
||||
zone = BODY_ZONE_CHEST
|
||||
slot = ORGAN_SLOT_PARASITE_EGG
|
||||
|
||||
/obj/item/organ/body_egg/on_find(mob/living/finder)
|
||||
/obj/item/organ/internal/body_egg/on_find(mob/living/finder)
|
||||
..()
|
||||
to_chat(finder, span_warning("You found an unknown alien organism in [owner]'s [zone]!"))
|
||||
|
||||
/obj/item/organ/body_egg/Initialize(mapload)
|
||||
/obj/item/organ/internal/body_egg/Initialize(mapload)
|
||||
. = ..()
|
||||
if(iscarbon(loc))
|
||||
Insert(loc)
|
||||
|
||||
/obj/item/organ/body_egg/Insert(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/internal/body_egg/Insert(mob/living/carbon/M, special = FALSE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_XENO_HOST, ORGAN_TRAIT)
|
||||
ADD_TRAIT(owner, TRAIT_XENO_IMMUNE, ORGAN_TRAIT)
|
||||
owner.med_hud_set_status()
|
||||
INVOKE_ASYNC(src, .proc/AddInfectionImages, owner)
|
||||
|
||||
/obj/item/organ/body_egg/Remove(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/internal/body_egg/Remove(mob/living/carbon/M, special = FALSE)
|
||||
if(owner)
|
||||
REMOVE_TRAIT(owner, TRAIT_XENO_HOST, ORGAN_TRAIT)
|
||||
REMOVE_TRAIT(owner, TRAIT_XENO_IMMUNE, ORGAN_TRAIT)
|
||||
@@ -30,25 +30,25 @@
|
||||
INVOKE_ASYNC(src, .proc/RemoveInfectionImages, owner)
|
||||
..()
|
||||
|
||||
/obj/item/organ/body_egg/on_death(delta_time, times_fired)
|
||||
/obj/item/organ/internal/body_egg/on_death(delta_time, times_fired)
|
||||
. = ..()
|
||||
if(!owner)
|
||||
return
|
||||
egg_process(delta_time, times_fired)
|
||||
|
||||
/obj/item/organ/body_egg/on_life(delta_time, times_fired)
|
||||
/obj/item/organ/internal/body_egg/on_life(delta_time, times_fired)
|
||||
. = ..()
|
||||
egg_process(delta_time, times_fired)
|
||||
|
||||
/obj/item/organ/body_egg/proc/egg_process(delta_time, times_fired)
|
||||
/obj/item/organ/internal/body_egg/proc/egg_process(delta_time, times_fired)
|
||||
return
|
||||
|
||||
/obj/item/organ/body_egg/proc/RefreshInfectionImage()
|
||||
/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage()
|
||||
RemoveInfectionImages()
|
||||
AddInfectionImages()
|
||||
|
||||
/obj/item/organ/body_egg/proc/AddInfectionImages()
|
||||
/obj/item/organ/internal/body_egg/proc/AddInfectionImages()
|
||||
return
|
||||
|
||||
/obj/item/organ/body_egg/proc/RemoveInfectionImages()
|
||||
/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages()
|
||||
return
|
||||
|
||||
@@ -96,12 +96,12 @@
|
||||
if(!augment_list)
|
||||
augment_list = list()
|
||||
var/list/templist = list(
|
||||
/obj/item/organ/cyberimp/brain/anti_drop,
|
||||
/obj/item/organ/cyberimp/arm/toolset,
|
||||
/obj/item/organ/cyberimp/arm/surgery,
|
||||
/obj/item/organ/cyberimp/chest/thrusters,
|
||||
/obj/item/organ/lungs/cybernetic/tier3,
|
||||
/obj/item/organ/liver/cybernetic/tier3) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
|
||||
/obj/item/organ/internal/cyberimp/brain/anti_drop,
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset,
|
||||
/obj/item/organ/internal/cyberimp/arm/surgery,
|
||||
/obj/item/organ/internal/cyberimp/chest/thrusters,
|
||||
/obj/item/organ/internal/lungs/cybernetic/tier3,
|
||||
/obj/item/organ/internal/liver/cybernetic/tier3) //cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
|
||||
for(var/V in templist)
|
||||
var/atom/A = V
|
||||
augment_list[initial(A.name)] = A
|
||||
|
||||
@@ -303,7 +303,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
return
|
||||
|
||||
reagents.expose(smoker, INGEST, min(to_smoke / reagents.total_volume, 1))
|
||||
var/obj/item/organ/lungs/lungs = smoker.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
var/obj/item/organ/internal/lungs/lungs = smoker.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if(lungs && !(lungs.organ_flags & ORGAN_SYNTHETIC))
|
||||
var/smoker_resistance = HAS_TRAIT(smoker, TRAIT_SMOKER) ? 0.5 : 1
|
||||
smoker.adjustOrganLoss(ORGAN_SLOT_LUNGS, lung_harm*smoker_resistance)
|
||||
|
||||
@@ -571,7 +571,7 @@
|
||||
if(do_after(user, 3 SECONDS, H)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest."))
|
||||
playsound(src, 'sound/machines/defib_charge.ogg', 75, FALSE)
|
||||
var/obj/item/organ/heart = H.getorgan(/obj/item/organ/heart)
|
||||
var/obj/item/organ/internal/heart = H.getorgan(/obj/item/organ/internal/heart)
|
||||
if(do_after(user, 2 SECONDS, H)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
|
||||
if((!combat && !req_defib) || (req_defib && !defib.combat))
|
||||
for(var/obj/item/clothing/C in H.get_equipped_items())
|
||||
@@ -640,7 +640,7 @@
|
||||
log_combat(user, H, "revived", defib)
|
||||
do_success()
|
||||
return
|
||||
else if (!H.getorgan(/obj/item/organ/heart))
|
||||
else if (!H.getorgan(/obj/item/organ/internal/heart))
|
||||
user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's heart is missing. Operation aborted."))
|
||||
playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE)
|
||||
else if(H.undergoing_cardiac_arrest())
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first!"))
|
||||
return
|
||||
|
||||
var/obj/item/organ/eyes/E = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/E = M.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(!E)
|
||||
to_chat(user, span_warning("[M] doesn't have any eyes!"))
|
||||
return
|
||||
@@ -527,7 +527,7 @@
|
||||
if(!fuel)
|
||||
user.visible_message(span_suicide("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but it's empty!"))
|
||||
return SHAME
|
||||
var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(!eyes)
|
||||
user.visible_message(span_suicide("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but [user.p_they()] don't have any!"))
|
||||
return SHAME
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
var/mob/living/carbon/carbontarget = target
|
||||
|
||||
// Ear status
|
||||
var/obj/item/organ/ears/ears = carbontarget.getorganslot(ORGAN_SLOT_EARS)
|
||||
var/obj/item/organ/internal/ears/ears = carbontarget.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(istype(ears))
|
||||
if(HAS_TRAIT_FROM(carbontarget, TRAIT_DEAF, GENETIC_MUTATION))
|
||||
render_list = "<span class='alert ml-2'>Subject is genetically deaf.\n</span>"
|
||||
@@ -211,7 +211,7 @@
|
||||
render_list += "<span class='alert ml-2'>Subject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf.\n</span>"
|
||||
|
||||
// Eye status
|
||||
var/obj/item/organ/eyes/eyes = carbontarget.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = carbontarget.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(istype(eyes))
|
||||
if(carbontarget.is_blind())
|
||||
render_list += "<span class='alert ml-2'>Subject is blind.\n</span>"
|
||||
@@ -365,7 +365,7 @@
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbontarget = target
|
||||
var/cyberimp_detect
|
||||
for(var/obj/item/organ/cyberimp/CI in carbontarget.internal_organs)
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in carbontarget.internal_organs)
|
||||
if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant)
|
||||
cyberimp_detect += "[!cyberimp_detect ? "[CI.get_examine_string(user)]" : ", [CI.get_examine_string(user)]"]"
|
||||
if(cyberimp_detect)
|
||||
@@ -397,7 +397,7 @@
|
||||
render_list += "<span class='notice ml-1'>Subject contains no reagents in their blood.</span>\n"
|
||||
|
||||
// Stomach reagents
|
||||
var/obj/item/organ/stomach/belly = target.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
var/obj/item/organ/internal/stomach/belly = target.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(belly)
|
||||
if(belly.reagents.reagent_list.len)
|
||||
render_list += "<span class='notice ml-1'>Subject contains the following reagents in their stomach:</span>\n"
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
user.visible_message(span_suicide("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!"))
|
||||
|
||||
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code
|
||||
var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/internal/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea
|
||||
var/randdir
|
||||
for(var/i in 1 to 24)//like a headless chicken!
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
if(ishuman(slapped))
|
||||
var/mob/living/carbon/human/human_slapped = slapped
|
||||
human_slapped.dna?.species?.stop_wagging_tail(slapped)
|
||||
SEND_SIGNAL(human_slapped, COMSIG_ORGAN_WAG_TAIL, FALSE)
|
||||
user.do_attack_animation(slapped)
|
||||
|
||||
var/slap_volume = 50
|
||||
@@ -569,7 +569,7 @@
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
var/mob/living/carbon/heartbreakee = target
|
||||
var/obj/item/organ/heart/dont_go_breakin_my_heart = heartbreakee.getorganslot(ORGAN_SLOT_HEART)
|
||||
var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.getorganslot(ORGAN_SLOT_HEART)
|
||||
dont_go_breakin_my_heart.applyOrganDamage(999)
|
||||
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
|
||||
/obj/item/melee/baton/telescopic/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
var/obj/item/organ/brain/our_brain = human_user.getorgan(/obj/item/organ/brain)
|
||||
var/obj/item/organ/internal/brain/our_brain = human_user.getorgan(/obj/item/organ/internal/brain)
|
||||
|
||||
user.visible_message(span_suicide("[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear [user.p_their()] mind."))
|
||||
if(active)
|
||||
|
||||
@@ -220,10 +220,9 @@
|
||||
|
||||
else if(istype(W, /obj/item/bodypart/head/robot))
|
||||
var/obj/item/bodypart/head/robot/HD = W
|
||||
for(var/X in HD.contents)
|
||||
if(istype(X, /obj/item/organ))
|
||||
to_chat(user, span_warning("There are organs inside [HD]!"))
|
||||
return
|
||||
if(locate(/obj/item/organ/internal) in HD)
|
||||
to_chat(user, span_warning("There are organs inside [HD]!"))
|
||||
return
|
||||
if(head)
|
||||
return
|
||||
if(HD.flash2 && HD.flash1)
|
||||
|
||||
@@ -577,30 +577,26 @@
|
||||
///freezes the organ and loops bodyparts like heads
|
||||
/obj/item/storage/organbox/proc/freeze(datum/source, obj/item/I)
|
||||
SIGNAL_HANDLER
|
||||
if(isorgan(I))
|
||||
var/obj/item/organ/organ = I
|
||||
organ.organ_flags |= ORGAN_FROZEN
|
||||
if(isinternalorgan(I))
|
||||
var/obj/item/organ/internal/int_organ = I
|
||||
int_organ.organ_flags |= ORGAN_FROZEN
|
||||
return
|
||||
if(istype(I, /obj/item/bodypart))
|
||||
var/obj/item/bodypart/B = I
|
||||
for(var/O in B.contents)
|
||||
if(isorgan(O))
|
||||
var/obj/item/organ/organ = O
|
||||
organ.organ_flags |= ORGAN_FROZEN
|
||||
for(var/obj/item/organ/internal/int_organ in B.contents)
|
||||
int_organ.organ_flags |= ORGAN_FROZEN
|
||||
|
||||
///unfreezes the organ and loops bodyparts like heads
|
||||
/obj/item/storage/organbox/proc/unfreeze(datum/source, obj/item/I)
|
||||
SIGNAL_HANDLER
|
||||
if(isorgan(I))
|
||||
var/obj/item/organ/organ = I
|
||||
organ.organ_flags &= ~ORGAN_FROZEN
|
||||
if(isinternalorgan(I))
|
||||
var/obj/item/organ/internal/int_organ = I
|
||||
int_organ.organ_flags &= ~ORGAN_FROZEN
|
||||
return
|
||||
if(istype(I, /obj/item/bodypart))
|
||||
var/obj/item/bodypart/B = I
|
||||
for(var/O in B.contents)
|
||||
if(isorgan(O))
|
||||
var/obj/item/organ/organ = O
|
||||
organ.organ_flags &= ~ORGAN_FROZEN
|
||||
for(var/obj/item/organ/internal/int_organ in B.contents)
|
||||
int_organ.organ_flags &= ~ORGAN_FROZEN
|
||||
|
||||
/obj/item/storage/organbox/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers) && I.is_open_container())
|
||||
|
||||
@@ -375,7 +375,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(user.getorgan(/obj/item/organ/alien/plasmavessel))
|
||||
if(user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
|
||||
switch(status)
|
||||
if(BURSTING)
|
||||
to_chat(user, span_notice("The child is hatching out."))
|
||||
@@ -443,7 +443,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = AM
|
||||
if(C.stat == CONSCIOUS && C.getorgan(/obj/item/organ/body_egg/alien_embryo))
|
||||
if(C.stat == CONSCIOUS && C.getorgan(/obj/item/organ/internal/body_egg/alien_embryo))
|
||||
return
|
||||
|
||||
Burst(kill=FALSE)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
for(var/buck in buckled_mobs) //breaking a nest releases all the buckled mobs, because the nest isn't holding them down anymore
|
||||
var/mob/living/M = buck
|
||||
|
||||
if(user.getorgan(/obj/item/organ/alien/plasmavessel))
|
||||
if(user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
|
||||
unbuckle_mob(M)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
@@ -51,9 +51,9 @@
|
||||
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated() || M.buckled )
|
||||
return
|
||||
|
||||
if(M.getorgan(/obj/item/organ/alien/plasmavessel))
|
||||
if(M.getorgan(/obj/item/organ/internal/alien/plasmavessel))
|
||||
return
|
||||
if(!user.getorgan(/obj/item/organ/alien/plasmavessel))
|
||||
if(!user.getorgan(/obj/item/organ/internal/alien/plasmavessel))
|
||||
return
|
||||
|
||||
if(has_buckled_mobs())
|
||||
|
||||
@@ -143,7 +143,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
|
||||
if(3)
|
||||
new /obj/item/reagent_containers/glass/bottle/potion/flight(loc)
|
||||
if(4)
|
||||
new /obj/item/organ/heart/cursed/wizard(loc)
|
||||
new /obj/item/organ/internal/heart/cursed/wizard(loc)
|
||||
if(5)
|
||||
new /obj/item/jacobs_ladder(loc)
|
||||
if(6)
|
||||
|
||||
@@ -636,7 +636,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
clear_reagents_to_vomit_pool(M, V, purge_ratio)
|
||||
|
||||
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge_ratio = 0.1)
|
||||
var/obj/item/organ/stomach/belly = M.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
var/obj/item/organ/internal/stomach/belly = M.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(!belly?.reagents.total_volume)
|
||||
return
|
||||
var/chemicals_lost = belly.reagents.total_volume * purge_ratio
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
// Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant.
|
||||
human.dna.features["mcolor"] = "#[random_color()]"
|
||||
human.dna.features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)]
|
||||
human.dna.features["tail_cat"] = pick(GLOB.tails_list_human)
|
||||
human.dna.features["tail_lizard"] = pick(GLOB.tails_list_lizard)
|
||||
human.dna.features["snout"] = pick(GLOB.snouts_list)
|
||||
human.dna.features["horns"] = pick(GLOB.horns_list)
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
for(var/i in GLOB.human_list)
|
||||
var/mob/living/carbon/human/H = i
|
||||
new /obj/item/organ/zombie_infection/nodamage(H)
|
||||
new /obj/item/organ/internal/zombie_infection/nodamage(H)
|
||||
|
||||
message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.")
|
||||
log_admin("[key_name(usr)] added a latent zombie infection to all humans.")
|
||||
@@ -160,7 +160,7 @@
|
||||
if(confirm != "Yes")
|
||||
return
|
||||
|
||||
for(var/obj/item/organ/zombie_infection/nodamage/I in GLOB.zombie_infection_list)
|
||||
for(var/obj/item/organ/internal/zombie_infection/nodamage/I in GLOB.zombie_infection_list)
|
||||
qdel(I)
|
||||
|
||||
message_admins("[key_name_admin(usr)] cured all zombies.")
|
||||
|
||||
@@ -501,8 +501,8 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
|
||||
|
||||
if(H.dna.species.id == SPECIES_HUMAN)
|
||||
if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None")
|
||||
var/obj/item/organ/ears/cat/ears = new
|
||||
var/obj/item/organ/tail/cat/tail = new
|
||||
var/obj/item/organ/internal/ears/cat/ears = new
|
||||
var/obj/item/organ/external/tail/cat/tail = new
|
||||
ears.Insert(H, drop_if_replaced=FALSE)
|
||||
tail.Insert(H, drop_if_replaced=FALSE)
|
||||
var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san"), "[PLURAL]" = list("san")) //John Robust -> Robust-kun
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
for(var/obj/item/item in human_target.get_equipped_items(delete_pocket))
|
||||
qdel(item)
|
||||
|
||||
var/obj/item/organ/brain/human_brain = human_target.getorganslot(BRAIN)
|
||||
var/obj/item/organ/internal/brain/human_brain = human_target.getorganslot(BRAIN)
|
||||
human_brain.destroy_all_skillchips() // get rid of skillchips to prevent runtimes
|
||||
|
||||
if(dresscode != "Naked")
|
||||
|
||||
@@ -94,7 +94,7 @@ GLOBAL_LIST_INIT(possible_abductor_names, list("Alpha","Beta","Gamma","Delta","E
|
||||
//Equip
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
H.set_species(/datum/species/abductor)
|
||||
var/obj/item/organ/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
var/obj/item/organ/internal/tongue/abductor/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
T.mothership = "[team.name]"
|
||||
|
||||
H.real_name = "[team.name] [sub_role]"
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
/obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
var/obj/item/organ/heart/gland/G = C.getorganslot("heart")
|
||||
var/obj/item/organ/internal/heart/gland/G = C.getorganslot("heart")
|
||||
if(!istype(G))
|
||||
to_chat(user, span_warning("Your target does not have an experimental gland!"))
|
||||
return
|
||||
@@ -590,7 +590,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
species = span_notice("[H.dna.species.name]")
|
||||
if(L.mind && L.mind.has_antag_datum(/datum/antagonist/changeling))
|
||||
species = span_warning("Changeling lifeform")
|
||||
var/obj/item/organ/heart/gland/temp = locate() in H.internal_organs
|
||||
var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs
|
||||
if(temp)
|
||||
helptext = span_warning("Experimental gland detected!")
|
||||
else
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
accept_hand = 1
|
||||
time = 32
|
||||
var/obj/item/organ/IC = null
|
||||
var/list/organ_types = list(/obj/item/organ/heart)
|
||||
var/list/organ_types = list(/obj/item/organ/internal/heart)
|
||||
|
||||
/datum/surgery_step/extract_organ/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
for(var/atom/A in target.internal_organs)
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
/datum/surgery_step/gland_insert
|
||||
name = "insert gland"
|
||||
implements = list(/obj/item/organ/heart/gland = 100)
|
||||
implements = list(/obj/item/organ/internal/heart/gland = 100)
|
||||
time = 32
|
||||
|
||||
/datum/surgery_step/gland_insert/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
@@ -50,6 +50,6 @@
|
||||
/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message(span_notice("[user] inserts [tool] into [target]."), span_notice("You insert [tool] into [target]."))
|
||||
user.temporarilyRemoveItemFromInventory(tool, TRUE)
|
||||
var/obj/item/organ/heart/gland/gland = tool
|
||||
var/obj/item/organ/internal/heart/gland/gland = tool
|
||||
gland.Insert(target, 2)
|
||||
return 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland
|
||||
/obj/item/organ/internal/heart/gland
|
||||
name = "fleshy mass"
|
||||
desc = "A nausea-inducing hunk of twisting flesh and metal."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
@@ -24,27 +24,27 @@
|
||||
var/mind_control_duration = 1800
|
||||
var/active_mind_control = FALSE
|
||||
|
||||
/obj/item/organ/heart/gland/Initialize(mapload)
|
||||
/obj/item/organ/internal/heart/gland/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
|
||||
|
||||
/obj/item/organ/heart/gland/examine(mob/user)
|
||||
/obj/item/organ/internal/heart/gland/examine(mob/user)
|
||||
. = ..()
|
||||
if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user))
|
||||
. += span_notice("It is \a [abductor_hint]")
|
||||
|
||||
/obj/item/organ/heart/gland/proc/ownerCheck()
|
||||
/obj/item/organ/internal/heart/gland/proc/ownerCheck()
|
||||
if(ishuman(owner))
|
||||
return TRUE
|
||||
if(!human_only && iscarbon(owner))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/heart/gland/proc/Start()
|
||||
/obj/item/organ/internal/heart/gland/proc/Start()
|
||||
active = 1
|
||||
COOLDOWN_START(src, activation_cooldown, rand(cooldown_low, cooldown_high))
|
||||
|
||||
/obj/item/organ/heart/gland/proc/update_gland_hud()
|
||||
/obj/item/organ/internal/heart/gland/proc/update_gland_hud()
|
||||
if(!owner)
|
||||
return
|
||||
var/image/holder = owner.hud_list[GLAND_HUD]
|
||||
@@ -57,7 +57,7 @@
|
||||
else
|
||||
holder.icon_state = "hudgland_spent"
|
||||
|
||||
/obj/item/organ/heart/gland/proc/mind_control(command, mob/living/user)
|
||||
/obj/item/organ/internal/heart/gland/proc/mind_control(command, mob/living/user)
|
||||
if(!ownerCheck() || !mind_control_uses || active_mind_control)
|
||||
return FALSE
|
||||
mind_control_uses--
|
||||
@@ -72,7 +72,7 @@
|
||||
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/proc/clear_mind_control()
|
||||
/obj/item/organ/internal/heart/gland/proc/clear_mind_control()
|
||||
if(!ownerCheck() || !active_mind_control)
|
||||
return FALSE
|
||||
to_chat(owner, span_userdanger("You feel the compulsion fade, and you <i>completely forget</i> about your previous orders."))
|
||||
@@ -80,7 +80,7 @@
|
||||
active_mind_control = FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/internal/heart/gland/Remove(mob/living/carbon/M, special = FALSE)
|
||||
active = FALSE
|
||||
if(initial(uses) == 1)
|
||||
uses = initial(uses)
|
||||
@@ -89,7 +89,7 @@
|
||||
clear_mind_control()
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = FALSE)
|
||||
/obj/item/organ/internal/heart/gland/Insert(mob/living/carbon/M, special = FALSE)
|
||||
..()
|
||||
if(special != 2 && uses) // Special 2 means abductor surgery
|
||||
Start()
|
||||
@@ -97,7 +97,7 @@
|
||||
hud.add_atom_to_hud(owner)
|
||||
update_gland_hud()
|
||||
|
||||
/obj/item/organ/heart/gland/on_life(delta_time, times_fired)
|
||||
/obj/item/organ/internal/heart/gland/on_life(delta_time, times_fired)
|
||||
if(!beating)
|
||||
// alien glands are immune to stopping.
|
||||
beating = TRUE
|
||||
@@ -113,5 +113,5 @@
|
||||
if(!uses)
|
||||
active = FALSE
|
||||
|
||||
/obj/item/organ/heart/gland/proc/activate()
|
||||
/obj/item/organ/internal/heart/gland/proc/activate()
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/access
|
||||
/obj/item/organ/internal/heart/gland/access
|
||||
abductor_hint = "anagraphic electro-scrambler. After it activates, grants the abductee intrinsic all access."
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
@@ -7,6 +7,6 @@
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/access/activate()
|
||||
/obj/item/organ/internal/heart/gland/access/activate()
|
||||
to_chat(owner, span_notice("You feel like a VIP for some reason."))
|
||||
owner.AddComponent(/datum/component/simple_access, SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL)), src)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/blood
|
||||
/obj/item/organ/internal/heart/gland/blood
|
||||
abductor_hint = "pseudonuclear hemo-destabilizer. Periodically randomizes the abductee's bloodtype into a random reagent."
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
@@ -9,7 +9,7 @@
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 1500
|
||||
|
||||
/obj/item/organ/heart/gland/blood/activate()
|
||||
/obj/item/organ/internal/heart/gland/blood/activate()
|
||||
if(!ishuman(owner) || !owner.dna.species)
|
||||
return
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/chem
|
||||
/obj/item/organ/internal/heart/gland/chem
|
||||
abductor_hint = "intrinsic pharma-provider. The abductee constantly produces random chemicals inside their bloodstream. They also quickly regenerate toxin damage."
|
||||
cooldown_low = 50
|
||||
cooldown_high = 50
|
||||
@@ -8,12 +8,12 @@
|
||||
mind_control_duration = 1200
|
||||
var/list/possible_reagents = list()
|
||||
|
||||
/obj/item/organ/heart/gland/chem/Initialize(mapload)
|
||||
/obj/item/organ/internal/heart/gland/chem/Initialize(mapload)
|
||||
. = ..()
|
||||
for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
|
||||
possible_reagents += R
|
||||
|
||||
/obj/item/organ/heart/gland/chem/activate()
|
||||
/obj/item/organ/internal/heart/gland/chem/activate()
|
||||
var/chem_to_add = pick(possible_reagents)
|
||||
owner.reagents.add_reagent(chem_to_add, 2)
|
||||
owner.adjustToxLoss(-5, TRUE, TRUE)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/egg
|
||||
/obj/item/organ/internal/heart/gland/egg
|
||||
abductor_hint = "roe/enzymatic synthesizer. The abductee will periodically lay eggs filled with random reagents."
|
||||
cooldown_low = 300
|
||||
cooldown_high = 400
|
||||
@@ -9,7 +9,7 @@
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 1800
|
||||
|
||||
/obj/item/organ/heart/gland/egg/activate()
|
||||
/obj/item/organ/internal/heart/gland/egg/activate()
|
||||
owner.visible_message(span_alertalien("[owner] [pick(EGG_LAYING_MESSAGES)]"))
|
||||
var/turf/T = owner.drop_location()
|
||||
new /obj/item/food/egg/gland(T)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/electric
|
||||
/obj/item/organ/internal/heart/gland/electric
|
||||
abductor_hint = "electron accumulator/discharger. The abductee becomes fully immune to electric shocks. Additionally, they will randomly discharge electric bolts."
|
||||
cooldown_low = 800
|
||||
cooldown_high = 1200
|
||||
@@ -7,20 +7,20 @@
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
|
||||
REMOVE_TRAIT(owner, TRAIT_SHOCKIMMUNE, "abductor_gland")
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/electric/activate()
|
||||
/obj/item/organ/internal/heart/gland/electric/activate()
|
||||
owner.visible_message(span_danger("[owner]'s skin starts emitting electric arcs!"),\
|
||||
span_warning("You feel electric energy building up inside you!"))
|
||||
playsound(get_turf(owner), SFX_SPARKS, 100, TRUE, -1, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
addtimer(CALLBACK(src, .proc/zap), rand(30, 100))
|
||||
|
||||
/obj/item/organ/heart/gland/electric/proc/zap()
|
||||
/obj/item/organ/internal/heart/gland/electric/proc/zap()
|
||||
tesla_zap(owner, 4, 8000, ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN)
|
||||
playsound(get_turf(owner), 'sound/magic/lightningshock.ogg', 50, TRUE)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/heal
|
||||
/obj/item/organ/internal/heart/gland/heal
|
||||
abductor_hint = "organic replicator. Forcibly ejects damaged and robotic organs from the abductee and regenerates them. Additionally, forcibly removes reagents (via vomit) from the abductee if they have moderate toxin damage or poison within the bloodstream, and regenerates blood to a healthy threshold if too low. The abductee will also reject implants such as mindshields."
|
||||
cooldown_low = 200
|
||||
cooldown_high = 400
|
||||
@@ -8,7 +8,7 @@
|
||||
mind_control_uses = 3
|
||||
mind_control_duration = 3000
|
||||
|
||||
/obj/item/organ/heart/gland/heal/activate()
|
||||
/obj/item/organ/internal/heart/gland/heal/activate()
|
||||
if(!(owner.mob_biotypes & MOB_ORGANIC))
|
||||
return
|
||||
|
||||
@@ -17,31 +17,31 @@
|
||||
return
|
||||
|
||||
for(var/organ in owner.internal_organs)
|
||||
if(istype(organ, /obj/item/organ/cyberimp))
|
||||
if(istype(organ, /obj/item/organ/internal/cyberimp))
|
||||
reject_cyberimp(organ)
|
||||
return
|
||||
|
||||
var/obj/item/organ/appendix/appendix = owner.getorganslot(ORGAN_SLOT_APPENDIX)
|
||||
var/obj/item/organ/internal/appendix/appendix = owner.getorganslot(ORGAN_SLOT_APPENDIX)
|
||||
if((!appendix && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (appendix && ((appendix.organ_flags & ORGAN_FAILING) || (appendix.organ_flags & ORGAN_SYNTHETIC))))
|
||||
replace_appendix(appendix)
|
||||
return
|
||||
|
||||
var/obj/item/organ/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER)
|
||||
var/obj/item/organ/internal/liver/liver = owner.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if((!liver && !HAS_TRAIT(owner, TRAIT_NOMETABOLISM)) || (liver && ((liver.damage > liver.high_threshold) || (liver.organ_flags & ORGAN_SYNTHETIC))))
|
||||
replace_liver(liver)
|
||||
return
|
||||
|
||||
var/obj/item/organ/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
var/obj/item/organ/internal/lungs/lungs = owner.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && ((lungs.damage > lungs.high_threshold) || (lungs.organ_flags & ORGAN_SYNTHETIC))))
|
||||
replace_lungs(lungs)
|
||||
return
|
||||
|
||||
var/obj/item/organ/stomach/stomach = owner.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
var/obj/item/organ/internal/stomach/stomach = owner.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if((!stomach && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (stomach && ((stomach.damage > stomach.high_threshold) || (stomach.organ_flags & ORGAN_SYNTHETIC))))
|
||||
replace_stomach(stomach)
|
||||
return
|
||||
|
||||
var/obj/item/organ/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(!eyes || (eyes && ((eyes.damage > eyes.low_threshold) || (eyes.organ_flags & ORGAN_SYNTHETIC))))
|
||||
replace_eyes(eyes)
|
||||
return
|
||||
@@ -76,19 +76,19 @@
|
||||
replace_chest(chest)
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/implant/implant)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/reject_implant(obj/item/implant/implant)
|
||||
owner.visible_message(span_warning("[owner] vomits up a tiny mangled implant!"), span_userdanger("You suddenly vomit up a tiny mangled implant!"))
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
implant.removed(owner)
|
||||
qdel(implant)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/reject_cyberimp(obj/item/organ/cyberimp/implant)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/reject_cyberimp(obj/item/organ/internal/cyberimp/implant)
|
||||
owner.visible_message(span_warning("[owner] vomits up his [implant.name]!"), span_userdanger("You suddenly vomit up your [implant.name]!"))
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
implant.Remove(owner)
|
||||
implant.forceMove(owner.drop_location())
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_appendix(obj/item/organ/appendix/appendix)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_appendix(obj/item/organ/internal/appendix/appendix)
|
||||
if(appendix)
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
appendix.Remove(owner)
|
||||
@@ -97,13 +97,13 @@
|
||||
else
|
||||
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
|
||||
|
||||
var/appendix_type = /obj/item/organ/appendix
|
||||
var/appendix_type = /obj/item/organ/internal/appendix
|
||||
if(owner?.dna?.species?.mutantappendix)
|
||||
appendix_type = owner.dna.species.mutantappendix
|
||||
var/obj/item/organ/appendix/new_appendix = new appendix_type()
|
||||
var/obj/item/organ/internal/appendix/new_appendix = new appendix_type()
|
||||
new_appendix.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_liver(obj/item/organ/internal/liver/liver)
|
||||
if(liver)
|
||||
owner.visible_message(span_warning("[owner] vomits up his [liver.name]!"), span_userdanger("You suddenly vomit up your [liver.name]!"))
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
@@ -112,13 +112,13 @@
|
||||
else
|
||||
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
|
||||
|
||||
var/liver_type = /obj/item/organ/liver
|
||||
var/liver_type = /obj/item/organ/internal/liver
|
||||
if(owner?.dna?.species?.mutantliver)
|
||||
liver_type = owner.dna.species.mutantliver
|
||||
var/obj/item/organ/liver/new_liver = new liver_type()
|
||||
var/obj/item/organ/internal/liver/new_liver = new liver_type()
|
||||
new_liver.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_lungs(obj/item/organ/internal/lungs/lungs)
|
||||
if(lungs)
|
||||
owner.visible_message(span_warning("[owner] vomits up his [lungs.name]!"), span_userdanger("You suddenly vomit up your [lungs.name]!"))
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
@@ -127,13 +127,13 @@
|
||||
else
|
||||
to_chat(owner, span_warning("You feel a weird rumble inside your chest..."))
|
||||
|
||||
var/lung_type = /obj/item/organ/lungs
|
||||
var/lung_type = /obj/item/organ/internal/lungs
|
||||
if(owner.dna.species && owner.dna.species.mutantlungs)
|
||||
lung_type = owner.dna.species.mutantlungs
|
||||
var/obj/item/organ/lungs/new_lungs = new lung_type()
|
||||
var/obj/item/organ/internal/lungs/new_lungs = new lung_type()
|
||||
new_lungs.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_stomach(obj/item/organ/stomach/stomach)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_stomach(obj/item/organ/internal/stomach/stomach)
|
||||
if(stomach)
|
||||
owner.visible_message(span_warning("[owner] vomits up his [stomach.name]!"), span_userdanger("You suddenly vomit up your [stomach.name]!"))
|
||||
owner.vomit(0, TRUE, TRUE, 1, FALSE, FALSE, FALSE, TRUE)
|
||||
@@ -142,13 +142,13 @@
|
||||
else
|
||||
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
|
||||
|
||||
var/stomach_type = /obj/item/organ/stomach
|
||||
var/stomach_type = /obj/item/organ/internal/stomach
|
||||
if(owner?.dna?.species?.mutantstomach)
|
||||
stomach_type = owner.dna.species.mutantstomach
|
||||
var/obj/item/organ/stomach/new_stomach = new stomach_type()
|
||||
var/obj/item/organ/internal/stomach/new_stomach = new stomach_type()
|
||||
new_stomach.Insert(owner)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_eyes(obj/item/organ/internal/eyes/eyes)
|
||||
if(eyes)
|
||||
owner.visible_message(span_warning("[owner]'s [eyes.name] fall out of their sockets!"), span_userdanger("Your [eyes.name] fall out of their sockets!"))
|
||||
playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
@@ -159,15 +159,15 @@
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_replace_eyes), rand(100, 200))
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes()
|
||||
var/eye_type = /obj/item/organ/eyes
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/finish_replace_eyes()
|
||||
var/eye_type = /obj/item/organ/internal/eyes
|
||||
if(owner.dna.species && owner.dna.species.mutanteyes)
|
||||
eye_type = owner.dna.species.mutanteyes
|
||||
var/obj/item/organ/eyes/new_eyes = new eye_type()
|
||||
var/obj/item/organ/internal/eyes/new_eyes = new eye_type()
|
||||
new_eyes.Insert(owner)
|
||||
owner.visible_message(span_warning("A pair of new eyes suddenly inflates into [owner]'s eye sockets!"), span_userdanger("A pair of new eyes suddenly inflates into your eye sockets!"))
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
|
||||
if(limb)
|
||||
owner.visible_message(span_warning("[owner]'s [limb.plaintext_zone] suddenly detaches from [owner.p_their()] body!"), span_userdanger("Your [limb.plaintext_zone] suddenly detaches from your body!"))
|
||||
playsound(owner, SFX_DESECRATION, 50, TRUE, -1)
|
||||
@@ -177,18 +177,18 @@
|
||||
|
||||
addtimer(CALLBACK(src, .proc/finish_replace_limb, body_zone), rand(150, 300))
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/finish_replace_limb(body_zone)
|
||||
owner.visible_message(span_warning("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!"),
|
||||
span_userdanger("With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!"),
|
||||
span_warning("Your hear a loud snap."))
|
||||
playsound(owner, 'sound/magic/demon_consume.ogg', 50, TRUE)
|
||||
owner.regenerate_limb(body_zone)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_blood()
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_blood()
|
||||
owner.visible_message(span_warning("[owner] starts vomiting huge amounts of blood!"), span_userdanger("You suddenly start vomiting huge amounts of blood!"))
|
||||
keep_replacing_blood()
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood()
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/keep_replacing_blood()
|
||||
var/keep_going = FALSE
|
||||
owner.vomit(0, TRUE, FALSE, 3, FALSE, FALSE, FALSE, TRUE)
|
||||
owner.Stun(15)
|
||||
@@ -207,7 +207,7 @@
|
||||
if(keep_going)
|
||||
addtimer(CALLBACK(src, .proc/keep_replacing_blood), 30)
|
||||
|
||||
/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
|
||||
/obj/item/organ/internal/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
|
||||
if(!IS_ORGANIC_LIMB(chest))
|
||||
owner.visible_message(span_warning("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!"), span_userdanger("Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!"))
|
||||
playsound(owner, 'sound/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/mindshock
|
||||
/obj/item/organ/internal/heart/gland/mindshock
|
||||
abductor_hint = "neural crosstalk uninhibitor. The abductee emits a disrupting psychic wave every so often. This will either stun, cause hallucinations or deal random brain damage to people nearby."
|
||||
cooldown_low = 40 SECONDS
|
||||
cooldown_high = 70 SECONDS
|
||||
@@ -8,7 +8,7 @@
|
||||
mind_control_duration = 120 SECONDS
|
||||
var/list/mob/living/carbon/human/broadcasted_mobs = list()
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/activate()
|
||||
/obj/item/organ/internal/heart/gland/mindshock/activate()
|
||||
to_chat(owner, span_notice("You get a headache."))
|
||||
|
||||
var/turf/owner_turf = get_turf(owner)
|
||||
@@ -30,7 +30,7 @@
|
||||
if(3)
|
||||
target.hallucination += 60
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user)
|
||||
/obj/item/organ/internal/heart/gland/mindshock/mind_control(command, mob/living/user)
|
||||
if(!ownerCheck() || !mind_control_uses || active_mind_control)
|
||||
return FALSE
|
||||
mind_control_uses--
|
||||
@@ -62,7 +62,7 @@
|
||||
update_gland_hud()
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/heart/gland/mindshock/clear_mind_control()
|
||||
/obj/item/organ/internal/heart/gland/mindshock/clear_mind_control()
|
||||
if(!active_mind_control || !LAZYLEN(broadcasted_mobs))
|
||||
return FALSE
|
||||
for(var/target_mob in broadcasted_mobs)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/plasma
|
||||
/obj/item/organ/internal/heart/gland/plasma
|
||||
abductor_hint = "effluvium sanguine-synonym emitter. The abductee randomly emits clouds of plasma."
|
||||
cooldown_low = 1200
|
||||
cooldown_high = 1800
|
||||
@@ -7,12 +7,12 @@
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 800
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/activate()
|
||||
/obj/item/organ/internal/heart/gland/plasma/activate()
|
||||
to_chat(owner, span_warning("You feel bloated."))
|
||||
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, span_userdanger("A massive stomachache overcomes you.")), 150)
|
||||
addtimer(CALLBACK(src, .proc/vomit_plasma), 200)
|
||||
|
||||
/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
|
||||
/obj/item/organ/internal/heart/gland/plasma/proc/vomit_plasma()
|
||||
if(!owner)
|
||||
return
|
||||
owner.visible_message(span_danger("[owner] vomits a cloud of plasma!"))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/quantum
|
||||
/obj/item/organ/internal/heart/gland/quantum
|
||||
abductor_hint = "quantic de-observation matrix. Periodically links with a random person in view, then the abductee later swaps positions with that person."
|
||||
cooldown_low = 150
|
||||
cooldown_high = 150
|
||||
@@ -8,7 +8,7 @@
|
||||
mind_control_duration = 1200
|
||||
var/mob/living/carbon/entangled_mob
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/activate()
|
||||
/obj/item/organ/internal/heart/gland/quantum/activate()
|
||||
if(entangled_mob)
|
||||
return
|
||||
for(var/mob/M in oview(owner, 7))
|
||||
@@ -18,7 +18,7 @@
|
||||
addtimer(CALLBACK(src, .proc/quantum_swap), rand(600, 2400))
|
||||
return
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
|
||||
/obj/item/organ/internal/heart/gland/quantum/proc/quantum_swap()
|
||||
if(QDELETED(entangled_mob))
|
||||
entangled_mob = null
|
||||
return
|
||||
@@ -30,7 +30,7 @@
|
||||
if(!active_mind_control) //Do not reset entangled mob while mind control is active
|
||||
entangled_mob = null
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user)
|
||||
/obj/item/organ/internal/heart/gland/quantum/mind_control(command, mob/living/user)
|
||||
if(..())
|
||||
if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
|
||||
to_chat(entangled_mob, span_userdanger("You suddenly feel an irresistible compulsion to follow an order..."))
|
||||
@@ -41,7 +41,7 @@
|
||||
log_game("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]")
|
||||
update_gland_hud()
|
||||
|
||||
/obj/item/organ/heart/gland/quantum/clear_mind_control()
|
||||
/obj/item/organ/internal/heart/gland/quantum/clear_mind_control()
|
||||
if(active_mind_control)
|
||||
to_chat(entangled_mob, span_userdanger("You feel the compulsion fade, and you completely forget about your previous orders."))
|
||||
entangled_mob.clear_alert(ALERT_MIND_CONTROL)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/slime
|
||||
/obj/item/organ/internal/heart/gland/slime
|
||||
abductor_hint = "gastric animation galvanizer. The abductee occasionally vomits slimes. Slimes will no longer attack the abductee."
|
||||
cooldown_low = 600
|
||||
cooldown_high = 1200
|
||||
@@ -7,17 +7,17 @@
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
owner.faction |= "slime"
|
||||
owner.grant_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Remove(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/internal/heart/gland/slime/Remove(mob/living/carbon/M, special = 0)
|
||||
owner.faction -= "slime"
|
||||
owner.remove_language(/datum/language/slime, TRUE, TRUE, LANGUAGE_GLAND)
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/slime/activate()
|
||||
/obj/item/organ/internal/heart/gland/slime/activate()
|
||||
to_chat(owner, span_warning("You feel nauseated!"))
|
||||
owner.vomit(20)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/spiderman
|
||||
/obj/item/organ/internal/heart/gland/spiderman
|
||||
abductor_hint = "araneae cloister accelerator. The abductee occasionally exhales spider pheromones and will spawn spiderlings."
|
||||
cooldown_low = 450
|
||||
cooldown_high = 900
|
||||
@@ -7,7 +7,7 @@
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/spiderman/activate()
|
||||
/obj/item/organ/internal/heart/gland/spiderman/activate()
|
||||
to_chat(owner, span_warning("You feel something crawling in your skin."))
|
||||
owner.faction |= "spiders"
|
||||
var/obj/structure/spider/spiderling/S = new(owner.drop_location())
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/organ/heart/gland/transform
|
||||
/obj/item/organ/internal/heart/gland/transform
|
||||
abductor_hint = "anthropmorphic transmorphosizer. The abductee will occasionally change appearance and species."
|
||||
cooldown_low = 900
|
||||
cooldown_high = 1800
|
||||
@@ -8,7 +8,7 @@
|
||||
mind_control_uses = 7
|
||||
mind_control_duration = 300
|
||||
|
||||
/obj/item/organ/heart/gland/transform/activate()
|
||||
/obj/item/organ/internal/heart/gland/transform/activate()
|
||||
to_chat(owner, span_notice("You feel unlike yourself."))
|
||||
randomize_human(owner)
|
||||
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly))
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user