From deb97eba945c4a9eeb98c2fb6c8cdb9451ce385e Mon Sep 17 00:00:00 2001 From: joep van der velden Date: Sat, 29 Sep 2018 13:10:16 +0200 Subject: [PATCH] Refactor2.0 the squashening --- code/game/machinery/doors/airlock.dm | 82 +++++++++++++++++++--------- 1 file changed, 57 insertions(+), 25 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1855bf38a54..a076fcec8fd 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -306,6 +306,10 @@ About the new airlock wires panel: else return 0 +//Checks if the user can get shocked and shocks him if it can. Returns TRUE if it happened +/obj/machinery/door/airlock/proc/shock_user(mob/user, prob) + return (!issilicon(user) && isElectrified() && shock(user, prob)) + /obj/machinery/door/airlock/update_icon(state=0, override=0) if(operating && !override) return @@ -630,11 +634,25 @@ About the new airlock wires panel: return ..() /obj/machinery/door/airlock/attack_hand(mob/user) - if(!issilicon(user)) - if(isElectrified()) - if(shock(user, 100)) - return + if(shock_user(user, 100)) + return + if(headbutt_airlock(user)) + return//Smack that head against that airlock + if(remove_airlock_note(user, FALSE)) + return + + if(panel_open) + if(security_level) + to_chat(user, "Wires are protected!") + return + wires.Interact(user) + else + ..() + + +//Checks if the user can headbutt the airlock and does it if it can. Returns TRUE if it happened +/obj/machinery/door/airlock/proc/headbutt_airlock(mob/user) if(ishuman(user) && prob(40) && density) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 60 && Adjacent(user)) @@ -648,23 +666,23 @@ About the new airlock wires panel: H.UpdateDamageIcon() else visible_message("[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.") - return + return TRUE + return FALSE - if(note && ishuman(user) && user.a_intent == INTENT_GRAB) - user.visible_message("[user] removes [note] from [src].", "You remove [note] from [src].") - playsound(src, 'sound/items/poster_ripped.ogg', 50, 1) - note.forceMove(get_turf(user)) - note = null - update_icon() +//For the tools being used on the door. Since you don't want to call the attack_hand method if you're using hands. That would be silly +//Also it's a bit inconsistent that when you access the panel you headbutt it. But not while crowbarring +//Try to interact with the panel. If the user can't it'll try activating the door +/obj/machinery/door/airlock/proc/interact_with_panel(mob/user) + if(shock_user(user, 100)) return - + if(panel_open) if(security_level) to_chat(user, "Wires are protected!") return wires.Interact(user) else - ..() + try_to_activate_door(user) /obj/machinery/door/airlock/CanUseTopic(mob/user) if(!issilicon(user) && !isobserver(user)) @@ -785,13 +803,14 @@ About the new airlock wires panel: return 1 /obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) - if(!issilicon(user)) - if(isElectrified()) - if(shock(user, 75)) - return + if(shock_user(user, 75)) + return add_fingerprint(user) + if(headbutt_airlock(user))//See if the user headbutts the airlock + return + if(panel_open) switch(security_level) if(AIRLOCK_SECURITY_NONE) @@ -930,17 +949,13 @@ About the new airlock wires panel: update_icon() else if(iswirecutter(C)) if(note) - user.visible_message("[user] cuts down [note] from [src].", "You remove [note] from [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) - note.forceMove(get_turf(user)) - note = null - update_icon() + remove_airlock_note(user, TRUE) else - return attack_hand(user) + return interact_with_panel(user) else if(ismultitool(C)) - return attack_hand(user) + return interact_with_panel(user) else if(istype(C, /obj/item/assembly/signaler)) - return attack_hand(user) + return interact_with_panel(user) else if(istype(C, /obj/item/pai_cable)) // -- TLE var/obj/item/pai_cable/cable = C cable.plugin(src, user) @@ -1302,6 +1317,23 @@ About the new airlock wires panel: else if(istype(note, /obj/item/photo)) return "photo" +//Removes the current note on the door if any. Returns if a note is removed +/obj/machinery/door/airlock/proc/remove_airlock_note(mob/user, wirecutters_used=TRUE) + if(note) + if(!wirecutters_used) + if (ishuman(user) && user.a_intent == INTENT_GRAB)//grab that note + user.visible_message("[user] removes [note] from [src].", "You remove [note] from [src].") + playsound(src, 'sound/items/poster_ripped.ogg', 50, 1) + else return FALSE + else + user.visible_message("[user] cuts down [note] from [src].", "You remove [note] from [src].") + playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) + note.forceMove(get_turf(user)) + note = null + update_icon() + return TRUE + return FALSE + /obj/machinery/door/airlock/narsie_act() var/turf/T = get_turf(src) var/runed = prob(20)