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
+1 -1
View File
@@ -10,7 +10,7 @@
// Otherwise add it and all subtypes that exist on the map to our grand list
for(var/areapath in typesof(parentpath))
var/area/A = locate(areapath) // Check if it actually exists
if(istype(A) && (A.z in using_map.player_levels))
if(istype(A) && (A.z in using_map.station_levels))
grand_list_of_areas += A
return grand_list_of_areas
@@ -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)
@@ -261,3 +261,11 @@ var/list/flesh_overlay_cache = list()
/turf/simulated/wall/stonelogs/Initialize(mapload)
. = ..(mapload, MAT_CONCRETE,MAT_LOG)
/turf/simulated/wall/glass
icon = 'icons/obj/structures_vr.dmi'
icon_state = "window-full"
opacity = 0
/turf/simulated/wall/glass/Initialize(mapload)
. = ..(mapload, MAT_GLASS)
@@ -289,6 +289,18 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/anomaly_releaser
name = "Anomaly Releaser"
desc = "A one-time use device, reactivates anomalies and stabilizes them."
id = "anomaly_releaser"
build_type = PROTOLATHE
materials = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT, MAT_GOLD = SHEET_MATERIAL_AMOUNT, MAT_PHORON = SHEET_MATERIAL_AMOUNT * 2.5, MAT_URANIUM = SHEET_MATERIAL_AMOUNT)
build_path = /obj/item/anomaly_releaser
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
/datum/design_techweb/reactive_armour
name = "Reactive Armor Shell"
desc = "An experimental suit of armour capable of utilizing an implanted anomaly core to protect the user."
@@ -110,6 +110,7 @@
"ano_scanner",
//"anomaly_refinery",
"anomaly_neutralizer",
"anomaly_releaser",
"reactive_armour",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)