mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
78 lines
2.0 KiB
Plaintext
78 lines
2.0 KiB
Plaintext
|
|
/obj/machinery/rust/rad_source
|
|
var/mega_energy = 0
|
|
var/time_alive = 0
|
|
var/source_alive = 2
|
|
|
|
/obj/machinery/rust/rad_source/process()
|
|
..()
|
|
//fade away over time
|
|
if(source_alive > 0)
|
|
time_alive++
|
|
source_alive--
|
|
else
|
|
time_alive -= 0.1
|
|
if(time_alive < 0)
|
|
qdel(src)
|
|
|
|
//radiate mobs nearby here
|
|
//
|
|
|
|
/*
|
|
/obj/machinery/rust/proc/RadiateParticle(var/energy, var/ionizing, var/dir = 0)
|
|
if(!dir)
|
|
RadiateParticleRand(energy, ionizing)
|
|
var/obj/effect/accelerated_particle/particle = new /obj/effect/accelerated_particle/particle(get_turf(src))
|
|
particle.target = target
|
|
particle.ionizing = ionizing
|
|
particle.dir = dir
|
|
particle.startMove(1)
|
|
if(energy)
|
|
particle.energy = energy
|
|
//particle.invisibility = 2
|
|
//
|
|
return particle
|
|
|
|
/obj/machinery/rust/proc/RadiateParticleRand(var/energy, var/ionizing)
|
|
var/turf/target
|
|
var/particle_range = 3 * round(energy) + rand(3,20)
|
|
if(energy > 1)
|
|
//for penetrating radiation
|
|
for(var/mob/M in range(particle_range))
|
|
var/dist_ratio = particle_range / get_dist(M, src)
|
|
//particles are more likely to hit a person if the person is closer
|
|
// 1/8 = 12.5% (closest)
|
|
// 1/360 = 0.27% (furthest)
|
|
// variation of 12.2%
|
|
if( rand() < (0.25 + dist_ratio * 12.5) )
|
|
target = get_turf(M)
|
|
break
|
|
if(!target)
|
|
target = pick(range(particle_range))
|
|
else
|
|
//for slower, non-penetrating radiation
|
|
for(var/mob/M in view(particle_range))
|
|
var/dist_ratio = particle_range / get_dist(M, src)
|
|
if( rand() < (0.25 + dist_ratio * 12.5) )
|
|
target = get_turf(M)
|
|
break
|
|
if(!target)
|
|
target = pick(view(particle_range))
|
|
var/obj/effect/accelerated_particle/particle = new /obj/effect/accelerated_particle/particle(get_turf(src))
|
|
particle.target = target
|
|
particle.ionizing = ionizing
|
|
particle.dir = dir
|
|
particle.startMove(1)
|
|
if(energy)
|
|
particle.energy = energy
|
|
//particle.invisibility = 2
|
|
//
|
|
return particle
|
|
*/
|
|
|
|
/*
|
|
/obj/machinery/computer/rust_radiation_monitor
|
|
name = "Radiation Monitor"
|
|
icon_state = "power"
|
|
*/
|