mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-23 04:51:32 +01:00
Inflatables Buff (#11537)
This commit is contained in:
@@ -55,9 +55,7 @@
|
||||
new /obj/item/clothing/suit/space/emergency(src)
|
||||
new /obj/item/clothing/head/helmet/space/emergency(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/storage/bag/inflatable/emergency(src)
|
||||
if ("all")
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
new /obj/item/tank/emergency_oxygen/engi(src)
|
||||
@@ -74,9 +72,7 @@
|
||||
new /obj/item/device/oxycandle(src)
|
||||
new /obj/item/airbubble(src)
|
||||
new /obj/item/airbubble(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/storage/bag/inflatable/emergency(src)
|
||||
|
||||
/obj/structure/closet/emcloset/legacy/fill()
|
||||
..()
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
#define STATE_CLOSED 0
|
||||
#define STATE_OPEN 1
|
||||
|
||||
/obj/item/inflatable
|
||||
name = "inflatable"
|
||||
desc_info = "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb."
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon = 'icons/obj/contained_items/tools/inflatables.dmi'
|
||||
var/deploy_path = null
|
||||
|
||||
/obj/item/inflatable/attack_self(mob/user)
|
||||
if(!deploy_path)
|
||||
return
|
||||
playsound(loc, 'sound/items/zip.ogg', 75, 1)
|
||||
to_chat(user, "<span class='notice'>You inflate \the [src].</span>")
|
||||
playsound(loc, 'sound/items/zip.ogg', 75, TRUE)
|
||||
to_chat(user, SPAN_NOTICE("You inflate \the [src]."))
|
||||
var/obj/structure/inflatable/R = new deploy_path(user.loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
transfer_fingerprints_to(R)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
@@ -21,7 +24,7 @@
|
||||
icon_state = "folded_wall"
|
||||
deploy_path = /obj/structure/inflatable/wall
|
||||
|
||||
/obj/item/inflatable/door/
|
||||
/obj/item/inflatable/door
|
||||
name = "inflatable door"
|
||||
desc = "A folded membrane which rapidly expands into a simple door on activation."
|
||||
icon_state = "folded_door"
|
||||
@@ -31,40 +34,43 @@
|
||||
name = "inflatable"
|
||||
desc = "An inflated membrane. Do not puncture."
|
||||
desc_info = "To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever."
|
||||
density = 1
|
||||
anchored = 1
|
||||
opacity = 0
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon = 'icons/obj/contained_items/tools/inflatables.dmi'
|
||||
icon_state = "wall"
|
||||
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
atmos_canpass = CANPASS_DENSITY
|
||||
|
||||
var/deflating = FALSE
|
||||
var/undeploy_path = null
|
||||
var/torn_path = null
|
||||
var/health = 50.0
|
||||
|
||||
/obj/structure/inflatable/wall
|
||||
name = "inflatable wall"
|
||||
undeploy_path = /obj/item/inflatable/wall
|
||||
torn_path = /obj/item/inflatable/torn
|
||||
|
||||
/obj/structure/inflatable/New(location)
|
||||
..()
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
/obj/structure/inflatable/Initialize(mapload)
|
||||
. = ..()
|
||||
update_nearby_tiles(need_rebuild = TRUE)
|
||||
|
||||
/obj/structure/inflatable/Destroy()
|
||||
update_nearby_tiles()
|
||||
return ..()
|
||||
|
||||
/obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/proj_damage = Proj.get_structure_damage()
|
||||
if(!proj_damage) return
|
||||
if(!proj_damage)
|
||||
return
|
||||
|
||||
health -= proj_damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
deflate(1)
|
||||
deflate(TRUE)
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/ex_act(severity)
|
||||
@@ -73,54 +79,72 @@
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
deflate(1)
|
||||
deflate(TRUE)
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(50))
|
||||
deflate(1)
|
||||
deflate(TRUE)
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/attack_hand(mob/user as mob)
|
||||
/obj/structure/inflatable/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(!istype(W) || istype(W, /obj/item/inflatable_dispenser)) return
|
||||
/obj/structure/inflatable/attackby(obj/item/W, mob/user)
|
||||
if(!istype(W) || istype(W, /obj/item/inflatable_dispenser))
|
||||
return
|
||||
if(deflating)
|
||||
return
|
||||
|
||||
if (can_puncture(W))
|
||||
visible_message("<span class='danger'>[user] pierces [src] with [W]!</span>")
|
||||
deflate(1)
|
||||
if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
if(W.can_puncture())
|
||||
user.visible_message(SPAN_DANGER("[user] pierces \the [src] with \the [W]!"), SPAN_WARNING("You pierce \the [src] with \the [W]!"))
|
||||
deflate(TRUE)
|
||||
else if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
hit(W.force)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/inflatable/proc/hit(var/damage, var/sound_effect = 1)
|
||||
/obj/structure/inflatable/proc/hit(var/damage, var/sound_effect = TRUE)
|
||||
health = max(0, health - damage)
|
||||
if(sound_effect)
|
||||
playsound(loc, 'sound/effects/glass_hit.ogg', 75, 1)
|
||||
if(health <= 0)
|
||||
deflate(1)
|
||||
deflate(TRUE)
|
||||
|
||||
/obj/structure/inflatable/CtrlClick()
|
||||
hand_deflate()
|
||||
|
||||
/obj/structure/inflatable/proc/deflate(var/violent=0)
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
/obj/structure/inflatable/proc/deflate(var/violent = FALSE)
|
||||
if(deflating)
|
||||
return
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, TRUE)
|
||||
if(violent)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/torn/R = new /obj/item/inflatable/torn(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
if(!torn_path)
|
||||
return
|
||||
deflating = TRUE
|
||||
visible_message(SPAN_WARNING("\The [src] rapidly deflates!"))
|
||||
var/matrix/M = new
|
||||
M.Scale(0.6)
|
||||
M.Turn(pick(-40, 40))
|
||||
animate(src, 0.2 SECONDS, transform = M)
|
||||
addtimer(CALLBACK(src, .proc/post_tear), 0.2 SECONDS)
|
||||
else
|
||||
if(!undeploy_path)
|
||||
return
|
||||
visible_message("\The [src] slowly deflates.")
|
||||
addtimer(CALLBACK(src, .proc/post_deflate), 26)
|
||||
deflating = TRUE
|
||||
visible_message(SPAN_NOTICE("\The [src] slowly deflates."))
|
||||
var/matrix/M = new
|
||||
M.Scale(0.6)
|
||||
animate(src, 2.6 SECONDS, transform = M)
|
||||
addtimer(CALLBACK(src, .proc/post_deflate), 2.6 SECONDS)
|
||||
|
||||
/obj/structure/inflatable/proc/post_deflate()
|
||||
var/obj/item/inflatable/R = new undeploy_path(src.loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
var/obj/item/inflatable/R = new undeploy_path(loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/proc/post_tear()
|
||||
var/obj/item/inflatable/torn/R = new torn_path(loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/inflatable/verb/hand_deflate()
|
||||
@@ -138,11 +162,11 @@
|
||||
health -= damage
|
||||
user.do_attack_animation(src)
|
||||
if(health <= 0)
|
||||
user.visible_message("<span class='danger'>[user] [attack_verb] open the [src]!</span>")
|
||||
addtimer(CALLBACK(src, .proc/deflate, 1), 1)
|
||||
user.visible_message(SPAN_DANGER("[user] [attack_verb] open the [src]!"))
|
||||
INVOKE_ASYNC(src, .proc/deflate, TRUE)
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] [attack_verb] at [src]!</span>")
|
||||
return 1
|
||||
user.visible_message(SPAN_DANGER("[user] [attack_verb] at [src]!"))
|
||||
return TRUE
|
||||
|
||||
/obj/structure/inflatable/door //Based on mineral door code
|
||||
name = "inflatable door"
|
||||
@@ -154,17 +178,18 @@
|
||||
|
||||
icon_state = "door_closed"
|
||||
undeploy_path = /obj/item/inflatable/door
|
||||
torn_path = /obj/item/inflatable/door/torn
|
||||
|
||||
var/state = 0 //closed, 1 == open
|
||||
var/isSwitchingStates = 0
|
||||
var/state = STATE_CLOSED
|
||||
var/isSwitchingStates = FALSE
|
||||
|
||||
/obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral
|
||||
/obj/structure/inflatable/door/attack_ai(mob/user)
|
||||
if(isAI(user)) //so the AI can't open it
|
||||
return
|
||||
else if(isrobot(user) && Adjacent(user)) //but cyborgs can
|
||||
return TryToSwitchState(user)
|
||||
|
||||
/obj/structure/inflatable/door/attack_hand(mob/user as mob)
|
||||
/obj/structure/inflatable/door/attack_hand(mob/user)
|
||||
return TryToSwitchState(user)
|
||||
|
||||
/obj/structure/inflatable/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
@@ -174,17 +199,12 @@
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
/obj/structure/inflatable/door/proc/TryToSwitchState(atom/user)
|
||||
if(isSwitchingStates) return
|
||||
if(ismob(user))
|
||||
var/mob/M = user
|
||||
if(M.client)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.handcuffed)
|
||||
SwitchState()
|
||||
else
|
||||
SwitchState()
|
||||
/obj/structure/inflatable/door/proc/TryToSwitchState(mob/user)
|
||||
if(isSwitchingStates)
|
||||
return
|
||||
if(use_check_and_message(user))
|
||||
return
|
||||
SwitchState()
|
||||
|
||||
/obj/structure/inflatable/door/proc/SwitchState()
|
||||
if(state)
|
||||
@@ -195,29 +215,33 @@
|
||||
|
||||
/obj/structure/inflatable/door/proc/Open()
|
||||
set waitfor = FALSE
|
||||
|
||||
if(isSwitchingStates)
|
||||
return
|
||||
isSwitchingStates = 1
|
||||
isSwitchingStates = TRUE
|
||||
density = FALSE
|
||||
state = STATE_OPEN
|
||||
flick("door_opening",src)
|
||||
sleep(10)
|
||||
density = 0
|
||||
opacity = 0
|
||||
state = 1
|
||||
addtimer(CALLBACK(src, .proc/ResetOpen), 1 SECOND)
|
||||
|
||||
/obj/structure/inflatable/door/proc/ResetOpen()
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
isSwitchingStates = FALSE
|
||||
|
||||
/obj/structure/inflatable/door/proc/Close()
|
||||
set waitfor = FALSE
|
||||
|
||||
if(isSwitchingStates)
|
||||
return
|
||||
isSwitchingStates = 1
|
||||
flick("door_closing",src)
|
||||
sleep(10)
|
||||
density = 1
|
||||
opacity = 0
|
||||
state = 0
|
||||
isSwitchingStates = TRUE
|
||||
flick("door_closing", src)
|
||||
addtimer(CALLBACK(src, .proc/ResetClose), 1 SECOND)
|
||||
|
||||
/obj/structure/inflatable/door/proc/ResetClose()
|
||||
density = TRUE
|
||||
state = STATE_CLOSED
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
isSwitchingStates = FALSE
|
||||
|
||||
/obj/structure/inflatable/door/update_icon()
|
||||
if(state)
|
||||
@@ -225,52 +249,45 @@
|
||||
else
|
||||
icon_state = "door_closed"
|
||||
|
||||
/obj/structure/inflatable/door/deflate(var/violent=0)
|
||||
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
|
||||
if(violent)
|
||||
visible_message("[src] rapidly deflates!")
|
||||
var/obj/item/inflatable/door/torn/R = new /obj/item/inflatable/door/torn(loc)
|
||||
src.transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
else
|
||||
visible_message("[src] slowly deflates.")
|
||||
addtimer(CALLBACK(src, .proc/post_deflate), 26)
|
||||
|
||||
/obj/item/inflatable/torn
|
||||
name = "torn inflatable wall"
|
||||
desc = "A folded membrane which rapidly expands into a large cubical shape on activation. It is too torn to be usable."
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon_state = "folded_wall_torn"
|
||||
|
||||
attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable wall is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
/obj/item/inflatable/torn/attack_self(mob/user)
|
||||
to_chat(user, SPAN_NOTICE("The inflatable wall is too torn to be inflated!"))
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/inflatable/door/torn
|
||||
name = "torn inflatable door"
|
||||
desc = "A folded membrane which rapidly expands into a simple door on activation. It is too torn to be usable."
|
||||
icon = 'icons/obj/inflatable.dmi'
|
||||
icon_state = "folded_door_torn"
|
||||
|
||||
attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>The inflatable door is too torn to be inflated!</span>")
|
||||
add_fingerprint(user)
|
||||
/obj/item/inflatable/door/torn/attack_self(mob/user)
|
||||
to_chat(user, SPAN_NOTICE("The inflatable door is too torn to be inflated!"))
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/storage/briefcase/inflatable
|
||||
/obj/item/storage/bag/inflatable
|
||||
name = "inflatable barrier box"
|
||||
desc = "Contains inflatable walls and doors."
|
||||
icon = 'icons/obj/contained_items/tools/inflatables.dmi'
|
||||
icon_state = "inf_box"
|
||||
item_state = "box"
|
||||
item_state = "inf_box"
|
||||
contained_sprite = TRUE
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
display_contents_with_number = TRUE
|
||||
max_storage_space = 28
|
||||
force_column_number = 3 // we want 4 slots to appear, so 3 columns + 1 free (to insert stuff)
|
||||
storage_slots = 14
|
||||
can_hold = list(/obj/item/inflatable)
|
||||
starts_with = list(/obj/item/inflatable/door = 5, /obj/item/inflatable/wall = 7)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/door(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
new /obj/item/inflatable/wall(src)
|
||||
use_sound = 'sound/items/storage/briefcase.ogg'
|
||||
drop_sound = 'sound/items/drop/backpack.ogg'
|
||||
pickup_sound = 'sound/items/pickup/backpack.ogg'
|
||||
|
||||
/obj/item/storage/bag/inflatable/emergency
|
||||
starts_with = list(/obj/item/inflatable/door = 2, /obj/item/inflatable/wall = 3)
|
||||
|
||||
#undef STATE_CLOSED
|
||||
#undef STATE_OPEN
|
||||
Reference in New Issue
Block a user