Return of the neck slot! (#27188)

* this turned out to be wayyyy more than just a test

* remove bedsheet icons from back.dmi

* hud+better icons

* error fixed

* fixes a few bedsheet icons

* Update code/game/objects/items/weapons/storage/garment.dm

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
Signed-off-by: Bm0n <92271472+Bm0n@users.noreply.github.com>

* review

* spacing

* TGUI Bundle Rebuild

* TGUI Bundle Rebuild

* TGUI Bundle Rebuild

* TGUI Bundle Rebuild

* lint?

* guh

* lint

* TGUI Bundle Rebuild

* test

* fix

* dead golem fix

* TGUI Bundle Rebuild

* TGUI Bundle Rebuild

* TGUI Bundle Rebuild

---------

Signed-off-by: Bm0n <92271472+Bm0n@users.noreply.github.com>
Co-authored-by: Bmon <no@email.com>
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
Bm0n
2024-11-27 17:04:53 +00:00
committed by GitHub
co-authored by Henri215 Bmon
parent 0a6425be7c
commit 6eb1269d8e
46 changed files with 226 additions and 54 deletions
+3 -2
View File
@@ -25,8 +25,9 @@
#define ITEM_SLOT_PDA (1<<20) // pda
#define ITEM_SLOT_ACCESSORY (1<<21) // accessories
#define ITEM_SLOT_COLLAR (1<<22) // pet collar
#define ITEM_SLOT_AMOUNT_FLAG (1<<ITEM_SLOT_AMOUNT)
#define ITEM_SLOT_AMOUNT 22 // IF YOU ADD ANY NEW CLOTHING SLOTS, MAKE SURE TO UPDATE THIS TO THE AMOUNT OF SLOTS.
#define ITEM_SLOT_NECK (1<<23) // neck
#define ITEM_SLOT_AMOUNT_FLAG (1<<(ITEM_SLOT_AMOUNT-1))
#define ITEM_SLOT_AMOUNT 24 // IF YOU ADD ANY NEW CLOTHING SLOTS, MAKE SURE TO UPDATE THIS TO THE AMOUNT OF SLOTS.
/// Translates an ITEM_SLOT back to an index that can be looked up in inv_slots. e.g. (1<<19) becomes 19.
#define ITEM_SLOT_2_INDEX(slot) (log(2, slot) + 1)
+3 -1
View File
@@ -111,11 +111,13 @@
#define ui_gloves "WEST+2:10,SOUTH+1:7"
#define ui_glasses "WEST:6,SOUTH+2:9"
#define ui_glasses "WEST:6,SOUTH+3:11"
#define ui_mask "WEST+1:8,SOUTH+2:9"
#define ui_l_ear "WEST+2:10,SOUTH+2:9"
#define ui_r_ear "WEST+2:10,SOUTH+3:11"
#define ui_neck "WEST:6,SOUTH+2:9"
#define ui_head "WEST+1:8,SOUTH+3:11"
// AI
+28 -27
View File
@@ -185,32 +185,33 @@
#define FOAM_REACT_BEFORE_SPREAD (1<<3)
//Human Overlays Indexes/////////
#define EYES_OVERLAY_LAYER 48
#define MISC_LAYER 47 // Handles eye_shine() -> cybernetic eyes, specific eye traits.
#define WING_LAYER 46
#define WING_UNDERLIMBS_LAYER 45
#define MUTANTRACE_LAYER 44
#define TAIL_UNDERLIMBS_LAYER 43 //Tail split-rendering.
#define LIMBS_LAYER 42
#define MARKINGS_LAYER 41
#define INTORGAN_LAYER 40
#define UNDERWEAR_LAYER 39
#define MUTATIONS_LAYER 38
#define H_DAMAGE_LAYER 37
#define UNIFORM_LAYER 36
#define ID_LAYER 35
#define HANDS_LAYER 34 //Exists to overlay hands over jumpsuits
#define SHOES_LAYER 33
#define L_FOOT_BLOOD_LAYER 32 // Blood overlay separation Left-Foot
#define R_FOOT_BLOOD_LAYER 31 // Blood overlay separation Right-Foot
#define GLOVES_LAYER 30
#define L_HAND_BLOOD_LAYER 29 // Blood overlay separation Left-Hand
#define R_HAND_BLOOD_LAYER 28 // Blood overlay separation Right-Hand
#define LEFT_EAR_LAYER 27
#define RIGHT_EAR_LAYER 26
#define BELT_LAYER 25 //Possible make this an overlay of something required to wear a belt?
#define SUIT_LAYER 24
#define SPECIAL_BELT_LAYER 23
#define EYES_OVERLAY_LAYER 49
#define MISC_LAYER 48 // Handles eye_shine() -> cybernetic eyes, specific eye traits.
#define WING_LAYER 47
#define WING_UNDERLIMBS_LAYER 46
#define MUTANTRACE_LAYER 45
#define TAIL_UNDERLIMBS_LAYER 44 //Tail split-rendering.
#define LIMBS_LAYER 43
#define MARKINGS_LAYER 42
#define INTORGAN_LAYER 41
#define UNDERWEAR_LAYER 40
#define MUTATIONS_LAYER 39
#define H_DAMAGE_LAYER 38
#define UNIFORM_LAYER 37
#define ID_LAYER 36
#define HANDS_LAYER 35 //Exists to overlay hands over jumpsuits
#define SHOES_LAYER 34
#define L_FOOT_BLOOD_LAYER 33 // Blood overlay separation Left-Foot
#define R_FOOT_BLOOD_LAYER 32 // Blood overlay separation Right-Foot
#define GLOVES_LAYER 31
#define L_HAND_BLOOD_LAYER 30 // Blood overlay separation Left-Hand
#define R_HAND_BLOOD_LAYER 29 // Blood overlay separation Right-Hand
#define LEFT_EAR_LAYER 28
#define RIGHT_EAR_LAYER 27
#define BELT_LAYER 26 //Possible make this an overlay of something required to wear a belt?
#define SUIT_LAYER 25
#define SPECIAL_BELT_LAYER 24
#define NECK_LAYER 23
#define SUIT_STORE_LAYER 22
#define BACK_LAYER 21
#define HEAD_ACCESSORY_LAYER 20
@@ -233,7 +234,7 @@
#define HALO_LAYER 3 //blood cult ascended halo, because there's currently no better solution for adding/removing
#define FIRE_LAYER 2 //If you're on fire
#define FROZEN_LAYER 1
#define TOTAL_LAYERS 48
#define TOTAL_LAYERS 49
///Access Region Codes///
#define REGION_ALL 0
+15
View File
@@ -198,6 +198,16 @@
inv_box.alpha = ui_alpha
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
inv_box.screen_loc = ui_neck
inv_box.slot_id = ITEM_SLOT_NECK
inv_box.color = ui_color
inv_box.alpha = ui_alpha
toggleable_inventory += inv_box
inv_box = new /atom/movable/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
@@ -434,6 +444,9 @@
if(H.wear_mask)
H.wear_mask.screen_loc = ui_mask
screenmob.client.screen += H.wear_mask
if(H.neck)
H.neck.screen_loc = ui_neck
screenmob.client.screen += H.neck
if(H.head)
H.head.screen_loc = ui_head
screenmob.client.screen += H.head
@@ -454,6 +467,8 @@
screenmob.client.screen -= H.wear_suit
if(H.wear_mask)
screenmob.client.screen -= H.wear_mask
if(H.neck)
screenmob.client.screen -= H.neck
if(H.head)
screenmob.client.screen -= H.head
+4 -3
View File
@@ -616,6 +616,10 @@
var/obj/item/voice_changer/V = target
V.set_voice(usr)
/datum/action/item_action/herald
name = "Mirror Walk"
desc = "Use near a mirror to enter it."
// for clothing accessories like holsters
/datum/action/item_action/accessory
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_LYING|AB_CHECK_CONSCIOUS
@@ -637,9 +641,6 @@
name = "View Storage"
/datum/action/item_action/accessory/herald
name = "Mirror Walk"
desc = "Use near a mirror to enter it."
//Preset for spells
/datum/action/spell_action
+8 -1
View File
@@ -10,6 +10,7 @@
var/shoes = null
var/head = null
var/mask = null
var/neck = null
var/l_ear = null
var/r_ear = null
var/glasses = null
@@ -85,6 +86,8 @@
equip_item(H, head, ITEM_SLOT_HEAD)
if(mask)
equip_item(H, mask, ITEM_SLOT_MASK)
if(neck)
equip_item(H, neck, ITEM_SLOT_NECK)
if(l_ear)
equip_item(H, l_ear, ITEM_SLOT_LEFT_EAR)
if(r_ear)
@@ -172,6 +175,8 @@
H.wear_suit.add_fingerprint(H, 1)
if(H.wear_mask)
H.wear_mask.add_fingerprint(H, 1)
if(H.neck)
H.neck.add_fingerprint(H, 1)
if(H.head)
H.head.add_fingerprint(H, 1)
if(H.shoes)
@@ -199,7 +204,7 @@
return 1
/datum/outfit/proc/get_chameleon_disguise_info()
var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, l_ear, r_ear, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, pda)
var/list/types = list(uniform, suit, back, belt, gloves, shoes, head, mask, neck, l_ear, r_ear, glasses, id, l_pocket, r_pocket, suit_store, r_hand, l_hand, pda)
types += chameleon_extras
listclearnulls(types)
return types
@@ -225,6 +230,7 @@
shoes = text2path(outfit_data["shoes"])
head = text2path(outfit_data["head"])
mask = text2path(outfit_data["mask"])
neck = text2path(outfit_data["neck"])
l_ear = text2path(outfit_data["l_ear"])
r_ear = text2path(outfit_data["r_ear"])
glasses = text2path(outfit_data["glasses"])
@@ -281,6 +287,7 @@
.["shoes"] = shoes
.["head"] = head
.["mask"] = mask
.["neck"] = neck
.["l_ear"] = l_ear
.["r_ear"] = r_ear
.["glasses"] = glasses
+3 -1
View File
@@ -27,6 +27,8 @@
head = item_path
if(ITEM_SLOT_MASK)
mask = item_path
if(ITEM_SLOT_NECK)
neck = item_path
if(ITEM_SLOT_LEFT_EAR)
l_ear = item_path
if(ITEM_SLOT_RIGHT_EAR)
@@ -70,7 +72,7 @@
// Copy equipment
var/list/result = list()
var/list/slots_to_check = list(ITEM_SLOT_JUMPSUIT, ITEM_SLOT_BACK, ITEM_SLOT_OUTER_SUIT, ITEM_SLOT_BELT, ITEM_SLOT_GLOVES, ITEM_SLOT_SHOES, ITEM_SLOT_HEAD, ITEM_SLOT_MASK, ITEM_SLOT_LEFT_EAR, ITEM_SLOT_RIGHT_EAR, ITEM_SLOT_EYES, ITEM_SLOT_ID, ITEM_SLOT_PDA, ITEM_SLOT_SUIT_STORE, ITEM_SLOT_LEFT_POCKET, ITEM_SLOT_RIGHT_POCKET)
var/list/slots_to_check = list(ITEM_SLOT_JUMPSUIT, ITEM_SLOT_BACK, ITEM_SLOT_OUTER_SUIT, ITEM_SLOT_BELT, ITEM_SLOT_GLOVES, ITEM_SLOT_SHOES, ITEM_SLOT_HEAD, ITEM_SLOT_MASK, ITEM_SLOT_LEFT_EAR, ITEM_SLOT_RIGHT_EAR, ITEM_SLOT_EYES, ITEM_SLOT_ID, ITEM_SLOT_PDA, ITEM_SLOT_SUIT_STORE, ITEM_SLOT_LEFT_POCKET, ITEM_SLOT_RIGHT_POCKET, ITEM_SLOT_NECK)
for(var/s in slots_to_check)
var/obj/item/I = get_item_by_slot(s)
var/vedits = collect_vv(I)
+3
View File
@@ -1061,6 +1061,9 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
if(belt)
if(belt.clean_blood(radiation_clean))
update_inv_belt()
if(neck)
if(neck.clean_blood(radiation_clean))
update_inv_neck()
..(clean_hands, clean_mask, clean_feet)
update_icons() //apply the now updated overlays to the mob
+2
View File
@@ -865,6 +865,8 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
owner.update_inv_ears()
if(flags & ITEM_SLOT_MASK)
owner.update_inv_wear_mask()
if(flags & ITEM_SLOT_NECK)
owner.update_inv_neck()
if(flags & ITEM_SLOT_HEAD)
owner.update_inv_head()
if(flags & ITEM_SLOT_SHOES)
@@ -15,6 +15,7 @@
/obj/item/clothing/suit/space,
/obj/item/clothing/mask/cigarette,
/obj/item/clothing/mask/facehugger, //Why would you do this
/obj/item/clothing/neck/cloak,
/obj/item/clothing/accessory/medal,
/obj/item/clothing/suit/armor/riot,
/obj/item/clothing/suit/armor/reactive,
@@ -33,6 +34,7 @@
new /obj/item/clothing/head/beret/captain(src)
new /obj/item/clothing/head/beret/captain/white(src)
new /obj/item/clothing/head/crown/fancy(src)
new /obj/item/clothing/neck/cloak/captain(src)
new /obj/item/clothing/suit/armor/vest/capcarapace(src)
new /obj/item/clothing/suit/armor/vest/capcarapace/jacket(src)
new /obj/item/clothing/suit/armor/vest/capcarapace/jacket/tunic(src)
@@ -58,6 +60,7 @@
/obj/item/storage/bag/garment/head_of_personnel/populate_contents()
new /obj/item/clothing/head/hop(src)
new /obj/item/clothing/head/beret/hop(src)
new /obj/item/clothing/neck/cloak/head_of_personnel(src)
new /obj/item/clothing/suit/mantle/armor/hop(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/suit/hopcoat(src)
@@ -83,6 +86,7 @@
/obj/item/storage/bag/garment/head_of_security/populate_contents()
new /obj/item/clothing/head/HoS(src)
new /obj/item/clothing/head/beret/hos(src)
new /obj/item/clothing/neck/cloak/head_of_security(src)
new /obj/item/clothing/suit/armor/hos(src)
new /obj/item/clothing/suit/armor/hos/alt(src)
new /obj/item/clothing/suit/mantle/armor(src)
@@ -101,6 +105,7 @@
/obj/item/storage/bag/garment/research_director/populate_contents()
new /obj/item/clothing/head/beret/sci(src)
new /obj/item/clothing/neck/cloak/research_director(src)
new /obj/item/clothing/under/rank/rnd/research_director(src)
new /obj/item/clothing/suit/storage/labcoat/rd(src)
new /obj/item/clothing/suit/mantle/labcoat(src)
@@ -122,6 +127,7 @@
new /obj/item/clothing/head/surgery/blue(src)
new /obj/item/clothing/head/surgery/green(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/neck/cloak/chief_medical_officer(src)
new /obj/item/clothing/under/rank/medical/chief_medical_officer(src)
new /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt(src)
new /obj/item/clothing/under/rank/medical/scrubs(src)
@@ -143,6 +149,7 @@
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/beret/ce(src)
new /obj/item/clothing/head/beret/eng(src)
new /obj/item/clothing/neck/cloak/chief_engineer(src)
new /obj/item/clothing/under/rank/engineering/chief_engineer(src)
new /obj/item/clothing/under/rank/engineering/chief_engineer/skirt(src)
new /obj/item/clothing/suit/mantle/chief_engineer(src)
@@ -225,6 +232,7 @@
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/head/qm(src)
new /obj/item/clothing/head/beret/qm(src)
new /obj/item/clothing/neck/cloak/quartermaster(src)
new /obj/item/clothing/head/hardhat/orange(src)
new /obj/item/clothing/suit/qmcoat(src)
new /obj/item/clothing/suit/mantle/qm(src)
+1 -2
View File
@@ -9,7 +9,6 @@ LINEN BINS
desc = "A surprisingly soft linen bedsheet."
icon = 'icons/obj/bedsheet.dmi'
icon_state = "sheet"
item_state = "bedsheet"
lefthand_file = 'icons/mob/inhands/bedsheet_lefthand.dmi'
righthand_file = 'icons/mob/inhands/bedsheet_righthand.dmi'
layer = 4
@@ -19,7 +18,7 @@ LINEN BINS
w_class = WEIGHT_CLASS_TINY
item_color = "white"
resistance_flags = FLAMMABLE
slot_flags = ITEM_SLOT_BACK
slot_flags = ITEM_SLOT_NECK
dog_fashion = /datum/dog_fashion/head/ghost
dyeing_key = DYE_REGISTRY_BEDSHEET
@@ -3,6 +3,7 @@
"inventory-glasses.png" = 'icons/ui_icons/inventory/glasses.png',
"inventory-head.png" = 'icons/ui_icons/inventory/head.png',
"inventory-mask.png" = 'icons/ui_icons/inventory/mask.png',
"inventory-neck.png" = 'icons/ui_icons/inventory/neck.png',
"inventory-ears.png" = 'icons/ui_icons/inventory/ears.png',
"inventory-uniform.png" = 'icons/ui_icons/inventory/uniform.png',
"inventory-suit.png" = 'icons/ui_icons/inventory/suit.png',
+6
View File
@@ -1185,3 +1185,9 @@
deconstruct(FALSE)
else
..()
/obj/item/clothing/neck
name = "necklace"
icon = 'icons/obj/clothing/neck.dmi'
body_parts_covered = UPPER_TORSO
slot_flags = ITEM_SLOT_NECK
+47
View File
@@ -0,0 +1,47 @@
//Cloaks. No, not THAT kind of cloak.
/obj/item/clothing/neck/cloak
name = "grey cloak"
desc = "It's a cloak that can be worn around your neck in a pretty dull color."
icon_state = "cloak"
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = UPPER_TORSO | ARMS
/obj/item/clothing/neck/cloak/head_of_security
name = "head of security's cloak"
desc = "Worn by the leader of Brigston, ruling the station with an iron fist."
icon_state = "hoscloak"
/obj/item/clothing/neck/cloak/quartermaster
name = "quartermaster's cloak"
desc = "Worn by the God-emperor of Cargonia, supplying the station with the necessary tools for survival."
icon_state = "qmcloak"
/obj/item/clothing/neck/cloak/chief_medical_officer
name = "chief medical officer's cloak"
desc = "Worn by the leader of Medistan, the valiant men and women keeping pestilence at bay."
icon_state = "cmocloak"
/obj/item/clothing/neck/cloak/chief_engineer
name = "chief engineer's cloak"
desc = "Worn by the leader of both Atmosia and Delamistan, wielder of unlimited power."
icon_state = "cecloak"
/obj/item/clothing/neck/cloak/research_director
name = "research director's cloak"
desc = "Worn by the leader of Scientopia, the greatest thaumaturgist and researcher of rapid unexpected self disassembly."
icon_state = "rdcloak"
/obj/item/clothing/neck/cloak/captain
name = "captain's cloak"
desc = "Worn by the supreme leader of Space Station 13."
icon_state = "capcloak"
/obj/item/clothing/neck/cloak/captain/Initialize(mapload)
. = ..()
desc = "Worn by the supreme leader of [station_name()]."
/obj/item/clothing/neck/cloak/head_of_personnel
name = "head of personnel's cloak"
desc = "Worn by the Head of Personnel. It smells faintly of bureaucracy."
icon_state = "hopcloak"
+1 -1
View File
@@ -30,7 +30,7 @@
)
/obj/item/clothing/suit/mantle/armor/captain
name = "captain's cloak"
name = "captain's mantle"
desc = "An armor-plated piece of fashion for the ruling elite. Protect your upper half in style."
icon_state = "capmantle"
item_state = "capmantle"
+2
View File
@@ -231,6 +231,8 @@
items += glasses
if(gloves)
items += gloves
if(neck)
items += neck
if(shoes)
items += shoes
if(wear_id)
@@ -82,6 +82,10 @@
"<span class='userdanger'>[user] [muzzle.locked ? "locks" : "unlocks"] [source]'s [muzzle.name].</span>")
/datum/strippable_item/mob_item_slot/neck
key = STRIPPABLE_ITEM_NECK
item_slot = ITEM_SLOT_NECK
/datum/strippable_item/mob_item_slot/handcuffs
key = STRIPPABLE_ITEM_HANDCUFFS
item_slot = ITEM_SLOT_HANDCUFFED
@@ -184,7 +184,7 @@ emp_act
/mob/living/carbon/human/proc/getarmor_organ(obj/item/organ/external/def_zone, type)
if(!type || !def_zone) return 0
var/protection = 0
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, l_ear, r_ear, wear_id) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor)
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, back, gloves, shoes, belt, s_store, glasses, l_ear, r_ear, wear_id, neck) //Everything but pockets. Pockets are l_store and r_store. (if pockets were allowed, putting something armored, gloves or hats for example, would double up on the armor)
for(var/bp in body_parts)
if(!bp) continue
if(bp && isclothing(bp))
@@ -45,6 +45,7 @@
var/obj/item/clothing/shoes = null
var/obj/item/belt = null
var/obj/item/clothing/gloves = null
var/obj/item/clothing/neck = null
var/obj/item/clothing/glasses = null
var/obj/item/l_ear = null
var/obj/item/r_ear = null
@@ -3,6 +3,7 @@
list("[p_are()] holding", l_hand, "in", "left hand"),
list("[p_are()] holding", r_hand, "in", "right hand"),
list("[p_are()] wearing", head, "on", "head"),
list("[p_are()] wearing", neck, "around", "neck"),
list("[p_are()] wearing", !skip_jumpsuit && w_uniform, null, null, length(w_uniform?.accessories) && "[english_accessory_list(w_uniform)]"),
list("[p_are()] wearing", wear_suit, null, null),
list("[p_are()] carrying", !skip_suit_storage && s_store, "on", wear_suit && wear_suit.name),
@@ -24,6 +24,8 @@
return has_organ("chest")
if(ITEM_SLOT_MASK)
return has_organ("head")
if(ITEM_SLOT_NECK)
return has_organ("chest")
if(ITEM_SLOT_HANDCUFFED)
return has_organ("l_hand") && has_organ("r_hand")
if(ITEM_SLOT_LEGCUFFED)
@@ -96,6 +98,9 @@
else if(I == gloves)
gloves = null
update_inv_gloves()
else if(I == neck)
neck = null
update_inv_neck()
else if(I == glasses)
glasses = null
var/obj/item/clothing/glasses/G = I
@@ -222,6 +227,9 @@
wear_mask_update(I, toggle_off = TRUE)
update_misc_effects()
update_inv_wear_mask()
if(ITEM_SLOT_NECK)
neck = I
update_inv_neck()
if(ITEM_SLOT_HANDCUFFED)
handcuffed = I
update_inv_handcuffed()
@@ -356,6 +364,8 @@
return back
if(ITEM_SLOT_MASK)
return wear_mask
if(ITEM_SLOT_NECK)
return neck
if(ITEM_SLOT_HANDCUFFED)
return handcuffed
if(ITEM_SLOT_LEGCUFFED)
@@ -353,6 +353,9 @@
if(gloves)
if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature)
thermal_protection_flags |= gloves.heat_protection
if(neck)
if(neck.max_heat_protection_temperature && neck.max_heat_protection_temperature >= temperature)
thermal_protection_flags |= neck.heat_protection
if(wear_mask)
if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature)
thermal_protection_flags |= wear_mask.heat_protection
@@ -414,6 +417,9 @@
if(gloves)
if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature)
thermal_protection_flags |= gloves.cold_protection
if(neck)
if(neck.min_cold_protection_temperature && neck.min_cold_protection_temperature <= temperature)
thermal_protection_flags |= neck.cold_protection
if(wear_mask)
if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature)
thermal_protection_flags |= wear_mask.cold_protection
@@ -528,6 +534,8 @@
covered |= shoes.body_parts_covered
if(gloves)
covered |= gloves.body_parts_covered
if(neck)
covered |= neck.body_parts_covered
if(wear_mask)
covered |= wear_mask.body_parts_covered
@@ -1111,7 +1111,7 @@
if(!(dna.species.bodyflags & HAS_SKIN_TONE))
s_tone = 0
var/list/thing_to_check = list(ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_SHOES, ITEM_SLOT_GLOVES, ITEM_SLOT_LEFT_EAR, ITEM_SLOT_RIGHT_EAR, ITEM_SLOT_EYES, ITEM_SLOT_LEFT_HAND, ITEM_SLOT_RIGHT_HAND)
var/list/thing_to_check = list(ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_SHOES, ITEM_SLOT_GLOVES, ITEM_SLOT_LEFT_EAR, ITEM_SLOT_RIGHT_EAR, ITEM_SLOT_EYES, ITEM_SLOT_LEFT_HAND, ITEM_SLOT_RIGHT_HAND, ITEM_SLOT_NECK)
var/list/kept_items[0]
var/list/item_flags[0]
for(var/thing in thing_to_check)
@@ -5,6 +5,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/head,
/datum/strippable_item/mob_item_slot/back,
/datum/strippable_item/mob_item_slot/mask,
/datum/strippable_item/mob_item_slot/neck,
/datum/strippable_item/mob_item_slot/eyes,
/datum/strippable_item/mob_item_slot/left_ear,
/datum/strippable_item/mob_item_slot/right_ear,
@@ -539,6 +539,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
update_inv_w_uniform()
update_inv_wear_id()
update_inv_gloves()
update_inv_neck()
update_inv_glasses()
update_inv_ears()
update_inv_shoes()
@@ -1059,6 +1060,22 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
overlays_standing[FACEMASK_LAYER] = standing
apply_overlay(FACEMASK_LAYER)
/mob/living/carbon/human/update_inv_neck()
remove_overlay(NECK_LAYER)
if(client && hud_used)
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[ITEM_SLOT_2_INDEX(ITEM_SLOT_NECK)]
if(inv)
inv.update_icon()
if(neck)
update_hud_neck(neck)
if(neck.icon_override)
overlays_standing[NECK_LAYER] = mutable_appearance(neck.icon_override, "[neck.icon_state]", layer = -NECK_LAYER)
else if(neck.sprite_sheets && neck.sprite_sheets[dna.species.sprite_sheet_name])
overlays_standing[NECK_LAYER] = mutable_appearance(neck.sprite_sheets[dna.species.sprite_sheet_name], "[neck.icon_state]", layer = -NECK_LAYER)
else
overlays_standing[NECK_LAYER] = mutable_appearance('icons/mob/clothing/neck.dmi', "[neck.icon_state]", layer = -NECK_LAYER)
apply_overlay(NECK_LAYER)
/mob/living/carbon/human/update_inv_back()
..()
@@ -1232,6 +1249,12 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
client.screen += worn_item
update_observer_view(worn_item, TRUE)
/mob/living/carbon/human/proc/update_hud_neck(obj/item/worn_item)
worn_item.screen_loc = ui_neck
if((client && hud_used && hud_used.hud_version == HUD_STYLE_STANDARD) && (hud_used.inventory_shown && hud_used.hud_shown))
client.screen += worn_item
update_observer_view(worn_item, TRUE)
/mob/living/carbon/human/update_hud_back(obj/item/worn_item)
worn_item.screen_loc = ui_back
if(client && hud_used?.hud_shown && hud_used.hud_version == HUD_STYLE_STANDARD)
@@ -773,6 +773,8 @@
return !H.gloves && (I.slot_flags & ITEM_SLOT_GLOVES)
if(ITEM_SLOT_SHOES)
return !H.shoes && (I.slot_flags & ITEM_SLOT_SHOES)
if(ITEM_SLOT_NECK)
return !H.neck && (I.slot_flags & ITEM_SLOT_NECK)
if(ITEM_SLOT_BELT)
if(H.belt)
return FALSE
@@ -13,7 +13,7 @@
species_traits = list(NOT_SELECTABLE)
skinned_type = /obj/item/stack/sheet/animalhide/monkey
greater_form = /datum/species/human
no_equip = ITEM_SLOT_BELT | ITEM_SLOT_ID | ITEM_SLOT_LEFT_EAR | ITEM_SLOT_RIGHT_EAR | ITEM_SLOT_EYES | ITEM_SLOT_GLOVES | ITEM_SLOT_SHOES | ITEM_SLOT_OUTER_SUIT | ITEM_SLOT_JUMPSUIT | ITEM_SLOT_LEFT_POCKET | ITEM_SLOT_RIGHT_POCKET | ITEM_SLOT_SUIT_STORE | ITEM_SLOT_PDA
no_equip = ITEM_SLOT_BELT | ITEM_SLOT_ID | ITEM_SLOT_LEFT_EAR | ITEM_SLOT_RIGHT_EAR | ITEM_SLOT_EYES | ITEM_SLOT_GLOVES | ITEM_SLOT_SHOES | ITEM_SLOT_OUTER_SUIT | ITEM_SLOT_JUMPSUIT | ITEM_SLOT_LEFT_POCKET | ITEM_SLOT_RIGHT_POCKET | ITEM_SLOT_SUIT_STORE | ITEM_SLOT_PDA | ITEM_SLOT_NECK
inherent_factions = list("jungle", "monkey")
can_craft = FALSE
is_small = 1
@@ -40,7 +40,7 @@
mouse_opacity = MOUSE_OPACITY_ICON
death_sound = 'sound/misc/demon_dies.ogg'
deathmessage = "begins to shudder as it becomes transparent..."
loot_drop = /obj/item/clothing/accessory/necklace/herald_cloak
loot_drop = /obj/item/clothing/neck/cloak/herald_cloak
attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot,
@@ -257,22 +257,21 @@
//Herald's loot: Cloak of the Prophet
/obj/item/clothing/accessory/necklace/herald_cloak
/obj/item/clothing/neck/cloak/herald_cloak
name = "cloak of the prophet"
desc = "A cloak which lts you travel through a perfect reflection of the world."
icon = 'icons/obj/lavaland/elite_trophies.dmi'
icon_state = "herald_cloak"
item_state = "herald_cloak"
item_color = "herald_cloak"
slot_flags = ITEM_SLOT_ACCESSORY
allow_duplicates = FALSE
actions_types = list(/datum/action/item_action/accessory/herald)
actions_types = list(/datum/action/item_action/herald)
/obj/item/clothing/accessory/necklace/herald_cloak/attack_self()
if(has_suit)
mirror_walk()
/obj/item/clothing/accessory/necklace/herald_cloak/proc/mirror_walk()
/obj/item/clothing/neck/cloak/herald_cloak/item_action_slot_check(slot)
if(slot == ITEM_SLOT_NECK)
return TRUE
/obj/item/clothing/neck/cloak/herald_cloak/ui_action_click()
var/found_mirror = FALSE
var/list/mirrors_to_use = list()
var/list/areaindex = list()
@@ -402,7 +402,7 @@
if(prob(10))
belt = pick(/obj/item/storage/belt/mining/vendor, /obj/item/storage/belt/utility/full)
if(prob(50))
back = /obj/item/bedsheet/rd/royal_cape
neck = /obj/item/bedsheet/rd/royal_cape
if(prob(10))
l_pocket = pick(/obj/item/crowbar/power, /obj/item/wrench/power, /obj/item/weldingtool/experimental)
if("YeOlde")
+10
View File
@@ -309,6 +309,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
ITEM_SLOT_JUMPSUIT,\
ITEM_SLOT_OUTER_SUIT,\
ITEM_SLOT_MASK,\
ITEM_SLOT_NECK,\
ITEM_SLOT_HEAD,\
ITEM_SLOT_SHOES,\
ITEM_SLOT_GLOVES,\
@@ -393,6 +394,15 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
else
return 0
return 1
if(ITEM_SLOT_NECK)
if(!(slot_flags & ITEM_SLOT_NECK))
return 0
if(H.neck)
if(!(H.neck.flags & NODROP))
return 2
else
return 0
return 1
if(ITEM_SLOT_SHOES)
if(!(slot_flags & ITEM_SLOT_SHOES))
return 0
@@ -40,6 +40,9 @@
/mob/proc/update_inv_gloves()
return
/mob/proc/update_inv_neck()
return
/mob/proc/update_mutations()
return
Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

