[DNM][DNM][WIP] Projectile backend code port and update

Ports#54924,  #65061, #59804 from /tg.
adds auxiliary code from /tg to make code work.
This commit is contained in:
Solaris-Shade
2022-03-06 15:20:23 -05:00
parent 8b77ee159f
commit 2fdb70b2b9
84 changed files with 597 additions and 503 deletions
@@ -427,11 +427,9 @@
var/aoe_mob_damage = 30
var/impact_structure_damage = 0
var/impact_direct_damage = 0
var/turf/cached
var/list/pierced = list()
/obj/item/projectile/beam/beam_rifle/proc/AOE(turf/epicenter)
set waitfor = FALSE
if(!epicenter)
return
new /obj/effect/temp_visual/explosion/fast(epicenter)
@@ -447,31 +445,22 @@
continue
O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE)
/obj/item/projectile/beam/beam_rifle/proc/check_pierce(atom/target)
if(!do_pierce)
return FALSE
if(pierced[target]) //we already pierced them go away
return TRUE
if(isclosedturf(target))
if(wall_pierce++ < wall_pierce_amount)
if(prob(wall_devastate))
if(iswallturf(target))
var/turf/closed/wall/W = target
W.dismantle_wall(TRUE, TRUE)
else
target.ex_act(EXPLODE_HEAVY)
return TRUE
if(ismovable(target))
var/atom/movable/AM = target
if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM))
if(structure_pierce < structure_pierce_amount)
if(isobj(AM))
var/obj/O = AM
O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(AM), BURN, "energy", FALSE)
pierced[AM] = TRUE
structure_pierce++
return TRUE
return FALSE
/obj/item/projectile/beam/beam_rifle/proc/check_pierce(atom/A)
if(isclosedturf(A) && (wall_pierce < wall_pierce_amount))
if(prob(wall_devastate))
if(iswallturf(A))
var/turf/closed/wall/W = A
W.dismantle_wall(TRUE, TRUE)
else
target.ex_act(EXPLODE_HEAVY)
++wall_pierce
return PROJECTILE_PIERCE_PHASE // yeah this gun is a snowflakey piece of garbage - Silly-Cons
if(isobj(A) && (structure_pierce < structure_pierce_amount))
++structure_pierce
var/obj/O = A
O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(A), BURN, ENERGY, FALSE)
return PROJECTILE_PIERCE_PHASE // ditto and this could be refactored to on_hit honestly - Silly-Cons
return ..()
/obj/item/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target)
if(istype(target, /obj/machinery/door))
@@ -491,32 +480,18 @@
L.adjustFireLoss(impact_direct_damage)
L.emote("scream")
/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target)
/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target, piercing_hit = FALSE)
set waitfor = FALSE
if(!cached && !QDELETED(target))
cached = get_turf(target)
if(nodamage)
return FALSE
playsound(cached, 'sound/effects/explosion3.ogg', 100, 1)
AOE(cached)
playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE)
if(!piercing_hit)
AOE(get_turf(target) || get_turf(src))
if(!QDELETED(target))
handle_impact(target)
/obj/item/projectile/beam/beam_rifle/Bump(atom/target)
if(check_pierce(target))
permutated += target
trajectory_ignore_forcemove = TRUE
forceMove(target.loc)
trajectory_ignore_forcemove = FALSE
return FALSE
if(!QDELETED(target))
cached = get_turf(target)
. = ..()
/obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE)
if(!QDELETED(target))
cached = get_turf(target)
handle_hit(target)
/obj/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE, piercing_hit = FALSE)
handle_hit(target, piercing_hit)
. = ..()
/obj/item/projectile/beam/beam_rifle/hitscan
@@ -547,6 +522,9 @@
hitscan_light_intensity = 0
hitscan_light_color_override = "#99ff99"
/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target)
/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit_pierce(atom/target)
return PROJECTILE_DELETE_WITHOUT_HITTING
/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit()
qdel(src)
return FALSE
return BULLET_ACT_BLOCK
@@ -114,7 +114,8 @@
icon_state = "blastwave"
damage = 0
nodamage = FALSE
movement_type = FLYING | UNSTOPPABLE
movement_type = FLYING
projectile_phasing = ALL // just blows up the turfs lmao - Silly-Cons
var/heavyr = 0
var/mediumr = 0
var/lightr = 0