diff --git a/code/game/objects/structures/tank_holder.dm b/code/game/objects/structures/tank_holder.dm
index 74c1af915e2..d631bd45ec8 100644
--- a/code/game/objects/structures/tank_holder.dm
+++ b/code/game/objects/structures/tank_holder.dm
@@ -13,18 +13,17 @@
resistance_flags = FIRE_PROOF
- var/obj/item/tank = null
+ /// The stored tank. If this is a path, it gets created into contents at Initialize.
+ var/obj/item/tank
/obj/structure/tank_holder/Initialize()
. = ..()
if(tank)
- density = TRUE
- tank = new tank(src)
+ after_put_tank(new tank)
/obj/structure/tank_holder/Destroy()
if(tank)
- tank.forceMove(get_turf(src))
- tank = null
+ QDEL_NULL(tank)
return ..()
/obj/structure/tank_holder/CanAllowThrough(atom/movable/mover, turf/target)
@@ -32,26 +31,24 @@
if(istype(mover) && mover.throwing)
return TRUE
-/obj/structure/closet/examine(mob/user)
+/obj/structure/tank_holder/examine(mob/user)
. = ..()
. += "It is held together by some screws."
/obj/structure/tank_holder/attackby(obj/item/W, mob/user, params)
if(user.a_intent == INTENT_HARM)
return ..()
- if(contents.len != 0)
- to_chat(user, "There's already something in \the [src].")
+ if(contents.len)
+ to_chat(user, "There's already something in [src].")
return
if(!W.tank_holder_icon_state)
- to_chat(user, "\The [W] does not fit in \the [src].")
+ to_chat(user, "[W] does not fit in [src].")
return
if(!user.transferItemToLoc(W, src))
return
- to_chat(user, "You put \the [W] into \the [src].")
- if(!user.transferItemToLoc(W, src))
- return
+ to_chat(user, "You put [W] into [src].")
after_put_tank(W)
/obj/structure/tank_holder/screwdriver_act(mob/living/user, obj/item/I)
@@ -63,8 +60,11 @@
deconstruct(TRUE)
return TRUE
-/obj/structure/table_frame/deconstruct(disassembled = TRUE)
+/obj/structure/tank_holder/deconstruct(disassembled = TRUE)
new /obj/item/stack/rods(get_turf(src), 2)
+ if(tank)
+ tank.forceMove(get_turf(src))
+ tank = null
qdel(src)
/obj/structure/tank_holder/attack_paw(mob/user)
@@ -73,16 +73,31 @@
/obj/structure/tank_holder/attack_hand(mob/user)
if(!tank)
return ..()
- to_chat(user, "You take \the [tank] from \the [src].")
+ if(!Adjacent(user) || issilicon(user))
+ return ..()
+ to_chat(user, "You take [tank] from [src].")
add_fingerprint(user)
user.put_in_hands(tank)
after_remove_tank()
-/obj/structure/tank_holder/proc/after_put_tank(obj/item/tank)
- tank = tank
+/obj/structure/tank_holder/handle_atom_del(atom/A)
+ if(A == tank)
+ after_remove_tank()
+ return ..()
+
+/obj/structure/tank_holder/contents_explosion(severity, target)
+ if(tank)
+ tank.ex_act(severity, target)
+
+/// Call this after inserting the tank into contents in order to update references, icon
+/// and density.
+/obj/structure/tank_holder/proc/after_put_tank(obj/item/tank_)
+ tank = tank_
icon_state = tank.tank_holder_icon_state
density = TRUE
+/// Call this after taking the tank from contents in order to update references, icon
+/// and density.
/obj/structure/tank_holder/proc/after_remove_tank()
tank = null
icon_state = "holder"
@@ -90,45 +105,36 @@
/obj/structure/tank_holder/oxygen
icon_state = "holder_oxygen"
- density = TRUE
tank = /obj/item/tank/internals/oxygen
/obj/structure/tank_holder/anesthetic
icon_state = "holder_anesthetic"
- density = TRUE
tank = /obj/item/tank/internals/anesthetic
/obj/structure/tank_holder/oxygen/yellow
icon_state = "holder_oxygen_f"
- density = TRUE
tank = /obj/item/tank/internals/oxygen/yellow
/obj/structure/tank_holder/oxygen/red
icon_state = "holder_oxygen_fr"
- density = TRUE
tank = /obj/item/tank/internals/oxygen/red
/obj/structure/tank_holder/emergency_oxygen
icon_state = "holder_emergency"
- density = TRUE
tank = /obj/item/tank/internals/emergency_oxygen
/obj/structure/tank_holder/emergency_oxygen/engi
icon_state = "holder_emergency_engi"
- density = TRUE
tank = /obj/item/tank/internals/emergency_oxygen/engi
/obj/structure/tank_holder/generic
icon_state = "holder_generic"
- density = TRUE
tank = /obj/item/tank/internals/generic
/obj/structure/tank_holder/extinguisher
icon_state = "holder_extinguisher"
- density = TRUE
tank = /obj/item/extinguisher
/obj/structure/tank_holder/extinguisher/advanced
icon_state = "holder_foam_extinguisher"
- density = TRUE
tank = /obj/item/extinguisher/advanced