diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 801d11a4d7..326ae19397 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -58,7 +58,8 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_SKYBOX 30 #define INIT_ORDER_MAPPING 25 #define INIT_ORDER_DECALS 20 -#define INIT_ORDER_PLANTS 18 // Must initialize before atoms. +#define INIT_ORDER_PLANTS 19 // Must initialize before atoms. +#define INIT_ORDER_PLANETS 18 #define INIT_ORDER_JOB 17 #define INIT_ORDER_ALARM 16 // Must initialize before atoms. #define INIT_ORDER_ATOMS 15 @@ -69,7 +70,6 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_LIGHTING 0 #define INIT_ORDER_AIR -1 #define INIT_ORDER_ASSETS -3 -#define INIT_ORDER_PLANETS -4 #define INIT_ORDER_HOLOMAPS -5 #define INIT_ORDER_NIGHTSHIFT -6 #define INIT_ORDER_OVERLAY -7 diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index 5d1325bba5..4cf7222186 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -6,9 +6,6 @@ SUBSYSTEM_DEF(planets) flags = SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - var/static/list/new_outdoor_turfs = list() - var/static/list/new_outdoor_walls = list() - var/static/list/planets = list() var/static/list/z_to_planet = list() @@ -20,7 +17,6 @@ SUBSYSTEM_DEF(planets) /datum/controller/subsystem/planets/Initialize(timeofday) admin_notice("Initializing planetary weather.", R_DEBUG) createPlanets() - allocateTurfs(TRUE) ..() /datum/controller/subsystem/planets/proc/createPlanets() @@ -36,64 +32,36 @@ SUBSYSTEM_DEF(planets) continue z_to_planet[Z] = NP -/datum/controller/subsystem/planets/proc/addTurf(var/turf/T,var/is_edge) - if(is_edge) - new_outdoor_walls |= T - else - new_outdoor_turfs |= T +// DO NOT CALL THIS DIRECTLY UNLESS IT'S IN INITIALIZE, +// USE turf/simulated/proc/make_indoors() and\ +// tyrf/simulated/proc/make_outdoors() +/datum/controller/subsystem/planets/proc/addTurf(var/turf/T) + if(z_to_planet.len >= T.z && z_to_planet[T.z]) + var/datum/planet/P = z_to_planet[T.z] + if(!istype(P)) + return + if(istype(T, /turf/unsimulated/wall/planetary)) + P.planet_walls += T + else if(istype(T, /turf/simulated) && T.outdoors) + P.planet_floors += T + T.vis_contents |= P.weather_holder.visuals + T.vis_contents |= P.weather_holder.special_visuals + /datum/controller/subsystem/planets/proc/removeTurf(var/turf/T,var/is_edge) - if(is_edge) - new_outdoor_walls -= T - else - new_outdoor_turfs -= T - if(z_to_planet.len >= T.z) var/datum/planet/P = z_to_planet[T.z] if(!P) return - if(is_edge) - P.planet_floors -= T - else + if(istype(T, /turf/unsimulated/wall/planetary)) P.planet_walls -= T - T.vis_contents -= P.weather_holder.visuals - T.vis_contents -= P.weather_holder.special_visuals - -/datum/controller/subsystem/planets/proc/allocateTurfs(var/initial = FALSE) - var/list/currentlist = new_outdoor_turfs - while(currentlist.len) - var/turf/simulated/OT = currentlist[currentlist.len] - currentlist.len-- - if(istype(OT) && OT.outdoors && z_to_planet.len >= OT.z && z_to_planet[OT.z]) - var/datum/planet/P = z_to_planet[OT.z] - P.planet_floors |= OT - OT.vis_contents |= P.weather_holder.visuals - OT.vis_contents |= P.weather_holder.special_visuals - if(!initial && MC_TICK_CHECK) - return - - currentlist = new_outdoor_walls - while(currentlist.len) - var/turf/unsimulated/wall/planetary/PW = currentlist[currentlist.len] - currentlist.len-- - if(istype(PW) && z_to_planet.len >= PW.z && z_to_planet[PW.z]) - var/datum/planet/P = z_to_planet[PW.z] - P.planet_walls |= PW - if(!initial && MC_TICK_CHECK) - return - -/datum/controller/subsystem/planets/proc/unallocateTurf(var/turf/simulated/T) - if(istype(T) && z_to_planet[T.z]) - var/datum/planet/P = z_to_planet[T.z] - P.planet_floors -= T - T.vis_contents -= P.weather_holder.visuals - T.vis_contents -= P.weather_holder.special_visuals + else + P.planet_floors -= T + T.vis_contents -= P.weather_holder.visuals + T.vis_contents -= P.weather_holder.special_visuals /datum/controller/subsystem/planets/fire(resumed = 0) - if(new_outdoor_turfs.len || new_outdoor_walls.len) - allocateTurfs() - if(!resumed) src.currentrun = planets.Copy() @@ -153,8 +121,7 @@ SUBSYSTEM_DEF(planets) var/lum_g = new_brightness * GetGreenPart(new_color) / 255 var/lum_b = new_brightness * GetBluePart (new_color) / 255 var/static/update_gen = -1 // Used to prevent double-processing corners. Otherwise would happen when looping over adjacent turfs. - for(var/I in P.planet_floors) - var/turf/simulated/T = I + for(var/turf/simulated/T as anything in P.planet_floors) if(!T.lighting_corners_initialised) T.generate_missing_corners() for(var/C in T.get_corners()) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 5f438f698f..8ca1659d1b 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -31,10 +31,14 @@ var/list/turf_edge_cache = list() return ..() /turf/simulated/proc/make_outdoors() + if(outdoors) + return outdoors = TRUE SSplanets.addTurf(src) /turf/simulated/proc/make_indoors() + if(!outdoors) + return outdoors = FALSE SSplanets.removeTurf(src) diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm index e3f0b31810..b7c4f7f3b7 100644 --- a/code/modules/planet/sif.dm +++ b/code/modules/planet/sif.dm @@ -216,15 +216,17 @@ var/datum/planet/sif/planet_sif = null outdoor_sounds_type = /datum/looping_sound/weather/outside_snow indoor_sounds_type = /datum/looping_sound/weather/inside_snow +/* /datum/weather/sif/snow/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) T.chill() +*/ /datum/weather/sif/blizzard name = "blizzard" @@ -249,15 +251,17 @@ var/datum/planet/sif/planet_sif = null outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard +/* /datum/weather/sif/blizzard/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) T.chill() +*/ /datum/weather/sif/rain name = "rain" @@ -283,25 +287,21 @@ var/datum/planet/sif/planet_sif = null /datum/weather/sif/rain/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue L.water_act(1) if(show_message) @@ -340,24 +340,21 @@ var/datum/planet/sif/planet_sif = null /datum/weather/sif/storm/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. + // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue L.water_act(2) @@ -401,20 +398,18 @@ var/datum/planet/sif/planet_sif = null /datum/weather/sif/hail/process_effects() ..() - for(var/humie in human_mob_list) - var/mob/living/carbon/human/H = humie + for(var/mob/living/carbon/H as anything in human_mob_list) if(H.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(H) if(!T.outdoors) continue // They're indoors, so no need to pelt them with ice. // If they have an open umbrella, it'll guard from hail - var/obj/item/weapon/melee/umbrella/U - if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella)) - U = H.get_active_hand() - else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() + if(!istype(U) || !U.open) U = H.get_inactive_hand() - if(U && U.open) + + if(istype(U) && U.open) if(show_message) to_chat(H, "Hail patters onto your umbrella.") continue diff --git a/code/modules/planet/virgo3b_better_vr.dm b/code/modules/planet/virgo3b_better_vr.dm index 80fbdc2a89..219788e3de 100644 --- a/code/modules/planet/virgo3b_better_vr.dm +++ b/code/modules/planet/virgo3b_better_vr.dm @@ -156,15 +156,17 @@ var/datum/planet/virgo3b_better/planet_virgo3b_better = null outdoor_sounds_type = /datum/looping_sound/weather/outside_snow indoor_sounds_type = /datum/looping_sound/weather/inside_snow +/* /datum/weather/virgo3b_better/snow/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) T.chill() +*/ /datum/weather/virgo3b_better/blizzard name = "blizzard" @@ -189,15 +191,17 @@ var/datum/planet/virgo3b_better/planet_virgo3b_better = null outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard +/* /datum/weather/virgo3b_better/blizzard/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) T.chill() +*/ /datum/weather/virgo3b_better/rain name = "rain" @@ -220,25 +224,21 @@ var/datum/planet/virgo3b_better/planet_virgo3b_better = null /datum/weather/virgo3b_better/rain/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue L.water_act(1) if(show_message) @@ -275,25 +275,21 @@ var/datum/planet/virgo3b_better/planet_virgo3b_better = null /datum/weather/virgo3b_better/storm/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue L.water_act(2) @@ -335,20 +331,18 @@ var/datum/planet/virgo3b_better/planet_virgo3b_better = null /datum/weather/virgo3b_better/hail/process_effects() ..() - for(var/humie in human_mob_list) - var/mob/living/carbon/human/H = humie + for(var/mob/living/carbon/H as anything in human_mob_list) if(H.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(H) if(!T.outdoors) continue // They're indoors, so no need to pelt them with ice. // If they have an open umbrella, it'll guard from hail - var/obj/item/weapon/melee/umbrella/U - if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella)) - U = H.get_active_hand() - else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() + if(!istype(U) || !U.open) U = H.get_inactive_hand() - if(U && U.open) + + if(istype(U) && U.open) if(show_message) to_chat(H, "Hail patters onto your umbrella.") continue diff --git a/code/modules/planet/virgo3b_vr.dm b/code/modules/planet/virgo3b_vr.dm index 710f2698c0..f9cc58ca0c 100644 --- a/code/modules/planet/virgo3b_vr.dm +++ b/code/modules/planet/virgo3b_vr.dm @@ -203,15 +203,17 @@ var/datum/planet/virgo3b/planet_virgo3b = null outdoor_sounds_type = /datum/looping_sound/weather/outside_snow indoor_sounds_type = /datum/looping_sound/weather/inside_snow +/* /datum/weather/virgo3b/snow/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) T.chill() +*/ /datum/weather/virgo3b/blizzard name = "blizzard" @@ -236,15 +238,17 @@ var/datum/planet/virgo3b/planet_virgo3b = null outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard +/* /datum/weather/virgo3b/blizzard/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) T.chill() +*/ /datum/weather/virgo3b/rain name = "rain" @@ -270,25 +274,21 @@ var/datum/planet/virgo3b/planet_virgo3b = null /datum/weather/virgo3b/rain/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue L.water_act(1) if(show_message) @@ -325,25 +325,21 @@ var/datum/planet/virgo3b/planet_virgo3b = null /datum/weather/virgo3b/storm/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue L.water_act(2) @@ -385,20 +381,18 @@ var/datum/planet/virgo3b/planet_virgo3b = null /datum/weather/virgo3b/hail/process_effects() ..() - for(var/humie in human_mob_list) - var/mob/living/carbon/human/H = humie + for(var/mob/living/carbon/H as anything in human_mob_list) if(H.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(H) if(!T.outdoors) continue // They're indoors, so no need to pelt them with ice. // If they have an open umbrella, it'll guard from hail - var/obj/item/weapon/melee/umbrella/U - if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella)) - U = H.get_active_hand() - else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() + if(!istype(U) || !U.open) U = H.get_inactive_hand() - if(U && U.open) + + if(istype(U) && U.open) if(show_message) to_chat(H, "Hail patters onto your umbrella.") continue diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm index 13302b040a..3909b9e6cd 100644 --- a/code/modules/planet/virgo4_vr.dm +++ b/code/modules/planet/virgo4_vr.dm @@ -187,15 +187,17 @@ var/datum/planet/virgo4/planet_virgo4 = null outdoor_sounds_type = /datum/looping_sound/weather/outside_snow indoor_sounds_type = /datum/looping_sound/weather/inside_snow +/* /datum/weather/virgo4/snow/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(33)) T.chill() +*/ /datum/weather/virgo4/blizzard name = "blizzard" @@ -217,15 +219,17 @@ var/datum/planet/virgo4/planet_virgo4 = null outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard +/* /datum/weather/virgo4/blizzard/process_effects() ..() - for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either + for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either if(S.z in holder.our_planet.expected_z_levels) for(var/dir_checked in cardinal) var/turf/simulated/floor/T = get_step(S, dir_checked) if(istype(T)) if(istype(T, /turf/simulated/floor/outdoors) && prob(50)) T.chill() +*/ /datum/weather/virgo4/rain name = "rain" @@ -248,25 +252,21 @@ var/datum/planet/virgo4/planet_virgo4 = null /datum/weather/virgo4/rain/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain patters softly onto your umbrella.") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain patters softly onto your umbrella.") + continue L.water_act(1) if(show_message) @@ -298,25 +298,21 @@ var/datum/planet/virgo4/planet_virgo4 = null /datum/weather/virgo4/storm/process_effects() ..() - for(var/mob/living/L in living_mob_list) + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain - if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue - else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) - var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand() - if(U.open) - if(show_message) - to_chat(L, "Rain showers loudly onto your umbrella!") - continue + var/obj/item/weapon/melee/umbrella/U = L.get_active_hand() + if(!istype(U) || !U.open) + U = L.get_inactive_hand() + + if(istype(U) && U.open) + if(show_message) + to_chat(L, "Rain showers loudly onto your umbrella!") + continue L.water_act(2) @@ -355,20 +351,18 @@ var/datum/planet/virgo4/planet_virgo4 = null /datum/weather/virgo4/hail/process_effects() ..() - for(var/humie in human_mob_list) - var/mob/living/carbon/human/H = humie + for(var/mob/living/carbon/H as anything in human_mob_list) if(H.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(H) if(!T.outdoors) continue // They're indoors, so no need to pelt them with ice. // If they have an open umbrella, it'll guard from hail - var/obj/item/weapon/melee/umbrella/U - if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella)) - U = H.get_active_hand() - else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella)) + var/obj/item/weapon/melee/umbrella/U = H.get_active_hand() + if(!istype(U) || !U.open) U = H.get_inactive_hand() - if(U && U.open) + + if(istype(U) && U.open) if(show_message) to_chat(H, "Hail patters onto your umbrella.") continue