mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-26 06:40:08 +01:00
[MIRROR] Radiation Refactor (#12578)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
co-authored by
Cameron Lennox
parent
d6ba53185d
commit
65ff1fd61a
@@ -18,6 +18,7 @@
|
||||
var/upgrading = FALSE
|
||||
var/applies_material_colour = 1
|
||||
var/wall_type = /turf/simulated/wall
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/girder/Initialize(mapload, var/material_key)
|
||||
. = ..()
|
||||
@@ -42,9 +43,16 @@
|
||||
/obj/structure/girder/proc/radiate()
|
||||
var/total_radiation = girder_material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0)
|
||||
if(!total_radiation)
|
||||
return
|
||||
return FALSE
|
||||
|
||||
SSradiation.radiate(src, total_radiation)
|
||||
radiation_pulse(
|
||||
src,
|
||||
max_range = 5,
|
||||
threshold = RAD_MEDIUM_INSULATION,
|
||||
chance = URANIUM_IRRADIATION_CHANCE,
|
||||
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
|
||||
strength = total_radiation
|
||||
)
|
||||
return total_radiation
|
||||
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
density = FALSE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
can_atmos_pass = ATMOS_PASS_NO
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
alpha = 150
|
||||
|
||||
/obj/structure/holosign/barrier/combifan/Destroy()
|
||||
@@ -75,6 +76,7 @@
|
||||
icon_state = "holo_medical"
|
||||
alpha = 125
|
||||
var/buzzed = 0
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, border_dir)
|
||||
. = ..()
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
var/can_pick = TRUE //can it be picked/bypassed?
|
||||
var/lock_difficulty = 1 //multiplier to picking/bypassing time
|
||||
var/keysound = 'sound/items/toolbelt_equip.ogg'
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
TemperatureAct(exposed_temperature)
|
||||
@@ -242,19 +243,57 @@
|
||||
/obj/structure/simple_door/process()
|
||||
if(!material.radioactivity)
|
||||
return
|
||||
SSradiation.radiate(src, round(material.radioactivity/3))
|
||||
radiation_pulse(
|
||||
src,
|
||||
max_range = 5,
|
||||
threshold = RAD_MEDIUM_INSULATION,
|
||||
chance = round((material.radioactivity * 0.33), 0.1),
|
||||
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
|
||||
strength = material.radioactivity
|
||||
)
|
||||
|
||||
/obj/structure/simple_door/iron/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_IRON)
|
||||
|
||||
/obj/structure/simple_door/silver
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/simple_door/silver/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_SILVER)
|
||||
|
||||
/obj/structure/simple_door/gold
|
||||
rad_insulation = RAD_HEAVY_INSULATION
|
||||
|
||||
/obj/structure/simple_door/gold/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_GOLD)
|
||||
|
||||
/obj/structure/simple_door/uranium
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
var/last_event = 0
|
||||
/// Mutex to prevent infinite recursion when propagating radiation pulses
|
||||
var/active = null
|
||||
|
||||
/obj/structure/simple_door/uranium/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_URANIUM)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/simple_door/uranium/proc/radiate()
|
||||
SIGNAL_HANDLER
|
||||
if(active)
|
||||
return
|
||||
if(world.time <= last_event + 1.5 SECONDS)
|
||||
return
|
||||
active = TRUE
|
||||
radiation_pulse(
|
||||
src,
|
||||
max_range = 3,
|
||||
threshold = RAD_LIGHT_INSULATION,
|
||||
chance = URANIUM_IRRADIATION_CHANCE,
|
||||
minimum_exposure_time = URANIUM_RADIATION_MINIMUM_EXPOSURE_TIME,
|
||||
strength = 5
|
||||
)
|
||||
last_event = world.time
|
||||
active = FALSE
|
||||
|
||||
/obj/structure/simple_door/sandstone/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_SANDSTONE)
|
||||
@@ -262,9 +301,13 @@
|
||||
/obj/structure/simple_door/phoron/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_PHORON)
|
||||
|
||||
/obj/structure/simple_door/diamond
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/structure/simple_door/diamond/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_DIAMOND)
|
||||
|
||||
//I was going to give wooden doors RAD_VERY_LIGHT_INSULATION but they need a proper parent instead of this garbage.
|
||||
/obj/structure/simple_door/wood/Initialize(mapload,var/material_name)
|
||||
. = ..(mapload, material_name || MAT_WOOD)
|
||||
knock_sound = 'sound/machines/door/knock_wood.wav'
|
||||
|
||||
@@ -261,10 +261,8 @@
|
||||
|
||||
//Yes, showers are super powerful as far as washing goes.
|
||||
/obj/machinery/shower/proc/wash_atom(atom/A)
|
||||
/* //TG cleans rads and only does CLEAN_WASH, not sure if that's wanted here.
|
||||
A.wash(CLEAN_RAD | CLEAN_TYPE_WEAK) // Clean radiation non-instantly
|
||||
A.wash(CLEAN_WASH)
|
||||
*/
|
||||
A.wash(CLEAN_SCRUB)
|
||||
reagents.splash(A, reaction_volume / 20, 1, TRUE, min_spill = 0, max_spill = 0) //Reaction volume needs to be divided by 20 due to a larger internal volume
|
||||
|
||||
@@ -274,6 +272,7 @@
|
||||
check_heat(L)
|
||||
L.extinguish_mob()
|
||||
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
|
||||
L.radiation = CLAMP(L.radiation - 5, 0, RADIATION_CAP)
|
||||
|
||||
if(!iscarbon(A))
|
||||
return
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass.
|
||||
var/silicate = 0 // number of units of silicate
|
||||
var/fulltile = FALSE // Set to true on full-tile variants.
|
||||
rad_insulation = RAD_VERY_LIGHT_INSULATION //Windows can have multiple placed on one tile, meaning you have to account for the potential that someone could just build a bunch of windows on one tile to prevent rads entirely.
|
||||
|
||||
/obj/structure/window/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -520,6 +521,7 @@
|
||||
maxhealth = 80
|
||||
fulltile = TRUE
|
||||
flags = NONE
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/window/phoronreinforced
|
||||
name = "reinforced borosilicate window"
|
||||
@@ -533,12 +535,14 @@
|
||||
damage_per_fire_tick = 1.0 // This should last for 80 fire ticks if the window is not damaged at all. The idea is that borosilicate windows have something like ablative layer that protects them for a while.
|
||||
maxhealth = 80.0
|
||||
force_threshold = 10
|
||||
rad_insulation = RAD_LIGHT_INSULATION
|
||||
|
||||
/obj/structure/window/phoronreinforced/full
|
||||
icon_state = "phoronrwindow-full"
|
||||
maxhealth = 160
|
||||
fulltile = TRUE
|
||||
flags = NONE
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
/obj/structure/window/reinforced
|
||||
name = "reinforced window"
|
||||
@@ -584,6 +588,7 @@
|
||||
basestate = "w"
|
||||
dir = 5
|
||||
force_threshold = 7
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
|
||||
/obj/structure/window/reinforced/polarized
|
||||
name = "electrochromic window"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
damage_per_fire_tick = 1.0
|
||||
maxhealth = 100.0
|
||||
force_threshold = 10
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/structure/window/titanium/full
|
||||
icon_state = "window-full"
|
||||
@@ -30,6 +31,7 @@
|
||||
damage_per_fire_tick = 1.0
|
||||
maxhealth = 120.0
|
||||
force_threshold = 10
|
||||
rad_insulation = RAD_EXTREME_INSULATION
|
||||
|
||||
/obj/structure/window/plastitanium/full
|
||||
icon_state = "window-full"
|
||||
|
||||
Reference in New Issue
Block a user