diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm
index 76818446795..fabe22f95c4 100644
--- a/code/__DEFINES/clothing.dm
+++ b/code/__DEFINES/clothing.dm
@@ -47,6 +47,8 @@
#define slot_legcuffed 19
#define slot_drone_storage 20
+#define slots_amt 20 // Keep this up to date!
+
//Cant seem to find a mob bitflags area other than the powers one
// bitflags for clothing parts - also used for limbs
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 7b11372bac4..7313091df06 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -37,50 +37,34 @@
//equippable shit
//hands
- inv_box = new /obj/screen/inventory()
- inv_box.name = "r_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "right hand"
inv_box.icon = 'icons/mob/screen_alien.dmi'
- inv_box.icon_state = "hand_r_inactive"
- if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
- inv_box.icon_state = "hand_r_active"
+ inv_box.icon_state = "hand_r"
inv_box.screen_loc = ui_rhand
- inv_box.layer = 19
inv_box.slot_id = slot_r_hand
- r_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus")
static_inventory += inv_box
- inv_box = new /obj/screen/inventory()
- inv_box.name = "l_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "left hand"
inv_box.icon = 'icons/mob/screen_alien.dmi'
- inv_box.icon_state = "hand_l_inactive"
- if(mymob && mymob.hand) //This being 1 means the left hand is in use
- inv_box.icon_state = "hand_l_active"
+ inv_box.icon_state = "hand_l"
inv_box.screen_loc = ui_lhand
- inv_box.layer = 19
inv_box.slot_id = slot_l_hand
- l_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle")
static_inventory += inv_box
//begin buttons
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand1
- using.layer = 19
static_inventory += using
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = 'icons/mob/screen_alien.dmi'
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
- using.layer = 19
static_inventory += using
using = new /obj/screen/act_intent/alien()
@@ -130,6 +114,12 @@
zone_select.update_icon(mymob)
static_inventory += zone_select
+ for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
+ if(inv.slot_id)
+ inv.hud = src
+ inv_slots[inv.slot_id] = inv
+ inv.update_icon()
+
/datum/hud/alien/persistant_inventory_update()
if(!mymob)
return
diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm
index 7e2d478c2ab..de79a28c5a2 100644
--- a/code/_onclick/hud/drones.dm
+++ b/code/_onclick/hud/drones.dm
@@ -14,68 +14,62 @@
pull_icon.screen_loc = ui_drone_pull
static_inventory += pull_icon
- inv_box = new /obj/screen/inventory()
- inv_box.name = "r_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "right hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_r_inactive"
- if(mymob && !mymob.hand) //Hand being true means the LEFT hand is active
- inv_box.icon_state = "hand_r_active"
+ inv_box.icon_state = "hand_r"
inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand
- inv_box.layer = 19
- r_hand_hud_object = inv_box
static_inventory += inv_box
- inv_box = new /obj/screen/inventory()
- inv_box.name = "l_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "left hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_l_inactive"
- if(mymob && mymob.hand) //Hand being true means the LEFT hand is active
- inv_box.icon_state = "hand_l_active"
+ inv_box.icon_state = "hand_l"
inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand
- inv_box.layer = 19
- l_hand_hud_object = inv_box
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "internal storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_drone_storage
inv_box.slot_id = slot_drone_storage
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head/mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_drone_head
inv_box.slot_id = slot_head
- inv_box.layer = 19
static_inventory += inv_box
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand1
- using.layer = 19
static_inventory += using
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
- using.layer = 19
static_inventory += using
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
zone_select.update_icon(mymob)
+ for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
+ if(inv.slot_id)
+ inv.hud = src
+ inv_slots[inv.slot_id] = inv
+ inv.update_icon()
+
/datum/hud/drone/persistant_inventory_update()
if(!mymob)
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index d794ff09c7c..ff86c8ce2c5 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -24,8 +24,6 @@
var/obj/screen/deity_follower_display
var/obj/screen/nightvisionicon
- var/obj/screen/r_hand_hud_object
- var/obj/screen/l_hand_hud_object
var/obj/screen/action_intent
var/obj/screen/zone_select
var/obj/screen/pull_icon
@@ -37,6 +35,7 @@
var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys
var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...)
var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...)
+ var/list/inv_slots[slots_amt] // /obj/screen/inventory objects, ordered by their slot ID.
var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle
var/action_buttons_hidden = 0
@@ -65,8 +64,7 @@
qdel(thing)
static_inventory.Cut()
- r_hand_hud_object = null
- l_hand_hud_object = null
+ inv_slots.Cut()
action_intent = null
zone_select = null
pull_icon = null
@@ -154,10 +152,10 @@
mymob.client.screen += infodisplay
//These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay
- if(l_hand_hud_object)
- mymob.client.screen += l_hand_hud_object //we want the hands to be visible
- if(r_hand_hud_object)
- mymob.client.screen += r_hand_hud_object //we want the hands to be visible
+ if(inv_slots[slot_l_hand])
+ mymob.client.screen += inv_slots[slot_l_hand] //we want the hands to be visible
+ if(inv_slots[slot_r_hand])
+ mymob.client.screen += inv_slots[slot_r_hand] //we want the hands to be visible
if(action_intent)
mymob.client.screen += action_intent //we want the intent switcher visible
action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is.
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 8991dd28480..40bb0c2d7d0 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -76,8 +76,8 @@
inv_box.icon = ui_style
inv_box.slot_id = slot_w_uniform
inv_box.icon_state = "uniform"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_iclothing
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -85,106 +85,90 @@
inv_box.icon = ui_style
inv_box.slot_id = slot_wear_suit
inv_box.icon_state = "suit"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_oclothing
- inv_box.layer = 19
toggleable_inventory += inv_box
- inv_box = new /obj/screen/inventory()
- inv_box.name = "r_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "right hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_r_inactive"
- if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
- inv_box.icon_state = "hand_r_active"
+ inv_box.icon_state = "hand_r"
inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand
- inv_box.layer = 19
- r_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus")
static_inventory += inv_box
- inv_box = new /obj/screen/inventory()
- inv_box.name = "l_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "left hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_l_inactive"
- if(mymob && mymob.hand) //This being 1 means the left hand is in use
- inv_box.icon_state = "hand_l_active"
+ inv_box.icon_state = "hand_l"
inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand
- inv_box.layer = 19
- l_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle")
static_inventory += inv_box
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand1
- using.layer = 19
static_inventory += using
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
- using.layer = 19
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "id"
inv_box.icon = ui_style
inv_box.icon_state = "id"
+// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_id
inv_box.slot_id = slot_wear_id
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_mask
inv_box.slot_id = slot_wear_mask
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
+// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage1"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
+// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage1
inv_box.slot_id = slot_l_store
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage2"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
+// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage2
inv_box.slot_id = slot_r_store
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "suit storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_sstore1
inv_box.slot_id = slot_s_store
- inv_box.layer = 19
static_inventory += inv_box
using = new /obj/screen/resist()
@@ -206,54 +190,54 @@
inv_box.name = "gloves"
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_gloves
inv_box.slot_id = slot_gloves
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "eyes"
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_glasses
inv_box.slot_id = slot_glasses
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "ears"
inv_box.icon = ui_style
inv_box.icon_state = "ears"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_ears
inv_box.slot_id = slot_ears
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_head
inv_box.slot_id = slot_head
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "shoes"
inv_box.icon = ui_style
inv_box.icon_state = "shoes"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_shoes
inv_box.slot_id = slot_shoes
- inv_box.layer = 19
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "belt"
inv_box.icon = ui_style
inv_box.icon_state = "belt"
+// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_belt
inv_box.slot_id = slot_belt
- inv_box.layer = 19
static_inventory += inv_box
throw_icon = new /obj/screen/throw_catch()
@@ -290,6 +274,12 @@
inventory_shown = 0
+ for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
+ if(inv.slot_id)
+ inv.hud = src
+ inv_slots[inv.slot_id] = inv
+ inv.update_icon()
+
/datum/hud/human/hidden_inventory_update()
if(!mymob)
return
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 021310f06e1..b7d8437e02a 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -21,75 +21,59 @@
using.screen_loc = ui_drop_throw
static_inventory += using
- inv_box = new /obj/screen/inventory()
- inv_box.name = "r_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "right hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_r_inactive"
- if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
- inv_box.icon_state = "hand_r_active"
+ inv_box.icon_state = "hand_r"
inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand
- inv_box.layer = 19
- r_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus")
static_inventory += inv_box
- inv_box = new /obj/screen/inventory()
- inv_box.name = "l_hand"
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.name = "left hand"
inv_box.icon = ui_style
- inv_box.icon_state = "hand_l_inactive"
- if(mymob && mymob.hand) //This being 1 means the left hand is in use
- inv_box.icon_state = "hand_l_active"
+ inv_box.icon_state = "hand_l"
inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand
- inv_box.layer = 19
- l_hand_hud_object = inv_box
- if(owner.handcuffed)
- inv_box.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle")
static_inventory += inv_box
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1_m" //extra wide!
using.screen_loc = ui_swaphand1
- using.layer = 19
static_inventory += using
- using = new /obj/screen/inventory()
- using.name = "hand"
+ using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
- using.layer = 19
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_monkey_mask
inv_box.slot_id = slot_wear_mask
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
+// inv_box.icon_full = "template"
inv_box.screen_loc = ui_monkey_head
inv_box.slot_id = slot_head
- inv_box.layer = 19
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
+ inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back
- inv_box.layer = 19
static_inventory += inv_box
throw_icon = new /obj/screen/throw_catch()
@@ -128,6 +112,12 @@
using.screen_loc = ui_pull_resist
hotkeybuttons += using
+ for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
+ if(inv.slot_id)
+ inv.hud = src
+ inv_slots[inv.slot_id] = inv
+ inv.update_icon()
+
/datum/hud/monkey/persistant_inventory_update()
if(!mymob)
return
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 13a6f9a00a2..2fc47ab95be 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -13,6 +13,7 @@
unacidable = 1
appearance_flags = APPEARANCE_UI
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
+ var/datum/hud/hud = null // A reference to the owner HUD, if any.
/obj/screen/Destroy()
master = null
@@ -27,19 +28,107 @@
maptext_height = 480
maptext_width = 480
+/obj/screen/swap_hand
+ layer = 19
+ name = "swap hand"
+
+/obj/screen/swap_hand/Click()
+ // At this point in client Click() code we have passed the 1/10 sec check and little else
+ // We don't even know if it's a middle click
+ if(world.time <= usr.next_move)
+ return 1
+
+ if(usr.incapacitated())
+ return 1
+
+ if(ismob(usr))
+ var/mob/M = usr
+ M.swap_hand()
+ return 1
+
/obj/screen/inventory
- var/slot_id //The indentifier for the slot. It has nothing to do with ID cards.
+ var/slot_id // The indentifier for the slot. It has nothing to do with ID cards.
+ var/icon_empty // Icon when empty. For now used only by humans.
+ var/icon_full // Icon when contains an item. For now used only by humans.
+ layer = 19
+/obj/screen/inventory/Click()
+ // At this point in client Click() code we have passed the 1/10 sec check and little else
+ // We don't even know if it's a middle click
+ if(world.time <= usr.next_move)
+ return 1
+
+ if(usr.incapacitated())
+ return 1
+ if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
+ return 1
+ if(usr.attack_ui(slot_id))
+ usr.update_inv_l_hand(0)
+ usr.update_inv_r_hand(0)
+ return 1
+
+/obj/screen/inventory/update_icon()
+ if(!icon_empty)
+ icon_empty = icon_state
+
+ if(hud && hud.mymob && slot_id && icon_full)
+ if(hud.mymob.get_item_by_slot(slot_id))
+ icon_state = icon_full
+ else
+ icon_state = icon_empty
+
+/obj/screen/inventory/hand
+ var/image/active_overlay
+ var/image/handcuff_overlay
+
+/obj/screen/inventory/hand/update_icon()
+ ..()
+ if(!active_overlay)
+ active_overlay = image("icon"=icon, "icon_state"="hand_active")
+ if(!handcuff_overlay)
+ var/state = (slot_id == slot_r_hand) ? "markus" : "gabrielle"
+ handcuff_overlay = image("icon"='icons/mob/screen_gen.dmi', "icon_state"=state)
+
+ overlays.Cut()
+
+ if(hud && hud.mymob)
+ if(iscarbon(hud.mymob))
+ var/mob/living/carbon/C = hud.mymob
+ if(C.handcuffed)
+ overlays += handcuff_overlay
+
+ if(slot_id == slot_l_hand && hud.mymob.hand)
+ overlays += active_overlay
+ else if(slot_id == slot_r_hand && !hud.mymob.hand)
+ overlays += active_overlay
+
+/obj/screen/inventory/hand/Click()
+ // At this point in client Click() code we have passed the 1/10 sec check and little else
+ // We don't even know if it's a middle click
+ if(world.time <= usr.next_move)
+ return 1
+ if(usr.incapacitated())
+ return 1
+ if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
+ return 1
+
+ if(ismob(usr))
+ var/mob/M = usr
+ switch(name)
+ if("right hand", "r_hand")
+ M.activate_hand("r")
+ if("left hand", "l_hand")
+ M.activate_hand("l")
+ return 1
/obj/screen/close
name = "close"
/obj/screen/close/Click()
- if(master)
- if(istype(master, /obj/item/weapon/storage))
- var/obj/item/weapon/storage/S = master
- S.close(usr)
+ if(istype(master, /obj/item/weapon/storage))
+ var/obj/item/weapon/storage/S = master
+ S.close(usr)
return 1
@@ -304,38 +393,6 @@
/obj/screen/zone_sel/robot
icon = 'icons/mob/screen_cyborg.dmi'
-/obj/screen/inventory/Click()
- // At this point in client Click() code we have passed the 1/10 sec check and little else
- // We don't even know if it's a middle click
- if(world.time <= usr.next_move)
- return 1
-
- if(usr.incapacitated())
- return 1
- if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
- return 1
- switch(name)
- if("r_hand")
- if(ismob(usr))
- var/mob/Mr = usr
- Mr.activate_hand("r")
- if("l_hand")
- if(ismob(usr))
- var/mob/Ml = usr
- Ml.activate_hand("l")
- if("swap")
- if(ismob(usr))
- var/mob/Ms = usr
- Ms.swap_hand()
- if("hand")
- if(ismob(usr))
- var/mob/Mh = usr
- Mh.swap_hand()
- else
- if(usr.attack_ui(slot_id))
- usr.update_inv_l_hand(0)
- usr.update_inv_r_hand(0)
- return 1
/obj/screen/flash
name = "flash"
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 6f8cdfd88c6..3ae94dfddb0 100755
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -864,17 +864,17 @@
M.put_in_hands(src)
usr << "You pick up the deck."
- else if(istype(over_object, /obj/screen))
- switch(over_object.name)
- if("l_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
- M.put_in_l_hand(src)
- else if("r_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
+ else if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!remove_item_from_storage(M))
+ M.unEquip(src)
+ switch(H.slot_id)
+ if(slot_r_hand)
M.put_in_r_hand(src)
- usr << "You pick up the deck."
+ if(slot_l_hand)
+ M.put_in_l_hand(src)
+ usr << "You pick up the deck."
+
else
usr << "You can't reach it from here!"
diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm
index d860f232e74..57a9deb7df8 100644
--- a/code/game/objects/items/weapons/RPD.dm
+++ b/code/game/objects/items/weapons/RPD.dm
@@ -125,9 +125,6 @@ var/global/list/RPD_recipes=list(
desc = "A device used to rapidly pipe things."
icon = 'icons/obj/items.dmi'
icon_state = "rpd"
- opacity = 0
- density = 0
- anchored = 0
flags = CONDUCT
force = 10
throwforce = 10
@@ -529,7 +526,7 @@ var/global/list/RPD_recipes=list(
if(istype(A,/area/shuttle)||istype(A,/turf/space/transit))
return 0
-
+
//So that changing the menu settings doesn't affect the pipes already being built.
var/queued_p_type = p_type
var/queued_p_dir = p_dir
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index 082f1c4671e..41aba0f01c7 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -91,19 +91,22 @@
/obj/item/weapon/defibrillator/MouseDrop(obj/over_object)
if(ismob(src.loc))
var/mob/M = src.loc
- switch(over_object.name)
- if("r_hand")
- if(M.r_hand)
- return
- if(!M.unEquip(src))
- return
- M.put_in_r_hand(src)
- if("l_hand")
- if(M.l_hand)
- return
- if(!M.unEquip(src))
- return
- M.put_in_l_hand(src)
+ if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+
+ switch(H.slot_id)
+ if(slot_r_hand)
+ if(M.r_hand)
+ return
+ if(!M.unEquip(src))
+ return
+ M.put_in_r_hand(src)
+ if(slot_l_hand)
+ if(M.l_hand)
+ return
+ if(!M.unEquip(src))
+ return
+ M.put_in_l_hand(src)
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
if(W == paddles)
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 9183ffc92e5..054b4e426cc 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -138,13 +138,14 @@
var/mob/M = usr
if(!istype(over_object, /obj/screen) || !Adjacent(M))
return ..()
- if((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
- switch(over_object.name)
- if("r_hand")
- M.unEquip(src)
+ if(!M.restrained() && !M.stat && istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!M.unEquip(src))
+ return
+ switch(H.slot_id)
+ if(slot_r_hand)
M.put_in_r_hand(src)
- if("l_hand")
- M.unEquip(src)
+ if(slot_l_hand)
M.put_in_l_hand(src)
src.add_fingerprint(usr)
return
@@ -163,7 +164,7 @@
..()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
-
+
/obj/item/weapon/storage/pill_bottle/charcoal
name = "bottle of charcoal pills"
desc = "Contains pills used to counter toxins."
@@ -172,7 +173,7 @@
..()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/charcoal(src)
-
+
/obj/item/weapon/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
desc = "Contains pills used to stabilize patients."
@@ -181,7 +182,7 @@
..()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
-
+
/obj/item/weapon/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
desc = "Contains pills used to treat genetic abnormalities."
@@ -190,7 +191,7 @@
..()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/mutadone(src)
-
+
/obj/item/weapon/storage/pill_bottle/mannitol
name = "bottle of mannitol pills"
desc = "Contains pills used to treat brain damage."
@@ -199,7 +200,7 @@
..()
for(var/i in 1 to 7)
new /obj/item/weapon/reagent_containers/pill/mannitol(src)
-
+
/obj/item/weapon/storage/pill_bottle/stimulant
name = "bottle of stimulant pills"
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index a031e2ad2de..9764781e8fc 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -51,15 +51,18 @@
return
playsound(loc, "rustle", 50, 1, -5)
- switch(over_object.name)
- if("r_hand")
- if(!M.unEquip(src))
- return
- M.put_in_r_hand(src)
- if("l_hand")
- if(!M.unEquip(src))
- return
- M.put_in_l_hand(src)
+
+
+ if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!M.unEquip(src))
+ return
+ switch(H.slot_id)
+ if(slot_r_hand)
+ M.put_in_r_hand(src)
+ if(slot_l_hand)
+ M.put_in_l_hand(src)
+
add_fingerprint(usr)
//Check if this storage can dump the items
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index 7a6f50308d8..7652493137c 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -81,15 +81,16 @@
/obj/item/weapon/watertank/MouseDrop(obj/over_object)
var/mob/M = src.loc
- if(istype(M))
- switch(over_object.name)
- if("r_hand")
+ if(istype(M) && istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ switch(H.slot_id)
+ if(slot_r_hand)
if(M.r_hand)
return
if(!M.unEquip(src))
return
M.put_in_r_hand(src)
- if("l_hand")
+ if(slot_l_hand)
if(M.l_hand)
return
if(!M.unEquip(src))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index f6fecf105ba..260f981cf55 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -111,13 +111,12 @@
usr << "Your other hand is too busy holding the [item_in_hand.name]"
return
src.hand = !( src.hand )
- if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
- if(hand) //This being 1 means the left hand is in use
- hud_used.l_hand_hud_object.icon_state = "hand_l_active"
- hud_used.r_hand_hud_object.icon_state = "hand_r_inactive"
- else
- hud_used.l_hand_hud_object.icon_state = "hand_l_inactive"
- hud_used.r_hand_hud_object.icon_state = "hand_r_active"
+ if(hud_used && hud_used.inv_slots[slot_l_hand] && hud_used.inv_slots[slot_r_hand])
+ var/obj/screen/inventory/hand/H
+ H = hud_used.inv_slots[slot_l_hand]
+ H.update_icon()
+ H = hud_used.inv_slots[slot_r_hand]
+ H.update_icon()
/*if (!( src.hand ))
src.hands.dir = NORTH
else
@@ -170,7 +169,7 @@
return
if(weakeyes)
Stun(2)
-
+
if (damage == 1)
src << "Your eyes sting a little."
if(prob(40))
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 307632c29f6..8a44cd032a1 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -155,6 +155,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_w_uniform()
remove_overlay(UNIFORM_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_w_uniform]
+ inv.update_icon()
+
if(istype(w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = w_uniform
if(client && hud_used && hud_used.hud_shown)
@@ -192,6 +196,11 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_wear_id()
remove_overlay(ID_LAYER)
+
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_id]
+ inv.update_icon()
+
if(wear_id)
if(client && hud_used && hud_used.hud_shown)
wear_id.screen_loc = ui_id
@@ -206,6 +215,11 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_gloves()
remove_overlay(GLOVES_LAYER)
+
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves]
+ inv.update_icon()
+
if(gloves)
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown) //if the inventory is open ...
@@ -231,6 +245,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_glasses()
remove_overlay(GLASSES_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses]
+ inv.update_icon()
+
if(glasses)
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown) //if the inventory is open ...
@@ -248,6 +266,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_ears()
remove_overlay(EARS_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_ears]
+ inv.update_icon()
+
if(ears)
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown) //if the inventory is open ...
@@ -263,6 +285,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_shoes()
remove_overlay(SHOES_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_shoes]
+ inv.update_icon()
+
if(shoes)
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown) //if the inventory is open ...
@@ -278,6 +304,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_s_store()
remove_overlay(SUIT_STORE_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_s_store]
+ inv.update_icon()
+
if(s_store)
if(client && hud_used && hud_used.hud_shown)
s_store.screen_loc = ui_sstore1
@@ -294,17 +324,25 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_head()
..()
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_head]
+ inv.update_icon()
+
update_mutant_bodyparts()
/mob/living/carbon/human/update_inv_belt()
remove_overlay(BELT_LAYER)
- if(belt)
- if(client && hud_used && hud_used.hud_shown)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_belt]
+ inv.update_icon()
+
+ if(hud_used.hud_shown && belt)
client.screen += belt
belt.screen_loc = ui_belt
+ if(belt)
var/t_state = belt.item_state
if(!t_state)
t_state = belt.icon_state
@@ -320,6 +358,10 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_wear_suit()
remove_overlay(SUIT_LAYER)
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_suit]
+ inv.update_icon()
+
if(istype(wear_suit, /obj/item/clothing/suit))
if(client && hud_used && hud_used.hud_shown)
if(hud_used.inventory_shown) //if the inventory is open ...
@@ -340,19 +382,30 @@ Please contact me on #coderbus IRC. ~Carnie x
/mob/living/carbon/human/update_inv_pockets()
- if(l_store)
- if(client && hud_used && hud_used.hud_shown)
- client.screen += l_store
- l_store.screen_loc = ui_storage1
- if(r_store)
- if(client && hud_used && hud_used.hud_shown)
- client.screen += r_store
- r_store.screen_loc = ui_storage2
+ if(client && hud_used)
+ var/obj/screen/inventory/inv
+ inv = hud_used.inv_slots[slot_l_store]
+ inv.update_icon()
+
+ inv = hud_used.inv_slots[slot_r_store]
+ inv.update_icon()
+
+ if(hud_used.hud_shown)
+ if(l_store)
+ client.screen += l_store
+ l_store.screen_loc = ui_storage1
+
+ if(r_store)
+ client.screen += r_store
+ r_store.screen_loc = ui_storage2
/mob/living/carbon/human/update_inv_wear_mask()
..()
+ if(client && hud_used)
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_wear_mask]
+ inv.update_icon()
update_mutant_bodyparts()
/mob/living/carbon/human/update_inv_handcuffed()
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index a684a9ee7c1..10733f4aae2 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -105,6 +105,11 @@
/mob/living/carbon/update_inv_back()
remove_overlay(BACK_LAYER)
+
+ if(client && hud_used && hud_used.inv_slots[slot_back])
+ var/obj/screen/inventory/inv = hud_used.inv_slots[slot_back]
+ inv.update_icon()
+
if(back)
var/image/standing = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi')
overlays_standing[BACK_LAYER] = standing
@@ -128,15 +133,11 @@
//update whether handcuffs appears on our hud.
/mob/living/carbon/proc/update_hud_handcuffed()
if(hud_used)
- var/obj/screen/inventory/R = hud_used.r_hand_hud_object
- var/obj/screen/inventory/L = hud_used.l_hand_hud_object
+ var/obj/screen/inventory/R = hud_used.inv_slots[slot_r_hand]
+ var/obj/screen/inventory/L = hud_used.inv_slots[slot_l_hand]
if(R && L)
- if(handcuffed) //hud handcuff icons
- R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus")
- L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle")
- else
- R.overlays = null
- L.overlays = null
+ R.update_icon()
+ L.update_icon()
//update whether our head item appears on our hud.
/mob/living/carbon/proc/update_hud_head(obj/item/I)
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
index a4368fd585a..cc56e9382a9 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm
@@ -34,13 +34,12 @@
return
hand = !hand
- if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
- if(hand)
- hud_used.l_hand_hud_object.icon_state = "hand_l_active"
- hud_used.r_hand_hud_object.icon_state = "hand_r_inactive"
- else
- hud_used.l_hand_hud_object.icon_state = "hand_l_inactive"
- hud_used.r_hand_hud_object.icon_state = "hand_r_active"
+ if(hud_used && hud_used.inv_slots[slot_l_hand] && hud_used.inv_slots[slot_r_hand])
+ var/obj/screen/inventory/hand/H
+ H = hud_used.inv_slots[slot_l_hand]
+ H.update_icon()
+ H = hud_used.inv_slots[slot_r_hand]
+ H.update_icon()
/mob/living/simple_animal/drone/unEquip(obj/item/I, force)
diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm
index 5d0ed2d88a5..b8473c174a3 100644
--- a/code/modules/paperwork/paper_cutter.dm
+++ b/code/modules/paperwork/paper_cutter.dm
@@ -92,15 +92,15 @@
if(over_object == M)
M.put_in_hands(src)
- else if(istype(over_object, /obj/screen))
- switch(over_object.name)
- if("r_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
+ else if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!remove_item_from_storage(M))
+ if(!M.unEquip(src))
+ return
+ switch(H.slot_id)
+ if(slot_r_hand)
M.put_in_r_hand(src)
- if("l_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
+ if(slot_l_hand)
M.put_in_l_hand(src)
add_fingerprint(M)
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 62275dc2e36..d21ac7a912c 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -31,15 +31,15 @@
if(over_object == M)
M.put_in_hands(src)
- else if(istype(over_object, /obj/screen))
- switch(over_object.name)
- if("r_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
+ else if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!remove_item_from_storage(M))
+ if(!M.unEquip(src))
+ return
+ switch(H.slot_id)
+ if(slot_r_hand)
M.put_in_r_hand(src)
- if("l_hand")
- if(!remove_item_from_storage(M))
- M.unEquip(src)
+ if(slot_l_hand)
M.put_in_l_hand(src)
add_fingerprint(M)
diff --git a/icons/mob/screen_alien.dmi b/icons/mob/screen_alien.dmi
index 48005de524c..308bea38020 100644
Binary files a/icons/mob/screen_alien.dmi and b/icons/mob/screen_alien.dmi differ
diff --git a/icons/mob/screen_midnight.dmi b/icons/mob/screen_midnight.dmi
index 65b007def65..25a9c6a0ba7 100644
Binary files a/icons/mob/screen_midnight.dmi and b/icons/mob/screen_midnight.dmi differ
diff --git a/icons/mob/screen_operative.dmi b/icons/mob/screen_operative.dmi
index 01c64e5a4fd..dcc14d4c02a 100644
Binary files a/icons/mob/screen_operative.dmi and b/icons/mob/screen_operative.dmi differ
diff --git a/icons/mob/screen_plasmafire.dmi b/icons/mob/screen_plasmafire.dmi
index 75f9ffe9158..ec39083d844 100644
Binary files a/icons/mob/screen_plasmafire.dmi and b/icons/mob/screen_plasmafire.dmi differ
diff --git a/icons/mob/screen_retro.dmi b/icons/mob/screen_retro.dmi
index 75d18774e74..e3622f43c8b 100644
Binary files a/icons/mob/screen_retro.dmi and b/icons/mob/screen_retro.dmi differ
diff --git a/icons/mob/screen_slimecore.dmi b/icons/mob/screen_slimecore.dmi
index 27c6602d6cd..7df6854513d 100644
Binary files a/icons/mob/screen_slimecore.dmi and b/icons/mob/screen_slimecore.dmi differ