diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 8c22616db287..6514221720a9 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -210,8 +210,6 @@ #define KITCHEN_COLDROOM_ATMOS "o2=33;n2=124;TEMP=193.15" /// used in the holodeck burn test program #define BURNMIX_ATMOS "o2=2500;plasma=5000;TEMP=370" -/// used in rockplanet -#define ROCKPLANET_DEFAULT_ATMOS "co2=95;n2=3;TEMP=210.15" //ATMOSPHERICS DEPARTMENT GAS TANK TURFS #define ATMOS_TANK_N2O "n2o=6000;TEMP=293.15" #define ATMOS_TANK_CO2 "co2=50000;TEMP=293.15" @@ -226,11 +224,16 @@ //PLANETARY /// what pressure you have to be under to increase the effect of equipment meant for lavaland #define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 90 -#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" #define GAS_GIANT_ATMOS "GAS_GIANT_ATMOS" #define PLASMA_GIANT_ATMOS "PLASMA_GIANT_ATMOS" -#define WASTEPLANET_DEFAULT_ATMOS "WASTEPLANET_ATMOS" +#define DEFAULT_ATMOS_DETECTOR "plasma=70000;TEMP=293.15" #define LAVALAND_DEFAULT_ATMOS "LAVALAND_ATMOS" +#define ICEMOON_DEFAULT_ATMOS "ICEMOON_ATMOS" +#define WASTEPLANET_DEFAULT_ATMOS "WASTEPLANET_ATMOS" +#define ROCKPLANET_DEFAULT_ATMOS "ROCKPLANET_ATMOS" +#define BEACHPLANET_DEFAULT_ATMOS "BEACHPLANET_ATMOS" +#define JUNGLEPLANET_DEFAULT_ATMOS "JUNGLEPLANET_ATMOS" +#define SANDPLANET_DEFAULT_ATMOS "SANDPLANET_ATMOS" //ATMOS MIX IDS diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 1a8cd17d802a..d3cf27ac546e 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -1,12 +1,12 @@ // Pressure limits. -/// This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) -#define HAZARD_HIGH_PRESSURE 550 -/// This determins when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE) -#define WARNING_HIGH_PRESSURE 325 -/// This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE) -#define WARNING_LOW_PRESSURE 50 -/// This is when the black ultra-low pressure icon is displayed. (This one is set as a constant) -#define HAZARD_LOW_PRESSURE 20 +/// This determins at what pressure the ultra-high pressure red icon is displayed. +#define HAZARD_HIGH_PRESSURE 303 +/// This determins when the orange pressure icon is displayed +#define WARNING_HIGH_PRESSURE 202 +/// This is when the gray low pressure icon is displayed. +#define WARNING_LOW_PRESSURE 60 +/// This is when the black ultra-low pressure icon is displayed. +#define HAZARD_LOW_PRESSURE 40 /// This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount. #define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 @@ -14,13 +14,13 @@ /// The natural temperature for a body #define HUMAN_BODYTEMP_NORMAL 310.15 /// This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive. -#define HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR 11 +#define HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR 22 /// Minimum amount of kelvin moved toward 310K per tick. So long as abs(310.15 - bodytemp) is more than 50. #define HUMAN_BODYTEMP_AUTORECOVERY_MINIMUM 12 ///Similar to the HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. -#define HUMAN_BODYTEMP_COLD_DIVISOR 15 +#define HUMAN_BODYTEMP_COLD_DIVISOR 20 /// Similar to the HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. -#define HUMAN_BODYTEMP_HEAT_DIVISOR 15 +#define HUMAN_BODYTEMP_HEAT_DIVISOR 10 /// The maximum number of degrees that your body can cool in 1 tick, due to the environment, when in a cold area. #define HUMAN_BODYTEMP_COOLING_MAX -100 /// The maximum number of degrees that your body can heat up in 1 tick, due to the environment, when in a hot area. @@ -28,11 +28,11 @@ /// The body temperature limit the human body can take before it starts taking damage from heat. /// This also affects how fast the body normalises it's temperature when hot. /// 340k is about 66c, and rather high for a human. -#define HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT (HUMAN_BODYTEMP_NORMAL + 30) +#define HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT (HUMAN_BODYTEMP_NORMAL + 3) /// The body temperature limit the human body can take before it starts taking damage from cold. /// This also affects how fast the body normalises it's temperature when cold. /// 270k is about -3c, that is below freezing and would hurt over time. -#define HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT (HUMAN_BODYTEMP_NORMAL - 40) +#define HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT (HUMAN_BODYTEMP_NORMAL - 8) //VOX DEFINES diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index b5026c71247f..26c6b0f2d865 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -211,7 +211,7 @@ Override makes it so the alert is not replaced until cleared by a clear_alert wi /atom/movable/screen/alert/sweat name = "Sweating" - desc = "You're sweating and the heat is starting to hurt. Get somewhere cooler and take off any insulating clothing like a fire suit." + desc = "You're sweating and the heat is starting to hurt. Stay hydrated, get somewhere cooler, and take off any insulating clothing like a fire suit." icon_state = "sweat" /atom/movable/screen/alert/shiver diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm index 85bbf13c52a9..8a2d37ab2471 100644 --- a/code/datums/atmosphere/planetary.dm +++ b/code/datums/atmosphere/planetary.dm @@ -13,8 +13,6 @@ ) restricted_gases = list( GAS_BZ=10, - GAS_PLASMA=0.1, - GAS_H2O=0.1, ) restricted_chance = 50 @@ -26,12 +24,65 @@ // even worse, occasionally there would be a perma-TRITFIRE, if oxygen // concentration was high enough. this caused a bunch of lag and added nothing to the game whatsoever // thus, the temperatures were reduced to 70-90 C - minimum_temp = T20C + 50 - maximum_temp = T20C + 70 + minimum_temp = T20C + 20 + maximum_temp = T20C + 40 /datum/atmosphere/icemoon id = ICEMOON_DEFAULT_ATMOS + base_gases = list( + GAS_O2=5, + GAS_N2=10, + ) + normal_gases = list( + GAS_O2=10, + GAS_N2=10, + GAS_CO2=10, + ) + restricted_gases = list( + GAS_CO2=0.1, + ) + restricted_chance = 50 + + minimum_pressure = HAZARD_LOW_PRESSURE + 10 + maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 + + + minimum_temp = 200 //fucking cold to + maximum_temp = 240 //still cold + + +//wasteplanet + +/datum/atmosphere/wasteplanet + id = WASTEPLANET_DEFAULT_ATMOS + + + base_gases = list( + GAS_O2=7, + GAS_N2=10, + ) + normal_gases = list( + GAS_O2=7, + GAS_O2=3, + GAS_N2=5, + GAS_N2=2 + ) + restricted_gases = list( + GAS_O2=1, + ) + restricted_chance = 0 + + minimum_pressure = ONE_ATMOSPHERE - 30 + maximum_pressure = ONE_ATMOSPHERE + 100 + + minimum_temp = T20C - 10 + maximum_temp = T20C + 20 + +//sandplanet +/datum/atmosphere/whitesands + id = SANDPLANET_DEFAULT_ATMOS + base_gases = list( GAS_O2=5, GAS_N2=10, @@ -43,16 +94,89 @@ ) restricted_gases = list( GAS_PLASMA=0.1, - GAS_H2O=0.1, ) restricted_chance = 50 minimum_pressure = HAZARD_LOW_PRESSURE + 10 maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 - minimum_temp = 180 - maximum_temp = 180 + minimum_temp = 233 + maximum_temp = 263 //No longer always 180 + +//Jungleplanet + +/datum/atmosphere/jungleplanet + id = JUNGLEPLANET_DEFAULT_ATMOS + base_gases = list( + GAS_O2=15, + GAS_N2=60, + GAS_CO2=1, + ) + normal_gases = list( + GAS_O2=1, + GAS_N2=4, + ) + restricted_gases = list( + GAS_CO2=0.1, + ) + restricted_chance = 0 + + minimum_pressure = 101.3 + maximum_pressure = 135.7 //Nonsense values + + minimum_temp = T20C + 10 + maximum_temp = T20C + 20 + +//welcome to the beach + +/datum/atmosphere/beach + id = BEACHPLANET_DEFAULT_ATMOS + + base_gases = list( + GAS_O2=10, + GAS_N2=40, + ) + normal_gases = list( + GAS_O2=1, + GAS_N2=4, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + ) + restricted_chance = 0 + + minimum_pressure = 101.3 + maximum_pressure = 135.7 + + minimum_temp = T20C - 10 + maximum_temp = T20C + 10 + +//rockplanets have lots of CO2 and are moderately cold. +/datum/atmosphere/rockplanet + + id = ROCKPLANET_DEFAULT_ATMOS + + base_gases = list( + GAS_CO2=5, + GAS_N2=1, + ) + normal_gases = list( + GAS_CO2=3, + GAS_N2=1, + ) + restricted_gases = list( + GAS_PLASMA=0.1, + ) + restricted_chance = 0 + + minimum_pressure = 101.3 + maximum_pressure = 135.7 + + minimum_temp = T0C - 20 + maximum_temp = T0C + +// gas giants /datum/atmosphere/gas_giant id = GAS_GIANT_ATMOS @@ -92,28 +216,3 @@ GAS_PLASMA=0.1, ) restricted_chance = 1 - -/datum/atmosphere/wasteplanet - id = WASTEPLANET_DEFAULT_ATMOS - - - base_gases = list( - GAS_O2=7, - GAS_N2=10, - ) - normal_gases = list( - GAS_O2=7, - GAS_O2=3, - GAS_N2=5, - GAS_N2=2 - ) - restricted_gases = list( - GAS_H2O=1, - ) - restricted_chance = 10 - - minimum_pressure = ONE_ATMOSPHERE - 30 - maximum_pressure = ONE_ATMOSPHERE + 100 - - minimum_temp = T20C + 1 - maximum_temp = T20C + 80 diff --git a/code/datums/mapgen/Whitesandsatmos.dm b/code/datums/mapgen/Whitesandsatmos.dm index 87d4ef33b881..231a9c9eec14 100644 --- a/code/datums/mapgen/Whitesandsatmos.dm +++ b/code/datums/mapgen/Whitesandsatmos.dm @@ -1,28 +1,3 @@ #define WHITESANDS_WALL_ENV "rock" #define WHITESANDS_SAND_ENV "sand" #define WHITESANDS_DRIED_ENV "dried_up" -#define WHITESANDS_ATMOS "ws_atmos" - -/datum/atmosphere/whitesands - id = WHITESANDS_ATMOS - - base_gases = list( - GAS_O2=5, - GAS_N2=10, - ) - normal_gases = list( - GAS_O2=10, - GAS_N2=10, - GAS_CO2=10, - ) - restricted_gases = list( - GAS_PLASMA=0.1, - GAS_H2O=0.1, - ) - restricted_chance = 50 - - minimum_pressure = HAZARD_LOW_PRESSURE + 10 - maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1 - - minimum_temp = 180 - maximum_temp = 180 diff --git a/code/datums/weather/weather_types/hailstorm.dm b/code/datums/weather/weather_types/hailstorm.dm index 127a92f03567..ef0cd70b2dba 100644 --- a/code/datums/weather/weather_types/hailstorm.dm +++ b/code/datums/weather/weather_types/hailstorm.dm @@ -32,5 +32,5 @@ /// Think of some good solution of how weather should affect monsters and how they should be resistant to things like this if(isanimal(living_mob)) return - living_mob.adjust_bodytemperature(-rand(3,6)) + living_mob.adjust_bodytemperature(-rand(1,2)) living_mob.adjustBruteLoss(rand(2,4)) diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm index ba74a39ddb47..db11f26e753b 100644 --- a/code/datums/weather/weather_types/snow_storm.dm +++ b/code/datums/weather/weather_types/snow_storm.dm @@ -29,5 +29,5 @@ sound_weak_inside = /datum/looping_sound/weak_inside_ashstorm /datum/weather/snow_storm/weather_act(mob/living/living_mob) - living_mob.adjust_bodytemperature(-rand(5,15)) + living_mob.adjust_bodytemperature(-rand(2,4)) diff --git a/code/datums/weather/weather_types/snowfall.dm b/code/datums/weather/weather_types/snowfall.dm index 5600547705b2..d3eab8b1099a 100644 --- a/code/datums/weather/weather_types/snowfall.dm +++ b/code/datums/weather/weather_types/snowfall.dm @@ -43,4 +43,4 @@ thunder_chance = 2 /datum/weather/snowfall/heavy/weather_act(mob/living/living_mob) - living_mob.adjust_bodytemperature(-rand(2,4)) + living_mob.adjust_bodytemperature(-rand(1,2)) diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index 72807e778f56..40edb4a52d6d 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -64,3 +64,16 @@ fadein = 0.7 SECONDS position = generator(GEN_VECTOR, list(-3, 5, 0), list(3, 6.5, 0), NORMAL_RAND) velocity = generator(GEN_VECTOR, list(-0.1, 0.4, 0), list(0.1, 0.5, 0), NORMAL_RAND) + +/particles/fog + icon = 'icons/effects/particles/smoke.dmi' + icon_state = list("chill_1" = 2, "chill_2" = 2, "chill_3" = 1) + +/particles/fog/breath + count = 1 + spawning = 1 + lifespan = 1 SECONDS + fade = 0.5 SECONDS + grow = 0.05 + spin = 2 + color = "#fcffffff" diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 16cf7af6ce81..b7c6285d7962 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -134,11 +134,11 @@ if(current_temperature == SHOWER_FREEZING) if(iscarbon(L)) - C.adjust_bodytemperature(-80, 80) + C.adjust_bodytemperature(-5, 280) to_chat(L, "[src] is freezing!") else if(current_temperature == SHOWER_BOILING) if(iscarbon(L)) - C.adjust_bodytemperature(35, 0, 500) + C.adjust_bodytemperature(5, 0, 350) L.adjustFireLoss(5) to_chat(L, "[src] is searing!") diff --git a/code/game/objects/structures/traps.dm b/code/game/objects/structures/traps.dm index 4c6c3173cded..9649812f40f8 100644 --- a/code/game/objects/structures/traps.dm +++ b/code/game/objects/structures/traps.dm @@ -116,7 +116,7 @@ /obj/structure/trap/chill/trap_effect(mob/living/L) to_chat(L, "You're frozen solid!") L.Paralyze(20) - L.adjust_bodytemperature(-300) + L.adjust_bodytemperature(-20) L.apply_status_effect(/datum/status_effect/freon) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index a8c64aea67f6..1d6020490840 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -677,7 +677,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -687,7 +687,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -697,7 +697,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -707,7 +707,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -717,7 +717,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -727,7 +727,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -743,7 +743,7 @@ mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 3, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/silver = 10, /obj/item/stack/ore/plasma = 15, /obj/item/stack/ore/iron = 45, /obj/item/stack/ore/titanium = 11, /turf/closed/mineral/gibtonite/whitesands = 4, /turf/open/floor/plating/asteroid/whitesands = 2, /obj/item/stack/ore/bluespace_crystal = 4) - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -754,7 +754,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -764,7 +764,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE @@ -774,7 +774,7 @@ environment_type = WHITESANDS_WALL_ENV turf_type = /turf/open/floor/plating/asteroid/whitesands baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS defer_change = TRUE has_borders = TRUE diff --git a/code/game/turfs/open/acid.dm b/code/game/turfs/open/acid.dm index 86260871c522..c9f5472fa4fb 100644 --- a/code/game/turfs/open/acid.dm +++ b/code/game/turfs/open/acid.dm @@ -145,4 +145,4 @@ /turf/open/water/acid/whitesands planetary_atmos = TRUE - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm index 996d122a4ac9..12fe214deb83 100644 --- a/code/game/turfs/open/floor/plating/asteroid.dm +++ b/code/game/turfs/open/floor/plating/asteroid.dm @@ -27,6 +27,7 @@ /// Whether the turf has been dug or not var/dug + /turf/open/floor/plating/asteroid/Initialize(mapload, inherited_virtual_z) var/proper_name = name . = ..() diff --git a/code/game/turfs/open/floor/plating/beach.dm b/code/game/turfs/open/floor/plating/beach.dm index 485a5cc58a8c..9b4aa8cf156f 100644 --- a/code/game/turfs/open/floor/plating/beach.dm +++ b/code/game/turfs/open/floor/plating/beach.dm @@ -6,7 +6,7 @@ icon_state = "sand" base_icon_state = "sand" baseturfs = /turf/open/floor/plating/asteroid/sand - initial_gas_mix = OPENTURF_DEFAULT_ATMOS + initial_gas_mix = BEACHPLANET_DEFAULT_ATMOS //custom atmos? lots of oxygen, hot? planetary_atmos = TRUE digResult = /obj/item/stack/ore/glass/beach light_color = COLOR_BEACHPLANET_LIGHT diff --git a/code/game/turfs/open/floor/plating/jungle.dm b/code/game/turfs/open/floor/plating/jungle.dm index 79121704001c..19139d782c0e 100644 --- a/code/game/turfs/open/floor/plating/jungle.dm +++ b/code/game/turfs/open/floor/plating/jungle.dm @@ -1,9 +1,12 @@ /turf/open/floor/plating/dirt/jungle slowdown = 0.5 baseturfs = /turf/open/floor/plating/dirt/jungle - initial_gas_mix = OPENTURF_DEFAULT_ATMOS + initial_gas_mix = JUNGLEPLANET_DEFAULT_ATMOS light_color = COLOR_JUNGLEPLANET_LIGHT +/turf/open/floor/plating/dirt/jungle/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + /turf/open/floor/plating/dirt/jungle/lit baseturfs = /turf/open/floor/plating/dirt/jungle/lit light_range = 2 @@ -45,6 +48,10 @@ smooth_icon = 'icons/turf/floors/junglegrass.dmi' baseturfs = /turf/open/floor/plating/grass/jungle light_color = COLOR_JUNGLEPLANET_LIGHT + initial_gas_mix = JUNGLEPLANET_DEFAULT_ATMOS + +/turf/open/floor/plating/grass/jungle/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return /turf/open/floor/plating/grass/jungle/lit baseturfs = /turf/open/floor/plating/dirt/jungle/lit diff --git a/code/game/turfs/open/floor/plating/planet.dm b/code/game/turfs/open/floor/plating/planet.dm index f360ac611267..5609547928c6 100644 --- a/code/game/turfs/open/floor/plating/planet.dm +++ b/code/game/turfs/open/floor/plating/planet.dm @@ -16,6 +16,7 @@ /turf/open/floor/plating/dirt/dark icon_state = "greenerdirt" baseturfs = /turf/open/floor/plating/dirt/dark + initial_gas_mix = JUNGLEPLANET_DEFAULT_ATMOS /turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return diff --git a/code/game/turfs/open/floor/plating/whitesands.dm b/code/game/turfs/open/floor/plating/whitesands.dm index 2607d6f174c0..40094890c53c 100644 --- a/code/game/turfs/open/floor/plating/whitesands.dm +++ b/code/game/turfs/open/floor/plating/whitesands.dm @@ -8,7 +8,7 @@ icon_plating = "sand" planetary_atmos = TRUE base_icon_state = WHITESANDS_SAND_ENV - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS digResult = /obj/item/stack/ore/glass/whitesands light_color = COLOR_SANDPLANET_LIGHT @@ -36,7 +36,7 @@ ///basalt /turf/open/floor/plating/asteroid/basalt/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS planetary_atmos = TRUE baseturfs = /turf/open/floor/plating/asteroid/whitesands/dried icon_state = "whitesands_basalt0" @@ -58,7 +58,7 @@ base_icon_state = "grass" baseturfs = /turf/open/floor/plating/asteroid/whitesands turf_type = /turf/open/floor/plating/asteroid/whitesands/grass - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS planetary_atmos = TRUE smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_FLOOR_GRASS) @@ -90,10 +90,10 @@ /turf/open/floor/plating/asteroid/snow/lit/whitesands light_color = COLOR_SANDPLANET_LIGHT baseturfs = /turf/open/floor/plating/asteroid/whitesands/lit - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS /turf/open/floor/concrete/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS light_color = COLOR_SANDPLANET_LIGHT /turf/open/floor/concrete/whitesands/lit @@ -101,7 +101,7 @@ light_power = 0.6 /turf/open/floor/concrete/reinforced/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS light_color = COLOR_SANDPLANET_LIGHT /turf/open/floor/concrete/reinforced/whitesands/lit @@ -109,7 +109,7 @@ light_power = 0.6 /turf/open/floor/concrete/pavement/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS light_color = COLOR_SANDPLANET_LIGHT /turf/open/floor/concrete/pavement/whitesands/lit @@ -117,7 +117,7 @@ light_power = 0.6 /turf/open/floor/concrete/slab_1/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS light_color = COLOR_SANDPLANET_LIGHT /turf/open/floor/concrete/slab_1/whitesands/lit @@ -125,7 +125,7 @@ light_power = 0.6 /turf/open/floor/plating/whitesands - initial_gas_mix = WHITESANDS_ATMOS + initial_gas_mix = SANDPLANET_DEFAULT_ATMOS light_color = COLOR_SANDPLANET_LIGHT /turf/open/floor/plating/whitesands/lit diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index f94db41d4713..5a78c24dc1fe 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -70,6 +70,7 @@ light_range = 2 light_power = 0.6 light_color = COLOR_VERY_LIGHT_GRAY + initial_gas_mix = JUNGLEPLANET_DEFAULT_ATMOS /turf/open/water/jungle/Initialize(mapload) . = ..() diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index b50c6dc1ea8b..fc6af55b3b41 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -282,7 +282,7 @@ if(target && cooldown < world.time) if(I.get_temperature()) to_chat(target, "You suddenly feel very hot!") - target.adjust_bodytemperature(50) + target.adjust_bodytemperature(10) GiveHint(target) else if(is_pointed(I)) to_chat(target, "You feel a stabbing pain in [parse_zone(user.zone_selected)]!") diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index c159e19da9ec..c205746b16f3 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -66,7 +66,7 @@ L.adjustFireLoss(2) if(L) L.adjust_fire_stacks(20) //dipping into a stream of plasma would probably make you more flammable than usual - L.adjust_bodytemperature(-rand(50,65)) //its cold, man + L.adjust_bodytemperature(-rand(10,20)) //its cold, man if(ishuman(L))//are they a carbon? var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index bbb1379bcc74..bb5049415652 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -98,7 +98,7 @@ if(held_mob.is_holding(src)) if(istype(held_mob) && held_mob.gloves) return - held_mob.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT) + held_mob.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT) if(prob(10)) to_chat(held_mob, "Your hand holding [src] burns!") else diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3e02a1c1e386..cb812d45b34b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -120,6 +120,7 @@ if(istype(L, /obj/item/organ/lungs)) var/obj/item/organ/lungs/lun = L lun.check_breath(breath,src) + lun.handle_breath_temperature(breath,src) /// Environment handlers for species /mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f8807a2fa392..aba7fc9ff611 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -149,9 +149,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) /// Minimum amount of kelvin moved toward normal body temperature per tick. var/bodytemp_autorecovery_min = HUMAN_BODYTEMP_AUTORECOVERY_MINIMUM /// The maximum temperature the species is comfortable at. Going above this does not apply any effects, but warns players that the temperture is hot - var/max_temp_comfortable = (HUMAN_BODYTEMP_NORMAL + 7) + var/max_temp_comfortable = (HUMAN_BODYTEMP_NORMAL) //20 c will always be below human bodytemp, this just makes it so when it can sustain that its higher /// The minimum temperature the species is comfortable at. Going below this does not apply any effects, but warns players that the temperture is chilly - var/min_temp_comfortable = (HUMAN_BODYTEMP_NORMAL - 5) + var/min_temp_comfortable = (HUMAN_BODYTEMP_NORMAL - 1) /// This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. var/bodytemp_autorecovery_divisor = HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR ///Similar to the autorecovery_divsor, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to lose bodytemp faster. @@ -497,6 +497,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) fly.Grant(C) C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, multiplicative_slowdown=speedmod) + C.bodytemperature = bodytemp_normal SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) @@ -1883,44 +1884,31 @@ GLOBAL_LIST_EMPTY(roundstart_races) /// Traits for resitance to heat or cold are handled here. /datum/species/proc/handle_body_temperature(mob/living/carbon/human/H) var/body_temp = H.bodytemperature - var/total_change = bodytemp_natural_stabilization + bodytemp_environment_change //tempature is no longer comfy, throw alert if(body_temp > max_temp_comfortable && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") if(body_temp > bodytemp_heat_damage_limit) var/burn_damage = calculate_burn_damage(H) - if(burn_damage < 2) + if(burn_damage > 2) H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 3) else H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2) else - if(body_temp < (bodytemp_heat_damage_limit - 10)) - // you are cooling down and exiting the danger zone - if(total_change < 0) - H.throw_alert("tempfeel", /atom/movable/screen/alert/warm) - else - H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2) - else if(total_change > 1) - H.throw_alert("tempfeel", /atom/movable/screen/alert/warm) + if(body_temp < (bodytemp_heat_damage_limit - 3)) + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 1) else - H.clear_alert("tempfeel") + H.throw_alert("tempfeel", /atom/movable/screen/alert/warm) else if (body_temp < min_temp_comfortable && !HAS_TRAIT(H, TRAIT_RESISTCOLD)) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") - if(body_temp < 200) + if(body_temp < bodytemp_cold_damage_limit -7) H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 3) else if(body_temp < bodytemp_cold_damage_limit) H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2) - else if(body_temp < (bodytemp_cold_damage_limit + 10)) - // you are warming up and exiting the danger zone - if(total_change > 0) - H.throw_alert("tempfeel", /atom/movable/screen/alert/chilly) - else - H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2) - else if(total_change < -1) - H.throw_alert("tempfeel", /atom/movable/screen/alert/chilly) + else if(body_temp < (bodytemp_cold_damage_limit + 5)) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 1) else - H.clear_alert("tempfeel") + H.throw_alert("tempfeel", /atom/movable/screen/alert/chilly) else H.clear_alert("tempfeel") @@ -1939,21 +1927,28 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(burn_damage) if(H.mob_biotypes & MOB_ROBOTIC) //robors have a alternative cooling fan graphic switch(burn_damage) - if(0 to 2) + if(0 to 1) H.throw_alert("temp", /atom/movable/screen/alert/fans, 1) - if(2 to 4) + if(2 to 3) H.throw_alert("temp", /atom/movable/screen/alert/fans, 2) else H.throw_alert("temp", /atom/movable/screen/alert/fans, 3) else switch(burn_damage) - if(0 to 2) + if(0 to 1) H.throw_alert("temp", /atom/movable/screen/alert/sweat, 1) - if(2 to 4) + if(2 to 3) H.throw_alert("temp", /atom/movable/screen/alert/sweat, 2) else H.throw_alert("temp", /atom/movable/screen/alert/sweat, 3) + //Stay hydrated. + if(!(H.mob_biotypes & MOB_ROBOTIC) && H.reagents.has_reagent(/datum/reagent/water) && H.stat != DEAD) + burn_damage -= clamp(H.reagents.get_reagent_amount(/datum/reagent/water) /10, 0, 2) + // if youre dead, no need to sweat? + if(H.stat != DEAD) + burn_damage -= (max(burn_damage - 2.5, 0)) + // Apply species and physiology modifiers to heat damage burn_damage = burn_damage * heatmod * H.physiology.heat_mod @@ -1974,17 +1969,25 @@ GLOBAL_LIST_EMPTY(roundstart_races) // Display alerts based on the amount of cold damage being taken // Apply more damage based on how cold you are - if(body_temp < 120) + if(body_temp < bodytemp_cold_damage_limit - 15) H.throw_alert("temp", /atom/movable/screen/alert/shiver, 3) - H.apply_damage(COLD_DAMAGE_LEVEL_3 * coldmod * H.physiology.cold_mod, BURN) + if(H.stat != DEAD) // probably can store them in cold storage like this + H.apply_damage(COLD_DAMAGE_LEVEL_3 * coldmod * H.physiology.cold_mod, BURN) + H.emote("shiver") - else if(body_temp < 200) + else if(body_temp < bodytemp_cold_damage_limit - 7) H.throw_alert("temp", /atom/movable/screen/alert/shiver, 2) - H.apply_damage(COLD_DAMAGE_LEVEL_2 * coldmod * H.physiology.cold_mod, BURN) + if(H.stat != DEAD) // when you think about it, being cold wouldnt do skin damaage if there nothing even alive? + H.apply_damage(COLD_DAMAGE_LEVEL_2 * coldmod * H.physiology.cold_mod, BURN) + if(prob(30)) + H.emote("shiver") else H.throw_alert("temp", /atom/movable/screen/alert/shiver, 1) - H.apply_damage(COLD_DAMAGE_LEVEL_1 * coldmod * H.physiology.cold_mod, BURN) + if(H.stat != DEAD) // to prevent a bug where bodies at room tempertue actually take damage from their body being cold + H.apply_damage(COLD_DAMAGE_LEVEL_1 * coldmod * H.physiology.cold_mod, BURN) + if(prob(10)) + H.emote("shiver") // We are not to hot or cold, remove status and moods else @@ -2000,7 +2003,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) firemodifier = min(firemodifier, 0) // this can go below 5 at log 2.5 - burn_damage = max(log(2 - firemodifier, (current_human.bodytemperature - current_human.get_body_temp_normal(apply_change=FALSE))) - 5,0) + burn_damage = max(log(2 - firemodifier, (current_human.bodytemperature - current_human.get_body_temp_normal(apply_change=FALSE))) - 2,0) return burn_damage /// Handle the air pressure of the environment @@ -2057,25 +2060,21 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/body_temp = H.bodytemperature // Get current body temperature var/body_temperature_difference = H.get_body_temp_normal() - body_temp var/natural_change = 0 - - // We are very cold, increate body temperature - if(body_temp <= bodytemp_cold_damage_limit) - natural_change = max((body_temperature_difference * H.metabolism_efficiency / bodytemp_autorecovery_divisor), \ - bodytemp_autorecovery_min) + var/recovery_temp = bodytemp_autorecovery_min + //if in crit, we struggle to regulate temperture. this will make extreme tempertures more dangerous to injured + if (H.stat > SOFT_CRIT) + recovery_temp = recovery_temp / 2 // we are cold, reduce the minimum increment and do not jump over the difference - else if(body_temp > bodytemp_cold_damage_limit && body_temp < H.get_body_temp_normal()) + if(body_temp > bodytemp_cold_damage_limit && body_temp < H.get_body_temp_normal()) natural_change = max(body_temperature_difference * H.metabolism_efficiency / bodytemp_autorecovery_divisor, \ - min(body_temperature_difference, bodytemp_autorecovery_min / 4)) + min(body_temperature_difference, recovery_temp / 4)) // We are hot, reduce the minimum increment and do not jump below the difference else if(body_temp > H.get_body_temp_normal() && body_temp <= bodytemp_heat_damage_limit) natural_change = min(body_temperature_difference * H.metabolism_efficiency / bodytemp_autorecovery_divisor, \ - max(body_temperature_difference, -(bodytemp_autorecovery_min / 4))) + max(body_temperature_difference, -(recovery_temp / 4))) - // We are very hot, reduce the body temperature - else if(body_temp >= bodytemp_heat_damage_limit) - natural_change = min((body_temperature_difference / bodytemp_autorecovery_divisor), -bodytemp_autorecovery_min) var/thermal_protection = H.get_insulation_protection(body_temp + natural_change) if(areatemp > body_temp) // It is hot here @@ -2163,9 +2162,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection) return if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection) - H.adjust_bodytemperature(11) + H.adjust_bodytemperature(3) else - H.adjust_bodytemperature(bodytemp_heating_rate_max + (H.fire_stacks * 12)) + H.adjust_bodytemperature(bodytemp_heating_rate_max + (H.fire_stacks * 5)) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) /datum/species/proc/CanIgniteMob(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 2eeba6ea96ea..2a0b2709bde8 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -26,11 +26,12 @@ toxic_food = NONE // Body temperature for ethereals is much higher then humans as they like hotter environments bodytemp_normal = (HUMAN_BODYTEMP_NORMAL + 50) - bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD // about 150C + bodytemp_heat_damage_limit = (HUMAN_BODYTEMP_NORMAL + 65) // Cold temperatures hurt faster as it is harder to move with out the heat energy - bodytemp_cold_damage_limit = (T20C - 10) // about 10c + bodytemp_cold_damage_limit = (HUMAN_BODYTEMP_NORMAL - 20) - max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 100 + min_temp_comfortable = (HUMAN_BODYTEMP_NORMAL - 10) + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 55 hair_color = "fixedmutcolor" hair_alpha = 140 diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 76bedbb8828f..bb3e1cb167d8 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -21,11 +21,16 @@ // brutemod = 1.5 // burnmod = 1.5 speedmod = -0.10 - bodytemp_normal = HUMAN_BODYTEMP_NORMAL + 30 - bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 - bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT + 30 - max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 40 - min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 3 + + bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 35 + bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT + 3 + + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 15 + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 1 + + bodytemp_autorecovery_divisor = HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR - 4 + + mutanttongue = /obj/item/organ/tongue/kepori species_language_holder = /datum/language_holder/kepori var/datum/action/innate/keptackle/keptackle diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 5ee7441e2f54..f3e460aa356f 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -45,12 +45,11 @@ robotic_eyes = /obj/item/organ/eyes/robotic/lizard - // Lizards are coldblooded and can stand a greater temperature range than humans - bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 20 // This puts lizards 10 above lavaland max heat for ash lizards. + // Sarathi are coldblooded and can stand a greater temperature range than humans + bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 10 - - max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 25 - min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 3 + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 20 + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL loreblurb = "The Sarathi are a cold-blooded reptilian species originating from the planet Kalixcis, where they evolved alongside the Elzuosa. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names." ass_image = 'icons/ass/asslizard.png' diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 10375f424e82..e612b3bbe2fc 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -30,6 +30,9 @@ species_l_leg = /obj/item/bodypart/leg/left/moth species_r_leg = /obj/item/bodypart/leg/right/moth + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 2 + bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 2 + /datum/species/moth/regenerate_organs(mob/living/carbon/C, datum/species/old_species,replace_current=TRUE, list/excluded_zones, robotic = FALSE) . = ..() if(ishuman(C)) diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index bdd95ef18b3e..a462c00d7708 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -26,9 +26,12 @@ bodytemp_cold_divisor = VOX_BODYTEMP_COLD_DIVISOR bodytemp_autorecovery_min = VOX_BODYTEMP_AUTORECOVERY_MIN - max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 20 + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 1 min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 20 + bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 10 + bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 20 + bodytype = BODYTYPE_VOX custom_overlay_icon = 'icons/mob/species/vox/vox_overlays.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index d3040bc7717c..5e953c74119a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -44,10 +44,10 @@ damage_type = BURN nodamage = TRUE flag = "energy" - temperature = -50 // Cools you down! per hit! + temperature = -5 // Cools you down! per hit! /obj/projectile/temp/basilisk/super - temperature = -100 + temperature = -20 damage = 5 nodamage = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm index 769f6ce3d5fa..6495b967fb88 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm @@ -242,7 +242,7 @@ /datum/reagent/brimdust/on_mob_life(mob/living/carbon/carbon, delta_time, times_fired) . = ..() carbon.adjustFireLoss((ispodperson(carbon) ? -1 : 1) * delta_time) - carbon.adjust_bodytemperature(55 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, carbon.get_body_temp_normal()) + carbon.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, carbon.get_body_temp_normal()) /datum/reagent/brimdust/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm index 786cdaa80966..17f189080d75 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice_demon.dm @@ -45,7 +45,7 @@ name = "ice blast" damage = 5 nodamage = FALSE - temperature = -75 + temperature = -2 /mob/living/simple_animal/hostile/asteroid/ice_demon/OpenFire() // Sentient ice demons teleporting has been linked to server crashes diff --git a/code/modules/projectiles/projectile/energy/misc.dm b/code/modules/projectiles/projectile/energy/misc.dm index c9e113455387..e7b689cce2d5 100644 --- a/code/modules/projectiles/projectile/energy/misc.dm +++ b/code/modules/projectiles/projectile/energy/misc.dm @@ -33,7 +33,7 @@ icon_state = "blastwave" color = "#00ff00" hitsound = 'sound/weapons/sear.ogg' - var/heatpwr = 350 + var/heatpwr = 6 /obj/projectile/energy/plasmabolt/on_hit(atom/target, blocked = FALSE) . = ..() @@ -56,4 +56,4 @@ icon_state = "blastwave" color = "#00ff00" hitsound = 'sound/weapons/sear.ogg' - heatpwr = 700 + heatpwr = 11 diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm index 53a4bb62b9e1..65b7ad1d4dd7 100644 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ b/code/modules/projectiles/projectile/special/temperature.dm @@ -5,7 +5,7 @@ damage_type = BURN nodamage = FALSE flag = "energy" - var/temperature = -50 // reduce the body temperature by 50 points + var/temperature = -5 // reduce the body temperature by 5c /obj/projectile/temp/on_hit(atom/target, blocked = 0) . = ..() @@ -29,12 +29,12 @@ /obj/projectile/temp/hot name = "heat beam" - temperature = 100 // Raise the body temp by 100 points + temperature = 10 // Raise the body temp by 10c /obj/projectile/temp/cryo name = "cryo beam" range = 3 - temperature = -240 // Single slow shot reduces temp greatly + temperature = -20 // Single slow shot reduces temp greatly /obj/projectile/temp/cryo/on_range() var/turf/T = get_turf(src) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index ad27b15207a8..b4319025e484 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -218,7 +218,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/vimukti/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-40) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) if(!HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE)) M.Jitter(5) return ..() @@ -655,7 +655,7 @@ All effects don't start immediately, but rather get worse over time; the rate is shot_glass_icon_state = "toxinsspecialglass" /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(mob/living/M) - M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/beepsky_smash @@ -846,7 +846,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Vodka, cream, and ice. No actual antifreeze included, of course." /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal() + 20) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/barefoot @@ -959,7 +959,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Vodka with capsaicin for the extra feeling of intense warmth. Difficult to take large swallows." /datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 , M.dna.species.bodytemp_heat_damage_limit) //310.15 is the normal bodytemp. + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 , M.dna.species.bodytemp_heat_damage_limit) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/red_mead @@ -996,7 +996,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Iced beer, served in a chilled glass. It's cold enough to leave a trail in the air." /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp. + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/grog @@ -1625,7 +1625,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M) M.apply_status_effect(/datum/status_effect/throat_soothed) - M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) ..() /datum/reagent/consumable/ethanol/alexander @@ -1809,7 +1809,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) return ..() /datum/reagent/consumable/ethanol/branca_menta/on_mob_metabolize(mob/living/M) @@ -2121,7 +2121,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/mauna_loa/on_mob_life(mob/living/carbon/M) // Heats the user up while the reagent is in the body. Occasionally makes you burst into flames. - M.adjust_bodytemperature(25 * TEMPERATURE_DAMAGE_COEFFICIENT) + M.adjust_bodytemperature(2 * TEMPERATURE_DAMAGE_COEFFICIENT) if (prob(5)) M.adjust_fire_stacks(1) M.IgniteMob() diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index bb6bafc9e74c..281b15d2e6b5 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -257,7 +257,7 @@ M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40) //310.15 is the normal bodytemp. - M.adjust_bodytemperature(25 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(3 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) if(holder.has_reagent(/datum/reagent/consumable/frostoil)) holder.remove_reagent(/datum/reagent/consumable/frostoil, 5) ..() @@ -280,7 +280,7 @@ M.AdjustSleeping(-20) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1, 0) - M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(2 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) ..() . = 1 @@ -330,7 +330,7 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() . = 1 @@ -354,7 +354,7 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-60) - M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) M.adjustToxLoss(1*REM, 0) ..() . = TRUE @@ -375,7 +375,7 @@ M.AdjustSleeping(-40) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1, 0) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() . = 1 @@ -390,7 +390,7 @@ /datum/reagent/consumable/space_cola/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-5) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/crosstalk @@ -416,7 +416,7 @@ M.dizziness +=1 M.drowsyness = 0 M.AdjustSleeping(-40) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/comet_trail @@ -431,7 +431,7 @@ /datum/reagent/consumable/comet_trail/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-20) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) M.Jitter(5) ..() . = 1 @@ -447,7 +447,7 @@ /datum/reagent/consumable/tadrixx/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-6) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/space_up @@ -461,7 +461,7 @@ /datum/reagent/consumable/space_up/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/molten @@ -476,9 +476,9 @@ /datum/reagent/consumable/molten/on_mob_life(mob/living/carbon/M) M.heal_bodypart_damage(1,1,0) if(M.bodytemperature > M.get_body_temp_normal(apply_change=FALSE)) - M.adjust_bodytemperature(-10 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal(apply_change=FALSE)) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal(apply_change=FALSE)) else if(M.bodytemperature < (M.get_body_temp_normal(apply_change=FALSE) + 1)) - M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal(apply_change=FALSE)) + M.adjust_bodytemperature(2 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal(apply_change=FALSE)) ..() /datum/reagent/consumable/molten/plasma_fizz @@ -509,7 +509,7 @@ /datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() @@ -530,7 +530,7 @@ You feel as though a great secret of the universe has been made known to you...") /datum/reagent/consumable/pacfuel/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) if(prob(10)) M?.mind.adjust_experience(/datum/skill/gaming, 5) ..() @@ -545,7 +545,7 @@ glass_desc = "It's hard to imagine all those fruits getting condensed into a cup like this." /datum/reagent/consumable/shoal_punch/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/sodawater name = "Soda Water" @@ -559,7 +559,7 @@ /datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/tonic @@ -575,7 +575,7 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() . = 1 @@ -594,7 +594,7 @@ M.dizziness +=1 M.drowsyness = 0 M.AdjustSleeping(-40) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/xeno_energy/on_mob_metabolize(mob/living/L) @@ -617,7 +617,7 @@ glass_desc = "Generally, you're supposed to put something else in there, too..." /datum/reagent/consumable/ice/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/soy_latte @@ -639,7 +639,7 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0) - M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) ..() @@ -664,7 +664,7 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0) - M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) ..() @@ -788,7 +788,7 @@ glass_desc = "It's grape soda!" /datum/reagent/consumable/grape_soda/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/milk/chocolate_milk @@ -817,7 +817,7 @@ glass_desc = "A favorite winter drink from the Solar Confederation. Good for warming yourself up." /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) ..() /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/carbon/M) @@ -884,7 +884,7 @@ glass_desc = "A classic vanilla flavored soft drink." /datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-1 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) ..() /datum/reagent/consumable/sol_dry diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 82bda376fc3c..8b06736dbce2 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -223,24 +223,24 @@ if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) holder.remove_reagent(/datum/reagent/consumable/capsaicin, 5) if(isslime(M)) - cooling = -rand(5,20) + cooling = -rand(1,2) if(15 to 25) cooling = -20 * TEMPERATURE_DAMAGE_COEFFICIENT if(isslime(M)) - cooling = -rand(10,20) + cooling = -rand(2,4) if(25 to 35) cooling = -30 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(1)) M.emote("shiver") if(isslime(M)) - cooling = -rand(15,20) + cooling = -rand(4,8) if(35 to INFINITY) cooling = -40 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(5)) M.emote("shiver") if(isslime(M)) - cooling = -rand(20,25) - M.adjust_bodytemperature(cooling, 50) + cooling = -rand(8,10) + M.adjust_bodytemperature(cooling, 10) ..() /datum/reagent/consumable/frostoil/expose_turf(turf/T, reac_volume) @@ -428,7 +428,7 @@ taste_description = "your imprisonment" /datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) ..() /datum/reagent/consumable/hell_ramen @@ -439,7 +439,7 @@ taste_description = "wet and cheap noodles on fire" /datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT) + M.adjust_bodytemperature(1 * TEMPERATURE_DAMAGE_COEFFICIENT) ..() /datum/reagent/consumable/flour @@ -776,7 +776,7 @@ ..() /datum/reagent/consumable/pyre_elementum/on_mob_life(mob/living/carbon/M) - M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) // Doesn't kill you like capsaicin + M.adjust_bodytemperature(2 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) // Doesn't kill you like capsaicin if(!ingested) // Unless you didn't eat it M.adjustFireLoss(0.25*REM, 0) ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 1e37b9b1ee85..5715e7a0bd71 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -22,9 +22,9 @@ /datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > M.get_body_temp_normal(apply_change=FALSE)) - M.adjust_bodytemperature(-40 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal(apply_change=FALSE)) + M.adjust_bodytemperature(-4 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal(apply_change=FALSE)) else if(M.bodytemperature < (M.get_body_temp_normal(apply_change=FALSE) + 1)) - M.adjust_bodytemperature(40 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal(apply_change=FALSE)) + M.adjust_bodytemperature(4 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal(apply_change=FALSE)) ..() /datum/reagent/medicine/adminordrazine //An OP chemical for admins @@ -1857,7 +1857,7 @@ /datum/reagent/medicine/rhigoxane/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(-2*REM, 0.) - M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, M.dna.species.bodytemp_normal) + M.adjust_bodytemperature(-0.2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.dna.species.bodytemp_normal) ..() . = 1 @@ -1865,7 +1865,7 @@ if(method != VAPOR) return - M.adjust_bodytemperature(-reac_volume * TEMPERATURE_DAMAGE_COEFFICIENT * 20, 200) + M.adjust_bodytemperature(-reac_volume * TEMPERATURE_DAMAGE_COEFFICIENT * 0.5, 200) M.adjust_fire_stacks(-reac_volume / 2) if(reac_volume >= metabolization_rate) M.ExtinguishMob() @@ -1874,7 +1874,7 @@ /datum/reagent/medicine/rhigoxane/overdose_process(mob/living/carbon/M) M.adjustFireLoss(3*REM, 0.) - M.adjust_bodytemperature(-35 * TEMPERATURE_DAMAGE_COEFFICIENT, 50) + M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, 50) ..() diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 14ded3b571f9..792831c37fd8 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -230,7 +230,7 @@ /datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube if(M.reagents.has_reagent(/datum/reagent/oxygen)) M.reagents.remove_reagent(/datum/reagent/oxygen, 0.5) - M.adjust_bodytemperature(-15) + M.adjust_bodytemperature(-5) ..() /datum/reagent/cryostylane/expose_turf(turf/T, reac_volume) @@ -251,7 +251,7 @@ /datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M) if(M.reagents.has_reagent(/datum/reagent/oxygen)) M.reagents.remove_reagent(/datum/reagent/oxygen, 0.5) - M.adjust_bodytemperature(15) + M.adjust_bodytemperature(5) ..() /datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective. diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 6045779f6030..e1553a6dffcf 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -132,7 +132,7 @@ if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2*REM) M.adjustPlasma(20) - M.adjust_bodytemperature(-7 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) + M.adjust_bodytemperature(-2 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) return ..() /datum/reagent/toxin/lexorin diff --git a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm index 434082d2f0ae..380c049adcb0 100644 --- a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm @@ -62,7 +62,7 @@ paralyze_dur = reac_volume else paralyze_dur = 50 + ((reac_volume - 50) / 4) - M.adjust_bodytemperature((-20*reac_volume) * TEMPERATURE_DAMAGE_COEFFICIENT, 50) + M.adjust_bodytemperature((-1*reac_volume) * TEMPERATURE_DAMAGE_COEFFICIENT, 50) M.Paralyze(paralyze_dur) walk(M, 0) //stops them mid pathing even if they're stunimmunee M.apply_status_effect(/datum/status_effect/ice_block_talisman, paralyze_dur) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index e522449b7101..fabc1bb3ab26 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -53,18 +53,22 @@ var/gas_stimulation_min = 0.002 //Nitryl, Stimulum and Freon var/cold_message = "your face freezing and an icicle forming" - var/cold_level_1_threshold = 260 - var/cold_level_2_threshold = 200 - var/cold_level_3_threshold = 120 + var/chilly_message = "chilly air" + var/chlly_threshold = T20C-7 + var/cold_level_1_threshold = 240 + var/cold_level_2_threshold = 220 + var/cold_level_3_threshold = 200 var/cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead. var/cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2 var/cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3 var/cold_damage_type = BURN var/hot_message = "your face burning and a searing heat" - var/heat_level_1_threshold = 360 - var/heat_level_2_threshold = 400 - var/heat_level_3_threshold = 1000 + var/warm_message = "warm air" + var/warm_threshold = T20C+10 + var/heat_level_1_threshold = 316 + var/heat_level_2_threshold = 323 + var/heat_level_3_threshold = 343 var/heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1 var/heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2 var/heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3 @@ -85,7 +89,7 @@ damage_type = safe_damage_type ) -/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) +/obj/item/organ/lungs/proc/check_breath (datum/gas_mixture/breath, mob/living/carbon/human/H) //TODO: add lung damage = less oxygen gains var/breathModifier = (5-(5*(damage/maxHealth)/2)) //range 2.5 - 5 if(H.status_flags & GODMODE) @@ -212,6 +216,8 @@ H.reagents.add_reagent(R, breath.get_moles(gas) * 2) // 2 represents molarity of O2, we don't have citadel molarity mole_adjustments[gas] = (gas in mole_adjustments) ? mole_adjustments[gas] - breath.get_moles(gas) : -breath.get_moles(gas) + handle_smell(breath, H) + for(var/gas in mole_adjustments) breath.adjust_moles(gas, mole_adjustments[gas]) @@ -298,6 +304,8 @@ if (gas_breathed > gas_stimulation_min) H.reagents.add_reagent(/datum/reagent/hydrogen_chloride) + breath.adjust_moles(GAS_HYDROGEN_CHLORIDE, -gas_breathed) + // Carbon Monoxide var/carbon_monoxide_pp = PP(breath,GAS_CO) if (carbon_monoxide_pp > gas_stimulation_min) @@ -327,6 +335,7 @@ if(monoxide_reagent) monoxide_reagent.accumulation = min(monoxide_reagent.accumulation, 150) monoxide_reagent.metabolization_rate = 10 //purges 10 per tick + breath.adjust_moles(GAS_CO, -gas_breathed) // Sulfur Dioxide var/sulfur_dioxide_pp = PP(breath,GAS_SO2) @@ -344,6 +353,8 @@ if (gas_breathed > gas_stimulation_min) H.reagents.add_reagent(/datum/reagent/sulfur_dioxide,1) + breath.adjust_moles(GAS_SO2, -gas_breathed) + // Ozone var/ozone_pp = PP(breath,GAS_O3) if (prob(ozone_pp)) @@ -358,6 +369,8 @@ if (gas_breathed > gas_stimulation_min) H.reagents.add_reagent(/datum/reagent/ozone,1) + breath.adjust_moles(GAS_O3, -gas_breathed) + // Ammonia var/ammonia_pp = PP(breath,GAS_AMMONIA) if (prob(ammonia_pp)*2) @@ -379,7 +392,7 @@ //ammonia is actually disposed of naturally by humans, but extremely poorly by non mammals, maybe we can make it toxic ONLY to certain species (plural) sometime? H.reagents.add_reagent(/datum/reagent/ammonia,1) - handle_smell(breath, H) + breath.adjust_moles(GAS_AMMONIA, -gas_breathed) ///handles the smell a few gases have /obj/item/organ/lungs/proc/handle_smell(datum/gas_mixture/breath, mob/living/carbon/human/H) @@ -436,35 +449,115 @@ H.failed_last_breath = TRUE -/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures +/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/breather) // called by human/life, handles temperatures + if(!breath) + return var/breath_temperature = breath.return_temperature() - if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE - var/cold_modifier = H.dna.species.coldmod + if(!HAS_TRAIT(breather, TRAIT_RESISTCOLD)) // COLD DAMAGE + var/cold_modifier = breather.dna.species.coldmod + var/breath_effect_prob = 0 + var/part_count = 0 if(breath_temperature < cold_level_3_threshold) - H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type) + breather.apply_damage(cold_level_3_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 100 + part_count = 8 if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) - H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type) + breather.apply_damage(cold_level_2_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 75 + part_count = 5 if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) - H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type) - if(breath_temperature < cold_level_1_threshold) - if(prob(20)) - to_chat(H, "You feel [cold_message] in your [name]!") + breather.apply_damage(cold_level_1_damage * cold_modifier, cold_damage_type, spread_damage = TRUE) + breath_effect_prob = 50 + part_count = 3 + if(breath_temperature > cold_level_1_threshold) + breath_effect_prob = 25 + part_count = 2 - if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE - var/heat_modifier = H.dna.species.heatmod + if(breath_temperature < cold_level_1_threshold) + if(prob(sqrt(breath_effect_prob) * 6)) + to_chat(breather, "You feel [cold_message] in your [name]!") + else if(breath_temperature < chlly_threshold) + if(!breath_effect_prob) + breath_effect_prob = 20 + part_count = 1 + if(prob(sqrt(breath_effect_prob) * 6)) + to_chat(breather, "You feel [chilly_message] in your [name].") + if(breath_temperature < chlly_threshold) + if(breath_effect_prob) + // Breathing into your mask, no particle. We can add fogged up glasses later + if(breather.is_mouth_covered()) + return + // Even though breathing via internals TECHNICALLY exhales into the environment, we'll still block it + if(breather.internal) + return + emit_breath_particle(breather, /particles/fog/breath, part_count) + + if(!HAS_TRAIT(breather, TRAIT_RESISTHEAT)) // HEAT DAMAGE + var/heat_modifier = breather.dna.species.heatmod + var/heat_message_prob = 0 if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) - H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type) + breather.apply_damage(heat_level_1_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 100 if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) - H.apply_damage_type(heat_level_2_damage*heat_modifier, heat_damage_type) + breather.apply_damage(heat_level_2_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 75 if(breath_temperature > heat_level_3_threshold) - H.apply_damage_type(heat_level_3_damage*heat_modifier, heat_damage_type) + breather.apply_damage(heat_level_3_damage * heat_modifier, heat_damage_type, spread_damage = TRUE) + heat_message_prob = 50 if(breath_temperature > heat_level_1_threshold) - if(prob(20)) - to_chat(H, "You feel [hot_message] in your [name]!") + heat_message_prob = 25 + + if(breath_temperature > heat_level_1_threshold) + if(prob(sqrt(heat_message_prob) * 6)) + to_chat(breather, "You feel [hot_message] in your [name]!") + else if(breath_temperature > warm_threshold) + if(!heat_message_prob) + heat_message_prob = 20 + if(prob(sqrt(heat_message_prob) * 6)) + to_chat(breather, "You feel [warm_message] in your [name].") + + // The air you breathe out should match your body temperature - breath.set_temperature(H.bodytemperature) + breath.set_temperature(breather.bodytemperature) + +/// Creates a particle effect off the mouth of the passed mob. +/obj/item/organ/lungs/proc/emit_breath_particle(mob/living/carbon/human/breather, particle_type, part_count) + ASSERT(ispath(particle_type, /particles)) + + var/obj/effect/abstract/particle_holder/holder = new(breather, particle_type) + var/particles/breath_particle = holder.particles + var/breath_dir = breather.dir + + var/list/particle_grav = list(0, 0.1, 0) + var/list/particle_pos = list(0, 10, 0) + if(breath_dir & NORTH) + particle_grav[2] = 0.2 + breath_particle.rotation = pick(-45, 45) + // Layer it behind the mob since we're facing away from the camera + holder.pixel_w -= 4 + holder.pixel_y += 4 + if(breath_dir & WEST) + particle_grav[1] = -0.2 + particle_pos[1] = -5 + breath_particle.rotation = -45 + if(breath_dir & EAST) + particle_grav[1] = 0.2 + particle_pos[1] = 5 + breath_particle.rotation = 45 + if(breath_dir & SOUTH) + particle_grav[2] = 0.2 + breath_particle.rotation = pick(-45, 45) + // Shouldn't be necessary but just for parity + holder.pixel_w += 4 + holder.pixel_y -= 4 + + breath_particle.gravity = particle_grav + breath_particle.position = particle_pos + breath_particle.count = part_count + + QDEL_IN(holder, breath_particle.lifespan) /obj/item/organ/lungs/on_life() . = ..() diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 3ec636e41b5f..4c69dd532a89 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -288,14 +288,14 @@ cooldown = COOLDOWN_DAMAGE for(var/V in listeners) var/mob/living/L = V - L.adjust_bodytemperature(50 * power_multiplier) + L.adjust_bodytemperature(5 * power_multiplier) //COLD else if((findtext(message, cold_words))) cooldown = COOLDOWN_DAMAGE for(var/V in listeners) var/mob/living/L = V - L.adjust_bodytemperature(-50 * power_multiplier) + L.adjust_bodytemperature(-5 * power_multiplier) //REPULSE else if((findtext(message, repulse_words))) diff --git a/icons/effects/particles/smoke.dmi b/icons/effects/particles/smoke.dmi index 4a3239499b96..99123beeb59a 100644 Binary files a/icons/effects/particles/smoke.dmi and b/icons/effects/particles/smoke.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 99de0dbf9441..6e12eadc662b 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