mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-27 18:12:00 +00:00
* 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>
89 lines
2.5 KiB
Plaintext
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 ..()
|