mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 10:04:30 +01:00
15932fd0ae
## About The Pull Request Alternative to https://github.com/tgstation/tgstation/pull/94613 The iconoclast repeater, the handheld version, no longer fires two pellets but instead fires in a two round burst. The iconoclast repeater now charges two shots (one trigger pull) every crank, and the crank takes 0.4 seconds (letting you outpace your shot rate). However, you cannot charge the gun while moving. Reduces the damage of the repeater's shots. Now it does 15 lethal force. Since this is coming out in bursts of two, this means that it deals 30 lethal force in a single pull. https://github.com/tgstation/tgstation/pull/86867 removed the wielding requirement but didn't make the weapon heavy. I suspect this was an oversight so I'm treating it as a fix given the weapon visually appears to be held in two hands. Cleans up some repeat variables and nouns. ## Why It's Good For The Game The repeater has some pretty egregious statistics that put it pretty soundly above other improvised weapons, but also a lot of manufactured weapons as well. It has existing downsides, but they're not necessarily able to be felt because of other oversights to the weapon's design. This will make sure that the weaknesses are felt while still being a relatively useful weapon. Pointedly, the gun still kills people pretty fast if you're in line of fire, but actually pursuing someone while firing is going to be very difficult. It can still run down unarmored targets with the amount of shots in the gun, but it can't be used to go Rambo down the halls, wiping everyone out with your effective machine gun. ## Changelog 🆑 balance: The iconoclast repeater, the handheld version, no longer fires two pellets but instead fires in a two round burst. balance: The iconoclast repeater now charges two shots (one trigger pull) every crank, and the crank takes 0.4 seconds (letting you outpace your shot rate). However, you cannot charge the gun while moving. balance: Reduces the damage of the repeater's shots (both versions). Now it does 15 lethal force per shot. Since this is coming out in bursts of two, this means that it deals 30 lethal force in a single pull. fix: Laser musket type weapons are now heavy weapons. code: Cleans up some of the code and grammar on the repeater. /🆑
426 lines
13 KiB
Plaintext
426 lines
13 KiB
Plaintext
/obj/projectile/beam
|
|
name = "laser"
|
|
icon_state = "laser"
|
|
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
|
damage = 20
|
|
damage_type = BURN
|
|
hitsound = 'sound/items/weapons/sear.ogg'
|
|
hitsound_wall = 'sound/items/weapons/effects/searwall.ogg'
|
|
armor_flag = LASER
|
|
eyeblur = 4 SECONDS
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
|
light_system = OVERLAY_LIGHT
|
|
light_range = 1
|
|
light_power = 1.4
|
|
light_color = COLOR_SOFT_RED
|
|
ricochets_max = 50 //Honk!
|
|
ricochet_chance = 80
|
|
reflectable = TRUE
|
|
wound_bonus = -20
|
|
exposed_wound_bonus = 10
|
|
|
|
|
|
/obj/projectile/beam/laser
|
|
tracer_type = /obj/effect/projectile/tracer/laser
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser
|
|
impact_type = /obj/effect/projectile/impact/laser
|
|
wound_bonus = -20
|
|
damage = 25
|
|
exposed_wound_bonus = 40
|
|
|
|
/obj/projectile/beam/laser/rapid
|
|
name = "rapid fire laser"
|
|
icon_state = "carbine_laser"
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser
|
|
damage = 20
|
|
|
|
/obj/projectile/beam/laser/rapid/practice
|
|
name = "practice rapid fire laser"
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser
|
|
damage = 0
|
|
|
|
/obj/projectile/beam/laser/cybersun
|
|
name = "red plasma beam"
|
|
icon_state = "lava"
|
|
light_color = COLOR_DARK_RED
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
|
damage = 9
|
|
wound_bonus = -40
|
|
speed = 0.9
|
|
|
|
/obj/projectile/beam/laser/accelerator
|
|
name = "accelerator laser"
|
|
icon_state = "scatterlaser"
|
|
range = 255
|
|
damage = 6
|
|
var/size_per_tile = 0.1
|
|
var/max_scale = 4
|
|
|
|
/obj/projectile/beam/laser/accelerator/reduce_range()
|
|
..()
|
|
damage += 7
|
|
transform = matrix()
|
|
transform *= min(1 + (maximum_range - range) * size_per_tile, max_scale)
|
|
|
|
//overclocked laser, does a bit more damage but has much higher wound power (-0 vs -20)
|
|
/obj/projectile/beam/laser/hellfire
|
|
name = "hellfire laser"
|
|
icon_state = "hellfire"
|
|
wound_bonus = 0
|
|
damage = 30
|
|
speed = 1.6
|
|
light_color = "#FF969D"
|
|
|
|
/obj/projectile/beam/laser/flare
|
|
name = "flare particle"
|
|
icon_state = "flare"
|
|
light_range = 2
|
|
light_power = 3
|
|
damage = 20
|
|
wound_bonus = -15
|
|
exposed_wound_bonus = 15
|
|
|
|
/obj/projectile/beam/laser/flare/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
if(!isliving(target))
|
|
return
|
|
var/mob/living/designated_target = target
|
|
designated_target.apply_status_effect(/datum/status_effect/designated_target)
|
|
|
|
/obj/projectile/beam/laser/heavylaser
|
|
name = "heavy laser"
|
|
icon_state = "heavylaser"
|
|
damage = 40
|
|
tracer_type = /obj/effect/projectile/tracer/heavy_laser
|
|
muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
|
|
impact_type = /obj/effect/projectile/impact/heavy_laser
|
|
|
|
/obj/projectile/beam/laser/on_hit(atom/target, blocked = 0, pierce_hit)
|
|
. = ..()
|
|
if(iscarbon(target))
|
|
var/mob/living/carbon/M = target
|
|
M.ignite_mob()
|
|
else if(isturf(target))
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser/wall
|
|
|
|
/obj/projectile/beam/laser/musket
|
|
name = "low-power laser"
|
|
icon_state = "laser_musket"
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
|
damage = 28
|
|
stamina = 35
|
|
light_color = COLOR_STRONG_VIOLET
|
|
weak_against_armour = TRUE
|
|
|
|
/obj/projectile/beam/laser/musket/prime
|
|
name = "mid-power laser"
|
|
damage = 25
|
|
stamina = 20
|
|
weak_against_armour = FALSE
|
|
|
|
/obj/projectile/beam/laser/repeater
|
|
name = "clockwork laser"
|
|
icon_state = "laser_repeater"
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser
|
|
damage = 15
|
|
light_color = COLOR_DARK_ORANGE
|
|
weak_against_armour = TRUE
|
|
|
|
/obj/projectile/beam/weak
|
|
damage = 15
|
|
|
|
/obj/projectile/beam/weak/penetrator
|
|
armour_penetration = 50
|
|
|
|
/obj/projectile/beam/practice
|
|
name = "practice laser"
|
|
damage = 0
|
|
|
|
/obj/projectile/beam/scatter
|
|
name = "laser pellet"
|
|
icon_state = "scatterlaser"
|
|
damage = 7.5
|
|
wound_bonus = 5
|
|
exposed_wound_bonus = 5
|
|
damage_falloff_tile = -0.45
|
|
wound_falloff_tile = -2.5
|
|
|
|
/obj/projectile/beam/scatter/pathetic
|
|
name = "extremely weak laser pellet"
|
|
damage = 1
|
|
wound_bonus = 0
|
|
damage_falloff_tile = -0.1
|
|
color = "#dbc11d"
|
|
hitsound = 'sound/items/bikehorn.ogg' //honk
|
|
hitsound_wall = 'sound/items/bikehorn.ogg'
|
|
|
|
/obj/projectile/beam/xray
|
|
name = "\improper X-ray beam"
|
|
icon_state = "xray"
|
|
damage = 15
|
|
range = 15
|
|
armour_penetration = 100
|
|
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS
|
|
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
|
light_color = LIGHT_COLOR_GREEN
|
|
tracer_type = /obj/effect/projectile/tracer/xray
|
|
muzzle_type = /obj/effect/projectile/muzzle/xray
|
|
impact_type = /obj/effect/projectile/impact/xray
|
|
|
|
/obj/projectile/beam/disabler
|
|
name = "disabler beam"
|
|
icon_state = "omnilaser"
|
|
damage = 30
|
|
damage_type = STAMINA
|
|
armor_flag = ENERGY
|
|
hitsound = 'sound/items/weapons/sear_disabler.ogg'
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
|
light_color = LIGHT_COLOR_BLUE
|
|
tracer_type = /obj/effect/projectile/tracer/disabler
|
|
muzzle_type = /obj/effect/projectile/muzzle/disabler
|
|
impact_type = /obj/effect/projectile/impact/disabler
|
|
|
|
/obj/projectile/beam/disabler/weak
|
|
damage = 15
|
|
|
|
/obj/projectile/beam/disabler/scatter
|
|
name = "scatter disabler"
|
|
icon_state = "scatterdisabler"
|
|
damage = 5.5
|
|
damage_falloff_tile = -0.5
|
|
speed = 1.2
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
|
tracer_type = /obj/effect/projectile/tracer/xray
|
|
muzzle_type = /obj/effect/projectile/muzzle/xray
|
|
impact_type = /obj/effect/projectile/impact/xray
|
|
|
|
/obj/projectile/beam/disabler/smoothbore
|
|
name = "unfocused disabler beam"
|
|
weak_against_armour = TRUE
|
|
|
|
/obj/projectile/beam/disabler/smoothbore/prime
|
|
name = "focused disabler beam"
|
|
weak_against_armour = FALSE
|
|
damage = 35 //slight increase in damage just for the hell of it
|
|
|
|
/obj/projectile/beam/pulse
|
|
name = "pulse"
|
|
icon_state = "u_laser"
|
|
damage = 50
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
|
light_color = LIGHT_COLOR_BLUE
|
|
tracer_type = /obj/effect/projectile/tracer/pulse
|
|
muzzle_type = /obj/effect/projectile/muzzle/pulse
|
|
impact_type = /obj/effect/projectile/impact/pulse
|
|
wound_bonus = 10
|
|
|
|
/obj/projectile/beam/pulse/on_hit(atom/target, blocked = 0, pierce_hit)
|
|
. = ..()
|
|
if (!QDELETED(target) && (isturf(target) || isstructure(target)))
|
|
if(isobj(target))
|
|
SSexplosions.med_mov_atom += target
|
|
else
|
|
SSexplosions.medturf += target
|
|
|
|
/obj/projectile/beam/pulse/shotgun
|
|
damage = 30
|
|
|
|
/obj/projectile/beam/pulse/heavy
|
|
name = "heavy pulse laser"
|
|
icon_state = "pulse1_bl"
|
|
projectile_piercing = ALL
|
|
var/pierce_hits = 2
|
|
|
|
/obj/projectile/beam/pulse/heavy/on_hit(atom/target, blocked = 0, pierce_hit)
|
|
if(pierce_hits <= 0)
|
|
projectile_piercing = NONE
|
|
pierce_hits -= 1
|
|
return ..()
|
|
|
|
/obj/projectile/beam/emitter
|
|
name = "emitter beam"
|
|
icon_state = "emitter"
|
|
damage = 30
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
|
|
light_color = LIGHT_COLOR_GREEN
|
|
wound_bonus = -40
|
|
exposed_wound_bonus = 70
|
|
|
|
/obj/projectile/beam/emitter/singularity_pull(atom/singularity, current_size)
|
|
return //don't want the emitters to miss
|
|
|
|
/obj/projectile/beam/emitter/hitscan
|
|
icon_state = null
|
|
hitscan = TRUE
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser/emitter
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter
|
|
impact_type = /obj/effect/projectile/impact/laser/emitter
|
|
impact_effect_type = null
|
|
hitscan_light_intensity = 3
|
|
hitscan_light_range = 0.75
|
|
hitscan_light_color_override = COLOR_LIME
|
|
muzzle_flash_intensity = 6
|
|
muzzle_flash_range = 2
|
|
muzzle_flash_color_override = COLOR_LIME
|
|
impact_light_intensity = 7
|
|
impact_light_range = 2.5
|
|
impact_light_color_override = COLOR_LIME
|
|
// Subtract this from SM damage on hit for lasers
|
|
var/integrity_heal
|
|
// Subtract this from SM energy on hit for lasers
|
|
var/energy_reduction
|
|
// Add this to SM psi coefficient on hit for lasers
|
|
var/psi_change
|
|
|
|
/obj/projectile/beam/emitter/hitscan/bluelens
|
|
name = "electrodisruptive beam"
|
|
light_color = LIGHT_COLOR_BLUE
|
|
muzzle_type = /obj/effect/projectile/muzzle/pulse
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/bluelens
|
|
impact_type = /obj/effect/projectile/impact/pulse
|
|
hitscan_light_color_override = COLOR_BLUE_LIGHT
|
|
muzzle_flash_color_override = COLOR_BLUE_LIGHT
|
|
impact_light_color_override = COLOR_BLUE_LIGHT
|
|
damage_type = STAMINA
|
|
integrity_heal = 0.25
|
|
energy_reduction = 60
|
|
|
|
/obj/projectile/beam/emitter/hitscan/bioregen
|
|
name = "bioregenerative beam"
|
|
light_color = LIGHT_COLOR_BRIGHT_YELLOW
|
|
muzzle_type = /obj/effect/projectile/muzzle/solar
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/bioregen
|
|
impact_type = /obj/effect/projectile/impact/solar
|
|
hitscan_light_color_override = COLOR_LIGHT_YELLOW
|
|
muzzle_flash_color_override = COLOR_LIGHT_YELLOW
|
|
impact_light_color_override = COLOR_LIGHT_YELLOW
|
|
damage_type = STAMINA
|
|
damage = 0
|
|
var/healing_done = 5
|
|
|
|
/obj/projectile/beam/emitter/hitscan/bioregen/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
if(!iscarbon(target))
|
|
return
|
|
var/mob/living/carbon/healed_guy = target
|
|
healed_guy.heal_bodypart_damage(brute = healing_done, burn = healing_done, updating_health = FALSE)
|
|
|
|
/obj/projectile/beam/emitter/hitscan/incend
|
|
name = "conflagratory beam"
|
|
light_color = LIGHT_COLOR_ORANGE
|
|
muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/redlens
|
|
impact_type = /obj/effect/projectile/impact/heavy_laser
|
|
hitscan_light_color_override = COLOR_ORANGE
|
|
muzzle_flash_color_override = COLOR_ORANGE
|
|
impact_light_color_override = COLOR_ORANGE
|
|
damage = 20
|
|
integrity_heal = -0.15
|
|
energy_reduction = -150
|
|
psi_change = -0.1
|
|
|
|
/obj/projectile/beam/emitter/hitscan/incend/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
if(!isliving(target))
|
|
return
|
|
var/mob/living/burnt_guy = target
|
|
burnt_guy.adjust_fire_stacks(5)
|
|
burnt_guy.ignite_mob()
|
|
|
|
/obj/projectile/beam/emitter/hitscan/psy
|
|
name = "psychosiphoning beam"
|
|
light_color = LIGHT_COLOR_PINK
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser/emitter/psy
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/psy
|
|
impact_type = /obj/effect/projectile/impact/laser/emitter/psy
|
|
hitscan_light_color_override = COLOR_BLUSH_PINK
|
|
muzzle_flash_color_override = COLOR_BLUSH_PINK
|
|
impact_light_color_override = COLOR_BLUSH_PINK
|
|
damage = 0
|
|
energy_reduction = -25
|
|
psi_change = 0.25
|
|
|
|
/obj/projectile/beam/emitter/hitscan/psy/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
if(!isliving(target))
|
|
return
|
|
var/mob/living/siphoned = target
|
|
siphoned.mob_mood.adjust_sanity(-25)
|
|
to_chat(siphoned, span_warning("Suddenly, everything feels just a little bit worse!"))
|
|
|
|
/obj/projectile/beam/emitter/hitscan/magnetic
|
|
name = "magnetogenerative beam"
|
|
light_color = COLOR_SILVER
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser/emitter/magnetic
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/magnetic
|
|
impact_type = /obj/effect/projectile/impact/laser/emitter/magnetic
|
|
hitscan_light_color_override = COLOR_SILVER
|
|
muzzle_flash_color_override = COLOR_SILVER
|
|
impact_light_color_override = COLOR_SILVER
|
|
damage = 0
|
|
|
|
/obj/projectile/beam/emitter/hitscan/magnetic/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
var/turf/turf_to_magnet = get_turf(target)
|
|
goonchem_vortex(turf_to_magnet, FALSE, 4)
|
|
|
|
/obj/projectile/beam/emitter/hitscan/blast
|
|
name = "hyperconcussive beam"
|
|
light_color = LIGHT_COLOR_ORANGE
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser/emitter/magnetic
|
|
tracer_type = /obj/effect/projectile/tracer/laser/emitter/magnetic
|
|
impact_type = /obj/effect/projectile/impact/laser/emitter/magnetic
|
|
hitscan_light_color_override = COLOR_ORANGE
|
|
muzzle_flash_color_override = COLOR_ORANGE
|
|
impact_light_color_override = COLOR_ORANGE
|
|
damage = 0
|
|
integrity_heal = -2
|
|
energy_reduction = -500
|
|
|
|
|
|
/obj/projectile/beam/emitter/hitscan/blast/on_hit(atom/target, blocked, pierce_hit)
|
|
. = ..()
|
|
var/turf/turf_to_explode = get_turf(target)
|
|
explosion(turf_to_explode, 0, 1, 2)
|
|
|
|
|
|
/obj/projectile/beam/lasertag
|
|
name = "laser tag beam"
|
|
icon_state = "omnilaser"
|
|
hitsound = null
|
|
damage = 0
|
|
damage_type = STAMINA
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
|
|
light_color = LIGHT_COLOR_BLUE
|
|
var/lasertag_team = LASERTAG_TEAM_NEUTRAL
|
|
var/lasertag_damage = 34
|
|
|
|
/obj/projectile/beam/lasertag/redtag
|
|
icon_state = "laser"
|
|
lasertag_team = LASERTAG_TEAM_RED
|
|
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
|
|
light_color = COLOR_SOFT_RED
|
|
tracer_type = /obj/effect/projectile/tracer/laser
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser
|
|
impact_type = /obj/effect/projectile/impact/laser
|
|
|
|
/obj/projectile/beam/lasertag/redtag/hitscan
|
|
icon_state = null
|
|
hitscan = TRUE
|
|
|
|
/obj/projectile/beam/lasertag/bluetag
|
|
icon_state = "bluelaser"
|
|
lasertag_team = LASERTAG_TEAM_BLUE
|
|
tracer_type = /obj/effect/projectile/tracer/laser/blue
|
|
muzzle_type = /obj/effect/projectile/muzzle/laser/blue
|
|
impact_type = /obj/effect/projectile/impact/laser/blue
|
|
|
|
/obj/projectile/beam/lasertag/bluetag/hitscan
|
|
icon_state = null
|
|
hitscan = TRUE
|
|
|
|
/obj/projectile/magic/shrink/alien
|
|
antimagic_flags = NONE
|
|
shrink_time = 9 SECONDS
|