diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 200bdd760a5..27d2c99f113 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -32,6 +32,7 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap var/list/obj/effect/landmark/entry_points var/obj/effect/overmap/targeting var/obj/machinery/leviathan_safeguard/levi_safeguard + var/obj/machinery/gravity_generator/main/gravity_generator var/comms_support = FALSE // Whether ghostroles attached to this overmap object spawn with comms var/comms_name = "shipboard" // Snowflake name to apply to comms equipment ("shipboard radio headset", "intercom (shipboard)", "shipboard telecommunications mainframe"), etc. @@ -79,6 +80,7 @@ var/global/area/overmap/map_overmap // Global object used to locate the overmap ship_weapons.Cut() targeting = null levi_safeguard = null + gravity_generator = null STOP_PROCESSING(SSprocessing, src) . = ..() diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index f4fa230603d..b8d88c55ce3 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -278,10 +278,13 @@ var/const/OVERMAP_SPEED_CONSTANT = (1 SECOND) forceMove(get_step(src, dir_to_move)) for(var/mob/living/L in living_mob_list) if(L.z in map_z) - to_chat(L, SPAN_DANGER("The ship rapidly inclines under your feet!")) - if(!L.buckled_to) - var/turf/T = get_step_away(get_turf(L), get_step(L, new_dir), 10) - L.throw_at(T, 10, 10) + if(!gravity_generator?.on && !L.anchored) + to_chat(L, SPAN_DANGER("The ship rapidly inclines beneath you!")) + if(!L.buckled_to) + var/turf/T = get_step_away(get_turf(L), get_step(L, new_dir), 10) + L.throw_at(T, 10, 10) + else + to_chat(L, SPAN_WARNING("The ship inclines beneath you, but the artificial gravity keeps you on your feet.")) shake_camera(L, 2 SECONDS, 10) sound_to(L, sound('sound/effects/combatroll.ogg')) last_combat_roll = world.time @@ -310,16 +313,19 @@ var/const/OVERMAP_SPEED_CONSTANT = (1 SECOND) update_icon() for(var/mob/living/L in living_mob_list) if(L.z in map_z) - to_chat(L, SPAN_DANGER("The ship rapidly turns under your feet!")) - if(!L.buckled_to) - L.Weaken(3) + if(!gravity_generator?.on && !L.anchored) + to_chat(L, SPAN_DANGER("The ship rapidly turns beneath you!")) + if(!L.buckled_to) + L.Weaken(3) + else + to_chat(L, SPAN_WARNING("The ship turns beneath you, but the artificial gravity keeps you on your feet.")) shake_camera(L, 1 SECOND, 2) L.playsound_simple(soundin = 'sound/machines/thruster.ogg', volume = 50) last_combat_turn = world.time /obj/effect/overmap/visitable/ship/signal_hit(var/list/hit_data) for(var/obj/machinery/computer/ship/targeting/TR in consoles) - TR.visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] Hit confirmed on [hit_data["target_name"]] in [hit_data["target_area"]] at coordinates [hit_data["coordinates"]]."), range = 2) + TR.visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(TR)))] Hit confirmed on [hit_data["target_name"]] in [hit_data["target_area"]] at coordinates [hit_data["coordinates"]]."), range = 2) #undef MOVING #undef SANITIZE_SPEED diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index d520c03f74a..466ff214e59 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -135,6 +135,7 @@ for(var/obj/machinery/gravity_generator/part/O in parts) O.main_part = null qdel(O) + linked.gravity_generator = null return ..() /obj/machinery/gravity_generator/main/proc/eventshutofftoggle() // Used by the gravity event. Bypasses charging and all of that stuff. @@ -450,7 +451,15 @@ . = ..() soundloop = new(src, start_immediately = FALSE) addtimer(CALLBACK(src, .proc/updateareas), 10) - return + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/gravity_generator/main/LateInitialize() + if(current_map.use_overmap && !linked) + var/my_sector = map_sectors["[z]"] + if (istype(my_sector, /obj/effect/overmap/visitable)) + attempt_hook_up(my_sector) + if(linked) + linked.gravity_generator = src /obj/machinery/gravity_generator/main/proc/updateareas() for(var/area/A in all_areas) diff --git a/html/changelogs/mattatlas-gravitygen.yml b/html/changelogs/mattatlas-gravitygen.yml new file mode 100644 index 00000000000..af2c47215bc --- /dev/null +++ b/html/changelogs/mattatlas-gravitygen.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: MattAtlas, Wildkins + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "You are no longer affected by ship maneuvers if there is an active gravity generator." + - bugfix: "AIs no longer get thrown around by ship maneuvers."