From 94deb1ab18961cbddd19cb3a7726162cdf4fc002 Mon Sep 17 00:00:00 2001 From: Ryumi Date: Tue, 11 Nov 2025 14:45:05 -0600 Subject: [PATCH] Fixes gravity surge event affecting capsule shelters on maps without gravity generators (#18742) * Fixes survival pods being affected by gravity events in some cases * applies to admeme event as well! * perhaps this is better logic actually * Wait, it's probably a lot better to do this with flags... * Whoops, thought I saved this change! --- code/__defines/misc.dm | 1 + code/game/area/areas.dm | 2 +- code/modules/events/gravity.dm | 4 ++++ code/modules/gamemaster/event2/events/everyone/gravity.dm | 4 ++-- code/modules/mining/shelter_atoms_vr.dm | 3 ++- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index b986a01615c..f75ea5e4aee 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -119,6 +119,7 @@ #define AREA_BLOCK_TRACKING 0x1000 // If camera tracking is blocked in the area. #define AREA_BLOCK_GHOST_SIGHT 0x2000 // If an area blocks sight for ghosts #define AREA_BLOCK_INSTANT_BUILDING 0x4000 // If an area blocks the usage of instant building creation items/mechanics such as shelter capsules +#define AREA_ALWAYS_HAS_GRAVITY 0x8000 // If an area should always have gravity, even during events that would otherwise remove it. // The 0x800000 is blocked by INITIALIZED, do NOT use it! #define PHASE_SHIELDED 0x100000 // A less rough way to prevent phase shifting without blocking access //VOREStation Note: Not implemented on VS. Used downstream. diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index e021bba88a0..cbb2b1d0f22 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -39,7 +39,7 @@ GLOBAL_LIST_EMPTY(areas_by_type) var/static_environ = 0 var/music = null - var/has_gravity = 1 // Don't check this var directly; use get_gravity() instead + var/has_gravity = TRUE // Don't check this var directly; use get_gravity() instead var/obj/machinery/power/apc/apc = null var/no_air = null // var/list/lights // list of all lights on this area diff --git a/code/modules/events/gravity.dm b/code/modules/events/gravity.dm index 716e4131ee6..ad50785743b 100644 --- a/code/modules/events/gravity.dm +++ b/code/modules/events/gravity.dm @@ -36,6 +36,8 @@ GG.charge_count = 10 else for(var/area/A in world) + if(A.flags & AREA_ALWAYS_HAS_GRAVITY) + continue if(A.z in zLevels) A.gravitychange(GLOB.gravity_is_on) @@ -54,6 +56,8 @@ did_anything = TRUE else for(var/area/A in world) + if(A.flags & AREA_ALWAYS_HAS_GRAVITY) + continue if(A.z in zLevels) A.gravitychange(GLOB.gravity_is_on) did_anything = TRUE diff --git a/code/modules/gamemaster/event2/events/everyone/gravity.dm b/code/modules/gamemaster/event2/events/everyone/gravity.dm index bc149763710..00c6e5a6fa9 100644 --- a/code/modules/gamemaster/event2/events/everyone/gravity.dm +++ b/code/modules/gamemaster/event2/events/everyone/gravity.dm @@ -23,12 +23,12 @@ /datum/event2/event/gravity/start() for(var/area/A in world) - if(A.z in get_location_z_levels(space_only = TRUE)) + if(!(A.flags & AREA_ALWAYS_HAS_GRAVITY) && A.z in get_location_z_levels(space_only = TRUE)) A.gravitychange(FALSE) /datum/event2/event/gravity/end() for(var/area/A in world) - if(A.z in get_location_z_levels(space_only = TRUE)) + if(!(A.flags & AREA_ALWAYS_HAS_GRAVITY) && A.z in get_location_z_levels(space_only = TRUE)) A.gravitychange(TRUE) command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") diff --git a/code/modules/mining/shelter_atoms_vr.dm b/code/modules/mining/shelter_atoms_vr.dm index f6de36ffbe6..d00c27e7073 100644 --- a/code/modules/mining/shelter_atoms_vr.dm +++ b/code/modules/mining/shelter_atoms_vr.dm @@ -6,11 +6,12 @@ GLOBAL_LIST_EMPTY(unique_deployable) dynamic_lighting = TRUE requires_power = FALSE has_gravity = TRUE + flags = AREA_ALWAYS_HAS_GRAVITY /area/survivalpod/dorms name = "\improper Emergency Shelter Dorm" icon_state = "away1" - flags = RAD_SHIELDED | BLUE_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FORBID_EVENTS | AREA_FORBID_SINGULO | AREA_SOUNDPROOF | AREA_ALLOW_LARGE_SIZE | AREA_BLOCK_SUIT_SENSORS | AREA_BLOCK_TRACKING + flags = RAD_SHIELDED | BLUE_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FORBID_EVENTS | AREA_FORBID_SINGULO | AREA_SOUNDPROOF | AREA_ALLOW_LARGE_SIZE | AREA_BLOCK_SUIT_SENSORS | AREA_BLOCK_TRACKING | AREA_ALWAYS_HAS_GRAVITY /area/survivalpod/dorms/bathroom name = "\improper Emergency Shelter Bathroom"