diff --git a/_maps/map_files/mining/Lavaland.dmm b/_maps/map_files/mining/Lavaland.dmm index c38f625319df..d767c11c1ea7 100644 --- a/_maps/map_files/mining/Lavaland.dmm +++ b/_maps/map_files/mining/Lavaland.dmm @@ -1514,7 +1514,7 @@ loot = list(/obj/effect/decal/remains/human); name = "Jim The Door Technician"; wander = 0; - weather_immunities = list("ash") + weather_immunities = 1 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 36362cba857e..b66f798a8194 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -298,10 +298,11 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( #define BULLET_ACT_PENETRATE (1<<4) // Weather immunities // -#define WEATHER_STORM "storm" -#define WEATHER_ACID "acid" -#define WEATHER_ASH "ash" -#define WEATHER_LAVA "lava" -#define WEATHER_RAD "rad" -#define WEATHER_SNOW "snow" -#define WEATHER_ALL "all" +#define WEATHER_LAVA (1<<0) +#define WEATHER_ACID (1<<1) +#define WEATHER_ASH (1<<2) +#define WEATHER_RAD (1<<3) +#define WEATHER_SNOW (1<<4) +#define WEATHER_VOIDSTORM (1<<5) + +#define WEATHER_STORM (WEATHER_ACID | WEATHER_ASH | WEATHER_RAD | WEATHER_SNOW | WEATHER_VOIDSTORM) diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 1e3cfb234364..d5ba73a3cbe3 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(weather) var/datum/weather/W = pickweight(possible_weather) run_weather(W, list(text2num(z))) eligible_zlevels -= z - var/randTime = rand(3000, 6000) + var/randTime = rand(W.cooldown_lower, W.cooldown_higher) addtimer(CALLBACK(src, PROC_REF(make_eligible), z, possible_weather), randTime + initial(W.weather_duration_upper), TIMER_UNIQUE) //Around 5-10 minutes between weathers next_hit_by_zlevel["[z]"] = world.time + randTime + initial(W.telegraph_duration) diff --git a/code/datums/diseases/advance/symptoms/necropolis.dm b/code/datums/diseases/advance/symptoms/necropolis.dm index 0d9eb529ba8d..7d6319b02df0 100644 --- a/code/datums/diseases/advance/symptoms/necropolis.dm +++ b/code/datums/diseases/advance/symptoms/necropolis.dm @@ -111,6 +111,6 @@ if(fireproof) REMOVE_TRAIT(H, TRAIT_RESISTHIGHPRESSURE, DISEASE_TRAIT) REMOVE_TRAIT(H, TRAIT_RESISTHEAT, DISEASE_TRAIT) - H.weather_immunities -= WEATHER_ASH - H.weather_immunities -= WEATHER_LAVA + H.weather_immunities &= ~WEATHER_ASH + H.weather_immunities &= ~WEATHER_LAVA diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm index df3f02b80669..5ad32ffda87e 100644 --- a/code/datums/looping_sounds/weather.dm +++ b/code/datums/looping_sounds/weather.dm @@ -45,3 +45,35 @@ start_length = 130 end_sound = 'sound/weather/ashstorm/inside/weak_end.ogg' volume = 20 + + +/datum/looping_sound/outside_acid_rain + start_sound = 'sound/weather/acidrain/outside/acidrain_outside_start.ogg' + start_length = 12 SECONDS + + mid_sounds = list( + 'sound/weather/acidrain/outside/acidrain_outside_mid1.ogg'=1, + 'sound/weather/acidrain/outside/acidrain_outside_mid2.ogg'=1, + 'sound/weather/acidrain/outside/acidrain_outside_mid3.ogg'=1, + 'sound/weather/acidrain/outside/acidrain_outside_mid4.ogg'=1 + ) + mid_length = 12 SECONDS + + end_sound = 'sound/weather/acidrain/outside/acidrain_outside_end.ogg' + volume = 55 + +/datum/looping_sound/inside_acid_rain + start_sound = 'sound/weather/acidrain/inside/acidrain_inside_start.ogg' + start_length = 12 SECONDS + + mid_sounds = list( + 'sound/weather/acidrain/inside/acidrain_inside_mid1.ogg'=1, + 'sound/weather/acidrain/inside/acidrain_inside_mid2.ogg'=1, + 'sound/weather/acidrain/inside/acidrain_inside_mid3.ogg'=1, + 'sound/weather/acidrain/inside/acidrain_inside_mid4.ogg'=1 + ) + mid_length = 12 SECONDS + + end_sound = 'sound/weather/acidrain/inside/acidrain_inside_end.ogg' + + volume = 35 //the audio files are already just a bit quieter than the outside ones, but it should still be notably quieter diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index c1f0bbbd3fa7..7937f586b67f 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -30,6 +30,11 @@ /// Color to apply to the area while weather is occuring var/weather_color = null + /// In deciseconds, how long until the next weather on this Z level once this starts (lower end) + var/cooldown_lower = 3000 + /// In deciseconds, how long until the next weather on this z level once this starts (higher end) + var/cooldown_higher = 6000 + /// Displayed once the weather is over var/end_message = "The wind relents its assault." /// In deciseconds, how long the "wind-down" graphic will appear before vanishing entirely @@ -197,10 +202,10 @@ if(istype(mob_to_check.loc, /obj/structure/closet)) var/obj/structure/closet/current_locker = mob_to_check.loc if(current_locker.weather_protection) - if((immunity_type in current_locker.weather_protection) || (WEATHER_ALL in current_locker.weather_protection)) + if(current_locker.weather_protection & immunity_type) return - if((immunity_type in mob_to_check.weather_immunities) || (WEATHER_ALL in mob_to_check.weather_immunities)) + if(mob_to_check.weather_immunities & immunity_type) return if(!(get_area(mob_to_check) in impacted_areas)) diff --git a/code/datums/weather/weather_types/acid_rain.dm b/code/datums/weather/weather_types/acid_rain.dm index 3fbf458806ba..cea81cd3f566 100644 --- a/code/datums/weather/weather_types/acid_rain.dm +++ b/code/datums/weather/weather_types/acid_rain.dm @@ -3,19 +3,24 @@ name = "acid rain" desc = "The planet's thunderstorms are by nature acidic, and will incinerate anyone standing beneath them without protection." - telegraph_duration = 400 telegraph_message = span_boldwarning("Thunder rumbles far above. You hear droplets drumming against the canopy. Seek shelter.") - telegraph_sound = 'sound/ambience/acidrain_start.ogg' + telegraph_duration = 30 SECONDS //if you change this i will kill you because the sound file lines up with this + telegraph_sound = 'sound/weather/acidrain/acidrain_telegraph.ogg' weather_message = span_userdanger("Acidic rain pours down around you! Get inside!") weather_overlay = "acid_rain" - weather_duration_lower = 600 - weather_duration_upper = 1500 - weather_sound = 'sound/ambience/acidrain_mid.ogg' + overlay_plane = HIGHEST_EVER_PLANE + 1 //why does this work, it shouldn't work, this is stupid and i hate it, why is this the ONLY thing that works, why won't it just show up normally, it shows up normally on lavaland, but not on jungleland, i don't understand it doesn't make any sense, this is all wrong + + //lasts shorter + weather_duration_lower = 30 SECONDS + weather_duration_upper = 180 SECONDS //inconsistent tropical storms - end_duration = 100 + //happens slightly more often + cooldown_lower = 3 MINUTES + cooldown_higher = 5 MINUTES + + end_duration = 20 SECONDS end_message = span_boldannounce("The downpour gradually slows to a light shower. It should be safe outside now.") - end_sound = 'sound/ambience/acidrain_end.ogg' area_type = /area protect_indoors = TRUE @@ -23,10 +28,70 @@ immunity_type = WEATHER_ACID // temp + probability = 90 + barometer_predictable = TRUE + var/datum/looping_sound/outside_acid_rain/sound_outside = new(list(), FALSE, TRUE) + var/datum/looping_sound/inside_acid_rain/sound_inside = new(list(), FALSE, TRUE) + +/datum/weather/acid_rain/telegraph() + . = ..() + var/list/inside_areas = list() + var/list/outside_areas = list() + var/list/eligible_areas = list() + for (var/z in impacted_z_levels) + eligible_areas += SSmapping.areas_in_z["[z]"] + for(var/i in 1 to eligible_areas.len) + var/area/place = eligible_areas[i] + if(place.outdoors) + outside_areas += place + else + inside_areas += place + CHECK_TICK + + sound_outside.output_atoms = outside_areas + sound_inside.output_atoms = inside_areas + +/datum/weather/acid_rain/start() + . = ..() + sound_outside.start() + sound_inside.start() + +/datum/weather/acid_rain/wind_down() + . = ..() + sound_outside.stop() + sound_inside.stop() + +/datum/weather/acid_rain/proc/is_acid_immune(atom/L) + while (L && !isturf(L)) + if(ismecha(L)) //Mechs are immune + return TRUE + if(isliving(L))// if we're a non immune mob inside an immune mob we have to reconsider if that mob is immune to protect ourselves + var/mob/living/the_mob = L + var/acid_armour = the_mob.getarmor(null, ACID) + if(acid_armour >= 65) //give a bit of wiggle room, this isn't supposed to be that dangerous for someone that's prepared + return TRUE + + if(the_mob.weather_immunities & immunity_type) + return TRUE + if(istype(L, /obj/structure/closet)) + var/obj/structure/closet/the_locker = L + if(the_locker.weather_protection & immunity_type) + return TRUE + L = L.loc //Check parent items immunities (recurses up to the turf) + return FALSE //RIP you /datum/weather/acid_rain/weather_act(mob/living/L) - var/resist = L.getarmor(null, ACID) - if(prob(max(0,100-resist))) - L.acid_act(20,20) + L.adjust_wet_stacks(2) + if(is_acid_immune(L)) + return + if(HAS_TRAIT(L,TRAIT_SULPH_PIT_IMMUNE)) //immunity to the acid doesn't mean immunity to the wet + return + if(ishuman(L)) //inject metabolites + var/mob/living/carbon/human/humie = L + if(humie.reagents.get_reagent_amount(/datum/reagent/toxic_metabolites) <= 25) //don't let them get up to the absolute highest metabolites tier, but they should still need to be worried + humie.reagents.add_reagent(/datum/reagent/toxic_metabolites, 2) + else + L.apply_damage_type(0.5, BURN) + L.apply_damage_type(0.5, TOX) diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index 21ff686509f9..2d3aea64ac19 100644 --- a/code/datums/weather/weather_types/ash_storm.dm +++ b/code/datums/weather/weather_types/ash_storm.dm @@ -86,13 +86,12 @@ return TRUE if(isliving(L))// if we're a non immune mob inside an immune mob we have to reconsider if that mob is immune to protect ourselves var/mob/living/the_mob = L - if((WEATHER_ASH in the_mob.weather_immunities) || (WEATHER_ALL in the_mob.weather_immunities)) + if(the_mob.weather_immunities & immunity_type) return TRUE if(istype(L, /obj/structure/closet)) var/obj/structure/closet/the_locker = L - if(the_locker.weather_protection) - if((WEATHER_ASH in the_locker.weather_protection) || (WEATHER_ALL in the_locker.weather_protection)) - return TRUE + if(the_locker.weather_protection & immunity_type) + return TRUE L = L.loc //Check parent items immunities (recurses up to the turf) return FALSE //RIP you diff --git a/code/datums/weather/weather_types/void_storm.dm b/code/datums/weather/weather_types/void_storm.dm index ef48d16e4453..d744ef25282a 100644 --- a/code/datums/weather/weather_types/void_storm.dm +++ b/code/datums/weather/weather_types/void_storm.dm @@ -17,7 +17,7 @@ protect_indoors = FALSE target_trait = ZTRAIT_VOIDSTORM - immunity_type = TRAIT_VOIDSTORM_IMMUNE + immunity_type = WEATHER_VOIDSTORM barometer_predictable = FALSE diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index e3925b12f5e5..0145954ef3a7 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -503,13 +503,13 @@ . = ..() if(!.) return FALSE - R.weather_immunities += WEATHER_LAVA + R.weather_immunities |= WEATHER_LAVA /obj/item/borg/upgrade/lavaproof/deactivate(mob/living/silicon/robot/R, user = usr) . = ..() if(!.) return FALSE - R.weather_immunities -= WEATHER_LAVA + R.weather_immunities &= ~WEATHER_LAVA /obj/item/borg/upgrade/selfrepair name = "self-repair module" diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 87034db2c998..53aede1d10c9 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(lockers) var/icon_welded = "welded" var/icon_broken = "sparking" /// Protection against weather that being inside of it provides. - var/list/weather_protection = null + var/weather_protection = NONE /// How close being inside of the thing provides complete pressure safety. Must be between 0 and 1! contents_pressure_protection = 0 /// How insulated the thing is, for the purposes of calculating body temperature. Must be between 0 and 1! diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 536d10fe4b5c..b63cf1e0c0e1 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -156,8 +156,8 @@ mob_storage_capacity = 1 contents_pressure_protection = 0.8 contents_thermal_insulation = 0.5 - foldedbag_path = /obj/item/bodybag/environmental/ - weather_protection = list(WEATHER_ACID, WEATHER_ASH, WEATHER_RAD, WEATHER_SNOW, ) // Does not protect against lava or the The Floor Is Lava spell. + foldedbag_path = /obj/item/bodybag/environmental + weather_protection = WEATHER_STORM /obj/structure/closet/body_bag/environmental/nanotrasen name = "elite environmental protection bag" @@ -167,7 +167,7 @@ contents_pressure_protection = 1 contents_thermal_insulation = 1 foldedbag_path = /obj/item/bodybag/environmental/nanotrasen/ - weather_protection = list(WEATHER_ALL) + weather_protection = WEATHER_STORM /// Securable enviro. bags @@ -288,7 +288,7 @@ contents_pressure_protection = 1 contents_thermal_insulation = 1 foldedbag_path = /obj/item/bodybag/environmental/prisoner/syndicate - weather_protection = list(WEATHER_ALL) + weather_protection = WEATHER_STORM breakout_time = 8 MINUTES sinch_time = 4 SECONDS diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 9b42aad57ba6..c4bb5770cabc 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -1,5 +1,5 @@ /obj/structure/flora - resistance_flags = FLAMMABLE + resistance_flags = FLAMMABLE | UNACIDABLE max_integrity = 150 anchored = TRUE diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 5d196481c387..575483517034 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(lavasafeties, typecacheof(list(/obj/structure/lattice/catwalk, return else if(isliving(buckle_check)) var/mob/living/live = buckle_check - if(WEATHER_LAVA in live.weather_immunities) + if(live.weather_immunities & WEATHER_LAVA) return if(!L.on_fire) @@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(lavasafeties, typecacheof(list(/obj/structure/lattice/catwalk, if(S && H && S.clothing_flags & LAVAPROTECT && H.clothing_flags & LAVAPROTECT) return - if(WEATHER_LAVA in L.weather_immunities) + if(L.weather_immunities & WEATHER_LAVA) return L.adjustFireLoss(20 * delta_time) diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 833b32c88d9d..509ab7543090 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -16,7 +16,7 @@ melee_damage_upper = 15 attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' - weather_immunities = list(WEATHER_LAVA) + weather_immunities = ALL movement_type = FLYING combat_mode = TRUE loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 8764939f6413..5c04cc463fc7 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -180,7 +180,7 @@ var/mob/living/L = thing if(L.movement_type & FLYING) return //YOU'RE FLYING OVER IT - if(WEATHER_SNOW in L.weather_immunities) + if(L.weather_immunities & WEATHER_SNOW) return var/buckle_check = L.buckling @@ -193,7 +193,7 @@ else if(isliving(buckle_check)) var/mob/living/live = buckle_check - if(WEATHER_SNOW in live.weather_immunities) + if(live.weather_immunities & WEATHER_SNOW) return L.adjustFireLoss(2) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index eb58c98a9ffd..71bb30fb78de 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -11,7 +11,7 @@ icon_living = "mining_drone" status_flags = CANSTUN|CANKNOCKDOWN|CANPUSH mouse_opacity = MOUSE_OPACITY_ICON - weather_immunities = list(WEATHER_ASH) + weather_immunities = WEATHER_STORM faction = list("neutral") combat_mode = TRUE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 1c3a373d86bd..dc0d4fef6f95 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -45,13 +45,13 @@ else //Maybe uses plasma in the future, although that wouldn't make any sense... leaping = 1 - weather_immunities += WEATHER_LAVA + weather_immunities |= WEATHER_LAVA update_icons() throw_at(A, MAX_ALIEN_LEAP_DIST, 1, src, FALSE, TRUE, callback = CALLBACK(src, PROC_REF(leap_end))) /mob/living/carbon/alien/humanoid/hunter/proc/leap_end() leaping = 0 - weather_immunities -= WEATHER_LAVA + weather_immunities &= ~WEATHER_LAVA update_icons() /mob/living/carbon/alien/humanoid/hunter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index fe1b2e561678..42dfc0897804 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -257,7 +257,7 @@ /datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) . = ..() - C.weather_immunities -= WEATHER_ASH + C.weather_immunities &= ~WEATHER_ASH //Immune to ash storms and lava /datum/species/golem/plastitanium @@ -278,8 +278,8 @@ /datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) . = ..() - C.weather_immunities -= WEATHER_ASH - C.weather_immunities -= WEATHER_LAVA + C.weather_immunities &= ~WEATHER_ASH + C.weather_immunities &= ~WEATHER_LAVA //Fast and regenerates... but can only speak like an abductor /datum/species/golem/alloy @@ -1026,7 +1026,7 @@ /datum/species/golem/snow/on_species_loss(mob/living/carbon/remove_from) . = ..() - remove_from.weather_immunities -= WEATHER_SNOW + remove_from.weather_immunities &= ~WEATHER_SNOW QDEL_NULL(snowball) QDEL_NULL(cryo) return ..() 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 211f467644ee..b12a4f36e86c 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -208,7 +208,7 @@ /datum/species/lizard/ashwalker/on_species_loss(mob/living/carbon/C) . = ..() - C.weather_immunities -= WEATHER_ASH + C.weather_immunities &= ~WEATHER_ASH //Ash walker shaman, worse defensive stats, but better at surgery and have a healing touch ability /datum/species/lizard/ashwalker/shaman @@ -293,7 +293,7 @@ /datum/species/lizard/draconid/on_species_loss(mob/living/carbon/C) . = ..() - C.weather_immunities -= WEATHER_ASH + C.weather_immunities &= ~WEATHER_ASH // yogs end diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index d877b94db9f2..27cba5475c88 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -85,7 +85,7 @@ var/hellbound = 0 //People who've signed infernal contracts are unrevivable. - var/list/weather_immunities = list() + var/weather_immunities = NONE var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index b2e96071a8a6..6618eab4a9b5 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -8,7 +8,7 @@ pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_TINY desc = "A generic pAI mobile hard-light holographics emitter. It seems to be deactivated." - weather_immunities = list(WEATHER_ASH) + weather_immunities = WEATHER_STORM light_on = FALSE light_flags = LIGHT_ATTACHED light_system = MOVABLE_LIGHT diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 7de40e64d655..755d52d29ca4 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -8,7 +8,7 @@ initial_language_holder = /datum/language_holder/synthetic infra_luminosity = 0 bubble_icon = BUBBLE_MACHINE - weather_immunities = list(WEATHER_ASH) + weather_immunities = WEATHER_STORM mob_biotypes = MOB_ROBOTIC deathsound = 'sound/voice/borg_deathsound.ogg' speech_span = SPAN_ROBOT diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index a5588ada87b6..347bed9c3df3 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -58,7 +58,7 @@ icon_living = "snowbear" icon_dead = "snowbear_dead" desc = "It's a polar bear, in space, but not actually in space." - weather_immunities = list(WEATHER_SNOW) + weather_immunities = WEATHER_STORM /mob/living/simple_animal/hostile/bear/russian name = "combat bear" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm index 60322cf929dd..1caed9c258be 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/_jungle_mobs.dm @@ -2,7 +2,7 @@ vision_range = 5 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("jungle") - weather_immunities = list(WEATHER_ACID) + weather_immunities = WEATHER_STORM obj_damage = 30 environment_smash = ENVIRONMENT_SMASH_WALLS minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 92f976a8df38..1efe667fcf48 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -11,7 +11,7 @@ obj_damage = 400 light_range = 3 faction = list("mining", "boss") - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL movement_type = FLYING robust_searching = TRUE ranged_ignores_vision = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index 6c626c2ff93d..c10268e21109 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -17,7 +17,7 @@ Difficulty: Extremely Hard mob_biotypes = MOB_ORGANIC|MOB_HUMANOID light_color = "#E4C7C5" movement_type = GROUND - weather_immunities = list(WEATHER_SNOW) + weather_immunities = WEATHER_STORM speak_emote = list("roars") armour_penetration = 100 melee_damage_lower = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm index 91e5992a41a5..2c87d5d02254 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/stalwart.dm @@ -305,7 +305,7 @@ attack_sound = 'sound/weapons/pierce_slow.ogg' speak_emote = list("buzzes") faction = list("mining") - weather_immunities = list(WEATHER_LAVA,WEATHER_ASH) + weather_immunities = ALL /mob/living/simple_animal/hostile/asteroid/hivelordbrood/staldrone/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index 29ae5b37bd48..548249721272 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -50,7 +50,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa mob_biotypes = MOB_ROBOTIC gps_name = "Hungry Signal" faction = list("mining", "boss", "swarmer") - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL stop_automated_movement = TRUE wander = FALSE layer = BELOW_MOB_LAYER @@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /mob/living/simple_animal/hostile/swarmer/ai wander = 1 faction = list("swarmer", "mining") - weather_immunities = list(WEATHER_ASH) //wouldn't be fun otherwise + weather_immunities = WEATHER_STORM //wouldn't be fun otherwise AIStatus = AI_ON /mob/living/simple_animal/hostile/swarmer/ai/Initialize(mapload) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/drakeling.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/drakeling.dm index bf4aeb30d7d5..b0a0ced2bb99 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/drakeling.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/drakeling.dm @@ -22,7 +22,7 @@ response_disarm = "gently pushes aside" response_harm = "kicks" speak_chance = 5 - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL movement_type = FLYING faction = list("neutral") minbodytemp = 0 //SPACE diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index cda0197d9ab9..c54bb8ea2558 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -10,7 +10,7 @@ speak_emote = list("warbles", "quavers") emote_hear = list("trills.") emote_see = list("sniffs.", "burps.") - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL faction = list("mining", "ashwalker") density = FALSE speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 5665be5a50e2..250b67b2a024 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -276,7 +276,7 @@ aggro_vision_range = 9 speed = 3 faction = list("mining") - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL obj_damage = 30 environment_smash = ENVIRONMENT_SMASH_STRUCTURES // Purple, but bright cause we're gonna need to spot mobs on lavaland diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index 342a7a0853c0..f3bbcd2d4cb5 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -3,7 +3,7 @@ vision_range = 2 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("mining") - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH, WEATHER_SNOW) + weather_immunities = ALL obj_damage = 30 environment_smash = ENVIRONMENT_SMASH_WALLS minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 954aff0ead2a..0892c4b4f064 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -46,7 +46,7 @@ icon_dead = "eskimo_dead" maxHealth = 55 health = 55 - weather_immunities = list(WEATHER_SNOW) + weather_immunities = WEATHER_STORM gold_core_spawnable = NO_SPAWN melee_damage_lower = 17 melee_damage_upper = 20 @@ -65,7 +65,7 @@ icon_dead = "templar_dead" maxHealth = 150 health = 150 - weather_immunities = list(WEATHER_SNOW) + weather_immunities = WEATHER_STORM speed = 2 gold_core_spawnable = NO_SPAWN speak_chance = 1 @@ -86,7 +86,7 @@ speed = 5 maxHealth = 75 health = 75 - weather_immunities = list(WEATHER_SNOW) + weather_immunities = WEATHER_STORM color = rgb(114,228,250) loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)}) diff --git a/sound/ambience/acidrain_end.ogg b/sound/ambience/acidrain_end.ogg deleted file mode 100644 index d02299c6c0df..000000000000 Binary files a/sound/ambience/acidrain_end.ogg and /dev/null differ diff --git a/sound/ambience/acidrain_mid.ogg b/sound/ambience/acidrain_mid.ogg deleted file mode 100644 index 13dd3a59cb88..000000000000 Binary files a/sound/ambience/acidrain_mid.ogg and /dev/null differ diff --git a/sound/ambience/acidrain_start.ogg b/sound/ambience/acidrain_start.ogg deleted file mode 100644 index 27e47372944f..000000000000 Binary files a/sound/ambience/acidrain_start.ogg and /dev/null differ diff --git a/sound/weather/acidrain/acidrain_telegraph.ogg b/sound/weather/acidrain/acidrain_telegraph.ogg new file mode 100644 index 000000000000..800d2dbb1dd5 Binary files /dev/null and b/sound/weather/acidrain/acidrain_telegraph.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_end.ogg b/sound/weather/acidrain/inside/acidrain_inside_end.ogg new file mode 100644 index 000000000000..971fc8824c35 Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_end.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_mid1.ogg b/sound/weather/acidrain/inside/acidrain_inside_mid1.ogg new file mode 100644 index 000000000000..6d7363e5509f Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_mid1.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_mid2.ogg b/sound/weather/acidrain/inside/acidrain_inside_mid2.ogg new file mode 100644 index 000000000000..4a8fc4105744 Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_mid2.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_mid3.ogg b/sound/weather/acidrain/inside/acidrain_inside_mid3.ogg new file mode 100644 index 000000000000..58033fe7b6cd Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_mid3.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_mid4.ogg b/sound/weather/acidrain/inside/acidrain_inside_mid4.ogg new file mode 100644 index 000000000000..ba85eb65d314 Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_mid4.ogg differ diff --git a/sound/weather/acidrain/inside/acidrain_inside_start.ogg b/sound/weather/acidrain/inside/acidrain_inside_start.ogg new file mode 100644 index 000000000000..b6f65ad444b3 Binary files /dev/null and b/sound/weather/acidrain/inside/acidrain_inside_start.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_end.ogg b/sound/weather/acidrain/outside/acidrain_outside_end.ogg new file mode 100644 index 000000000000..18a284260658 Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_end.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_mid1.ogg b/sound/weather/acidrain/outside/acidrain_outside_mid1.ogg new file mode 100644 index 000000000000..e70093f62cc8 Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_mid1.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_mid2.ogg b/sound/weather/acidrain/outside/acidrain_outside_mid2.ogg new file mode 100644 index 000000000000..eb4912f97a70 Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_mid2.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_mid3.ogg b/sound/weather/acidrain/outside/acidrain_outside_mid3.ogg new file mode 100644 index 000000000000..0b97c2d3531c Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_mid3.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_mid4.ogg b/sound/weather/acidrain/outside/acidrain_outside_mid4.ogg new file mode 100644 index 000000000000..7f16e979a420 Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_mid4.ogg differ diff --git a/sound/weather/acidrain/outside/acidrain_outside_start.ogg b/sound/weather/acidrain/outside/acidrain_outside_start.ogg new file mode 100644 index 000000000000..c80bb8ec6127 Binary files /dev/null and b/sound/weather/acidrain/outside/acidrain_outside_start.ogg differ diff --git a/yogstation/code/datums/status_effects/buffs.dm b/yogstation/code/datums/status_effects/buffs.dm index 9cdea941cfe9..a38163928ebe 100644 --- a/yogstation/code/datums/status_effects/buffs.dm +++ b/yogstation/code/datums/status_effects/buffs.dm @@ -76,7 +76,7 @@ shield.pixel_x = -owner.pixel_x shield.pixel_y = -owner.pixel_y owner.overlays += shield - owner.weather_immunities |= WEATHER_ASH //no free charges/heals + owner.weather_immunities |= WEATHER_STORM //no free charges/heals for(var/traits in grimoire_traits) ADD_TRAIT(owner, traits, GRIMOIRE_TRAIT) return ..() @@ -96,7 +96,7 @@ if(owner) for(var/traits in grimoire_traits) REMOVE_TRAIT(owner, traits, GRIMOIRE_TRAIT) - owner.weather_immunities -= WEATHER_ASH + owner.weather_immunities &= ~WEATHER_STORM //might this remove immunity granted from other sources? owner.overlays -= shield owner.extinguish_mob() owner.AdjustStun(-200) diff --git a/yogstation/code/game/gamemodes/battle_royale/storm.dm b/yogstation/code/game/gamemodes/battle_royale/storm.dm index d7bc1bf4ecaf..0c00e9711fb5 100644 --- a/yogstation/code/game/gamemodes/battle_royale/storm.dm +++ b/yogstation/code/game/gamemodes/battle_royale/storm.dm @@ -8,7 +8,7 @@ end_message = null telegraph_duration = 10 SECONDS //actually give them a brief moment to react end_duration = 1 - immunity_type = "fuckno" + immunity_type = NONE telegraph_sound = 'yogstation/sound/effects/battleroyale/stormclosing.ogg' end_sound = 'yogstation/sound/effects/battleroyale/stormalert.ogg' weather_duration = INFINITY diff --git a/yogstation/code/modules/admin/admin_verbs.dm b/yogstation/code/modules/admin/admin_verbs.dm index 45db69984ab1..0441161b23b3 100644 --- a/yogstation/code/modules/admin/admin_verbs.dm +++ b/yogstation/code/modules/admin/admin_verbs.dm @@ -103,7 +103,7 @@ /client/proc/set_next_minetype() set name = "Set Next Minetype" set category = "Server" - set desc = "Sets the next mintype (jungleland or lavaland), provided that the map allows it." + set desc = "Sets the next minetype (jungleland or lavaland), provided that the map allows it." var/list/l = list("Jungleland" = 0, "Lavaland" = 1, "Either" = 2) var/answer = input(src,"Which one do you choose?","Selection","Either") in l if(!answer) diff --git a/yogstation/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm b/yogstation/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm index 8ba1f100d366..642493259f19 100644 --- a/yogstation/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm +++ b/yogstation/code/modules/antagonists/darkspawn/darkspawn_progenitor.dm @@ -19,7 +19,7 @@ armour_penetration = 100 obj_damage = INFINITY environment_smash = ENVIRONMENT_SMASH_RWALLS - weather_immunities = list(WEATHER_LAVA, WEATHER_ASH) + weather_immunities = ALL status_flags = NONE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) //Leaving something at 0 means it's off - has no maximum unsuitable_atmos_damage = 0 diff --git a/yogstation/code/modules/jungleland/jungle_datums.dm b/yogstation/code/modules/jungleland/jungle_datums.dm index 19e5698d77b4..c4cc34fccd72 100644 --- a/yogstation/code/modules/jungleland/jungle_datums.dm +++ b/yogstation/code/modules/jungleland/jungle_datums.dm @@ -520,111 +520,83 @@ name = "Concentrated toxin" toxpwr = 2 -#define STAGE_1_THRESHOLD 15 -#define STAGE_2_THRESHOLD 30 -#define STAGE_3_THRESHOLD 45 +#define STAGE_THRESHOLD 15 #define ALERT_ID "toxic_buildup_metabolites" -/datum/reagent/toxic_metabolities - name = "Toxic metabolities" +/datum/reagent/toxic_metabolites + name = "Toxic metabolites" description = "Deadly toxic buildup of metabolities caused by direct exposition to jungleland's environment." - taste_description = "death" color = "#002d09" harmful = TRUE can_synth = FALSE self_consuming = TRUE taste_mult = 100 + taste_description = "death" metabolization_rate = 0.5 var/stage = 1 - var/old_volume = 0 + var/old_stage = 1 var/alert_type = /atom/movable/screen/alert/status_effect/toxic_buildup // consumes 2 every 2 seconds -/datum/reagent/toxic_metabolities/on_mob_life(mob/living/carbon/M) +/datum/reagent/toxic_metabolites/on_mob_life(mob/living/carbon/M) . = ..() if(HAS_TRAIT(M,TRAIT_SULPH_PIT_IMMUNE)) cure() return - switch(volume) - if(0 to STAGE_1_THRESHOLD) - if(old_volume > STAGE_1_THRESHOLD) - decrement_stage(M) + stage = min(floor(volume/STAGE_THRESHOLD) + 1, 4) + if(stage != old_stage) //so we don't keep updating the alert if we don't need to + M.throw_alert(ALERT_ID,alert_type,stage) + old_stage = stage + + switch(stage) + if(1) M.adjustToxLoss(0.25, forced = TRUE) - // STAGE 1 - if(STAGE_1_THRESHOLD to STAGE_2_THRESHOLD) - if(old_volume < STAGE_1_THRESHOLD) - increment_stage(M) - if(old_volume > STAGE_2_THRESHOLD) - decrement_stage(M) + if(2) M.adjustToxLoss(0.5, forced = TRUE) M.adjustOrganLoss(ORGAN_SLOT_LIVER,0.25) - M.adjustStaminaLoss(2.5) if(prob(2.5)) to_chat(M, "You feel slight burning coming from within you, as the toxins singe you from within!") M.adjustFireLoss(5) - // STAGE 2 - if(STAGE_2_THRESHOLD to STAGE_3_THRESHOLD) - if(old_volume < STAGE_2_THRESHOLD) - increment_stage(M) - if(old_volume > STAGE_3_THRESHOLD) - decrement_stage(M) + + if(3) M.adjustToxLoss(1, forced = TRUE) - M.adjustOrganLoss(ORGAN_SLOT_LIVER,0.5) + M.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.5) M.adjustStaminaLoss(5) + M.clear_stamina_regen() if(prob(5)) to_chat(M, "You feel a burning sensation coming from within you, as the toxins burn you from within!") M.adjustFireLoss(10) - // STAGE 3 - if(STAGE_3_THRESHOLD to INFINITY) - if(old_volume < STAGE_3_THRESHOLD) - increment_stage(M) + + if(4) M.adjustToxLoss(2.5, forced = TRUE) - M.adjustOrganLoss(ORGAN_SLOT_LIVER,1) + M.adjustOrganLoss(ORGAN_SLOT_LIVER, 1) M.adjustStaminaLoss(10) + M.clear_stamina_regen() if(prob(10)) to_chat(M, "You feel deep burning sensation from within as the toxins burn you from within!") M.adjustFireLoss(15) - // STAGE 4 - old_volume = volume -/datum/reagent/toxic_metabolities/on_mob_add(mob/living/L) +/datum/reagent/toxic_metabolites/on_mob_add(mob/living/L) . = ..() if(HAS_TRAIT(L,TRAIT_SULPH_PIT_IMMUNE)) cure() return - RegisterSignal(L,COMSIG_REGEN_CORE_HEALED,PROC_REF(cure)) - switch(volume) - if(0 to STAGE_1_THRESHOLD) - stage = 1 - if(STAGE_1_THRESHOLD to STAGE_2_THRESHOLD) - stage = 2 - if(STAGE_2_THRESHOLD to STAGE_3_THRESHOLD) - stage = 3 - if(STAGE_3_THRESHOLD to INFINITY) - stage = 4 - old_volume = volume + RegisterSignal(L, COMSIG_REGEN_CORE_HEALED,PROC_REF(cure)) + stage = min(floor(volume/STAGE_THRESHOLD) + 1, 4) + old_stage = stage L.throw_alert(ALERT_ID,alert_type,stage) -/datum/reagent/toxic_metabolities/on_mob_delete(mob/living/L) +/datum/reagent/toxic_metabolites/on_mob_delete(mob/living/L) + UnregisterSignal(L, COMSIG_REGEN_CORE_HEALED) L.clear_alert(ALERT_ID) return ..() - -/datum/reagent/toxic_metabolities/proc/decrement_stage(mob/living/L) - stage = max(1,stage - 1) - L.throw_alert(ALERT_ID,alert_type,stage) - -/datum/reagent/toxic_metabolities/proc/increment_stage(mob/living/L) - stage = min(4,stage + 1) - L.throw_alert(ALERT_ID,alert_type,stage) -/datum/reagent/toxic_metabolities/proc/cure() +/datum/reagent/toxic_metabolites/proc/cure() if(holder) holder.remove_reagent(type, volume) -#undef STAGE_1_THRESHOLD -#undef STAGE_2_THRESHOLD -#undef STAGE_3_THRESHOLD +#undef STAGE_THRESHOLD #undef ALERT_ID diff --git a/yogstation/code/modules/jungleland/jungle_items.dm b/yogstation/code/modules/jungleland/jungle_items.dm index 5d5a53d5c6e0..140592afb103 100644 --- a/yogstation/code/modules/jungleland/jungle_items.dm +++ b/yogstation/code/modules/jungleland/jungle_items.dm @@ -8,7 +8,7 @@ if(!isliving(user)) return var/mob/living/living_user = user - living_user.reagents.add_reagent(/datum/reagent/toxic_metabolities,15) + living_user.reagents.add_reagent(/datum/reagent/toxic_metabolites,15) /obj/item/dummy_malaria name = "test dummy" desc = "what" diff --git a/yogstation/code/modules/jungleland/jungle_mobs.dm b/yogstation/code/modules/jungleland/jungle_mobs.dm index 252df47a159d..b8ca47cb1409 100644 --- a/yogstation/code/modules/jungleland/jungle_mobs.dm +++ b/yogstation/code/modules/jungleland/jungle_mobs.dm @@ -1,7 +1,7 @@ /mob/living/simple_animal/hostile/yog_jungle //yog_jungle and not just jungle because TG has some mobs under /jungle/ that i dont want to fuck with and override (they are unused, but like whats the point..) icon = 'yogstation/icons/mob/jungle.dmi' stat_attack = UNCONSCIOUS - weather_immunities = WEATHER_ACID + weather_immunities = WEATHER_STORM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("mining", "skintwister_cloak") see_in_dark = 3 @@ -135,7 +135,7 @@ var/mob/living/carbon/human/humie = target var/chance = 100 - humie.getarmor(null,BIO) if(prob(max(10,chance * 0.66))) // higher chance than toxic water - humie.reagents.add_reagent(/datum/reagent/toxic_metabolities,2.5) + humie.reagents.add_reagent(/datum/reagent/toxic_metabolites,2.5) /mob/living/simple_animal/hostile/yog_jungle/meduracha/Goto(target, delay, minimum_distance) update_sulking(TRUE) @@ -623,7 +623,7 @@ /mob/living/simple_animal/hostile/tar icon = 'yogstation/icons/mob/jungle.dmi' stat_attack = DEAD - weather_immunities = WEATHER_ACID + weather_immunities = WEATHER_STORM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) robust_searching = TRUE see_in_dark = 5 @@ -735,7 +735,7 @@ mob/living/simple_animal/hostile/asteroid/hivelord/tar desc = "A solid chunk of tar. You struggle to think that something like this could even be alive, but it seems to pulsate and even move at times..." icon = 'yogstation/icons/mob/jungle.dmi' stat_attack = DEAD - weather_immunities = WEATHER_ACID + weather_immunities = WEATHER_STORM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) robust_searching = TRUE see_in_dark = 5 @@ -769,7 +769,7 @@ mob/living/simple_animal/hostile/asteroid/hivelord/tar icon_aggro = "tar_aspect" icon_dead = "tar_aspect" stat_attack = DEAD - weather_immunities = WEATHER_ACID + weather_immunities = WEATHER_STORM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) robust_searching = TRUE see_in_dark = 5 diff --git a/yogstation/code/modules/jungleland/jungle_projectiles.dm b/yogstation/code/modules/jungleland/jungle_projectiles.dm index 23fc126b83f4..19289ce39d9f 100644 --- a/yogstation/code/modules/jungleland/jungle_projectiles.dm +++ b/yogstation/code/modules/jungleland/jungle_projectiles.dm @@ -28,4 +28,4 @@ var/mob/living/carbon/human/H = target var/chance = 100 - H.getarmor(null,BIO) if(prob(max(10,chance * 0.75))) // higher chance than toxic water - H.reagents.add_reagent(/datum/reagent/toxic_metabolities,15) + H.reagents.add_reagent(/datum/reagent/toxic_metabolites,15) diff --git a/yogstation/code/modules/jungleland/jungle_structures.dm b/yogstation/code/modules/jungleland/jungle_structures.dm index 2362ca888e32..bde21991447a 100644 --- a/yogstation/code/modules/jungleland/jungle_structures.dm +++ b/yogstation/code/modules/jungleland/jungle_structures.dm @@ -364,6 +364,7 @@ faction = list("mining") max_mobs = 3 max_integrity = 250 + resistance_flags = UNACIDABLE move_resist = INFINITY anchored = TRUE density = FALSE diff --git a/yogstation/code/modules/jungleland/jungle_turfs.dm b/yogstation/code/modules/jungleland/jungle_turfs.dm index 4fb57a6b7958..3e6e27471824 100644 --- a/yogstation/code/modules/jungleland/jungle_turfs.dm +++ b/yogstation/code/modules/jungleland/jungle_turfs.dm @@ -216,7 +216,7 @@ Temperature: 126.85 °C (400 K) else if (isliving(thing)) . = TRUE var/mob/living/L = thing - if(WEATHER_ACID in L.weather_immunities) //if they're immune to acid weather + if(L.weather_immunities & WEATHER_ACID) //if they're immune to acid weather return if(L.movement_type & (FLYING|FLOATING)) //YOU'RE FLYING OVER IT return @@ -233,7 +233,7 @@ Temperature: 126.85 °C (400 K) return else if(isliving(buckle_check)) var/mob/living/live = buckle_check - if(WEATHER_ACID in live.weather_immunities) + if(live.weather_immunities & WEATHER_ACID) return if(live.movement_type & (FLYING|FLOATING)) return @@ -255,7 +255,7 @@ Temperature: 126.85 °C (400 K) if(HAS_TRAIT(L,TRAIT_TOXIMMUNE) || HAS_TRAIT(L,TRAIT_TOXINLOVER)) return - humie.reagents.add_reagent(/datum/reagent/toxic_metabolities, 2 * acid_strength) + humie.reagents.add_reagent(/datum/reagent/toxic_metabolites, 2 * acid_strength) else if(prob(25 * acid_strength)) L.acid_act(5 * acid_strength, 7.5 * acid_strength) diff --git a/yogstation/code/modules/mob/living/carbon/human/species_types/plantpeople.dm b/yogstation/code/modules/mob/living/carbon/human/species_types/plantpeople.dm index 14b8e2396dd3..7371d816dc5e 100644 --- a/yogstation/code/modules/mob/living/carbon/human/species_types/plantpeople.dm +++ b/yogstation/code/modules/mob/living/carbon/human/species_types/plantpeople.dm @@ -396,7 +396,7 @@ name = "Ivymen" id = "ivymen" limbs_id = SPECIES_PODPERSON - inherent_traits = list(TRAIT_NOGUNS,TRAIT_RESISTHIGHPRESSURE) + inherent_traits = list(TRAIT_NOGUNS,TRAIT_RESISTHIGHPRESSURE, TRAIT_SULPH_PIT_IMMUNE) speedmod = 0 mutantlungs = /obj/item/organ/lungs/plant/ivymen disliked_food = DAIRY @@ -407,7 +407,7 @@ /datum/species/pod/ivymen/on_species_loss(mob/living/carbon/C) . = ..() - C.weather_immunities -= WEATHER_ACID + C.weather_immunities &= ~WEATHER_ACID #undef STATUS_MESSAGE_COOLDOWN diff --git a/yogstation/code/modules/mob/living/simple_animal/hostile/abominations.dm b/yogstation/code/modules/mob/living/simple_animal/hostile/abominations.dm index 846bdb711117..b209b892add4 100644 --- a/yogstation/code/modules/mob/living/simple_animal/hostile/abominations.dm +++ b/yogstation/code/modules/mob/living/simple_animal/hostile/abominations.dm @@ -16,7 +16,7 @@ speak_emote = list("screams") atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 - weather_immunities = list(WEATHER_ASH) + weather_immunities = WEATHER_STORM stat_attack = UNCONSCIOUS /mob/living/simple_animal/hostile/abomination/super