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]'.")