Files
Bubberstation/code/modules/projectiles/projectile/special/temperature.dm
SkyratBot 32714950c9 [MIRROR] Pyro and cryo beams (the genetics powers) adjust temperature more severely, additional effects to make them more meaningfully interact with the world (#28799)
* Pyro and cryo beams (the genetics powers) adjust temperature more severely, additional effects to make them more meaningfully interact with the world (#84628)

## About The Pull Request

Pyro and cryo beams now adjust temperature by a much larger margin. This
is to help them remain useful against....humans. Just straight up naked
humans.

Pyro beams can ignite objects and heat reagents within an object. Cryo
beams freeze reagents in an object.

Cryo beams directly inflict the freezing blast status effect so that you
absolutely will slow someone down on hit. No more fucking around with
temp to MAYBE get some kind of effect.

## Why It's Good For The Game

There was a point where cryokinesis was actually fairly good at slowing
people down. Unfortunately, the same person who last touched temperature
code also made it nearly unusable against regular human targets due to
the rapid pace at which humans normalize their temperature. It takes a
good while before temperature slowdown starts to take effect.

Pyro beams have additional on-hit effects, which cryobeam does not.
Cryobeams only have the temperature adjustment and as noted, it is quite
weak. Being on fire starts to damage equipment and present a more
tangible danger in some environments, such as plasma floods or having
just been hit with an accelerant such as alcohol.

By including a status effect onto the cryo beam that forces the target
to slow down, we avoid the issue of people ignoring the effect of the
cryobeam entirely as a meaningful attack compared to being shot by a
pryro beam, which will usually cause people to start panicking or moving
to remove the fire in some way.

I also think by adding some additional interactions to the beam to make
them meaningfully affect some world objects, like flammable objects,
helps to realizes the idea a bit better of them being blasters of
temperature rather than just being bullets. It means it goes a little
beyond just being a weapon and potentially now a tool. (It was thinking
of Bioshock's plasmid advertising when I made this, like lighting
cigarettes.)

## Changelog
🆑
balance: Cryokinesis and pyrokinesis more severely adjust temperature.
balance: Cryokinesis forces a target to slow down on hit for a few
seconds.
balance: Pyrokinesis can ignite objects.
balance: Temperature projectiles change the temperature of the target's
contained reagents.
/🆑

* Pyro and cryo beams (the genetics powers) adjust temperature more severely, additional effects to make them more meaningfully interact with the world

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2024-07-12 18:24:59 +05:30

89 lines
2.5 KiB
Plaintext

/obj/projectile/temp
name = "freeze beam"
icon_state = "ice_2"
damage = 0
damage_type = BURN
armor_flag = ENERGY
var/temperature = -50 // reduce the body temperature by 50 points
/obj/projectile/temp/is_hostile_projectile()
return temperature != 0 // our damage is done by cooling or heating (casting to boolean here)
/obj/projectile/temp/on_hit(atom/target, blocked = 0, pierce_hit)
. = ..()
if(iscarbon(target))
var/mob/living/carbon/hit_mob = target
var/thermal_protection = 1 - hit_mob.get_insulation_protection(hit_mob.bodytemperature + temperature)
// The new body temperature is adjusted by the bullet's effect temperature
// Reduce the amount of the effect temperature change based on the amount of insulation the mob is wearing
hit_mob.adjust_bodytemperature((thermal_protection * temperature) + temperature)
else if(isliving(target))
var/mob/living/L = target
// the new body temperature is adjusted by the bullet's effect temperature
L.adjust_bodytemperature((1 - blocked) * temperature)
if(isobj(target))
var/obj/objectification = target
if(objectification.reagents)
var/datum/reagents/reagents = objectification.reagents
reagents?.expose_temperature(temperature)
/obj/projectile/temp/hot
name = "heat beam"
icon_state = "lava"
temperature = 100 // Raise the body temp by 100 points
/obj/projectile/temp/cryo
name = "cryo beam"
range = 9
temperature = -350 // Single slow shot reduces temp greatly
/obj/projectile/temp/cryo/on_hit(atom/target, blocked = 0, pierce_hit)
. = ..()
if(isliving(target))
var/mob/living/living_target = target
living_target.apply_status_effect(/datum/status_effect/freezing_blast)
/obj/projectile/temp/cryo/on_range()
var/turf/T = get_turf(src)
if(isopenturf(T))
var/turf/open/O = T
O.freeze_turf()
return ..()
/obj/projectile/temp/pyro
name = "hot beam"
icon_state = "firebeam" // sets on fire, diff sprite!
range = 9
temperature = 350
/obj/projectile/temp/pyro/on_hit(atom/target, blocked, pierce_hit)
. = ..()
if(!.)
return
if(isobj(target))
var/obj/objectification = target
if(objectification.resistance_flags & ON_FIRE) //Don't burn something already on fire
return
objectification.fire_act(temperature)
return
if(isliving(target))
var/mob/living/living_target = target
living_target.adjust_fire_stacks(2)
living_target.ignite_mob()
/obj/projectile/temp/pyro/on_range()
var/turf/location = get_turf(src)
new /obj/effect/hotspot(location)
location.hotspot_expose(700, 50, 1)
return ..()