mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-12 01:43:40 +00:00
Changed the fix to delete bullets the user is on the target loc while he fires so we don't get floating bullets.
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, distro, 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, 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
|
|
qdel(reagents)
|
|
|
|
/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)
|
|
if(BB.original == user) //if we target ourselves we go straight to bullet_act()
|
|
user.bullet_act(BB)
|
|
del(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(turf/target, turf/current, 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) |