ports pockets (from Animus Green) and adds them to some clothing.

This PR ports pockets (from Animus Green) and adds them to some clothing.

 Shoes that support storing items now use pockets system.
 Some hats have 1 small pocket.
 Detective's hat spawns with a flask in it.
 Clown's mask has a single tiny top-secret pocket. Honk!

This PR also includes two or three path fixes. It also fixes internal storages (pockets, storage implant) having less "max depth" than external ones.
This commit is contained in:
Core0verload
2016-07-14 10:36:26 +03:00
committed by oranges
parent 90340ca794
commit e666d2e76b
20 changed files with 178 additions and 72 deletions
+1 -1
View File
@@ -303,7 +303,7 @@
flags = NOSLIP
origin_tech = "syndicate=2"
burn_state = FIRE_PROOF
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/shoes/chameleon/New()
+62 -31
View File
@@ -24,10 +24,72 @@
var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts"
var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped()
var/obj/item/weapon/storage/internal/pocket/pockets = null
/obj/item/clothing/New()
..()
if(ispath(pockets))
pockets = new pockets(src)
/obj/item/clothing/MouseDrop(atom/over_object)
var/mob/M = usr
if(pockets && over_object == M)
return pockets.MouseDrop(over_object)
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return
if(!M.restrained() && !M.stat && loc == M && 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)
/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin)
if(pockets)
pockets.close_all()
return ..()
/obj/item/clothing/attack_hand(mob/user)
if(pockets && pockets.priority && ismob(loc))
pockets.show_to(user)
else
return ..()
/obj/item/clothing/attackby(obj/item/W, mob/user, params)
if(pockets)
return pockets.attackby(W, user, params)
else
return ..()
/obj/item/clothing/AltClick(mob/user)
if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated())
var/obj/item/I = pockets.contents[1]
if(!I)
return
pockets.remove_from_storage(I, get_turf(src))
if(!user.put_in_hands(I))
user << "<span class='notice'>You fumble for [I] and it falls on the floor.</span>"
return
user.visible_message("<span class='warning'>[user] draws [I] from [src]!</span>", "<span class='notice'>You draw [I] from [src].</span>")
else
return ..()
/obj/item/clothing/Destroy()
if(isliving(loc))
dropped(loc)
if(pockets)
qdel(pockets)
pockets = null
user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up
return ..()
@@ -209,10 +271,6 @@ BLIND // can't see anything
slowdown = SHOES_SLOWDOWN
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
var/can_hold_items = 0//if set to 1, the shoe can hold knives and edaggers
var/obj/held_item
var/list/valid_held_items = list(/obj/item/weapon/kitchen/knife, /obj/item/weapon/pen, /obj/item/weapon/switchblade, /obj/item/weapon/scalpel, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/dnainjector)//can hold both regular pens and energy daggers. made for your every-day tactical librarians/murderers.
/obj/item/clothing/shoes/worn_overlays(var/isinhands = FALSE)
. = list()
@@ -235,33 +293,6 @@ BLIND // can't see anything
var/mob/M = loc
M.update_inv_shoes()
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
..()
if(!can_hold_items)
return
if(held_item)
user << "<span class='notice'>There's already something in [src].</span>"
return
if(is_type_in_list(I, valid_held_items))//can hold both regular pens and energy daggers. made for your every-day tactical librarians/murderers.
if(I.w_class > 2)//if the object is too big (like if it's a cleaver or an extended edagger) it wont fit
user << "<span class='notice'>[I] is currently too big to fit into [src]. </span>"
return
if(!user.drop_item())
return
I.loc = src
held_item = I
user << "<span class='notice'>You discreetly slip [I] into [src]. Alt-click [src] to remove it.</span>"
/obj/item/clothing/shoes/AltClick(mob/user)
if(user.incapacitated() || !held_item || !can_hold_items)
return
if(!user.put_in_hands(held_item))
user << "<span class='notice'>You fumble for [held_item] and it falls on the floor.</span>"
held_item = null
return
user.visible_message("<span class='warning'>[user] draws [held_item] from their shoes!</span>", "<span class='notice'>You draw [held_item] from [src].</span>")
held_item = null
/obj/item/proc/negates_gravity()
return 0
+2 -2
View File
@@ -8,7 +8,7 @@
desc = "The commander in chef's head wear."
strip_delay = 10
put_on_delay = 10
pockets = /obj/item/weapon/storage/internal/pocket/small
dog_fashion = /datum/dog_fashion/head/chef
/obj/item/clothing/head/chefhat/suicide_act(mob/user)
@@ -64,7 +64,7 @@
icon_state = "detective"
armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
var/candy_cooldown = 0
pockets = /obj/item/weapon/storage/internal/pocket/small/detective
dog_fashion = /datum/dog_fashion/head/detective
/obj/item/clothing/head/det_hat/AltClick()
+3 -4
View File
@@ -116,12 +116,9 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
dog_fashion = /datum/dog_fashion/head/pirate
/obj/item/clothing/head/hgpiratecap
name = "pirate hat"
desc = "Yarr."
/obj/item/clothing/head/pirate/captain
icon_state = "hgpiratecap"
item_state = "hgpiratecap"
@@ -136,6 +133,7 @@
desc = "Gentleman, elite aboard!"
icon_state = "bowler"
item_state = "bowler"
pockets = /obj/item/weapon/storage/internal/pocket/small
/obj/item/clothing/head/witchwig
name = "witch costume wig"
@@ -176,6 +174,7 @@
icon_state = "fedora"
item_state = "fedora"
desc = "A really cool hat if you're a mobster. A really lame hat if you're not."
pockets = /obj/item/weapon/storage/internal/pocket/small
/obj/item/clothing/head/fedora/suicide_act(mob/user)
if(user.gender == FEMALE)
+1
View File
@@ -64,6 +64,7 @@
burn_state = FLAMMABLE
actions_types = list(/datum/action/item_action/adjust)
dog_fashion = /datum/dog_fashion/head/clown
pockets = /obj/item/weapon/storage/internal/pocket/tiny // Honk!
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
AltClick(user)
+2 -2
View File
@@ -272,12 +272,12 @@
name = "Soviet Admiral"
uniform = /obj/item/clothing/under/soviet
head = /obj/item/clothing/head/hgpiratecap
head = /obj/item/clothing/head/pirate/captain
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/thermal/eyepatch
suit = /obj/item/clothing/suit/hgpirate
suit = /obj/item/clothing/suit/pirate/captain
back = /obj/item/weapon/storage/backpack/satchel
belt = /obj/item/weapon/gun/projectile/revolver/mateba
+6 -7
View File
@@ -20,7 +20,7 @@
armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0)
strip_delay = 70
burn_state = FIRE_PROOF
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads
name = "\improper SWAT boots"
@@ -72,8 +72,7 @@
slowdown = SHOES_SLOWDOWN+1
item_color = "clown"
var/footstep = 1 //used for squeeks whilst walking
can_hold_items = 1
valid_held_items = list(/obj/item/weapon/bikehorn)
pockets = /obj/item/weapon/storage/internal/pocket/shoes/clown
/obj/item/clothing/shoes/clown_shoes/step_action()
if(footstep > 1)
@@ -91,7 +90,7 @@
strip_delay = 50
put_on_delay = 50
burn_state = FIRE_PROOF
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
/obj/item/clothing/shoes/jackboots/fast
slowdown = -1
@@ -105,7 +104,7 @@
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET|LEGS
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
/obj/item/clothing/shoes/workboots
name = "work boots"
@@ -114,7 +113,7 @@
item_state = "jackboots"
strip_delay = 40
put_on_delay = 40
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
/obj/item/clothing/shoes/workboots/mining
name = "mining boots"
@@ -161,4 +160,4 @@
desc = "A pair of costume boots fashioned after bird talons."
icon_state = "griffinboots"
item_state = "griffinboots"
can_hold_items = 1
pockets = /obj/item/weapon/storage/internal/pocket/shoes
+3 -1
View File
@@ -151,6 +151,7 @@
item_state = "eng_hardsuit"
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
// pockets = /obj/item/weapon/storage/internal/pocket
//Atmospherics
/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
@@ -196,6 +197,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
jetpack = /obj/item/weapon/tank/jetpack/suit
// pockets = /obj/item/weapon/storage/internal/pocket/big
//Mining hardsuit
@@ -221,7 +223,7 @@
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
// pockets = /obj/item/weapon/storage/internal/pocket
//Syndicate hardsuit
+2
View File
@@ -36,6 +36,7 @@
armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
// pockets = /obj/item/weapon/storage/internal/pocket
strip_delay = 80
/obj/item/clothing/suit/armor/hos/trenchcoat
@@ -72,6 +73,7 @@
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
dog_fashion = null
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/armor/vest/capcarapace
name = "captain's carapace"
+1 -1
View File
@@ -18,7 +18,7 @@
flags = NODROP
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/cloak/suicide_act(mob/user)
/obj/item/clothing/suit/cloak/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is strangling themself with [src]! It looks like they're trying to commit suicide.</span>")
return(OXYLOSS)
+7
View File
@@ -11,6 +11,7 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
// pockets = /obj/item/weapon/storage/internal/pocket
//Captain
/obj/item/clothing/suit/captunic
@@ -32,6 +33,7 @@
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
hooded = 1
hoodtype = /obj/item/clothing/head/chaplain_hood
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/head/chaplain_hood
name = "chaplain hood"
@@ -50,6 +52,7 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDESHOES|HIDEJUMPSUIT
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
// pockets = /obj/item/weapon/storage/internal/pocket
//Chef
/obj/item/clothing/suit/toggle/chef
@@ -62,6 +65,8 @@
body_parts_covered = CHEST|GROIN|ARMS
allowed = list(/obj/item/weapon/kitchen)
togglename = "sleeves"
// pockets = /obj/item/weapon/storage/internal/pocket
//Cook
/obj/item/clothing/suit/apron/chef
@@ -85,6 +90,7 @@
armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/det_suit/grey
name = "noir trenchcoat"
@@ -101,6 +107,7 @@
blood_overlay_type = "armor"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,/obj/item/device/radio)
burn_state = FIRE_PROOF
// pockets = /obj/item/weapon/storage/internal/pocket
//Lawyer
/obj/item/clothing/suit/toggle/lawyer
+1
View File
@@ -8,6 +8,7 @@
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/soap,/obj/item/device/sensor_device,/obj/item/weapon/tank/internals/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
togglename = "buttons"
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/toggle/labcoat/cmo
name = "chief medical officer's labcoat"
+6 -2
View File
@@ -37,13 +37,13 @@
icon_state = "pirate"
item_state = "pirate"
allowed = list(/obj/item/weapon/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum)
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/hgpirate
/obj/item/clothing/suit/pirate/captain
name = "pirate captain coat"
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
allowed = list(/obj/item/weapon/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum)
/obj/item/clothing/suit/cyborg_suit
@@ -91,6 +91,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
burn_state = FIRE_PROOF
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/hastur
name = "\improper Hastur's robe"
@@ -153,6 +154,7 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/cardborg
@@ -332,6 +334,7 @@
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/jacket/leather
name = "leather jacket"
@@ -419,6 +422,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
hooded = 1
// pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/head/winterhood
name = "winter hood"
+1 -2
View File
@@ -588,8 +588,7 @@ Sorry Giacom. Please don't be mad :(
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
pulledby.stop_pulling()
if (s_active && !(s_active in contents) && !(s_active.loc in contents))
// It's ugly. But everything related to inventory/storage is. -- c0
if (s_active && !(s_active.ClickAccessible(src, depth=STORAGE_VIEW_DEPTH) || s_active.Adjacent(src)))
s_active.close(src)
/mob/living/movement_delay()