"
- dat += MATRIX_FIELD("rg", color_matrix_last[4])
+ dat += MATRIX_FIELD("rg", color_matrix_last[2])
dat += MATRIX_FIELD("gg", color_matrix_last[5])
- dat += MATRIX_FIELD("bg", color_matrix_last[6])
+ dat += MATRIX_FIELD("bg", color_matrix_last[8])
dat += "
"
- dat += MATRIX_FIELD("rb", color_matrix_last[7])
- dat += MATRIX_FIELD("gb", color_matrix_last[8])
+ dat += MATRIX_FIELD("rb", color_matrix_last[3])
+ dat += MATRIX_FIELD("gb", color_matrix_last[6])
dat += MATRIX_FIELD("bb", color_matrix_last[9])
dat += "
"
dat += MATRIX_FIELD("cr", color_matrix_last[10])
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 69543e4284..27b0aa4e66 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -14,6 +14,9 @@
if(.)
return
if(can_buckle && has_buckled_mobs())
+ if(ishuman(src)) //prevent people from unbuckling fireman-carried/piggybacked people unless on disarm or harm intents
+ if(act_intent == INTENT_HELP || act_intent == INTENT_GRAB)
+ return
if(buckled_mobs.len > 1)
var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in buckled_mobs
if(user_unbuckle_mob(unbuckled,user))
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 01d684adad..fa92997cba 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -173,11 +173,11 @@
"You hear cutting.")
use(2)
else if(I.is_drainable() && I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine))
- if(!I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine, 10))
+ if(!I.reagents.has_reagent(/datum/reagent/space_cleaner/sterilizine, 5))
to_chat(user, "There's not enough sterilizine in [I] to sterilize [src]!")
return
- user.visible_message("[user] pours the contents of [I] onto [src], sterilizing it.", "You pour the contents of [I] onto [src], sterilizing it.")
- I.reagents.remove_reagent(/datum/reagent/space_cleaner/sterilizine, 10)
+ user.visible_message("[user] sterilizes [src] with the contents of [I].", "You pour the contents of [I] onto [src], sterilizing it.")
+ I.reagents.remove_reagent(/datum/reagent/space_cleaner/sterilizine, 5)
new /obj/item/stack/medical/gauze/adv/one(user.drop_location())
use(1)
else
@@ -187,6 +187,9 @@
user.visible_message("[user] begins tightening \the [src] around [user.p_their()] neck! It looks like [user.p_they()] forgot how to use medical supplies!")
return OXYLOSS
+/obj/item/stack/medical/gauze/one
+ amount = 1
+
/obj/item/stack/medical/gauze/improvised
name = "improvised gauze"
singular_name = "improvised gauze"
@@ -204,8 +207,9 @@
heal_brute = 6
self_delay = 45
other_delay = 15
- absorption_rate = 0.4
- absorption_capacity = 6
+ absorption_rate = 0.5
+ absorption_capacity = 12
+ splint_factor = 0.15
/obj/item/stack/medical/gauze/adv/one
amount = 1
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index c70332eacb..82e60ed8f6 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -196,7 +196,7 @@
if(M.client && (is_servant_of_ratvar(M) || isobserver(M) || M.stat == DEAD))
viewing += M.client
flick_overlay(I, viewing, 8)
- L.adjustToxLoss(-3, TRUE, TRUE)
+ L.adjustToxLoss(-3, TRUE, TRUE, toxins_type = TOX_OMNI)
/turf/open/floor/clockwork/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -278,4 +278,4 @@
heavyfootstep = FOOTSTEP_RUST
/turf/open/floor/plating/rust/rust_heretic_act()
- return
+ return
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index db498f0975..b868fb54c0 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -348,9 +348,9 @@
L.dust()
else if(L.health > min_drain_health)
if(!GLOB.ratvar_awakens && L.stat == CONSCIOUS)
- vitality_drained = L.adjustToxLoss(1, forced = TRUE)
+ vitality_drained = L.adjustToxLoss(1, forced = TRUE, toxins_type = TOX_OMNI)
else
- vitality_drained = L.adjustToxLoss(1.5, forced = TRUE)
+ vitality_drained = L.adjustToxLoss(1.5, forced = TRUE, toxins_type = TOX_OMNI)
if(vitality_drained)
GLOB.clockwork_vitality += vitality_drained
else
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index 5affcd5dec..a00019aa45 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -115,7 +115,7 @@
if(totaldamage)
L.heal_overall_damage(brutedamage, burndamage, only_organic = FALSE) //Maybe a machine god shouldn't murder augmented followers instead of healing them
L.adjustOxyLoss(-oxydamage)
- L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE)
+ L.adjustToxLoss(totaldamage * 0.5, TRUE, TRUE, toxins_type = TOX_OMNI)
clockwork_say(ranged_ability_user, text2ratvar("[has_holy_water ? "Heal tainted" : "Mend wounded"] flesh!"))
log_combat(ranged_ability_user, L, "healed with Sentinel's Compromise")
L.visible_message("A blue light washes over [L], [has_holy_water ? "causing [L.p_them()] to briefly glow as it mends" : " mending"] [L.p_their()] bruises and burns!", \
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 4a697a6bd7..901c83b1b7 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -717,9 +717,9 @@
uses = 0
ratio *= -1
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
- H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0)
- H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0)
- H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0)
+ H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0, toxins_type = TOX_OMNI)
+ H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0, only_organic = FALSE)
+ H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0, only_organic = FALSE)
H.updatehealth()
playsound(get_turf(H), 'sound/magic/staff_healing.ogg', 25)
new /obj/effect/temp_visual/cult/sparks(get_turf(H))
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index a388621c92..25fd446b06 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -214,8 +214,8 @@
if(L.health != L.maxHealth)
new /obj/effect/temp_visual/heal(get_turf(src), "#960000")
if(ishuman(L))
- L.adjustBruteLoss(-1, 0)
- L.adjustFireLoss(-1, 0)
+ L.adjustBruteLoss(-1, 0, only_organic = FALSE)
+ L.adjustFireLoss(-1, 0, only_organic = FALSE)
L.updatehealth()
if(isshade(L) || isconstruct(L))
var/mob/living/simple_animal/M = L
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index bc4727ab9f..bf6599d782 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -617,6 +617,7 @@ This is here to make the tiles around the station mininuke change when it's arme
var/fake = FALSE
var/turf/lastlocation
var/last_disk_move
+ var/process_tick = 0
/obj/item/disk/nuclear/Initialize()
. = ..()
@@ -632,6 +633,7 @@ This is here to make the tiles around the station mininuke change when it's arme
AddComponent(/datum/component/stationloving, !fake)
/obj/item/disk/nuclear/process()
+ ++process_tick
if(fake)
STOP_PROCESSING(SSobj, src)
CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck")
@@ -648,7 +650,8 @@ This is here to make the tiles around the station mininuke change when it's arme
disk_comfort_level++
if(disk_comfort_level >= 2) //Sleep tight, disky.
- visible_message("[src] sleeps soundly. Sleep tight, disky.")
+ if(process_tick % 30)
+ visible_message("[src] sleeps soundly. Sleep tight, disky.")
if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
if(istype(loneop) && loneop.occurrences < loneop.max_occurrences)
diff --git a/code/modules/arousal/organs/breasts.dm b/code/modules/arousal/organs/breasts.dm
index 9e30530ad3..e37224e401 100644
--- a/code/modules/arousal/organs/breasts.dm
+++ b/code/modules/arousal/organs/breasts.dm
@@ -88,7 +88,6 @@
to_chat(owner, "You feel your breasts shrinking away from your body as your chest flattens out.")
QDEL_IN(src, 1)
return
- var/enlargement = FALSE
switch(rounded_cached)
if(0) //flatchested
size = "flat"
@@ -96,16 +95,8 @@
size = breast_values[rounded_cached]
if(9 to 15) //massive
size = breast_values[rounded_cached]
- enlargement = TRUE
if(16 to INFINITY) //rediculous
size = "huge"
- enlargement = TRUE
- if(owner)
- var/status_effect = owner.has_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
- if(enlargement && !status_effect)
- owner.apply_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
- else if(!enlargement && status_effect)
- owner.remove_status_effect(STATUS_EFFECT_BREASTS_ENLARGEMENT)
if(rounded_cached < 16 && owner)//Because byond doesn't count from 0, I have to do this.
var/mob/living/carbon/human/H = owner
diff --git a/code/modules/arousal/organs/penis.dm b/code/modules/arousal/organs/penis.dm
index a8e95673ae..e1025094c3 100644
--- a/code/modules/arousal/organs/penis.dm
+++ b/code/modules/arousal/organs/penis.dm
@@ -39,27 +39,16 @@
return
var/rounded_length = round(length)
var/new_size
- var/enlargement = FALSE
- var/max_D = CONFIG_GET(number/penis_max_inches_prefs)
switch(rounded_length)
if(0 to 6) //If modest size
new_size = 1
if(7 to 11) //If large
new_size = 2
- if(12 to max_D) //If massive
+ if(12 to 36) //If massive
new_size = 3
- if(max_D + 1 to max_D+13) //If massive and due for large effects, modified in case some server owner running recent citcode decides to be insane with dick sizes in the config
- new_size = 3
- enlargement = TRUE
- if(max_D+14 to INFINITY) //If comical
+ if(37 to INFINITY) //If comical
new_size = 4 //no new sprites for anything larger yet
- enlargement = TRUE
- if(owner)
- var/status_effect = owner.has_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
- if(enlargement && !status_effect)
- owner.apply_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
- else if(!enlargement && status_effect)
- owner.remove_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT)
+
if(linked_organ)
linked_organ.size = clamp(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX)
linked_organ.update()
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index a866049d65..1f3a174d0f 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -62,8 +62,8 @@
amount += BP.burn_dam
return amount
-
-/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
+//In both these procs, only_organic / only_robotic are only used for healing, not for damaging. For now at least.
+/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL))
return FALSE
if(!forced && (status_flags & GODMODE))
@@ -71,10 +71,10 @@
if(amount > 0)
take_overall_damage(amount, 0, 0, updating_health)
else
- heal_overall_damage(abs(amount), 0, 0, FALSE, TRUE, updating_health)
+ heal_overall_damage(abs(amount), 0, 0, only_robotic, only_organic, updating_health)
return amount
-/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/carbon/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(!forced && amount < 0 && HAS_TRAIT(src,TRAIT_NONATURALHEAL)) //Vamps don't heal naturally.
return FALSE
if(!forced && (status_flags & GODMODE))
@@ -82,7 +82,7 @@
if(amount > 0)
take_overall_damage(0, amount, 0, updating_health)
else
- heal_overall_damage(0, abs(amount), 0, FALSE, TRUE, updating_health)
+ heal_overall_damage(0, abs(amount), 0, only_robotic, only_organic, updating_health)
return amount
diff --git a/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
index a44177ced1..454625cf36 100644
--- a/code/modules/mob/living/carbon/human/species_types/arachnid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
@@ -4,7 +4,7 @@
override_bp_icon = 'icons/mob/arachnid_parts.dmi'
say_mod = "chitters"
default_color = "00FF00"
- species_traits = list(LIPS, NOEYES, NO_UNDERWEAR)
+ species_traits = list(LIPS, NOEYES, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
mutant_bodyparts = list("arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain")
attack_verb = "slash"
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 803d3ec245..dc2269e19b 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -94,7 +94,7 @@
name = "Xenobiological Slime Entity"
id = SPECIES_SLIME
default_color = "00FFFF"
- species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
+ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
say_mod = "says"
hair_color = "mutcolor"
hair_alpha = 150
@@ -404,7 +404,7 @@
id = SPECIES_SLIME_HYBRID
limbs_id = SPECIES_SLIME
default_color = "00FFFF"
- species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
+ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,HAS_FLESH)
inherent_traits = list(TRAIT_TOXINLOVER)
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None", "legs" = "Plantigrade")
say_mod = "says"
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index e02d15303f..4d0f88754f 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -4,7 +4,7 @@
id = SPECIES_LIZARD
say_mod = "hisses"
default_color = "00FF00"
- species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
+ species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,HORNCOLOR,WINGCOLOR,CAN_SCAR,HAS_FLESH,HAS_BONE)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
mutanttongue = /obj/item/organ/tongue/lizard
mutanttail = /obj/item/organ/tail/lizard
@@ -48,7 +48,7 @@
name = "Ash Walker"
id = SPECIES_ASHWALKER
limbs_id = SPECIES_LIZARD
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE,CAN_SCAR,HAS_FLESH,HAS_BONE)
inherent_traits = list(TRAIT_CHUNKYFINGERS)
mutantlungs = /obj/item/organ/lungs/ashwalker
mutanteyes = /obj/item/organ/eyes/night_vision
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 45a1870ae8..c25c5efb6c 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -68,7 +68,7 @@
/datum/species/pod/pseudo_weak
name = "Anthromorphic Plant"
id = SPECIES_POD_WEAK
- species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS)
+ species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
limbs_id = SPECIES_POD
light_nutrition_gain_factor = 3
diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm
index f88ccc876f..9d5a700417 100644
--- a/code/modules/mob/living/carbon/human/species_types/xeno.dm
+++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm
@@ -4,7 +4,7 @@
id = SPECIES_XENOHYBRID
say_mod = "hisses"
default_color = "00FF00"
- species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
+ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 44701a26b2..e7426aa1fa 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -141,7 +141,8 @@
/mob/living/proc/getBruteLoss()
return bruteloss
-/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
+//only_robotic and only_organic arg only relevant for carbons
+/mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(!forced && (status_flags & GODMODE))
return FALSE
bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
@@ -215,7 +216,8 @@
/mob/living/proc/getFireLoss()
return fireloss
-/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+//only_robotic and only_organic arg only relevant for carbons
+/mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(!forced && (status_flags & GODMODE))
return FALSE
fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm
index c5fa5ece1f..c339aa920f 100644
--- a/code/modules/mob/living/silicon/pai/pai_defense.dm
+++ b/code/modules/mob/living/silicon/pai/pai_defense.dm
@@ -81,10 +81,10 @@
to_chat(src, "The impact degrades your holochassis!")
return amount
-/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/silicon/pai/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
return take_holo_damage(amount)
-/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/silicon/pai/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
return take_holo_damage(amount)
/mob/living/silicon/pai/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE, toxins_type = TOX_DEFAULT)
diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm
index 9a2921cc0e..f478458829 100644
--- a/code/modules/mob/living/simple_animal/damage_procs.dm
+++ b/code/modules/mob/living/simple_animal/damage_procs.dm
@@ -7,13 +7,13 @@
updatehealth()
return amount
-/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/simple_animal/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(forced)
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
else if(damage_coeff[BRUTE])
. = adjustHealth(amount * damage_coeff[BRUTE] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
-/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/simple_animal/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(forced)
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
else if(damage_coeff[BURN])
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 1f45e57718..ab59441572 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -225,7 +225,7 @@
. += "Power Level: [powerlevel]"
-/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, only_robotic = FALSE, only_organic = TRUE)
if(!forced)
amount = -abs(amount)
return ..() //Heals them
diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm
index 8a7e125de3..002cf20801 100644
--- a/code/modules/modular_computers/file_system/programs/arcade.dm
+++ b/code/modules/modular_computers/file_system/programs/arcade.dm
@@ -153,7 +153,7 @@
computer.visible_message("\The [computer] prints out paper.")
if(ticket_count >= 1)
new /obj/item/stack/arcadeticket((get_turf(computer)), 1)
- to_chat(usr, "[src] dispenses a ticket!")
+ to_chat(usr, "[computer] dispenses a ticket!")
ticket_count -= 1
printer.stored_paper -= 1
else
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index 1eed787a2a..cdfb275418 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -146,6 +146,8 @@
var/mob/living/L = target
if(!(L.mobility_flags & MOBILITY_STAND))
return
+ if(iscyborg(target))
+ return max(1, existing - 1)
var/static/datum/config_entry/number/movedelay/sprint_max_tiles_increase/SMTI
if(!SMTI)
SMTI = CONFIG_GET_ENTRY(number/movedelay/sprint_max_tiles_increase)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index e64647028c..193b96e841 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1126,7 +1126,7 @@
if(istype(O, /obj/item/stack/medical/gauze))
var/obj/item/stack/medical/gauze/G = O
reac_volume = min((reac_volume / 10), G.amount)
- new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
+ new /obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume)
G.use(reac_volume)
diff --git a/code/modules/research/designs/machine_desings/machine_designs_sci.dm b/code/modules/research/designs/machine_desings/machine_designs_sci.dm
index 59fae9d09b..28b1235a42 100644
--- a/code/modules/research/designs/machine_desings/machine_designs_sci.dm
+++ b/code/modules/research/designs/machine_desings/machine_designs_sci.dm
@@ -161,3 +161,11 @@
build_path = /obj/item/circuitboard/machine/circuit_imprinter
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/explosive_compressor
+ name = "Explosive Compressor (Machine Board)"
+ desc = "The circuit board for an explosive compressor, used to compress raw into finished anomaly cores."
+ id = "explosive_compressor"
+ build_path = /obj/item/circuitboard/machine/explosive_compressor
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 1fc61c9bed..9879171e71 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -308,7 +308,7 @@
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
build_path = /obj/item/disk/medical/defib_heal
construction_time = 10
- category = list("Misc")
+ category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_shock
@@ -319,7 +319,7 @@
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 6000, /datum/material/silver = 6000)
build_path = /obj/item/disk/medical/defib_shock
construction_time = 10
- category = list("Misc")
+ category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_decay
@@ -330,7 +330,7 @@
materials = list(/datum/material/iron = 16000, /datum/material/glass = 18000, /datum/material/gold = 16000, /datum/material/silver = 6000, /datum/material/titanium = 2000)
build_path = /obj/item/disk/medical/defib_decay
construction_time = 10
- category = list("Misc")
+ category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_speed
@@ -341,7 +341,7 @@
build_path = /obj/item/disk/medical/defib_speed
materials = list(/datum/material/iron = 16000, /datum/material/glass = 8000, /datum/material/gold = 26000, /datum/material/silver = 26000)
construction_time = 10
- category = list("Misc")
+ category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defibrillator_compact
diff --git a/code/modules/research/techweb/nodes/engineering_nodes.dm b/code/modules/research/techweb/nodes/engineering_nodes.dm
index f4dce58740..2b5d6f3cc1 100644
--- a/code/modules/research/techweb/nodes/engineering_nodes.dm
+++ b/code/modules/research/techweb/nodes/engineering_nodes.dm
@@ -26,7 +26,7 @@
display_name = "Anomaly Research"
description = "Unlock the potential of the mysterious anomalies that appear on station."
prereq_ids = list("adv_engi", "practical_bluespace")
- design_ids = list("reactive_armour", "anomaly_neutralizer")
+ design_ids = list("reactive_armour", "anomaly_neutralizer", "explosive_compressor")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
/datum/techweb_node/high_efficiency
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index cbfbbe2a36..9b19516f26 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -884,6 +884,7 @@ datum/status_effect/stabilized/blue/on_remove()
/datum/status_effect/stabilized/oil/tick()
if(owner.stat == DEAD)
explosion(get_turf(owner),1,2,4,flame_range = 5)
+ owner.remove_status_effect(/datum/status_effect/stabilized/oil)
return ..()
/datum/status_effect/stabilized/black
diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
index e87382cd6a..5e2fc3d7e4 100644
--- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm
+++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm
@@ -136,10 +136,13 @@
return
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
- if(user.real_name != H.dna.real_name)
- user.real_name = H.dna.real_name
- H.dna.transfer_identity(user, transfer_SE=1)
- user.updateappearance(mutcolor_update=1)
- user.domutcheck()
- user.visible_message("[user]'s appearance shifts into [H]'s!", \
- "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.")
+ if(!(NOTRANSSTING in H.dna.species.species_traits))
+ if(user.real_name != H.dna.real_name)
+ user.real_name = H.dna.real_name
+ H.dna.transfer_identity(user, transfer_SE=1)
+ user.updateappearance(mutcolor_update=1)
+ user.domutcheck()
+ user.visible_message("[user]'s appearance shifts into [H]'s!", \
+ "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.")
+ else
+ to_chat(user, "You are unable to transform into [H]!")
diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm
index 059a5aaa34..c65f5f11f6 100644
--- a/code/modules/surgery/limb_augmentation.dm
+++ b/code/modules/surgery/limb_augmentation.dm
@@ -31,6 +31,12 @@
target_mobtypes = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
requires_real_bodypart = TRUE
+
+//The augmentation surgery for synthetic limbs
+/datum/surgery/augmentation/synth
+ requires_bodypart_type = BODYPART_HYBRID
+ steps = list(/datum/surgery_step/mechanic_open, /datum/surgery_step/pry_off_plating, /datum/surgery_step/cut_wires, /datum/surgery_step/prepare_electronics, /datum/surgery_step/replace_limb)
+
//SURGERY STEP SUCCESSES
/datum/surgery_step/replace_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
if(L)
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 25b7e8fa48..6b3d47b587 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -114,7 +114,7 @@ obj/item/organ/heart/slime
var/last_pump = 0
var/add_colour = TRUE //So we're not constantly recreating colour datums
var/pump_delay = 30 //you can pump 1 second early, for lag, but no more (otherwise you could spam heal)
- var/blood_loss = 100 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
+ var/blood_loss = 50 //600 blood is human default, so 5 failures (below 122 blood is where humans die because reasons?)
//How much to heal per pump, negative numbers would HURT the player
var/heal_brute = 0
@@ -123,7 +123,11 @@ obj/item/organ/heart/slime
/obj/item/organ/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target)
+
if(H == user && istype(H))
+ if(NOBLOOD in H.dna.species.species_traits)
+ to_chat(user, "[src] refuses to become one with [H]")
+ return
playsound(user,'sound/effects/singlebeat.ogg',40,1)
user.temporarilyRemoveItemFromInventory(src, TRUE)
Insert(user)
@@ -137,6 +141,8 @@ obj/item/organ/heart/slime
if(world.time > (last_pump + pump_delay))
if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects.
var/mob/living/carbon/human/H = owner
+ if(NOBLOOD in H.dna.species.species_traits) //Otherwise people without will be eternally stuck red
+ return
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
H.blood_volume = max(H.blood_volume - blood_loss, 0)
to_chat(H, "You have to keep pumping your blood!")
@@ -156,6 +162,8 @@ obj/item/organ/heart/slime
return ..()
/datum/action/item_action/organ_action/cursed_heart
+ check_flags = AB_CHECK_ALIVE //We wanna be able to do this always, else thisll just stupidly kill whoever has it
+ required_mobility_flags = NONE
name = "Pump your blood"
//You are now brea- pumping blood manually
@@ -175,7 +183,8 @@ obj/item/organ/heart/slime
var/mob/living/carbon/human/H = owner
if(istype(H))
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
- H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_MAXIMUM)
+ if(H.blood_volume < BLOOD_VOLUME_NORMAL) //We don't need to go too high, otherwise we get annoying messages.
+ H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_MAXIMUM)
H.remove_client_colour(/datum/client_colour/cursed_heart_blood)
cursed_heart.add_colour = TRUE
H.adjustBruteLoss(-cursed_heart.heal_brute)
@@ -184,7 +193,7 @@ obj/item/organ/heart/slime
/datum/client_colour/cursed_heart_blood
- priority = 100 //it's an indicator you're dieing, so it's very high priority
+ priority = 100 //it's an indicator you're dying, so it's very high priority
colour = "red"
/obj/item/organ/heart/cybernetic
diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm
index 655ca21b93..0b75dbf4db 100644
--- a/code/modules/vehicles/cars/clowncar.dm
+++ b/code/modules/vehicles/cars/clowncar.dm
@@ -139,6 +139,7 @@
/obj/vehicle/sealed/car/clowncar/twitch_plays
key_type = null
+ explode_on_death = FALSE
/obj/vehicle/sealed/car/clowncar/twitch_plays/Initialize()
. = ..()
diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm
index 28f6b1cca8..63c7c9f858 100644
--- a/code/modules/vehicles/sealed.dm
+++ b/code/modules/vehicles/sealed.dm
@@ -1,6 +1,7 @@
/obj/vehicle/sealed
enclosed = TRUE // you're in a sealed vehicle dont get dinked idiot
var/enter_delay = 20
+ var/explode_on_death = TRUE
flags_1 = BLOCK_FACE_ATOM_1
/obj/vehicle/sealed/generate_actions()
@@ -87,7 +88,8 @@
/obj/vehicle/sealed/Destroy()
DumpMobs()
- explosion(loc, 0, 1, 2, 3, 0)
+ if(explode_on_death)
+ explosion(loc, 0, 1, 2, 3, 0)
return ..()
/obj/vehicle/sealed/proc/DumpMobs(randomstep = TRUE)
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 0b47c7218f..482cdb7d86 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -17,8 +17,8 @@
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
vend_reply = "Thank you for using the SecDrobe!"
products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 2,
- /obj/item/storage/backpack/security = 2,
- /obj/item/storage/backpack/satchel/sec = 2,
+ /obj/item/storage/backpack/security = 3,
+ /obj/item/storage/backpack/satchel/sec = 3,
/obj/item/storage/backpack/duffelbag/sec = 3,
/obj/item/clothing/under/rank/security/officer = 5,
/obj/item/clothing/shoes/jackboots = 5,
@@ -88,9 +88,9 @@
vend_reply = "Thank you for using the MediDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
/obj/item/clothing/head/beret/med = 5,
- /obj/item/storage/backpack/duffelbag/med = 5,
/obj/item/storage/backpack/medic = 5,
/obj/item/storage/backpack/satchel/med = 5,
+ /obj/item/storage/backpack/duffelbag/med = 5,
/obj/item/clothing/suit/hooded/wintercoat/medical = 5,
/obj/item/clothing/suit/hooded/wintercoat/paramedic = 2,
/obj/item/clothing/under/rank/medical/doctor/nurse = 5,
@@ -131,9 +131,9 @@
vend_reply = "Thank you for using the EngiDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 5,
/obj/item/clothing/head/beret/eng = 3,
- /obj/item/storage/backpack/duffelbag/engineering = 3,
/obj/item/storage/backpack/industrial = 3,
/obj/item/storage/backpack/satchel/eng = 3,
+ /obj/item/storage/backpack/duffelbag/engineering = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering = 3,
/obj/item/clothing/under/rank/engineering/engineer = 5,
/obj/item/clothing/under/rank/engineering/engineer/skirt = 5,
@@ -162,9 +162,9 @@
vend_reply = "Thank you for using the AtmosDrobe!"
products = list(/obj/item/clothing/accessory/pocketprotector = 3,
/obj/item/clothing/head/beret/atmos = 3,
- /obj/item/storage/backpack/duffelbag/engineering = 3,
- /obj/item/storage/backpack/satchel/eng = 3,
/obj/item/storage/backpack/industrial = 3,
+ /obj/item/storage/backpack/satchel/eng = 3,
+ /obj/item/storage/backpack/duffelbag/engineering = 3,
/obj/item/clothing/head/hardhat/weldhat/dblue = 3,
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3,
/obj/item/clothing/under/rank/engineering/atmospheric_technician = 5,
@@ -238,6 +238,7 @@
/obj/item/clothing/head/beret/sci = 3,
/obj/item/storage/backpack/science = 3,
/obj/item/storage/backpack/satchel/tox = 3,
+ /obj/item/storage/backpack/duffelbag = 3,
/obj/item/clothing/suit/hooded/wintercoat/science = 3,
/obj/item/clothing/under/rank/rnd/scientist = 4,
/obj/item/clothing/under/rank/rnd/scientist/util = 4,
@@ -261,7 +262,9 @@
product_ads = "Do you love soil? Then buy our clothes!;Get outfits to match your green thumb here!"
vend_reply = "Thank you for using the Hydrobe!"
products = list(/obj/item/storage/backpack/botany = 3,
+ /obj/item/storage/backpack = 3,
/obj/item/storage/backpack/satchel/hyd = 3,
+ /obj/item/storage/backpack/duffelbag = 3,
/obj/item/clothing/suit/hooded/wintercoat/hydro = 2,
/obj/item/clothing/suit/apron = 3,
/obj/item/clothing/suit/apron/overalls = 5,
@@ -468,7 +471,7 @@
/obj/item/storage/backpack/chemistry = 3,
/obj/item/storage/backpack/satchel/chem = 3,
/obj/item/storage/bag/chemistry = 3,
- /obj/item/fermichem/pHbooklet = 3)//pH indicator)
+ /obj/item/fermichem/pHbooklet = 3)
refill_canister = /obj/item/vending_refill/wardrobe/chem_wardrobe
payment_department = ACCOUNT_MED
cost_multiplier_per_dept = list(ACCOUNT_MED = 0)
diff --git a/html/changelogs/AutoChangeLog-pr-13993.yml b/html/changelogs/AutoChangeLog-pr-13993.yml
new file mode 100644
index 0000000000..d99ed0e0d1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13993.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "The cursed heart now only takes away half as much blood every loop, and can be used as long as you are alive, instead if only you are awake/able to use your hands"
diff --git a/html/changelogs/AutoChangeLog-pr-14014.yml b/html/changelogs/AutoChangeLog-pr-14014.yml
new file mode 100644
index 0000000000..ac29b1567b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14014.yml
@@ -0,0 +1,4 @@
+author: "necromanceranne"
+delete-after: True
+changes:
+ - bugfix: "Fixes various sprites for bokken, as well as being unable to craft certain parts and duplicate entries."
diff --git a/html/changelogs/AutoChangeLog-pr-14015.yml b/html/changelogs/AutoChangeLog-pr-14015.yml
new file mode 100644
index 0000000000..fe507d0a1e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14015.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - balance: "Some synth damage stuff has been a bit rebalanced, see the PR for details."
diff --git a/html/changelogs/AutoChangeLog-pr-14019.yml b/html/changelogs/AutoChangeLog-pr-14019.yml
new file mode 100644
index 0000000000..37bdd52948
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14019.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - bugfix: "species with NOTRANSSTING cannot have envy's knife used on them"
diff --git a/html/changelogs/AutoChangeLog-pr-14026.yml b/html/changelogs/AutoChangeLog-pr-14026.yml
new file mode 100644
index 0000000000..1ae9cb5c28
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14026.yml
@@ -0,0 +1,4 @@
+author: "BlueWildrose"
+delete-after: True
+changes:
+ - bugfix: "Fixes noodle size appearance for 12+ inch members."
diff --git a/html/changelogs/AutoChangeLog-pr-14033.yml b/html/changelogs/AutoChangeLog-pr-14033.yml
new file mode 100644
index 0000000000..db6a6b0691
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14033.yml
@@ -0,0 +1,4 @@
+author: "BlueWildrose"
+delete-after: True
+changes:
+ - rscadd: "Color Mates have been added to all stations (except Snaxi). Enjoy coloring your attire without having to bug science!"
diff --git a/html/changelogs/AutoChangeLog-pr-14036.yml b/html/changelogs/AutoChangeLog-pr-14036.yml
new file mode 100644
index 0000000000..a2bb654233
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14036.yml
@@ -0,0 +1,4 @@
+author: "BlueWildrose"
+delete-after: True
+changes:
+ - tweak: "You will now only unbuckle fireman-carried/piggybacked people on disarm or harm intent."
diff --git a/html/changelogs/AutoChangeLog-pr-14038.yml b/html/changelogs/AutoChangeLog-pr-14038.yml
new file mode 100644
index 0000000000..906f6f7053
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-14038.yml
@@ -0,0 +1,9 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: "The nature interaction shuttle with the monkeys now has tiny fans on the airlocks in, because that's apparently a feature that was missing."
+ - rscadd: "More bags have been added to department vendors."
+ - balance: "Every roundstart species (and also ash walkers) now has flesh and bone that can be wounded."
+ - balance: "Recipes for sutures, regen mesh, and sterilized gauze have been adjusted to be easier, mostly."
+ - balance: "Sterilized gauze is better at absorbing blood and being a splint."
+ - bugfix: "Energy sabres now have an off inhand."
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index caa901a9fd..2afd1b510b 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index c1404cb044..adcd7b64e1 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index ed34177c7b..e4f22de1cd 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index 9f59dbed06..8716c3627f 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi
index dcf4a77131..cbd6b9e85e 100644
Binary files a/icons/obj/smith.dmi and b/icons/obj/smith.dmi differ
diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm
index 0e971d4ced..8f48e90068 100644
--- a/modular_citadel/code/datums/status_effects/chems.dm
+++ b/modular_citadel/code/datums/status_effects/chems.dm
@@ -32,82 +32,6 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/datum/status_effect/chem/breast_enlarger
- id = "breast_enlarger"
- alert_type = null
- var/moveCalc = 1
- var/cachedmoveCalc = 1
- var/last_checked_size //used to prevent potential cpu waste from happening every tick.
-
-/datum/status_effect/chem/breast_enlarger/on_apply()//Removes clothes, they're too small to contain you. You belong to space now.
- log_reagent("FERMICHEM: [owner]'s breasts has reached comical sizes. ID: [owner.key]")
- return ..()
-
-/datum/status_effect/chem/breast_enlarger/tick()//If you try to wear clothes, you fail. Slows you down if you're comically huge
- var/mob/living/carbon/human/H = owner
- var/obj/item/organ/genital/breasts/B = H.getorganslot(ORGAN_SLOT_BREASTS)
- if(!B)
- H.remove_status_effect(src)
- return
- moveCalc = 1+((round(B.cached_size) - 9)/3) //Afffects how fast you move, and how often you can click.
-
- if(last_checked_size != B.cached_size)
- H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy, multiplicative_slowdown = moveCalc)
-
- if (B.size == "huge")
- if(prob(1))
- to_chat(owner, "Your back is feeling sore.")
- var/target = H.get_bodypart(BODY_ZONE_CHEST)
- H.apply_damage(0.1, BRUTE, target)
- else
- if(prob(1))
- to_chat(H, "Your back is feeling a little sore.")
- last_checked_size = B.cached_size
- ..()
-
-/datum/status_effect/chem/breast_enlarger/on_remove()
- log_reagent("FERMICHEM: [owner]'s breasts has reduced to an acceptable size. ID: [owner.key]")
- to_chat(owner, "Your expansive chest has become a more managable size, liberating your movements.")
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy)
- return ..()
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-/datum/status_effect/chem/penis_enlarger
- id = "penis_enlarger"
- alert_type = null
- var/bloodCalc
- var/moveCalc
- var/last_checked_size //used to prevent potential cpu waste, just like the above.
-
-/datum/status_effect/chem/penis_enlarger/on_apply()//Removes clothes, they're too small to contain you. You belong to space now.
- log_reagent("FERMICHEM: [owner]'s dick has reached comical sizes. ID: [owner.key]")
- return ..()
-
-
-/datum/status_effect/chem/penis_enlarger/tick()
- var/mob/living/carbon/human/H = owner
- var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
- if(!P)
- owner.remove_status_effect(src)
- return
- moveCalc = 1+((round(P.length) - 21)/3) //effects how fast you can move
- bloodCalc = 1+((round(P.length) - 21)/15) //effects how much blood you need (I didn' bother adding an arousal check because I'm spending too much time on this organ already.)
- if(P.length < 22 && H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy))
- to_chat(owner, "Your rascally willy has become a more managable size, liberating your movements.")
- H.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)
- else if(P.length >= 22 && !H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy))
- to_chat(H, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements!")
- H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy, multiplicative_slowdown = moveCalc)
- H.AdjustBloodVol(bloodCalc)
- ..()
-
-/datum/status_effect/chem/penis_enlarger/on_remove()
- log_reagent("FERMICHEM: [owner]'s dick has reduced to an acceptable size. ID: [owner.key]")
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)
- owner.ResetBloodVol()
- return ..()
-
///////////////////////////////////////////////
// Astral INSURANCE
///////////////////////////////////////////////