From f2aa370506460e894611a04e32b3af0d674c25f0 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 4 Jun 2020 14:59:52 +0100 Subject: [PATCH 01/29] make ipcs cool --- code/__DEFINES/DNA.dm | 2 + code/__DEFINES/is_helpers.dm | 1 + code/__DEFINES/traits.dm | 1 + code/modules/mob/living/brain/brain_item.dm | 8 ++ .../mob/living/carbon/human/human_defense.dm | 17 +++ .../mob/living/carbon/human/species.dm | 25 +++- .../carbon/human/species_types/android.dm | 14 +- .../living/carbon/human/species_types/ipc.dm | 14 +- .../carbon/human/species_types/synthliz.dm | 11 +- code/modules/power/cell.dm | 17 +++ .../chemistry/reagents/food_reagents.dm | 14 +- code/modules/surgery/bodyparts/bodyparts.dm | 11 +- code/modules/surgery/brain_surgery.dm | 2 +- code/modules/surgery/coronary_bypass.dm | 1 + code/modules/surgery/dental_implant.dm | 1 + code/modules/surgery/embalming.dm | 2 +- .../emergency_cardioversion_recovery.dm | 1 + code/modules/surgery/eye_surgery.dm | 3 +- code/modules/surgery/healing.dm | 2 +- code/modules/surgery/lipoplasty.dm | 3 + code/modules/surgery/lobectomy.dm | 1 + code/modules/surgery/mechanic_steps.dm | 104 +++++++++++++++ code/modules/surgery/organ_manipulation.dm | 1 + code/modules/surgery/organs/augments_arms.dm | 66 +++++++++ code/modules/surgery/organs/ears.dm | 26 ++++ code/modules/surgery/organs/eyes.dm | 9 ++ code/modules/surgery/organs/lungs.dm | 13 +- code/modules/surgery/organs/stomach.dm | 14 +- code/modules/surgery/plastic_surgery.dm | 2 + code/modules/surgery/robot_brain_surgery.dm | 51 +++++++ code/modules/surgery/robot_healing.dm | 125 ++++++++++++++++++ icons/obj/surgery.dmi | Bin 41535 -> 43965 bytes tgstation.dme | 2 + 33 files changed, 521 insertions(+), 43 deletions(-) create mode 100644 code/modules/surgery/robot_brain_surgery.dm create mode 100644 code/modules/surgery/robot_healing.dm diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index c9e03389f1..2f42ff52cf 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -140,6 +140,8 @@ #define CUSTOM_SKINTONE 24 //adds a "_g" suffix to bodypart overlays icon states if a custom skintone is used. #define HORNCOLOR 25 #define WINGCOLOR 26 +#define ROBOTIC_LIMBS 27 //has robotic limbs that render like organic ones + //organ slots #define ORGAN_SLOT_BRAIN "brain" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 28ec3383ae..3697587548 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -72,6 +72,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ismush(A) (is_species(A, /datum/species/mush)) #define isshadow(A) (is_species(A, /datum/species/shadow)) #define isskeleton(A) (is_species(A, /datum/species/skeleton)) +#define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz)) // Citadel specific species #define isipcperson(A) (is_species(A, /datum/species/ipc)) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 74470cf72e..ebb7783527 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -194,6 +194,7 @@ #define TRAIT_NO_ALCOHOL "alcohol_intolerance" #define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing. #define TRAIT_FAST_PUMP "fast_pump" +#define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 687442c1f8..5655aaa074 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -287,11 +287,19 @@ QDEL_LIST(traumas) return ..() +//other types of brains + /obj/item/organ/brain/alien name = "alien brain" desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?" icon_state = "brain-x" +/obj/item/organ/brain/ipc + name = "positronic brain" + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the head of synthetic crewmembers." + icon = 'icons/obj/surgery.dmi' + icon_state = "posibrain-ipc" + ////////////////////////////////////TRAUMAS//////////////////////////////////////// diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 3a2d0535e6..7417496a13 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -402,9 +402,26 @@ if(1) L.receive_damage(0,10) Stun(200) + if(!isrobotic(src)) + L.receive_damage(0,10) + Stun(200) + else + // robotic species take far less damage, and roll to have their parts fly off on a heavy emp + // this is to stop emps outright killing them, and also because their organs have emp acts + L.receive_damage(0,4) + Stun(50) + if(!(L.body_part == CHEST || L.body_part == HEAD)) // only dismember legs/arms + if(prob(20)) + L.dismember() if(2) L.receive_damage(0,5) Stun(100) + if(!isrobotic(src)) + L.receive_damage(0,5) + Stun(100) + else + L.receive_damage(0,2) + Stun(25) /mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) var/list/damaged = list() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 2ed5e349c3..89cb5b1af7 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -352,6 +352,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod) + if(ROBOTIC_LIMBS in species_traits) + for(var/obj/item/bodypart/B in C.bodyparts) + B.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE) // Makes all Bodyparts robotic. + B.render_like_organic = TRUE + SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) @@ -388,6 +393,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(F) qdel(F) + + if(ROBOTIC_LIMBS in species_traits) + for(var/obj/item/bodypart/B in C.bodyparts) + B.change_bodypart_status(BODYPART_ORGANIC, FALSE, TRUE) + B.render_like_organic = FALSE + SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src) /datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour) @@ -408,7 +419,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/dynamic_fhair_suffix = "" //for augmented heads - if(HD.status == BODYPART_ROBOTIC) + if(HD.status == BODYPART_ROBOTIC && !HD.render_like_organic) return //we check if our hat or helmet hides our facial hair. @@ -667,7 +678,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) bodyparts_to_add -= "waggingspines" if(mutant_bodyparts["snout"]) //Take a closer look at that snout! - if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC) + if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "snout" if(mutant_bodyparts["frills"]) @@ -675,11 +686,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) bodyparts_to_add -= "frills" if(mutant_bodyparts["horns"]) - if(!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC) + if(!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "horns" if(mutant_bodyparts["ears"]) - if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC) + if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "ears" if(mutant_bodyparts["wings"]) @@ -703,7 +714,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.dna.features["xenodorsal"] || H.dna.features["xenodorsal"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))) bodyparts_to_add -= "xenodorsal" if(mutant_bodyparts["xenohead"])//This is an overlay for different castes using different head crests - if(!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC) + if(!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "xenohead" if(mutant_bodyparts["xenotail"]) if(!H.dna.features["xenotail"] || H.dna.features["xenotail"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) @@ -721,11 +732,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) bodyparts_to_add -= "mam_waggingtail" if(mutant_bodyparts["mam_ears"]) - if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC) + if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "mam_ears" if(mutant_bodyparts["mam_snouts"]) //Take a closer look at that snout! - if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC) + if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) bodyparts_to_add -= "mam_snouts" if(mutant_bodyparts["taur"]) diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 94f64ceacb..5519545bd2 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -2,7 +2,7 @@ name = "Android" id = "android" say_mod = "states" - species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL) + species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL,ROBOTIC_LIMBS) inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID meat = null @@ -11,15 +11,3 @@ mutanttongue = /obj/item/organ/tongue/robot species_language_holder = /datum/language_holder/synthetic limbs_id = "synth" - -/datum/species/android/on_species_gain(mob/living/carbon/C) - . = ..() - for(var/X in C.bodyparts) - var/obj/item/bodypart/O = X - O.change_bodypart_status(BODYPART_ROBOTIC, FALSE, TRUE) - -/datum/species/android/on_species_loss(mob/living/carbon/C) - . = ..() - for(var/X in C.bodyparts) - var/obj/item/bodypart/O = X - O.change_bodypart_status(BODYPART_ORGANIC,FALSE, TRUE) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index 94d5456c3d..e520bcec1f 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -6,18 +6,24 @@ icon_limbs = DEFAULT_BODYPART_ICON_CITADEL blacklisted = 0 sexes = 0 - species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID + species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING,ROBOTIC_LIMBS) + inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD) mutant_bodyparts = list("ipc_screen" = "Blank", "ipc_antenna" = "None") meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless) - mutanttongue = /obj/item/organ/tongue/robot/ipc -//Just robo looking parts. + + //Just robo looking parts. mutant_heart = /obj/item/organ/heart/ipc mutantlungs = /obj/item/organ/lungs/ipc mutantliver = /obj/item/organ/liver/ipc mutantstomach = /obj/item/organ/stomach/ipc mutanteyes = /obj/item/organ/eyes/ipc + mutantears = /obj/item/organ/ears/ipc + mutanttongue = /obj/item/organ/tongue/robot/ipc + mutant_brain = /obj/item/organ/brain/ipc + + //special cybernetic organ for getting power from apcs + mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord) exotic_bloodtype = "HF" diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index 408d264546..6aaa9b98b1 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -4,18 +4,23 @@ icon_limbs = DEFAULT_BODYPART_ICON_CITADEL say_mod = "beeps" default_color = "00FF00" - species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR) - inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID + species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS) + inherent_traits = list(TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NO_PROCESS_FOOD) mutant_bodyparts = list("ipc_antenna" = "Synthetic Lizard - Antennae","mam_tail" = "Synthetic Lizard", "mam_snouts" = "Synthetic Lizard - Snout", "legs" = "Digitigrade", "mam_body_markings" = "Synthetic Lizard - Plates", "taur" = "None") meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless) - mutanttongue = /obj/item/organ/tongue/robot/ipc //Just robo looking parts. mutant_heart = /obj/item/organ/heart/ipc mutantlungs = /obj/item/organ/lungs/ipc mutantliver = /obj/item/organ/liver/ipc mutantstomach = /obj/item/organ/stomach/ipc mutanteyes = /obj/item/organ/eyes/ipc + mutantears = /obj/item/organ/ears/ipc + mutanttongue = /obj/item/organ/tongue/robot/ipc + mutant_brain = /obj/item/organ/brain/ipc + + //special cybernetic organ for getting power from apcs + mutant_organs = list(/obj/item/organ/cyberimp/arm/power_cord) exotic_bloodtype = "S" diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index c788b9b033..0aeda5c949 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -164,6 +164,23 @@ /obj/item/stock_parts/cell/get_part_rating() return rating * maxcharge +// stuff so ipcs and synthlizards can eat power cells, taken from how moths can eat clothing +/obj/item/reagent_containers/food/snacks/cell + name = "oops" + desc = "If you're reading this it means I messed up. This is related to ipcs/synths eating cells and I didn't know a better way to do it than making a new food object." + list_reagents = list(/datum/reagent/consumable/nutriment = 0.5) + tastes = list("electricity" = 1, "metal" = 1) + +/obj/item/stock_parts/cell/attack(mob/M, mob/user, def_zone) + if(user.a_intent != INTENT_HARM && isrobotic(M)) + var/obj/item/reagent_containers/food/snacks/cell/cell_as_food = new + cell_as_food.name = name + if(cell_as_food.attack(M, user, def_zone)) + take_damage(40, sound_effect=FALSE) + qdel(cell_as_food) + else + return ..() + /* Cell variants*/ /obj/item/stock_parts/cell/empty start_charged = FALSE diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 0e0056f958..64d8f59d2c 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -17,8 +17,9 @@ var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes /datum/reagent/consumable/on_mob_life(mob/living/carbon/M) - current_cycle++ - M.adjust_nutrition(nutriment_factor, max_nutrition) + if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD)) + current_cycle++ + M.adjust_nutrition(nutriment_factor, max_nutrition) M.CheckBloodsuckerEatFood(nutriment_factor) holder.remove_reagent(type, metabolization_rate) @@ -49,10 +50,11 @@ var/burn_heal = 0 /datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M) - if(prob(50)) - M.heal_bodypart_damage(brute_heal,burn_heal, 0) - . = 1 - ..() +if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD)) + if(prob(50)) + M.heal_bodypart_damage(brute_heal,burn_heal, 0) + . = 1 + ..() /datum/reagent/consumable/nutriment/on_new(list/supplied_data) // taste data can sometimes be ("salt" = 3, "chips" = 1) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 09ac7a8cb2..b8b0afa2a2 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -71,6 +71,8 @@ var/medium_burn_msg = "blistered" var/heavy_burn_msg = "peeling away" + var/render_like_organic = FALSE // forces limb to render as if it were an organic limb + /obj/item/bodypart/examine(mob/user) . = ..() if(brute_dam > DAMAGE_PRECISION) @@ -285,7 +287,7 @@ if(status == BODYPART_ORGANIC) icon = base_bp_icon || DEFAULT_BODYPART_ICON_ORGANIC else if(status == BODYPART_ROBOTIC) - icon = DEFAULT_BODYPART_ICON_ROBOTIC + icon = base_bp_icon || DEFAULT_BODYPART_ICON_ROBOTIC if(owner) owner.updatehealth() @@ -399,8 +401,9 @@ if(status == BODYPART_ROBOTIC) dmg_overlay_type = "robotic" - body_markings = null - aux_marking = null + if(!render_like_organic) + body_markings = null + aux_marking = null if(dropping_limb) no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner. @@ -466,7 +469,7 @@ if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST)) should_draw_gender = FALSE - if(is_organic_limb()) + if(is_organic_limb() || render_like_organic) limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi' if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index afaa66dae9..239bd8a98d 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -10,7 +10,7 @@ target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_HEAD) - requires_bodypart_type = 0 + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery_step/fix_brain name = "fix brain" implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100 diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index af736e393c..f2baabcef6 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -3,6 +3,7 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/incise_heart, /datum/surgery_step/coronary_bypass, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery/coronary_bypass/can_start(mob/user, mob/living/carbon/target, obj/item/tool) var/obj/item/organ/heart/H = target.getorganslot(ORGAN_SLOT_HEART) diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 87e6d096b3..57803f7461 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -2,6 +2,7 @@ name = "dental implant" steps = list(/datum/surgery_step/drill, /datum/surgery_step/insert_pill) possible_locs = list(BODY_ZONE_PRECISE_MOUTH) + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery_step/insert_pill name = "insert pill" diff --git a/code/modules/surgery/embalming.dm b/code/modules/surgery/embalming.dm index c6d2c72caa..a4494c606a 100644 --- a/code/modules/surgery/embalming.dm +++ b/code/modules/surgery/embalming.dm @@ -7,7 +7,7 @@ target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST) - requires_bodypart_type = 0 + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery_step/embalming name = "embalming body" diff --git a/code/modules/surgery/emergency_cardioversion_recovery.dm b/code/modules/surgery/emergency_cardioversion_recovery.dm index 5646c43f00..05a18e9102 100644 --- a/code/modules/surgery/emergency_cardioversion_recovery.dm +++ b/code/modules/surgery/emergency_cardioversion_recovery.dm @@ -3,6 +3,7 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/incise_heart, /datum/surgery_step/ventricular_electrotherapy, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery_step/ventricular_electrotherapy name = "ventricular electrotherapy" diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 006dbe2af1..c26fda4158 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -3,7 +3,8 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_PRECISE_EYES) - requires_bodypart_type = 0 + requires_bodypart_type = BODYPART_ORGANIC + //fix eyes /datum/surgery_step/fix_eyes name = "fix eyes" diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 4069199864..8753912eb8 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -8,7 +8,7 @@ target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST) - requires_bodypart_type = FALSE + requires_bodypart_type = BODYPART_ORGANIC replaced_by = /datum/surgery ignore_clothes = TRUE var/healing_step_type diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 5a0fd819f1..ecdc5477f1 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -2,10 +2,13 @@ name = "Lipoplasty" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYPART_ORGANIC + /datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target, obj/item/tool) if(HAS_TRAIT(target, TRAIT_FAT)) return 1 return 0 + //cut fat /datum/surgery_step/cut_fat name = "cut excess fat" diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 7ef7e4cd7f..34b40258c8 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -3,6 +3,7 @@ steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/lobectomy, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYPART_ORGANIC /datum/surgery/lobectomy/can_start(mob/user, mob/living/carbon/target, obj/item/tool) var/obj/item/organ/lungs/L = target.getorganslot(ORGAN_SLOT_LUNGS) diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 9366e585c3..101be7f103 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -85,3 +85,107 @@ display_results(user, target, "You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...", "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].", "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].") + +//cut wires +/datum/surgery_step/cut_wires + name = "cut wires" + implements = list( + TOOL_WIRECUTTER = 100, + TOOL_SCALPEL = 75, + /obj/item/kitchen/knife = 50, + /obj/item = 10) // 10% success with any sharp item. + time = 24 + +/datum/surgery_step/cut_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to cut loose wires in [target]'s [parse_zone(target_zone)]...", + "[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].", + "[user] begins to cut loose wires in [target]'s [parse_zone(target_zone)].") + +/datum/surgery_step/cut_wires/tool_check(mob/user, obj/item/tool) + if(implement_type == /obj/item && !tool.get_sharpness()) + return FALSE + return TRUE + +//pry off plating +/datum/surgery_step/pry_off_plating + name = "pry off plating" + implements = list( + TOOL_CROWBAR = 100, + TOOL_HEMOSTAT = 10) + time = 24 + +/datum/surgery_step/pry_off_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + do_sparks(rand(5, 9), FALSE, target.loc) + return TRUE + +/datum/surgery_step/pry_off_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to pry off [target]'s [parse_zone(target_zone)] plating...", + "[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.", + "[user] begins to pry off [target]'s [parse_zone(target_zone)] plating.") + +//weld plating +/datum/surgery_step/weld_plating + name = "weld plating" + implements = list( + TOOL_WELDER = 100) + time = 24 + +/datum/surgery_step/weld_plating/tool_check(mob/user, obj/item/tool) + if(implement_type == TOOL_WELDER && !tool.use_tool(user, user, 0, volume=50, amount=1)) + return FALSE + return TRUE + +/datum/surgery_step/weld_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to weld [target]'s [parse_zone(target_zone)] plating...", + "[user] begins to weld [target]'s [parse_zone(target_zone)] plating.", + "[user] begins to weld [target]'s [parse_zone(target_zone)] plating.") + +//replace wires +/datum/surgery_step/replace_wires + name = "replace wires" + implements = list(/obj/item/stack/cable_coil = 100) + time = 24 + var/cableamount = 5 + +/datum/surgery_step/replace_wires/tool_check(mob/user, obj/item/tool) + var/obj/item/stack/cable_coil/coil = tool + if(coil.get_amount() < cableamount) + to_chat(user, "Not enough cable!") + return FALSE + return TRUE + +/datum/surgery_step/replace_wires/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/stack/cable_coil/coil = tool + if(coil && !(coil.get_amount()You begin to replace [target]'s [parse_zone(target_zone)] wiring...", + "[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.", + "[user] begins to replace [target]'s [parse_zone(target_zone)] wiring.") + +//add plating +/datum/surgery_step/add_plating + name = "add plating" + implements = list(/obj/item/stack/sheet/metal = 100) + time = 24 + var/metalamount = 5 + +/datum/surgery_step/add_plating/tool_check(mob/user, obj/item/tool) + var/obj/item/stack/sheet/metal/plat = tool + if(plat.get_amount() < metalamount) + to_chat(user, "Not enough metal!") + return FALSE + return TRUE + +/datum/surgery_step/add_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/stack/sheet/metal/plat = tool + if(plat && !(plat.get_amount()You begin to add plating to [target]'s [parse_zone(target_zone)]...", + "[user] begins to add plating to [target]'s [parse_zone(target_zone)].", + "[user] begins to add plating to [target]'s [parse_zone(target_zone)].") \ No newline at end of file diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index f493137424..4650f212c5 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -2,6 +2,7 @@ name = "organ manipulation" target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) + requires_bodypart_type = BODYPART_ORGANIC requires_real_bodypart = 1 steps = list( /datum/surgery_step/incise, diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index b7dfa3eb88..e9eef45228 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -288,3 +288,69 @@ var/obj/item/assembly/flash/armimplant/F = new(src) items_list += F F.I = src + +///////////////// + + +//IPC/Synth Arm// + + +///////////////// + +/obj/item/organ/cyberimp/arm/power_cord + name = "power cord implant" + desc = "An internal power cord hooked up to a battery. Useful if you run on volts." + contents = newlist(/obj/item/apc_powercord) + zone = "l_arm" + +/obj/item/apc_powercord + name = "power cord" + desc = "An internal power cord hooked up to a battery. Useful if you run on electricity. Not so much otherwise." + icon = 'icons/obj/power.dmi' + icon_state = "wire1" + +/obj/item/apc_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(!istype(target, /obj/machinery/power/apc) || !ishuman(user) || !proximity_flag) + return ..() + user.changeNext_move(CLICK_CD_MELEE) + var/obj/machinery/power/apc/A = target + var/mob/living/carbon/human/H = user + var/obj/item/organ/stomach/ipc/cell = locate(/obj/item/organ/stomach/ipc) in H.internal_organs + if(!cell) + to_chat(H, "You try to siphon energy from the [A], but your power cell is gone!") + return + + if(A.cell && A.cell.charge > 0) + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + to_chat(user, "You are already fully charged!") + return + else + powerdraw_loop(A, H) + return + + to_chat(user, "There is no charge to draw from that APC.") + +/obj/item/apc_powercord/proc/powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H) + H.visible_message("[H] inserts a power connector into the [A].", "You begin to draw power from the [A].") + while(do_after(H, 10, target = A)) + if(loc != H) + to_chat(H, "You must keep your connector out while charging!") + break + if(A.cell.charge == 0) + to_chat(H, "The [A] doesn't have enough charge to spare.") + break + A.charging = 1 + if(A.cell.charge >= 500) + do_sparks(1, FALSE, A) + H.nutrition += 50 + A.cell.charge -= 150 + to_chat(H, "You siphon off some of the stored charge for your own use.") + else + H.nutrition += A.cell.charge/10 + A.cell.charge = 0 + to_chat(H, "You siphon off as much as the [A] can spare.") + break + if(H.nutrition > NUTRITION_LEVEL_WELL_FED) + to_chat(H, "You are now fully charged.") + break + H.visible_message("[H] unplugs from the [A].", "You unplug from the [A].") diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index c1e33c7dac..61d6f1e62c 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -132,3 +132,29 @@ if(. & EMP_PROTECT_SELF) return damage += 40/severity + +/obj/item/organ/ears/ipc + name = "auditory sensors" + icon_state = "ears-c" + desc = "A pair of microphones intended to be installed in an IPC head, that grant the ability to hear." + zone = BODY_ZONE_HEAD + slot = ORGAN_SLOT_EARS + gender = PLURAL + organ_flags = ORGAN_SYNTHETIC + +/obj/item/organ/ears/ipc/emp_act(severity) + . = ..() + if(!owner || . & EMP_PROTECT_SELF) + return + to_chat(owner, "Alert: Auditory systems corrupted!.") + switch(severity) + if(1) + owner.Jitter(30) + owner.Dizzy(30) + owner.DefaultCombatKnockdown(80) + deaf = 30 + + if(2) + owner.Jitter(15) + owner.Dizzy(15) + owner.DefaultCombatKnockdown(40) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 049fc5b5d4..d988e20637 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -394,6 +394,15 @@ name = "ipc eyes" icon_state = "cybernetic_eyeballs" +/obj/item/organ/eyes/ipc/emp_act(severity) + . = ..() + if(!owner || . & EMP_PROTECT_SELF) + return + to_chat(owner, "Alert: Perception visuals damaged!") + owner.flash_act(visual = 1) + if(severity == EMP_HEAVY) + owner.adjustOrganLoss(ORGAN_SLOT_EYES, 20) + #undef BLURRY_VISION_ONE #undef BLURRY_VISION_TWO #undef BLIND_VISION_THREE \ No newline at end of file diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index b3020ae13f..84247d10ee 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -464,9 +464,20 @@ return S /obj/item/organ/lungs/ipc - name = "ipc lungs" + name = "ipc cooling system" icon_state = "lungs-c" +/obj/item/organ/lungs/ipc/emp_act(severity) //Should probably put it somewhere else later + . = ..() + if(. & EMP_PROTECT_SELF) + return + to_chat(owner, "Alert: Critical cooling system failure!") + switch(severity) + if(1) + owner.adjust_bodytemperature(100*TEMPERATURE_DAMAGE_COEFFICIENT) + if(2) + owner.adjust_bodytemperature(30*TEMPERATURE_DAMAGE_COEFFICIENT) + /obj/item/organ/lungs/plasmaman name = "plasma filter" desc = "A spongy rib-shaped mass for filtering plasma from the air." diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index d9cbf9be03..d2ec254ca2 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -89,5 +89,17 @@ desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen." /obj/item/organ/stomach/ipc - name = "ipc stomach" + name = "ipc cell" icon_state = "stomach-ipc" + +/obj/item/organ/stomach/ipc/emp_act(severity) + . = ..() + if(!owner || . & EMP_PROTECT_SELF) + return + switch(severity) + if(1) + owner.nutrition = min(owner.nutrition - 50, 0) + to_chat(owner, "Alert: Detected severe battery discharge!") + if(2) + owner.nutrition = min(owner.nutrition - 100, 0) + to_chat(owner, "Alert: Minor battery discharge!") diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index c4e056583c..d3597ba516 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -2,6 +2,8 @@ name = "Plastic surgery" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_face, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_HEAD) + requires_bodypart_type = BODYPART_ORGANIC + //reshape_face /datum/surgery_step/reshape_face name = "reshape face" diff --git a/code/modules/surgery/robot_brain_surgery.dm b/code/modules/surgery/robot_brain_surgery.dm new file mode 100644 index 0000000000..5feca7382f --- /dev/null +++ b/code/modules/surgery/robot_brain_surgery.dm @@ -0,0 +1,51 @@ +/datum/surgery/robot_brain_surgery + name = "Reset posibrain logic (Brain surgery)" + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/fix_robot_brain, + /datum/surgery_step/mechanic_close) + + target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list(BODY_ZONE_HEAD) + requires_bodypart_type = BODYPART_ROBOTIC + desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain." + +/datum/surgery_step/fix_robot_brain + name = "fix posibrain (multitool)" + implements = list(TOOL_MULTITOOL = 100, TOOL_HEMOSTAT = 35, TOOL_SCREWDRIVER = 15) + time = 120 //long and complicated + +/datum/surgery/robot_brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN) + if(!B) + return FALSE + return TRUE + +/datum/surgery_step/fix_robot_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to fix [target]'s posibrain...", + "[user] begins to fix [target]'s posibrain.", + "[user] begins to perform surgery on [target]'s posibrain.") + +/datum/surgery_step/fix_robot_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You succeed in fixing [target]'s posibrain.", + "[user] successfully fixes [target]'s posibrain!", + "[user] completes the surgery on [target]'s posibrain.") + if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed)) + target.mind.remove_antag_datum(/datum/antagonist/brainwashed) + target.setOrganLoss(ORGAN_SLOT_BRAIN, target.getOrganLoss(ORGAN_SLOT_BRAIN) - 60) //we set damage in this case in order to clear the "failing" flag + target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY) //Lobotomy tier fix cause you can't clone this! + return TRUE + +/datum/surgery_step/fix_robot_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.getorganslot(ORGAN_SLOT_BRAIN)) + display_results(user, target, "You screw up, causing more damage!", + "[user] screws up, causing damage to the circuits!", + "[user] completes the surgery on [target]'s posibrain.") + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60) + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) + else + user.visible_message("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore.", "You suddenly notice that the posibrain you were working on is not there anymore.") + return FALSE diff --git a/code/modules/surgery/robot_healing.dm b/code/modules/surgery/robot_healing.dm new file mode 100644 index 0000000000..6355410a79 --- /dev/null +++ b/code/modules/surgery/robot_healing.dm @@ -0,0 +1,125 @@ +//Almost copypaste of tend wounds, with some changes + +/datum/surgery/robot_healing + name = "Repair robotic limbs (basic)" + desc = "A surgical procedure that provides repairs and maintenance to robotic limbs. Is slightly more efficient when the patient is severely damaged." + + steps = list(/datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/cut_wires, + /datum/surgery_step/robot_heal, + /datum/surgery_step/mechanic_close) + + target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYPART_ROBOTIC + ignore_clothes = TRUE + var/antispam = FALSE + var/healing_step_type = /datum/surgery_step/robot_heal/basic + +/datum/surgery/robot_healing/New(surgery_target, surgery_location, surgery_bodypart) + ..() + if(healing_step_type) + steps = list(/datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/cut_wires, + healing_step_type, + /datum/surgery_step/mechanic_close) + +/datum/surgery_step/robot_heal + name = "repair body (welder/cable)" + implements = list(TOOL_WELDER = 100, /obj/item/stack/cable_coil = 100) + repeatable = TRUE + time = 15 + var/healsbrute = FALSE + var/healsburn = FALSE + var/brutehealing = 0 + var/burnhealing = 0 + var/missinghpbonus = 0 //heals an extra point of damager per X missing damage of type (burn damage for burn healing, brute for brute). Smaller Number = More Healing! + +/datum/surgery_step/robot_heal/tool_check(mob/user, obj/item/tool) + if(implement_type == TOOL_WELDER && !tool.tool_use_check(user, 1)) + return FALSE + return TRUE + +/datum/surgery_step/robot_heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/woundtype + if(implement_type == TOOL_WELDER) + healsbrute = TRUE + healsburn = FALSE + woundtype = "dents" + else + healsbrute = FALSE + healsburn = TRUE + woundtype = "wiring" + + if(istype(surgery,/datum/surgery/robot_healing)) + var/datum/surgery/robot_healing/the_surgery = surgery + if(!the_surgery.antispam) + display_results(user, target, "You attempt to fix some of [target]'s [woundtype].", + "[user] attempts to fix some of [target]'s [woundtype].", + "[user] attempts to fix some of [target]'s [woundtype].") + +/datum/surgery_step/robot_heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) + if(..()) + while((healsbrute && target.getBruteLoss() && tool.tool_use_check(user,1)) || (healsburn && target.getFireLoss() && tool)) + if(!..()) + break + +/datum/surgery_step/robot_heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/umsg = "You succeed in fixing some of [target]'s damage" //no period, add initial space to "addons" + var/tmsg = "[user] fixes some of [target]'s damage" //see above + var/urhealedamt_brute = 0 + if(healsbrute) + urhealedamt_brute = brutehealing + tool.use_tool(target, user, 0, volume=50, amount=1) + var/urhealedamt_burn = 0 + if(healsburn) + urhealedamt_burn = burnhealing + if(tool) + tool.use(1) + if(missinghpbonus) + if(target.stat != DEAD) + urhealedamt_brute += round((target.getBruteLoss()/ missinghpbonus),0.1) + urhealedamt_burn += round((target.getFireLoss()/ missinghpbonus),0.1) + else //less healing bonus for the dead since they're expected to have lots of damage to begin with (to make TW into defib not TOO simple) + urhealedamt_brute += round((target.getBruteLoss()/ (missinghpbonus*5)),0.1) + urhealedamt_burn += round((target.getFireLoss()/ (missinghpbonus*5)),0.1) + if(!get_location_accessible(target, target_zone)) + urhealedamt_brute *= 0.55 + urhealedamt_burn *= 0.55 + umsg += " as best as you can while they have clothing on" + tmsg += " as best as they can while [target] has clothing on" + target.heal_bodypart_damage(urhealedamt_brute,urhealedamt_burn, only_organic = FALSE, only_robotic = TRUE) + display_results(user, target, "[umsg].", + "[tmsg].", + "[tmsg].") + if(istype(surgery, /datum/surgery/robot_healing)) + var/datum/surgery/robot_healing/the_surgery = surgery + the_surgery.antispam = TRUE + return TRUE + +/datum/surgery_step/robot_heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You screwed up!", + "[user] screws up!", + "[user] fixes some of [target]'s damage.", TRUE) + var/urdamageamt_brute = 0 + if(healsbrute) + urdamageamt_brute = brutehealing * 0.8 + var/urdamageamt_burn = 0 + if(healsburn) + urdamageamt_burn = burnhealing * 0.8 + if(missinghpbonus) + urdamageamt_brute += round((target.getBruteLoss()/ (missinghpbonus*2)),0.1) + urdamageamt_burn += round((target.getFireLoss()/ (missinghpbonus*2)),0.1) + + target.take_bodypart_damage(urdamageamt_brute, urdamageamt_burn) + return FALSE + +/***************************STEPS***************************/ + +/datum/surgery_step/robot_heal/basic + name = "repair damage" + brutehealing = 10 + burnhealing = 10 + missinghpbonus = 15 \ No newline at end of file diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index e998ce442db416faf6a546f6a72e062e4e0387a0..454138a2543e198d515f9cbfd5c6101705c1b7e6 100755 GIT binary patch delta 5440 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 Date: Thu, 4 Jun 2020 15:09:14 +0100 Subject: [PATCH 02/29] fix indentation --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 64d8f59d2c..cb41664053 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -50,7 +50,7 @@ var/burn_heal = 0 /datum/reagent/consumable/nutriment/on_mob_life(mob/living/carbon/M) -if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD)) + if(!HAS_TRAIT(M, TRAIT_NO_PROCESS_FOOD)) if(prob(50)) M.heal_bodypart_damage(brute_heal,burn_heal, 0) . = 1 From 14063648893f3e26e64444bca3b95d014cd61afd Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 4 Jun 2020 15:25:56 +0100 Subject: [PATCH 03/29] fix emps --- code/modules/mob/living/carbon/human/human_defense.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7417496a13..f47b3a93bd 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -400,7 +400,6 @@ informed = TRUE switch(severity) if(1) - L.receive_damage(0,10) Stun(200) if(!isrobotic(src)) L.receive_damage(0,10) From 6ad72e6972570a305c639707a3b0a1f36d127b33 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 5 Jun 2020 15:41:52 +0100 Subject: [PATCH 04/29] better limb healing --- code/game/objects/items/tools/weldingtool.dm | 7 ++++++- code/modules/power/cable.dm | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 9560f7fab3..6bcac76824 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -108,13 +108,18 @@ var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM) + //only heal to 25 if limb is damaged to or past 25 brute, otherwise heal normally + var/difference = affecting.brute_dam - 25 + var/heal_amount = 15 + if(difference >= 0) + heal_amount = difference if(src.use_tool(H, user, 0, volume=50, amount=1)) if(user == H) user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name].", "You start fixing some of the dents on [H]'s [affecting.name].") if(!do_mob(user, H, 50)) return - item_heal_robotic(H, user, 15, 0) + item_heal_robotic(H, user, heal_amount, 0) else return ..() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 0d674a2f77..3695464145 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -549,11 +549,16 @@ By design, d1 is the smallest direction and d2 is the highest var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) if(affecting && affecting.status == BODYPART_ROBOTIC) + //only heal to 25 if limb is damaged to or past 25 burn, otherwise heal normally + var/difference = affecting.burn_dam - 25 + var/heal_amount = 15 + if(difference >= 0) + heal_amount = difference if(user == H) user.visible_message("[user] starts to fix some of the wires in [H]'s [affecting.name].", "You start fixing some of the wires in [H]'s [affecting.name].") if(!do_mob(user, H, 50)) return - if(item_heal_robotic(H, user, 0, 15)) + if(item_heal_robotic(H, user, 0, heal_amount)) use(1) return else From 3670818cbbe8a75262be5fd1101f8cb9d647aa7a Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 15 Jun 2020 14:40:33 +0100 Subject: [PATCH 05/29] more damage, no dismember, combat lock --- code/datums/status_effects/debuffs.dm | 3 +++ .../mob/living/carbon/human/human_defense.dm | 13 +++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index b976ac0fc8..03c4999d50 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -113,6 +113,9 @@ duration = set_duration . = ..() +/datum/status_effect/no_combat_mode/robotic_emp + id = "emp_no_combat_mode" + /datum/status_effect/mesmerize id = "Mesmerize" alert_type = /obj/screen/alert/status_effect/mesmerized diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f47b3a93bd..7f4f8cf63d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -393,6 +393,8 @@ if(. & EMP_PROTECT_CONTENTS) return var/informed = FALSE + if(isrobotic(src)) + apply_status_effect(/datum/status_effect/no_combat_mode/robotic_emp, 2.5 * severity) for(var/obj/item/bodypart/L in src.bodyparts) if(L.status == BODYPART_ROBOTIC) if(!informed) @@ -405,13 +407,9 @@ L.receive_damage(0,10) Stun(200) else - // robotic species take far less damage, and roll to have their parts fly off on a heavy emp + // robotic species take far less damage and get combat mode lock instead of stuns // this is to stop emps outright killing them, and also because their organs have emp acts - L.receive_damage(0,4) - Stun(50) - if(!(L.body_part == CHEST || L.body_part == HEAD)) // only dismember legs/arms - if(prob(20)) - L.dismember() + L.receive_damage(0,5) if(2) L.receive_damage(0,5) Stun(100) @@ -419,8 +417,7 @@ L.receive_damage(0,5) Stun(100) else - L.receive_damage(0,2) - Stun(25) + L.receive_damage(0,3) /mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) var/list/damaged = list() From 23d00ea671db36992fed397956ae7fca70f21090 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 7 Jul 2020 01:44:28 +0100 Subject: [PATCH 06/29] stops double applied damage and stuns --- code/modules/mob/living/carbon/human/human_defense.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5fc08518a5..a3705ef53c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -397,22 +397,21 @@ informed = TRUE switch(severity) if(1) - Stun(200) if(!isrobotic(src)) L.receive_damage(0,10) Stun(200) else - // robotic species take far less damage and get combat mode lock instead of stuns + // robotic species take far less damage and get combat mode lock over longer stuns // this is to stop emps outright killing them, and also because their organs have emp acts L.receive_damage(0,5) + Stun(50) if(2) - L.receive_damage(0,5) - Stun(100) if(!isrobotic(src)) L.receive_damage(0,5) Stun(100) else L.receive_damage(0,3) + Stun(25) //4x shorter stun because every limb is robotic, and their organs get emp'd, and they get a combat lock /mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) var/list/damaged = list() From f93b8d61295ad1d448d980a672d5587454ff0e2c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 28 Aug 2020 00:50:09 +0000 Subject: [PATCH 07/29] Automatic changelog compile [ci skip] --- html/changelog.html | 18 +++++++----------- html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/AutoChangeLog-pr-13232.yml | 4 ---- html/changelogs/AutoChangeLog-pr-13265.yml | 4 ---- 4 files changed, 14 insertions(+), 19 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-13232.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-13265.yml diff --git a/html/changelog.html b/html/changelog.html index 870578cae5..d912e7643e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,13 @@ -->
+

