diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 29a22cd91e2..028c0ad3a14 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -104,6 +104,13 @@ desc = "A complex, organic knot of jelly and crystalline particles." icon = 'icons/mob/slimes.dmi' icon_state = "green slime extract" +// parent_organ = "chest" Hello I am from the ministry of rubber forehead aliens how are you + +/obj/item/organ/brain/slime/take_damage(var/amount, var/silent = 1) + //Slimes are 150% more vulnerable to brain damage + damage = between(0, src.damage + (1.5*amount), max_damage) //Since they take the damage twice, this is +150% + return ..() + /obj/item/organ/internal/brain/golem name = "Runic mind" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ce6a5ecfb5e..f71ec823882 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1490,6 +1490,8 @@ if(species.default_language) remove_language(species.default_language) + species.handle_pre_change(src) + species = all_species[new_species] if(oldspecies) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a59aa721ef8..22c7ed648ae 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -70,6 +70,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_pain() handle_heartbeat() handle_heartattack() + species.handle_life(src) if(!client) species.handle_npc(src) @@ -457,19 +458,20 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc //Body temperature is too hot. fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode + var/mult = species.hot_env_multiplier if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") + take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") + take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY) if(on_fire) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire") + take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire") fire_alert = max(fire_alert, 2) else - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") + take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) else if(bodytemperature < species.cold_level_1) @@ -479,14 +481,15 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) + var/mult = species.cold_env_multiplier if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") + take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature") fire_alert = max(fire_alert, 1) if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature") + take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature") fire_alert = max(fire_alert, 1) if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature") + take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature") fire_alert = max(fire_alert, 1) // Account for massive pressure differences. Done by Polymorph diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d5171761cae..2aa84f9c95e 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -32,10 +32,12 @@ var/cold_level_1 = 260 // Cold damage level 1 below this point. var/cold_level_2 = 200 // Cold damage level 2 below this point. var/cold_level_3 = 120 // Cold damage level 3 below this point. + var/cold_env_multiplier = 1 // Damage multiplier for being in a cold environment var/heat_level_1 = 360 // Heat damage level 1 above this point. var/heat_level_2 = 400 // Heat damage level 2 above this point. var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature + var/hot_env_multiplier = 1 // Damage multiplier for being in a hot environment var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing) @@ -128,6 +130,7 @@ "r_foot" = list("path" = /obj/item/organ/external/foot/right) ) var/cyborg_type = "Cyborg" + var/list/proc/species_abilities = list() /datum/species/New() //If the species has eyes, they are the default vision organ @@ -294,33 +297,60 @@ switch(breath.temperature) if(-INFINITY to cold_level_3) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") + H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") H.fire_alert = max(H.fire_alert, 1) if(cold_level_3 to cold_level_2) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") + H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") H.fire_alert = max(H.fire_alert, 1) if(cold_level_2 to cold_level_1) - H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") + H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") H.fire_alert = max(H.fire_alert, 1) if(heat_level_1 to heat_level_2) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") + H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) if(heat_level_2 to heat_level_3_breathe) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") + H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) if(heat_level_3_breathe to INFINITY) - H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") + H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) return /datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment. + grant_abilities(C) return +/datum/species/proc/grant_abilities(var/mob/living/carbon/human/H) + for(var/proc/ability in species_abilities) + H.verbs += ability + return + +/datum/species/proc/handle_pre_change(var/mob/living/carbon/human/H) + remove_abilities(H) + return + +/datum/species/proc/remove_abilities(var/mob/living/carbon/human/H) + for (var/proc/ability in species_abilities) + H.verbs -= ability + return + +// Do species-specific reagent handling here +// Return 1 if it should do normal processing too +// Return 0 if it shouldn't deplete and do its normal effect +// Other return values will cause weird badness +/datum/species/proc/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R) + return 1 + +// For special snowflake species effects +// (Slime People changing color based on the reagents they consume) +/datum/species/proc/handle_life(var/mob/living/carbon/human/H) + return 1 + /datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here return @@ -613,10 +643,3 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(!(organ_slot in has_organ)) return null return has_organ[organ_slot] - -// Do species-specific reagent handling here -// Return 1 if it should do normal processing too -// Return 0 if it shouldn't deplete and do its normal effect -// Other return values will cause weird badness -/datum/species/proc/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R) - return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 08858f2f253..18d2727214f 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -367,6 +367,12 @@ path = /mob/living/carbon/human/slime unarmed_type = /datum/unarmed_attack/punch + // More sensitive to the cold + cold_level_1 = 280 + cold_level_2 = 240 + cold_level_3 = 200 + cold_env_multiplier = 3 + flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN clothing_flags = HAS_SOCKS bodyflags = HAS_SKIN_COLOR | NO_EYES @@ -381,8 +387,158 @@ suicide_messages = list( "is melting into a puddle!", - "is turning a dull, brown color and melting into a puddle!", - "is ripping out their own core!") + "is ripping out their own core!", + "is turning a dull, brown color and melting into a puddle!") + + var/list/mob/living/carbon/human/recolor_list = list() + + species_abilities = list( + /mob/living/carbon/human/verb/toggle_recolor_verb, + /mob/living/carbon/human/proc/regrow_limbs + ) + +/datum/species/slime/handle_life(var/mob/living/carbon/human/H) +//This is allegedly for code "style". Like a plaid sweater? +#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1 +#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds +#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower. + // Slowly shifting to the color of the reagents + if((H in recolor_list) && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER) + var/blood_amount = H.vessel.total_volume + var/r_color = mix_color_from_reagents(H.reagents.reagent_list) + var/new_body_color = BlendRGB(r_color, rgb(H.r_skin, H.g_skin, H.b_skin), (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume))) + var/list/new_color_list = ReadRGB(new_body_color) + H.r_skin = new_color_list[1] + H.g_skin = new_color_list[2] + H.b_skin = new_color_list[3] + if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller + for(var/organname in H.organs_by_name) + var/obj/item/organ/external/E = H.organs_by_name[organname] + if(istype(E) && E.dna.species == "Slime People") + E.sync_colour_to_human(H) + H.update_hair(0) + H.update_body() + return ..() + +#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER +#undef SLIMEPERSON_ICON_UPDATE_PERIOD +#undef SLIMEPERSON_BLOOD_SCALING_FACTOR + +/mob/living/carbon/human/proc/toggle_recolor(var/silent = 0) + var/datum/species/slime/S = all_species[get_species()] + if(!istype(S)) + if(!silent) + src << "You're not a slime person!" + return + + if(src in S.recolor_list) + S.recolor_list -= src + if(!silent) + src << "You adjust your internal chemistry to filter out pigments from things you consume." + else + S.recolor_list += src + if(!silent) + src << "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you." + +/mob/living/carbon/human/verb/toggle_recolor_verb() + set category = "IC" + set name = "Toggle Reagent Recoloring" + set desc = "While active, you'll slowly adjust your body's color to that of the reagents inside of you, moderated by how much blood you have." + + toggle_recolor() + + +/mob/living/carbon/human/proc/regrow_limbs() + set category = "IC" + set name = "Regrow Limbs" + set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger" + +#define SLIMEPERSON_HUNGERCOST 125 +#define SLIMEPERSON_MINHUNGER 300 +#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds + + if(stat || paralysis || stunned) + src << "You cannot regenerate missing limbs in your current state." + return + + if(nutrition < SLIMEPERSON_MINHUNGER) + src << "You're too hungry to regenerate a limb!" + return + + var/list/missing_limbs = list() + for(var/l in organs_by_name) + var/obj/item/organ/external/E = organs_by_name[l] + if(!istype(E) || istype(E, /obj/item/organ/external/stump)) + var/list/limblist = species.has_limbs[l] + var/obj/item/organ/external/limb = limblist["path"] + var/parent_organ = initial(limb.parent_organ) + var/obj/item/organ/external/parentLimb = organs_by_name[parent_organ] + if(!istype(parentLimb) || parentLimb.is_stump()) + continue + missing_limbs[initial(limb.name)] = l + + if(!missing_limbs.len) + src << "You're not missing any limbs!" + return + + var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs + var/chosen_limb = missing_limbs[limb_select] + + visible_message("[src] begins to hold still and concentrate on their missing [limb_select]...", "You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)") + if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src)) + if(stat || paralysis || stunned) + src << "You cannot regenerate missing limbs in your current state." + return + + if(nutrition < SLIMEPERSON_MINHUNGER) + src << "You're too hungry to regenerate a limb!" + return + + var/obj/item/organ/external/O = organs_by_name[chosen_limb] + + var/stored_brute = 0 + var/stored_burn = 0 + if(istype(O)) + if(!O.is_stump()) + src << "Your limb has already been replaced in some way!" + return + else + src << "You distribute the damaged tissue around your body, out of the way of your new pseudopod!" + var/obj/item/organ/external/doomedStump = O + stored_brute = doomedStump.brute_dam + stored_burn = doomedStump.burn_dam + qdel(O) + + var/limb_list = species.has_limbs[chosen_limb] + var/obj/item/organ/external/limb_path = limb_list["path"] + // Parent check + var/obj/item/organ/external/potential_parent = organs_by_name[initial(limb_path.parent_organ)] + if(!istype(potential_parent) || potential_parent.is_stump()) + src << "You've lost the organ that you've been growing your new part on!" + return // No rayman for you + // Grah this line will leave a "not used" warning, in spite of the fact that the new() proc WILL do the thing. + // Bothersome. + var/obj/item/organ/external/new_limb = new limb_path(src) + new_limb.open = 0 // This is just so that the compiler won't think that new_limb is unused, because the compiler is horribly stupid. + adjustBruteLoss(stored_brute) + adjustFireLoss(stored_burn) + update_body() + updatehealth() + UpdateDamageIcon() + nutrition -= SLIMEPERSON_HUNGERCOST + visible_message("[src] finishes regrowing their missing [new_limb]!", "You finish regrowing your [limb_select]") + else + src << "You need to hold still in order to regrow a limb!" + return + +#undef SLIMEPERSON_HUNGERCOST +#undef SLIMEPERSON_MINHUNGER +#undef SLIMEPERSON_REGROWTHDELAY + +/datum/species/slime/handle_pre_change(var/mob/living/carbon/human/H) + ..() + if(H in recolor_list) + H.toggle_recolor(silent = 1) /datum/species/grey name = "Grey" @@ -486,8 +642,8 @@ suicide_messages = list( "is losing branches!", - "is pulling themselves apart!", - "pulls out a secret stash of herbicide and takes a hearty swig!") + "pulls out a secret stash of herbicide and takes a hearty swig!", + "is pulling themselves apart!") /datum/species/diona/can_understand(var/mob/other) var/mob/living/simple_animal/diona/D = other @@ -586,15 +742,15 @@ "is powering down!", "is smashing their own monitor!", "is twisting their own neck!", - "is blocking their ventilation port!", "is downloading extra RAM!", - "is frying their own circuits!") + "is frying their own circuits!", + "is blocking their ventilation port!") + + species_abilities = list( + /mob/living/carbon/human/proc/change_monitor + ) /datum/species/machine/handle_death(var/mob/living/carbon/human/H) H.h_style = "" spawn(100) - if(H) H.update_hair() - -/datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H) - ..() - H.verbs += /mob/living/carbon/human/proc/change_monitor + if(H) H.update_hair() \ No newline at end of file diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 5691b074ec5..66ce40bf4cf 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -43,7 +43,7 @@ /datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 0 + return affected && !(affected.status & ORGAN_ROBOT) && !(affected.cannot_break) && affected.open == 2 && affected.stage == 0 /datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index c035f40489a..cc142ae3fd0 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -34,6 +34,10 @@ var/list/wounds = list() var/number_wounds = 0 // cache the number of wounds, which is NOT wounds.len! var/perma_injury = 0 + // 0: Don't fail when at full damage + // 1: Neatly pop off at full damage, stop damage propogation + // 2: Disintegrate at full damage, continue damage propogation + var/fail_at_full_damage = 0 var/obj/item/organ/external/parent @@ -151,15 +155,6 @@ break parent.update_damages() -/obj/item/organ/external/robotize() - ..() - //robot limbs take reduced damage - brute_mod = 0.66 - burn_mod = 0.66 - // Robot parts also lack bones - // This is so surgery isn't kaput, let's see how this does - encased = null - /**************************************************** DAMAGE PROCS ****************************************************/ @@ -174,8 +169,14 @@ brute *= brute_mod burn *= burn_mod + // Threshold needed to have a chance of hurting internal bits with something sharp +#define LIMB_SHARP_THRESH_INT_DMG 5 + // Threshold needed to have a chance of hurting internal bits +#define LIMB_THRESH_INT_DMG 10 + // Probability of taking internal damage from sufficient force, while otherwise healthy +#define LIMB_DMG_PROB 5 // High brute damage or sharp objects may damage internal organs - if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= 5) || brute >= 10) && prob(5)))) + if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= LIMB_SHARP_THRESH_INT_DMG) || brute >= LIMB_THRESH_INT_DMG) && prob(LIMB_DMG_PROB)))) // Damage an internal organ if(internal_organs && internal_organs.len) var/obj/item/organ/internal/I = pick(internal_organs) @@ -222,8 +223,8 @@ burn = max(0, burn - can_inflict) //If there are still hurties to dispense if (burn || brute) - if (status & ORGAN_ROBOT && body_part != UPPER_TORSO && body_part != LOWER_TORSO) - droplimb(1) //Robot limbs just kinda fail at full damage. + if (fail_at_full_damage == 1 && body_part != UPPER_TORSO && body_part != LOWER_TORSO) + droplimb(1) //Clean loss, just drop the limb and be done else //List organs we can pass it to var/list/obj/item/organ/external/possible_points = list() @@ -237,6 +238,13 @@ //And pass the pain around var/obj/item/organ/external/target = pick(possible_points) target.take_damage(brute, burn, sharp, edge, used_weapon, forbidden_limbs + src) + if(fail_at_full_damage == 2 && body_part != UPPER_TORSO && body_part != LOWER_TORSO) + var/losstype + if(burn > brute) + losstype = DROPLIMB_BURN + else + losstype = DROPLIMB_BLUNT + droplimb(0, losstype) // less clean than a robot arm, doesn't buffer damage either // sync the organ's damage with its wounds src.update_damages() @@ -251,6 +259,11 @@ if(owner_old) owner_old.updatehealth() return update_icon() +#undef LIMB_SHARP_THRESH_INT_DMG +#undef LIMB_THRESH_INT_DMG +#undef LIMB_DMG_PROB +#undef LIMB_NO_BONE_DMG_PROB + /obj/item/organ/external/proc/heal_damage(brute, burn, internal = 0, robo_repair = 0) if(status & ORGAN_ROBOT && !robo_repair) return @@ -699,6 +712,9 @@ Note that amputating the affected organ does in fact remove the infection from t throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30) dir = 2 return + else + qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES + return /**************************************************** HELPERS @@ -788,6 +804,17 @@ Note that amputating the affected organ does in fact remove the infection from t status &= ~ORGAN_BROKEN return 1 +// I put these two next to each other to highlight that both exist. This should likely be resolved. +/obj/item/organ/external/robotize() + ..() + //robot limbs take reduced damage + brute_mod = 0.66 + burn_mod = 0.66 + // Robot parts also lack bones + // This is so surgery isn't kaput, let's see how this does + encased = null + fail_at_full_damage = 1 + /obj/item/organ/external/robotize(var/company) ..() diff --git a/code/modules/surgery/organs/organ_stump.dm b/code/modules/surgery/organs/organ_stump.dm index dec31345b00..b310a5862fc 100644 --- a/code/modules/surgery/organs/organ_stump.dm +++ b/code/modules/surgery/organs/organ_stump.dm @@ -1,6 +1,7 @@ /obj/item/organ/external/stump name = "limb stump" icon_name = "" + var/can_intake_reagents = 0 /obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb) if(istype(limb)) @@ -23,4 +24,5 @@ qdel(src) /obj/item/organ/external/stump/is_usable() - return 0 \ No newline at end of file + return 0 +