From 3397ddf7c1dd671d33e0f886cd8536c7e2fb6578 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 28 Sep 2015 07:41:24 +0200 Subject: [PATCH] Fix inflatable walls --- code/game/objects/structures/inflatable.dm | 404 ++++++++++----------- 1 file changed, 200 insertions(+), 204 deletions(-) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 14b51d03498..17978724c34 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -5,13 +5,13 @@ icon_state = "folded_wall" w_class = 3.0 - attack_self(mob/user) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - user << "\blue You inflate [src]." - var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc) - src.transfer_fingerprints_to(R) - R.add_fingerprint(user) - qdel(src) +/obj/item/inflatable/attack_self(mob/user) + playsound(loc, 'sound/items/zip.ogg', 75, 1) + user << "\blue You inflate [src]." + 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" @@ -25,131 +25,130 @@ var/health = 50.0 +/obj/structure/inflatable/New(location) + ..() + air_update_turf(1) - New(location) - ..() - air_update_turf() +/obj/structure/inflatable/Destroy() + air_update_turf(1) + return ..() - Destroy() - air_update_turf() - return ..() +/obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + return 0 + +/obj/structure/inflatable/CanAtmosPass(turf/T) + return !density - CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - return 0 +/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj) + health -= Proj.damage + ..() + if(health <= 0) + deflate(1) + return - bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - if(health <= 0) +/obj/structure/inflatable/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) + return + if(2.0) deflate(1) - return - - - ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) + return + if(3.0) + if(prob(50)) deflate(1) return - if(3.0) - if(prob(50)) - deflate(1) - return +/obj/structure/inflatable/blob_act() + deflate(1) - blob_act() +/obj/structure/inflatable/attack_hand(mob/user as mob) + add_fingerprint(user) + return + +/obj/structure/inflatable/proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime + health -= damage + if(health <= 0) + user.visible_message("[user] tears open [src]!") + deflate(1) + else //for nicer text~ + user.visible_message("[user] tears at [src]!") + +/obj/structure/inflatable/attack_alien(mob/user as mob) + if(islarva(user)) + return + attack_generic(user, 15) + +/obj/structure/inflatable/attack_animal(mob/user as mob) + if(!isanimal(user)) + return + var/mob/living/simple_animal/M = user + if(M.melee_damage_upper <= 0) + return + attack_generic(M, M.melee_damage_upper) + +/obj/structure/inflatable/attack_slime(mob/user as mob) + var/mob/living/carbon/slime/S = user + if (!S.is_adult) + return + attack_generic(user, rand(10, 15)) + +/obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(!istype(W)) + return + if (can_puncture(W)) + visible_message("\red [user] pierces [src] with [W]!") + 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) - attack_hand(mob/user as mob) - add_fingerprint(user) - return - - - proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime - health -= damage - if(health <= 0) - user.visible_message("[user] tears open [src]!") - deflate(1) - else //for nicer text~ - user.visible_message("[user] tears at [src]!") - - attack_alien(mob/user as mob) - if(islarva(user)) return - attack_generic(user, 15) - - attack_animal(mob/user as mob) - if(!isanimal(user)) return - var/mob/living/simple_animal/M = user - if(M.melee_damage_upper <= 0) return - attack_generic(M, M.melee_damage_upper) - - - attack_slime(mob/user as mob) - var/mob/living/carbon/slime/S = user - if (!S.is_adult) - return - attack_generic(user, rand(10, 15)) - - - attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(!istype(W)) return - - if (can_puncture(W)) - visible_message("\red [user] pierces [src] with [W]!") - deflate(1) - if(W.damtype == BRUTE || W.damtype == BURN) - hit(W.force) - ..() - return - - 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) - - - 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) +/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 << "\blue You slowly deflate the inflatable wall." + visible_message("[src] slowly deflates.") + spawn(50) + var/obj/item/inflatable/R = new /obj/item/inflatable(loc) src.transfer_fingerprints_to(R) qdel(src) - else - //user << "\blue You slowly deflate the inflatable wall." - visible_message("[src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/R = new /obj/item/inflatable(loc) - src.transfer_fingerprints_to(R) - qdel(src) - verb/hand_deflate() - set name = "Deflate" - set category = "Object" - set src in oview(1) +/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 + if(usr.stat || usr.restrained()) + return - deflate() + deflate() -/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 = 'icons/obj/inflatable.dmi' icon_state = "folded_door" - attack_self(mob/user) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - user << "\blue You inflate [src]." - 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/item/inflatable/door/attack_self(mob/user) + playsound(loc, 'sound/items/zip.ogg', 75, 1) + user << "\blue You inflate [src]." + 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" @@ -163,94 +162,91 @@ var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 - //Bumped(atom/user) - // ..() - // if(!state) - // return TryToSwitchState(user) - // return +/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) - 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) - 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/CanAtmosPass(turf/T) + return !density - 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 - - 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 +/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 if(istype(user, /obj/mecha)) - SwitchState() + else + SwitchState() + else if(istype(user, /obj/mecha)) + SwitchState() - proc/SwitchState() - if(state) - Close() - else - Open() - air_update_turf() - - proc/Open() - isSwitchingStates = 1 - //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("door_opening",src) - sleep(10) - density = 0 - opacity = 0 - state = 1 - update_icon() - isSwitchingStates = 0 - - proc/Close() - isSwitchingStates = 1 - //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("door_closing",src) - sleep(10) - density = 1 - opacity = 0 - state = 0 - update_icon() - isSwitchingStates = 0 +/obj/structure/inflatable/door/proc/SwitchState() + if(state) + Close() + else + Open() + air_update_turf(1) +/obj/structure/inflatable/door/proc/Open() + isSwitchingStates = 1 + //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) + flick("door_opening",src) + sleep(10) + density = 0 + opacity = 0 + state = 1 update_icon() - if(state) - icon_state = "door_open" - else - icon_state = "door_closed" + isSwitchingStates = 0 - 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 - //user << "\blue You slowly deflate the inflatable wall." - 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/structure/inflatable/door/proc/Close() + isSwitchingStates = 1 + //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 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) + 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) + air_update_turf(1) + qdel(src) /obj/item/inflatable/torn name = "torn inflatable wall" @@ -258,9 +254,9 @@ icon = 'icons/obj/inflatable.dmi' icon_state = "folded_wall_torn" - attack_self(mob/user) - user << "\blue The inflatable wall is too torn to be inflated!" - add_fingerprint(user) +/obj/item/inflatable/torn/attack_self(mob/user) + user << "The inflatable wall is too torn to be inflated!" + add_fingerprint(user) /obj/item/inflatable/door/torn name = "torn inflatable door" @@ -268,9 +264,9 @@ icon = 'icons/obj/inflatable.dmi' icon_state = "folded_door_torn" - attack_self(mob/user) - user << "\blue The inflatable door is too torn to be inflated!" - add_fingerprint(user) +/obj/item/inflatable/door/torn/attack_self(mob/user) + user << "The inflatable door is too torn to be inflated!" + add_fingerprint(user) /obj/item/weapon/storage/briefcase/inflatable name = "inflatable barrier box" @@ -280,12 +276,12 @@ max_combined_w_class = 21 w_class = 3 - 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) \ No newline at end of file +/obj/item/weapon/storage/briefcase/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)