mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-21 21:23:58 +01:00
Structures now take damage properly from projectile clouds
This commit is contained in:
@@ -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()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user