diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index de6615a761d..9872dcda513 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -158,15 +158,27 @@ /obj/machinery/door/window/attack_ai(mob/user as mob) return src.attack_hand(user) - /obj/machinery/door/window/attack_paw(mob/user as mob) - return src.attack_hand(user) + if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/metroid/adult)) + if(src.operating) + return + src.health = max(0, src.health - 25) + playsound(src.loc, 'Glasshit.ogg', 75, 1) + for(var/mob/O in viewers(src, null)) + O.show_message("\red [user] smashes against the [src.name].", 1) + if (src.health <= 0) + new /obj/item/weapon/shard(src.loc) + var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src.loc) + CC.amount = 2 + src.density = 0 + del(src) + else + return src.attack_hand(user) /obj/machinery/door/window/attack_hand(mob/user as mob) return src.attackby(user, user) - /obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob) //If it's in the process of opening/closing, ignore the click diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 479e7c12150..10ebd1e2a8b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -133,7 +133,7 @@ I kind of like the right click only--the window version can get a little confusi var/atom/a = get_turf_loc(vent) choices.Add(a.loc) var/turf/startloc = loc - var/obj/selection = input("Select a destination.", "Duct System") in choices + var/obj/selection = input("Select a destination.", "Duct System") in sortAtom(choices) var/selection_position = choices.Find(selection) if(loc==startloc) diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 0f632a380be..97a44f39787 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -26,7 +26,7 @@ var/atom/a = get_turf_loc(vent) choices.Add(a.loc) var/turf/startloc = loc - var/obj/selection = input("Select a destination.", "Duct System") in choices + var/obj/selection = input("Select a destination.", "Duct System") in sortAtom(choices) var/selection_position = choices.Find(selection) if(loc==startloc) var/obj/target_vent = vents[selection_position] diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index d42a6f3cd09..e7011c0f8a6 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -263,7 +263,7 @@ var/atom/a = get_turf_loc(vent) choices.Add(a.loc) var/turf/startloc = loc - var/obj/selection = input("Select a destination.", "Duct System") in choices + var/obj/selection = input("Select a destination.", "Duct System") in sortAtom(choices) var/selection_position = choices.Find(selection) if(loc==startloc) var/obj/target_vent = vents[selection_position] diff --git a/code/modules/mob/living/carbon/monkey/powers.dm b/code/modules/mob/living/carbon/monkey/powers.dm index 9a8f95283e8..873c35dcc38 100644 --- a/code/modules/mob/living/carbon/monkey/powers.dm +++ b/code/modules/mob/living/carbon/monkey/powers.dm @@ -25,7 +25,7 @@ var/atom/a = get_turf_loc(vent) choices.Add(a.loc) var/turf/startloc = loc - var/obj/selection = input("Select a destination.", "Duct System") in choices + var/obj/selection = input("Select a destination.", "Duct System") in sortAtom(choices) var/selection_position = choices.Find(selection) if(loc==startloc) if(contents.len) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 877d58b0eaf..9baaf5900b3 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -55,7 +55,14 @@ // luminosity = 1 var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver var/overload = 1 //used for the Blackout malf module + var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment var/mob/living/silicon/ai/occupant = null + var/list/apcwirelist = list( + "Orange" = 1, + "Dark red" = 2, + "White" = 3, + "Yellow" = 4, + ) /proc/RandomAPCWires() //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else). @@ -463,6 +470,32 @@ user.machine = src src.interact(user) +/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) + if(!user) + return + user.visible_message("\red [user.name] slashes at the [src.name]!", "\blue You slash at the [src.name]!") + playsound(src.loc, 'slash.ogg', 100, 1) + var/allcut = 1 + for(var/wire in apcwirelist) + if(!isWireCut(apcwirelist[wire])) + allcut = 0 + break + if(beenhit >= pick(3, 4) && wiresexposed != 1) + wiresexposed = 1 + src.updateicon() + src.visible_message("\red The [src.name]'s cover flies open, exposing the wires!") + + else if(wiresexposed == 1 && allcut == 0) + for(var/wire in apcwirelist) + cut(apcwirelist[wire]) + src.updateicon() + src.visible_message("\red The [src.name]'s wires are shredded!") + else + beenhit += 1 + return + + + /obj/machinery/power/apc/proc/interact(mob/user) if(!user) return @@ -483,20 +516,15 @@ return if(wiresexposed && (!istype(user, /mob/living/silicon))) var/t1 = text("