mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
Ported the clickcatcher from tg/bay. You can now click black spots to turn. Isn't that handy, especially with vision cones.
Reworked fullscreen overlays into an easier and better system, courtesy of PsiOmegaDelta.
Similiarly, added fadeout animations to all pain overlays, plus unconsciousness.
Fixed the vampire frenzy overlay never showing.
Unconsciousness is now FULL darkness.
Flashing mobs is now an inbuilt proc.
235 lines
6.0 KiB
Plaintext
235 lines
6.0 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
|
|
|
|
//Fov
|
|
if(r.can_have_vision_cone)
|
|
r.vision_cone_overlay = new /obj/screen/fov()
|
|
src.adding += r.vision_cone_overlay
|
|
|
|
//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
|
|
|
|
// Up Hint
|
|
mymob.up_hint = new /obj/screen()
|
|
mymob.up_hint.icon = 'icons/mob/screen/robot.dmi'
|
|
mymob.up_hint.icon_state = "uphint0"
|
|
mymob.up_hint.name = "up hint"
|
|
mymob.up_hint.screen_loc = ui_up_hint
|
|
|
|
//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
|
|
|
|
if(r.module)
|
|
mymob.hands.icon_state = lowertext(r.mod_type)
|
|
|
|
//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.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.up_hint,
|
|
mymob.pullin,
|
|
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 |