mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-04 22:11:27 +00:00
* Balance changes to swords, energy shields and modsuit shields. (#80072) ## About The Pull Request ### Sword Weaponry Mundane sword weapons of all sorts do not block ``LEAP_ATTACK`` attacks whatsoever. These attacks include tackles, xeno tackles and bodythrows. Energy swords and double energy swords only gain 25% block probability against such attacks. ### Double Energy Sword No longer grants outright energy projectile immunity while employed. Instead, it just has a high probability of reflecting (the typical 75% to block any other attack). So, very solid defense against energy projectiles, but not immunity. Against non-reflectable projectiles, like ballistics or nanite bullets, the desword only has 50% block, similar to an energy sword. To compensate for the loss of defensive power, we'll make it all the more rewarding for getting on top of someone with the sword by giving it 40 force while active. And also it costs 13 TC. ### Combat Energy Shield This also lost outright energy projectile immunity, but gained the standard blocking power of shields on top of the ability to reflect energy projectiles when they block them. This significantly increases the shields potential effectiveness while no longer pigeonholing the shield to only energy weapons. (This makes them exceptionally good against tackles and body throws, by the by). Deathsquads still have the perfect deflection energy shield so that they can continue to spam pulse shots with impunity. ### MODsuit Shield Module Only has one charge instead of three, but it recharges in half the time. This is no longer such a perfect defense, and does somewhat need you to be thinking about how you're utilizing the shield rather than not thinking about defense at all by barreling forward under three potential hits worth of protection. Also much cheaper, at almost half price of 8 TC. Because of how cheap it is (and how much it still is necessary to keep you alive), I've put it into the core equipment box (which brings the price up to 22 TC. As a reminder, this is not meant to be at any discount, and is more aimed towards teaching newer players which items contribute towards success. If you don't want all the times within, don't buy this box, just buy what you want separately.) ## Why It's Good For The Game This is a doozy of an explanation, I hope you're ready for it under the spoiler. <details> With my tackling and bodythrow prs, numerous people expressed exasperation at the fact that these two tools may have been keeping some outlier antagonist gear from becoming too easy to steamroll with if you already knew what you were doing. My intent was to create consistent rules and behaviours that both A) did not rely on bugs to keep the balance of power from tipping one way or the other, and B) was at least consistent or had consistent rules established. This PR is tackling overperforming gear combinations for already competent nukies that may have, over time, crept out of control, and applying some consistency to the rules around similar equipment. AND also deals with quite possibly the most braindead element of game design we've tolerated for about a decade, and half a decade after it was necessary to maintain that decision. Part of the culprit of this issue is that, specifically in regards to nukies, crew can't use the vast majority of their weapons effectively against them. This largely is because this antagonist can gain immunities to those types of equipment. And that is rapidly increasing as we move closer towards outright ballistic removal. I don't think the game is made healthier by everyone on the station having to fight armed mercenaries with spears, and doesn't make much thematic sense either. More so, most greener players probably just don't know this is how it works, and so surprise Pikachu when their lasers bounce off nukies harmlessly. (This bit reminds me of the problem of new players using disablers against simple mobs) But of course, that isn't the only part of the problem. The other half is due to being able to be layered on a much more broad defensive tool in the form of the MODsuit Shield Module, whose three charges could render the mindful nukie near untouchable if they're pairing it with some other layered defense, such as a desword. Notice that this doesn't really address armor. The culprit is negation, and not mitigation, and we should be sparing in how easily we hand out outright effect negation simply because it isn't super obvious to a new player why it happened, and how to resolve it. At the very least, we should look to find ways to add options for players to overcome these problems. Especially with teamwork. Energy projectile immunity made sense while there floated around an energy projectile that ostensibly would down you in a single shot. Nukies ALSO had projectile weapons that worked much the same (c-20r stun bullets, taser shot bulldogs, etc.), so it was predominantly tit-for-tat. These immunity granting equipment pieces forced crew members to get shotguns and ballistic guns to fight these dangers; something more available at the time. We've exercised large bits and pieces of this from the game a long time ago, but we still have some remnants convinced we're still in a taser-rich, ballistic available environment. We need to move the games languishing tools into the modern era and re-established their place in the game. Namely, the double-energy sword and the combat energy shield are almost entirely unchanged besides refactors for the last decade or so, even while the game around them have changed. They've been a continuous sore point for me in all my time developing and a constant nagging issue. I want to deal with it now. MODsuit Shield Module is just kind of really good and only made stronger the more defenses you have. It's good to have a defense like this, but I think it is too brain dead. With only one charge, it will save you from a lost joust here and there, but it won't make it as simple as running right at every problem you encounter and eating a volley of attacks while you kill someone with impunity. **With regards to traitors**, since they also get double-energy swords; I'm open to suggestions if this is hitting them far too hard, but I'm not terribly concerned using this weapon for a few reasons. **Firstly**, I think their presence amongst the crew make it a much better weapon for tots than nukies (in isolation) simply because they can find ways to exploit it via tools they gather from the station. It is a force multiplier. Traitors also have a much bigger element of surprise usually. **Secondly**, round-start traitors typically grow to be a bit stronger over time, but I don't foresee many waiting to pay for the double-energy sword unless they're already flush with TC. So if a traitor is in a position after they've unlocked access to it to buy one of these, they are probably doing pretty okay for themselves. </details> ### TL;DR Defense stacking and attack immunities are not particularly healthy things to both design around, or experience in-game. They are kind of just relics of the past made only sorer once I ripped off a few bandaids. This is a source of a number of symptomatic issues in the game, so let's fix that and make it easier on all of us going forward. Much of the way these things worked operated on extremely outdated design considerations. It doesn't make sense for them to work like this today, and only makes things harder by keeping the status quo. ## Changelog 🆑 balance: Mundane sword-like and medieval weapons are not able to block tackles, xenomorph tackles and body throws. balance: The double-energy sword and energy sword have trouble blocking physical projectiles, body throws and tackles. balance: The double-energy sword also no longer has guaranteed energy projectile deflection; only doing so on a successful block (75% chance to block). balance: But it does have 40 force now, so it is more lethal a weapon. Traitors can purchase the sword for only 13 TC (down from 16 TC). balance: The combat energy shield (The one you hold) now functions as a normal shield (it used to only protect you against energy projectiles and nothing else). It loses guaranteed energy projectile deflection, but still reflects the projectile so on a block. feature: Death commandos continue to have their energy shields deflect all incoming energy projectiles. Because who cares about deathsquads being balanced? balance: The MODsuit shield module only has one charge, but recharges every 10 seconds. It also costs 8 TC (down from 15). It is also now in the Core Gear beginner box (bringing the total price up to 22 TC). /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * Balance changes to swords, energy shields and modsuit shields. --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
513 lines
18 KiB
Plaintext
513 lines
18 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/weapons/smash.ogg'
|
|
drop_sound = 'sound/items/handling/toolbox_drop.ogg'
|
|
pickup_sound = 'sound/items/handling/toolbox_pickup.ogg'
|
|
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
|
|
var/latches = "single_latch"
|
|
var/has_latches = TRUE
|
|
wound_bonus = 5
|
|
|
|
/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"
|
|
update_appearance()
|
|
|
|
AddElement(/datum/element/falling_hazard, damage = force, wound_bonus = wound_bonus, hardhat_safety = TRUE, crushes = FALSE, impact_sound = hitsound)
|
|
|
|
/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 = "tactical toolbox" //SKYRAT EDIT
|
|
icon_state = "syndicate"
|
|
inhand_icon_state = "toolbox_syndi"
|
|
force = 15
|
|
throwforce = 18
|
|
material_flags = NONE
|
|
special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
|
|
special_desc = "A toolbox manufactured by the Syndicate containing extra tactical tools. Made of more robust materials than the average toolbox." // Skyrat edit
|
|
|
|
/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/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)
|
|
|
|
//floorbot assembly
|
|
/obj/item/storage/toolbox/attackby(obj/item/stack/tile/iron/T, mob/user, params)
|
|
var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots
|
|
/obj/item/storage/toolbox/electrical,
|
|
/obj/item/storage/toolbox/mechanical,
|
|
/obj/item/storage/toolbox/artistic,
|
|
/obj/item/storage/toolbox/syndicate)
|
|
|
|
if(!istype(T, /obj/item/stack/tile/iron))
|
|
..()
|
|
return
|
|
if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox))
|
|
return
|
|
if(contents.len >= 1)
|
|
balloon_alert(user, "not empty!")
|
|
return
|
|
if(T.use(10))
|
|
var/obj/item/bot_assembly/floorbot/B = new
|
|
B.toolbox = type
|
|
switch(B.toolbox)
|
|
if(/obj/item/storage/toolbox)
|
|
B.toolbox_color = "r"
|
|
if(/obj/item/storage/toolbox/emergency)
|
|
B.toolbox_color = "r"
|
|
if(/obj/item/storage/toolbox/electrical)
|
|
B.toolbox_color = "y"
|
|
if(/obj/item/storage/toolbox/artistic)
|
|
B.toolbox_color = "g"
|
|
if(/obj/item/storage/toolbox/syndicate)
|
|
B.toolbox_color = "s"
|
|
user.put_in_hands(B)
|
|
B.update_appearance()
|
|
B.balloon_alert(user, "tiles added")
|
|
qdel(src)
|
|
else
|
|
balloon_alert(user, "needs 10 tiles!")
|
|
return
|
|
|
|
/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/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/syndicate/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
|
|
|
|
/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/soviet/plastikov
|
|
name = "ancient surplus gun case"
|
|
desc = "A gun case. Has the symbol of the Third Soviet Union stamped on the side."
|
|
weapon_to_spawn = /obj/item/gun/ballistic/automatic/plastikov
|
|
extra_to_spawn = /obj/item/food/rationpack //sorry comrade, cannot get you more ammo, here, have lunch
|
|
|
|
/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, "sound/creatures/monkey/monkey_screech_[rand(1,7)].ogg", 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)
|