mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-20 22:16:51 +00:00
Fixes issue #1291 Cleaned up some files of projectiles/firing.dm Instead of calling process(), when firing a projectile it will use fire() Projectiles will now use qdel(), due to this, the emitters beams won't be in the object pool.
62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
/obj/item/ammo_casing/proc/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, var/distro, var/quiet)
|
|
distro += variance
|
|
for (var/i = max(1, pellets), i > 0, i--)
|
|
var/curloc = user.loc
|
|
var/targloc = get_turf(target)
|
|
ready_proj(target, user, quiet)
|
|
if(distro)
|
|
targloc = spread(targloc, curloc, distro)
|
|
if(!throw_proj(targloc, user, params))
|
|
return 0
|
|
if(i > 1)
|
|
newshot()
|
|
user.changeNext_move(CLICK_CD_RANGE)
|
|
user.newtonian_move(get_dir(target, user))
|
|
update_icon()
|
|
return 1
|
|
|
|
/obj/item/ammo_casing/proc/ready_proj(atom/target as mob|obj|turf, mob/living/user, var/quiet)
|
|
if (!BB)
|
|
return
|
|
BB.original = target
|
|
BB.firer = user
|
|
BB.def_zone = user.zone_sel.selecting
|
|
BB.suppressed = quiet
|
|
|
|
if(reagents && BB.reagents)
|
|
reagents.trans_to(BB, reagents.total_volume) //For chemical darts/bullets
|
|
reagents.delete()
|
|
return
|
|
|
|
/obj/item/ammo_casing/proc/throw_proj(var/turf/targloc, mob/living/user as mob|obj, params)
|
|
var/turf/curloc = user.loc
|
|
if (!istype(targloc) || !istype(curloc) || !BB)
|
|
return 0
|
|
if(targloc == curloc) //Fire the projectile
|
|
user.bullet_act(BB)
|
|
qdel(BB)
|
|
return 1
|
|
BB.loc = get_turf(user)
|
|
BB.starting = get_turf(user)
|
|
BB.current = curloc
|
|
BB.yo = targloc.y - curloc.y
|
|
BB.xo = targloc.x - curloc.x
|
|
|
|
if(params)
|
|
var/list/mouse_control = params2list(params)
|
|
if(mouse_control["icon-x"])
|
|
BB.p_x = text2num(mouse_control["icon-x"])
|
|
if(mouse_control["icon-y"])
|
|
BB.p_y = text2num(mouse_control["icon-y"])
|
|
|
|
if(BB)
|
|
BB.fire()
|
|
BB = null
|
|
return 1
|
|
|
|
/obj/item/ammo_casing/proc/spread(var/turf/target, var/turf/current, var/distro)
|
|
var/dx = abs(target.x - current.x)
|
|
var/dy = abs(target.y - current.y)
|
|
return locate(target.x + round(gaussian(0, distro) * (dy+2)/8, 1), target.y + round(gaussian(0, distro) * (dx+2)/8, 1), target.z)
|
|
|
|
// gaussian(0, distro) |