From 7786a44de509bf68878ecaed88947944df1119ee Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Tue, 2 Feb 2016 21:45:47 -0800 Subject: [PATCH] Makes burning slime limbs leave a burn stump Also prevents the color shift from triggering at low doses, to prevent meta-ing that you've been injected with chemicals via the icon flash whenever the icon is updated. --- .../living/carbon/human/species/station.dm | 35 ++++++++++--------- code/modules/organs/organ_external.dm | 7 +++- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 837d634c7aa..1f574235500 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -402,8 +402,10 @@ "is turning a dull, brown color and melting into a puddle!") /datum/species/slime/handle_life(var/mob/living/carbon/human/H) + var/const/color_shift_trigger = 20 + var/const/icon_update_period = 200 // Slowly shifting to the color of the reagents - if(H.reagents.total_volume > 0.1) + if(H.reagents.total_volume > 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/(blood_amount+(H.reagents.total_volume))) @@ -411,11 +413,10 @@ H.r_skin = new_color_list[1] H.g_skin = new_color_list[2] H.b_skin = new_color_list[3] - if(world.time % 200 > 180) // Once every 20 seconds - update_body is expensive - // The weird time shenanigans are because reagents update only every 2 seconds + if(world.time % icon_update_period > 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(E.dna.species == "Slime People") + if(istype(E) && E.dna.species == "Slime People") E.sync_colour_to_human(H) H.regenerate_icons() // Because update_icon didn't work return ..() @@ -468,21 +469,21 @@ var/obj/item/organ/external/O = organs_by_name[chosen_limb] - if(istype(O) && !O.is_stump()) - src << "Your limb has already been replaced in some way!" - return - var/stored_brute = 0 var/stored_burn = 0 - if(O.is_stump()) - 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 - if(stored_burn) - // I'm both lazy and want to give this ability a drawback. - src << "Moving the burnt tissue aside causes further damage to your membrane!" - qdel(O) + 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 + if(stored_burn) + // I'm both lazy and want to give this ability a drawback. + src << "Moving the burnt tissue aside causes further damage to your membrane!" + qdel(O) var/limb_list = species.has_limbs[chosen_limb] var/limb_path = limb_list["path"] diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 993b4a567f0..445892310dc 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -226,7 +226,12 @@ 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 && body_part != UPPER_TORSO && body_part != LOWER_TORSO) - droplimb() // less clean than a robot arm, doesn't buffer damage either + 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()