mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-18 21:15:21 +00:00
## About The Pull Request I originally was gonna make the captain's spare ID safe float in the air if the wall under it was taken down, but it looked poor and was going against the vision for wall items (and go against the wallening) so my alternative proposition is this, taking the safe off the wall. It's now a golden safe (like the one in the vault) but is interacted the exact same, it's now just a thing on the floor rather than being on a wall. I'm not a spriter so I didn't give it a custom icon but if anyone wants to they can feel free to add one, just a golden version of the regular safe felt kinda eh. I also added a wallframe version of the secure safe for when it is taken down. It will conserve its contents and be permanently locked until put back up. This doesn't apply to the new captain safe since it isn't a wall item. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/80588 Prevents people from cheesing the spare and/or it being too easy to destroy. ## Changelog 🆑 fix: The captain's safe is no longer on the wall, therefore cannot be cheesed by breaking the wall it sits on. fix: Tearing down a wall that a safe is on now drops the safe with its contents, rather than dropping the contents onto the floor. The safe's contents cannot be interacted with while it's not on a wall. /🆑
112 lines
3.7 KiB
Plaintext
112 lines
3.7 KiB
Plaintext
/obj/item/wallframe/secure_safe
|
|
name = "secure safe frame"
|
|
desc = "A locked safe. It being unpowered prevents any access until placed back onto a wall."
|
|
icon = 'icons/obj/storage/storage.dmi'
|
|
icon_state = "wall_safe"
|
|
base_icon_state = "wall_safe"
|
|
result_path = /obj/structure/secure_safe
|
|
pixel_shift = 32
|
|
|
|
/obj/item/wallframe/secure_safe/Initialize(mapload)
|
|
. = ..()
|
|
create_storage(
|
|
max_specific_storage = WEIGHT_CLASS_GIGANTIC,
|
|
max_total_storage = 20,
|
|
)
|
|
atom_storage.locked = STORAGE_FULLY_LOCKED
|
|
|
|
/obj/item/wallframe/secure_safe/after_attach(obj/attached_to)
|
|
. = ..()
|
|
for(var/obj/item in contents)
|
|
item.forceMove(attached_to)
|
|
|
|
/**
|
|
* Wall safes
|
|
* Holds items and uses the lockable storage component
|
|
* to allow people to lock items up.
|
|
*/
|
|
/obj/structure/secure_safe
|
|
name = "secure safe"
|
|
desc = "Excellent for securing things away from grubby hands."
|
|
icon = 'icons/obj/storage/storage.dmi'
|
|
icon_state = "wall_safe"
|
|
base_icon_state = "wall_safe"
|
|
anchored = TRUE
|
|
density = FALSE
|
|
|
|
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe, 32)
|
|
|
|
/obj/structure/secure_safe/Initialize(mapload)
|
|
. = ..()
|
|
//this will create the storage for us.
|
|
AddComponent(/datum/component/lockable_storage)
|
|
if(!density)
|
|
find_and_hang_on_wall()
|
|
if(mapload)
|
|
PopulateContents()
|
|
|
|
/obj/structure/secure_safe/deconstruct(disassembled)
|
|
if(!density) //if we're a wall item, we'll drop a wall frame.
|
|
var/obj/item/wallframe/secure_safe/new_safe = new(get_turf(src))
|
|
for(var/obj/item in contents)
|
|
item.forceMove(new_safe)
|
|
return ..()
|
|
|
|
/obj/structure/secure_safe/proc/PopulateContents()
|
|
new /obj/item/paper(src)
|
|
new /obj/item/pen(src)
|
|
|
|
/obj/structure/secure_safe/hos
|
|
name = "head of security's safe"
|
|
|
|
/**
|
|
* This safe is meant to be damn robust. To break in, you're supposed to get creative, or use acid or an explosion.
|
|
*
|
|
* This makes the safe still possible to break in for someone who is prepared and capable enough, either through
|
|
* chemistry, botany or whatever else.
|
|
*
|
|
* The safe is also weak to explosions, so spending some early TC could allow an antag to blow it upen if they can
|
|
* get access to it.
|
|
*/
|
|
/obj/structure/secure_safe/caps_spare
|
|
name = "captain's spare ID safe"
|
|
desc = "In case of emergency, do not break glass. All Captains and Acting Captains are provided with codes to access this safe. \
|
|
It is made out of the same material as the station's Black Box and is designed to resist all conventional weaponry. \
|
|
There appears to be a small amount of surface corrosion. It doesn't look like it could withstand much of an explosion.\
|
|
Due to the expensive material, it was made incredibly small to cut corners, leaving only enough room to fit something as slim as an ID card."
|
|
icon = 'icons/obj/structures.dmi'
|
|
icon_state = "safe"
|
|
base_icon_state = "safe"
|
|
armor_type = /datum/armor/safe_caps_spare
|
|
max_integrity = 300
|
|
density = TRUE
|
|
anchored_tabletop_offset = 4
|
|
custom_materials = list(/datum/material/gold = SMALL_MATERIAL_AMOUNT)
|
|
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
|
|
|
|
/datum/armor/safe_caps_spare
|
|
melee = 100
|
|
bullet = 100
|
|
laser = 100
|
|
energy = 100
|
|
bomb = 70
|
|
fire = 80
|
|
acid = 70
|
|
|
|
/obj/structure/secure_safe/caps_spare/Initialize(mapload)
|
|
. = ..()
|
|
var/matrix/small_safe_transformation = new
|
|
small_safe_transformation.Scale(0.6)
|
|
transform = small_safe_transformation
|
|
atom_storage.set_holdable(/obj/item/card/id)
|
|
AddComponent(/datum/component/lockable_storage, \
|
|
lock_code = SSid_access.spare_id_safe_code, \
|
|
can_hack_open = FALSE, \
|
|
)
|
|
|
|
/obj/structure/secure_safe/caps_spare/PopulateContents()
|
|
new /obj/item/card/id/advanced/gold/captains_spare(src)
|
|
|
|
/obj/structure/secure_safe/caps_spare/rust_heretic_act()
|
|
take_damage(damage_amount = 100, damage_type = BRUTE, damage_flag = MELEE, armour_penetration = 100)
|