diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index cbbd9bc7052..88dd74669d2 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -54,6 +54,7 @@
#define ui_borg_camera "CENTER+3:21,SOUTH:5" //borgs
#define ui_borg_album "CENTER+4:21,SOUTH:5" //borgs
+#define ui_monkey_head "CENTER-4:13,SOUTH:5" //monkey
#define ui_monkey_mask "CENTER-3:14,SOUTH:5" //monkey
#define ui_monkey_back "CENTER-2:15,SOUTH:5" //monkey
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index c96e2556de9..ad2d394d7b3 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -73,6 +73,15 @@
inv_box.layer = 19
adding += inv_box
+ inv_box = new /obj/screen/inventory()
+ inv_box.name = "head"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "head"
+ inv_box.screen_loc = ui_monkey_head
+ inv_box.slot_id = slot_head
+ inv_box.layer = 19
+ adding += inv_box
+
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 8559fa5d0f7..f66371e3005 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -322,6 +322,7 @@
[name]
+
Head: [(head && !(head.flags&ABSTRACT)) ? head : "Nothing"]
Mask: [(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Nothing"]
Left Hand: [(l_hand && !(l_hand.flags&ABSTRACT)) ? l_hand : "Nothing"]
Right Hand: [(r_hand && !(r_hand.flags&ABSTRACT)) ? r_hand : "Nothing"]"}
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 7904c7cfb0f..1f96e677eaf 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -13,6 +13,7 @@
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
var/obj/item/weapon/tank/internal = null
+ var/obj/item/head = null
var/datum/dna/dna = null//Carbon
var/heart_attack = 0
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 189124770a2..df617e2c68e 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -31,7 +31,6 @@
var/obj/item/belt = null
var/obj/item/gloves = null
var/obj/item/glasses = null
- var/obj/item/head = null
var/obj/item/ears = null
var/obj/item/wear_id = null
var/obj/item/r_store = null
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 6da553aaf24..c1e89721f8a 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -268,11 +268,6 @@
else if(I == glasses)
glasses = null
update_inv_glasses(0)
- else if(I == head)
- head = null
- if(I.flags & BLOCKHAIR)
- update_hair(0) //rebuild hair
- update_inv_head(0)
else if(I == ears)
ears = null
update_inv_ears(0)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 3c324b4081d..8d1c801472a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -138,7 +138,7 @@ Please contact me on #coderbus IRC. ~Carnie x
//HAIR OVERLAY
-/mob/living/carbon/human/proc/update_hair()
+/mob/living/carbon/human/update_hair()
//Reset our hair
remove_overlay(HAIR_LAYER)
diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm
index 5a7455748cf..8dc0e485288 100644
--- a/code/modules/mob/living/carbon/inventory.dm
+++ b/code/modules/mob/living/carbon/inventory.dm
@@ -4,6 +4,8 @@
return back
if(slot_wear_mask)
return wear_mask
+ if(slot_head)
+ return head
if(slot_handcuffed)
return handcuffed
if(slot_legcuffed)
@@ -12,4 +14,17 @@
return l_hand
if(slot_r_hand)
return r_hand
- return null
\ No newline at end of file
+ return null
+
+
+/mob/living/carbon/unEquip(obj/item/I)
+ . = ..()
+ if(!. || !I)
+ return
+
+ if(I == head)
+ head = null
+ if(I.flags & BLOCKHAIR)
+ update_hair(0)
+ update_inv_head(0)
+
diff --git a/code/modules/mob/living/carbon/monkey/examine.dm b/code/modules/mob/living/carbon/monkey/examine.dm
index a3686d7a478..48963b00eed 100644
--- a/code/modules/mob/living/carbon/monkey/examine.dm
+++ b/code/modules/mob/living/carbon/monkey/examine.dm
@@ -3,8 +3,10 @@
if (src.handcuffed)
msg += "It is \icon[src.handcuffed] handcuffed!\n"
+ if (src.head)
+ msg += "It has \icon[src.head] \a [src.head] on its head. \n"
if (src.wear_mask)
- msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its head.\n"
+ msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its face.\n"
if (src.l_hand)
msg += "It has \icon[src.l_hand] \a [src.l_hand] in its left hand.\n"
if (src.r_hand)
diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm
index 95ff775c0a4..c0ae3e21920 100644
--- a/code/modules/mob/living/carbon/monkey/inventory.dm
+++ b/code/modules/mob/living/carbon/monkey/inventory.dm
@@ -14,6 +14,12 @@
if( !(I.slot_flags & SLOT_MASK) )
return 0
return 1
+ if(slot_head)
+ if(head)
+ return 0
+ if( !(I.slot_flags & SLOT_HEAD) )
+ return 0
+ return 1
if(slot_back)
if(back)
return 0
@@ -43,6 +49,10 @@
wear_mask = I
I.equipped(src, slot)
update_inv_wear_mask(redraw_mob)
+ if(slot_head)
+ head = I
+ I.equipped(src, slot)
+ update_inv_head(redraw_mob)
if(slot_handcuffed)
handcuffed = I
update_inv_handcuffed(redraw_mob)
@@ -70,3 +80,6 @@
I.loc = src
I.equipped(src, slot)
I.layer = 20
+
+
+
diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm
index bcdbbb6b633..5be5fbc43b8 100644
--- a/code/modules/mob/living/carbon/monkey/update_icons.dm
+++ b/code/modules/mob/living/carbon/monkey/update_icons.dm
@@ -1,11 +1,12 @@
//Monkey Overlays Indexes////////
-#define M_FIRE_LAYER 6
-#define M_MASK_LAYER 5
+#define M_FIRE_LAYER 7
+#define M_MASK_LAYER 6
+#define M_HEAD_LAYER 5
#define M_BACK_LAYER 4
#define M_HANDCUFF_LAYER 3
#define M_L_HAND_LAYER 2
#define M_R_HAND_LAYER 1
-#define M_TOTAL_LAYERS 6
+#define M_TOTAL_LAYERS 7
/////////////////////////////////
/mob/living/carbon/monkey
@@ -14,6 +15,7 @@
/mob/living/carbon/monkey/regenerate_icons()
..()
update_inv_wear_mask(0)
+ update_inv_head(0)
update_inv_back(0)
update_inv_r_hand(0)
update_inv_l_hand(0)
@@ -39,7 +41,7 @@
if(client && hud_used)
client.screen += wear_mask
overlays -= overlays_standing[M_MASK_LAYER]
- var/image/standing = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER)
+ var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER)
if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA )
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood")
overlays_standing[M_MASK_LAYER] = standing
@@ -50,6 +52,21 @@
if(update_icons) update_icons()
+/mob/living/carbon/monkey/update_inv_head(var/update_icons=1)
+ if(head)
+ head.screen_loc = ui_monkey_head
+ if(client && hud_used)
+ client.screen += head
+ overlays -= overlays_standing[M_HEAD_LAYER]
+ var/image/standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]", "layer" = -M_HEAD_LAYER)
+ overlays_standing[M_HEAD_LAYER] = standing
+ overlays += overlays_standing[M_HEAD_LAYER]
+ else
+ overlays -= overlays_standing[M_HEAD_LAYER]
+ overlays_standing[M_HEAD_LAYER] = null
+ if(update_icons) update_icons()
+
+
/mob/living/carbon/monkey/update_inv_r_hand(var/update_icons=1)
if (handcuffed)
drop_r_hand()
@@ -61,7 +78,9 @@
var/t_state = r_hand.item_state
if(!t_state) t_state = r_hand.icon_state
overlays -= overlays_standing[M_R_HAND_LAYER]
- overlays_standing[M_R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER)
+ var/image/standing = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER)
+ standing.pixel_y = 2
+ overlays_standing[M_R_HAND_LAYER] = standing
overlays += overlays_standing[M_R_HAND_LAYER]
else
overlays -= overlays_standing[M_R_HAND_LAYER]
@@ -80,7 +99,9 @@
var/t_state = l_hand.item_state
if(!t_state) t_state = l_hand.icon_state
overlays -= overlays_standing[M_L_HAND_LAYER]
- overlays_standing[M_L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER)
+ var/image/standing = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER)
+ standing.pixel_y = 2
+ overlays_standing[M_L_HAND_LAYER] = standing
overlays += overlays_standing[M_L_HAND_LAYER]
else
overlays -= overlays_standing[M_L_HAND_LAYER]
diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm
index 28934e23b88..13ec3f05463 100644
--- a/code/modules/mob/update_icons.dm
+++ b/code/modules/mob/update_icons.dm
@@ -43,6 +43,9 @@
/mob/proc/update_inv_head()
return
+/mob/proc/update_hair()
+ return
+
/mob/proc/update_inv_gloves()
return
diff --git a/html/changelogs/RemieRichards-PR-8554.yml b/html/changelogs/RemieRichards-PR-8554.yml
new file mode 100644
index 00000000000..580c5c98167
--- /dev/null
+++ b/html/changelogs/RemieRichards-PR-8554.yml
@@ -0,0 +1,5 @@
+author: RemieRichards
+delete-after: True
+changes:
+ - rscadd: "Monkeys can now wear ANY mask, not just ones they had specific icons for."
+ - rscadd: "Monkeys can now wear HATS, That's right, Monkey Hats!"
diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi
index d1872d6aaff..fd2ca052740 100644
Binary files a/icons/mob/monkey.dmi and b/icons/mob/monkey.dmi differ