Files
Bubberstation/code/game/objects/items/storage/boxes/security_boxes.dm
MrMelbert 977799a2e7 A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#81231)
# Disclaimer: No Goon code was referenced or used in the making of this
PR

## About The Pull Request

[Design Document (Read this for more
information)](https://hackmd.io/@L9JPMsZhRO2wI25rNI6GYg/rkYKM9Yc6)

This PR adds Spies as a new roundstart antagonist type, inspired by
Spy-Thiefs from Goonstation.

Spies are tasked with stealing various objects around the station, from
insulated gloves to the black box, from the clown's left leg to the
bridge's communications console.

For every item stolen, the Spy is rewarded with a random item from the
Syndicate Uplink, plus some items uniquely available to the Spy. Stolen
items are then shipped off and sold on the Black Market Uplink, allowing
the crew - or maybe some other evil-doers - to get their hands on them.


![image](https://github.com/tgstation/tgstation/assets/51863163/f057d480-4545-44da-b8fe-a8d09a5d2dcf)

More ideas for theft items and bounties are welcome. 

## Why It's Good For The Game

See the design document for more information. 

In short: Adds a solo antagonist which has less impact than your
Traitors and Heretics, but more impact than Paradox Clones and Thieves.
In other words: On the same tier as old traitors.

Seeks to embrace the sandbox aspect of antagonists more by having no
precise greentext objective, and instead some suggestions for chaos you
can embark in. Have fun with it!

## Changelog

🆑 Melbert
add: Spies may now roam the halls of Space Station 13. Watch your
belongings closely.
/🆑
2024-03-01 04:41:57 +00:00

265 lines
8.5 KiB
Plaintext

// This file contains everything used by security, or in other combat applications.
/obj/item/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
icon_state = "secbox"
illustration = "flashbang"
/obj/item/storage/box/flashbangs/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/grenade/flashbang(src)
/obj/item/storage/box/stingbangs
name = "box of stingbangs (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause severe injuries or death in repeated use.</B>"
icon_state = "secbox"
illustration = "flashbang"
/obj/item/storage/box/stingbangs/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/grenade/stingbang(src)
/obj/item/storage/box/flashes
name = "box of flashbulbs"
desc = "<B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
icon_state = "secbox"
illustration = "flash"
/obj/item/storage/box/flashes/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/assembly/flash/handheld(src)
/obj/item/storage/box/wall_flash
name = "wall-mounted flash kit"
desc = "This box contains everything necessary to build a wall-mounted flash. <B>WARNING: Flashes can cause serious eye damage, protective eyewear is required.</B>"
icon_state = "secbox"
illustration = "flash"
/obj/item/storage/box/wall_flash/PopulateContents()
var/id = rand(1000, 9999)
// FIXME what if this conflicts with an existing one?
new /obj/item/wallframe/button(src)
new /obj/item/electronics/airlock(src)
var/obj/item/assembly/control/flasher/remote = new(src)
remote.id = id
var/obj/item/wallframe/flasher/frame = new(src)
frame.id = id
new /obj/item/assembly/flash/handheld(src)
new /obj/item/screwdriver(src)
/obj/item/storage/box/teargas
name = "box of tear gas grenades (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness and skin irritation.</B>"
icon_state = "secbox"
illustration = "grenade"
/obj/item/storage/box/teargas/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/grenade/chem_grenade/teargas(src)
/obj/item/storage/box/emps
name = "box of emp grenades"
desc = "A box with 5 emp grenades."
illustration = "emp"
/obj/item/storage/box/emps/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/grenade/empgrenade(src)
/obj/item/storage/box/prisoner
name = "box of prisoner IDs"
desc = "Take away their last shred of dignity, their name."
icon_state = "secbox"
illustration = "id"
/obj/item/storage/box/prisoner/PopulateContents()
..()
new /obj/item/card/id/advanced/prisoner/one(src)
new /obj/item/card/id/advanced/prisoner/two(src)
new /obj/item/card/id/advanced/prisoner/three(src)
new /obj/item/card/id/advanced/prisoner/four(src)
new /obj/item/card/id/advanced/prisoner/five(src)
new /obj/item/card/id/advanced/prisoner/six(src)
new /obj/item/card/id/advanced/prisoner/seven(src)
/obj/item/storage/box/seccarts
name = "box of PDA security cartridges"
desc = "A box full of PDA cartridges used by Security."
icon_state = "secbox"
illustration = "pda"
/obj/item/storage/box/seccarts/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/computer_disk/security(src)
/obj/item/storage/box/firingpins
name = "box of standard firing pins"
desc = "A box full of standard firing pins, to allow newly-developed firearms to operate."
icon_state = "secbox"
illustration = "firingpin"
/obj/item/storage/box/firingpins/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/firing_pin(src)
/obj/item/storage/box/firingpins/paywall
name = "box of paywall firing pins"
desc = "A box full of paywall firing pins, to allow newly-developed firearms to operate behind a custom-set paywall."
illustration = "firingpin"
/obj/item/storage/box/firingpins/paywall/PopulateContents()
for(var/i in 1 to 5)
new /obj/item/firing_pin/paywall(src)
/obj/item/storage/box/lasertagpins
name = "box of laser tag firing pins"
desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used."
illustration = "firingpin"
/obj/item/storage/box/lasertagpins/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/firing_pin/tag/red(src)
new /obj/item/firing_pin/tag/blue(src)
/obj/item/storage/box/handcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
icon_state = "secbox"
illustration = "handcuff"
/obj/item/storage/box/handcuffs/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/restraints/handcuffs(src)
/obj/item/storage/box/zipties
name = "box of spare zipties"
desc = "A box full of zipties."
icon_state = "secbox"
illustration = "handcuff"
/obj/item/storage/box/zipties/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/restraints/handcuffs/cable/zipties(src)
/obj/item/storage/box/alienhandcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
icon_state = "alienbox"
illustration = "handcuff"
/obj/item/storage/box/alienhandcuffs/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/restraints/handcuffs/alien(src)
/obj/item/storage/box/rubbershot
name = "box of shotgun shells (Less Lethal - Rubber Shot)"
desc = "A box full of rubber shot shotgun shells, designed for shotguns."
icon_state = "rubbershot_box"
illustration = null
/obj/item/storage/box/rubbershot/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/ammo_casing/shotgun/rubbershot(src)
/obj/item/storage/box/lethalshot
name = "box of shotgun shells (Lethal)"
desc = "A box full of lethal shotgun shells, designed for shotguns."
icon_state = "lethalshot_box"
illustration = null
/obj/item/storage/box/lethalshot/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/ammo_casing/shotgun/buckshot(src)
/obj/item/storage/box/slugs
name = "box of shotgun shells (Lethal - Slugs)"
desc = "A box full of lethal shotgun slugs, designed for shotguns."
icon_state = "breacher_box"
illustration = null
/obj/item/storage/box/slugs/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/ammo_casing/shotgun(src)
/obj/item/storage/box/beanbag
name = "box of shotgun shells (Less Lethal - Beanbag)"
desc = "A box full of beanbag shotgun shells, designed for shotguns."
icon_state = "beanbagshot_box"
illustration = null
/obj/item/storage/box/beanbag/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/ammo_casing/shotgun/beanbag(src)
/obj/item/storage/box/breacherslug
name = "box of breaching shotgun shells"
desc = "A box full of breaching slugs, designed for rapid entry, not very effective against anything else."
icon_state = "breacher_box"
illustration = null
/obj/item/storage/box/breacherslug/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/ammo_casing/shotgun/breacher(src)
/obj/item/storage/box/emptysandbags
name = "box of empty sandbags"
illustration = "sandbag"
/obj/item/storage/box/emptysandbags/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/emptysandbag(src)
/obj/item/storage/box/holy_grenades
name = "box of holy hand grenades"
desc = "Contains several grenades used to rapidly purge heresy."
illustration = "grenade"
/obj/item/storage/box/holy_grenades/PopulateContents()
for(var/i in 1 to 7)
new/obj/item/grenade/chem_grenade/holy(src)
/obj/item/storage/box/fireworks
name = "box of fireworks"
desc = "Contains an assortment of fireworks."
illustration = "sparkler"
/obj/item/storage/box/fireworks/PopulateContents()
for(var/i in 1 to 3)
new/obj/item/sparkler(src)
new/obj/item/grenade/firecracker(src)
new /obj/item/toy/snappop(src)
/obj/item/storage/box/fireworks/dangerous
desc = "This box has a small label on it stating that it's from the Gorlex Marauders. Contains an assortment of \"fireworks\"."
/obj/item/storage/box/fireworks/dangerous/PopulateContents()
for(var/i in 1 to 3)
new/obj/item/sparkler(src)
new/obj/item/grenade/firecracker(src)
if(prob(20))
new /obj/item/grenade/frag(src)
else
new /obj/item/toy/snappop(src)
/obj/item/storage/box/firecrackers
name = "box of firecrackers"
desc = "A box filled with illegal firecrackers. You wonder who still makes these."
icon_state = "syndiebox"
illustration = "firecracker"
/obj/item/storage/box/firecrackers/PopulateContents()
for(var/i in 1 to 7)
new/obj/item/grenade/firecracker(src)
/obj/item/storage/box/sparklers
name = "box of sparklers"
desc = "A box of Nanotrasen brand sparklers, burns hot even in the cold of space-winter."
illustration = "sparkler"
/obj/item/storage/box/sparklers/PopulateContents()
for(var/i in 1 to 7)
new/obj/item/sparkler(src)