mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-19 05:26:28 +00:00
## About The Pull Request For the vernacular purposes of the following PR body -- "Security Implant" refers to the existing subset of implants given, by security, to captured prisoners and such as a punitive, controlling measure. This includes the chemical, tracking, and maybe exile implants. This revamps the functionality of how "security" implants are displayed on huds, prisoner management console implant controls/readouts, and their instrumentality. It was also, ultimately, an attempt at nerfing the tracking implant that spiralled far out of control. Rather than only displaying chemical on the right and tracking on the left, all implants with the "security implant" flag will be trackable on SecHuds. A maximum of two can be implanted at once. This is both due to technical limitations, but also conveniently provides security a limit to consider when choosing implants. Implants now also occupy their HUD slot based on the order they were implanted in, rather than always occupying the same spot. Neat!  From two (three if you count the exile implant), there are now five security implants. _The tracker implant has been split into two of these implants._ <details> <summary>Summary of the implants, functions, changes:</summary> <br> - **Tracker (Red)** -- No longer grants teleporter beacon. Tracking radius has been increased from 20 to 35 tiles. The Prisoner Management Console will now list the area the prisoner is occupying as well. Disables after the implantee is dead for 10 minutes. - **Chemical (Blue)** -- No mechanical changes. The implant pad readout has been modified slightly. - **Exile (Green)** -- In addition to past functionality, station shuttle controls (public, mining, etc.) will be unresponsive for the implantee. Flimsy, but more effective than a stern warning not to come back from lavaland. - **Beacon (Yellow)** -- Implantee becomes a teleporter beacon. The prisoner console will report if their currently occupied area is hazardous or not, so half of the security team doesn't blindly teleport into space or lava. Disables after the implantee is dead for 10 minutes. Available from Cargo. - **Teleport Blocker (Deep Blue, not shown)** -- Prevents the implantee from being teleported. Ever wanted to keep a wizard or cultist in a cell? This is where you can start. Available from Cargo, expensive and scarce. Each of the implants has some application that would benefit security if used on a captured criminal. Their usefulness may overlap in some places, but the overall range of control these implants give security is broadened. </details> The implant control console has also been given a small facelift. Certain implants provide more useful readouts that can help officers locate, control, or capture an implantee, rewarding cooperation between officers. It has also been totally converted into TGUI by @MrMelbert. Kickass! Also, You can now remotely destroy implants, either to relieve criminals from their punishment or to make room for a different implant. Wardens should keep hold of their ID and remember to log out, since a motivated convict could use it to shed their implants!  Everything made in this PR _should_ be scaleable enough to allow for new security implant types to be implemented with relative ease. The teleport-blocker implant was a last minute attempt to prove it to myself. I had a few more ideas for implants in my head, but figured this PR was already getting big and ugly enough. That is all for another day. I truly apologize if there's anything I've missed in here. I did a lot of this over a long period of time and kind of just... sat on it for a while. If there's any confusing our unexplained changes, feel free to point them out and I'll try to give an explanation. ## Why It's Good For The Game The goal of this PR is to give a bit more depth to security's armory implants. The intent is to present a choice in what implants are given (rather than just tracker and maybe chem if you're feeling spiteful), and to make them more useful as punitive/monitoring tools. The tracker implant needed a nerf (and probably still does regardless of this PR's success). It's never used for tracking since the teleporter beacon is much more direct (+ gives a virtually free attack opportunity), and the tracking range was incredibly subpar. I'd rather not take toys away from security, but having the best option not be roundstart gear feels like a fair compromise. Warden content. Wardens have more gear to budget for and use at their own (or the HOSes) discretion. The changes to the prisoner console allow them to coordinate with officers to get good value out of the implants they've chosen for an implantee. Gives antagonists an alternate way to get de-implanted, without external help, that can only be granted at the fault of security. Wardens who dish out implants must keep an eye on the people carrying them! ## Changelog 🆑 Rhials, MrMelbert add: The Tracker implant has had its teleport beacon functionality migrated to the new (cargo accessible) Beacon implant. add: Teleport Blocker security implant, that prevents the implantee from teleporting by any means. Purchasable from cargo. add: Security implants may now be harmlessly self-destructed at the Prisoner Management Console. balance: The Tracker implant tracking radius has increased from 20 to 35 tiles. The Prisoner Management Console will track and display the area the implantee is in as well. balance: The exile implant now prevents implantees from operating shuttle controls. code: Various code improvements and removal of unused vars in the Prisoner Management Console code: The HUD slots for chem/tracking implants have been converted to display any implant with the IMPLANT_TYPE_SECURITY flag and an associated sprite. spellcheck: Modifies various implant pad readouts, removing false information and rewriting some sections. /🆑 --------- Co-authored-by: MrMelbert <kmelbert4@gmail.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
255 lines
8.2 KiB
Plaintext
255 lines
8.2 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/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)
|