From 311cdae455b156d2df776402c93a918173566889 Mon Sep 17 00:00:00 2001
From: GDN <96800819+GDNgit@users.noreply.github.com>
Date: Fri, 20 Jan 2023 17:59:35 -0600
Subject: [PATCH] Converts some borg equipment to radial menus (#20044)
* Borg stuff radial menus; I hate borg hypos
* sneaky
* borghypo can be it's own thing
* forgot ya
* ryan's review
---
code/game/objects/items/weapons/RSF.dm | 145 +++++++++---------
.../mob/living/silicon/robot/robot_modules.dm | 4 +-
code/modules/mob/living/silicon/silicon.dm | 17 +-
.../reagents/reagent_containers/borghydro.dm | 5 +-
4 files changed, 88 insertions(+), 83 deletions(-)
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index 72e851fe55b..c74d6321927 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -1,7 +1,6 @@
-/*
-CONTAINS:
-RSF
-*/
+#define POWER_NONE 0
+#define POWER_LOW 50
+#define POWER_HIGH 4000
/obj/item/rsf
name = "\improper Rapid-Service-Fabricator"
@@ -12,85 +11,83 @@ RSF
opacity = FALSE
density = FALSE
anchored = FALSE
- var/matter = 0
- var/mode = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0)
w_class = WEIGHT_CLASS_NORMAL
- var/list/configured_items = list()
+ var/atom/currently_dispensing
+ var/power_mode = POWER_NONE
-/obj/item/rsf/New()
- ..()
- desc = "A RSF. It currently holds [matter]/30 fabrication-units."
- // configured_items[ID_NUMBER] = list("Human-readable name", price in energy, /type/path)
- configured_items[++configured_items.len] = list("Drinking Glass", 50, /obj/item/reagent_containers/food/drinks/drinkingglass)
- configured_items[++configured_items.len] = list("Paper", 50, /obj/item/paper)
- configured_items[++configured_items.len] = list("Pen", 50, /obj/item/pen)
- configured_items[++configured_items.len] = list("Dice Pack", 50, /obj/item/storage/pill_bottle/dice)
- configured_items[++configured_items.len] = list("Cigarette", 50, /obj/item/clothing/mask/cigarette)
- configured_items[++configured_items.len] = list("Snack - Newdles", 4000, /obj/item/reagent_containers/food/snacks/chinese/newdles)
- configured_items[++configured_items.len] = list("Snack - Donut", 4000, /obj/item/reagent_containers/food/snacks/donut)
- configured_items[++configured_items.len] = list("Snack - Chicken Soup", 4000, /obj/item/reagent_containers/food/drinks/chicken_soup)
- configured_items[++configured_items.len] = list("Snack - Tofu Burger", 4000, /obj/item/reagent_containers/food/snacks/tofuburger)
-
- update_icon(UPDATE_OVERLAYS)
-
-/obj/item/rsf/attackby(obj/item/W as obj, mob/user as mob, params)
- ..()
- if(istype(W, /obj/item/rcd_ammo))
- if((matter + 10) > 30)
- to_chat(user, "The RSF can't hold any more matter.")
- return
- qdel(W)
- matter += 10
- playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
- to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
- desc = "A RSF. It currently holds [matter]/30 fabrication-units."
- update_icon(UPDATE_OVERLAYS)
- return
-
-/obj/item/rsf/attack_self(mob/user as mob)
- playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- if(mode == configured_items.len)
- mode = 1
+/obj/item/rsf/attack_self(mob/user)
+ playsound(loc, 'sound/effects/pop.ogg', 50, 0)
+ if(!currently_dispensing)
+ to_chat(user, "Choose an item to dispense!")
else
- mode++
- to_chat(user, "Changed dispensing mode to '" + configured_items[mode][1] + "'")
-
-
-/obj/item/rsf/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity) return
- if(!(istype(A, /obj/structure/table) || isfloorturf(A)))
+ to_chat(user, "You are currently dispensing a [initial(currently_dispensing.name)].")
+ var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/food/drinks/drinkingglass,
+ "Paper" = /obj/item/paper,
+ "Pen" = /obj/item/pen,
+ "Dice Pack" = /obj/item/storage/pill_bottle/dice,
+ "Cigarette" = /obj/item/clothing/mask/cigarette,
+ "Newdles" = /obj/item/reagent_containers/food/snacks/chinese/newdles,
+ "Donut" = /obj/item/reagent_containers/food/snacks/donut,
+ "Chicken Soup" = /obj/item/reagent_containers/food/drinks/chicken_soup,
+ "Tofu Burger" = /obj/item/reagent_containers/food/snacks/tofuburger)
+ var/static/list/rsf_icons = list("Drinking Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "glass_empty"),
+ "Paper" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "paper"),
+ "Pen" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "pen"),
+ "Dice Pack" = image(icon = 'icons/obj/dice.dmi', icon_state = "dicebag"),
+ "Cigarette" = image(icon = 'icons/obj/clothing/masks.dmi', icon_state = "cigon"),
+ "Newdles" = image(icon = 'icons/obj/food/food.dmi', icon_state = "chinese3"),
+ "Donut" = image(icon = 'icons/obj/food/food.dmi', icon_state = "donut1"),
+ "Chicken Soup" = image(icon = 'icons/obj/drinks.dmi', icon_state = "soupcan"),
+ "Tofu Burger" = image(icon = 'icons/obj/food/food.dmi', icon_state = "tofuburger"))
+ var/rsf_radial_choice = show_radial_menu(user, src, rsf_icons)
+ if(user.stat || !in_range(user, src))
return
- var/spawn_location
- var/turf/T = get_turf(A)
- if(istype(T) && !T.density)
- spawn_location = T
- else
- to_chat(user, "The RSF can only create service items on tables, or floors.")
+ currently_dispensing = rsf_items[rsf_radial_choice]
+ switch(rsf_radial_choice)
+ if("Drinking Glass")
+ power_mode = POWER_LOW
+ if("Paper")
+ power_mode = POWER_LOW
+ if("Pen")
+ power_mode = POWER_LOW
+ if("Dice Pack")
+ power_mode = POWER_LOW
+ if("Cigarette")
+ power_mode = POWER_LOW
+ if("Newdles")
+ power_mode = POWER_HIGH
+ if("Donut")
+ power_mode = POWER_HIGH
+ if("Chicken Soup")
+ power_mode = POWER_HIGH
+ if("Tofu Burger")
+ power_mode = POWER_HIGH
+ if(currently_dispensing)
+ to_chat(user, "Your RSF has been configured to now dispense a [initial(currently_dispensing.name)]!")
+ return TRUE
+
+
+/obj/item/rsf/afterattack(atom/A, mob/user, proximity)
+ if(!currently_dispensing)
+ return
+ if(!proximity)
+ return
+ if(!istype(A, /obj/structure/table) && !isfloorturf(A))
return
if(isrobot(user))
- var/mob/living/silicon/robot/engy = user
- if(!engy.cell.use(configured_items[mode][2]))
+ var/mob/living/silicon/robot/energy_check = user
+ if(!energy_check.cell.use(power_mode))
to_chat(user, "Insufficient energy.")
flick("[icon_state]_empty", src)
return
- else
- if(!matter)
- to_chat(user, "Insufficient matter.")
- flick("[icon_state]_empty", src)
- return
- matter--
- to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
- desc = "A RSF. It currently holds [matter]/30 fabrication-units."
-
- to_chat(user, "Dispensing " + configured_items[mode][1] + "...")
+ var/turf/T = get_turf(A)
+ if(!istype(T) || T.density)
+ to_chat(user, "The RSF can only create service items on tables, or floors.")
+ return
playsound(loc, 'sound/machines/click.ogg', 10, 1)
- update_icon(UPDATE_OVERLAYS)
- var/type_path = configured_items[mode][3]
- new type_path(spawn_location)
+ new currently_dispensing(T)
-/obj/item/rsf/update_overlays()
- ..()
- var/ratio = CEILING((matter / 30) * 10, 1)
- cut_overlays()
- add_overlay("[icon_state]_charge[ratio]")
+#undef POWER_NONE
+#undef POWER_LOW
+#undef POWER_HIGH
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index f5054e8ca2f..3b2bd0a6942 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -495,7 +495,7 @@
/obj/item/instrument/piano_synth,
/obj/item/healthanalyzer/advanced,
/obj/item/reagent_scanner/adv,
- /obj/item/rsf/cyborg,
+ /obj/item/rsf,
/obj/item/reagent_containers/dropper/cyborg,
/obj/item/lighter/zippo,
/obj/item/storage/bag/tray/cyborg,
@@ -507,8 +507,6 @@
/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer
)
-/obj/item/rsf/cyborg
- matter = 30
// This is a special type of beer given when emagged, one sip and the target falls asleep.
/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index dbf61bd4bf9..43f99c93361 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -364,7 +364,20 @@
/mob/living/silicon/proc/toggle_sensor_mode()
- var/sensor_type = input("Please select sensor type.", "Sensor Integration", null) in list("Security", "Medical","Diagnostic","Disable")
+ to_chat(src, "Please select sensor type.")
+ var/static/list/sensor_choices = list("Security" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "securityhud"),
+ "Medical" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "healthhud"),
+ "Diagnostic" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "diagnostichud"),
+ "None" = image(icon = 'icons/mob/screen_gen.dmi', icon_state = "x"))
+ var/user_loc
+ if(isAI(src))
+ var/mob/living/silicon/ai/eyeloc = src
+ user_loc = eyeloc.eyeobj
+ else
+ user_loc = src
+ var/sensor_type = show_radial_menu(src, user_loc, sensor_choices)
+ if(!sensor_type)
+ return
remove_med_sec_hud()
switch(sensor_type)
if("Security")
@@ -376,7 +389,7 @@
if("Diagnostic")
add_diag_hud()
to_chat(src, "Robotics diagnostic overlay enabled.")
- if("Disable")
+ if("None")
to_chat(src, "Sensor augmentations disabled.")
/mob/living/silicon/adjustToxLoss(amount)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index e638ad1327b..223c1ecf143 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -14,10 +14,8 @@
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
var/bypass_protection = 0 //If the hypospray can go through armor or thick material
-
var/list/datum/reagents/reagent_list = list()
- var/list/reagent_ids = list("salglu_solution", "epinephrine", "spaceacillin", "charcoal", "hydrocodone")
- //var/list/reagent_ids = list("salbutamol", "silver_sulfadiazine", "styptic_powder", "charcoal", "epinephrine", "spaceacillin", "hydrocodone")
+ var/list/reagent_ids = list("salglu_solution", "epinephrine", "hydrocodone", "spaceacillin", "charcoal")
/obj/item/reagent_containers/borghypo/surgeon
reagent_ids = list("styptic_powder", "epinephrine", "salbutamol")
@@ -104,7 +102,6 @@
mode++
if(mode > reagent_list.len)
mode = 1
-
charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_ids[mode]]
to_chat(user, "Synthesizer is now producing '[R.name]'.")