From 766d59177603a9006115998a191a8dab51606af2 Mon Sep 17 00:00:00 2001 From: Ben <91219575+Ben10083@users.noreply.github.com> Date: Mon, 24 Jul 2023 18:20:36 -0400 Subject: [PATCH] Legalize Nuclear Bombs (Nuke fixes and QOL) (#3880) # About the pull request Fixes regular nuke that can be spawned by admins and adds ability to spawn a nuke via events panel. QOL for nuke UI # Explain why it's good for the game Allows admins to use default nuke (decrypted with 8 minute detonation timer) and lets them spawn a nuke via event panel. # Changelog :cl: fix: Non-techweb nuke now works properly. ui: Nuke timers now use minutes instead of seconds spellcheck: Nukes renamed to 'Encrypted' and 'Decrypted' nuke respectively. admin: Ability to spawn nuke added to event panel /:cl: --------- Co-authored-by: harryob --- code/datums/supply_packs/operations.dm | 4 ++-- code/game/machinery/nuclearbomb.dm | 3 ++- code/modules/admin/tabs/event_tab.dm | 24 +++++++++++++++++++ code/modules/admin/topic/topic_events.dm | 2 ++ .../cm_tech/techs/marine/tier4/nuke.dm | 7 +++--- tgui/packages/tgui/interfaces/NuclearBomb.js | 2 +- 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/code/datums/supply_packs/operations.dm b/code/datums/supply_packs/operations.dm index 610503d6c25d..6d5e5d14756c 100644 --- a/code/datums/supply_packs/operations.dm +++ b/code/datums/supply_packs/operations.dm @@ -94,7 +94,7 @@ group = "Operations" /datum/supply_packs/nuclearbomb - name = "Operational Nuke" + name = "Decrypted Operational Nuke" cost = 0 containertype = /obj/structure/machinery/nuclearbomb buyable = 0 @@ -102,7 +102,7 @@ iteration_needed = null /datum/supply_packs/technuclearbomb - name = "Intel Operational Nuke" + name = "Encrypted Operational Nuke" cost = 0 containertype = /obj/structure/machinery/nuclearbomb/tech buyable = 0 diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm index 6c0ec4cc0389..743f53e4f03b 100644 --- a/code/game/machinery/nuclearbomb.dm +++ b/code/game/machinery/nuclearbomb.dm @@ -12,7 +12,7 @@ var/bomb_set = FALSE var/timing = FALSE var/deployable = FALSE var/explosion_time = null - var/timeleft = 4800 + var/timeleft = 8 MINUTES var/safety = TRUE var/being_used = FALSE var/end_round = TRUE @@ -152,6 +152,7 @@ var/bomb_set = FALSE data["command_lockout"] = command_lockout data["allowed"] = allowed data["being_used"] = being_used + data["decryption_complete"] = TRUE //this is overriden by techweb nuke UI_data later, this just makes it default to true return data diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 89d709cbdda3..b9eb4fd47ea1 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -402,6 +402,29 @@ give_jelly_award(last_hive_checked, as_admin=TRUE) +/client/proc/give_nuke() + if(!check_rights(R_ADMIN)) + return + var/nuketype = "Decrypted Operational Nuke" + var/encrypt = tgui_alert(src, "Do you want the nuke to be already decrypted?", "Nuke Type", list("Encrypted", "Decrypted"), 20 SECONDS) + if(encrypt == "Encrypted") + nuketype = "Encrypted Operational Nuke" + var/prompt = tgui_alert(src, "THIS CAN BE USED TO END THE ROUND. Are you sure you want to spawn a nuke? The nuke will be put onto the ASRS Lift.", "DEFCON 1", list("No", "Yes"), 30 SECONDS) + if(prompt != "Yes") + return + + var/datum/supply_order/new_order = new() + new_order.ordernum = supply_controller.ordernum + supply_controller.ordernum++ + new_order.object = supply_controller.supply_packs[nuketype] + new_order.orderedby = MAIN_AI_SYSTEM + new_order.approvedby = MAIN_AI_SYSTEM + supply_controller.shoppinglist += new_order + + marine_announcement("A nuclear device has been supplied and will be delivered to requisitions via ASRS.", "NUCLEAR ARSENAL ACQUIRED", 'sound/misc/notice2.ogg') + message_admins("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") + log_game("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") + /client/proc/turn_everyone_into_primitives() var/random_names = FALSE if (alert(src, "Do you want to give everyone random numbered names?", "Confirmation", "Yes", "No") == "Yes") @@ -684,6 +707,7 @@ Misc
Award a medal
Award a royal jelly
+ Spawn a nuke
Toggle PMC gun restrictions
Turn everyone into monkies

diff --git a/code/modules/admin/topic/topic_events.dm b/code/modules/admin/topic/topic_events.dm index 1055d5e47879..3240bf947938 100644 --- a/code/modules/admin/topic/topic_events.dm +++ b/code/modules/admin/topic/topic_events.dm @@ -22,6 +22,8 @@ owner.award_medal() if("jelly") owner.award_jelly() + if("nuke") + owner.give_nuke() if("pmcguns") owner.toggle_gun_restrictions() if("monkify") diff --git a/code/modules/cm_tech/techs/marine/tier4/nuke.dm b/code/modules/cm_tech/techs/marine/tier4/nuke.dm index eb4e64b59951..441c9aba69fc 100644 --- a/code/modules/cm_tech/techs/marine/tier4/nuke.dm +++ b/code/modules/cm_tech/techs/marine/tier4/nuke.dm @@ -10,7 +10,7 @@ tier = /datum/tier/four announce_name = "NUCLEAR ARSENAL ACQUIRED" - announce_message = "A nuclear device has been purchased and will be delivered to requisitions via ASRS." + announce_message = "A nuclear device has been authorized and will be delivered to requisitions via ASRS." flags = TREE_FLAG_MARINE @@ -20,11 +20,12 @@ /datum/tech/nuke/on_unlock() . = ..() - var/datum/supply_order/new_order = new /datum/supply_order() + var/datum/supply_order/new_order = new() new_order.ordernum = supply_controller.ordernum supply_controller.ordernum++ - new_order.object = supply_controller.supply_packs["Intel Operational Nuke"] + new_order.object = supply_controller.supply_packs["Encrypted Operational Nuke"] new_order.orderedby = MAIN_AI_SYSTEM + new_order.approvedby = MAIN_AI_SYSTEM supply_controller.shoppinglist += new_order diff --git a/tgui/packages/tgui/interfaces/NuclearBomb.js b/tgui/packages/tgui/interfaces/NuclearBomb.js index b29bc17e0779..e49b958f7857 100644 --- a/tgui/packages/tgui/interfaces/NuclearBomb.js +++ b/tgui/packages/tgui/interfaces/NuclearBomb.js @@ -18,7 +18,7 @@ export const NuclearBomb = (_props, context) => { {data.decryption_complete ? 'Decryption complete.' : `Decryption time left : - ${data.decryption_time} seconds`} + ${data.decryption_time} minutes`}