Inflatables Buff (#11537)

This commit is contained in:
Geeves
2021-04-22 12:02:11 +02:00
committed by GitHub
parent 679d81440b
commit e3ac75bcbb
26 changed files with 202 additions and 183 deletions
@@ -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()
..()
+116 -99
View File
@@ -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