28 August 2020

+

timothyteakettle updated:

+
    +
  • an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors
  • +
  • you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too)
  • +
+

27 August 2020

silicons updated:

    @@ -1455,17 +1462,6 @@
    • felinids now nya when tabled
    - -

    26 June 2020

    -

    Ghommie updated:

    -
      -
    • Snore spam.
    • -
    • Hostile mobs shouldn't hit their original spawner structures or thoses of the same faction.
    • -
    -

    silicons updated:

    -
      -
    • soap cleans blood again
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fd9523fb15..2fcac0231b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -27100,3 +27100,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. timothyteakettle: - tweak: changing your character's gender won't randomize its hairstyle and facial hairstyle now +2020-08-28: + timothyteakettle: + - rscadd: an ancient game over a thousand years old has re-emerged among crewmembers + - rock paper scissors + - rscadd: you can now choose a body sprite as an anthromorph or anthromorphic insect, + and can choose from aquatic/avian and apid respectively (and obviously back + to the defaults too) diff --git a/html/changelogs/AutoChangeLog-pr-13232.yml b/html/changelogs/AutoChangeLog-pr-13232.yml deleted file mode 100644 index 9571dbf2b9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-13232.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - rscadd: "you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too)" diff --git a/html/changelogs/AutoChangeLog-pr-13265.yml b/html/changelogs/AutoChangeLog-pr-13265.yml deleted file mode 100644 index 917e5786b0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-13265.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - rscadd: "an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors" From 8ac1001e1f11cfab03039792e907ea562a614c39 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 29 Aug 2020 00:21:36 +0000 Subject: [PATCH 08/29] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d912e7643e..59d5b36524 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1452,16 +1452,6 @@
  • support for custom blood colours implemented, slimes blood colour now equivalent to their body colour
