diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 8b85d8821d9..9b24b1efce6 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -4,24 +4,23 @@
desc = "A shooting target."
icon = 'icons/obj/objects.dmi'
icon_state = "target_h"
- density = 0
+ density = FALSE
var/hp = 1800
- var/icon/virtualIcon
- var/list/bulletholes = list()
/obj/item/target/Destroy()
+ cut_overlays()
// if a target is deleted and associated with a stake, force stake to forget
- for(var/obj/structure/target_stake/T in view(3,src))
+ for(var/obj/structure/target_stake/T in view(3, src))
if(T.pinned_target == src)
T.pinned_target = null
- T.density = 1
+ T.density = TRUE
break
return ..() // delete target
/obj/item/target/Move()
..()
// After target moves, check for nearby stakes. If associated, move to target
- for(var/obj/structure/target_stake/M in view(3,src))
+ for(var/obj/structure/target_stake/M in view(3, src))
if(M.density == 0 && M.pinned_target == src)
M.loc = loc
@@ -33,12 +32,12 @@
/obj/item/target/welder_act(mob/user, obj/item/I)
. = TRUE
- if(!use_tool(src, user, 0,, volume = I.tool_volume))
+ if(!use_tool(src, user, 0, volume = I.tool_volume))
return
overlays.Cut()
- to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
+ to_chat(user, "You slice off [src]'s uneven chunks of aluminium and scorch marks.")
-/obj/item/target/attack_hand(mob/user as mob)
+/obj/item/target/attack_hand(mob/user)
// taking pinned targets off!
var/obj/structure/target_stake/stake
for(var/obj/structure/target_stake/T in view(3,src))
@@ -48,8 +47,8 @@
if(stake)
if(stake.pinned_target)
- stake.density = 1
- density = 0
+ stake.density = TRUE
+ density = FALSE
layer = OBJ_LAYER
loc = user.loc
@@ -77,101 +76,37 @@
desc = "A shooting target that looks like a xenomorphic alien."
hp = 2350 // alium onest too kinda
-/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
- var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
- var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1)
- var/decaltype = 1 // 1 - scorch, 2 - bullet
+#define DECALTYPE_SCORCH 1
+#define DECALTYPE_BULLET 2
- if(istype(/obj/item/projectile/bullet, Proj))
- decaltype = 2
+/obj/item/target/bullet_act(obj/item/projectile/P)
+ var/p_x = P.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset P.p_x!"
+ var/p_y = P.p_y + pick(0,0,0,0,0,-1,1)
+ var/decaltype = DECALTYPE_SCORCH
+ if(istype(P, /obj/item/projectile/bullet))
+ decaltype = DECALTYPE_BULLET
-
- virtualIcon = new(icon, icon_state)
-
- if( virtualIcon.GetPixel(p_x, p_y) ) // if the located pixel isn't blank (null)
-
- hp -= Proj.damage
+ var/icon/C = icon(icon, icon_state)
+ if(LAZYLEN(overlays) <= 35 && C.GetPixel(p_x, p_y)) // if the located pixel isn't blank (null)
+ hp -= P.damage
if(hp <= 0)
- visible_message("[src] breaks into tiny pieces and collapses!")
+ visible_message("[src] breaks into tiny pieces and collapses!")
qdel(src)
-
- // Create a temporary object to represent the damage
- var/obj/bmark = new
- bmark.pixel_x = p_x
- bmark.pixel_y = p_y
- bmark.icon = 'icons/effects/effects.dmi'
- bmark.layer = 3.5
- bmark.icon_state = "scorch"
-
- if(decaltype == 1)
- // Energy weapons are hot. they scorch!
-
- // offset correction
- bmark.pixel_x--
- bmark.pixel_y--
-
- if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice))
- bmark.icon_state = "scorch"
- bmark.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design
-
-
+ return
+ var/image/bullet_hole = image('icons/effects/effects.dmi', "scorch", OBJ_LAYER + 0.5)
+ bullet_hole.pixel_x = p_x - 1 //offset correction
+ bullet_hole.pixel_y = p_y - 1
+ if(decaltype == DECALTYPE_SCORCH)
+ if(P.damage >= 20 || istype(P, /obj/item/projectile/beam/practice))
+ bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design. light_scorch does not have different directions
else
- bmark.icon_state = "light_scorch"
+ bullet_hole.icon_state = "light_scorch"
else
-
- // Bullets are hard. They make dents!
- bmark.icon_state = "dent"
-
- if(Proj.damage >= 10 && bulletholes.len <= 35) // maximum of 35 bullet holes
- if(decaltype == 2) // bullet
- if(prob(Proj.damage+30)) // bullets make holes more commonly!
- new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
- else // Lasers!
- if(prob(Proj.damage-10)) // lasers make holes less commonly
- new/datum/bullethole(src, bmark.pixel_x, bmark.pixel_y) // create new bullet hole
-
- // draw bullet holes
- for(var/datum/bullethole/B in bulletholes)
-
- virtualIcon.DrawBox(null, B.b1x1, B.b1y, B.b1x2, B.b1y) // horizontal line, left to right
- virtualIcon.DrawBox(null, B.b2x, B.b2y1, B.b2x, B.b2y2) // vertical line, top to bottom
-
- overlays += bmark // add the decal
-
- icon = virtualIcon // apply bulletholes over decals
-
+ bullet_hole.icon_state = "dent"
+ add_overlay(bullet_hole)
return
return -1 // the bullet/projectile goes through the target! Ie, you missed
-
-// Small memory holder entity for transparent bullet holes
-/datum/bullethole
- // First box
- var/b1x1 = 0
- var/b1x2 = 0
- var/b1y = 0
-
- // Second box
- var/b2x = 0
- var/b2y1 = 0
- var/b2y2 = 0
-
-/datum/bullethole/New(obj/item/target/Target, pixel_x = 0, pixel_y = 0)
- if(!Target) return
-
- // Randomize the first box
- b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
- b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
- b1y = pixel_y
- if(prob(35))
- b1y += rand(-4,4)
-
- // Randomize the second box
- b2x = pixel_x
- if(prob(35))
- b2x += rand(-4,4)
- b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
- b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
-
- Target.bulletholes.Add(src)
+#undef DECALTYPE_SCORCH
+#undef DECALTYPE_BULLET