From e3169ee8b9edbf5ce05d6c372113d0785b838f26 Mon Sep 17 00:00:00 2001 From: Fleure Date: Thu, 24 Oct 2013 21:30:01 +0100 Subject: [PATCH 1/5] Adds container resist proc --- code/game/machinery/cryo.dm | 4 +-- .../mecha/equipment/tools/medical_tools.dm | 5 ++- code/game/objects/objs.dm | 5 ++- .../structures/crates_lockers/closets.dm | 33 ++++++++++++++++- code/modules/mob/living/living.dm | 35 +++---------------- 5 files changed, 46 insertions(+), 36 deletions(-) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index fd99f2065ab..c8498e2bdd2 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -60,8 +60,8 @@ return 0 -/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user) - if(user.stat) +/obj/machinery/atmospherics/unary/cryo_cell/container_resist() + if(usr.stat) return go_out() return diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 8609595057d..f890ae633df 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -210,6 +210,9 @@ return 1 return + container_resist() + go_out() + /datum/global_iterator/mech_sleeper process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S) @@ -682,4 +685,4 @@ for(var/reagent in S.processed_reagents) S.reagents.add_reagent(reagent,amount) S.chassis.use_power(energy_drain) - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 79fbaffa987..7ea06f0c942 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -93,6 +93,9 @@ /obj/proc/interact(mob/user) return +/obj/proc/container_resist() + return + /obj/proc/update_icon() return @@ -126,4 +129,4 @@ var/rendered = "[M.name]: [text]" mo.show_message(rendered, 2) */ - return \ No newline at end of file + return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 9255a83c851..311a40145f1 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -286,4 +286,35 @@ if(welded) overlays += "welded" else - icon_state = icon_opened \ No newline at end of file + icon_state = icon_opened + +/obj/structure/closet/container_resist() + var/mob/living/user = usr + var/breakout_time = 2 //2 minutes by default + if(istype(user.loc, /obj/structure/closet/critter) && !welded) + breakout_time = 0.75 //45 seconds if it's an unwelded critter crate + + if(opened || (!welded && !locked)) + return //Door's open, not locked or welded, no point in resisting. + + //okay, so the closet is either welded or locked... resist!!! + user.next_move = world.time + 100 + user.last_special = world.time + 100 + user << "You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)" + for(var/mob/O in viewers(src)) + O << "[src] begins to shake violently!" + + if(do_after(user,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds + if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded)) + return + //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting + + welded = 0 //applies to all lockers lockers + locked = 0 //applies to critter crates and secure lockers only + broken = 1 //applies to secure lockers only + visible_message("[user] successfully broke out of [src]!", \ + "You successfully break out of [src]!") + if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) + var/obj/structure/bigDelivery/BD = loc + BD.attack_hand(user) + open() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5d3990f69f8..44552f04769 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -462,37 +462,10 @@ else L.buckled.manual_unbuckle(L) - //Breaking out of a locker? - else if(loc && istype(loc, /obj/structure/closet)) - var/obj/structure/closet/C = L.loc - var/breakout_time = 2 //2 minutes by default - if(istype(L.loc, /obj/structure/closet/critter) && !C.welded) - breakout_time = 0.75 //45 seconds if it's an unwelded critter crate - - if(C.opened || (!C.welded && !C.locked)) - return //Door's open, not locked or welded, no point in resisting. - - //okay, so the closet is either welded or locked... resist!!! - usr.next_move = world.time + 100 - L.last_special = world.time + 100 - L << "You lean on the back of [C] and start pushing the door open. (this will take about [breakout_time] minutes.)" - for(var/mob/O in viewers(C)) - O << "[C] begins to shake violently!" - - if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds - if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened || (!C.locked && !C.welded)) - return - //we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting - - C.welded = 0 //applies to all lockers lockers - C.locked = 0 //applies to critter crates and secure lockers only - C.broken = 1 //applies to secure lockers only - L.visible_message("[L] successfully broke out of [C]!", \ - "You successfully break out of [C]!") - if(istype(C.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) - var/obj/structure/bigDelivery/BD = C.loc - BD.attack_hand(usr) - C.open() + //Breaking out of a container (Locker, sleeper, cryo...) + else if(loc && istype(loc, /obj) && !isturf(loc)) + var/obj/C = loc + C.container_resist(L) //Stop drop and roll & Handcuffs else if(iscarbon(L)) From 8eeafb70a79247103720449a340d9925937fbd15 Mon Sep 17 00:00:00 2001 From: Fleure Date: Thu, 24 Oct 2013 22:25:29 +0100 Subject: [PATCH 2/5] Overrides statue resist proc --- .../game/objects/structures/crates_lockers/closets/statue.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 5fc016321c8..30fa750b85d 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -147,4 +147,7 @@ user.dust() dump_contents() visible_message("\red [src] shatters!. ") - del(src) \ No newline at end of file + del(src) + +/obj/structure/closet/statue/container_resist() + return From d4ed5142e43115b44c9d18ded4c086995de6fbef Mon Sep 17 00:00:00 2001 From: Fleure Date: Fri, 25 Oct 2013 23:52:39 +0100 Subject: [PATCH 3/5] Adds resist escape to dna scanner --- code/game/dna.dm | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index ca875d91d06..15b87dbcf6c 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -354,6 +354,30 @@ if(open) return close() else return open() +/obj/machinery/dna_scannernew/container_resist() + var/mob/living/user = usr + var/breakout_time = 2 + if(open || !locked) //Open and unlocked, no need to escape + return + user.next_move = world.time + 100 + user.last_special = world.time + 100 + user << "You lean on the back of [src] and start pushing the door open. (this will take about [breakout_time] minutes.)" + for(var/mob/O in viewers(src)) + O << "You hear a metallic creaking from [src]!" + + if(do_after(user,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds + if(!user || user.stat != CONSCIOUS || user.loc != src || open || !locked) + return + + locked = 0 + visible_message("[user] successfully broke out of [src]!", \ + "You successfully break out of [src]!") + + if(istype(loc, /obj/structure/bigDelivery)) + var/obj/structure/bigDelivery/BD = loc + BD.attack_hand(user) + open() + /obj/machinery/dna_scannernew/proc/close() if(open) open = 0 @@ -920,4 +944,4 @@ proc/deconstruct_block(value, values, blocksize=DNA_BLOCK_SIZE) value = round(hex2num(value) / width) + 1 if(value > values) value = values - return value \ No newline at end of file + return value From d4aa482ff158ce1b3504cf0f141ea94be5ccc47d Mon Sep 17 00:00:00 2001 From: Fleure Date: Sat, 26 Oct 2013 20:07:26 +0100 Subject: [PATCH 4/5] Changed locker escape message usage --- code/game/dna.dm | 4 ++-- code/game/objects/structures/crates_lockers/closets.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index 15b87dbcf6c..16c248eac1a 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -370,8 +370,8 @@ return locked = 0 - visible_message("[user] successfully broke out of [src]!", \ - "You successfully break out of [src]!") + visible_message("[user] successfully broke out of [src]!") + user << "You successfully break out of [src]!" if(istype(loc, /obj/structure/bigDelivery)) var/obj/structure/bigDelivery/BD = loc diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 311a40145f1..a821d2765fd 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -312,8 +312,8 @@ welded = 0 //applies to all lockers lockers locked = 0 //applies to critter crates and secure lockers only broken = 1 //applies to secure lockers only - visible_message("[user] successfully broke out of [src]!", \ - "You successfully break out of [src]!") + visible_message("[user] successfully broke out of [src]!") + user << "You successfully break out of [src]!" if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) var/obj/structure/bigDelivery/BD = loc BD.attack_hand(user) From aaf68d2a12e73f4da99620f393f37d5b9ebfb67a Mon Sep 17 00:00:00 2001 From: Fleure Date: Tue, 5 Nov 2013 00:26:30 +0000 Subject: [PATCH 5/5] Included additional structures to escape from --- code/game/dna.dm | 4 +-- code/game/machinery/Sleeper.dm | 18 +++++++----- code/game/machinery/kitchen/gibber.dm | 2 +- code/game/machinery/suit_storage_unit.dm | 29 +++++++++++++------ code/game/mecha/mecha.dm | 3 ++ code/game/objects/effects/spiders.dm | 16 +++++++++- .../structures/crates_lockers/closets.dm | 3 -- code/game/objects/structures/morgue.dm | 8 ++--- code/modules/mob/living/living.dm | 5 ++-- code/modules/recycling/disposal.dm | 8 ++--- 10 files changed, 59 insertions(+), 37 deletions(-) diff --git a/code/game/dna.dm b/code/game/dna.dm index 16c248eac1a..d0f8d1d5df4 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -358,6 +358,7 @@ var/mob/living/user = usr var/breakout_time = 2 if(open || !locked) //Open and unlocked, no need to escape + open = 1 return user.next_move = world.time + 100 user.last_special = world.time + 100 @@ -373,9 +374,6 @@ visible_message("[user] successfully broke out of [src]!") user << "You successfully break out of [src]!" - if(istype(loc, /obj/structure/bigDelivery)) - var/obj/structure/bigDelivery/BD = loc - BD.attack_hand(user) open() /obj/machinery/dna_scannernew/proc/close() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 082802c3b98..04ed801f6b9 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -65,6 +65,8 @@ dat += "Scan" + dat += "Eject occupant" + dat += "

