Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05

This commit is contained in:
Roxy
2025-11-05 19:43:07 -05:00
461 changed files with 41708 additions and 37517 deletions
+7 -22
View File
@@ -23,7 +23,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
var/restyle_flags = NONE
///If not null, overrides the appearance with this sprite accessory datum
var/sprite_accessory_override
var/datum/sprite_accessory/sprite_accessory_override
/**accessory_type is optional if you haven't set sprite_datums for the object, and is used mostly to generate sprite_datums from a persons DNA
* For _mob_sprite we make a distinction between "Round Snout" and "round". Round Snout is the name of the sprite datum, while "round" would be part of the sprite
@@ -32,7 +32,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/obj/item/organ/proc/setup_bodypart_overlay(accessory_type)
bodypart_overlay = new bodypart_overlay(src)
accessory_type = accessory_type ? accessory_type : sprite_accessory_override
accessory_type ||= sprite_accessory_override
var/update_overlays = TRUE
if(accessory_type)
bodypart_overlay.set_appearance(accessory_type)
@@ -113,7 +113,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EXTERNAL_HORNS
//dna_block = /datum/dna_block/feature/horn // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/horn // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_ENAMEL
bodypart_overlay = /datum/bodypart_overlay/mutant/horns
@@ -128,9 +128,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
/datum/bodypart_overlay/mutant/horns/get_global_feature_list()
return SSaccessories.sprite_accessories["horns"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.horns_list
///The frills of a lizard (like weird fin ears)
/obj/item/organ/frills
name = "frills"
@@ -140,7 +137,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EXTERNAL_FRILLS
//dna_block = /datum/dna_block/feature/frill // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/frill // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/frills
@@ -154,9 +151,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/frills/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
return !(bodypart_owner.owner?.obscured_slots & HIDEEARS)
/datum/bodypart_overlay/mutant/frills/get_global_feature_list()
return SSaccessories.sprite_accessories["frills"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.frills_list
///Guess what part of the lizard this is?
/obj/item/organ/snout
name = "snout" // SKYRAT EDIT - ORIGINAL: name = "lizard snout"
@@ -168,7 +162,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
external_bodyshapes = BODYSHAPE_SNOUTED
//dna_block = /datum/dna_block/feature/snout // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/snout // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/snout
@@ -182,9 +176,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/snout/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
return !(bodypart_owner.owner?.obscured_slots & HIDESNOUT)
/datum/bodypart_overlay/mutant/snout/get_global_feature_list()
return SSaccessories.sprite_accessories["snout"] // SKYRAT EDIT - Customization - ORIGINAL : return SSaccessories.snouts_list
///A moth's antennae
/obj/item/organ/antennae
name = "moth antennae"
@@ -194,7 +185,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EXTERNAL_ANTENNAE
//dna_block = /datum/dna_block/feature/moth_antenna // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/moth_antenna // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/antennae
@@ -260,9 +251,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times
burn_datum = fetch_sprite_datum(burn_datum) //turn the path into the singleton instance
/datum/bodypart_overlay/mutant/antennae/get_global_feature_list()
return SSaccessories.sprite_accessories["moth_antennae"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.moth_antennae_list
/datum/bodypart_overlay/mutant/antennae/get_base_icon_state()
return burnt ? burn_datum.icon_state : sprite_datum.icon_state
@@ -284,7 +272,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
use_mob_sprite_as_obj_sprite = TRUE
//dna_block = /datum/dna_block/feature/pod_hair // BUBBER EDIT REMOVAL - We have our own system for handling DNA
//dna_block = /datum/dna_block/feature/accessory/pod_hair // BUBBER EDIT REMOVAL - We have our own system for handling DNA
restyle_flags = EXTERNAL_RESTYLE_PLANT
bodypart_overlay = /datum/bodypart_overlay/mutant/pod_hair
@@ -302,9 +290,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times
///The individual rgb colors are subtracted from this to get the color shifted layer
var/color_inverse_base = 255
/datum/bodypart_overlay/mutant/pod_hair/get_global_feature_list()
return SSaccessories.pod_hair_list
/datum/bodypart_overlay/mutant/pod_hair/color_image(image/overlay, draw_layer, obj/item/bodypart/limb)
if(draw_layer != bitflag_to_layer(color_swapped_layer))
return ..()
+1 -4
View File
@@ -7,7 +7,7 @@
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_EXTERNAL_SPINES
//dna_block = /datum/dna_block/feature/spine // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/spine // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/spines
@@ -32,9 +32,6 @@
feature_key = FEATURE_SPINES
dyable = TRUE
/datum/bodypart_overlay/mutant/spines/get_global_feature_list()
return SSaccessories.sprite_accessories["spines"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.spines_list
/datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
return !(bodypart_owner.owner?.obscured_slots & HIDEJUMPSUIT)
+3 -18
View File
@@ -7,7 +7,7 @@
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_EXTERNAL_TAIL
//dna_block = /datum/dna_block/feature/tail // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/tail // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
// defaults to cat, but the parent type shouldn't be created regardless
@@ -179,9 +179,6 @@
feature_key = FEATURE_TAIL_GENERIC // BUBBER EDIT CHANGE - Customization - ORIGINAL: feature_key = FEATURE_TAIL_CAT
// color_source = ORGAN_COLOR_HAIR // SKYRAT EDIT REMOVAL
/datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list()
return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // BUBBER EDIT CHANGE - ORIGINAL: return SSaccessories.tails_list_felinid
/obj/item/organ/tail/monkey
name = "monkey tail"
icon_state = "severedmonkeytail"
@@ -191,10 +188,7 @@
///Monkey tail bodypart overlay
/datum/bodypart_overlay/mutant/tail/monkey
color_source = NONE
feature_key = FEATURE_TAIL_GENERIC // BUBBER EDIT CHANGE - Customization - ORIGINAL: feature_key = FEATURE_TAIL_MONKEY
/datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list()
return SSaccessories.tails_list_monkey
feature_key = FEATURE_TAIL_MONKEY
/obj/item/organ/tail/xeno
name = "alien tail"
@@ -243,9 +237,6 @@
. = ..()
set_appearance_from_name(default_appearance)
/datum/bodypart_overlay/mutant/tail/xeno/get_global_feature_list()
return SSaccessories.tails_list_xeno
/datum/bodypart_overlay/mutant/tail/xeno/randomize_appearance()
set_appearance_from_name(default_appearance)
@@ -259,15 +250,12 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/lizard
wag_flags = WAG_ABLE
//dna_block = /datum/dna_block/feature/tail_lizard // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/tail_lizard // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
///Lizard tail bodypart overlay datum
/datum/bodypart_overlay/mutant/tail/lizard
feature_key = FEATURE_TAIL_GENERIC // BUBBER EDIT CHANGE - Customization - ORIGINAL: feature_key = FEATURE_TAIL_LIZARD
/datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list()
return SSaccessories.sprite_accessories[FEATURE_TAIL_GENERIC] // BUBBER EDIT CHANGE - Customization - ORIGINAL: return SSaccessories.tails_list_lizard
/obj/item/organ/tail/lizard/fake
name = "fabricated lizard tail"
desc = "A fabricated severed lizard tail. This one's made of synthflesh. Probably not usable for lizard wine."
@@ -281,9 +269,6 @@
/// Key for tail spine states, depends on the shape of the tail. Defined in the tail sprite datum.
var/tail_spine_key = NONE
/datum/bodypart_overlay/mutant/tail_spines/get_global_feature_list()
return SSaccessories.sprite_accessories["tailspines"] // SKYRAT EDIT CHANGE - ORIGINAL: return SSaccessories.tail_spines_list
/datum/bodypart_overlay/mutant/tail_spines/get_base_icon_state()
return (!isnull(tail_spine_key) ? "[tail_spine_key]_" : "") + (wagging ? "wagging_" : "") + sprite_datum.icon_state // Select the wagging state if appropriate
@@ -166,26 +166,21 @@
/datum/bodypart_overlay/mutant/wings/functional
///Are our wings currently open? Change through open_wings or close_wings()
VAR_PRIVATE/wings_open = FALSE
///Feature render key for opened wings
var/open_feature_key = "wingsopen"
/datum/bodypart_overlay/mutant/wings/functional/get_global_feature_list()
/* SKYRAT EDIT - CUSTOMIZATION - ORIGINAL:
if(wings_open)
return SSaccessories.wings_open_list
else
return SSaccessories.wings_list
*/ // SKYRAT EDIT REMOVAL END
// SKYRAT EDIT ADDITION START
return SSaccessories.feature_list[FEATURE_WINGS_OPEN]
return ..()
*/
if(wings_open)
return SSaccessories.sprite_accessories["wings_open"]
return SSaccessories.sprite_accessories["wings"]
return SSaccessories.sprite_accessories[FEATURE_WINGS_OPEN]
return SSaccessories.sprite_accessories[FEATURE_WINGS]
// SKYRAT EDIT ADDITION END
///Update our wingsprite to the open wings variant
/datum/bodypart_overlay/mutant/wings/functional/proc/open_wings()
wings_open = TRUE
feature_key = open_feature_key
feature_key = FEATURE_WINGS_OPEN
set_appearance_from_name(sprite_datum.name) //It'll look for the same name again, but this time from the open wings list
///Update our wingsprite to the closed wings variant
+1 -2
View File
@@ -5,7 +5,7 @@
name = "moth wings"
desc = "Spread your wings and FLOOOOAAAAAT!"
//dna_block = /datum/dna_block/feature/moth_wing // BUBBER EDIT REMOVAL
//dna_block = /datum/dna_block/feature/accessory/moth_wing // BUBBER EDIT REMOVAL
bodypart_overlay = /datum/bodypart_overlay/mutant/wings/moth
restyle_flags = EXTERNAL_RESTYLE_FLESH
@@ -104,7 +104,6 @@
/datum/bodypart_overlay/mutant/wings/moth/New()
burn_datum = fetch_sprite_datum(burn_datum)
return ..()
/datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
@@ -22,7 +22,7 @@
// without external aid (earmuffs, drugs)
/// Resistance against loud noises
var/bang_protect = 0
var/bang_protect = EAR_PROTECTION_NONE
/// Multiplier for both long term and short term ear damage
var/damage_multiplier = 1
@@ -147,7 +147,7 @@
restyle_flags = EXTERNAL_RESTYLE_FLESH
//dna_block = /datum/dna_block/feature/ears // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
//dna_block = /datum/dna_block/feature/accessory/ears // BUBBER EDIT REMOVAL - Customization - We have our own system to handle DNA.
bodypart_overlay = /datum/bodypart_overlay/mutant/cat_ears
@@ -161,9 +161,6 @@
/// Layer upon which we add the inner ears overlay
var/inner_layer = EXTERNAL_FRONT
/datum/bodypart_overlay/mutant/cat_ears/get_global_feature_list()
return SSaccessories.sprite_accessories["ears"] // SKYRAT EDIT - Customization - ORIGINAL: return SSaccessories.ears_list
/datum/bodypart_overlay/mutant/cat_ears/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
@@ -187,6 +184,49 @@
/datum/bodypart_overlay/mutant/cat_ears/color_image(image/overlay, layer, obj/item/bodypart/limb)
return // We color base ears manually above in get_image
/obj/item/organ/ears/cat/cybernetic
name = "basic cybernetic cat ears"
icon = 'icons/obj/medical/organs/organs.dmi'
icon_state = "ears-c-cat"
desc = "A basic cybernetic organ designed to mimic the operation of ears."
damage_multiplier = 2.4
bodypart_overlay = /datum/bodypart_overlay/mutant/cat_ears/cybernetic
sprite_accessory_override = /datum/sprite_accessory/ears/cat
organ_flags = ORGAN_ROBOTIC
failing_desc = "seems to be broken."
/obj/item/organ/ears/cat/cybernetic/upgraded
name = "cybernetic cat ears"
icon_state = "ears-c-cat-u"
desc = "A cybernetic cat ear, still less durable than human ears."
damage_multiplier = 1.5
/obj/item/organ/ears/cat/cybernetic/volume
name = "volume-adjusting cybernetic cat ears"
icon_state = "ears-c-cat-u2"
desc = "Advanced cybernetic cat ears capable of dampening loud noises to protect their user."
damage_multiplier = 1
bang_protect = 1
/obj/item/organ/ears/cat/cybernetic/whisper
name = "whisper-sensiive cybernetic cat ears"
icon_state = "ears-c-cat-green"
desc = "Allows the user to more easily hear whispers. The user becomes extremely vulnerable to loud noises, however."
damage_multiplier = 3 // 4 would be excessive
organ_traits = list(TRAIT_GOOD_HEARING)
/obj/item/organ/ears/cat/cybernetic/xray
name = "wall-penetrating cybernetic cat ears"
icon_state = "ears-c-cat-blue"
desc = "Through the power of modern feline engineering, allows the user to hear speech through walls. The user becomes extremely vulnerable to loud noises, however."
damage_multiplier = 3 // As above, 4 would be excessive
organ_traits = list(TRAIT_XRAY_HEARING)
/datum/bodypart_overlay/mutant/cat_ears/cybernetic
color_source = null
dyable = FALSE
/obj/item/organ/ears/ghost
name = "ghost ears"
desc = "All the more to hear you... though it can't hear through walls."
@@ -225,7 +265,7 @@
/obj/item/organ/ears/cybernetic/whisper
name = "whisper-sensitive cybernetic ears"
icon_state = "ears-c-u"
desc = "Allows the user to more easily hear whispers. The user becomes extra vulnerable to loud noises, however"
desc = "Allows the user to more easily hear whispers. The user becomes extra vulnerable to loud noises, however."
// Same sensitivity as felinid ears
damage_multiplier = 2
// The original idea was to use signals to do this not traits. Unfortunately, the star effect used for whispers applies before any relevant signals
@@ -236,14 +276,14 @@
name = "volume-adjusting cybernetic ears"
icon_state = "ears-c-u"
desc = "Advanced cybernetic ears capable of dampening loud noises to protect their user."
bang_protect = 1
bang_protect = EAR_PROTECTION_NORMAL
damage_multiplier = 0.5
// "X-ray ears" that let you hear through walls
/obj/item/organ/ears/cybernetic/xray
name = "wall-penetrating cybernetic ears"
icon_state = "ears-c-u"
desc = "Through the power of modern engineering, allows the user to hear speech through walls. The user becomes extra vulnerable to loud noises, however"
desc = "Through the power of modern engineering, allows the user to hear speech through walls. The user becomes extra vulnerable to loud noises, however."
// Same sensitivity as felinid ears
damage_multiplier = 2
organ_traits = list(TRAIT_XRAY_HEARING)
@@ -108,7 +108,7 @@
return
var/list/batteries = list()
for(var/obj/item/stock_parts/power_store/cell in owner.get_all_cells())
for(var/obj/item/stock_parts/power_store/cell in assoc_to_values(owner.get_all_cells()))
if(cell.used_charge())
batteries += cell
@@ -210,7 +210,8 @@
/atom/movable/screen/alert/status_effect/anomalock_active
name = "voltaic overdrive"
icon_state = "anomalock_heart"
use_user_hud_icon = TRUE
overlay_state = "anomalock_heart"
desc = "Voltaic energy is flooding your muscles, keeping your body upright. You have 30 seconds before it falters!"
/obj/item/organ/heart/cybernetic/anomalock/hear_beat_noise(mob/living/hearer)
@@ -63,7 +63,8 @@
/atom/movable/screen/alert/status_effect/golem_statued
name = "Statued"
desc = "You no longer have the energy to move your body!"
icon_state = "golem_statued"
use_user_hud_icon = TRUE
overlay_state = "golem_statued"
/datum/status_effect/golem_statued/on_apply()
. = ..()