From 1d22a745e4b5efbc8f63c72feb7d11e11b9fa139 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sun, 19 Apr 2020 23:37:10 -0400 Subject: [PATCH] Add Gravity Generator, place on tether, update events --- .../admin/secrets/random_events/gravity_vr.dm | 34 + code/modules/events/gravity_vr.dm | 38 + .../event2/events/everyone/gravity_vr.dm | 45 + code/modules/power/gravitygenerator_vr.dm | 441 +++++ icons/obj/machines/gravity_generator.dmi | Bin 0 -> 37203 bytes maps/tether/tether-05-station1.dmm | 1726 ++++++++++++++--- maps/tether/tether_areas.dm | 6 + nano/templates/gravity_generator.tmpl | 45 + vorestation.dme | 8 +- 9 files changed, 2064 insertions(+), 279 deletions(-) create mode 100644 code/modules/admin/secrets/random_events/gravity_vr.dm create mode 100644 code/modules/events/gravity_vr.dm create mode 100644 code/modules/gamemaster/event2/events/everyone/gravity_vr.dm create mode 100644 code/modules/power/gravitygenerator_vr.dm create mode 100644 icons/obj/machines/gravity_generator.dmi create mode 100644 nano/templates/gravity_generator.tmpl diff --git a/code/modules/admin/secrets/random_events/gravity_vr.dm b/code/modules/admin/secrets/random_events/gravity_vr.dm new file mode 100644 index 0000000000..fc0c854c19 --- /dev/null +++ b/code/modules/admin/secrets/random_events/gravity_vr.dm @@ -0,0 +1,34 @@ +/********** +* Gravity * +**********/ +/datum/admin_secret_item/random_event/gravity + name = "Toggle Station Artificial Gravity" + +/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) + if(!(ticker && ticker.mode)) + return 0 + + return ..() + +/datum/admin_secret_item/random_event/gravity/execute(var/mob/user) + . = ..() + if(!.) + return + + gravity_is_on = !gravity_is_on + for(var/obj/machinery/gravity_generator/main/GG in machines) + if(GG.z in using_map.station_levels) + GG.breaker = gravity_is_on + GG.set_power() + GG.charge_count = gravity_is_on ? 90 : 10 + + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Grav") + if(gravity_is_on) + log_admin("[key_name(user)] toggled gravity on.", 1) + message_admins("[key_name_admin(user)] toggled gravity on.", 1) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") + else + log_admin("[key_name(user)] toggled gravity off.", 1) + message_admins("[key_name_admin(usr)] toggled gravity off.", 1) + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") diff --git a/code/modules/events/gravity_vr.dm b/code/modules/events/gravity_vr.dm new file mode 100644 index 0000000000..314a23a3aa --- /dev/null +++ b/code/modules/events/gravity_vr.dm @@ -0,0 +1,38 @@ +/datum/event/gravity + announceWhen = 5 + var/list/zLevels + var/list/generators = list() + +/datum/event/gravity/setup() + endWhen = rand(5 MINUTES, 20 MINUTES) + // Setup which levels we will disrupt gravit on. + zLevels = using_map.station_levels.Copy() + for(var/datum/planet/P in SSplanets.planets) + zLevels -= P.expected_z_levels + +/datum/event/gravity/announce() + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") + +/datum/event/gravity/start() + gravity_is_on = 0 + + for(var/obj/machinery/gravity_generator/main/GG in machines) + if((GG.z in zLevels) && GG.on) + generators += GG + GG.breaker = FALSE + GG.set_power() + GG.charge_count = 10 + +/datum/event/gravity/end() + gravity_is_on = 1 + + var/did_anything = FALSE + for(var/obj/machinery/gravity_generator/main/GG in generators) + if(!GG.on) + GG.breaker = TRUE + GG.set_power() + GG.charge_count = 90 + did_anything = TRUE + + if(did_anything) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") diff --git a/code/modules/gamemaster/event2/events/everyone/gravity_vr.dm b/code/modules/gamemaster/event2/events/everyone/gravity_vr.dm new file mode 100644 index 0000000000..bb3b824d98 --- /dev/null +++ b/code/modules/gamemaster/event2/events/everyone/gravity_vr.dm @@ -0,0 +1,45 @@ +/datum/event2/meta/gravity + name = "gravity failure" + departments = list(DEPARTMENT_EVERYONE) + chaos = 20 + chaotic_threshold = EVENT_CHAOS_THRESHOLD_LOW_IMPACT + reusable = TRUE + event_type = /datum/event2/event/gravity + +/datum/event2/meta/gravity/get_weight() + return (20 + (metric.count_people_in_department(DEPARTMENT_EVERYONE) * 20)) / (times_ran + 1) + + + + +/datum/event2/event/gravity + length_lower_bound = 5 MINUTES + length_upper_bound = 20 MINUTES + var/list/generators = list() + +/datum/event2/event/gravity/announce() + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") + +/datum/event2/event/gravity/start() + gravity_is_on = 0 + + for(var/obj/machinery/gravity_generator/main/GG in machines) + if((GG.z in get_location_z_levels()) && GG.on) + generators += GG + GG.breaker = FALSE + GG.set_power() + GG.charge_count = 10 + +/datum/event2/event/gravity/end() + gravity_is_on = 1 + + var/did_anything = FALSE + for(var/obj/machinery/gravity_generator/main/GG in generators) + if(!GG.on) + GG.breaker = TRUE + GG.set_power() + GG.charge_count = 90 + did_anything = TRUE + + if(did_anything) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") \ No newline at end of file diff --git a/code/modules/power/gravitygenerator_vr.dm b/code/modules/power/gravitygenerator_vr.dm new file mode 100644 index 0000000000..ae677eaf70 --- /dev/null +++ b/code/modules/power/gravitygenerator_vr.dm @@ -0,0 +1,441 @@ + +GLOBAL_LIST_EMPTY(gravity_generators) + +// +// Gravity Generator +// + +#define POWER_IDLE 0 +#define POWER_UP 1 +#define POWER_DOWN 2 + +#define GRAV_NEEDS_SCREWDRIVER 0 +#define GRAV_NEEDS_WELDING 1 +#define GRAV_NEEDS_PLASTEEL 2 +#define GRAV_NEEDS_WRENCH 3 + +// +// Abstract Generator +// + +/obj/machinery/gravity_generator + name = "gravitational generator" + desc = "A device which produces a graviton field when set up." + icon = 'icons/obj/machines/gravity_generator.dmi' + anchored = TRUE + density = TRUE + use_power = USE_POWER_OFF + var/sprite_number = 0 + + pixel_y = 16 + +/obj/machinery/gravity_generator/ex_act(severity, target) + if(severity == 1) // Very sturdy. + set_broken() + +/obj/machinery/gravity_generator/blob_act(obj/structure/blob/B) + if(prob(20)) + set_broken() + +/obj/machinery/gravity_generator/tesla_act(power, tesla_flags) + ..() + qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over + +/obj/machinery/gravity_generator/update_icon() + icon_state = "[get_status()]_[sprite_number]" + +/obj/machinery/gravity_generator/proc/get_status() + return "off" + +// You aren't allowed to move. +/obj/machinery/gravity_generator/Move() + . = ..() + qdel(src) + +/obj/machinery/gravity_generator/proc/set_broken() + stat |= BROKEN + +/obj/machinery/gravity_generator/proc/set_fix() + stat &= ~BROKEN + +/obj/machinery/gravity_generator/part/Destroy() + if(main_part) + qdel(main_part) + set_broken() + return ..() + +// +// Part generator which is mostly there for looks +// + +/obj/machinery/gravity_generator/part + var/obj/machinery/gravity_generator/main/main_part = null + +/obj/machinery/gravity_generator/part/attackby(obj/item/I, mob/user, params) + return main_part.attackby(I, user) + +/obj/machinery/gravity_generator/part/get_status() + return main_part?.get_status() + +/obj/machinery/gravity_generator/part/attack_hand(mob/user) + return main_part.attack_hand(user) + +/obj/machinery/gravity_generator/part/set_broken() + ..() + if(main_part && !(main_part.stat & BROKEN)) + main_part.set_broken() + +// +// Generator which spawns with the station. +// + +/obj/machinery/gravity_generator/main/station/Initialize() + . = ..() + setup_parts() + middle.add_overlay("activated") + use_power = USE_POWER_ACTIVE + +// +// Generator an admin can spawn +// +/obj/machinery/gravity_generator/main/station/admin + use_power = USE_POWER_OFF + +// +// Main Generator with the main code +// + +/obj/machinery/gravity_generator/main + icon_state = "on_8" + idle_power_usage = 0 + active_power_usage = 3000 + power_channel = ENVIRON + sprite_number = 8 + use_power = USE_POWER_IDLE + + var/on = TRUE + var/breaker = TRUE + var/list/parts = list() + var/obj/middle = null + var/charging_state = POWER_IDLE + var/charge_count = 100 + var/current_overlay = null + var/broken_state = 0 + var/setting = 1 //Gravity value when on + var/list/levels = list() + var/list/areas = list() + +/obj/machinery/gravity_generator/main/Initialize() + . = ..() + update_list() + update_areas() + +/obj/machinery/gravity_generator/main/set_fix() + . = ..() + update_list() + update_areas() + +/obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts. + investigate_log("was destroyed!", "gravity") + on = FALSE + update_list() + if(!gravity_in_level()) + update_gravity(FALSE) + for(var/obj/machinery/gravity_generator/part/O in parts) + O.main_part = null + if(!QDESTROYING(O)) + qdel(O) + return ..() + +/obj/machinery/gravity_generator/main/proc/setup_parts() + var/turf/our_turf = get_turf(src) + // 9x9 block obtained from the bottom middle of the block + var/list/spawn_turfs = block(locate(our_turf.x - 1, our_turf.y + 2, our_turf.z), locate(our_turf.x + 1, our_turf.y, our_turf.z)) + var/count = 10 + for(var/turf/T in spawn_turfs) + count-- + if(T == our_turf) // Skip our turf. + continue + var/obj/machinery/gravity_generator/part/part = new(T) + if(count == 5) // Middle + middle = part + if(count <= 3) // Their sprite is the top part of the generator + part.density = FALSE + part.plane = MOB_PLANE + part.layer = ABOVE_MOB_LAYER + part.sprite_number = count + part.main_part = src + parts += part + part.update_icon() + +/obj/machinery/gravity_generator/main/proc/connected_parts() + return parts.len == 8 + +/obj/machinery/gravity_generator/main/set_broken() + ..() + for(var/obj/machinery/gravity_generator/M in parts) + if(!(M.stat & BROKEN)) + M.set_broken() + middle.cut_overlays() + charge_count = 0 + breaker = FALSE + set_power() + set_state(0) + investigate_log("has broken down.", "gravity") + +/obj/machinery/gravity_generator/main/set_fix() + ..() + for(var/obj/machinery/gravity_generator/M in parts) + if(M.stat & BROKEN) + M.set_fix() + broken_state = FALSE + update_icon() + set_power() + +// Interaction + +// Fixing the gravity generator. +/obj/machinery/gravity_generator/main/attackby(obj/item/I, mob/user, params) + switch(broken_state) + if(GRAV_NEEDS_SCREWDRIVER) + if(I.is_screwdriver()) + to_chat(user, "You secure the screws of the framework.") + playsound(src, I.usesound, 75, 1) + broken_state++ + update_icon() + return + if(GRAV_NEEDS_WELDING) + if(I.is_welder()) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + to_chat(user, "You mend the damaged framework.") + broken_state++ + update_icon() + return + if(GRAV_NEEDS_PLASTEEL) + if(istype(I, /obj/item/stack/material/plasteel)) + var/obj/item/stack/material/plasteel/PS = I + if(PS.get_amount() >= 10) + PS.use(10) + to_chat(user, "You add the plating to the framework.") + playsound(src.loc, 'sound/machines/click.ogg', 75, 1) + broken_state++ + update_icon() + else + to_chat(user, "You need 10 sheets of plasteel!") + return + if(GRAV_NEEDS_WRENCH) + if(I.is_wrench()) + to_chat(user, "You secure the plating to the framework.") + playsound(src, I.usesound, 75, 1) + set_fix() + return + return ..() + +/obj/machinery/gravity_generator/main/attack_hand(mob/user) + if((. = ..())) + return + if(CanUseTopic(user, global.default_state) > STATUS_CLOSE) + ui_interact(user) + return TRUE + +/obj/machinery/gravity_generator/main/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] + + data["breaker"] = breaker + data["charge_count"] = charge_count + data["charging_state"] = charging_state + data["on"] = on + data["operational"] = (stat & BROKEN) ? FALSE : TRUE + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "gravity_generator.tmpl", src.name, 500, 400) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/gravity_generator/main/Topic(href, href_list, datum/topic_state/state = default_state) + if((. = ..())) + return + + if(href_list["gentoggle"]) + breaker = !breaker + investigate_log("was toggled [breaker ? "ON" : "OFF"] by [key_name(usr)].", "gravity") + set_power() + return TOPIC_REFRESH + +// Power and Icon States + +/obj/machinery/gravity_generator/main/power_change() + ..() + investigate_log("has [stat & NOPOWER ? "lost" : "regained"] power.", "gravity") + set_power() + +/obj/machinery/gravity_generator/main/get_status() + if(stat & BROKEN) + return "fix[min(broken_state, 3)]" + return on || charging_state != POWER_IDLE ? "on" : "off" + +// Set the charging state based on power/breaker. +/obj/machinery/gravity_generator/main/proc/set_power() + var/new_state = FALSE + if(stat & (NOPOWER|BROKEN) || !breaker) + new_state = FALSE + else if(breaker) + new_state = TRUE + + charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation. + investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", "gravity") + update_icon() + +// Set the state of the gravity. +/obj/machinery/gravity_generator/main/proc/set_state(new_state) + charging_state = POWER_IDLE + on = new_state + use_power = on ? USE_POWER_ACTIVE : USE_POWER_IDLE + // Sound the alert if gravity was just enabled or disabled. + var/alert = FALSE + if(SSticker.IsRoundInProgress()) + if(on) // If we turned on and the game is live. + if(gravity_in_level() == FALSE) + alert = TRUE + investigate_log("was brought online and is now producing gravity for this level.", "gravity") + message_admins("The gravity generator was brought online [ADMIN_JMP(src)]") + else + if(gravity_in_level() == TRUE) + alert = TRUE + investigate_log("was brought offline and there is now no gravity for this level.", "gravity") + message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_JMP(src)]") + + update_list() + update_gravity(on) + update_icon() + src.updateUsrDialog() + if(alert) + shake_everyone() + +// Charge/Discharge and turn on/off gravity when you reach 0/100 percent. +// Also emit radiation and handle the overlays. +/obj/machinery/gravity_generator/main/process() + if(stat & BROKEN) + return + if(charging_state != POWER_IDLE) + if(charging_state == POWER_UP && charge_count >= 100) + set_state(1) + else if(charging_state == POWER_DOWN && charge_count <= 0) + set_state(0) + else + if(charging_state == POWER_UP) + charge_count += 2 + else if(charging_state == POWER_DOWN) + charge_count -= 2 + + if(charge_count % 4 == 0 && prob(75)) // Let them know it is charging/discharging. + playsound(src.loc, 'sound/effects/empulse.ogg', 100, 1) + + updateDialog() + if(prob(25)) // To help stop "Your clothes feel warm." spam. + pulse_radiation() + + var/overlay_state = null + switch(charge_count) + if(0 to 20) + overlay_state = null + if(21 to 40) + overlay_state = "startup" + if(41 to 60) + overlay_state = "idle" + if(61 to 80) + overlay_state = "activating" + if(81 to 100) + overlay_state = "activated" + + if(overlay_state != current_overlay) + if(middle) + middle.cut_overlays() + if(overlay_state) + middle.add_overlay(overlay_state) + current_overlay = overlay_state + + +/obj/machinery/gravity_generator/main/proc/pulse_radiation() + SSradiation.radiate(src, 200) + +/obj/machinery/gravity_generator/main/proc/update_gravity(var/on) + for(var/area/A in src.areas) + A.gravitychange(on) + +// Shake everyone on the z level to let them know that gravity was enagaged/disenagaged. +/obj/machinery/gravity_generator/main/proc/shake_everyone() + var/sound/alert_sound = sound('sound/effects/alert.ogg') + for(var/i in player_list) + var/mob/M = i + if(!(M.z in levels)) + continue + M.update_gravity(M.mob_has_gravity()) + if(M.client) + shake_camera(M, 15, 1) + M.playsound_local(src, null, 100, 1, 0.5, S = alert_sound) + +/obj/machinery/gravity_generator/main/proc/gravity_in_level() + var/my_z = get_z(src) + if(!my_z) + return FALSE + if(GLOB.gravity_generators["[my_z]"]) + return length(GLOB.gravity_generators["[my_z]"]) + return FALSE + +/obj/machinery/gravity_generator/main/proc/update_list() + levels.Cut() + var/my_z = get_z(src) + + //Actually doing it special this time instead of letting using_map decide + if(using_map.use_overmap) + var/obj/effect/overmap/visitable/S = get_overmap_sector(my_z) + if(S) + levels = S.get_space_zlevels() //Just the spacey ones + else + levels = GetConnectedZlevels(my_z) + else + levels = GetConnectedZlevels(my_z) + + for(var/z in levels) + if(!GLOB.gravity_generators["[z]"]) + GLOB.gravity_generators["[z]"] = list() + if(on) + GLOB.gravity_generators["[z]"] |= src + else + GLOB.gravity_generators["[z]"] -= src + +/obj/machinery/gravity_generator/main/proc/update_areas() + areas.Cut() + for(var/area/A) + if(A.z in levels) + areas += A + +// Misc +/* +/obj/item/paper/guides/jobs/engi/gravity_gen + name = "paper- 'Generate your own gravity!'" + info = {"

