//Assemblies /obj/item/laser_assembly/medium name = "laser assembly (medium)" desc = "A medium carbine-sized assembly." base_icon_state = "medium" w_class = WEIGHT_CLASS_SMALL size = CHASSIS_MEDIUM modifier_cap = 4 /obj/item/laser_assembly/large name = "laser assembly (large)" desc = "A large rifle-sized assembly." base_icon_state = "large" w_class = WEIGHT_CLASS_NORMAL size = CHASSIS_LARGE modifier_cap = 5 /obj/item/laser_assembly/admin name = "laser assembly (obscene)" desc = "An obscene laser assembly." base_icon_state = "large" w_class = WEIGHT_CLASS_BULKY size = CHASSIS_LARGE modifier_cap = 25 //Capacitors /obj/item/laser_components/capacitor/potato name = "starch capacitor" desc = "A powercell composed of a primarily starch-based conductor." icon_state = "starch_capacitor" reliability = 30 shots = 1 damage = 5 /obj/item/laser_components/capacitor/reinforced name = "reinforced capacitor" desc = "A reinforced laser weapon capacitor." icon_state = "reinforced_capacitor" reliability = 100 malus_multiplier = 0.9 /obj/item/laser_components/capacitor/highcap name = "high-capacity capacitor" desc = "A capacitor with increased charge capacity, at the cost of peak output" icon_state = "reinforced_capacitor" reliability = 45 shots = 15 damage = 8 /obj/item/laser_components/capacitor/highpower name = "overclocked capacitor" desc = "A capacitor withhigher output, at the cost of total charge." icon_state = "reinforced_capacitor" damage = 20 shots = 4 reliability = 45 /obj/item/laser_components/capacitor/nuclear name = "uranium-enriched capacitor" desc = "A capacitor built from uranium enriched materials." icon_state = "uranium_capacitor" damage = 20 shots = 10 reliability = 60 /obj/item/laser_components/capacitor/reinforced/small_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) ..() /obj/item/laser_components/capacitor/reinforced/medium_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] powering \the [prototype] mostly contains the sparks as it overloads!"), range = 3) ..() /obj/item/laser_components/capacitor/reinforced/critical_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] powering \the [prototype] goes critical but contains the worst of the sparks!"), range = 4) ..() /obj/item/laser_components/capacitor/nuclear/small_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_WARNING("\The [src] powering \the [prototype] sparks and briefly glows a sickly yellow."), range = 4) var/turf/T = get_turf(src) for (var/mob/living/M in range(0, T)) to_chat(M, SPAN_WARNING("You feel a warm sensation.")) M.apply_damage(rand(50,100)*max(prototype.criticality, 1), DAMAGE_RADIATION) ..() /obj/item/laser_components/capacitor/nuclear/medium_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] in \the [prototype] glows ominously as it overloads!"), range = 6) var/turf/T = get_turf(src) for (var/mob/living/M in range(round(max(prototype.criticality, 1)),T)) to_chat(M, SPAN_WARNING("You feel a warm sensation.")) M.apply_damage(rand(100,200)*max(prototype.criticality, 1), DAMAGE_RADIATION) ..() /obj/item/laser_components/capacitor/nuclear/critical_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] in \the [prototype] goes critical and explodes in a burst of radiation!"), range = 6) var/turf/T = get_turf(src) for (var/mob/living/M in range(rand(2,6)*max(prototype.criticality, 1),T)) to_chat(M, SPAN_WARNING("You feel a wave of heat wash over you.")) M.apply_damage(300*max(prototype.criticality, 1), DAMAGE_RADIATION) SSradiation.radiate(src, 50*max(prototype.criticality, 1)) new /obj/effect/decal/cleanable/greenglow/radioactive/medium(T) ..() /obj/item/laser_components/capacitor/teranium name = "teranium-enriched capacitor" desc = "A capacitor built from teranium enriched materials." icon_state = "teranium_capacitor" damage = 25 shots = 15 reliability = 55 /obj/item/laser_components/capacitor/teranium/small_fail(var/mob/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_WARNING("\The [src] in \the [prototype] spits angry sparks!")) tesla_zap(prototype, 2, 1000*max(prototype.criticality, 1)) return /obj/item/laser_components/capacitor/teranium/medium_fail(var/mob/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_WARNING("\The [src] in \the [prototype] shoots random arcs of electricity as it overloads!")) tesla_zap(prototype, round(max(prototype.criticality, 1)*2,1), 2000*prototype.criticality) return /obj/item/laser_components/capacitor/teranium/critical_fail(var/mob/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] in \the [prototype] blasts huge lightning bolts in all directions as it goes critical!")) tesla_zap(prototype, round(max(prototype.criticality, 1)*2,1), 4000*prototype.criticality, TRUE) ..() /obj/item/laser_components/capacitor/phoron name = "phoron-enriched capacitor" desc = "A capacitor built from phoron enriched materials." icon_state = "phoron_capacitor" damage = 30 shots = 20 reliability = 50 /obj/item/laser_components/capacitor/phoron/small_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) if (user) visible_message(SPAN_WARNING("\The [src] powering \the [prototype] sparks in \the [user]'s hand and briefly glows a sickly yellow."), range = 4) user.apply_damage(rand(50,100)*max(prototype.criticality, 1), DAMAGE_RADIATION) else visible_message(SPAN_WARNING("\The [src] powering \the [prototype] sparks and briefly glows a sickly yellow."), range = 4) SSradiation.radiate(src, 10*max(prototype.criticality, 1)) ..() /obj/item/laser_components/capacitor/phoron/medium_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) if (user) visible_message(SPAN_WARNING("\The [src] powering \the [prototype] hisses in \the [user]'s hand and explosively vents hot phoron!")) if (prototype in list(user.l_hand)) user.apply_damage(25*max(prototype.criticality, 1), DAMAGE_BRUTE, BP_L_HAND, prototype, DAMAGE_FLAG_EXPLODE) else if (prototype in list(user.r_hand)) user.apply_damage(25*max(prototype.criticality, 1), DAMAGE_BRUTE, BP_R_HAND, prototype, DAMAGE_FLAG_EXPLODE) else visible_message(SPAN_DANGER("\The [src] powering \the [prototype] hisses and explosively vents hot phoron!")) explosion(get_turf(prototype), 0, 0, round(max(prototype.criticality, 1)*2,1)) ..() /obj/item/laser_components/capacitor/phoron/critical_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) if (user) visible_message(SPAN_DANGER("\The [src] powering \the [prototype] goes critical in \the [user]'s hand causing a massive explosion!")) if (prototype in list(user.l_hand)) user.apply_damage(40*max(prototype.criticality, 1), DAMAGE_BRUTE, BP_L_HAND, prototype, DAMAGE_FLAG_EXPLODE) else if (prototype in list(user.r_hand)) user.apply_damage(40*max(prototype.criticality, 1), DAMAGE_BRUTE, BP_R_HAND, prototype, DAMAGE_FLAG_EXPLODE) else visible_message(SPAN_DANGER("\The [src] powering \the [prototype] goes critical causing a massive explosion!")) empulse(get_turf(src), round(max(prototype.criticality, 1),1), round(max(prototype.criticality, 1)*4,1)) explosion(get_turf(prototype), 0, round(max(prototype.criticality, 1),1), round(max(prototype.criticality, 1)*3,1)) ..() /obj/item/laser_components/capacitor/bluespace name = "bluespace-enriched capacitor" desc = "A capacitor built from bluespace enriched materials." icon_state = "bluespace_capacitor" damage = 35 shots = 25 reliability = 45 /obj/item/laser_components/capacitor/bluespace/small_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_WARNING("\The [src] in \the [prototype] sparks and everything touching it teleports a short distance!")) var/turf/T = get_turf(src) for (var/mob/living/M in range(round(max(prototype.criticality, 1),1),T)) do_teleport(M, get_turf(M), rand(1,3)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg') ..() /obj/item/laser_components/capacitor/bluespace/medium_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_WARNING("\The [src] in \the [prototype] flickers then vanishes along with everything around it!")) var/turf/T = get_turf(src) for (var/mob/living/M in range(round(3*max(prototype.criticality, 1),1),T)) empulse(get_turf(M), 0, round(max(prototype.criticality, 1)*2,1)) do_teleport(M, get_turf(M), rand(2,6)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg') ..() /obj/item/laser_components/capacitor/bluespace/critical_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype) visible_message(SPAN_DANGER("\The [src] in \the [prototype] implodes in a catastrophic spatial anomaly, teleporting everything around it!")) var/turf/T = get_turf(src) for (var/mob/living/M in range(round(6*max(prototype.criticality, 1),1),T)) empulse(get_turf(M), 0, round(max(prototype.criticality, 1)*4,1)) do_teleport(M, get_turf(M), rand(4,12)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg') ..() //Lenses /obj/item/laser_components/focusing_lens/shotgun name = "splitter lens" desc = "A focusing lens that splits the beam into several sub-beams." icon_state = "splitter_lens" dispersion = list(5, 10, 15, 20, 25, 30, 35, 40) burst = 4 accuracy = -1 reliability = 35 /obj/item/laser_components/focusing_lens/sniper name = "precise lens" desc = "A focusing lens that is made of refined crystal, providing enhanced clarity and precision." icon_state = "precise_lens" accuracy = 2 reliability = 30 dispersion = list(0, 0, 0, 0, 0, 1, 2, 3, 4, 5) /obj/item/laser_components/focusing_lens/strong name = "reinforced lens" desc = "A focusing lens that is reinforced with stronger material." icon_state = "reinforced_lens" reliability = 60 //Modifiers /obj/item/laser_components/modifier/silencer name = "energy suppressor" desc = "A sophisticated audio dampener that negates much of the sound produced by an energy weapon." mod_type = MOD_SILENCE icon_state = "energy_silencer" /obj/item/laser_components/modifier/aeg name = "miniaturized reactor" desc = "An internal nuclear reactor which recharges the energy cell of the weapon. Feels tingly." icon_state = "mini_reactor" mod_type = MOD_NUCLEAR_CHARGE base_malus = 2 malus = 2 reliability = -10 criticality = 1.5 increasable_stats = list() decreaseable_stats = list("base_malus", "criticality") /obj/item/laser_components/modifier/surge name = "surge protector" desc = "A surge protector along the cell minimizes capacitor failure." reliability = 0 base_malus = 0 //when modifiers get damaged they do not break, but make other components break faster malus = 0 //subtracted from weapon's overall reliability everytime it's fired criticality = 0.5 icon_state = "surge_protector" increasable_stats = list() decreaseable_stats = list("criticality") /obj/item/laser_components/modifier/repeater name = "pulser" desc = "A modification to the energy cell that permits rudimentary burst fire." base_malus = 0.5 //when modifiers get damaged they do not break, but make other components break faster malus = 0.5 //subtracted from weapon's overall reliability everytime it's fired burst_delay = 1 burst = 3 damage = 1.1 fire_delay = 3 accuracy = -1 icon_state = "pulser" increasable_stats = list("shots", "accuracy") decreaseable_stats = list("base_malus", "fire_delay", "burst_delay", "fire_delay") /obj/item/laser_components/modifier/auxiliarycap name = "auxiliary capacitor" desc = "A string of sub-capacitors along the central capacitor moderates its discharge, increasing capacitor efficiency by reducing peak output." base_malus = 3 malus = 3 reliability = -10 shots = 2 damage = 0.8 criticality = 1.25 icon_state = "aux_capacitor" increasable_stats = list("reliability", "shots", "damage") decreaseable_stats = list("base_malus", "criticality") /obj/item/laser_components/modifier/overcharge name = "capacitor overcharge" desc = "A bypass to the internal cell's limiter, producing an explosive result." base_malus = 5 malus = 5 reliability = -25 shots = 0.5 damage = 2 criticality = 2 icon_state = "capacitor_overcharge" increasable_stats = list("reliability") decreaseable_stats = list("base_malus", "criticality") /obj/item/laser_components/modifier/gatling name = "gatling rotator" desc = "A modification to the lens that permits rapid-fire for extended durations." base_malus = 0.5 malus = 0.5 burst_delay = 1 burst = 10 damage = 2 //With the way armour works, splitting the damage across multiple shots actually reduces the overall damage, so we compensate by increasing it. fire_delay = 10 chargetime = 3 accuracy = -1 icon_state = "rotating_lens" increasable_stats = list() decreaseable_stats = list("burst_delay", "chargetime") /obj/item/laser_components/modifier/scope name = "telescopic sight" desc = "A modification that adds a zoom function to the prototype." scope_name = "proto-scope" gun_overlay = "scope" icon_state = "telescopic_sight" /obj/item/laser_components/modifier/barrel name = "reinforced barrel" desc = "Reinforcement along the barrel extends the longevity of the prototype." reliability = 25 improvement_cap = 50 icon_state = "reinforced_barrel" /obj/item/laser_components/modifier/barrel/nano name = "nano-reinforced barrel" desc = "Reinforcement along the barrel extends the longevity of the prototype even more than predecessor barrel. Uses nano-technology to increase reinforcement while retaining same weight." reliability = 35 improvement_cap = 50 icon_state = "nano_barrel" /obj/item/laser_components/modifier/vents name = "exhaust venting" desc = "More efficient exhaust venting reduces the impact of firing the prototype." reliability = 0 improvement_cap = 50 base_malus = -0.5 malus = -0.5 malus_multiplier = 0.5 icon_state = "vents" increasable_stats = list() decreaseable_stats = list("base_malus") /obj/item/laser_components/modifier/grip name = "enhanced grip" desc = "A modification that improves the fire delay of the prototype." improvement_cap = 50 fire_delay = 0.8 gun_overlay = "grip" icon_state = "grip" increasable_stats = list() decreaseable_stats = list("fire_delay") /obj/item/laser_components/modifier/grip/improved name = "enhanced grip MK2" desc = "A modification that improves the fire delay of the prototype. Slight improvement over a predecessor." improvement_cap = 50 fire_delay = 0.7 gun_overlay = "grip" icon_state = "enhanced_grip" /obj/item/laser_components/modifier/stock name = "improved stock" desc = "A modification that improves the accuracy." fire_delay = 0.9 accuracy = 1 gun_overlay = "stock" icon_state = "improved_stock" increasable_stats = list("accuracy") decreaseable_stats = list("fire_delay") /obj/item/laser_components/modifier/stock/gyro name = "stability stock" desc = "A better version of na improved stock. This stock is more ergonomic, with in-built gyroscope increasing handly and accuracy." fire_delay = 0.8 accuracy = 1.5 icon_state = "stable_stock" /obj/item/laser_components/modifier/bayonet name = "bayonet" desc = "A modification that adds a big knife to your gun. Science." improvement_cap = 50 gun_force = 10 gun_overlay = "bayonet" icon_state = "bayonet_item" increasable_stats = list("gun_force") decreaseable_stats = list() /obj/item/laser_components/modifier/ebayonet name = "energy bayonet" desc = "A modification that adds a hardlight knife to your gun. Science!" improvement_cap = 50 gun_force = 25 gun_overlay = "ebayonet" icon_state = "ebayonet_item" increasable_stats = list("gun_force") decreaseable_stats = list() //Projectile modulators /obj/item/laser_components/modulator/taser name = "TASER modulator" desc = "A modification that modulates the beam into a nonlethal electrical arc." damage = 0 projectile = /obj/projectile/beam/stun icon_state = "taser" firing_sound = 'sound/weapons/Taser.ogg' /obj/item/laser_components/modulator/tesla name = "tesla modulator" desc = "A modification that modulates the beam into a lethal electrical arc." projectile = /obj/projectile/beam/tesla icon_state = "tesla" firing_sound = 'sound/magic/LightningShock.ogg' /obj/item/laser_components/modulator/pulse name = "pulse modulator" desc = "Amplifies the laser beam into a highly lethal pulse beam." projectile = /obj/projectile/beam/pulse damage = 1.5 icon_state = "pulse" firing_sound = 'sound/weapons/pulse.ogg' /obj/item/laser_components/modulator/xray name = "xray modulator" desc = "Modulates the beam into a concentrated x-ray blast." projectile = /obj/projectile/beam/xray icon_state = "xray" firing_sound = 'sound/weapons/laser3.ogg' /obj/item/laser_components/modulator/ion name = "ion cannon" desc = "Modulates the prototype to fire disparate ion projectiles." shots = 0.5 //Ions are very powerful and not affected by damage. damage = 0 projectile = /obj/projectile/ion icon_state = "ion" origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 3) /obj/item/laser_components/modulator/floramut name = "floral somatomodulator" desc = "Modulates the beam into firing controlled radiation which induces mutation in plant cells." projectile = /obj/projectile/energy/floramut icon_state = "somatoray" firing_sound = 'sound/effects/stealthoff.ogg' /obj/item/laser_components/modulator/floramut2 name = "betaray modulator" desc = "Modulates the beam into firing controlled radiation which induces enhanced reproduction in plant cells." projectile = /obj/projectile/energy/florayield icon_state = "betaray" firing_sound = 'sound/effects/stealthoff.ogg' /obj/item/laser_components/modulator/xenovermin name = "xenovermin modulator" desc = "Modulates the beam into firing precise electrical arcs designed for pest and xenofauna control." projectile = /obj/projectile/beam/mousegun/xenofauna damage = 0.1 icon_state = "pesker" firing_sound = 'sound/weapons/taser2.ogg' /obj/item/laser_components/modulator/mindflayer name = "mind flayer modulator" desc = "Modulates the beam into firing \"mind flayer\" beams." projectile = /obj/projectile/beam/mindflayer damage = 0.5 icon_state = "flayer" /obj/item/laser_components/modulator/decloner name = "decloner modulator" desc = "Modulates the beam into firing highly radioactive particulates." projectile = /obj/projectile/energy/declone damage = 0.5 icon_state = "decloner" firing_sound = 'sound/weapons/pulse3.ogg' origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_POWER = 3) /obj/item/laser_components/modulator/ebow name = "dart modulator" desc = "Modulates the beam into firing minute energy darts." projectile = /obj/projectile/energy/dart damage = 0.25 icon_state = "dart" firing_sound = 'sound/weapons/Genhit.ogg' origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 3) /obj/item/laser_components/modulator/blaster name = "blaster-bolt modulator" desc = "Modulates the beam into firing disparate energy bolts designed to burn through armour." projectile = /obj/projectile/energy/blaster/incendiary/light damage = 0.8 //Specialist anti-armour incendiary projectile. icon_state = "lensatic" origin_tech = list(TECH_COMBAT = 2, TECH_PHORON = 4) /obj/item/laser_components/modulator/bfg name = "bioforce modulator" desc = "Modulates the beam into firing big green balls of death." projectile = /obj/projectile/energy/bfg damage = 2 icon_state = "bfg" firing_sound = 'sound/magic/LightningShock.ogg' /obj/item/laser_components/modulator/tox name = "phoron bolt modulator" desc = "Modulates the beam into firing toxic phoron bolts." projectile = /obj/projectile/energy/phoron icon_state = "tox" firing_sound = 'sound/effects/stealthoff.ogg' origin_tech = list(TECH_COMBAT = 4, TECH_PHORON = 4) /obj/item/laser_components/modulator/net name = "energy net modulator" desc = "Modulates the beam into firing an energy net." projectile = /obj/projectile/beam/energy_net icon_state = "xray" firing_sound = 'sound/weapons/plasma_cutter.ogg' origin_tech = list(TECH_COMBAT = 3, TECH_PHORON = 4, TECH_ILLEGAL = 4) /obj/item/laser_components/modulator/freeze name = "freeze ray modulator" desc = "Modulates the beam into freezing rays." projectile = /obj/projectile/beam/freezer icon_state = "blue" firing_sound = 'sound/weapons/pulse3.ogg' origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 5, TECH_MATERIAL = 4)