diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 158ab7f8056..2d327d74b1d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -458,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) @@ -480,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 26805f99f16..cdcd90d6523 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) @@ -126,6 +128,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 @@ -287,33 +290,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 @@ -614,18 +644,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 - -// 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_pre_change(var/mob/living/carbon/human/H) - return 0 diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index e0d50f9f691..de84359b635 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -367,16 +367,11 @@ path = /mob/living/carbon/human/slime unarmed_type = /datum/unarmed_attack/punch - burn_mod = 1.25 // Slimes don't react well to extreme temperatures - // More sensitive to the cold cold_level_1 = 280 cold_level_2 = 240 cold_level_3 = 200 - - heat_level_1 = 340 - heat_level_2 = 360 - heat_level_3 = 400 + cold_env_multiplier = 3 flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN clothing_flags = HAS_SOCKS @@ -390,20 +385,6 @@ "brain" = /obj/item/organ/brain/slime ) - has_limbs = list( - "chest" = list("path" = /obj/item/organ/external/chest/slime), - "groin" = list("path" = /obj/item/organ/external/groin/slime), - "head" = list("path" = /obj/item/organ/external/head/slime), - "l_arm" = list("path" = /obj/item/organ/external/arm/slime), - "r_arm" = list("path" = /obj/item/organ/external/arm/right/slime), - "l_leg" = list("path" = /obj/item/organ/external/leg/slime), - "r_leg" = list("path" = /obj/item/organ/external/leg/right/slime), - "l_hand" = list("path" = /obj/item/organ/external/hand/slime), - "r_hand" = list("path" = /obj/item/organ/external/hand/right/slime), - "l_foot" = list("path" = /obj/item/organ/external/foot/slime), - "r_foot" = list("path" = /obj/item/organ/external/foot/right/slime) - ) - suicide_messages = list( "is melting into a puddle!", "is ripping out their own core!", @@ -411,6 +392,11 @@ 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) var/const/color_shift_trigger = 0.1 var/const/icon_update_period = 600 // 1 minute @@ -515,9 +501,6 @@ 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] @@ -756,15 +739,11 @@ "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 - -/datum/species/machine/handle_pre_change(var/mob/living/carbon/human/H) - ..() - H.verbs -= /mob/living/carbon/human/proc/change_monitor \ No newline at end of file + if(H) H.update_hair() \ No newline at end of file diff --git a/code/modules/organs/subtypes/slime.dm b/code/modules/organs/subtypes/slime.dm deleted file mode 100644 index ecbece572df..00000000000 --- a/code/modules/organs/subtypes/slime.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/organ/external/head/slime - encased = null - cannot_break = 1 - -/obj/item/organ/external/chest/slime - encased = null - cannot_break = 1 - -/obj/item/organ/external/groin/slime - cannot_break = 1 - -/obj/item/organ/external/arm/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/arm/right/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/leg/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/leg/right/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/foot/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/foot/right/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/hand/slime - cannot_break = 1 - fail_at_full_damage = 2 - -/obj/item/organ/external/hand/right/slime - cannot_break = 1 - fail_at_full_damage = 2 diff --git a/paradise.dme b/paradise.dme index 5442ec1df3e..e31271b9e11 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1575,7 +1575,6 @@ #include "code\modules\organs\subtypes\machine.dm" #include "code\modules\organs\subtypes\misc.dm" #include "code\modules\organs\subtypes\nucleation.dm" -#include "code\modules\organs\subtypes\slime.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\unbreakable.dm" #include "code\modules\organs\subtypes\wryn.dm"