mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-15 12:11:45 +00:00
* Make energy guns able to use burst fire. * Changed obj/item/weapon/gun/projectile to /gun/ballistic and the name of the folder from "projectile" to "ballistic" to avoid confusion between actually projectiles and guns. Syringe gun, energy guns and magic guns can now use burst fire. * fixing merge conflict shit * fixing map conflicts * more map conflict fix * two tiny fixes. * tiny tweak * fixing merge conflicts. Moving the practice mini egun to the gun module. Renamed nuclear.dm to energy_gun.dm * map conflict fixes
63 lines
2.1 KiB
Plaintext
63 lines
2.1 KiB
Plaintext
/obj/item/ammo_casing/proc/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread)
|
|
distro += variance
|
|
for (var/i = max(1, pellets), i > 0, i--)
|
|
var/targloc = get_turf(target)
|
|
ready_proj(target, user, quiet, zone_override)
|
|
if(distro) //We have to spread a pixel-precision bullet. throw_proj was called before so angles should exist by now...
|
|
if(randomspread)
|
|
spread = round((rand() - 0.5) * distro)
|
|
else //Smart spread
|
|
spread = round((i / pellets - 0.5) * distro)
|
|
if(!throw_proj(target, targloc, user, params, spread))
|
|
return 0
|
|
if(i > 1)
|
|
newshot()
|
|
if(click_cooldown_override)
|
|
user.changeNext_move(click_cooldown_override)
|
|
else
|
|
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, mob/living/user, quiet, zone_override)
|
|
if (!BB)
|
|
return
|
|
BB.original = target
|
|
BB.firer = user
|
|
if (zone_override)
|
|
BB.def_zone = zone_override
|
|
else
|
|
BB.def_zone = user.zone_selected
|
|
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(atom/target, turf/targloc, mob/living/user, params, spread)
|
|
var/turf/curloc = get_turf(user)
|
|
if (!istype(targloc) || !istype(curloc) || !BB)
|
|
return 0
|
|
|
|
var/firing_dir
|
|
if(BB.firer)
|
|
firing_dir = BB.firer.dir
|
|
if(!BB.suppressed && firing_effect_type)
|
|
PoolOrNew(firing_effect_type, list(get_turf(src), firing_dir))
|
|
|
|
var/direct_target
|
|
if(targloc == curloc)
|
|
if(target) //if the target is right on our location we'll skip the travelling code in the proj's fire()
|
|
direct_target = target
|
|
if(!direct_target)
|
|
BB.preparePixelProjectile(target, targloc, user, params, spread)
|
|
BB.fire(null, direct_target)
|
|
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)
|