Files
Aurora.3/code/modules/projectiles/projectile/beams.dm
Lohikar 2b9aa21421 Spark Fixes (#1764)
changes:

Removed shim for old spark system.
Converted all calls to old spark system with calls to new one.
Processor-based effects are no longer pooled, as it had minimal performance impact and was breaking things.
Tweaked some visible_messages for rogue drones.
PB effects' handling of location is now done at the /datum/effect_system level.
2017-02-14 14:37:16 +02:00

262 lines
7.5 KiB
Plaintext

/obj/item/projectile/beam/pistol
damage = 25
/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 30
damage_type = BURN
check_armour = "laser"
eyeblur = 4
var/frequency = 1
hitscan = 1
invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine
muzzle_type = /obj/effect/projectile/laser/muzzle
tracer_type = /obj/effect/projectile/laser/tracer
impact_type = /obj/effect/projectile/laser/impact
/obj/item/projectile/beam/practice
name = "laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
damage_type = BURN
no_attack_log = 1
check_armour = "laser"
eyeblur = 2
/obj/item/projectile/beam/midlaser
damage = 30
armor_penetration = 10
/obj/item/projectile/beam/heavylaser
name = "heavy laser"
icon_state = "heavylaser"
damage = 60
muzzle_type = /obj/effect/projectile/laser_heavy/muzzle
tracer_type = /obj/effect/projectile/laser_heavy/tracer
impact_type = /obj/effect/projectile/laser_heavy/impact
/obj/item/projectile/beam/xray
name = "xray beam"
icon_state = "xray"
damage = 25
armor_penetration = 30
muzzle_type = /obj/effect/projectile/xray/muzzle
tracer_type = /obj/effect/projectile/xray/tracer
impact_type = /obj/effect/projectile/xray/impact
/obj/item/projectile/beam/pulse
name = "pulse"
icon_state = "u_laser"
damage = 50
muzzle_type = /obj/effect/projectile/laser_pulse/muzzle
tracer_type = /obj/effect/projectile/laser_pulse/tracer
impact_type = /obj/effect/projectile/laser_pulse/impact
/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0)
if(isturf(target))
target.ex_act(2)
..()
/obj/item/projectile/beam/emitter
name = "emitter beam"
icon_state = "emitter"
damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm
muzzle_type = /obj/effect/projectile/emitter/muzzle
tracer_type = /obj/effect/projectile/emitter/tracer
impact_type = /obj/effect/projectile/emitter/impact
/obj/item/projectile/beam/lastertag/blue
name = "lasertag beam"
icon_state = "bluelaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
no_attack_log = 1
damage_type = BURN
check_armour = "laser"
muzzle_type = /obj/effect/projectile/laser_blue/muzzle
tracer_type = /obj/effect/projectile/laser_blue/tracer
impact_type = /obj/effect/projectile/laser_blue/impact
/obj/item/projectile/beam/lastertag/blue/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
M.Weaken(5)
return 1
/obj/item/projectile/beam/lastertag/red
name = "lasertag beam"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
no_attack_log = 1
damage_type = BURN
check_armour = "laser"
/obj/item/projectile/beam/lastertag/red/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
M.Weaken(5)
return 1
/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE
name = "lasertag beam"
icon_state = "omnilaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
damage_type = BURN
check_armour = "laser"
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
tracer_type = /obj/effect/projectile/laser_omni/tracer
impact_type = /obj/effect/projectile/laser_omni/impact
/obj/item/projectile/beam/lastertag/omni/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag)))
M.Weaken(5)
return 1
/obj/item/projectile/beam/sniper
name = "sniper beam"
icon_state = "xray"
damage = 50
armor_penetration = 10
stun = 3
weaken = 3
stutter = 3
muzzle_type = /obj/effect/projectile/xray/muzzle
tracer_type = /obj/effect/projectile/xray/tracer
impact_type = /obj/effect/projectile/xray/impact
/obj/item/projectile/beam/stun
name = "stun beam"
icon_state = "stun"
nodamage = 1
taser_effect = 1
agony = 40
damage_type = HALLOSS
muzzle_type = /obj/effect/projectile/stun/muzzle
tracer_type = /obj/effect/projectile/stun/tracer
impact_type = /obj/effect/projectile/stun/impact
/obj/item/projectile/beam/gatlinglaser
name = "heavy laser"
icon_state = "heavylaser"
damage = 10
no_attack_log = 1
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
tracer_type = /obj/effect/projectile/laser_omni/tracer
impact_type = /obj/effect/projectile/laser_omni/impact
/obj/item/projectile/beam/mousegun
name = "diffuse electrical arc"
icon_state = "stun"
nodamage = 1
damage_type = HALLOSS
muzzle_type = /obj/effect/projectile/stun/muzzle
tracer_type = /obj/effect/projectile/stun/tracer
impact_type = /obj/effect/projectile/stun/impact
/obj/item/projectile/beam/mousegun/on_impact(var/atom/A)
mousepulse(A, 1)
..()
/obj/item/projectile/beam/mousegun/proc/mousepulse(turf/epicenter, range, log=0)
if (!epicenter)
return
if (!istype(epicenter, /turf))
epicenter = get_turf(epicenter.loc)
for (var/mob/living/M in range(range, epicenter))
var/distance = get_dist(epicenter, M)
if (distance < 0)
distance = 0
if (distance <= range)
if (M.mob_size <= 2 && (M.find_type() & TYPE_ORGANIC))
M.visible_message("<span class='danger'>[M] bursts like a balloon!</span>")
M.gib()
spark(M, 3, alldirs)
else if (iscarbon(M) && M.contents.len)
for (var/obj/item/weapon/holder/H in M.contents)
if (!H.contained)
continue
var/mob/living/A = H.contained
if (!istype(A))
continue
if (A.mob_size <= 2 && (A.find_type() & TYPE_ORGANIC))
H.release_mob()
A.visible_message("<span class='danger'>[A] bursts like a balloon!</span>")
A.gib()
M << 'sound/effects/basscannon.ogg'
return 1
/obj/item/projectile/beam/shotgun
name = "diffuse laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 15
eyeblur = 4
muzzle_type = /obj/effect/projectile/laser/muzzle
tracer_type = /obj/effect/projectile/laser/tracer
impact_type = /obj/effect/projectile/laser/impact
/obj/item/projectile/beam/megaglaive
name = "thermal lance"
icon_state = "megaglaive"
damage = 6
incinerate = 5
armor_penetration = 10
no_attack_log = 1
muzzle_type = /obj/effect/projectile/solar/muzzle
tracer_type = /obj/effect/projectile/solar/tracer
impact_type = /obj/effect/projectile/solar/impact
/obj/item/projectile/beam/megaglaive/New()
effect_transform = new()
effect_transform.Scale(2)
src.transform = effect_transform
..()
/obj/item/projectile/beam/thermaldrill
name = "thermal lance"
icon_state = "megaglaive"
damage = 3
no_attack_log = 1
muzzle_type = /obj/effect/projectile/solar/muzzle
tracer_type = /obj/effect/projectile/solar/tracer
impact_type = /obj/effect/projectile/solar/impact
/obj/item/projectile/beam/thermaldrill/on_impact(var/atom/A)
if(isturf(A))
if(istype(A, /turf/simulated/mineral))
if(prob(75)) //likely because its a mining tool
var/turf/simulated/mineral/M = A
M.GetDrilled()
if(ismob(A))
var/mob/living/M = A
M.apply_effect(1, INCINERATE, 0)
..()