Gravity Generator Instructions For Dummies

+

Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of + energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator + will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING.

+
+

It blew up!

+

Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then + please proceed to panic; otherwise follow these steps.

    +
  1. Secure the screws of the framework with a screwdriver.
  2. +
  3. Mend the damaged framework with a welding tool.
  4. +
  5. Add additional plasteel plating.
  6. +
  7. Secure the additional plating with a wrench.
"} +*/ +#undef POWER_IDLE +#undef POWER_UP +#undef POWER_DOWN + +#undef GRAV_NEEDS_SCREWDRIVER +#undef GRAV_NEEDS_WELDING +#undef GRAV_NEEDS_PLASTEEL +#undef GRAV_NEEDS_WRENCH diff --git a/icons/obj/machines/gravity_generator.dmi b/icons/obj/machines/gravity_generator.dmi new file mode 100644 index 0000000000000000000000000000000000000000..69395034dc8401a1f56d3d41d2109093e9fc0b40 GIT binary patch literal 37203 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 O0000

+
+ Breaker Setting: +
+
+ {{if data.breaker}} + Generator Enabled + {{else}} + Generator Disabled + {{/if}} +
+
+
+
+ Charge Mode: +
+
+ {{if (data.breaker && data.charge_count < 100)}} + Generator CHARGING + {{else (data.breaker && data.charge_count >= 100)}} + Generator Running + {{else (!data.breaker && data.charge_count > 0)}} + Generator DISCHARGING + {{else}} + Generator Offline + {{/if}} +
+
+
+
+ Charge Status: +
+
+ {{:data.charge_count}}% +
+
+ +
+
+
+ {{:helper.link('Toggle Breaker', 'alert', {'gentoggle' : 1}, null)}} +
+
+
\ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index a7b4957d8b..21aa864cef 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1544,7 +1544,7 @@ #include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm" #include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm" #include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm" -#include "code\modules\admin\secrets\random_events\gravity.dm" +#include "code\modules\admin\secrets\random_events\gravity_vr.dm" #include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm" #include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm" #include "code\modules\admin\verbs\adminhelp.dm" @@ -1954,7 +1954,7 @@ #include "code\modules\events\event_container_vr.dm" #include "code\modules\events\event_dynamic.dm" #include "code\modules\events\event_manager.dm" -#include "code\modules\events\gravity.dm" +#include "code\modules\events\gravity_vr.dm" #include "code\modules\events\grid_check.dm" #include "code\modules\events\grubinfestation_vr.dm" #include "code\modules\events\ian_storm_vr.dm" @@ -2073,7 +2073,7 @@ #include "code\modules\gamemaster\event2\events\engineering\window_break.dm" #include "code\modules\gamemaster\event2\events\everyone\comms_blackout.dm" #include "code\modules\gamemaster\event2\events\everyone\electrical_fault.dm" -#include "code\modules\gamemaster\event2\events\everyone\gravity.dm" +#include "code\modules\gamemaster\event2\events\everyone\gravity_vr.dm" #include "code\modules\gamemaster\event2\events\everyone\infestation.dm" #include "code\modules\gamemaster\event2\events\everyone\pda_spam.dm" #include "code\modules\gamemaster\event2\events\everyone\radiation_storm.dm" @@ -2966,7 +2966,7 @@ #include "code\modules\power\fractal_reactor.dm" #include "code\modules\power\generator.dm" #include "code\modules\power\generator_type2.dm" -#include "code\modules\power\gravitygenerator.dm" +#include "code\modules\power\gravitygenerator_vr.dm" #include "code\modules\power\grid_checker.dm" #include "code\modules\power\lighting.dm" #include "code\modules\power\lighting_vr.dm"