- -

27 June 2020

-

Detective-Google updated:

-
    -
  • Lying down is better
  • -
-

timothyteakettle updated:

-
    -
  • felinids now nya when tabled
  • -
GoonStation 13 Development Team From ba7f85e5b442202507017029c999c1acfbb0c71a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 30 Aug 2020 00:22:56 +0000 Subject: [PATCH 09/29] Automatic changelog compile [ci skip] --- html/changelog.html | 86 ++-------------------- html/changelogs/.all_changelog.yml | 5 ++ html/changelogs/AutoChangeLog-pr-13282.yml | 6 -- 3 files changed, 13 insertions(+), 84 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-13282.yml diff --git a/html/changelog.html b/html/changelog.html index 34198d20a4..e75fbe82cd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,38 +50,18 @@ -->
+

30 August 2020

+

raspy-on-osu updated:

+
    +
  • new explosion echoes
  • +
  • explosion echo range
  • +
  • 5 new explosion related sounds
  • +
+

28 August 2020

timothyteakettle updated:

  • an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors
  • -

    EmeraldSundisk updated:

    -
      -
    • Adds more paper to the library
    • -
    • The law office now has a desk window
    • -
    • Expands most of CogStation's exterior airlocks. Slightly adjusts surrounding areas to accommodate this.
    • -
    • Updates some of CogStation's paperwork
    • -
    • The rat in the morgue turned themselves into a possum. Funniest shit I've ever seen.
    • -
    • Adjusts some area designations so cameras should receive power properly
    • -
    • Cleans up an errant decal
    • -
    -

    Hatterhat updated:

    -
      -
    • Traitor holoparasites can now only be bought once, because apparently you can only have one active holopara.
    • -
    • PDA bombs can now only be bought once per uplink.
    • -
    -

    lolman360 updated:

    -
      -
    • atmos = radiation = chemistry.
    • -
    -

    shellspeed1 updated:

    -
      -
    • Adds slow mode for iv drips
    • -
    -

    timothyteakettle updated:

    -
      -
    • an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors
    • -
    • customization features appear in alphabetical order where necessary
    • -
    • bokken do two more stamina damage now
    • you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too)
    @@ -1430,56 +1410,6 @@
    • slimes no longer have white blood by default
    - -

    28 June 2020

    -

    Detective-Google updated:

    -
      -
    • cog is less the suck
    • -
    • piggybacking is no longer absolutely inferior
    • -
    -

    Ghommie updated:

    -
      -
    • Fixing windows interaction with spraycans.
    • -
    • Fixing kinetic accelerator guns not working well with gun circuitries.
    • -
    • Fixing Zoomba borgs lights overlays.
    • -
    • Fixing the "absorb another ling" and "absorb the most dna" objectives rolling when no other changeling is around.
    • -
    • Clarified a pet peeve about the spread infestation ability.
    • -
    • BEPIS nodes won't show up anymore in the expert mode ui of the r&d console anymore (good thing they weren't researchable).
    • -
    • Hopefully fixing sound loop edge cases.
    • -
    • Fixing pAI radios being permanently disabled by EMPs at times.
    • -
    • Windoors can now be obscured with spraycans just like windows.
    • -
    -

    Ghommie porting PRs by Qustinnus/Floyd, Willow, cacogen, nemvar, Ghilker and EOBGames (Inept) updated:

    -
      -
    • Fixes a material duplication bug.
    • -
    • unique combinations of custom_materials lists are now shared between objects
    • -
    • meat material. yes.
    • -
    • materials can now be used to build walls/floors. meat house
    • -
    • edible component now does not try to attack if you eat something with it
    • -
    • Texture support for mat datums with thanks to 4DPlanner!
    • -
    • you no longer hit yourself with organs when eating
    • -
    • A whole bunch of materials are now datumised! Check out bronze, runed metal, sand, sandstone, snow, paper, cardboard, bone and bamboo. Oh, and pizza. Yes, pizza.
    • -
    • Buffs material floor tiles' throwforces from 1 to 10 (same as iron) to better showcase the effect of different materials (e.g. meat vs. titanium)
    • -
    • Radioactive items no longer output a single . when examined at a distance
    • -
    -

    MrJWhit updated:

    -
      -
    • Removed air alarm in Snow Snaxi in Tcomms Sat
    • -
    • Removed trash bins in genetics and mining
    • -
    • Gives cargo techs a cargolathe
    • -
    -

    Putnam3145 updated:

    -
      -
    • lost my mind just a couple of times
    • -
    -

    b1tt3r1n0 updated:

    -
      -
    • pouches, again, and and material pouches.
    • -
    -

    timothyteakettle updated:

    -
      -
    • support for custom blood colours implemented, slimes blood colour now equivalent to their body colour
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 2fcac0231b..f0ff6a3c32 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -27107,3 +27107,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too) +2020-08-30: + raspy-on-osu: + - rscadd: new explosion echoes + - tweak: explosion echo range + - soundadd: 5 new explosion related sounds diff --git a/html/changelogs/AutoChangeLog-pr-13282.yml b/html/changelogs/AutoChangeLog-pr-13282.yml deleted file mode 100644 index 877c0f79d5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-13282.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "raspy-on-osu" -delete-after: True -changes: - - rscadd: "new explosion echoes" - - tweak: "explosion echo range" - - soundadd: "5 new explosion related sounds" From 6ed6c75cd7c218eae56231ff0fe0baa2bb32474b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 31 Aug 2020 00:24:54 +0000 Subject: [PATCH 10/29] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index e75fbe82cd..201e379bfc 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1400,16 +1400,6 @@
  • non-carbon blood is now not white
  • fixed a bunch of grammar/spelling mistakes
  • - -

    29 June 2020

    -

    b1tt3r1n0 updated:

    -
      -
    • Made teratomas from sdgf less powergame
    • -
    -

    timothyteakettle updated:

    -
      -
    • slimes no longer have white blood by default
    • -
    GoonStation 13 Development Team From 83d83a7e9dcb78b62a27dcdfc49d4b082c2c7ee1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 1 Sep 2020 00:50:46 +0000 Subject: [PATCH 11/29] Automatic changelog compile [ci skip] --- html/changelog.html | 51 --------------------------------------------- 1 file changed, 51 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 201e379bfc..a11111ba18 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1349,57 +1349,6 @@
    • bohbombing is a thing now
    - -

    30 June 2020

    -

    Fikou updated:

    -
      -
    • spray cans, airlock painters, and decal painters added to engineering/service/autolathe (where applicable)
    • -
    -

    Ghommie updated:

    -
      -
    • Fixed a gap on the male insect anthro torso sprite when facing south.
    • -
    • Fixed mecha ID access not being removable.
    • -
    • Fixed a peeve with the hypno trance status effect not sanitizing some heard hypnosis inputs (i.e. custom say messages like say"honks*clownem ipsum dolor")
    • -
    • fixed an issue about using stacks with only 1 amount left.
    • -
    • Fixed a peeve on attack messages against carbons/humans.
    • -
    • Fixed missing hypnochair board.
    • -
    • Fixed material walls and tiles. My bad on that port.
    • -
    -

    Ghommie (inspired by MrDoomBringer's work on tgstation) updated:

    -
      -
    • New check skills UI.
    • -
    -

    Ghommie (porting PRs by XTDM, coiax, MrDoomBringer) updated:

    -
      -
    • Random Events now have a follow link for ghosts!
    • -
    • Adds the Spontaneous Brain Trauma to the event pool. Sometimes your brain just goes a little wrong.
    • -
    • Sometimes a low level cloning pod will make errors in replicating your brain, leaving you with a mild brain trauma.
    • -
    • When a person is cloned, any mental traumas are cloned as well.
    • -
    • The wizard federation announces that the Curse of Madness is out of beta and is now available for purchase for 4 points. It causes long-lasting brain traumas to all inhabitants of a target space station.
    • -
    • The wizard federation declines responsibility for any self-harm caused by curses cast while inside the targeted station.
    • -
    • Due to the extensive testing of the Curse of Madness some unique new trauma types have appeared across Nanotrasen-controlled space.
    • -
    • Curse of Madness can now be triggered by a wizard's Summon Events, at the same chance as Summon Guns or Summon Magic.
    • -
    • When an admin triggers Curse of Madness manually, they can specify their own dark truth to horrify the station with.
    • -
    -

    nightred updated:

    -
      -
    • Created two_handed component
    • -
    • Updated all existing two handed items to use the new component
    • -
    -

    silicons updated:

    -
      -
    • typing indicators no longer generates duplicate message boxes.
    • -
    • config errors now have line numbers.
    • -
    • outgoing mentorpms are now blue instead of green for the sender.
    • -
    • *squish
    • -
    -

    timothyteakettle updated:

    -
      -
    • you can now select your tongue and speech verb in the character customization menu!
    • -
    • skeleton is now split into two more types, greater and lesser
    • -
    • non-carbon blood is now not white
    • -
    • fixed a bunch of grammar/spelling mistakes
    • -
    GoonStation 13 Development Team From 2b05dcf488a3dcc41ff12191c23d6a030fb69ea5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 3 Sep 2020 00:48:45 +0000 Subject: [PATCH 12/29] Automatic changelog compile [ci skip] --- html/changelog.html | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index a11111ba18..2a63ab8c1b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1324,31 +1324,6 @@
    • bloodpacks initialise correctly now
    - -

    02 July 2020

    -

    Ghommie updated:

    -
      -
    • Fixing a few issues with twohanded items.
    • -
    • Unum decks now work correctly.
    • -
    • Abductor walls are once again buildable with alien alloy.
    • -
    -

    Trilbyspaceclone updated:

    -
      -
    • Makes pride and envy ruin a bit smaller!
    • -
    • Pride now has rings, lipstick wigs and silver walls/door making a nice and polished look then cyan blue walls.
    • -
    • more trash and better dagger placement on food ruin
    • -
    • Snowboim now has snowballs and toy gifts for the two skeles daw!
    • -
    • Beach boim now has carp light branding beer, as well as soap!
    • -
    • Greed ruin now uses nice slick walls and carpet!
    • -
    • Founten ruin looks a lot better with its carpets and well maintained fluff things, but walls suffered and no longer can salvage ruined metal...
    • -
    • Alien nest has a bit more glowy floors of resin looking a bit more lived in by the drones. As well as the "door" now being see through resin rather then the thicker stuff that you cant see through
    • -
    • Pizza party has a few more gifts, some candy and snap pops yay!
    • -
    • Sloth ruin is about 15~ tiles shorter, has and has more fruit for a bowl. How lazy!
    • -
    -

    silicons updated:

    -
      -
    • bohbombing is a thing now
    • -
    GoonStation 13 Development Team From 8ff89c6df0d5c4689f2fce7f04ff7719600830e5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 4 Sep 2020 00:50:14 +0000 Subject: [PATCH 13/29] Automatic changelog compile [ci skip] --- html/changelog.html | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 2a63ab8c1b..1036b91f11 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1286,44 +1286,6 @@
    • blood_DNA["color"] is now a single variable instead of a list
    - -

    03 July 2020

    -

    Arturlang updated:

    -
      -
    • You can now toggle hardsuit helmets from the strip menu
    • -
    -

    Ghommie updated:

    -
      -
    • fixed custom speech/tongue stuff.
    • -
    • Lowered shaft miners' paycheck, they have other ways to make cash.
    • -
    • You can't (un)equip garments on/from obscured inventory slots anymore.
    • -
    • The stamina cost multiplier for swinging melee weapons against mobs has been brought back to 1 from 0.8
    • -
    • The stamina cost for throwing mobs now scales with their mob size variable.
    • -
    -

    LetterN updated:

    -
      -
    • Ported some tags from tgui-3.0 to Vending.js
    • -
    • vending icons
    • -
    • r&d icons
    • -
    • chem master icons
    • -
    -

    Onule updated:

    -
      -
    • titanium wall man good
    • -
    -

    Sonic121x updated:

    -
      -
    • Bringback the ChemMaster pill type button.
    • -
    • Fix Technode icon.
    • -
    -

    bunny232 updated:

    -
      -
    • Witchhunter hat no longer obscures mask ears ,eyes, face and mouth
    • -
    -

    timothyteakettle updated:

    -
      -
    • bloodpacks initialise correctly now
    • -
    GoonStation 13 Development Team From c37636aceabaa45f1d75a500a6443f4a3feb5981 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 5 Sep 2020 01:28:58 +0000 Subject: [PATCH 14/29] Automatic changelog compile [ci skip] --- html/changelog.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 1036b91f11..e6f6fca0d2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1275,17 +1275,6 @@
    • cooking oil is now far less lethal, requiring a higher volume of the reagent to deal more damage
    - -

    04 July 2020

    -

    Sonic121x updated:

    -
      -
    • crushed Soldry sodacan
    • -
    • digitigrade version of chief medical officer's turtleneck and captain's female formal outfit.
    • -
    -

    silicons updated:

    -
      -
    • blood_DNA["color"] is now a single variable instead of a list
    • -
    GoonStation 13 Development Team From a7bac201b3168bcf7c73fa687c153ffd18f151d7 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 6 Sep 2020 00:51:58 +0000 Subject: [PATCH 15/29] Automatic changelog compile [ci skip] --- html/changelog.html | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index e6f6fca0d2..7ac733d996 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1244,37 +1244,6 @@
  • Fixed the "Move it to the threshold" button; it now does what it says.
  • Reworded some text to be clearer.
  • - -

    05 July 2020

    -

    Ghommie updated:

    -
      -
    • You can now actually gain wiring experience from using cable coils.
    • -
    • Opening the View Skill Panel shouldn't trigger messages about insufficient admin priviledges anymore.
    • -
    -

    Yakumo Chen, kappa-sama updated:

    -
      -
    • Removes improvised handguns
    • -
    • removed handsaws, improvised gun barrels (you can use atmos pipes again)
    • -
    • Guncrafting is less time and resource intensive
    • -
    • Item names in guncrafting are user-friendly.
    • -
    -

    kappa-sama updated:

    -
      -
    • cloth string to replace durathread string
    • -
    • durathread string
    • -
    • All bows and arrows have had crafting times significantly reduced, coming out at up to 6 times faster crafting speeds. Improvised bows no longer require durathread; instead, they use cloth materials.
    • -
    -

    silicons updated:

    -
      -
    • active blocking now has a toggle keybind
    • -
    • auto bunker override verb has been added
    • -
    • shields take 2.5 stam instead of 3.5 stam per second to maintain block
    • -
    • Cybernetic implant shields will auto-extend and be used to block if the user has no item to block with
    • -
    -

    timothyteakettle updated:

    -
      -
    • cooking oil is now far less lethal, requiring a higher volume of the reagent to deal more damage
    • -
    GoonStation 13 Development Team From 1f254e8e303c11d5037d81bd6aca446c6cd03f06 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 8 Sep 2020 00:50:23 +0000 Subject: [PATCH 16/29] Automatic changelog compile [ci skip] --- html/changelog.html | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 7ac733d996..d903c60b7d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1228,22 +1228,6 @@
  • Icons for chili cheese fries, margarine, BLT sandwich
  • (Unused) icons for raw meatballs, and lard
  • - -

    07 July 2020

    -

    KasparoVy updated:

    -
      -
    • Fixes misaligned south-facing silver legwraps sprite.
    • -
    -

    Owai-Seek updated:

    -
      -
    • Bee Balm is now visible.
    • -
    -

    Weblure updated:

    -
      -
    • Fixed the slowdown formula for small character sprites; you guys don't use custom sprite sizes so just ignore these changes.
    • -
    • Fixed the "Move it to the threshold" button; it now does what it says.
    • -
    • Reworded some text to be clearer.
    • -
    GoonStation 13 Development Team From 5deabc13a588a36af1090c3a4d92cc26a9d2863c Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 9 Sep 2020 00:50:29 +0000 Subject: [PATCH 17/29] Automatic changelog compile [ci skip] --- html/changelog.html | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d903c60b7d..88e4eb0226 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1205,29 +1205,6 @@
  • bluespace tray added, allowing twice as many items as the regular tray, printable at the service lathe, researched through science
  • bluespace jar added, a kind of pet carrier that allows human sized mobs inside, and smashes when thrown, researched and printed through science
  • - -

    08 July 2020

    -

    DeltaFire15 updated:

    -
      -
    • The kill-once objective now works properly.
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • CogStation now has an apothecary
    • -
    • Removes an outdated note on sleepers
    • -
    • Readjusts CogStation's chemistry lab
    • -
    • Slight area designation adjustments for Robotics
    • -
    • The arrivals plaque should be readable now
    • -
    -

    Owai-Seek updated:

    -
      -
    • Margarine, Chili Cheese Fries.
    • -
    • Egg Wraps are now categorized under egg foods.
    • -
    • Tuna Sandwich crafting/sprite is now visible.
    • -
    • Icons for chicken, cooked chicken, steak, grilled carp, corndogs
    • -
    • Icons for chili cheese fries, margarine, BLT sandwich
    • -
    • (Unused) icons for raw meatballs, and lard
    • -
    GoonStation 13 Development Team From 977dbcead623b0003ee23f17ade97b70e066f3d5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 10 Sep 2020 00:47:18 +0000 Subject: [PATCH 18/29] Automatic changelog compile [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 88e4eb0226..9b7a3d497e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1198,13 +1198,6 @@
    • Actually adds the juice reagent to make laugh peas donuts.
    - -

    09 July 2020

    -

    timothyteakettle updated:

    -
      -
    • bluespace tray added, allowing twice as many items as the regular tray, printable at the service lathe, researched through science
    • -
    • bluespace jar added, a kind of pet carrier that allows human sized mobs inside, and smashes when thrown, researched and printed through science
    • -
    GoonStation 13 Development Team From 798c676e8ff15bf4fe184582ec9921e600186285 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 11 Sep 2020 00:47:46 +0000 Subject: [PATCH 19/29] Automatic changelog compile [ci skip] --- html/changelog.html | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 9b7a3d497e..38c63a118e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1178,26 +1178,6 @@
    • Gas mixtures now live entirely in a DLL.
    - -

    10 July 2020

    -

    Chiirno updated:

    -
      -
    • Gave jellypeople a unique brain object /obj/item/organ/brain/jelly
    • -
    • added an icon for jellypeople brains.
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Adds a pool to PubbyStation
    • -
    • Slight adjustments to the surrounding area as to fit said pool
    • -
    -

    Sneakyrat6 updated:

    -
      -
    • Fixes hair falling out of hoodies.
    • -
    -

    TheObserver-sys updated:

    -
      -
    • Actually adds the juice reagent to make laugh peas donuts.
    • -
    GoonStation 13 Development Team From 5c24ba69fb3cbd515ae18acc5e596c7c4dec3b16 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 12 Sep 2020 00:50:07 +0000 Subject: [PATCH 20/29] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 38c63a118e..bbe2cfb6f5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1172,12 +1172,6 @@
    • a singular stray pixel
    - -

    11 July 2020

    -

    Putnam3145 updated:

    -
      -
    • Gas mixtures now live entirely in a DLL.
    • -
    GoonStation 13 Development Team From 4742c1a54a7e1fd2f172e588f919dc724c175b8f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 13 Sep 2020 00:52:19 +0000 Subject: [PATCH 21/29] Automatic changelog compile [ci skip] --- html/changelog.html | 51 --------------------------------------------- 1 file changed, 51 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index bbe2cfb6f5..ee5363aa1a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1121,57 +1121,6 @@
  • Trashbags can now hold most shoes, and organs.
  • You can no longer nest nuke disks or hold brains in the trash.
  • - -

    12 July 2020

    -

    DeltaFire15 updated:

    -
      -
    • Sentinels compromise now heals augmented bodyparts.
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Adds turnstiles to CogStation's security wing
    • -
    • Readds robotics to the Corpse Disposal Network
    • -
    • Readds chemistry's ability to send items directly to the experimentation lab
    • -
    • Visual renovation and slight adjustments to CogStation's robotics lab
    • -
    • Slight visual adjustments elsewhere (the library)
    • -
    • CogStation's mail and disposal pipes are once again complete
    • -
    • CogStation's robotics lab now has spawners, lights, and other room essentials
    • -
    -

    HeroWithYay updated:

    -
      -
    • Added Telecrystal Dust
    • -
    • Telecrystals can be sold at cargo
    • -
    -

    LetterN updated:

    -
      -
    • Added d[thing] emojis
    • -
    • bye xss
    • -
    -

    MrJWhit updated:

    -
      -
    • Removes northern tunnel to the monastery on Pubby
    • -
    -

    Yakumo Chen updated:

    -
      -
    • Adds a wedding crate to cargo full of wedding attire.
    • -
    -

    kappa-sama updated:

    -
      -
    • wisdom cow is half as common and is wise enough to lag the server 66% less
    • -
    -

    silicons updated:

    -
      -
    • policy configuration added, plus support hooks for assisting enforcement of clone memory disorder. logging: added logging of revival by defib, cloning, strangereagent, and revival surgery
    • -
    • You can now "audibly emote" by having ! at the start of a sentence.
    • -
    -

    timothyteakettle updated:

    -
      -
    • due to recent biological advancements, you can now make eye contact with people.
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • a singular stray pixel
    • -
    GoonStation 13 Development Team From 4d45746bf0714d9a2002aeee8ccf7b9ceb90430a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 14 Sep 2020 00:51:30 +0000 Subject: [PATCH 22/29] Automatic changelog compile [ci skip] --- html/changelog.html | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index ee5363aa1a..d73a3237f2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1110,17 +1110,6 @@
    • ports a money bag exploit
    - -

    13 July 2020

    -

    Linzolle updated:

    -
      -
    • you can no longer vore and digest people regardless of vore preferences
    • -
    -

    Owai-Seek updated:

    -
      -
    • Trashbags can now hold most shoes, and organs.
    • -
    • You can no longer nest nuke disks or hold brains in the trash.
    • -
    GoonStation 13 Development Team From e6e1655ee2431fd74c7a9b4aa8f76aad3e5644d4 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 15 Sep 2020 00:50:43 +0000 Subject: [PATCH 23/29] Automatic changelog compile [ci skip] --- html/changelog.html | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d73a3237f2..de8fe574d7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1098,18 +1098,6 @@
    • Paramedic jumpsuit
    - -

    14 July 2020

    -

    silicons updated:

    -
      -
    • chemical reactions now are sorted by priority first and temperature second.
    • -
    • sec and medical records have been added to character setup.
    • -
    • circuit reagent heaters are now sanitized for temperature from 2.7 to 1000.
    • -
    -

    timothyteakettle updated:

    -
      -
    • ports a money bag exploit
    • -
    GoonStation 13 Development Team From 8b2af73a79d439542647cd5922b6ff8c9b0b7b02 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 16 Sep 2020 00:51:09 +0000 Subject: [PATCH 24/29] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index de8fe574d7..b1a10867b5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1092,12 +1092,6 @@
  • small error with pet carrier logic fixed and also making sure simple mobs are catered for properly inside bluespace jars
  • fixes coin related issue
  • - -

    15 July 2020

    -

    Sonic121x updated:

    -
      -
    • Paramedic jumpsuit
    • -
    GoonStation 13 Development Team From 0d8374a328ae7efac2f33a682e93364dca8c2cfc Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 16 Sep 2020 05:09:21 +0100 Subject: [PATCH 25/29] organic rendering --- .../mob/dead/new_player/sprite_accessories/alienpeople.dm | 2 +- code/modules/mob/dead/new_player/sprite_accessories/ears.dm | 4 ++-- code/modules/mob/dead/new_player/sprite_accessories/horns.dm | 2 +- code/modules/mob/dead/new_player/sprite_accessories/snouts.dm | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm index d1f7f15ac9..4faef230df 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/alienpeople.dm @@ -51,7 +51,7 @@ /datum/sprite_accessory/xeno_head/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return (!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC) + return (!H.dna.features["xenohead"] || H.dna.features["xenohead"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/xeno_head/standard name = "Standard" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm index 7515ce560a..1d9138465f 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -5,7 +5,7 @@ /datum/sprite_accessory/ears/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return (!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC) + return (!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/ears/none name = "None" @@ -187,7 +187,7 @@ /datum/sprite_accessory/ears/mam_ears/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return (!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC) + return (!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/ears/mam_ears/none name = "None" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm index aff342c7a6..accbc4ee36 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm @@ -5,7 +5,7 @@ /datum/sprite_accessory/horns/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return (!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC) + return (!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/horns/none name = "None" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm index 99d2c67cc9..0cd7d301db 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -5,7 +5,7 @@ /datum/sprite_accessory/snouts/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC) + return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/snout/guilmon name = "Guilmon" @@ -163,7 +163,7 @@ /datum/sprite_accessory/snouts/mam_snouts/is_not_visible(var/mob/living/carbon/human/H, var/tauric) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) - return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC) + return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || (HD.status == BODYPART_ROBOTIC && !HD.render_like_organic)) /datum/sprite_accessory/snouts/mam_snouts/none name = "None" From 14e217082fbd17c7d4991de7f9bf04f229dc9442 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 20:51:53 +0100 Subject: [PATCH 26/29] compile --- code/modules/surgery/organs/augments_arms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 5ff339691b..e3c32ad009 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -330,7 +330,7 @@ /obj/item/apc_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!istype(target, /obj/machinery/power/apc) || !ishuman(user) || !proximity_flag) return ..() - user.changeNext_move(CLICK_CD_MELEE) + user.DelayNextAction(CLICK_CD_MELEE) var/obj/machinery/power/apc/A = target var/mob/living/carbon/human/H = user var/obj/item/organ/stomach/ipc/cell = locate(/obj/item/organ/stomach/ipc) in H.internal_organs From 7b4c7d936ac8426aa529c9bdd9d898448f6b4721 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:09:24 +0100 Subject: [PATCH 27/29] fuckfuckfuck --- html/changelog.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index a4003a9528..ba57bbfac2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -49,6 +49,7 @@ -->
    +

    01 October 2020

    BlueWildrose updated:

      @@ -500,15 +501,13 @@

    shellspeed1 updated:

      -
    • new explosion echoes
    • -
    • explosion echo range
    • -
    • 5 new explosion related sounds
    • +
    • Adds slow mode for iv drips
    - -

    28 August 2020

    timothyteakettle updated:

    • an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors
    • +
    • customization features appear in alphabetical order where necessary
    • +
    • bokken do two more stamina damage now
    • you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too)
    From cd81cd4402a13b2821bac5a3a8e581aaabbbdfff Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:19:40 +0100 Subject: [PATCH 28/29] why --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1bce2b7736..96fda36370 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -409,7 +409,7 @@ var/informed = FALSE if(isrobotic(src)) apply_status_effect(/datum/status_effect/no_combat_mode/robotic_emp, severity / 20) - severity *= 0.5 + severity *= 0.5 for(var/obj/item/bodypart/L in src.bodyparts) if(L.status == BODYPART_ROBOTIC) if(!informed) From 710ab0ffa67f35e90a769f9db2f86b25d65100bc Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 1 Oct 2020 22:06:03 +0100 Subject: [PATCH 29/29] Update eyes.dm --- code/modules/surgery/organs/eyes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 3da24951d7..efceefc131 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -427,7 +427,7 @@ return to_chat(owner, "Alert: Perception visuals damaged!") owner.flash_act(visual = 1) - if(severity == EMP_HEAVY) + if(severity >= 70) owner.adjustOrganLoss(ORGAN_SLOT_EYES, 20) #undef BLURRY_VISION_ONE