Files
Aurora.3/code/game/objects/structures/inflatable.dm
PsiOmegaDelta a07d20d657 Ports /tg/'s meteor implementation.
Merges the two meteor events into one, and now takes severity into consideration instead.
Including the basic meteors there are also new types ranging from flaming to radioactive which may drop appropriate types of ore.
2015-06-05 14:58:35 +02:00

266 lines
7.0 KiB
Plaintext

/obj/item/inflatable
name = "inflatable wall"
desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_wall"
w_class = 3
attack_self(mob/user)
playsound(loc, 'sound/items/zip.ogg', 75, 1)
user << "<span class='notice'>You inflate [src].</span>"
var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc)
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
qdel(src)
/obj/structure/inflatable
name = "inflatable wall"
desc = "An inflated membrane. Do not puncture."
density = 1
anchored = 1
opacity = 0
icon = 'icons/obj/inflatable.dmi'
icon_state = "wall"
var/health = 50.0
/obj/structure/inflatable/New(location)
..()
update_nearby_tiles(need_rebuild=1)
/obj/structure/inflatable/Destroy()
update_nearby_tiles()
..()
/obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 0
/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj)
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
return
health -= Proj.damage
..()
if(health <= 0)
deflate(1)
return
/obj/structure/inflatable/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
deflate(1)
return
if(3.0)
if(prob(50))
deflate(1)
return
/obj/structure/inflatable/blob_act()
deflate(1)
/obj/structure/inflatable/attack_hand(mob/user as mob)
add_fingerprint(user)
return
/obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!istype(W)) 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)
hit(W.force)
..()
return
/obj/structure/inflatable/proc/hit(var/damage, var/sound_effect = 1)
health = max(0, health - damage)
if(sound_effect)
playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
if(health <= 0)
deflate(1)
/obj/structure/inflatable/proc/deflate(var/violent=0)
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
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)
else
//user << "<span class='notice'>You slowly deflate the inflatable wall.</span>"
visible_message("[src] slowly deflates.")
spawn(50)
var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
src.transfer_fingerprints_to(R)
qdel(src)
/obj/structure/inflatable/verb/hand_deflate()
set name = "Deflate"
set category = "Object"
set src in oview(1)
if(isobserver(usr)) //to stop ghosts from deflating
return
verbs -= /obj/structure/inflatable/verb/hand_deflate
deflate()
/obj/structure/inflatable/attack_generic(var/mob/user, var/damage, var/attack_verb)
health -= damage
user.do_attack_animation(src)
if(health <= 0)
user.visible_message("<span class='danger'>[user] [attack_verb] open the [src]!</span>")
spawn(1) deflate(1)
else
user.visible_message("<span class='danger'>[user] [attack_verb] at [src]!</span>")
return 1
/obj/item/inflatable/door/
name = "inflatable door"
desc = "A folded membrane which rapidly expands into a simple door on activation."
icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_door"
attack_self(mob/user)
playsound(loc, 'sound/items/zip.ogg', 75, 1)
user << "<span class='notice'>You inflate [src].</span>"
var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc)
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
qdel(src)
/obj/structure/inflatable/door //Based on mineral door code
name = "inflatable door"
density = 1
anchored = 1
opacity = 0
icon = 'icons/obj/inflatable.dmi'
icon_state = "door_closed"
var/state = 0 //closed, 1 == open
var/isSwitchingStates = 0
/obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral
if(isAI(user)) //so the AI can't open it
return
else if(isrobot(user)) //but cyborgs can
if(get_dist(user,src) <= 1) //not remotely though
return TryToSwitchState(user)
/obj/structure/inflatable/door/attack_hand(mob/user as mob)
return TryToSwitchState(user)
/obj/structure/inflatable/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group)
return state
if(istype(mover, /obj/effect/beam))
return !opacity
return !density
/obj/structure/inflatable/door/proc/TryToSwitchState(atom/user)
if(isSwitchingStates) return
if(ismob(user))
var/mob/M = user
if(world.time - user.last_bumped <= 60) return //NOTE do we really need that?
if(M.client)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!C.handcuffed)
SwitchState()
else
SwitchState()
else if(istype(user, /obj/mecha))
SwitchState()
/obj/structure/inflatable/door/proc/SwitchState()
if(state)
Close()
else
Open()
update_nearby_tiles()
/obj/structure/inflatable/door/proc/Open()
isSwitchingStates = 1
flick("door_opening",src)
sleep(10)
density = 0
opacity = 0
state = 1
update_icon()
isSwitchingStates = 0
/obj/structure/inflatable/door/proc/Close()
isSwitchingStates = 1
flick("door_closing",src)
sleep(10)
density = 1
opacity = 0
state = 0
update_icon()
isSwitchingStates = 0
/obj/structure/inflatable/door/update_icon()
if(state)
icon_state = "door_open"
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.")
spawn(50)
var/obj/item/inflatable/door/R = new /obj/item/inflatable/door(loc)
src.transfer_fingerprints_to(R)
qdel(src)
/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)
user << "<span class='notice'>The inflatable wall is too torn to be inflated!</span>"
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)
user << "<span class='notice'>The inflatable door is too torn to be inflated!</span>"
add_fingerprint(user)
/obj/item/weapon/storage/briefcase/inflatable
name = "inflatable barrier box"
desc = "Contains inflatable walls and doors."
icon_state = "inf_box"
item_state = "syringe_kit"
max_storage_space = 28
can_hold = list(/obj/item/inflatable)
New()
..()
new /obj/item/inflatable/door(src)
new /obj/item/inflatable/door(src)
new /obj/item/inflatable/door(src)
new /obj/item/inflatable(src)
new /obj/item/inflatable(src)
new /obj/item/inflatable(src)
new /obj/item/inflatable(src)