From ee5a40cb2b3e5ee9c0f9b6fddbffe990e6f9382c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 29 Mar 2023 23:27:00 +0200 Subject: [PATCH] [MIRROR] Minor Gravity Fixes [MDB IGNORE] (#20127) * Minor Gravity Fixes (#74285) ## About The Pull Request Fixes forced gravity not updating a mob (trait was added too early, before hook signals are registered) Fixes spawning a mob in space not causing floats (default grav was 0, so == null was wrong) Runs shake_everyone() (Our gravity gen reaction hook) AFTER gravity changes, ensuring mobs hook into it ## Why It's Good For The Game Closes #74271 Closes #74272 (Caused by being in nograv but not floating) Closes #74274 ## Changelog :cl: fix: Fixes a bunch of minor gravity bugs, report em if you see more yeah? /:cl: * Minor Gravity Fixes --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/datums/elements/forced_gravity.dm | 3 ++- code/modules/mob/living/living_defines.dm | 2 +- code/modules/power/gravitygenerator.dm | 19 +++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/datums/elements/forced_gravity.dm b/code/datums/elements/forced_gravity.dm index ab71be0aa31..bedda891fb5 100644 --- a/code/datums/elements/forced_gravity.dm +++ b/code/datums/elements/forced_gravity.dm @@ -13,12 +13,13 @@ src.gravity = gravity src.ignore_turf_gravity = ignore_turf_gravity - ADD_TRAIT(target, TRAIT_FORCED_GRAVITY, REF(src)) RegisterSignal(target, COMSIG_ATOM_HAS_GRAVITY, PROC_REF(gravity_check)) if(isturf(target)) RegisterSignal(target, COMSIG_TURF_HAS_GRAVITY, PROC_REF(turf_gravity_check)) + ADD_TRAIT(target, TRAIT_FORCED_GRAVITY, REF(src)) + /datum/element/forced_gravity/Detach(datum/source) . = ..() var/static/list/signals_b_gone = list(COMSIG_ATOM_HAS_GRAVITY, COMSIG_TURF_HAS_GRAVITY) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index c7fc2990f6b..7fa1aad8520 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -224,4 +224,4 @@ var/list/imaginary_group = null /// What our current gravity state is. Used to avoid duplicate animates and such - var/gravity_state = 0 + var/gravity_state = null diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index c7d44450646..0d656941cc7 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -311,14 +311,16 @@ GLOBAL_LIST_EMPTY(gravity_generators) update_use_power(ACTIVE_POWER_USE) soundloop.start() - if (!gravity_in_level()) + var/old_gravity = gravity_in_level() + complete_state_update() + gravity_field = new(src, 2, TRUE, 6) + + if (!old_gravity) if(SSticker.current_state == GAME_STATE_PLAYING) investigate_log("was brought online and is now producing gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought online [ADMIN_VERBOSEJMP(src)]") shake_everyone() - gravity_field = new(src, 2, TRUE, 6) - complete_state_update() /obj/machinery/gravity_generator/main/proc/disable() charging_state = POWER_IDLE @@ -327,13 +329,15 @@ GLOBAL_LIST_EMPTY(gravity_generators) soundloop.stop() QDEL_NULL(gravity_field) - if (gravity_in_level()) + var/old_gravity = gravity_in_level() + complete_state_update() + + if (old_gravity) if(SSticker.current_state == GAME_STATE_PLAYING) investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_VERBOSEJMP(src)]") shake_everyone() - complete_state_update() /obj/machinery/gravity_generator/main/proc/complete_state_update() update_appearance() @@ -431,11 +435,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) GLOB.gravity_generators["[z]"] -= src SSmapping.calculate_z_level_gravity(z) -/obj/machinery/gravity_generator/main/proc/change_setting(value) - if(value != setting) - setting = value - shake_everyone() - /obj/machinery/gravity_generator/main/proc/blackout() charge_count = 0 breaker = FALSE