Various anomaly fixes (#19017)

* Fixes

* Fimx..

* Weather stuffs

* Additional restricted areas

* fix :)
This commit is contained in:
Guti
2026-01-17 08:32:13 -08:00
committed by GitHub
parent f28ab47dd8
commit aae55665fb
9 changed files with 61 additions and 24 deletions
@@ -33,11 +33,10 @@
if(anomaly_core)
anomaly_core = new anomaly_core(src)
anomaly_core.set_frequency(sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ)))
anomaly_core.code = rand(1, 100)
anomaly_core.anomaly_type = type
anomaly_core.set_frequency(sanitize_frequency(get_rand_frequency()))
if(new_lifespan)
lifespan = new_lifespan
death_time = world.time + lifespan
@@ -120,4 +119,4 @@
if(DIMENSIONAL_ANOMALY)
new /obj/effect/anomaly/dimensional(local_turf, null, drops_core)
if(WEATHER_ANOMALY)
new /obj/effect/anomaly/dimensional(local_turf, null, drops_core)
new /obj/effect/anomaly/weather(local_turf, null, drops_core)
@@ -137,14 +137,14 @@
if(istype(new_object, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/airlock = object
var/obj/machinery/door/airlock/new_airlock = new_object
new_airlock.req_access = airlock.req_one_access?.Copy()
new_airlock.req_one_access = airlock.req_one_access?.Copy()
new_airlock.locked = airlock.locked
if(istype(object, /obj/machinery/door/airlock/multi_tile))
for(var/turf/location in object.locs)
if(location == object.loc)
continue
var/obj/machinery/door/airlock/long_airlock = new replace_path(location)
long_airlock.req_access = airlock.req_one_access?.Copy()
long_airlock.req_one_access = airlock.req_one_access?.Copy()
long_airlock.locked = airlock.locked
long_airlock.name = airlock.name
new_object.name = object.name
@@ -253,7 +253,7 @@
/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/glass = 1),
/obj/structure/table = list(/obj/structure/table/glass = 1)
)
replace_walls = /obj/structure/window/basic/full
replace_walls = /turf/simulated/wall/glass
/datum/dimension_theme/snow
name = "Snow"
@@ -89,7 +89,7 @@
selected_weather.loop_sounds.start()
for(var/turf/area_turf in affected_turfs)
apply_to_turf(area_turf)
selected_weather.apply_to_turf(area_turf)
/obj/effect/anomaly/weather/proc/clear_weather()
if(!is_raining)
@@ -100,22 +100,13 @@
for(var/area in affected_areas)
for(var/turf/area_turf in area)
remove_from_turf(area_turf)
selected_weather.remove_from_turf(area_turf)
for(var/mob/mob in area)
selected_weather.hear_sounds(mob, FALSE)
/obj/effect/anomaly/weather/proc/apply_to_turf(turf/T)
if(selected_weather.visuals in T.vis_contents)
WARNING("Was asked to add weather to [T.x], [T.y], [T.z] despite already having us in it's vis contents")
return
T.vis_contents += selected_weather.visuals
/obj/effect/anomaly/weather/proc/remove_from_turf(turf/T)
if(!(selected_weather.visuals in T.vis_contents))
WARNING("Was asked to remove weather from [T.x], [T.y], [T.z] despite it not having us in it's vis contents")
return
T.vis_contents -= selected_weather.visuals
/obj/effect/anomaly/weather/Destroy()
clear_weather()
. = ..()
/obj/effect/anomaly/weather/proc/update_reagent(reagent)
selected_weather.update_reagent(reagent)
@@ -32,6 +32,30 @@
if(weather_colour)
visuals.color = weather_colour
/datum/anomalous_weather/proc/update_reagent(reagent)
if(!reagent)
return FALSE
if(!reagent_holder)
reagent_holder = new(10000, null)
reagent_id = reagent
reagent_holder.clear_reagents()
reagent_holder.add_reagent(reagent_id, 10000)
visuals.color = reagent_holder.get_color()
/datum/anomalous_weather/proc/apply_to_turf(turf/T)
if(visuals in T.vis_contents)
WARNING("Was asked to add weather to [T.x], [T.y], [T.z] despite already having us in it's vis contents")
return
T.vis_contents += visuals
/datum/anomalous_weather/proc/remove_from_turf(turf/T)
if(!(visuals in T.vis_contents))
WARNING("Was asked to remove weather from [T.x], [T.y], [T.z] despite it not having us in it's vis contents")
return
T.vis_contents -= visuals
/datum/anomalous_weather/proc/affect_turf(turf/to_affect)
if(iswall(to_affect))
return
@@ -46,12 +46,14 @@
/area/maintenance,
/area/holodeck,
/area/ai,
/area/ai_core_foyer,
/area/ai_upload_foyer,
/area/ai_server_room,
/area/tcommsat
)
allowed_areas = get_station_areas(safe_area_types)
for(var/area/check_area in allowed_areas)
if((check_area.z in using_map.station_levels) || !check_area.flag_check(AREA_FORBID_EVENTS))
continue
allowed_areas.Remove(check_area)
if(!(check_area.z in using_map.station_levels) || check_area.flag_check(AREA_FORBID_EVENTS))
allowed_areas.Remove(check_area)