From dd8d1f6ac292d1bb0de9b68f3df7277381083174 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Wed, 24 Oct 2012 21:56:00 +0000 Subject: [PATCH] -You can now target non-dense objects with a projectile. -Added bullet_acts for computers, canisters and windoors. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4953 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/machinery/atmoalter/canister.dm | 6 ++++++ code/game/machinery/computer/computer.dm | 5 +++++ code/game/machinery/doors/windowdoor.dm | 24 +++++++++++++++-------- code/modules/projectiles/gun.dm | 4 ++-- code/modules/projectiles/projectile.dm | 13 ++++++------ html/changelog.html | 2 ++ 6 files changed, 37 insertions(+), 17 deletions(-) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index da6449bcfac..8cc575628d7 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -159,6 +159,12 @@ healthcheck() return +/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj) + if(Proj.damage) + src.health -= round(Proj.damage / 2) + healthcheck() + ..() + /obj/machinery/portable_atmospherics/canister/meteorhit(var/obj/O as obj) src.health = 0 healthcheck() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 1986368ab22..eab0f5ddf93 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -48,6 +48,11 @@ else return + bullet_act(var/obj/item/projectile/Proj) + if(prob(Proj.damage)) + set_broken() + ..() + blob_act() if (prob(75)) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 7ee56066db5..7a9cca90244 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -134,6 +134,21 @@ src.operating = 0 return 1 +/obj/machinery/door/window/proc/take_damage(var/damage) + src.health = max(0, src.health - damage) + 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) + return + +/obj/machinery/door/window/bullet_act(var/obj/item/projectile/Proj) + if(Proj.damage) + take_damage(round(Proj.damage / 2)) + ..() + //When an object is thrown at the window /obj/machinery/door/window/hitby(AM as mob|obj) @@ -145,14 +160,7 @@ else tforce = AM:throwforce playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) - src.health = max(0, src.health - tforce) - 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) - return + take_damage(tforce) //..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b95a3a52629..ad3eeb90926 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -44,7 +44,7 @@ O.emp_act(severity) - afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)//TODO: go over this + afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this if(flag) return //we're placing gun on a table or in backpack if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy)) return//Shouldnt flag take care of this? @@ -104,7 +104,7 @@ playsound(user, fire_sound, 50, 1) user.visible_message("\red [user.name] fires the [src.name]!", "\red You fire the [src.name]!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") - in_chamber.original = targloc + in_chamber.original = target in_chamber.loc = get_turf(user) in_chamber.starting = get_turf(user) user.next_move = world.time + 4 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index b10a5183a3a..23a0c96403f 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -26,7 +26,7 @@ var/yo = null var/xo = null var/current = null - var/turf/original = null // the original turf clicked + var/atom/original = null // the original target clicked var/turf/starting = null // the projectile's starting turf var/list/permutated = list() // we've passed through these atoms, don't try to hit them again @@ -139,10 +139,9 @@ return step_towards(src, current) sleep(1) - if(!bumped) - if(loc == original) - for(var/mob/living/M in original) - if(!(M in permutated)) - Bump(M) - sleep(1) + if(!bumped && !isturf(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original) + sleep(1) return diff --git a/html/changelog.html b/html/changelog.html index 6782953ba5c..1ad18968887 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,8 @@ should be listed in the changelog upon commit tho. Thanks. -->
  • Making eggs is a little more expensive but secreting resin is cheaper. (Both cost 75 now)
  • Aliens no longer have a random duration of stunning humans, it's a constant value now of the lower based value.
  • Acid is less random and will be more reliable. Don't bother aciding stuff more than once, as it will waste plasma.
  • +
  • You can now target non-dense items (such as facehuggers) with a gun.
  • +
  • You can now shoot canisters, computers and windoors to break them.