From 32204eeafd64581af175d642c493d24d027b37a7 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 21 Apr 2024 13:11:37 +0200 Subject: [PATCH] some borg upgrade overhaul, power use function, bluespace pounce and some fixes (#15924) * some borg upgrade overhaul * . * adjust icon some * . * fixes the borg hud store icon breaking * refactor borg skill power usage, add bluespace pounce * . * . * copy paste mistakes... * first check distance then drain power on leap * small oversight in the calculation * comment * second silicon hud store icon case --- code/__defines/misc.dm | 4 +- code/__defines/mobs.dm | 1 + code/__defines/span_vr.dm | 6 + code/game/objects/items/robot/robot_items.dm | 8 ++ .../objects/items/robot/robot_upgrades.dm | 136 ++++++++++++++---- .../silicon/robot/dogborg/dog_modules_vr.dm | 38 +++-- .../mob/living/silicon/robot/inventory.dm | 21 ++- code/modules/mob/living/silicon/robot/life.dm | 4 + .../modules/mob/living/silicon/robot/robot.dm | 28 +++- .../mob/living/silicon/robot/robot_damage.dm | 8 +- code/modules/mob/mob.dm | 4 +- .../projectiles/guns/launcher/confetti.dm | 14 +- code/modules/research/prosfab_designs.dm | 25 ++++ icons/mob/dogborg_vr.dmi | Bin 35246 -> 36515 bytes 14 files changed, 242 insertions(+), 55 deletions(-) diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 22c43fa5747..38311fa289c 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -8,13 +8,15 @@ #define INVISIBILITY_LIGHTING 20 #define INVISIBILITY_LEVEL_ONE 35 #define INVISIBILITY_LEVEL_TWO 45 +#define INVISIBILITY_SHADEKIN 55 #define INVISIBILITY_OBSERVER 60 #define INVISIBILITY_EYE 61 #define SEE_INVISIBLE_LIVING 25 -#define SEE_INVISIBLE_NOLIGHTING 15 +#define SEE_INVISIBLE_NOLIGHTING 15 #define SEE_INVISIBLE_LEVEL_ONE 35 #define SEE_INVISIBLE_LEVEL_TWO 45 +#define SEE_INVISIBILITY_SHADEKIN 55 #define SEE_INVISIBLE_CULT 60 #define SEE_INVISIBLE_OBSERVER 61 diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index b8457de50bd..3bb8ebe6b0d 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -27,6 +27,7 @@ #define BORGTHERM 0x2 #define BORGXRAY 0x4 #define BORGMATERIAL 0x8 +#define BORGANOMALOUS 0x10 #define STANCE_ATTACK 11 // Backwards compatability #define STANCE_ATTACKING 12 // Ditto diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm index eaf45491cd3..49e4e0ef69d 100644 --- a/code/__defines/span_vr.dm +++ b/code/__defines/span_vr.dm @@ -52,6 +52,12 @@ #define span_reflex_shoot(str) ("" + str + "") +/* Vore messages */ + +#define span_vdanger(str) ("" + str + "") +#define span_vwarning(str) ("" + str + "") +#define span_vnotice(str) ("" + str + "") + /* Languages */ #define span_alien(str) ("" + str + "") diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index c7563b4412f..30ff96b052a 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -36,6 +36,8 @@ /obj/item/borg/sight/xray name = "\proper x-ray vision" sight_mode = BORGXRAY + icon_state = "night" + icon = 'icons/inventory/eyes/item.dmi' /obj/item/borg/sight/thermal @@ -57,6 +59,12 @@ icon_state = "material" icon = 'icons/inventory/eyes/item.dmi' +/obj/item/borg/sight/anomalous + name = "\proper anomaly vision" + sight_mode = BORGANOMALOUS + icon_state = "denight" + icon = 'icons/inventory/eyes/item.dmi' + /obj/item/borg/sight/hud name = "hud" var/obj/item/clothing/glasses/hud/hud = null diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index aba84bf0005..fe41bc658ff 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -18,6 +18,16 @@ return 1 return 0 +/obj/item/borg/upgrade/proc/generic_error(var/mob/living/silicon/robot/R, var/obj/item/borg/type) + type = lowertext(initial(type.name)) + to_chat(R, "Upgrade mounting error! No suitable hardpoint for \the \"[type]\" detected!") + to_chat(usr, "There's no mounting point for \the \"[type]\" module!") + +/obj/item/borg/upgrade/proc/software_error(var/mob/living/silicon/robot/R, var/obj/item/borg/type) + type = lowertext(initial(type.name)) + to_chat(R, "Upgrade installation error! Incompatibility with \the \"[type]\" detected!") + to_chat(usr, "\The \"[type]\" upgrade is not compatibile!") + /* ###################################################################################################### # Utility section. All reusable upgrades without lasting effects, like renaming, reset, etc. go here.# ######################################################################################################*/ @@ -252,8 +262,7 @@ if(..()) return 0 if(R.has_advanced_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module) @@ -272,8 +281,7 @@ if(..()) return 0 if(R.has_advanced_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/device/healthanalyzer/advanced(R.module) @@ -291,8 +299,7 @@ if(..()) return 0 if(R.has_advanced_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/gun/energy/sizegun/mounted(R.module) @@ -315,8 +322,7 @@ if(..()) return 0 if(!R.supports_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 var/obj/T = R.has_upgrade_module(/obj/item/device/dogborg/sleeper) @@ -350,8 +356,7 @@ if(..()) return 0 if(!R.supports_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 var/obj/T = R.has_upgrade_module(/obj/item/weapon/gun/energy/taser/mounted/cyborg) @@ -381,13 +386,11 @@ if(..()) return 0 if(!R.supports_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 if(R.has_restricted_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/storage/part_replacer/adv(R.module) @@ -406,13 +409,11 @@ if(..()) return 0 if(!R.supports_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 if(R.has_restricted_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/pickaxe/diamonddrill(R.module) @@ -431,13 +432,11 @@ if(..()) return 0 if(!R.supports_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 if(R.has_restricted_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module) @@ -462,9 +461,98 @@ if(..()) return 0 if(R.has_no_prod_upgrade(type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") + generic_error(R, type) return 0 R.module.modules += new/obj/item/weapon/gun/projectile/cyborgtoy(R.module) return 1 + +/obj/item/borg/upgrade/no_prod/vision_xray + name = "Robot x-ray vision module" + desc = "Vision alterantion software to add x-ray sight capabilities." + icon_state = "cyborg_upgrade5" + item_state = "cyborg_upgrade" + require_module = 1 + hidden_from_scan = 1 + +/obj/item/borg/upgrade/no_prod/vision_xray/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.has_no_prod_upgrade(type)) + software_error(R, type) + return 0 + + R.module.modules += new/obj/item/borg/sight/xray(R.module) + return 1 + +/obj/item/borg/upgrade/no_prod/vision_thermal + name = "Robot thermal vision module" + desc = "Vision alterantion software to add thermal sight capabilities." + icon_state = "cyborg_upgrade5" + item_state = "cyborg_upgrade" + require_module = 1 + hidden_from_scan = 1 + +/obj/item/borg/upgrade/no_prod/vision_thermal/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.has_no_prod_upgrade(type)) + software_error(R, type) + return 0 + + R.module.modules += new/obj/item/borg/sight/thermal(R.module) + return 1 + +/obj/item/borg/upgrade/no_prod/vision_meson + name = "Robot meson vision module" + desc = "Vision alterantion software to add meson sight capabilities." + icon_state = "cyborg_upgrade5" + item_state = "cyborg_upgrade" + require_module = 1 + hidden_from_scan = 1 + +/obj/item/borg/upgrade/no_prod/vision_meson/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.has_no_prod_upgrade(type)) + software_error(R, type) + return 0 + + R.module.modules += new/obj/item/borg/sight/meson(R.module) + return 1 + +/obj/item/borg/upgrade/no_prod/vision_material + name = "Robot material vision module" + desc = "Vision alterantion software to add material sight capabilities." + icon_state = "cyborg_upgrade5" + item_state = "cyborg_upgrade" + require_module = 1 + hidden_from_scan = 1 + +/obj/item/borg/upgrade/no_prod/vision_material/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.has_no_prod_upgrade(type)) + software_error(R, type) + return 0 + + R.module.modules += new/obj/item/borg/sight/material(R.module) + return 1 + +/obj/item/borg/upgrade/no_prod/vision_anomalous + name = "Robot anomalous vision module" + desc = "Vision alterantion software to add anomalous sight capabilities." + icon_state = "cyborg_upgrade5" + item_state = "cyborg_upgrade" + require_module = 1 + hidden_from_scan = 1 + +/obj/item/borg/upgrade/no_prod/vision_anomalous/action(var/mob/living/silicon/robot/R) + if(..()) return 0 + + if(R.has_no_prod_upgrade(type)) + software_error(R, type) + return 0 + + R.module.modules += new/obj/item/borg/sight/anomalous(R.module) + return 1 diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index c2d00548c16..c1439e71fec 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -297,7 +297,8 @@ if(src.emagged) var/mob/living/silicon/robot/R = user var/mob/living/L = target - if(R.cell.charge <= 666) + if(!R.use_direct_power(666, 100)) + to_chat(user, span_warning("Warning, low power detected. Aborting action.")) return L.Stun(1) L.Weaken(1) @@ -305,7 +306,6 @@ L.visible_message("[user] has shocked [L] with its tongue!", \ "[user] has shocked you with its tongue! You can feel the betrayal.") playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1) - R.cell.charge -= 666 else user.visible_message("\The [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!") playsound(src, 'sound/effects/attackblob.ogg', 50, 1) @@ -406,6 +406,7 @@ desc = "Leap at your target to momentarily stun them." force = 0 throwforce = 0 + var/bluespace = FALSE /obj/item/weapon/dogborg/pounce/New() ..() @@ -413,14 +414,16 @@ /obj/item/weapon/dogborg/pounce/attack_self(mob/user) var/mob/living/silicon/robot/R = user - R.leap() + R.leap(bluespace) -/mob/living/silicon/robot/proc/leap() +/mob/living/silicon/robot/proc/leap(var/bluespace = FALSE) if(last_special > world.time) to_chat(src, "Your leap actuators are still recharging.") return - if(cell.charge < 1000) + var/power_cost = bluespace ? 1000 : 750 + var/minimum_power = bluespace ? 2500 : 1000 + if(cell.charge < minimum_power) to_chat(src, "Cell charge too low to continue.") return @@ -429,7 +432,8 @@ return var/list/choices = list() - for(var/mob/living/M in view(3,src)) + var/leap_distance = bluespace ? 5 : 3 + for(var/mob/living/M in view(leap_distance,src)) if(!istype(M,/mob/living/silicon)) choices += M choices -= src @@ -438,7 +442,16 @@ if(!T || !src || src.stat) return - if(get_dist(get_turf(T), get_turf(src)) > 3) return + if(get_dist(get_turf(T), get_turf(src)) > leap_distance) return + + if(ishuman(T)) + var/mob/living/carbon/human/H = T + if(H.get_species() == SPECIES_SHADEKIN && (H.ability_flags & AB_PHASE_SHIFTED)) + power_cost *= 2 + + if(!use_direct_power(power_cost, minimum_power - power_cost)) + to_chat(src, span_warning("Warning, low power detected. Aborting action.")) + return if(last_special > world.time) return @@ -452,12 +465,16 @@ pixel_y = pixel_y + 10 src.visible_message("\The [src] leaps at [T]!") - src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src) + if(bluespace) + src.forceMove(get_turf(T)) + T.hitby(src) + else + src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src) playsound(src, 'sound/mecha/mechstep2.ogg', 50, 1) pixel_y = default_pixel_y - cell.charge -= 750 - sleep(5) + if(!bluespace) + sleep(5) if(status_flags & LEAPING) status_flags &= ~LEAPING @@ -470,6 +487,7 @@ if(H.species.lightweight == 1) H.Weaken(3) return + var/armor_block = run_armor_check(T, "melee") var/armor_soak = get_armor_soak(T, "melee") T.apply_damage(20, HALLOSS,, armor_block, armor_soak) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index de42bb8d171..98e91cdcdd9 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -51,6 +51,7 @@ module_state_3:loc = module module_state_3 = null inv3.icon_state = "inv3" + after_equip() update_icon() hud_used.update_robot_modules_display() @@ -84,6 +85,7 @@ module_state_3:loc = module module_state_3 = null inv3.icon_state = "inv3" + after_equip() update_icon() /mob/living/silicon/robot/proc/activated(obj/item/O) @@ -252,6 +254,23 @@ sight_mode |= module_state_3:sight_mode else to_chat(src, "You need to disable a module first!") + return + after_equip() + +/mob/living/silicon/robot/proc/after_equip() + if(sight_mode & BORGANOMALOUS) + var/obj/item/weapon/dogborg/pounce/pounce = has_upgrade_module(/obj/item/weapon/dogborg/pounce) + if(pounce) + pounce.name = "bluespace pounce" + pounce.icon_state = "bluespace_pounce" + pounce.bluespace = TRUE + else + var/obj/item/weapon/dogborg/pounce/pounce = has_upgrade_module(/obj/item/weapon/dogborg/pounce) + if(pounce) + pounce.name = initial(pounce.name) + pounce.icon_state = initial(pounce.icon_state) + pounce.desc = initial(pounce.desc) + pounce.bluespace = initial(pounce.bluespace) /mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands. W.loc = get_turf(src) @@ -271,4 +290,4 @@ if(module_state_2) . += module_state_2 if(module_state_3) - . += module_state_3 \ No newline at end of file + . += module_state_3 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index e69de8b3fdf..7bc8c4f7a2d 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -188,6 +188,10 @@ src.see_in_dark = 8 src.see_invisible = SEE_INVISIBLE_LEVEL_TWO fullbright = TRUE + else if (src.sight_mode & BORGANOMALOUS) + src.see_in_dark = 8 + src.see_invisible = INVISIBILITY_SHADEKIN + fullbright = TRUE else if (!seedarkness) src.sight &= ~SEE_MOBS src.sight &= ~SEE_TURFS diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 284331ce8cb..16615288388 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1304,6 +1304,20 @@ return 1 return 0 +// Function to directly drain power from the robot's cell, allows to set a minimum level beneath which +// abilities can no longer be used +/mob/living/silicon/robot/proc/use_direct_power(var/amount = 0, var/lower_limit = 0) + // No cell inserted + if(!cell) + return FALSE + + // Power cell does not have sufficient charge to remain above the power limit. + if(cell.charge - (amount + lower_limit) <= 0) + return FALSE + + cell.charge -= amount + return TRUE + /mob/living/silicon/robot/binarycheck() if(get_restraining_bolt()) return FALSE @@ -1444,7 +1458,7 @@ G.drop_item_nm() /mob/living/silicon/robot/disable_spoiler_vision() - if(sight_mode & (BORGMESON|BORGMATERIAL|BORGXRAY)) // Whyyyyyyyy have seperate defines. + if(sight_mode & (BORGMESON|BORGMATERIAL|BORGXRAY|BORGANOMALOUS)) // Whyyyyyyyy have seperate defines. var/i = 0 // Borg inventory code is very . . interesting and as such, unequiping a specific item requires jumping through some (for) loops. var/current_selection_index = get_selected_module() // Will be 0 if nothing is selected. @@ -1452,7 +1466,7 @@ i++ if(istype(thing, /obj/item/borg/sight)) var/obj/item/borg/sight/S = thing - if(S.sight_mode & (BORGMESON|BORGMATERIAL|BORGXRAY)) + if(S.sight_mode & (BORGMESON|BORGMATERIAL|BORGXRAY|BORGANOMALOUS)) select_module(i) uneq_active() @@ -1558,6 +1572,16 @@ /mob/living/silicon/robot/proc/has_no_prod_upgrade(var/given_type) if(given_type == /obj/item/borg/upgrade/no_prod/toygun) return has_upgrade_module(/obj/item/weapon/gun/projectile/cyborgtoy) + if(given_type == /obj/item/borg/upgrade/no_prod/vision_xray) + return has_upgrade_module(/obj/item/borg/sight/xray) + if(given_type == /obj/item/borg/upgrade/no_prod/vision_thermal) + return has_upgrade_module(/obj/item/borg/sight/thermal) + if(given_type == /obj/item/borg/upgrade/no_prod/vision_meson) + return has_upgrade_module(/obj/item/borg/sight/meson) + if(given_type == /obj/item/borg/upgrade/no_prod/vision_material) + return has_upgrade_module(/obj/item/borg/sight/material) + if(given_type == /obj/item/borg/upgrade/no_prod/vision_anomalous) + return has_upgrade_module(/obj/item/borg/sight/anomalous) return null /mob/living/silicon/robot/proc/has_upgrade(var/given_type) diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index 749a5d2c5d0..89d4a69c708 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -76,9 +76,7 @@ var/absorb_burn = burn*shield.shield_level var/cost = (absorb_brute+absorb_burn) * 25 - cell.charge -= cost - if(cell.charge <= 0) - cell.charge = 0 + if(!use_direct_power(cost, 200)) to_chat(src, "[span_red("Your shield has overloaded!")]") else brute -= absorb_brute @@ -123,9 +121,7 @@ var/absorb_burn = burn*shield.shield_level var/cost = (absorb_brute+absorb_burn) * 25 - cell.charge -= cost - if(cell.charge <= 0) - cell.charge = 0 + if(!use_direct_power(cost, 200)) to_chat(src, "[span_red("Your shield has overloaded!")]") else brute -= absorb_brute diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index a27d6b396e0..f8990712473 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1175,7 +1175,7 @@ if(client) if(a_intent == I_HELP || client.prefs.throwmode_loud) src.visible_message("[src] relaxes from their ready stance.","You relax from your ready stance.") - if(src.throw_icon) //in case we don't have the HUD and we use the hotkey + if(src.throw_icon && !issilicon(src)) //in case we don't have the HUD and we use the hotkey. Silicon use this for something else. Do not overwrite their HUD icon src.throw_icon.icon_state = "act_throw_off" /mob/proc/throw_mode_on() @@ -1186,7 +1186,7 @@ src.visible_message("[src] winds up to throw [get_active_hand()]!","You wind up to throw [get_active_hand()].") else src.visible_message("[src] looks ready to catch anything thrown at them!","You get ready to catch anything thrown at you.") - if(src.throw_icon) + if(src.throw_icon && !issilicon(src)) // Silicon use this for something else. Do not overwrite their HUD icon src.throw_icon.icon_state = "act_throw_on" /mob/proc/isSynthetic() diff --git a/code/modules/projectiles/guns/launcher/confetti.dm b/code/modules/projectiles/guns/launcher/confetti.dm index a6924b34347..f6cffa45cb0 100644 --- a/code/modules/projectiles/guns/launcher/confetti.dm +++ b/code/modules/projectiles/guns/launcher/confetti.dm @@ -76,26 +76,22 @@ var/choice = tgui_alert(usr, "Load the Party Canon with?", "Change What?", list("Confetti","Banana Peel","Cream Pie")) if(!choice) return + if(istype(usr,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = usr + if(!R.use_direct_power(200, 400)) + to_chat(R, span_warning("Warning, low power detected. Aborting action.")) + return playsound(src, 'sound/effects/pop.ogg', 50, 0) switch(choice) if("Confetti") chambered = new /obj/item/weapon/grenade/confetti/party_ball to_chat(usr, span_blue("Confetti loaded.")) - if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = usr - R.cell.charge -= 200 if("Banana Peel") chambered = new /obj/item/weapon/bananapeel to_chat(usr, span_blue("Banana peel loaded.")) - if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = usr - R.cell.charge -= 200 if("Cream Pie") chambered = new /obj/item/weapon/reagent_containers/food/snacks/pie to_chat(usr, span_blue("Banana cream pie loaded.")) - if(istype(usr,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = usr - R.cell.charge -= 200 else to_chat(usr, span_red("The [src] is already loaded!")) diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm index e168af2b23c..0a725814d8d 100644 --- a/code/modules/research/prosfab_designs.dm +++ b/code/modules/research/prosfab_designs.dm @@ -520,6 +520,31 @@ id = "borg_hound_cyborg_blaster" build_path = /obj/item/borg/upgrade/no_prod/toygun +/datum/design/item/prosfab/robot_upgrade/no_prod/vision_xray + name = "X-ray vision" + id = "borg_hound_vision_xray" + build_path = /obj/item/borg/upgrade/no_prod/vision_xray + +/datum/design/item/prosfab/robot_upgrade/no_prod/vision_thermal + name = "Thermal vision" + id = "borg_hound_vision_thermal" + build_path = /obj/item/borg/upgrade/no_prod/vision_thermal + +/datum/design/item/prosfab/robot_upgrade/no_prod/vision_meson + name = "Meson vision" + id = "borg_hound_vision_meson" + build_path = /obj/item/borg/upgrade/no_prod/vision_meson + +/datum/design/item/prosfab/robot_upgrade/no_prod/vision_material + name = "Material vision" + id = "borg_hound_vision_material" + build_path = /obj/item/borg/upgrade/no_prod/vision_material + +/datum/design/item/prosfab/robot_upgrade/no_prod/vision_anomalous + name = "Anomalous vision" + id = "borg_hound_vision_anomalous" + build_path = /obj/item/borg/upgrade/no_prod/vision_anomalous + // Synthmorph Bags. /datum/design/item/prosfab/synthmorphbag diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi index f6c27374d435a2631baaab24209266bcbf5fa9e2..d19ff1c7c8f42e07253af0bda536fd0d6af7b56a 100644 GIT binary patch delta 17941 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