Files
Aurora.3/code/_onclick/hud/robot.dm
Geeves 1a7cc1a1c7 Some Silicon Code (#8394)
Tweaked a hell of a lot of silicon code to make synthetics better.

Synths with scrambled codes that prevent them from being on robotics computers will now appear on Merc camera networks.

Both variants of the engineering borg can now deploy the malf borging machine.

Medical borgs no longer get polyacid sprays, instead getting Wulumunusha CMO Hyposprays, which cause muteness.

You must now be on help intent to use items like crowbars and screwdrivers on borgs. Otherwise you hit them with it.
2020-03-13 13:29:35 +01:00

237 lines
6.1 KiB
Plaintext

var/obj/screen/robot_inventory
/mob/living/silicon/robot/instantiate_hud(var/datum/hud/HUD)
HUD.robot_hud()
/datum/hud/proc/robot_hud()
src.adding = list()
src.other = list()
var/obj/screen/using
if(!isrobot(mymob))
return
var/mob/living/silicon/robot/r = mymob
//Radio
using = new /obj/screen()
using.name = "radio"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = "radio"
using.screen_loc = ui_movi
using.layer = SCREEN_LAYER
src.adding += using
//Module select
using = new /obj/screen/module/one()
src.adding += using
r.inv1 = using
using = new /obj/screen/module/two()
src.adding += using
r.inv2 = using
using = new /obj/screen/module/three()
src.adding += using
r.inv3 = using
//End of module select
//Intent
using = new /obj/screen()
using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
using.layer = SCREEN_LAYER
src.adding += using
action_intent = using
//Cell
r.cells = new /obj/screen()
r.cells.icon = 'icons/mob/screen/robot.dmi'
r.cells.icon_state = "charge-empty"
r.cells.name = "cell"
r.cells.screen_loc = ui_toxin
//Health
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen/robot.dmi'
mymob.healths.icon_state = "health0"
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_borg_health
//Installed Module
mymob.hands = new /obj/screen()
mymob.hands.icon = 'icons/mob/screen/robot.dmi'
mymob.hands.icon_state = "nomod"
mymob.hands.name = "module"
mymob.hands.screen_loc = ui_borg_module
//Module Panel
using = new /obj/screen()
using.name = "panel"
using.icon = 'icons/mob/screen/robot.dmi'
using.icon_state = "panel"
using.screen_loc = ui_borg_panel
using.layer = SCREEN_LAYER
src.adding += using
//Store
mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = 'icons/mob/screen/robot.dmi'
mymob.throw_icon.icon_state = "store"
mymob.throw_icon.name = "store"
mymob.throw_icon.screen_loc = ui_borg_store
//Inventory
robot_inventory = new /obj/screen()
robot_inventory.name = "inventory"
robot_inventory.icon = 'icons/mob/screen/robot.dmi'
robot_inventory.icon_state = "inventory"
robot_inventory.screen_loc = ui_borg_inventory
//Temp
mymob.pullin = new /obj/screen()
mymob.pullin.icon = 'icons/mob/screen/robot.dmi'
mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_borg_pull
mymob.blind = new /obj/screen()
mymob.blind.icon = 'icons/mob/screen/full.dmi'
mymob.blind.icon_state = "blackimageoverlay"
mymob.blind.name = " "
mymob.blind.screen_loc = "1,1"
mymob.blind.invisibility = 101
mymob.flash = new /obj/screen()
mymob.flash.icon = 'icons/mob/screen/robot.dmi'
mymob.flash.icon_state = "blank"
mymob.flash.name = "flash"
mymob.flash.screen_loc = ui_entire_screen
mymob.flash.layer = 17
mymob.flash.mouse_opacity = 0
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen/robot.dmi'
mymob.zone_sel.cut_overlays()
mymob.zone_sel.add_overlay(image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]"))
// Computer device hud
r.computer.screen_loc = ui_oxygen
r.computer.layer = SCREEN_LAYER
//Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
mymob.item_use_icon = new /obj/screen/gun/item(null)
mymob.gun_move_icon = new /obj/screen/gun/move(null)
mymob.radio_use_icon = new /obj/screen/gun/radio(null)
mymob.client.screen = null
mymob.client.screen += list(
mymob.throw_icon,
mymob.zone_sel,
mymob.hands,
mymob.healths,
r.cells,
mymob.pullin,
mymob.blind,
mymob.flash,
robot_inventory,
mymob.gun_setting_icon,
r.computer)
mymob.client.screen += src.adding + src.other
return
/datum/hud/proc/toggle_show_robot_modules()
if(!isrobot(mymob))
return
var/mob/living/silicon/robot/r = mymob
r.shown_robot_modules = !r.shown_robot_modules
update_robot_modules_display()
/datum/hud/proc/update_robot_modules_display()
if(!isrobot(mymob))
return
var/mob/living/silicon/robot/r = mymob
if(r.shown_robot_modules)
//Modules display is shown
//r.client.screen += robot_inventory //"store" icon
if(!r.module)
to_chat(usr, "<span class='danger'>No module selected</span>")
return
if(!r.module.modules)
to_chat(usr, "<span class='danger'>Selected module has no modules to select</span>")
return
if(!r.robot_modules_background)
return
var/display_rows = -round(-(r.module.modules.len) / 8)
r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
r.client.screen += r.robot_modules_background
var/x = -4 //Start at CENTER-4,SOUTH+1
var/y = 1
//Unfortunately adding the emag module to the list of modules has to be here. This is because a borg can
//be emagged before they actually select a module. - or some situation can cause them to get a new module
// - or some situation might cause them to get de-emagged or something.
if(r.emagged)
if(!(r.module.emag in r.module.modules))
r.module.modules += r.module.emag
else
if(r.module.emag in r.module.modules)
r.module.modules -= r.module.emag
if(r.malf_AI_module)
if(!((r.module.malf_AI_module in r.module.modules) && r.module.malf_AI_module == null))
r.module.modules += r.module.malf_AI_module
else
if(r.module.malf_AI_module in r.module.modules)
r.module.modules -= r.module.malf_AI_module
for(var/atom/movable/A in r.module.modules)
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
//Module is not currently active
r.client.screen += A
if(x < 0)
A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7"
else
A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7"
A.layer = SCREEN_LAYER
x++
if(x == 4)
x = -4
y++
else
//Modules display is hidden
//r.client.screen -= robot_inventory //"store" icon
for(var/atom/A in r.module.modules)
if( (A != r.module_state_1) && (A != r.module_state_2) && (A != r.module_state_3) )
//Module is not currently active
r.client.screen -= A
r.shown_robot_modules = 0
r.client.screen -= r.robot_modules_background