Structures now take damage properly from projectile clouds

This commit is contained in:
mwerezak
2015-08-15 19:08:45 -04:00
parent a773715ff9
commit 77ddae4e26
25 changed files with 57 additions and 57 deletions
+5
View File
@@ -89,6 +89,11 @@
return 0
return 1
/obj/item/projectile/proc/get_structure_damage()
if(damage_type == BRUTE || damage_type == BURN)
return damage
return 0
//return 1 if the projectile should be allowed to pass through after all, 0 if not.
/obj/item/projectile/proc/check_penetrate(var/atom/A)
return 1
@@ -77,11 +77,14 @@
. = ..()
bumped = 0 //can hit all mobs in a tile. pellets is decremented inside attack_mob so this should be fine.
/obj/item/projectile/bullet/pellet/proc/get_pellets(var/distance)
var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance
return max(pellets - pellet_loss, 1)
/obj/item/projectile/bullet/pellet/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier)
if (pellets < 0) return 1
var/pellet_loss = round((distance - 1)/range_step) //pellets lost due to distance
var/total_pellets = max(pellets - pellet_loss, 1)
var/total_pellets = get_pellets(distance)
var/spread = max(base_spread - (spread_step*distance), 0)
//shrapnel explosions miss prone mobs with a chance that increases with distance
@@ -106,6 +109,10 @@
return 1
return 0
/obj/item/projectile/bullet/pellet/get_structure_damage()
var/distance = get_dist(loc, starting)
return ..() * get_pellets(distance)
/obj/item/projectile/bullet/pellet/Move()
. = ..()
+1 -1
View File
@@ -146,7 +146,7 @@
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
if(Proj.damage_type == BRUTE || Proj.damage_type == BURN)
if(Proj.get_structure_damage())
if(istype(Proj.firer))
message_admins("[key_name_admin(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[loc.x];Y=[loc.y];Z=[loc.z]'>JMP</a>).")
log_game("[key_name(Proj.firer)] shot fueltank at [loc.loc.name] ([loc.x],[loc.y],[loc.z]).")
@@ -9,7 +9,7 @@
reagents.add_reagent("coolant",1000)
/obj/structure/reagent_dispensers/coolanttank/bullet_act(var/obj/item/projectile/Proj)
if(Proj.damage_type == BRUTE || Proj.damage_type == BURN)
if(Proj.get_structure_damage())
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
explode()
+1 -1
View File
@@ -60,7 +60,7 @@
..()
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
health -= Proj.get_structure_damage()
..()
check_failure()
opacity = 1
+1 -1
View File
@@ -25,7 +25,7 @@
Stress(0.5 + severity)
/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj)
Stress(Proj.damage / 10)
Stress(Proj.get_structure_damage() / 10)
/obj/effect/energy_field/proc/Stress(var/severity)
strength -= severity
+2 -2
View File
@@ -214,7 +214,7 @@
..()
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
storedpower -= 400 * Proj.damage
storedpower -= 400 * Proj.get_structure_damage()
..()
return
@@ -285,7 +285,7 @@
G = gen_primary
else
G = gen_secondary
G.storedpower -= 400 * Proj.damage
G.storedpower -= 400 * Proj.get_structure_damage()
..()
return
+3 -2
View File
@@ -278,10 +278,11 @@
// Then bring it inside to explode instantly upon landing on a valid turf.
var/proj_damage = Proj.get_structure_damage()
if(istype(Proj, /obj/item/projectile/beam))
power += Proj.damage * config_bullet_energy * CHARGING_FACTOR / POWER_FACTOR
power += proj_damage * config_bullet_energy * CHARGING_FACTOR / POWER_FACTOR
else
damage += Proj.damage * config_bullet_energy
damage += proj_damage * config_bullet_energy
return 0
/obj/machinery/power/supermatter/attack_robot(mob/user as mob)
+1 -2
View File
@@ -112,8 +112,7 @@
..()
/obj/vehicle/bullet_act(var/obj/item/projectile/Proj)
if (Proj.damage_type == BRUTE || Proj.damage_type == BURN)
health -= Proj.damage
health -= Proj.get_structure_damage()
..()
healthcheck()