Files
Bubberstation/code/game/objects/items/storage/toolbox.dm
carlarctg e57eddbb32 Adds rare chance for surgery trays to become medical toolboxes (#88276)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Surgery trays now have a small chance to become medical toolboxes.
Autopsy trays can become coroner toolboxes.


![image](https://github.com/user-attachments/assets/a6f6182b-5840-4494-8326-ea88f76e195b)

They work basically the same, just that they can't be rolled around and
don't slow you down when walking around.

Medical toolboxes are fairly weak, but coroner toolboxes are pretty
strong.

Added a 1 in 1.000.000 chance for a toolbox to have four latches.

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

> Surgery trays now have a small chance to become medical toolboxes.
Autopsy trays can become coroner toolboxes.
> They work basically the same, just that they can't be rolled around
and don't slow you down when walking around.

The idea of going to the surgery room and finding a _medical toolbox_
instead of a surgery tray is inexplicably amusing to me.

> Medical toolboxes are fairly weak, but coroner toolboxes are pretty
strong.

Healers and hurters!

> Added a 1 in 1.000.000 chance for a toolbox to have four latches.

peak absurdity is reached

~~next pr will include brown toolboxes, which clip to your belt~~

credit 2 @SmArtKar for sprites

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
carlarc, smartkar
add: Surgery trays now have a small chance to become medical toolboxes.
Autopsy trays can become coroner toolboxes.
add: Added a 1 in 1.000.000 chance for a toolbox to have four latches.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2024-12-06 23:56:52 +01:00

622 lines
22 KiB
Plaintext

/obj/item/storage/toolbox
name = "toolbox"
desc = "Danger. Very robust."
icon = 'icons/obj/storage/toolbox.dmi'
icon_state = "toolbox_default"
inhand_icon_state = "toolbox_default"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
obj_flags = CONDUCTS_ELECTRICITY
force = 12
throwforce = 12
throw_speed = 2
throw_range = 7
demolition_mod = 1.25
w_class = WEIGHT_CLASS_BULKY
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5)
attack_verb_continuous = list("robusts")
attack_verb_simple = list("robust")
hitsound = 'sound/items/weapons/smash.ogg'
drop_sound = 'sound/items/handling/toolbox/toolbox_drop.ogg'
pickup_sound = 'sound/items/handling/toolbox/toolbox_pickup.ogg'
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
var/latches = "single_latch"
var/has_latches = TRUE
wound_bonus = 5
/// How many interactions are we currently performing
var/current_interactions = 0
/obj/item/storage/toolbox/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
if(has_latches)
if(prob(10))
latches = "double_latch"
if(prob(1))
latches = "triple_latch"
if(prob(0.1))
latches = "quad_latch" // like winning the lottery, but worse
update_appearance()
atom_storage.open_sound = 'sound/items/handling/toolbox/toolbox_open.ogg'
atom_storage.rustle_sound = 'sound/items/handling/toolbox/toolbox_rustle.ogg'
AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound)
/obj/item/storage/toolbox/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if (user.combat_mode || !user.has_hand_for_held_index(user.get_inactive_hand_index()))
return NONE
if (current_interactions)
var/obj/item/other_tool = user.get_inactive_held_item()
if (!istype(other_tool)) // what even
return NONE
INVOKE_ASYNC(src, PROC_REF(use_tool_on), interacting_with, user, modifiers, other_tool)
return ITEM_INTERACT_SUCCESS
if (user.get_inactive_held_item())
user.balloon_alert(user, "hands busy!")
return ITEM_INTERACT_BLOCKING
var/list/item_radial = list()
for (var/obj/item/tool in atom_storage.real_location)
if(is_type_in_list(tool, GLOB.tool_items))
item_radial[tool] = tool.appearance
break
if (!length(item_radial))
return NONE
playsound(user, 'sound/items/handling/toolbox/toolbox_open.ogg', 50)
var/obj/item/picked_item = show_radial_menu(user, interacting_with, item_radial, require_near = TRUE)
if (!picked_item)
return ITEM_INTERACT_BLOCKING
playsound(user, 'sound/items/handling/toolbox/toolbox_rustle.ogg', 50)
if (!user.put_in_inactive_hand(picked_item))
return ITEM_INTERACT_BLOCKING
atom_storage.animate_parent()
if (istype(picked_item, /obj/item/weldingtool))
var/obj/item/weldingtool/welder = picked_item
if (!welder.welding)
welder.attack_self(user)
if (istype(picked_item, /obj/item/spess_knife))
picked_item.attack_self(user)
INVOKE_ASYNC(src, PROC_REF(use_tool_on), interacting_with, user, modifiers, picked_item)
return ITEM_INTERACT_SUCCESS
/obj/item/storage/toolbox/proc/use_tool_on(atom/interacting_with, mob/living/user, list/modifiers, obj/item/picked_tool)
current_interactions += 1
picked_tool.melee_attack_chain(user, interacting_with, list2params(modifiers))
current_interactions -= 1
if (QDELETED(picked_tool) || picked_tool.loc != user || !user.CanReach(picked_tool))
current_interactions = 0
return
if (current_interactions)
return
if (istype(picked_tool, /obj/item/weldingtool))
var/obj/item/weldingtool/welder = picked_tool
if (welder.welding)
welder.attack_self(user)
atom_storage.attempt_insert(picked_tool, user)
/obj/item/storage/toolbox/update_overlays()
. = ..()
if(has_latches)
. += latches
/obj/item/storage/toolbox/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
/obj/item/storage/toolbox/emergency
name = "emergency toolbox"
icon_state = "red"
inhand_icon_state = "toolbox_red"
material_flags = NONE
throw_speed = 3 // red ones go faster
/obj/item/storage/toolbox/emergency/PopulateContents()
new /obj/item/crowbar/red(src)
new /obj/item/weldingtool/mini(src)
new /obj/item/extinguisher/mini(src)
switch(rand(1,3))
if(1)
new /obj/item/flashlight(src)
if(2)
new /obj/item/flashlight/glowstick(src)
if(3)
new /obj/item/flashlight/flare(src)
new /obj/item/radio/off(src)
/obj/item/storage/toolbox/emergency/old
name = "rusty red toolbox"
icon_state = "toolbox_red_old"
has_latches = FALSE
material_flags = NONE
/obj/item/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
inhand_icon_state = "toolbox_blue"
material_flags = NONE
/// If FALSE, someone with a ensouled soulstone can sacrifice a spirit to change the sprite of this toolbox.
var/has_soul = FALSE
/obj/item/storage/toolbox/mechanical/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/analyzer(src)
new /obj/item/wirecutters(src)
/obj/item/storage/toolbox/mechanical/old
name = "rusty blue toolbox"
icon_state = "toolbox_blue_old"
has_latches = FALSE
has_soul = TRUE
/obj/item/storage/toolbox/mechanical/old/heirloom
name = "toolbox" //this will be named "X family toolbox"
desc = "It's seen better days."
force = 5
w_class = WEIGHT_CLASS_NORMAL
/obj/item/storage/toolbox/mechanical/old/heirloom/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
/obj/item/storage/toolbox/mechanical/old/heirloom/PopulateContents()
return
/obj/item/storage/toolbox/mechanical/old/clean // the assistant traitor toolbox, damage scales with TC inside
name = "toolbox"
desc = "An old, blue toolbox, it looks robust."
icon_state = "oldtoolboxclean"
inhand_icon_state = "toolbox_blue"
has_latches = FALSE
force = 19
throwforce = 22
/obj/item/storage/toolbox/mechanical/old/clean/proc/calc_damage()
var/power = 0
for (var/obj/item/stack/telecrystal/stored_crystals in get_all_contents())
power += (stored_crystals.amount / 2)
force = 19 + power
throwforce = 22 + power
/obj/item/storage/toolbox/mechanical/old/clean/attack(mob/target, mob/living/user)
calc_damage()
..()
/obj/item/storage/toolbox/mechanical/old/clean/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
calc_damage()
..()
/obj/item/storage/toolbox/mechanical/old/clean/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/multitool(src)
new /obj/item/clothing/gloves/color/yellow(src)
/obj/item/storage/toolbox/electrical
name = "electrical toolbox"
icon_state = "yellow"
inhand_icon_state = "toolbox_yellow"
material_flags = NONE
/obj/item/storage/toolbox/electrical/PopulateContents()
var/pickedcolor = pick(GLOB.cable_colors)
new /obj/item/screwdriver(src)
new /obj/item/wirecutters(src)
new /obj/item/t_scanner(src)
new /obj/item/crowbar(src)
var/obj/item/stack/cable_coil/new_cable_one = new(src, MAXCOIL)
new_cable_one.set_cable_color(pickedcolor)
var/obj/item/stack/cable_coil/new_cable_two = new(src, MAXCOIL)
new_cable_two.set_cable_color(pickedcolor)
if(prob(5))
new /obj/item/clothing/gloves/color/yellow(src)
else
var/obj/item/stack/cable_coil/new_cable_three = new(src, MAXCOIL)
new_cable_three.set_cable_color(pickedcolor)
/obj/item/storage/toolbox/syndicate
name = "suspicious looking toolbox"
icon_state = "syndicate"
inhand_icon_state = "toolbox_syndi"
force = 15
throwforce = 18
material_flags = NONE
/obj/item/storage/toolbox/syndicate/Initialize(mapload)
. = ..()
atom_storage.silent = TRUE
/obj/item/storage/toolbox/syndicate/PopulateContents()
new /obj/item/screwdriver/nuke(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar/red(src)
new /obj/item/wirecutters(src, "red")
new /obj/item/multitool(src)
new /obj/item/clothing/gloves/combat(src)
/obj/item/storage/toolbox/drone
name = "mechanical toolbox"
icon_state = "blue"
inhand_icon_state = "toolbox_blue"
material_flags = NONE
/obj/item/storage/toolbox/drone/PopulateContents()
var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/stack/cable_coil(src,MAXCOIL,pickedcolor)
new /obj/item/wirecutters(src)
new /obj/item/multitool(src)
/obj/item/storage/toolbox/artistic
name = "artistic toolbox"
desc = "A toolbox painted bright green. Why anyone would store art supplies in a toolbox is beyond you, but it has plenty of extra space."
icon_state = "green"
inhand_icon_state = "artistic_toolbox"
w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox!
material_flags = NONE
/obj/item/storage/toolbox/artistic/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 20
atom_storage.max_slots = 11
/obj/item/storage/toolbox/artistic/PopulateContents()
new /obj/item/storage/crayons(src)
new /obj/item/crowbar(src)
new /obj/item/stack/pipe_cleaner_coil/red(src)
new /obj/item/stack/pipe_cleaner_coil/yellow(src)
new /obj/item/stack/pipe_cleaner_coil/blue(src)
new /obj/item/stack/pipe_cleaner_coil/green(src)
new /obj/item/stack/pipe_cleaner_coil/pink(src)
new /obj/item/stack/pipe_cleaner_coil/orange(src)
new /obj/item/stack/pipe_cleaner_coil/cyan(src)
new /obj/item/stack/pipe_cleaner_coil/white(src)
new /obj/item/stack/pipe_cleaner_coil/brown(src)
/obj/item/storage/toolbox/medical
name = "medical toolbox"
desc = "A toolbox painted soft white and light blue. This is getting ridiculous."
icon_state = "medical"
inhand_icon_state = "toolbox_medical"
attack_verb_continuous = list("treats", "surgeries", "tends", "tends wounds on")
attack_verb_simple = list("treat", "surgery", "tend", "tend wounds on")
w_class = WEIGHT_CLASS_BULKY
material_flags = NONE
force = 5 // its for healing
wound_bonus = 25 // wounds are medical right?
/// Tray we steal the og contents from.
var/obj/item/surgery_tray/tray_type = /obj/item/surgery_tray
/obj/item/storage/toolbox/medical/Initialize(mapload)
. = ..()
// what do any of these numbers fucking mean
atom_storage.max_total_storage = 20
atom_storage.max_slots = 11
/obj/item/storage/toolbox/medical/PopulateContents()
var/atom/fake_tray = new tray_type(get_turf(src)) // not in src lest it fill storage that we need for its tools later
for(var/atom/movable/thingy in fake_tray)
thingy.forceMove(src)
qdel(fake_tray)
/obj/item/storage/toolbox/medical/full
tray_type = /obj/item/surgery_tray/full
/obj/item/storage/toolbox/medical/coroner
name = "coroner toolbox"
desc = "A toolbox painted soft white and dark grey. This is getting beyond ridiculous."
icon_state = "coroner"
inhand_icon_state = "toolbox_coroner"
attack_verb_continuous = list("dissects", "autopsies", "corones")
attack_verb_simple = list("dissect", "autopsy", "corone")
w_class = WEIGHT_CLASS_BULKY
material_flags = NONE
force = 17 // it's not for healing
tray_type = /obj/item/surgery_tray/full/morgue
/obj/item/storage/toolbox/medical/coroner/Initialize(mapload)
. = ..()
AddElement(/datum/element/bane, mob_biotypes = MOB_UNDEAD, damage_multiplier = 1) //Just in case one of the tennants get uppity
/obj/item/storage/toolbox/ammobox
name = "ammo canister"
desc = "A metal canister designed to hold ammunition"
icon_state = "ammobox"
inhand_icon_state = "ammobox"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
has_latches = FALSE
drop_sound = 'sound/items/handling/ammobox_drop.ogg'
pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
var/ammo_to_spawn
/obj/item/storage/toolbox/ammobox/PopulateContents()
if(!isnull(ammo_to_spawn))
for(var/i in 1 to 6)
new ammo_to_spawn(src)
/obj/item/storage/toolbox/ammobox/strilka310
name = ".310 Strilka ammo box (Surplus?)"
desc = "It contains a few clips. Goddamn, this thing smells awful. \
Has this been sitting in a warehouse for the last several centuries?"
ammo_to_spawn = /obj/item/ammo_box/strilka310
/obj/item/storage/toolbox/ammobox/strilka310/surplus
ammo_to_spawn = /obj/item/ammo_box/strilka310/surplus
/obj/item/storage/toolbox/ammobox/wt550m9
name = "4.6x30mm ammo box"
ammo_to_spawn = /obj/item/ammo_box/magazine/wt550m9
/obj/item/storage/toolbox/ammobox/wt550m9ap
name = "4.6x30mm AP ammo box"
ammo_to_spawn = /obj/item/ammo_box/magazine/wt550m9/wtap
/obj/item/storage/toolbox/maint_kit
name = "gun maintenance kit"
desc = "It contains some gun maintenance supplies"
icon_state = "maint_kit"
inhand_icon_state = "ammobox"
has_latches = FALSE
drop_sound = 'sound/items/handling/ammobox_drop.ogg'
pickup_sound = 'sound/items/handling/ammobox_pickup.ogg'
/obj/item/storage/toolbox/maint_kit/PopulateContents()
new /obj/item/gun_maintenance_supplies(src)
new /obj/item/gun_maintenance_supplies(src)
new /obj/item/gun_maintenance_supplies(src)
//repairbot assembly
/obj/item/storage/toolbox/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(!istype(tool, /obj/item/assembly/prox_sensor))
return ..()
var/static/list/allowed_toolbox = list(
/obj/item/storage/toolbox/artistic,
/obj/item/storage/toolbox/electrical,
/obj/item/storage/toolbox/emergency,
/obj/item/storage/toolbox/mechanical,
/obj/item/storage/toolbox/syndicate,
)
if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox))
return ITEM_INTERACT_BLOCKING
if(contents.len >= 1)
balloon_alert(user, "not empty!")
return ITEM_INTERACT_BLOCKING
var/static/list/toolbox_colors = list(
/obj/item/storage/toolbox = "#445eb3",
/obj/item/storage/toolbox/emergency = "#445eb3",
/obj/item/storage/toolbox/electrical = "#b77931",
/obj/item/storage/toolbox/artistic = "#378752",
/obj/item/storage/toolbox/syndicate = "#3d3d3d",
)
var/obj/item/bot_assembly/repairbot/repair = new
repair.toolbox = type
var/new_color = toolbox_colors[type] || "#445eb3"
repair.set_color(new_color)
user.put_in_hands(repair)
repair.update_appearance()
repair.balloon_alert(user, "sensor added!")
qdel(tool)
qdel(src)
return ITEM_INTERACT_SUCCESS
/obj/item/storage/toolbox/haunted
name = "old toolbox"
custom_materials = list(/datum/material/hauntium = SMALL_MATERIAL_AMOUNT*5)
/obj/item/storage/toolbox/guncase
name = "gun case"
desc = "A weapon's case. Has a blood-red 'S' stamped on the cover."
icon = 'icons/obj/storage/case.dmi'
icon_state = "infiltrator_case"
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
inhand_icon_state = "infiltrator_case"
has_latches = FALSE
var/weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol
var/extra_to_spawn = /obj/item/ammo_box/magazine/m9mm
/obj/item/storage/toolbox/guncase/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.max_total_storage = 7 //enough to hold ONE bulky gun and the ammo boxes
atom_storage.max_slots = 4
/obj/item/storage/toolbox/guncase/PopulateContents()
new weapon_to_spawn (src)
for(var/i in 1 to 3)
new extra_to_spawn (src)
/obj/item/storage/toolbox/guncase/bulldog
name = "bulldog gun case"
weapon_to_spawn = /obj/item/gun/ballistic/shotgun/bulldog
extra_to_spawn = /obj/item/ammo_box/magazine/m12g
/obj/item/storage/toolbox/guncase/c20r
name = "c-20r gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/c20r
extra_to_spawn = /obj/item/ammo_box/magazine/smgm45
/obj/item/storage/toolbox/guncase/smartgun
name = "adielle smartgun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/smartgun
extra_to_spawn = /obj/item/ammo_box/magazine/smartgun
/obj/item/storage/toolbox/guncase/clandestine
name = "clandestine gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/clandestine
extra_to_spawn = /obj/item/ammo_box/magazine/m10mm
/obj/item/storage/toolbox/guncase/m90gl
name = "m-90gl gun case"
weapon_to_spawn = /obj/item/gun/ballistic/automatic/m90
extra_to_spawn = /obj/item/ammo_box/magazine/m223
/obj/item/storage/toolbox/guncase/m90gl/PopulateContents()
new weapon_to_spawn (src)
for(var/i in 1 to 2)
new extra_to_spawn (src)
new /obj/item/ammo_box/a40mm/rubber (src)
/obj/item/storage/toolbox/guncase/rocketlauncher
name = "rocket launcher gun case"
weapon_to_spawn = /obj/item/gun/ballistic/rocketlauncher
extra_to_spawn = /obj/item/ammo_box/rocket
/obj/item/storage/toolbox/guncase/rocketlauncher/PopulateContents()
new weapon_to_spawn (src)
new extra_to_spawn (src)
/obj/item/storage/toolbox/guncase/revolver
name = "revolver gun case"
weapon_to_spawn = /obj/item/gun/ballistic/revolver/badass/nuclear
extra_to_spawn = /obj/item/ammo_box/a357
/obj/item/storage/toolbox/guncase/sword_and_board
name = "energy sword and shield weapon case"
weapon_to_spawn = /obj/item/melee/energy/sword
extra_to_spawn = /obj/item/shield/energy
/obj/item/storage/toolbox/guncase/sword_and_board/PopulateContents()
new weapon_to_spawn (src)
new extra_to_spawn (src)
new /obj/item/clothing/head/costume/knight (src)
/obj/item/storage/toolbox/guncase/cqc
name = "\improper CQC equipment case"
weapon_to_spawn = /obj/item/book/granter/martial/cqc
extra_to_spawn = /obj/item/storage/box/syndie_kit/imp_stealth
/obj/item/storage/toolbox/guncase/cqc/PopulateContents()
new weapon_to_spawn (src)
new extra_to_spawn (src)
new /obj/item/clothing/head/costume/snakeeater (src)
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src)
/obj/item/clothing/head/costume/snakeeater
name = "strange bandana"
desc = "A bandana. It seems to have a little carp embroidered on the inside, as well as the kanji '魚'."
icon_state = "snake_eater"
inhand_icon_state = null
clothing_traits = list(TRAIT_FISH_EATER)
/obj/item/clothing/head/costume/knight
name = "fake medieval helmet"
desc = "A classic metal helmet. Though, this one seems to be very obviously fake..."
icon = 'icons/obj/clothing/head/helmet.dmi'
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
icon_state = "knight_green"
inhand_icon_state = "knight_helmet"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
dog_fashion = null
/obj/item/storage/toolbox/guncase/doublesword
name = "double-bladed energy sword weapon case"
weapon_to_spawn = /obj/item/dualsaber
extra_to_spawn = /obj/item/soap/syndie
/obj/item/storage/toolbox/guncase/doublesword/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.max_total_storage = 10 //it'll hold enough
atom_storage.max_slots = 5
/obj/item/storage/toolbox/guncase/doublesword/PopulateContents()
new weapon_to_spawn (src)
new extra_to_spawn (src)
new /obj/item/mod/module/noslip (src)
new /obj/item/reagent_containers/hypospray/medipen/methamphetamine (src)
new /obj/item/clothing/under/rank/prisoner/nosensor (src)
/obj/item/storage/toolbox/guncase/soviet
name = "ancient gun case"
desc = "A weapon's case. Has the symbol of the Third Soviet Union stamped on the side."
icon_state = "sakhno_case"
inhand_icon_state = "sakhno_case"
weapon_to_spawn = /obj/effect/spawner/random/sakhno
extra_to_spawn = /obj/effect/spawner/random/sakhno/ammo
/obj/item/storage/toolbox/guncase/monkeycase
name = "monkey gun case"
desc = "Everything a monkey needs to truly go ape-shit. There's a paw-shaped hand scanner lock on the front of the case."
/obj/item/storage/toolbox/guncase/monkeycase/Initialize(mapload)
. = ..()
atom_storage.locked = STORAGE_SOFT_LOCKED
/obj/item/storage/toolbox/guncase/monkeycase/attack_self(mob/user, modifiers)
if(!monkey_check(user))
return
return ..()
/obj/item/storage/toolbox/guncase/monkeycase/attack_self_secondary(mob/user, modifiers)
attack_self(user, modifiers)
return
/obj/item/storage/toolbox/guncase/monkeycase/attack_hand(mob/user, list/modifiers)
if(!monkey_check(user))
return
return ..()
/obj/item/storage/toolbox/guncase/monkeycase/proc/monkey_check(mob/user)
if(atom_storage.locked == STORAGE_NOT_LOCKED)
return TRUE
if(is_simian(user))
atom_storage.locked = STORAGE_NOT_LOCKED
to_chat(user, span_notice("You place your paw on the paw scanner, and hear a soft click as [src] unlocks!"))
playsound(src, 'sound/items/click.ogg', 25, TRUE)
return TRUE
to_chat(user, span_warning("You put your hand on the hand scanner, and it rejects it with an angry chimpanzee screech!"))
playsound(src, SFX_SCREECH, 75, TRUE)
return FALSE
/obj/item/storage/toolbox/guncase/monkeycase/PopulateContents()
switch(rand(1, 3))
if(1)
// Uzi with a boxcutter.
new /obj/item/gun/ballistic/automatic/mini_uzi/chimpgun(src)
new /obj/item/ammo_box/magazine/uzim9mm(src)
new /obj/item/ammo_box/magazine/uzim9mm(src)
new /obj/item/boxcutter/extended(src)
if(2)
// Thompson with a boxcutter.
new /obj/item/gun/ballistic/automatic/tommygun/chimpgun(src)
new /obj/item/ammo_box/magazine/tommygunm45(src)
new /obj/item/ammo_box/magazine/tommygunm45(src)
new /obj/item/boxcutter/extended(src)
if(3)
// M1911 with a switchblade and an extra banana bomb.
new /obj/item/gun/ballistic/automatic/pistol/m1911/chimpgun(src)
new /obj/item/ammo_box/magazine/m45(src)
new /obj/item/ammo_box/magazine/m45(src)
new /obj/item/switchblade/extended(src)
new /obj/item/food/grown/banana/bunch/monkeybomb(src)
// Banana bomb! Basically a tiny flashbang for monkeys.
new /obj/item/food/grown/banana/bunch/monkeybomb(src)
// Somewhere to store it all.
new /obj/item/storage/backpack/messenger(src)