Files
Bubberstation/code/game/objects/items/storage/belt.dm
T
a2cad3c467 Pipegun updates and glowup (#83063)
## About The Pull Request

Updates pipeguns with a brand new set of sprites. Also comes with pipe
pistols; plinkier versions of the pipegun.

![ye
pipeguns](https://github.com/tgstation/tgstation/assets/40847847/dd8ea3db-aa5a-403e-9eca-c3aa2c38b694)

![image](https://github.com/tgstation/tgstation/assets/40847847/9015f1fe-8ed2-4724-844d-7d550d35b890)

![image](https://github.com/tgstation/tgstation/assets/40847847/0d99551a-ecc4-4f2b-a397-46c5f26437f7)

Alters pipeguns away from utilizing shotgun/rifle ammunition towards a
bespoke junk round ammo. These shells are crafted similarly to current
improvised shells. This also removes improvised shells as a shotgun ammo
type. (these new shells aren't shotgun shells to begin with, they're
more like rifle bullets)

Crafting junk rounds produces an entirely unknown projectile in the
shell. You won't know what you get until you fire the gun. Almost in
every instance, however, the shot is beneficial towards killing things.
And they all do about the same amount of damage, so there is hopefully
never a round you didn't want to fire in the gun. Fighting someone with
a pipegun is usually predictable for what amount of damage it will do,
but any additional effects it might have is going to be an unknown
factor. They also brutalize borgs, which is a quality that improvised
shells had previously.

Pipeguns operate as they did before, and do roughly 40 damage per shot
with the majority of their ammo types (less than what they do currently
with .310). They only have one shell in the gun at a time, so every time
they're fired, they must be reloaded.

Pipe pistols do roughly 15 damage per shot, but hold more ammo than the
bigger pipegun. However, they're more likely to veer off-course.

There are regal versions of each of these weapons, and each are more
potent respective of their general rarity. Having one is going to be a
lot more noteworthy.

### Minor changes

Some more clothing items can carry pipeguns in their suit storage.

The icemoon hermit spawns with a heroic laser musket rather than a regal
pipegun (partially because it is too difficult for the hermit to get
more ammo for their gun, and also because the regal pipegun is a more
powerful weapon than previously)

## Why It's Good For The Game

It has been a few years since I added the pipegun, and time was never
particularly kind to it. There are alternative weapons now with
interesting mechanics of their own. The ammunition it used has changed
considerably. And it simply didn't ever feel like a 'junk gun' in a way
that was fun. The original mechanics added to give it that feeling were
just not fun to experience and were removed. So the pipegun has been
left as 'a shitty version of X'. Even the regal pipegun was, at the end
of the day, a shittier version of either a shotgun or cargo rifle.

It didn't feel right not having some kind of unique quality to using
these weapons that help them express themselves as unpredictable trash
weapons built inside of maintenance. But I expressly didn't want to make
it 'unpredictable' in a way that felt unfair on the person getting shot
either. So just giving it more damage was right out. As a compromise, I
reduced the overall lethality of the weapons while introducing a gimmick
that will appeal to those wanting to play out the role of a homeless
lunatic with a shitty homemade gun stalking maintenance. A 'chaos gun'
so to speak. Maybe that will appeal to people.

## Changelog
🆑
balance: Reworks pipeguns to use an unpredictable 'junk round'. You
won't know what you're shooting until you fire it.
add: Introduces a pistol version of the pipegun; the pipe pistol. It is
inaccurate and does significantly less damage, but more portable and has
more ammunition in the gun.
image: Updates the visuals of the pipeguns.
balance: Also improves the Regal varieties of these weapons. By a lot.
balance: More articles of clothing can be used to carry pipeguns in suit
storage.
balance: The Icemoon Hermit comes with a Heroic Laser Musket instead of
a Regal Pipegun.
remove: Improvised shells (the shotgun shell) has been replaced with
improvised junk shells (which don't work with shotguns but do work with
pipeguns).
/🆑

---------

Co-authored-by: Jacquerel <hnevard@ gmail.com>
2024-05-08 17:43:04 -04:00

911 lines
30 KiB
Plaintext

/obj/item/storage/belt
name = "not actually a toolbelt"
desc = "Can hold various things. This is the base type of /belt, are you sure you should have this?"
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utility"
inhand_icon_state = "utility"
worn_icon_state = "utility"
lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
attack_verb_continuous = list("whips", "lashes", "disciplines")
attack_verb_simple = list("whip", "lash", "discipline")
max_integrity = 300
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
w_class = WEIGHT_CLASS_BULKY
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
/obj/item/storage/belt/update_overlays()
. = ..()
if(!content_overlays)
return
for(var/obj/item/I in contents)
. += I.get_belt_overlay()
/obj/item/storage/belt/Initialize(mapload)
. = ..()
AddElement(/datum/element/attack_equip)
update_appearance()
/obj/item/storage/belt/utility
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Holds tools."
icon_state = "utility"
inhand_icon_state = "utility"
worn_icon_state = "utility"
content_overlays = TRUE
custom_premium_price = PAYCHECK_CREW * 2
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
/obj/item/storage/belt/utility/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.set_holdable(list(
/obj/item/airlock_painter,
/obj/item/analyzer,
/obj/item/assembly/signaler,
/obj/item/clothing/gloves,
/obj/item/construction/rcd,
/obj/item/construction/rld,
/obj/item/construction/rtd,
/obj/item/crowbar,
/obj/item/extinguisher/mini,
/obj/item/flashlight,
/obj/item/forcefield_projector,
/obj/item/geiger_counter,
/obj/item/holosign_creator/atmos,
/obj/item/holosign_creator/engineering,
/obj/item/inducer,
/obj/item/lightreplacer,
/obj/item/multitool,
/obj/item/pipe_dispenser,
/obj/item/pipe_painter,
/obj/item/plunger,
/obj/item/radio,
/obj/item/screwdriver,
/obj/item/stack/cable_coil,
/obj/item/t_scanner,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/spess_knife,
/obj/item/melee/sickly_blade/lock,
))
/obj/item/storage/belt/utility/chief
name = "\improper Chief Engineer's toolbelt" //"the Chief Engineer's toolbelt", because "Chief Engineer's toolbelt" is not a proper noun
desc = "Holds tools, looks snazzy."
icon_state = "utility_ce"
inhand_icon_state = "utility_ce"
worn_icon_state = "utility_ce"
/obj/item/storage/belt/utility/chief/full
preload = TRUE
/obj/item/storage/belt/utility/chief/full/PopulateContents()
SSwardrobe.provide_type(/obj/item/screwdriver/power, src)
SSwardrobe.provide_type(/obj/item/crowbar/power, src)
SSwardrobe.provide_type(/obj/item/weldingtool/experimental, src)
SSwardrobe.provide_type(/obj/item/multitool, src)
SSwardrobe.provide_type(/obj/item/stack/cable_coil, src)
SSwardrobe.provide_type(/obj/item/extinguisher/mini, src)
SSwardrobe.provide_type(/obj/item/analyzer/ranged, src) //SKYRAT EDIT - Ranged Analyzer for CE - ORIGINAL: SSwardrobe.provide_type(/obj/item/analyzer, src)
//much roomier now that we've managed to remove two tools
/obj/item/storage/belt/utility/chief/full/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver/power
to_preload += /obj/item/crowbar/power
to_preload += /obj/item/weldingtool/electric // SKYRAT EDIT - Electric welder
to_preload += /obj/item/multitool
to_preload += /obj/item/stack/cable_coil
to_preload += /obj/item/extinguisher/mini
to_preload += /obj/item/analyzer/ranged // SKYRAT EDIT - Ranged Analyzer for CE
return to_preload
/obj/item/storage/belt/utility/full/PopulateContents()
SSwardrobe.provide_type(/obj/item/screwdriver, src)
SSwardrobe.provide_type(/obj/item/wrench, src)
SSwardrobe.provide_type(/obj/item/weldingtool, src)
SSwardrobe.provide_type(/obj/item/crowbar, src)
SSwardrobe.provide_type(/obj/item/wirecutters, src)
SSwardrobe.provide_type(/obj/item/multitool, src)
SSwardrobe.provide_type(/obj/item/stack/cable_coil, src)
/obj/item/storage/belt/utility/full/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver
to_preload += /obj/item/wrench
to_preload += /obj/item/weldingtool
to_preload += /obj/item/crowbar
to_preload += /obj/item/wirecutters
to_preload += /obj/item/multitool
to_preload += /obj/item/stack/cable_coil
return to_preload
/obj/item/storage/belt/utility/full/powertools
preload = FALSE
/obj/item/storage/belt/utility/full/powertools/PopulateContents()
new /obj/item/screwdriver/power(src)
new /obj/item/crowbar/power(src)
new /obj/item/weldingtool/electric(src) // SKYRAT EDIT - original: new /obj/item/weldingtool/experimental(src)
new /obj/item/multitool(src)
new /obj/item/holosign_creator/atmos(src)
new /obj/item/extinguisher/mini(src)
new /obj/item/stack/cable_coil(src)
/obj/item/storage/belt/utility/full/powertools/rcd/PopulateContents()
new /obj/item/screwdriver/power(src)
new /obj/item/crowbar/power(src)
new /obj/item/weldingtool/experimental(src)
new /obj/item/multitool(src)
new /obj/item/construction/rcd/loaded/upgraded(src)
new /obj/item/extinguisher/mini(src)
new /obj/item/stack/cable_coil(src)
/obj/item/storage/belt/utility/full/engi/PopulateContents()
SSwardrobe.provide_type(/obj/item/screwdriver, src)
SSwardrobe.provide_type(/obj/item/wrench, src)
SSwardrobe.provide_type(/obj/item/weldingtool/largetank, src)
SSwardrobe.provide_type(/obj/item/crowbar, src)
SSwardrobe.provide_type(/obj/item/wirecutters, src)
SSwardrobe.provide_type(/obj/item/multitool, src)
SSwardrobe.provide_type(/obj/item/stack/cable_coil, src)
/obj/item/storage/belt/utility/full/engi/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver
to_preload += /obj/item/wrench
to_preload += /obj/item/weldingtool/largetank
to_preload += /obj/item/crowbar
to_preload += /obj/item/wirecutters
to_preload += /obj/item/multitool
to_preload += /obj/item/stack/cable_coil
return to_preload
/obj/item/storage/belt/utility/atmostech/PopulateContents()
SSwardrobe.provide_type(/obj/item/screwdriver, src)
SSwardrobe.provide_type(/obj/item/wrench, src)
SSwardrobe.provide_type(/obj/item/weldingtool, src)
SSwardrobe.provide_type(/obj/item/crowbar, src)
SSwardrobe.provide_type(/obj/item/wirecutters, src)
SSwardrobe.provide_type(/obj/item/t_scanner, src)
SSwardrobe.provide_type(/obj/item/extinguisher/mini, src)
/obj/item/storage/belt/utility/atmostech/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver
to_preload += /obj/item/wrench
to_preload += /obj/item/weldingtool
to_preload += /obj/item/crowbar
to_preload += /obj/item/wirecutters
to_preload += /obj/item/t_scanner
to_preload += /obj/item/extinguisher/mini
return to_preload
/obj/item/storage/belt/utility/full/inducer/PopulateContents()
SSwardrobe.provide_type(/obj/item/screwdriver, src)
SSwardrobe.provide_type(/obj/item/wrench, src)
SSwardrobe.provide_type(/obj/item/weldingtool, src)
SSwardrobe.provide_type(/obj/item/crowbar/red, src)
SSwardrobe.provide_type(/obj/item/wirecutters, src)
SSwardrobe.provide_type(/obj/item/multitool, src)
SSwardrobe.provide_type(/obj/item/inducer, src)
/obj/item/storage/belt/utility/full/inducer/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver
to_preload += /obj/item/wrench
to_preload += /obj/item/weldingtool
to_preload += /obj/item/crowbar
to_preload += /obj/item/wirecutters
to_preload += /obj/item/multitool
to_preload += /obj/item/inducer
return to_preload
/obj/item/storage/belt/utility/syndicate
preload = FALSE
/obj/item/storage/belt/utility/syndicate/PopulateContents()
new /obj/item/screwdriver/nuke(src)
new /obj/item/wrench/combat(src)
new /obj/item/weldingtool/largetank(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/multitool(src)
new /obj/item/inducer/syndicate(src)
/obj/item/storage/belt/medical
name = "medical belt"
desc = "Can hold various medical equipment."
icon_state = "medical"
inhand_icon_state = "medical"
worn_icon_state = "medical"
/obj/item/storage/belt/medical/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 21
atom_storage.set_holdable(list(
/obj/item/bikehorn/rubberducky,
/obj/item/blood_filter,
/obj/item/bonesetter,
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/clothing/neck/stethoscope,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/suit/toggle/labcoat/hospitalgown, //SKYRAT EDIT ADDITION - adds surgery gowns to belts
/obj/item/clothing/head/utility/surgerycap,
/obj/item/construction/plumbing,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
/obj/item/flashlight/pen,
/obj/item/geiger_counter,
/obj/item/gun/syringe/syndicate,
/obj/item/healthanalyzer,
/obj/item/hemostat,
/obj/item/holosign_creator/medical,
/obj/item/hypospray/mkii, //SKYRAT EDIT ADDITION - HYPOSPRAYS
/obj/item/storage/hypospraykit/, //SKYRAT EDIT ADDITION - HYPOSPRAYS
/obj/item/implant,
/obj/item/implantcase,
/obj/item/implanter,
/obj/item/lazarus_injector,
/obj/item/lighter,
/obj/item/pinpointer/crew,
/obj/item/plunger,
/obj/item/radio,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/medigel,
/obj/item/reagent_containers/pill,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/syringe,
/obj/item/retractor,
/obj/item/scalpel,
/obj/item/shears,
/obj/item/stack/medical,
/obj/item/stack/sticky_tape, //surgical tape
/obj/item/stamp,
/obj/item/sensor_device,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/surgical_drapes, //for true paramedics
/obj/item/surgicaldrill,
/obj/item/tank/internals/emergency_oxygen,
/obj/item/weaponcell/medical, //SKYRAT EDIT MEDIGUNS
/obj/item/handheld_soulcatcher, // SKYRAT EDIT SOULCATCHERS
/obj/item/wrench/medical,
))
/obj/item/storage/belt/medical/paramedic
name = "EMT belt"
icon_state = "emt"
inhand_icon_state = "security"
worn_icon_state = "emt"
preload = TRUE
/obj/item/storage/belt/medical/paramedic/PopulateContents()
SSwardrobe.provide_type(/obj/item/sensor_device, src)
SSwardrobe.provide_type(/obj/item/stack/medical/gauze/twelve, src)
SSwardrobe.provide_type(/obj/item/stack/medical/bone_gel, src)
SSwardrobe.provide_type(/obj/item/stack/sticky_tape/surgical, src)
SSwardrobe.provide_type(/obj/item/reagent_containers/syringe, src)
SSwardrobe.provide_type(/obj/item/reagent_containers/cup/bottle/ammoniated_mercury, src)
SSwardrobe.provide_type(/obj/item/reagent_containers/cup/bottle/formaldehyde, src)
update_appearance()
/obj/item/storage/belt/medical/paramedic/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/sensor_device
to_preload += /obj/item/stack/medical/gauze/twelve
to_preload += /obj/item/stack/medical/bone_gel
to_preload += /obj/item/stack/sticky_tape/surgical
to_preload += /obj/item/reagent_containers/syringe
to_preload += /obj/item/reagent_containers/cup/bottle/ammoniated_mercury
to_preload += /obj/item/reagent_containers/cup/bottle/formaldehyde
return to_preload
/obj/item/storage/belt/medical/ert
icon_state = "emt"
inhand_icon_state = "security"
worn_icon_state = "emt"
preload = TRUE
/obj/item/storage/belt/medical/ert/PopulateContents()
SSwardrobe.provide_type(/obj/item/sensor_device, src)
SSwardrobe.provide_type(/obj/item/pinpointer/crew, src)
SSwardrobe.provide_type(/obj/item/scalpel/advanced, src)
SSwardrobe.provide_type(/obj/item/retractor/advanced, src)
SSwardrobe.provide_type(/obj/item/stack/medical/bone_gel, src)
SSwardrobe.provide_type(/obj/item/cautery/advanced, src)
SSwardrobe.provide_type(/obj/item/surgical_drapes, src)
update_appearance()
/obj/item/storage/belt/medical/ert/get_types_to_preload()
var/list/to_preload = list()
to_preload += /obj/item/sensor_device
to_preload += /obj/item/pinpointer/crew
to_preload += /obj/item/scalpel/advanced
to_preload += /obj/item/retractor/advanced
to_preload += /obj/item/stack/medical/bone_gel
to_preload += /obj/item/cautery/advanced
to_preload += /obj/item/surgical_drapes
return to_preload
/obj/item/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
icon_state = "security"
inhand_icon_state = "security"//Could likely use a better one.
worn_icon_state = "security"
content_overlays = TRUE
// SKYRAT EDIT ADDITION START
uses_advanced_reskins = TRUE
unique_reskin = list(
"Basic Security" = list(
RESKIN_ICON = 'icons/obj/clothing/belts.dmi',
RESKIN_ICON_STATE = "security",
RESKIN_WORN_ICON = 'icons/mob/clothing/belt.dmi',
RESKIN_WORN_ICON_STATE = "security"
),
"Peacekeeper" = list(
RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi',
RESKIN_ICON_STATE = "peacekeeperbelt",
RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi',
RESKIN_WORN_ICON_STATE = "peacekeeperbelt"
)
)
// SKYRAT EDIT ADDITION END
/obj/item/storage/belt/security/Initialize(mapload)
. = ..()
atom_storage.max_slots = 5
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/ammo_box,
/obj/item/ammo_casing/shotgun,
/obj/item/assembly/flash/handheld,
/obj/item/clothing/glasses,
/obj/item/clothing/gloves,
/obj/item/flashlight/seclite,
/obj/item/food/donut,
/obj/item/grenade,
/obj/item/gun, //SKYRAT EDIT ADDITION
/obj/item/holosign_creator/security,
/obj/item/knife/combat,
/obj/item/melee/baton,
/obj/item/radio,
/obj/item/reagent_containers/spray/pepper,
/obj/item/restraints/handcuffs,
/obj/item/restraints/legcuffs/bola,
/obj/item/stock_parts/cell/microfusion, //SKYRAT EDIT ADDITION
))
/obj/item/storage/belt/security/full/PopulateContents()
new /obj/item/reagent_containers/spray/pepper(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/grenade/flashbang(src)
new /obj/item/assembly/flash/handheld(src)
new /obj/item/melee/baton/security/loaded(src)
update_appearance()
/obj/item/storage/belt/security/webbing
name = "security webbing"
desc = "Unique and versatile chest rig, can hold security gear."
icon_state = "securitywebbing"
inhand_icon_state = "securitywebbing"
worn_icon_state = "securitywebbing"
content_overlays = FALSE
custom_premium_price = PAYCHECK_COMMAND * 3
/obj/item/storage/belt/security/webbing/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
/obj/item/storage/belt/mining
name = "explorer's webbing"
desc = "A versatile chest rig, cherished by miners and hunters alike."
icon_state = "explorer1"
inhand_icon_state = "explorer1"
worn_icon_state = "explorer1"
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/belt/mining/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 20
atom_storage.set_holdable(list(
/obj/item/analyzer,
/obj/item/clothing/gloves,
/obj/item/crowbar,
/obj/item/extinguisher/mini,
/obj/item/flashlight,
/obj/item/gps,
/obj/item/mining_stabilizer,
/obj/item/key/lasso,
/obj/item/knife,
/obj/item/lighter,
/obj/item/mining_scanner,
/obj/item/multitool,
/obj/item/organ/internal/monster_core,
/obj/item/pickaxe,
/obj/item/radio,
/obj/item/reagent_containers/cup/glass,
/obj/item/reagent_containers/cup/glass/bottle,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/pill,
/obj/item/resonator,
/obj/item/screwdriver,
/obj/item/shovel,
/obj/item/stack/cable_coil,
/obj/item/stack/marker_beacon,
/obj/item/stack/medical,
/obj/item/stack/ore,
/obj/item/stack/sheet/animalhide,
/obj/item/stack/sheet/bone,
/obj/item/stack/sheet/sinew,
/obj/item/storage/bag/ore,
/obj/item/storage/fancy/cigarettes,
/obj/item/storage/pill_bottle,
/obj/item/survivalcapsule,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/weldingtool,
/obj/item/wirecutters,
/obj/item/wrench,
/obj/item/wormhole_jaunter,
/obj/item/skeleton_key,
))
/obj/item/storage/belt/mining/vendor/PopulateContents()
new /obj/item/survivalcapsule(src)
/obj/item/storage/belt/mining/alt
icon_state = "explorer2"
inhand_icon_state = "explorer2"
worn_icon_state = "explorer2"
/obj/item/storage/belt/mining/healing/PopulateContents()
for(var/i in 1 to 2)
new /obj/item/reagent_containers/hypospray/medipen/survival/luxury(src)
for(var/i in 1 to 2)
new /obj/item/reagent_containers/hypospray/medipen/survival(src)
for(var/i in 1 to 2)
var/obj/item/organ/internal/monster_core/core = new /obj/item/organ/internal/monster_core/regenerative_core/legion(src)
core.preserve()
/obj/item/storage/belt/mining/primitive
name = "hunter's belt"
desc = "A versatile belt, woven from sinew."
icon_state = "ebelt"
inhand_icon_state = "ebelt"
worn_icon_state = "ebelt"
/obj/item/storage/belt/mining/primitive/Initialize(mapload)
. = ..()
atom_storage.max_slots = 5
/obj/item/storage/belt/soulstone
name = "soul stone belt"
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away."
icon_state = "soulstonebelt"
inhand_icon_state = "soulstonebelt"
worn_icon_state = "soulstonebelt"
/obj/item/storage/belt/soulstone/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.set_holdable(/obj/item/soulstone)
/obj/item/storage/belt/soulstone/full/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/soulstone/mystic(src)
/obj/item/storage/belt/soulstone/full/chappy/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/soulstone/anybody/chaplain(src)
/obj/item/storage/belt/champion
name = "championship belt"
desc = "Proves to the world that you are the strongest!"
icon_state = "championbelt"
inhand_icon_state = "championbelt"
worn_icon_state = "championbelt"
custom_materials = list(/datum/material/gold=SMALL_MATERIAL_AMOUNT *4)
/obj/item/storage/belt/champion/Initialize(mapload)
. = ..()
atom_storage.max_slots = 1
atom_storage.set_holdable(/obj/item/clothing/mask/luchador)
/obj/item/storage/belt/military
name = "chest rig"
desc = "A set of tactical webbing worn by Syndicate boarding parties."
icon_state = "militarywebbing"
inhand_icon_state = "militarywebbing"
worn_icon_state = "militarywebbing"
resistance_flags = FIRE_PROOF
/obj/item/storage/belt/military/Initialize(mapload)
. = ..()
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
/obj/item/storage/belt/military/snack
name = "tactical snack rig"
/obj/item/storage/belt/military/snack/Initialize(mapload)
. = ..()
var/sponsor = pick("Donk Co.", "Waffle Co.", "Roffle Co.", "Gorlax Marauders", "Tiger Cooperative")
desc = "A set of snack-tical webbing worn by athletes of the [sponsor] VR sports division."
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.set_holdable(list(
/obj/item/food,
/obj/item/reagent_containers/cup/glass,
))
/obj/item/storage/belt/military/snack/full
/obj/item/storage/belt/military/snack/full/Initialize(mapload)
. = ..()
var/amount = 5
var/rig_snacks
while(contents.len <= amount)
rig_snacks = pick(list(
/obj/item/food/candy,
/obj/item/food/cheesiehonkers,
/obj/item/food/cheesynachos,
/obj/item/food/chips,
/obj/item/food/cubannachos,
/obj/item/food/donkpocket,
/obj/item/food/nachos,
/obj/item/food/nugget,
/obj/item/food/rofflewaffles,
/obj/item/food/sosjerky,
/obj/item/food/spacetwinkie,
/obj/item/food/spaghetti/pastatomato,
/obj/item/food/syndicake,
/obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola,
/obj/item/reagent_containers/cup/glass/dry_ramen,
/obj/item/reagent_containers/cup/soda_cans/cola,
/obj/item/reagent_containers/cup/soda_cans/dr_gibb,
/obj/item/reagent_containers/cup/soda_cans/lemon_lime,
/obj/item/reagent_containers/cup/soda_cans/pwr_game,
/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind,
/obj/item/reagent_containers/cup/soda_cans/space_up,
/obj/item/reagent_containers/cup/soda_cans/starkist,
))
new rig_snacks(src)
/obj/item/storage/belt/military/abductor
name = "agent belt"
desc = "A belt used by abductor agents."
icon = 'icons/obj/antags/abductor.dmi'
icon_state = "belt"
inhand_icon_state = "security"
worn_icon_state = "security"
content_overlays = TRUE
/obj/item/storage/belt/military/abductor/full/PopulateContents()
new /obj/item/screwdriver/abductor(src)
new /obj/item/wrench/abductor(src)
new /obj/item/weldingtool/abductor(src)
new /obj/item/crowbar/abductor(src)
new /obj/item/wirecutters/abductor(src)
new /obj/item/multitool/abductor(src)
new /obj/item/stack/cable_coil(src)
/obj/item/storage/belt/military/army
name = "army belt"
desc = "A belt used by military forces."
icon_state = "military"
inhand_icon_state = "security"
worn_icon_state = "military"
/obj/item/storage/belt/military/assault
name = "assault belt"
desc = "A tactical assault belt."
icon_state = "assault"
inhand_icon_state = "security"
worn_icon_state = "assault"
/obj/item/storage/belt/military/assault/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
/obj/item/storage/belt/military/assault/full/PopulateContents()
generate_items_inside(list(
/obj/item/ammo_box/magazine/wt550m9 = 4,
/obj/item/ammo_box/magazine/wt550m9/wtap = 2,
), src)
/obj/item/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
icon_state = "grenadebeltnew"
inhand_icon_state = "security"
worn_icon_state = "grenadebeltnew"
/obj/item/storage/belt/grenade/Initialize(mapload)
. = ..()
atom_storage.max_slots = 30
atom_storage.numerical_stacking = TRUE
atom_storage.max_total_storage = 60
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(list(
/obj/item/food/grown/cherry_bomb,
/obj/item/food/grown/firelemon,
/obj/item/grenade,
/obj/item/grenade/c4,
/obj/item/lighter,
/obj/item/multitool,
/obj/item/reagent_containers/cup/glass/bottle/molotov,
/obj/item/screwdriver,
))
/obj/item/storage/belt/grenade/full/PopulateContents()
generate_items_inside(list(
/obj/item/grenade/chem_grenade/incendiary = 2,
/obj/item/grenade/empgrenade = 2,
/obj/item/grenade/frag = 10,
/obj/item/grenade/flashbang = 2,
/obj/item/grenade/gluon = 4,
/obj/item/grenade/smokebomb = 4,
/obj/item/grenade/syndieminibomb = 2,
/obj/item/multitool = 1,
/obj/item/screwdriver = 1,
),src)
/obj/item/storage/belt/wands
name = "wand belt"
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
icon_state = "soulstonebelt"
inhand_icon_state = "soulstonebelt"
worn_icon_state = "soulstonebelt"
/obj/item/storage/belt/wands/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.set_holdable(/obj/item/gun/magic/wand)
/obj/item/storage/belt/wands/full/PopulateContents()
new /obj/item/gun/magic/wand/death(src)
new /obj/item/gun/magic/wand/resurrection(src)
new /obj/item/gun/magic/wand/fireball(src) //SKYRAT EDIT - Trades polymorph for second fireball
new /obj/item/gun/magic/wand/teleport(src)
new /obj/item/gun/magic/wand/door(src)
new /obj/item/gun/magic/wand/fireball(src)
for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition
W.max_charges = initial(W.max_charges)
W.charges = W.max_charges
/obj/item/storage/belt/janitor
name = "janibelt"
desc = "A belt used to hold most janitorial supplies."
icon_state = "janibelt"
inhand_icon_state = "janibelt"
worn_icon_state = "janibelt"
/obj/item/storage/belt/janitor/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL // Set to this so the light replacer can fit.
atom_storage.set_holdable(list(
/obj/item/access_key,
/obj/item/assembly/mousetrap,
/obj/item/clothing/gloves,
/obj/item/flashlight,
/obj/item/forcefield_projector,
/obj/item/grenade/chem_grenade,
/obj/item/holosign_creator,
/obj/item/key/janitor,
/obj/item/lightreplacer,
/obj/item/melee/flyswatter,
/obj/item/mop, //SKYRAT EDIT - For when you're lazy to use soap
/obj/item/mop/advanced, //SKYRAT EDIT For when you're lazy to use a bucket
/obj/item/paint/paint_remover,
/obj/item/plunger,
/obj/item/pushbroom,
/obj/item/reagent_containers/cup/bucket, //SKYRAT EDIT - Bucket
/obj/item/reagent_containers/spray,
/obj/item/soap,
/obj/item/wirebrush,
))
/obj/item/storage/belt/janitor/full/PopulateContents()
new /obj/item/lightreplacer(src)
new /obj/item/reagent_containers/spray/cleaner(src)
new /obj/item/soap/nanotrasen(src)
new /obj/item/holosign_creator(src)
new /obj/item/melee/flyswatter(src)
/obj/item/storage/belt/bandolier
name = "bandolier"
desc = "A bandolier for holding rifle shotgun, and bigger revolver caliber ammunition."
icon_state = "bandolier"
inhand_icon_state = "bandolier"
worn_icon_state = "bandolier"
/obj/item/storage/belt/bandolier/Initialize(mapload)
. = ..()
atom_storage.max_slots = 24
atom_storage.max_total_storage = 24
atom_storage.numerical_stacking = TRUE
atom_storage.allow_quick_gather = TRUE
atom_storage.allow_quick_empty = TRUE
atom_storage.numerical_stacking = TRUE
atom_storage.set_holdable(list(
/obj/item/ammo_casing/strilka310,
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/a357,
/obj/item/ammo_casing/junk,
))
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in. Concealed enough, or ugly enough to avert their eyes, that others won't see what you put in or take out easily."
icon_state = "fannypack_leather"
inhand_icon_state = null
worn_icon_state = "fannypack_leather"
dying_key = DYE_REGISTRY_FANNYPACK
custom_price = PAYCHECK_CREW * 2
/obj/item/storage/belt/fannypack/Initialize(mapload)
. = ..()
atom_storage.max_slots = 3
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
atom_storage.silent = TRUE
/obj/item/storage/belt/fannypack/black
name = "black fannypack"
icon_state = "fannypack_black"
worn_icon_state = "fannypack_black"
/obj/item/storage/belt/fannypack/red
name = "red fannypack"
icon_state = "fannypack_red"
worn_icon_state = "fannypack_red"
/obj/item/storage/belt/fannypack/purple
name = "purple fannypack"
icon_state = "fannypack_purple"
worn_icon_state = "fannypack_purple"
/obj/item/storage/belt/fannypack/blue
name = "blue fannypack"
icon_state = "fannypack_blue"
worn_icon_state = "fannypack_blue"
/obj/item/storage/belt/fannypack/orange
name = "orange fannypack"
icon_state = "fannypack_orange"
worn_icon_state = "fannypack_orange"
/obj/item/storage/belt/fannypack/white
name = "white fannypack"
icon_state = "fannypack_white"
worn_icon_state = "fannypack_white"
/obj/item/storage/belt/fannypack/green
name = "green fannypack"
icon_state = "fannypack_green"
worn_icon_state = "fannypack_green"
/obj/item/storage/belt/fannypack/pink
name = "pink fannypack"
icon_state = "fannypack_pink"
worn_icon_state = "fannypack_pink"
/obj/item/storage/belt/fannypack/cyan
name = "cyan fannypack"
icon_state = "fannypack_cyan"
worn_icon_state = "fannypack_cyan"
/obj/item/storage/belt/fannypack/yellow
name = "yellow fannypack"
icon_state = "fannypack_yellow"
worn_icon_state = "fannypack_yellow"
/obj/item/storage/belt/fannypack/cummerbund
name = "cummerbund"
desc = "A pleated sash that pairs well with a suit jacket."
icon_state = "cummerbund"
inhand_icon_state = null
worn_icon_state = "cummerbund"
/obj/item/storage/belt/sabre
name = "sabre sheath"
desc = "An ornate sheath designed to hold an officer's blade."
icon_state = "sheath"
inhand_icon_state = "sheath"
worn_icon_state = "sheath"
w_class = WEIGHT_CLASS_BULKY
interaction_flags_click = parent_type::interaction_flags_click | NEED_DEXTERITY | NEED_HANDS
/obj/item/storage/belt/sabre/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
atom_storage.max_slots = 1
atom_storage.rustle_sound = FALSE
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
atom_storage.set_holdable(/obj/item/melee/sabre)
/obj/item/storage/belt/sabre/examine(mob/user)
. = ..()
if(length(contents))
. += span_notice("Alt-click it to quickly draw the blade.")
/obj/item/storage/belt/sabre/click_alt(mob/user)
if(length(contents))
var/obj/item/I = contents[1]
user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src]."))
user.put_in_hands(I)
update_appearance()
else
balloon_alert(user, "it's empty!")
return CLICK_ACTION_SUCCESS
/obj/item/storage/belt/sabre/update_icon_state()
icon_state = initial(inhand_icon_state)
inhand_icon_state = initial(inhand_icon_state)
worn_icon_state = initial(worn_icon_state)
if(contents.len)
icon_state += "-sabre"
inhand_icon_state += "-sabre"
worn_icon_state += "-sabre"
return ..()
/obj/item/storage/belt/sabre/PopulateContents()
new /obj/item/melee/sabre(src)
update_appearance()
/obj/item/storage/belt/plant
name = "botanical belt"
desc = "A sturdy leather belt used to hold most hydroponics supplies."
icon_state = "plantbelt"
inhand_icon_state = "utility"
worn_icon_state = "plantbelt"
content_overlays = TRUE
/obj/item/storage/belt/plant/Initialize(mapload)
. = ..()
atom_storage.max_slots = 6
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.set_holdable(list(
/obj/item/cultivator,
/obj/item/geneshears,
/obj/item/graft,
/obj/item/gun/energy/floragun,
/obj/item/hatchet,
/obj/item/plant_analyzer,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/spray/pestspray,
/obj/item/reagent_containers/spray/plantbgone,
/obj/item/secateurs,
/obj/item/seeds,
/obj/item/shovel/spade,
))