diff --git a/code/_helpers/events.dm b/code/_helpers/events.dm index 6e7887536a8..d2c3715e0ac 100644 --- a/code/_helpers/events.dm +++ b/code/_helpers/events.dm @@ -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 diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 0304add1f08..33704b47d2c 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -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) diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm index b1f8bf1f2cf..cc8d14be4b8 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm @@ -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" diff --git a/code/game/objects/effects/anomalies/anomalies_weather.dm b/code/game/objects/effects/anomalies/anomalies_weather.dm index 04ae98dbeb2..bf0624742cf 100644 --- a/code/game/objects/effects/anomalies/anomalies_weather.dm +++ b/code/game/objects/effects/anomalies/anomalies_weather.dm @@ -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) diff --git a/code/game/objects/effects/anomalies/anomalies_weather_themes.dm b/code/game/objects/effects/anomalies/anomalies_weather_themes.dm index 77e15a58d2f..1afbb5d2259 100644 --- a/code/game/objects/effects/anomalies/anomalies_weather_themes.dm +++ b/code/game/objects/effects/anomalies/anomalies_weather_themes.dm @@ -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 diff --git a/code/game/objects/effects/anomalies/anomaly_placer.dm b/code/game/objects/effects/anomalies/anomaly_placer.dm index 657365981f3..afcfac9e459 100644 --- a/code/game/objects/effects/anomalies/anomaly_placer.dm +++ b/code/game/objects/effects/anomalies/anomaly_placer.dm @@ -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) diff --git a/code/game/turfs/simulated/wall_types_vr.dm b/code/game/turfs/simulated/wall_types_vr.dm index bb7e2b0ee52..96369116b7c 100644 --- a/code/game/turfs/simulated/wall_types_vr.dm +++ b/code/game/turfs/simulated/wall_types_vr.dm @@ -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) diff --git a/code/modules/research/tg/designs/misc_designs.dm b/code/modules/research/tg/designs/misc_designs.dm index 47ef0d4416d..44a5eaada2d 100644 --- a/code/modules/research/tg/designs/misc_designs.dm +++ b/code/modules/research/tg/designs/misc_designs.dm @@ -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." diff --git a/code/modules/research/tg/techwebs/nodes/research_nodes.dm b/code/modules/research/tg/techwebs/nodes/research_nodes.dm index 9d230680167..97271d12ef0 100644 --- a/code/modules/research/tg/techwebs/nodes/research_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/research_nodes.dm @@ -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)