Injector

" if(occupant) dat += "Inject Inaprovaline" @@ -92,7 +94,11 @@ return usr.set_machine(src) if(connected && connected.occupant) - if(connected.occupant.health > 0) + if(href_list["eject"]) + connected.eject() + updateUsrDialog() + return + else if(connected.occupant.health > 0) if(href_list["inap"]) connected.inject_inap(usr) if(href_list["stox"]) @@ -294,14 +300,10 @@ var/units = round(occupant.reagents.get_reagent_amount("dexalin")) user << "Occupant now has [units] unit\s of dexalin in their bloodstream." +/obj/machinery/sleeper/container_resist() + eject() -/obj/machinery/sleeper/verb/eject() - set name = "Eject occupant" - set category = "Object" - set src in oview(1) - if(usr.stat || isslime(usr) || ispAI(usr)) - return - icon_state = "sleeper-open" +/obj/machinery/sleeper/proc/eject() go_out() add_fingerprint(usr) diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 0c103dbd641..b8500393002 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -65,7 +65,7 @@ /obj/machinery/gibber/attack_paw(mob/user as mob) return src.attack_hand(user) -/obj/machinery/gibber/relaymove(mob/user as mob) +/obj/machinery/gibber/container_resist() src.go_out() return diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 6e4432382ed..546261b66fe 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -419,15 +419,26 @@ return -/obj/machinery/suit_storage_unit/verb/get_out() - set name = "Eject Suit Storage Unit" - set category = "Object" - set src in oview(1) +/obj/machinery/suit_storage_unit/container_resist() + var/mob/living/user = usr + if(islocked) + user.next_move = world.time + 100 + user.last_special = world.time + 100 + var/breakout_time = 2 + user << "You start kicking against the doors to escape! (This will take about [breakout_time] minutes.)" + visible_message("You see [user] kicking against the doors of the [src]!") + if(do_after(user,(breakout_time*60*10))) + if(!user || user.stat != CONSCIOUS || user.loc != src || isopen || !islocked) + return + else + isopen = 1 + islocked = 0 + visible_message("[user] successfully broke out of [src]!") - if (usr.stat != 0) - return - src.eject_occupant(usr) - add_fingerprint(usr) + else + return + src.eject_occupant(user) + add_fingerprint(user) src.updateUsrDialog() src.update_icon() return @@ -568,4 +579,4 @@ return -//////////////////////////////REMINDER: Make it lock once you place some fucker inside. \ No newline at end of file +//////////////////////////////REMINDER: Make it lock once you place some fucker inside. diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f135584b4ca..88f15fbee15 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1086,6 +1086,9 @@ add_fingerprint(usr) return +/obj/mecha/container_resist() + go_out() + /obj/mecha/proc/go_out() if(!src.occupant) return diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index b231aac9052..09ac5bc814c 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -191,9 +191,23 @@ icon_state = "cocoon1" health = 60 - New() +/obj/effect/spider/cocoon/New() icon_state = pick("cocoon1","cocoon2","cocoon3") +/obj/effect/spider/cocoon/container_resist() + var/mob/living/user = usr + var/breakout_time = 2 + user.next_move = world.time + 100 + user.last_special = world.time + 100 + user << "You struggle against the tight bonds! (This will take about [breakout_time] minutes.)" + visible_message("You see something struggling and writhing in the [src]!") + if(do_after(user,(breakout_time*60*10))) + if(!user || user.stat != CONSCIOUS || user.loc != src) + return + Del() + + + /obj/effect/spider/cocoon/Del() src.visible_message("\red \The [src] splits open.") for(var/atom/movable/A in contents) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a821d2765fd..a6dd0c83aeb 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -314,7 +314,4 @@ broken = 1 //applies to secure lockers only visible_message("[user] successfully broke out of [src]!") user << "You successfully break out of [src]!" - if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) - var/obj/structure/bigDelivery/BD = loc - BD.attack_hand(user) open() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 9f546bcf15c..5d9ddd4cdca 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -101,9 +101,7 @@ src.add_fingerprint(user) return -/obj/structure/morgue/relaymove(mob/user as mob) - if (user.stat) - return +/obj/structure/morgue/container_resist() src.connected = new /obj/structure/m_tray( src.loc ) step(src.connected, EAST) src.connected.layer = OBJ_LAYER @@ -271,9 +269,7 @@ src.add_fingerprint(user) return -/obj/structure/crematorium/relaymove(mob/user as mob) - if (user.stat || locked) - return +/obj/structure/crematorium/container_resist() src.connected = new /obj/structure/c_tray( src.loc ) step(src.connected, SOUTH) src.connected.layer = OBJ_LAYER diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 44552f04769..d4319f79f0c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -464,8 +464,9 @@ //Breaking out of a container (Locker, sleeper, cryo...) else if(loc && istype(loc, /obj) && !isturf(loc)) - var/obj/C = loc - C.container_resist(L) + if(L.stat == CONSCIOUS && !L.stunned && !L.weakened && !L.paralysis) + var/obj/C = loc + C.container_resist(L) //Stop drop and roll & Handcuffs else if(iscarbon(L)) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 0454c42af7d..eeabbc2e236 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -193,11 +193,11 @@ /obj/machinery/disposal/alter_health() return get_turf(src) -// attempt to move while inside -/obj/machinery/disposal/relaymove(mob/user as mob) - if(user.stat || src.flushing) +// resist to escape the bin +/obj/machinery/disposal/container_resist() + if(src.flushing) return - src.go_out(user) + go_out(usr) return // leave the disposal