+1
View File
@@ -1759,6 +1759,7 @@
#include "code\modules\clothing\masks\gasmask.dm"
#include "code\modules\clothing\masks\misc_masks.dm"
#include "code\modules\clothing\masks\voicemodulator.dm"
#include "code\modules\clothing\neck\cloaks.dm"
#include "code\modules\clothing\patreon\hats.dm"
#include "code\modules\clothing\patreon\patreon_glasses.dm"
#include "code\modules\clothing\shoes\colour.dm"
+14 -2
View File
@@ -95,7 +95,7 @@ const SLOTS: Record<
> = {
eyes: {
displayName: 'eyewear',
gridSpot: getGridSpotKey([1, 0]),
gridSpot: getGridSpotKey([0, 0]),
image: 'inventory-glasses.png',
},
@@ -111,6 +111,12 @@ const SLOTS: Record<
image: 'inventory-mask.png',
},
neck: {
displayName: 'neck',
gridSpot: getGridSpotKey([1, 0]),
image: 'inventory-neck.png',
},
pet_collar: {
displayName: 'collar',
gridSpot: getGridSpotKey([1, 1]),
@@ -237,7 +243,7 @@ const ALTERNATIVE_SLOTS: Record<
> = {
eyes: {
displayName: 'eyewear',
gridSpot: getGridSpotKey([1, 0]),
gridSpot: getGridSpotKey([0, 0]),
image: 'inventory-glasses.png',
},
@@ -253,6 +259,12 @@ const ALTERNATIVE_SLOTS: Record<
image: 'inventory-mask.png',
},
neck: {
displayName: 'neck',
gridSpot: getGridSpotKey([1, 0]),
image: 'inventory-neck.png',
},
pet_collar: {
displayName: 'collar',
gridSpot: getGridSpotKey([1, 1]),
File diff suppressed because one or more lines are too long