/obj/item/projectile/beam name = "laser" icon_state = "laser" ping_effect = "ping_s" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSRAILING damage = 30 damage_type = DAMAGE_BURN impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_LASER_MEAT, BULLET_IMPACT_METAL = SOUNDS_LASER_METAL) check_armor = "laser" eyeblur = 4 damage_flags = DAMAGE_FLAG_LASER var/frequency = 1 hitscan = 1 invisibility = 101 //beam projectiles are invisible as they are rendered by the effect engine muzzle_type = /obj/effect/projectile/muzzle/laser tracer_type = /obj/effect/projectile/tracer/laser impact_type = /obj/effect/projectile/impact/laser /obj/item/projectile/beam/practice name = "laser" damage = 5 damage_type = DAMAGE_PAIN eyeblur = 0 /obj/item/projectile/beam/pistol damage = 25 armor_penetration = 5 /obj/item/projectile/beam/pistol/scc armor_penetration = 15 muzzle_type = /obj/effect/projectile/muzzle/laser/scc tracer_type = /obj/effect/projectile/tracer/laser/scc impact_type = /obj/effect/projectile/impact/laser/scc /obj/item/projectile/beam/pistol/hegemony icon = 'icons/obj/guns/hegemony_pistol.dmi' icon_state = "hegemony_pistol" damage = 30 muzzle_type = /obj/effect/projectile/muzzle/hegemony tracer_type = /obj/effect/projectile/tracer/hegemony impact_type = /obj/effect/projectile/impact/hegemony /obj/item/projectile/beam/midlaser damage = 30 armor_penetration = 20 /obj/item/projectile/beam/midlaser/skrell armor_penetration = 0 /obj/item/projectile/beam/midlaser/skrell/heavy damage = 40 armor_penetration = 20 /obj/item/projectile/beam/midlaser/hegemony armor_penetration = 30 muzzle_type = /obj/effect/projectile/muzzle/hegemony tracer_type = /obj/effect/projectile/tracer/hegemony impact_type = /obj/effect/projectile/impact/hegemony /obj/item/projectile/beam/noctiluca damage = 20 armor_penetration = 40 /obj/item/projectile/beam/noctiluca/armor_piercing name = "concentrated laser" damage = 20 armor_penetration = 50 muzzle_type = /obj/effect/projectile/muzzle/laser/scc tracer_type = /obj/effect/projectile/tracer/laser/scc impact_type = /obj/effect/projectile/impact/laser/scc /obj/item/projectile/beam/midlaser/ice damage = 25 armor_penetration = 10 /obj/item/projectile/beam/heavylaser name = "heavy laser" icon_state = "heavylaser" damage = 45 armor_penetration = 25 muzzle_type = /obj/effect/projectile/muzzle/heavy_laser tracer_type = /obj/effect/projectile/tracer/heavy_laser impact_type = /obj/effect/projectile/impact/heavy_laser /obj/item/projectile/beam/heavylaser/mech damage = 35 armor_penetration = 35 /obj/item/projectile/beam/xray name = "xray beam" icon_state = "xray" damage = 15 armor_penetration = 50 muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray impact_type = /obj/effect/projectile/impact/xray /obj/item/projectile/beam/xray/mech damage = 40 armor_penetration = 75 /obj/item/projectile/beam/pulse name = "pulse" icon_state = "u_laser" damage = 50 armor_penetration = 50 muzzle_type = /obj/effect/projectile/muzzle/pulse tracer_type = /obj/effect/projectile/tracer/pulse impact_type = /obj/effect/projectile/impact/pulse /obj/item/projectile/beam/pulse/mech damage = 45 armor_penetration = 40 /obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0) if(isturf(target)) target.ex_act(2) ..() /obj/item/projectile/beam/pulse/heavy name = "heavy pulse laser" icon_state = "pulse1_bl" var/life = 20 /obj/item/projectile/beam/pulse/heavy/Collide(atom/A) A.bullet_act(src, def_zone) src.life -= 10 if(life <= 0) qdel(src) /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/muzzle/emitter tracer_type = /obj/effect/projectile/tracer/emitter impact_type = /obj/effect/projectile/impact/emitter /obj/item/projectile/beam/laser_tag name = "lasertag beam" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSRAILING damage = 0 no_attack_log = 1 damage_type = DAMAGE_BURN check_armor = "laser" var/laser_tag_color = "red" muzzle_type = /obj/effect/projectile/muzzle/laser tracer_type = /obj/effect/projectile/tracer/laser impact_type = /obj/effect/projectile/impact/laser /obj/item/projectile/beam/laser_tag/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/clothing/suit/armor/riot/laser_tag/LT = H.wear_suit if(istype(LT) && laser_tag_color != LT.laser_tag_color) LT.laser_hit() return TRUE /obj/item/projectile/beam/laser_tag/blue name = "lasertag beam" icon_state = "bluelaser" laser_tag_color = "blue" muzzle_type = /obj/effect/projectile/muzzle/laser/blue tracer_type = /obj/effect/projectile/tracer/laser/blue impact_type = /obj/effect/projectile/impact/laser/blue /obj/item/projectile/beam/laser_tag/omni//A laser tag bolt that stuns EVERYONE name = "lasertag beam" icon_state = "omnilaser" laser_tag_color = "omni" muzzle_type = /obj/effect/projectile/muzzle/disabler tracer_type = /obj/effect/projectile/tracer/disabler impact_type = /obj/effect/projectile/impact/disabler /obj/item/projectile/beam/sniper name = "sniper beam" icon_state = "xray" damage = 50 armor_penetration = 20 stun = 3 weaken = 3 stutter = 3 muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray impact_type = /obj/effect/projectile/impact/xray /obj/item/projectile/beam/stun name = "stun beam" icon_state = "stun" damage = 1 sharp = FALSE eyeblur = 1 agony = 45 damage_type = DAMAGE_BURN muzzle_type = /obj/effect/projectile/muzzle/stun tracer_type = /obj/effect/projectile/tracer/stun impact_type = /obj/effect/projectile/impact/stun /obj/item/projectile/beam/gatlinglaser name = "diffused laser" icon_state = "heavylaser" damage = 20 armor_penetration = 35 no_attack_log = 1 muzzle_type = /obj/effect/projectile/muzzle/disabler tracer_type = /obj/effect/projectile/tracer/disabler impact_type = /obj/effect/projectile/impact/disabler /obj/item/projectile/beam/mousegun name = "electrical arc" icon_state = "stun" damage = 1 damage_type = DAMAGE_BURN muzzle_type = /obj/effect/projectile/muzzle/stun tracer_type = /obj/effect/projectile/tracer/stun impact_type = /obj/effect/projectile/impact/stun /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 <= 3 && (M.find_type() & TYPE_ORGANIC)) M.visible_message("\The [M] gets fried!") M.color = "#4d4d4d" //get fried M.death() spark(M, 3, alldirs) else if(iscarbon(M) && M.contents.len) for(var/obj/item/holder/H in M.contents) if(!H.contained) continue var/mob/living/A = H.contained if(!istype(A)) continue if(A.mob_size <= 3 && (A.find_type() & TYPE_ORGANIC)) H.release_mob() A.visible_message("\The [A] gets fried!") A.color = "#4d4d4d" //get fried A.death() to_chat(M, 'sound/effects/basscannon.ogg') return TRUE /obj/item/projectile/beam/mousegun/emag name = "diffuse electrical arc" nodamage = FALSE damage_type = DAMAGE_BURN damage = 15 agony = 30 /obj/item/projectile/beam/mousegun/emag/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 <= 4 && (M.find_type() & TYPE_ORGANIC)) M.visible_message("[M] bursts like a balloon!") M.gib() spark(M, 3, alldirs) else if(iscarbon(M) && M.contents.len) for(var/obj/item/holder/H in M.contents) if(!H.contained) continue var/mob/living/A = H.contained if(!istype(A)) continue if(A.mob_size <= 4 && (A.find_type() & TYPE_ORGANIC)) H.release_mob() A.visible_message("[A] bursts like a balloon!") A.gib() to_chat(M, 'sound/effects/basscannon.ogg') return TRUE /obj/item/projectile/beam/mousegun/xenofauna nodamage = FALSE damage = 10 /obj/item/projectile/beam/mousegun/xenofauna/mousepulse(atom/target, range, log) if(is_type_in_list(target, list(/mob/living/simple_animal/hostile/retaliate/cavern_dweller, /mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/carp, /mob/living/simple_animal/hostile/giant_spider))) var/mob/living/simple_animal/SA = target SA.take_organ_damage(0, 20) return TRUE /obj/item/projectile/beam/shotgun name = "diffuse laser" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSRAILING damage = 20 eyeblur = 4 /obj/item/projectile/beam/megaglaive name = "thermal lance" icon_state = "gauss" damage = 10 incinerate = 5 armor_penetration = 10 no_attack_log = 1 muzzle_type = /obj/effect/projectile/muzzle/solar tracer_type = /obj/effect/projectile/tracer/solar impact_type = /obj/effect/projectile/impact/solar /obj/item/projectile/beam/megaglaive/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 if(prob(10)) M.GetDrilled(1) else if(!M.emitter_blasts_taken) M.emitter_blasts_taken += 1 else if(prob(33)) M.emitter_blasts_taken += 1 if(ismob(A)) var/mob/living/M = A M.apply_effect(1, INCINERATE, 0) explosion(A, -1, 0, 2) ..() /obj/item/projectile/beam/thermaldrill name = "thermal drill" icon_state = "gauss" damage = 2 no_attack_log = TRUE muzzle_type = /obj/effect/projectile/muzzle/solar tracer_type = /obj/effect/projectile/tracer/solar impact_type = /obj/effect/projectile/impact/solar /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 if(prob(33)) M.GetDrilled(1) else if(!M.emitter_blasts_taken) M.emitter_blasts_taken += 2 else if(prob(66)) M.emitter_blasts_taken += 2 ..() //Beams of magical veil energy fired by empowered pylons. Some inbuilt armor penetration cuz magic. //Ablative armor is still overwhelmingly useful //These beams are very weak but rapid firing, ~twice per second. /obj/item/projectile/beam/cult name = "energy bolt" //For projectiles name is only shown in onhit messages, so its more of a layman's description //of what the projectile looks like damage = 3.5 //Very weak accuracy = 4 //Guided by magic, unlikely to miss eyeblur = 0 //Not bright or blinding var/mob/living/ignore muzzle_type = /obj/effect/projectile/muzzle/cult tracer_type = /obj/effect/projectile/tracer/cult impact_type = /obj/effect/projectile/impact/cult /obj/item/projectile/beam/cult/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0) //Harmlessly passes through cultists and constructs if (target_mob == ignore) return 0 if (iscult(target_mob)) return 0 return ..() /obj/item/projectile/beam/cult/heavy name = "glowing energy bolt" damage = 10 //Stronger and better armor penetration, though still much weaker than a typical laser armor_penetration = 10 muzzle_type = /obj/effect/projectile/muzzle/cult/heavy tracer_type = /obj/effect/projectile/tracer/cult/heavy impact_type = /obj/effect/projectile/impact/cult/heavy /obj/item/projectile/beam/energy_net name = "energy net projection" icon_state = "xray" nodamage = 1 damage_type = DAMAGE_PAIN muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray impact_type = /obj/effect/projectile/impact/xray /obj/item/projectile/beam/energy_net/on_hit(var/atom/netted) do_net(netted) ..() /obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M) var/obj/item/energy_net/net = new (get_turf(M)) net.throw_impact(M) /obj/item/projectile/beam/tachyon name = "particle beam" icon_state = "xray" damage = 25 armor_penetration = 65 penetrating = 1 maiming = 1 maim_rate = 5 clean_cut = 1 maim_type = DROPLIMB_BURN muzzle_type = /obj/effect/projectile/muzzle/tachyon tracer_type = /obj/effect/projectile/tracer/tachyon impact_type = /obj/effect/projectile/impact/tachyon /obj/item/projectile/beam/tesla name = "tesla bolt" icon_state = "lightning" damage = 10 damage_type = DAMAGE_BURN pass_flags = PASSTABLE | PASSGRILLE | PASSRAILING range = 40 eyeblur = 0 muzzle_type = /obj/effect/projectile/muzzle/tesla tracer_type = /obj/effect/projectile/tracer/tesla impact_type = /obj/effect/projectile/impact/tesla /obj/item/projectile/beam/tesla/on_impact(atom/target) . = ..() if(isliving(target)) tesla_zap(target, 5, 5000) /obj/item/projectile/beam/freezer name = "freezing ray" icon_state = "bluelaser" pass_flags = PASSTABLE | PASSRAILING damage = 15 damage_type = DAMAGE_BURN check_armor = "energy" muzzle_type = /obj/effect/projectile/muzzle/laser/blue tracer_type = /obj/effect/projectile/tracer/laser/blue impact_type = /obj/effect/projectile/impact/laser/blue /obj/item/projectile/beam/freezer/on_impact(atom/target) . = ..() if(isliving(target)) var/mob/living/L = target L.bodytemperature -= 40 if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.bodytemperature <= H.species.cold_level_2) new /obj/structure/closet/statue/ice(H.loc, H) H.visible_message(SPAN_WARNING("\The [H] freezes!")) /obj/item/projectile/beam/stun/skrell name = "particle stun beam" icon_state = "beam_omni" agony = 50 muzzle_type = /obj/effect/projectile/muzzle/disabler tracer_type = /obj/effect/projectile/tracer/disabler impact_type = /obj/effect/projectile/impact/disabler /obj/item/projectile/beam/pulse/skrell name = "particle lethal beam"