diff --git a/code/game/objects/items/airbubble.dm b/code/game/objects/items/airbubble.dm index f4d68c6ee1c..4ddbb6be8e7 100644 --- a/code/game/objects/items/airbubble.dm +++ b/code/game/objects/items/airbubble.dm @@ -20,16 +20,28 @@ if (!isturf(user.loc)) to_chat(user, "You're fucking stupid, the air bubble can't deploy in an enclosed space.") return + + user.visible_message( + "[user] begins deploying \the [src].", + "You begin deplyoing \the [src]." + ) + if (!do_after(user, 0.45 SECONDS, act_target = src)) + return + user.visible_message( + "[user] deployed \the [src]." , + "You deploy \the [src]." + ) var/obj/structure/closet/airbubble/R if(syndie) R = new /obj/structure/closet/airbubble/syndie(user.loc) else R = new /obj/structure/closet/airbubble(user.loc) - if(!used && !ripped) + if(!used) internal_tank = new /obj/item/weapon/tank/emergency_oxygen/double(src) R.internal_tank = internal_tank - internal_tank.forceMove(R) - internal_tank = null + if(!isnull(internal_tank)) + internal_tank.forceMove(R) + internal_tank = null R.add_fingerprint(user) R.ripped = ripped R.zipped = zipped @@ -111,7 +123,32 @@ queue_smooth_neighbors(src) return ..() -/obj/structure/closet/airbubble/close() +/obj/structure/closet/airbubble/toggle(mob/user as mob) + if(!(opened ? close(user) : open(user))) + user << "It won't budge!" + return + update_icon() + return 1 + +/obj/structure/closet/airbubble/open(mob/user as mob) + if(opened) + return 0 + + if(!can_open()) + return 0 + + dump_contents() + + if(!do_after(user, 0.35 SECONDS, act_target = src)) + return + + icon_state = icon_opened + opened = 1 + playsound(loc, open_sound, 15, 1, -3) + density = 0 + return 1 + +/obj/structure/closet/airbubble/close(mob/user as mob) if(!opened) return 0 if(!can_close()) @@ -119,6 +156,9 @@ var/stored_units = 0 + if(!do_after(user, 0.35 SECONDS, act_target = src)) + return + if(store_misc) stored_units += store_misc(stored_units) if(store_items) @@ -140,7 +180,16 @@ if(!ishuman(usr)) return if(opened) return 0 if(contents.len > 1) return 0 - visible_message("[usr] folds up the [src.name]") + usr.visible_message( + "[usr] begins folding up the [src.name].", + "You begin folding up the [src.name]." + ) + if (!do_after(usr, 0.45 SECONDS, act_target = src)) + return + usr.visible_message( + "[usr] folds up the [src.name]." , + "You fold up the [src.name]." + ) var/obj/item/airbubble/bag if(syndie) bag = new /obj/item/airbubble/syndie(get_turf(src)) @@ -148,9 +197,11 @@ bag = new /obj/item/airbubble(get_turf(src)) bag.ripped = ripped bag.zipped = zipped + bag.used = TRUE bag.internal_tank = internal_tank - internal_tank.forceMove(bag) - internal_tank = null + if(!isnull(internal_tank)) + internal_tank.forceMove(bag) + internal_tank = null bag.w_class = ITEMSIZE_LARGE bag.desc = "Special air bubble designed to protect people inside of it from decompressed enviroments." @@ -275,7 +326,7 @@ // Handle most of things: restraining, cutting restrains, attaching tank. /obj/structure/closet/airbubble/attackby(W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/tank)) - if(!use_internal_tank) + if(!isnull(use_internal_tank)) user.visible_message( "[user] is attaching [W] to [src].", "You are attaching [W] to [src]." @@ -292,6 +343,7 @@ T.forceMove(src) use_internal_tank = 1 START_PROCESSING(SSfast_process, src) + return else user << "[src] already has a tank attached." if(opened)