diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 2ddf8698ca5..0924648d33f 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -237,8 +237,7 @@ ..(heavy) explosion(src.loc, 0, 0, 4, 3, 0) new /obj/effect/decal/cleanable/greenglow(get_turf(src)) - for(var/mob/living/L in view(5, src)) - L.irradiate(40) + radiation_pulse(get_turf(src), 2, 5, 50, 1) //Meaty Ore /obj/effect/meteor/meaty diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index e703f41c727..ba606e037ec 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -146,8 +146,7 @@ ..() /obj/machinery/door/airlock/uranium/proc/radiate() - for(var/mob/living/L in range (3,src)) - L.irradiate(15) + radiation_pulse(get_turf(src), 3, 3, 15, 0) return /obj/machinery/door/airlock/plasma diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index ac8c7e541d5..531f20faa01 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -500,10 +500,6 @@ /obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() if(..()) - for(var/mob/living/carbon/M in view(chassis)) - if(istype(M,/mob/living/carbon/human)) - M.irradiate(rad_per_cycle*3) - else - M.irradiate(rad_per_cycle) + radiation_pulse(get_turf(src), 2, 7, rad_per_cycle, 1) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index f77c8951f4f..3e081af2025 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -98,7 +98,7 @@ effective or pretty fucking useless. if(M) if(intensity >= 5) M.apply_effect(round(intensity/1.5), PARALYZE) - M.irradiate(intensity*10) + M.rad_act(intensity*10) else user << "The radioactive microlaser is still recharging." diff --git a/code/game/objects/items/nuke_tools.dm b/code/game/objects/items/nuke_tools.dm index ee10b83dbc9..f8a0a093a12 100644 --- a/code/game/objects/items/nuke_tools.dm +++ b/code/game/objects/items/nuke_tools.dm @@ -23,8 +23,7 @@ if(cooldown < world.time - 60) cooldown = world.time flick("plutonium_core_pulse", src) - for(var/mob/living/L in range(4,get_turf(src))) - L.irradiate(40) + radiation_pulse(get_turf(src), 1, 4, 40, 1) //nuke core box, for carrying the core /obj/item/nuke_core_container diff --git a/code/game/objects/radiation.dm b/code/game/objects/radiation.dm new file mode 100644 index 00000000000..2498b6fe825 --- /dev/null +++ b/code/game/objects/radiation.dm @@ -0,0 +1,35 @@ +/proc/radiation_pulse(turf/epicenter, heavy_range, light_range, severity, log=0) + if(!epicenter) return + + if(!istype(epicenter, /turf)) + epicenter = get_turf(epicenter.loc) + + if(log) + message_admins("Radiation pulse with size ([heavy_range], [light_range]) and severity [severity] in area [epicenter.loc.name] ") + log_game("Radiation pulse with size ([heavy_range], [light_range]) and severity [severity] in area [epicenter.loc.name] ") + + if(heavy_range > light_range) + light_range = heavy_range + + for(var/atom/T in range(light_range, epicenter)) + var/distance = get_dist(epicenter, T) + if(distance < 0) + distance = 0 + if(distance < heavy_range) + T.rad_act(severity) + else if(distance == heavy_range) + if(prob(50)) + T.rad_act(severity) + else + T.rad_act(severity / 2) + else if(distance <= light_range) + T.rad_act(severity / 2) + return 1 + +/atom/proc/rad_act(var/severity) + return 1 + +/mob/living/rad_act(amount) + if(amount) + var/blocked = run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.") + apply_effect(amount, IRRADIATE, blocked) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index d5534842ddb..188911cc2a0 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -169,8 +169,7 @@ if(!active) if(world.time > last_event+15) active = 1 - for(var/mob/living/L in range(3,src)) - L.irradiate(4) + radiation_pulse(get_turf(src), 0, 3, 15, 1) for(var/turf/simulated/wall/mineral/uranium/T in orange(1,src)) T.radiate() last_event = world.time diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 8eec60f7283..f54046e7065 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -176,8 +176,7 @@ if(!active) if(world.time > last_event+15) active = 1 - for(var/mob/living/L in range(3,src)) - L.irradiate(12) + radiation_pulse(get_turf(src), 3, 3, 12, 0) last_event = world.time active = null return diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm index b1b1a728cf4..612aec92013 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -163,8 +163,7 @@ if(!active) if(world.time > last_event+15) active = 1 - for(var/mob/living/L in range(3,src)) - L.irradiate(1) + radiation_pulse(get_turf(src), 3, 3, 1, 0) for(var/turf/simulated/floor/mineral/uranium/T in orange(1,src)) T.radiate() last_event = world.time diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index be9d5945c9d..84aae77504d 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -80,8 +80,7 @@ if(!active) if(world.time > last_event+15) active = 1 - for(var/mob/living/L in range(3,src)) - L.irradiate(4) + radiation_pulse(get_turf(src), 3, 3, 4, 0) for(var/turf/simulated/wall/mineral/uranium/T in orange(1,src)) T.radiate() last_event = world.time diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index c83ea419df4..13c57a9a5a6 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -37,9 +37,9 @@ if(istype(C, /mob/living/carbon/human)) var/mob/living/carbon/human/H = C if(prob(5)) - H.irradiate(rand(100, 160)) + H.rad_act(rand(100, 160)) else - H.irradiate(rand(15, 75)) + H.rad_act(rand(15, 75)) if(prob(25)) if(prob(75)) randmutb(H) @@ -49,7 +49,7 @@ else if(istype(C, /mob/living/carbon/monkey)) var/mob/living/carbon/monkey/M = C - M.irradiate(rand(15, 75)) + M.rad_act(rand(15, 75)) /datum/round_event/radiation_storm/end() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2b585fa1f89..4a15c82b74d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -684,7 +684,7 @@ if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) step_towards(hand, src) src << "\The [S] pulls \the [hand] from your grip!" - irradiate(current_size * 3) + rad_act(current_size * 3) if(mob_negates_gravity()) return ..() diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index cd5c473014b..95105c87bdc 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -122,7 +122,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) switch(proj_type) if(/obj/item/projectile/energy/floramut) if(prob(15)) - H.irradiate(rand(30,80)) + H.rad_act(rand(30,80)) H.Weaken(5) H.visible_message("[H] writhes in pain as \his vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") if(prob(80)) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index c30c3527d60..a63a44b5a03 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -293,7 +293,4 @@ if(stat || paralysis || stunned || weakened || restrained()) return 1 -/mob/living/proc/irradiate(amount) - if(amount) - var/blocked = run_armor_check(null, "rad", "Your clothes feel warm", "Your clothes feel warm") - apply_effect(amount, IRRADIATE, blocked) +//Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs. diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 8eb7af7db8f..104a437c2f2 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -350,8 +350,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 /obj/machinery/gravity_generator/main/proc/pulse_radiation() - for(var/mob/living/L in view(7, src)) - L.irradiate(20) + radiation_pulse(get_turf(src), 3, 7, 20, 1) // Shake everyone on the z level to let them know that gravity was enagaged/disenagaged. /obj/machinery/gravity_generator/main/proc/shake_everyone() diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index a9ff8952161..889d9a3189b 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -56,7 +56,7 @@ /obj/effect/accelerated_particle/proc/toxmob(mob/living/M) - M.irradiate(energy*6) + M.rad_act(energy*6) M.updatehealth() return diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index b9578936e24..6223ff52e7c 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -364,13 +364,13 @@ radiation += round((energy-150)/10,1) radiationmin = round((radiation/5),1) for(var/mob/living/M in view(toxrange, src.loc)) - M.irradiate(rand(radiationmin,radiation)) + M.rad_act(rand(radiationmin,radiation)) /obj/singularity/proc/combust_mobs() for(var/mob/living/carbon/C in orange(20, src)) C.visible_message("[C]'s skin bursts into flame!", \ - "You feel an inner fire as your skin is suddenly covered in fire!") + "You feel an inner fire as your skin bursts into flames!") C.adjust_fire_stacks(5) C.IgniteMob() return diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 9fb8bfb9d52..2d01b3cf8b3 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -119,7 +119,7 @@ var/mob/living/carbon/human/H = mob H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) ) - mob.irradiate(rads) + mob.rad_act(rads) explode() @@ -181,7 +181,7 @@ for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) - l.irradiate(rads) + l.rad_act(rads) power -= (power/500)**3 @@ -259,7 +259,7 @@ playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) - user.irradiate(150) + radiation_pulse(get_turf(src), 1, 1, 150, 1) /obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj) @@ -292,9 +292,8 @@ power += 200 //Some poor sod got eaten, go ahead and irradiate people nearby. + radiation_pulse(get_turf(src), 4, 10, 500, 1) for(var/mob/living/L in range(10)) - var/rads = 500 * sqrt( 1 / (get_dist(L, src) + 1) ) - L.irradiate(rads) investigate_log("has irradiated [L] after consuming [AM].", "supermatter") if(L in view()) L.show_message("As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.", 1,\ diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index a5752e23273..dbe0225dd79 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -90,11 +90,11 @@ switch(fail_tick) if(0 to 200) fail_tick += (2*(100-reliability)) - M.irradiate(40) + M.rad_act(40) M << "Your [name] feels warmer." if(201 to INFINITY) SSobj.processing.Remove(src) - M.irradiate(80) + M.rad_act(80) crit_fail = 1 M << "Your [name]'s reactor overloads!" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 8924a827921..bacc3ef9529 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -289,9 +289,7 @@ ejectItem() if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!") - for(var/mob/living/m in oview(1, src)) - m.irradiate(25) - investigate_log("Experimentor has irradiated [m]", "experimentor") //One entry per person so we know what was irradiated. + radiation_pulse(get_turf(src), 1, 1, 25, 1) ejectItem(TRUE) if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions, spewing toxic waste!") diff --git a/config/admins.txt b/config/admins.txt index b4a042557de..e28d9df748e 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -7,7 +7,7 @@ # NOTE: if the rank-name cannot be found in admin_ranks.txt, they will not be adminned! ~Carn # # NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. # ############################################################################################### -Optimumtact = Host +Xhuis = Host MrStonedOne = Game Master microscopics = Game Master Gun Hog = Game Master diff --git a/tgstation.dme b/tgstation.dme index 32d682bff36..5b1933f0518 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -544,6 +544,7 @@ #include "code\game\objects\explosion.dm" #include "code\game\objects\items.dm" #include "code\game\objects\objs.dm" +#include "code\game\objects\radiation.dm" #include "code\game\objects\structures.dm" #include "code\game\objects\weapons.dm" #include "code\game\objects\effects\aliens.dm"