Files
Bubberstation/code/modules/projectiles/projectile/beams.dm
4dplanner 15825997b8 Stamina changes [TMC] (#43966)
About The Pull Request

Stamina damage no longer stacks with regular damage.
Stamina regen is paused for 10 seconds every time you take stamina damage
Stamina damage is purged if stamina regen resumes after you enter stamcrit

changes to make this work:
disablers knocked down to 30
punch damage changed to full raw, 1.5x stamina.
flesh-eating symptom deals 2x stamina damage
CQC unchanged
Bostaff manually stacks
Energised jelly blob deals full stamina damage
Pressurised slime blob deals full stamina damage
Blood boil deals 1.5x stamina damage to servants of ratvar (why do I bother?)
Revenant blight now deals 20 stamina damage
Space carp no longer deal stamina damage, but deal 20 brute.
Enchanted bullets deal 20 brute damage
Beanbags reduced to 55 stamina damage
Rubbershot damage untouched
Ebow stamina damage increased to 60

bone hurting juice deals 7.5 stamina damage per tick, down from 15
Why It's Good For The Game

Stamina damage not stacking with regular damage is meant to make disablers less good as a weapon for all-out firefights, but remain good for arresting criminals as a sec squad.

The stamina regen pause allows for chemicals that deal stamina damage to be effective even if they don't only target one body part (as in #43924), and gets rid of the counterintuitive speedy regeneration if multiple bodyparts are damaged. It also makes stamina damage calculations more straightforward - currently 4 damage/tick to the chest is really 1, and adding 25% more damage to the chem deals 100% more damage per tick.

The stamina purge is to make stamcrit less of a confirmed win - several times as sec officer I've succumbed to poison, run out of charge, etc only for the rest of sec to arrive before the perp awakes from his 3 hour sleep. Stamina damage is fully purged to make keeping someone down require more attention, since under the current system even if they somehow get up they'll be so slow it'll be trivial to put them down again. Basically, makes handcuffs more useful again.
Changelog

cl
add: stamina damage now pauses natural stamina regen for 10 seconds
add: stamina regenerates fully when it can.
balance: disabler damage reduced
tweak: stamina damage no longer stacks with normal damage for the purposes of damage slowdown and crit
balance: many sources of stamina damage have been adjusted, check PR for details
/cl
2019-06-03 11:16:56 +12:00

187 lines
5.7 KiB
Plaintext

/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 20
light_range = 2
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
flag = "laser"
eyeblur = 2
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
light_color = LIGHT_COLOR_RED
ricochets_max = 50 //Honk!
ricochet_chance = 80
reflectable = REFLECT_NORMAL
/obj/item/projectile/beam/laser
tracer_type = /obj/effect/projectile/tracer/laser
muzzle_type = /obj/effect/projectile/muzzle/laser
impact_type = /obj/effect/projectile/impact/laser
/obj/item/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/item/projectile/beam/laser/on_hit(atom/target, blocked = FALSE)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
M.IgniteMob()
else if(isturf(target))
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser/wall
/obj/item/projectile/beam/weak
damage = 15
/obj/item/projectile/beam/weak/penetrator
armour_penetration = 50
/obj/item/projectile/beam/practice
name = "practice laser"
damage = 0
nodamage = TRUE
/obj/item/projectile/beam/scatter
name = "laser pellet"
icon_state = "scatterlaser"
damage = 5
/obj/item/projectile/beam/xray
name = "\improper X-ray beam"
icon_state = "xray"
damage = 15
irradiate = 300
range = 15
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF
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/item/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
damage = 30
damage_type = STAMINA
flag = "energy"
hitsound = 'sound/weapons/tap.ogg'
eyeblur = 0
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/item/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
/obj/item/projectile/beam/pulse/on_hit(atom/target, blocked = FALSE)
. = ..()
if (!QDELETED(target) && (isturf(target) || istype(target, /obj/structure/)))
target.ex_act(EXPLODE_HEAVY)
/obj/item/projectile/beam/pulse/shotgun
damage = 40
/obj/item/projectile/beam/pulse/heavy
name = "heavy pulse laser"
icon_state = "pulse1_bl"
var/life = 20
/obj/item/projectile/beam/pulse/heavy/on_hit(atom/target, blocked = FALSE)
life -= 10
if(life > 0)
. = BULLET_ACT_FORCE_PIERCE
..()
/obj/item/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
/obj/item/projectile/beam/emitter/singularity_pull()
return //don't want the emitters to miss
/obj/item/projectile/beam/lasertag
name = "laser tag beam"
icon_state = "omnilaser"
hitsound = null
damage = 0
damage_type = STAMINA
flag = "laser"
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
/obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = FALSE)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/M = target
if(istype(M.wear_suit))
if(M.wear_suit.type in suit_types)
M.adjustStaminaLoss(34)
/obj/item/projectile/beam/lasertag/redtag
icon_state = "laser"
suit_types = list(/obj/item/clothing/suit/bluetag)
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
light_color = LIGHT_COLOR_RED
tracer_type = /obj/effect/projectile/tracer/laser
muzzle_type = /obj/effect/projectile/muzzle/laser
impact_type = /obj/effect/projectile/impact/laser
/obj/item/projectile/beam/lasertag/redtag/hitscan
hitscan = TRUE
/obj/item/projectile/beam/lasertag/bluetag
icon_state = "bluelaser"
suit_types = list(/obj/item/clothing/suit/redtag)
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/item/projectile/beam/lasertag/bluetag/hitscan
hitscan = TRUE
/obj/item/projectile/beam/instakill
name = "instagib laser"
icon_state = "purple_laser"
damage = 200
damage_type = BURN
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
light_color = LIGHT_COLOR_PURPLE
/obj/item/projectile/beam/instakill/blue
icon_state = "blue_laser"
impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
light_color = LIGHT_COLOR_BLUE
/obj/item/projectile/beam/instakill/red
icon_state = "red_laser"
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser
light_color = LIGHT_COLOR_RED
/obj/item/projectile/beam/instakill/on_hit(atom/target)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/M = target
M.visible_message("<span class='danger'>[M] explodes into a shower of gibs!</span>")
M.gib()