From 8fe013d531d7e5458cc6cea3120c531c4ff31b7f Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 24 Jun 2014 03:21:27 +0930 Subject: [PATCH 1/3] Allows climbing onto tables and crates, also adds falling off if you are dumb enough to stand on one that is flipped or opened. --- .../structures/crates_lockers/crates.dm | 35 +++++++++++++++++++ code/game/objects/structures/tables_racks.dm | 34 +++++++++++++++--- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 6ad94282f1e..04925223898 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -10,6 +10,36 @@ // mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? var/rigged = 0 +//Maybe move both of these procs to a root structure somewhere and have a 'climbable' var on structures. +/obj/structure/closet/crate/proc/can_touch(var/mob/user) + if (!user) + return 0 + if (user.stat) //zombie goasts go away + return 0 + if (issilicon(user)) + user << "You need hands for this." + return 0 + return 1 + +/obj/structure/closet/crate/verb/do_climb() + + set name = "Climb crate" + set desc = "Climbs onto a crate." + set category = "Object" + set src in oview(1) + + if (!can_touch(usr)) + return + + usr.visible_message("[usr] starts climbing onto \the [src]!") + + if(!do_after(usr,50)) + return + + usr.loc = get_turf(src) + if (get_turf(usr) == get_turf(src)) + usr.visible_message("[usr] climbs onto \the [src]!") + /obj/structure/closet/crate/can_open() return 1 @@ -36,6 +66,11 @@ O.loc = get_turf(src) icon_state = icon_opened src.opened = 1 + + for(var/mob/living/M in get_turf(src)) + M.Weaken(5) + M << "\red You topple as \the [src] moves under you!" + return 1 /obj/structure/closet/crate/close() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 81c017def59..584aba3d5ae 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -412,7 +412,7 @@ return 0 return T.straight_table_check(direction) -/obj/structure/table/verb/can_touch(var/mob/user) +/obj/structure/table/proc/can_touch(var/mob/user) if (!user) return 0 if (user.stat) //zombie goasts go away @@ -422,20 +422,44 @@ return 0 return 1 +/obj/structure/table/verb/do_climb() + set name = "Climb table" + set desc = "Climbs onto a table." + set category = "Object" + set src in oview(1) + + if (!can_touch(usr)) + return + + usr.visible_message("[usr] starts climbing onto \the [src]!") + + if(!do_after(usr,50)) + return + + usr.loc = get_turf(src) + if (get_turf(usr) == get_turf(src)) + usr.visible_message("[usr] climbs onto \the [src]!") + /obj/structure/table/verb/do_flip() set name = "Flip table" set desc = "Flips a non-reinforced table" set category = "Object" set src in oview(1) - if(ismouse(usr)) - return - if (!can_touch(usr)) + + if (!can_touch(usr) || ismouse(usr)) return + if(!flip(get_cardinal_dir(usr,src))) usr << "It won't budge." else usr.visible_message("[usr] flips \the [src]!") - return + + + for(var/mob/living/M in get_turf(src)) + M.Weaken(5) + M << "\red You topple as \the [src] moves under you!" + + return /obj/structure/table/proc/unflipping_check(var/direction) for(var/mob/M in oview(src,0)) From 7fe8a89e58a18e377511ceabdef9027d5ecffbcc Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 24 Jun 2014 07:17:24 +0930 Subject: [PATCH 2/3] Makes table/crate falling a bit more dangerous. --- .../structures/crates_lockers/crates.dm | 36 +++++++++++++++++- code/game/objects/structures/tables_racks.dm | 38 ++++++++++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 04925223898..4dca87cf995 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -68,10 +68,44 @@ src.opened = 1 for(var/mob/living/M in get_turf(src)) + + if(M.lying) return //No spamming this on people. + M.Weaken(5) M << "\red You topple as \the [src] moves under you!" - return 1 + if(prob(100)) + + var/mob/living/carbon/human/H = M + if(!istype(M)) + H << "\red You land heavily!" + M.adjustBruteLoss(rand(15,30)) + return + + var/datum/organ/external/affecting + + switch(pick(list("ankle","wrist","head","knee","elbow"))) + if("ankle") + affecting = H.get_organ(pick("l_foot", "r_foot")) + if("knee") + affecting = H.get_organ(pick("l_leg", "r_leg")) + if("wrist") + affecting = H.get_organ(pick("l_hand", "r_hand")) + if("elbow") + affecting = H.get_organ(pick("l_arm", "r_arm")) + if("head") + affecting = H.get_organ("head") + + if(affecting) + M << "\red You land heavily on your [affecting.display_name]!" + affecting.take_damage(rand(15,30), 0) + else + H << "\red You land heavily!" + H.adjustBruteLoss(rand(15,30)) + + H.UpdateDamageIcon() + H.updatehealth() + return /obj/structure/closet/crate/close() if(!src.opened) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 584aba3d5ae..aac7a2eb26a 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -451,14 +451,48 @@ if(!flip(get_cardinal_dir(usr,src))) usr << "It won't budge." - else - usr.visible_message("[usr] flips \the [src]!") + return + usr.visible_message("[usr] flips \the [src]!") for(var/mob/living/M in get_turf(src)) + + if(M.lying) return //No spamming this on people. + M.Weaken(5) M << "\red You topple as \the [src] moves under you!" + if(prob(100)) + + var/mob/living/carbon/human/H = M + if(!istype(M)) + H << "\red You land heavily!" + M.adjustBruteLoss(rand(15,30)) + return + + var/datum/organ/external/affecting + + switch(pick(list("ankle","wrist","head","knee","elbow"))) + if("ankle") + affecting = H.get_organ(pick("l_foot", "r_foot")) + if("knee") + affecting = H.get_organ(pick("l_leg", "r_leg")) + if("wrist") + affecting = H.get_organ(pick("l_hand", "r_hand")) + if("elbow") + affecting = H.get_organ(pick("l_arm", "r_arm")) + if("head") + affecting = H.get_organ("head") + + if(affecting) + M << "\red You land heavily on your [affecting.display_name]!" + affecting.take_damage(rand(15,30), 0) + else + H << "\red You land heavily!" + H.adjustBruteLoss(rand(15,30)) + + H.UpdateDamageIcon() + H.updatehealth() return /obj/structure/table/proc/unflipping_check(var/direction) From a5c2af7a57539f1c32eaacc60dce39253918ce38 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Tue, 24 Jun 2014 11:11:02 +0930 Subject: [PATCH 3/3] Shuffling around table and crate knock/climb procs. --- code/game/objects/structures.dm | 81 ++++++++++++++++++- .../structures/crates_lockers/crates.dm | 70 +--------------- code/game/objects/structures/tables_racks.dm | 69 +--------------- 3 files changed, 84 insertions(+), 136 deletions(-) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 594c95b6c80..36d428ec5b0 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -1,11 +1,12 @@ -obj/structure +/obj/structure icon = 'icons/obj/structures.dmi' + var/climbable -obj/structure/blob_act() +/obj/structure/blob_act() if(prob(50)) del(src) -obj/structure/ex_act(severity) +/obj/structure/ex_act(severity) switch(severity) if(1.0) del(src) @@ -17,12 +18,84 @@ obj/structure/ex_act(severity) if(3.0) return -obj/structure/meteorhit(obj/O as obj) +/obj/structure/meteorhit(obj/O as obj) del(src) +/obj/structure/New() + ..() + if(climbable) + verbs += /obj/structure/proc/do_climb +/obj/structure/proc/do_climb() + set name = "Climb structure" + set desc = "Climbs onto a structure." + set category = "Object" + set src in oview(1) + if (!can_touch(usr) || !climbable) + return + usr.visible_message("[usr] starts climbing onto \the [src]!") + if(!do_after(usr,50)) + return + usr.loc = get_turf(src) + if (get_turf(usr) == get_turf(src)) + usr.visible_message("[usr] climbs onto \the [src]!") + +/obj/structure/proc/structure_shaken() + + for(var/mob/living/M in get_turf(src)) + + if(M.lying) return //No spamming this on people. + + M.Weaken(5) + M << "\red You topple as \the [src] moves under you!" + + if(prob(25)) + + var/damage = rand(15,30) + var/mob/living/carbon/human/H = M + if(!istype(M)) + H << "\red You land heavily!" + M.adjustBruteLoss(damage) + return + + var/datum/organ/external/affecting + + switch(pick(list("ankle","wrist","head","knee","elbow"))) + if("ankle") + affecting = H.get_organ(pick("l_foot", "r_foot")) + if("knee") + affecting = H.get_organ(pick("l_leg", "r_leg")) + if("wrist") + affecting = H.get_organ(pick("l_hand", "r_hand")) + if("elbow") + affecting = H.get_organ(pick("l_arm", "r_arm")) + if("head") + affecting = H.get_organ("head") + + if(affecting) + M << "\red You land heavily on your [affecting.display_name]!" + affecting.take_damage(damage, 0) + if(affecting.parent) + affecting.parent.add_autopsy_data("Misadventure", damage) + else + H << "\red You land heavily!" + H.adjustBruteLoss(damage) + + H.UpdateDamageIcon() + H.updatehealth() + return + +/obj/structure/proc/can_touch(var/mob/user) + if (!user) + return 0 + if (user.stat || user.restrained() || user.paralysis || user.sleeping || user.lying || user.weakened) + return 0 + if (issilicon(user)) + user << "You need hands for this." + return 0 + return 1 \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4dca87cf995..802d34e0835 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -7,39 +7,10 @@ icon_state = "crate" icon_opened = "crateopen" icon_closed = "crate" + climbable = 1 // mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? var/rigged = 0 -//Maybe move both of these procs to a root structure somewhere and have a 'climbable' var on structures. -/obj/structure/closet/crate/proc/can_touch(var/mob/user) - if (!user) - return 0 - if (user.stat) //zombie goasts go away - return 0 - if (issilicon(user)) - user << "You need hands for this." - return 0 - return 1 - -/obj/structure/closet/crate/verb/do_climb() - - set name = "Climb crate" - set desc = "Climbs onto a crate." - set category = "Object" - set src in oview(1) - - if (!can_touch(usr)) - return - - usr.visible_message("[usr] starts climbing onto \the [src]!") - - if(!do_after(usr,50)) - return - - usr.loc = get_turf(src) - if (get_turf(usr) == get_turf(src)) - usr.visible_message("[usr] climbs onto \the [src]!") - /obj/structure/closet/crate/can_open() return 1 @@ -67,44 +38,9 @@ icon_state = icon_opened src.opened = 1 - for(var/mob/living/M in get_turf(src)) + if(climbable) + structure_shaken() - if(M.lying) return //No spamming this on people. - - M.Weaken(5) - M << "\red You topple as \the [src] moves under you!" - - if(prob(100)) - - var/mob/living/carbon/human/H = M - if(!istype(M)) - H << "\red You land heavily!" - M.adjustBruteLoss(rand(15,30)) - return - - var/datum/organ/external/affecting - - switch(pick(list("ankle","wrist","head","knee","elbow"))) - if("ankle") - affecting = H.get_organ(pick("l_foot", "r_foot")) - if("knee") - affecting = H.get_organ(pick("l_leg", "r_leg")) - if("wrist") - affecting = H.get_organ(pick("l_hand", "r_hand")) - if("elbow") - affecting = H.get_organ(pick("l_arm", "r_arm")) - if("head") - affecting = H.get_organ("head") - - if(affecting) - M << "\red You land heavily on your [affecting.display_name]!" - affecting.take_damage(rand(15,30), 0) - else - H << "\red You land heavily!" - H.adjustBruteLoss(rand(15,30)) - - H.UpdateDamageIcon() - H.updatehealth() return /obj/structure/closet/crate/close() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index aac7a2eb26a..f0e2b623c79 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -19,6 +19,8 @@ anchored = 1.0 layer = 2.8 throwpass = 1 //You can throw objects over this, despite it's density.") + climbable = 1 + var/parts = /obj/item/weapon/table_parts var/flipped = 0 var/health = 100 @@ -412,34 +414,6 @@ return 0 return T.straight_table_check(direction) -/obj/structure/table/proc/can_touch(var/mob/user) - if (!user) - return 0 - if (user.stat) //zombie goasts go away - return 0 - if (issilicon(user)) - user << "You need hands for this." - return 0 - return 1 - -/obj/structure/table/verb/do_climb() - set name = "Climb table" - set desc = "Climbs onto a table." - set category = "Object" - set src in oview(1) - - if (!can_touch(usr)) - return - - usr.visible_message("[usr] starts climbing onto \the [src]!") - - if(!do_after(usr,50)) - return - - usr.loc = get_turf(src) - if (get_turf(usr) == get_turf(src)) - usr.visible_message("[usr] climbs onto \the [src]!") - /obj/structure/table/verb/do_flip() set name = "Flip table" set desc = "Flips a non-reinforced table" @@ -455,44 +429,9 @@ usr.visible_message("[usr] flips \the [src]!") - for(var/mob/living/M in get_turf(src)) + if(climbable) + structure_shaken() - if(M.lying) return //No spamming this on people. - - M.Weaken(5) - M << "\red You topple as \the [src] moves under you!" - - if(prob(100)) - - var/mob/living/carbon/human/H = M - if(!istype(M)) - H << "\red You land heavily!" - M.adjustBruteLoss(rand(15,30)) - return - - var/datum/organ/external/affecting - - switch(pick(list("ankle","wrist","head","knee","elbow"))) - if("ankle") - affecting = H.get_organ(pick("l_foot", "r_foot")) - if("knee") - affecting = H.get_organ(pick("l_leg", "r_leg")) - if("wrist") - affecting = H.get_organ(pick("l_hand", "r_hand")) - if("elbow") - affecting = H.get_organ(pick("l_arm", "r_arm")) - if("head") - affecting = H.get_organ("head") - - if(affecting) - M << "\red You land heavily on your [affecting.display_name]!" - affecting.take_damage(rand(15,30), 0) - else - H << "\red You land heavily!" - H.adjustBruteLoss(rand(15,30)) - - H.UpdateDamageIcon() - H.updatehealth() return /obj/structure/table/proc/unflipping_check(var/direction)