Radiation Rework (#28320)

* initial changes

* Rad wave is working. now to implement the rest

* Makes the waves square

* Makes wave square

* multiplies the strength in all instances of radiation_pulse by 4 because each pulse makes one wave instead of 4 now

* Undef thing and apply suggestion

* Make radiation_pulse() not radiate the radiation source and implements contamination

* Adds contamination to uranium walls and meteors

* Fixes stuff

* Handle some contamination on attack still need to take care of meteors

* Fixed the meteor stuff

* Introduce emission types

* moves contaminate_touch to an atom proc and renames it to contaminate_atom

* deduplicates some contamination code

* Move inherent radioactivity to a component and signals from the atom vars and behaviour

* fix some things with the new component

* Update inherent_radioactivity.dm

* implement contaminating things that hit things that are inherently radioactive

* window things

* adds emission type to the rad_act call

* Changes radiation insulation values on a bunch of stuff

* fixes radioactive component radiating the wrong type

* more adjustments

* refactros rad_act

* adjustments to collector power production

* Adds plastitaniumglass windows and makes further adjustments

* Adds sprites to the shards and plastitanium directional window

* Update misc_cleanables.dm

* removes alpha rad insulation from floor turfs

* Fixes a bug with the starting tile of radiation waves

* More adjustments

* Adjusting singularity rad production

* reduces window half life a bit to make power smoother and buffs full window rad conversion

* Strengthens gamma and beta radiation effect on mobs.

* Makes radsuit block radiation completely

* Fixes Geiger Counters

* Fixes contamination not irradiating the contaminated thing

* Fixes inherent radioactivity not processing. Also makes it stop processing when a nuke core is contained

* Fixes ghost contamination

* Adds info to the collector

* Handles alpha radiation better on humans and changes some instances of rad_act to base_rad_act

* oops

* adjustments and fixes to alpha rad handling on mobs

* Make collector info more compact

* Core no longer radiates and contaminates from within the nuke until the plates are removed

* Contamination no longer counts as being inside a mob(it is supposed to be surface level)

* Adds inherent radioactivity to a bunch of uranium things. makes it all process.

* Nerf full windows

* Adjustments to collector and fulltile window radiation absorption

* Reduces passive contamination, especially while on the floor

* Adds different rad types to the geiger counter and fixes a runtime

* Makes full tile windows strong again and disallows building them on top of collectors

* adds emissive blockers to the rad blacklist and gives windows and collectors priority when irradiating for increased consistency

* Gives each contamination type it's own color.

* Gives each contamination type it's own color.  And makes the rad hud display them separately

* Changes how much the radiation wave affects the source tile, adds decay for performance reasons and adjusts collector parameters as well as SM and singulo rad production

* improves performance at very high rad amounts

* Fixes supermatter sliver box not containing radiation

* Restores supermatter sliver to old behaviour(not inherently radioactive)

* Slight nerf to fulltile windows and removes an unnecessary multiplication from rad wave processing

* Removes redundant line from window rad act

* Fixes radiation waves ignoring walls

* fixes it better

* more adjustments to collector stats

* Adjustment to collector gamma absorption

* increases grille beta blocking

* Review changes
This commit is contained in:
Migratingcocofruit
2025-03-02 22:34:45 +02:00
committed by GitHub
parent e29a599118
commit ebf7fdbfd2
66 changed files with 945 additions and 384 deletions
@@ -36,6 +36,9 @@
/obj/effect/decal/cleanable/glass/plasma
icon_state = "plasmatiny"
/obj/effect/decal/cleanable/glass/plastitanium
icon_state = "plastitaniumtiny"
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
+3 -1
View File
@@ -282,7 +282,9 @@ GLOBAL_LIST_INIT(meteors_gore, list(/obj/effect/meteor/meaty = 5, /obj/effect/me
..()
explosion(loc, 0, 0, 4, 3, 0)
new /obj/effect/decal/cleanable/greenglow(get_turf(src))
radiation_pulse(src, 5000, 7)
radiation_pulse(src, 20000, 7, ALPHA_RAD)
for(var/turf/target_turf in range(loc, 3))
contaminate_target(target_turf, src, 2000, ALPHA_RAD)
//Hot take on this one. This often hits walls. It really has to breach into somewhere important to matter. This at leats makes the area slightly dangerous for a bit
/obj/effect/meteor/bananium
+1 -1
View File
@@ -75,7 +75,7 @@
var/radiation_amount
/obj/effect/mine/dnascramble/mineEffect(mob/living/victim)
victim.rad_act(radiation_amount)
victim.base_rad_act(src, radiation_amount, BETA_RAD)
if(!victim.dna || HAS_TRAIT(victim, TRAIT_GENELESS))
return
randmutb(victim)
@@ -15,14 +15,23 @@
slot_flags = ITEM_SLOT_BELT
flags = NOBLUDGEON
materials = list(MAT_METAL = 210, MAT_GLASS = 150)
rad_insulation_alpha = RAD_ONE_PERCENT
rad_insulation_beta = RAD_ONE_PERCENT
rad_insulation_gamma = RAD_ONE_PERCENT
var/grace = RAD_GEIGER_GRACE_PERIOD
var/datum/looping_sound/geiger/soundloop
var/scanning = FALSE
var/radiation_count = 0
var/current_tick_amount = 0
var/last_tick_amount = 0
var/radiation_count_alpha = 0
var/radiation_count_beta = 0
var/radiation_count_gamma = 0
var/current_tick_amount_alpha = 0
var/current_tick_amount_beta = 0
var/current_tick_amount_gamma = 0
var/last_tick_amount_alpha = 0
var/last_tick_amount_beta = 0
var/last_tick_amount_gamma = 0
var/fail_to_receive = 0
var/current_warning = 1
@@ -40,19 +49,33 @@
/obj/item/geiger_counter/process()
if(scanning)
radiation_count -= radiation_count / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count += current_tick_amount / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_alpha -= radiation_count_alpha / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_alpha += current_tick_amount_alpha / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_beta -= radiation_count_beta / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_beta += current_tick_amount_beta / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_gamma -= radiation_count_gamma / RAD_GEIGER_MEASURE_SMOOTHING
radiation_count_gamma += current_tick_amount_gamma / RAD_GEIGER_MEASURE_SMOOTHING
if(current_tick_amount)
if(current_tick_amount_alpha)
grace = RAD_GEIGER_GRACE_PERIOD
last_tick_amount = current_tick_amount
last_tick_amount_alpha = current_tick_amount_alpha
if(current_tick_amount_beta)
grace = RAD_GEIGER_GRACE_PERIOD
last_tick_amount_beta = current_tick_amount_beta
if(current_tick_amount_gamma)
grace = RAD_GEIGER_GRACE_PERIOD
last_tick_amount_gamma = current_tick_amount_gamma
else if(!emagged)
grace--
if(grace <= 0)
radiation_count = 0
radiation_count_alpha = 0
radiation_count_beta = 0
radiation_count_gamma = 0
current_tick_amount = 0
current_tick_amount_alpha = 0
current_tick_amount_beta = 0
current_tick_amount_gamma = 0
update_icon(UPDATE_ICON_STATE)
update_sound()
@@ -65,6 +88,7 @@
if(emagged)
. += "<span class='warning'>The display seems to be incomprehensible.</span>"
return
var/radiation_count = max(radiation_count_alpha, radiation_count_beta, radiation_count_gamma)
switch(radiation_count)
if(-INFINITY to RAD_LEVEL_NORMAL)
. += "<span class='notice'>Ambient radiation level count reports that all is well.</span>"
@@ -79,7 +103,9 @@
if(RAD_LEVEL_CRITICAL + 1 to INFINITY)
. += "<span class='boldannounceic'>Ambient radiation levels above critical level!</span>"
. += "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>"
. += "<span class='notice'>The alpha radiation amount detected was [last_tick_amount_alpha]</span>"
. += "<span class='notice'>The beta radiation amount detected was [last_tick_amount_beta]</span>"
. += "<span class='notice'>The gamma radiation amount detected was [last_tick_amount_gamma]</span>"
/obj/item/geiger_counter/update_icon_state()
if(!scanning)
@@ -87,6 +113,7 @@
else if(emagged)
icon_state = "geiger_on_emag"
else
var/radiation_count = max(radiation_count_alpha + radiation_count_beta + radiation_count_gamma)
switch(radiation_count)
if(-INFINITY to RAD_LEVEL_NORMAL)
icon_state = "geiger_on_1"
@@ -103,17 +130,24 @@
/obj/item/geiger_counter/proc/update_sound()
var/datum/looping_sound/geiger/loop = soundloop
var/radiation_count = max(radiation_count_alpha, radiation_count_beta, radiation_count_gamma)
if(!scanning || !radiation_count)
loop.stop()
return
loop.last_radiation = radiation_count
loop.start()
/obj/item/geiger_counter/rad_act(amount)
. = ..()
/obj/item/geiger_counter/rad_act(atom/source, amount, emission_type)
amount *= 100
if(amount <= RAD_BACKGROUND_RADIATION || !scanning)
return
current_tick_amount += amount
switch(emission_type)
if(ALPHA_RAD)
current_tick_amount_alpha += amount
if(BETA_RAD)
current_tick_amount_beta += amount
if(GAMMA_RAD)
current_tick_amount_gamma += amount
update_icon(UPDATE_ICON_STATE)
/obj/item/geiger_counter/attack_self__legacy__attackchain(mob/user)
@@ -129,8 +163,12 @@
addtimer(CALLBACK(src, PROC_REF(scan), target, user), 20, TIMER_UNIQUE) // Let's not have spamming GetAllContents
else
user.visible_message("<span class='notice'>[user] scans [target] with [src].</span>", "<span class='danger'>You project [src]'s stored radiation into [target]!</span>")
target.rad_act(radiation_count)
radiation_count = 0
target.base_rad_act(src, radiation_count_alpha, ALPHA_RAD)
target.base_rad_act(src, radiation_count_beta, BETA_RAD)
target.base_rad_act(src, radiation_count_gamma, GAMMA_RAD)
radiation_count_alpha = 0
radiation_count_beta = 0
radiation_count_gamma = 0
return TRUE
/obj/item/geiger_counter/proc/scan(atom/A, mob/user)
@@ -158,7 +196,9 @@
return FALSE
user.visible_message("<span class='notice'>[user] refastens [src]'s maintenance panel!</span>", "<span class='notice'>You reset [src] to its factory settings!</span>")
emagged = FALSE
radiation_count = 0
radiation_count_alpha = 0
radiation_count_beta = 0
radiation_count_gamma = 0
update_icon(UPDATE_ICON_STATE)
return TRUE
else
@@ -170,7 +210,9 @@
if(!scanning)
to_chat(user, "<span class='warning'>[src] must be on to reset its radiation level!</span>")
return
radiation_count = 0
radiation_count_alpha = 0
radiation_count_beta = 0
radiation_count_gamma = 0
to_chat(user, "<span class='notice'>You flush [src]'s radiation counts, resetting it to normal.</span>")
update_icon(UPDATE_ICON_STATE)
@@ -198,8 +240,8 @@
RegisterSignal(user, COMSIG_ATOM_RAD_ACT, PROC_REF(redirect_rad_act))
listeningTo = user
/obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount)
rad_act(amount)
/obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount, emission_type)
base_rad_act(source, amount, emission_type)
/obj/item/geiger_counter/cyborg/dropped()
. = ..()
@@ -279,7 +279,9 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
recipes = GLOB.titaniumglass_recipes
GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
new /datum/stack_recipe/window("plastitanium window", /obj/structure/window/full/plastitanium, 2, time = 0 SECONDS, on_floor = TRUE, window_checks = TRUE)
new /datum/stack_recipe("plastitanium shard", /obj/item/shard/plastitanium, time = 0 SECONDS),
new /datum/stack_recipe/window("directional plastitanium window", /obj/structure/window/plastitanium, 1, time = 0 SECONDS, on_floor = TRUE, window_checks = TRUE),
new /datum/stack_recipe/window("fulltile plastitanium window", /obj/structure/window/full/plastitanium, 2, time = 0 SECONDS, on_floor = TRUE, window_checks = TRUE),
))
//////////////////////////////
@@ -295,6 +297,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 80, ACID = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
created_window = /obj/structure/window/plastitanium
full_window = /obj/structure/window/full/plastitanium
table_type = /obj/structure/table/glass/reinforced/plastitanium
+25 -17
View File
@@ -11,16 +11,19 @@
icon_state = "plutonium_core"
item_state = "plutoniumcore"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
flags_2 = RAD_NO_CONTAMINATE_2 //Don't have the item itself become irradiated when it makes radiation.
flags_2 = RAD_NO_CONTAMINATE_2 //This is made from radioactive material so cannot really be contaminated
var/cooldown = 0
var/pulseicon = "plutonium_core_pulse"
// Is this made from radioactive material or not.
var/radioactive_material = TRUE
/obj/item/nuke_core/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
if(radioactive_material)
var/datum/component/inherent_radioactivity/radioactivity = AddComponent(/datum/component/inherent_radioactivity, 0, 400, 0, 1.5)
START_PROCESSING(SSradiation, radioactivity)
/obj/item/nuke_core/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/nuke_core/attackby__legacy__attackchain(obj/item/nuke_core_container/container, mob/user)
@@ -29,12 +32,6 @@
else
return ..()
/obj/item/nuke_core/process()
if(cooldown < world.time - 6 SECONDS)
cooldown = world.time
flick(pulseicon, src)
radiation_pulse(src, 400, 2)
/obj/item/nuke_core/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is rubbing [src] against [user.p_themselves()]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return TOXLOSS
@@ -104,7 +101,11 @@
/obj/item/nuke_core_container/proc/seal()
if(!QDELETED(core))
STOP_PROCESSING(SSobj, core)
var/datum/component/inherent_radioactivity/radioactivity = core.GetComponent(/datum/component/inherent_radioactivity)
var/datum/component/radioactive/box_contamination = GetComponent(/datum/component/radioactive)
STOP_PROCESSING(SSradiation, radioactivity)
if(box_contamination)
box_contamination.RemoveComponent()
icon_state = "core_container_sealed"
playsound(src, 'sound/items/deconstruct.ogg', 60, TRUE)
if(ismob(loc))
@@ -123,7 +124,8 @@
/obj/item/nuke_core_container/proc/crack_open()
visible_message("<span class='boldnotice'>[src] bursts open!</span>")
if(core)
START_PROCESSING(SSobj, core)
var/datum/component/inherent_radioactivity/radioactivity = core.GetComponent(/datum/component/inherent_radioactivity)
START_PROCESSING(SSradiation, radioactivity)
icon_state = "core_container_cracked_loaded"
else
icon_state = "core_container_cracked_empty"
@@ -164,6 +166,7 @@
pulseicon = "supermatter_sliver_pulse"
w_class = WEIGHT_CLASS_BULKY //can't put it into bags
layer = ABOVE_MOB_LAYER + 0.02
radioactive_material = FALSE
/obj/item/nuke_core/supermatter_sliver/Initialize(mapload)
. = ..()
@@ -201,16 +204,17 @@
else
if(issilicon(user))
to_chat(user, "<span class='userdanger'>You try to touch [src] with one of your modules. Error!</span>")
radiation_pulse(user, 500, 2)
radiation_pulse(user, 2000, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
user.dust()
qdel(src)
return
to_chat(user, "<span class='danger'>As it touches [src], both [src] and [I] burst into dust!</span>")
radiation_pulse(user, 100)
radiation_pulse(user, 400, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
qdel(I)
qdel(src)
return ..()
/obj/item/nuke_core/supermatter_sliver/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
if(!isliving(hit_atom))
@@ -230,7 +234,7 @@
"<span class='userdanger'>You're hit by [src] and everything suddenly goes silent.\n[src] flashes into dust, and soon as you can register this, you do as well.</span>",
"<span class='hear'>Everything suddenly goes silent.</span>")
victim.dust()
radiation_pulse(src, 500, 2)
radiation_pulse(src, 2000, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
qdel(src)
@@ -243,7 +247,7 @@
user.visible_message("<span class='danger'>[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!</span>",
"<span class='userdanger'>You reach for [src] with your hands. That was dumb.</span>",
"<span class='hear'>Everything suddenly goes silent.</span>")
radiation_pulse(user, 500, 2)
radiation_pulse(user, 2000, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
user.dust()
@@ -268,9 +272,13 @@
to_chat(user, "<span class='warning'>Container is sealing...</span>")
addtimer(CALLBACK(src, PROC_REF(seal)), 10 SECONDS)
/obj/item/nuke_core_container/supermatter/seal()
if(!QDELETED(sliver))
STOP_PROCESSING(SSobj, sliver)
var/datum/component/radioactive/contamination = GetComponent(/datum/component/radioactive)
if(contamination)
contamination.RemoveComponent()
icon_state = "supermatter_container_sealed"
playsound(src, 'sound/items/deconstruct.ogg', 60, TRUE)
if(ismob(loc))
@@ -305,7 +313,7 @@
user.visible_message("<span class='danger'>[user] reaches out and tries to pick up [sliver]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!</span>",
"<span class='userdanger'>You reach for [sliver] with your hands. That was dumb.</span>",
"<span class='italics'>Everything suddenly goes silent.</span>")
radiation_pulse(user, 500, 2)
radiation_pulse(user, 2000, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
message_admins("[sliver] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].")
investigate_log("has consumed [key_name(user)].", "supermatter")
@@ -400,6 +408,6 @@
user.dust()
icon_state = "supermatter_tongs"
item_state = "supermatter_tongs"
radiation_pulse(src, 500, 2)
radiation_pulse(src, 2000, GAMMA_RAD)
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
QDEL_NULL(sliver)
@@ -37,13 +37,13 @@
icon_state = "gluon"
item_state = "grenade"
var/freeze_range = 4
var/rad_damage = 350
var/rad_damage = 1400
var/stamina_damage = 30
/obj/item/grenade/gluon/prime()
update_mob()
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
radiation_pulse(src, rad_damage)
radiation_pulse(src, rad_damage, BETA_RAD)
for(var/turf/simulated/floor/T in view(freeze_range, loc))
T.MakeSlippery(TURF_WET_ICE)
for(var/mob/living/carbon/L in T)
+10
View File
@@ -95,3 +95,13 @@
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
icon_prefix = "plasma"
welded_type = /obj/item/stack/sheet/plasmaglass
/obj/item/shard/plastitanium
name = "plastitanium shard"
desc = "A shard of plastitanium glass. Considerably tougher then normal glass shards. Apparently not tough enough to be a window."
force = 6
throwforce = 11
icon_state = "plastitaniumlarge"
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
icon_prefix = "plastitanium"
welded_type = /obj/item/stack/sheet/plastitaniumglass
+2 -1
View File
@@ -116,7 +116,8 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 50)
damage_deflection = 0
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_MEDIUM_INSULATION
rad_insulation_beta = RAD_MEDIUM_INSULATION
rad_insulation_gamma = RAD_LIGHT_INSULATION
var/initial_state
var/state_open = FALSE
var/is_operating = FALSE
@@ -44,7 +44,7 @@
if(prob(50))
empulse(src, 4, 10)
else
radiation_pulse(get_turf(src), 500, 2)
radiation_pulse(get_turf(src), 2000, BETA_RAD)
/obj/structure/fusionreactor/wrench_act(mob/user, obj/item/I)
. = TRUE
+7 -18
View File
@@ -14,7 +14,8 @@
icon_state = "wall-0"
base_icon_state = "wall"
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_MEDIUM_INSULATION
rad_insulation_beta = RAD_BETA_BLOCKER
rad_insulation_gamma = RAD_LIGHT_INSULATION
layer = TURF_LAYER
var/mineral = /obj/item/stack/sheet/metal
@@ -63,6 +64,7 @@
toggle(user)
/obj/structure/falsewall/attack_hand(mob/user)
. = ..()
toggle(user)
/obj/structure/falsewall/proc/toggle(mob/user)
@@ -217,23 +219,10 @@
smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_URANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_URANIUM_WALLS)
/obj/structure/falsewall/uranium/attackby__legacy__attackchain(obj/item/W as obj, mob/user as mob, params)
radiate()
..()
/obj/structure/falsewall/uranium/attack_hand(mob/user as mob)
radiate()
..()
/obj/structure/falsewall/uranium/proc/radiate()
if(!active)
if(world.time > last_event + 1.5 SECONDS)
active = TRUE
radiation_pulse(src, 150)
for(var/turf/simulated/wall/mineral/uranium/T in orange(1, src))
T.radiate()
last_event = world.time
active = FALSE
/obj/structure/falsewall/uranium/Initialize(mapload)
. = ..()
var/datum/component/inherent_radioactivity/radioactivity = AddComponent(/datum/component/inherent_radioactivity, 50, 0, 0, 1.5)
START_PROCESSING(SSradiation, radioactivity)
/*
* Other misc falsewall types
*/
+1 -1
View File
@@ -6,7 +6,7 @@
density = TRUE
layer = BELOW_OBJ_LAYER
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_VERY_LIGHT_INSULATION
rad_insulation_beta = RAD_HEAVY_INSULATION
cares_about_temperature = TRUE
var/state = GIRDER_NORMAL
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
+1
View File
@@ -14,6 +14,7 @@
max_integrity = 50
integrity_failure = 20
cares_about_temperature = TRUE
rad_insulation_beta = RAD_BETA_BLOCKER
var/rods_type = /obj/item/stack/rods
var/rods_amount = 2
var/rods_broken = 1
+2 -2
View File
@@ -70,7 +70,7 @@
/obj/structure/holosign/barrier/engineering
icon_state = "holosign_engi"
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_LIGHT_INSULATION
rad_insulation_beta = RAD_LIGHT_INSULATION
/obj/structure/holosign/barrier/atmos
name = "holo firelock"
@@ -81,7 +81,7 @@
anchored = TRUE
alpha = 150
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_LIGHT_INSULATION
rad_insulation_beta = RAD_LIGHT_INSULATION
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
. = ..()
@@ -10,7 +10,8 @@
max_integrity = 200
armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, RAD = 100, FIRE = 50, ACID = 50)
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
rad_insulation = RAD_MEDIUM_INSULATION
rad_insulation_beta = RAD_BETA_BLOCKER
rad_insulation_gamma = RAD_LIGHT_INSULATION
var/initial_state
var/state_open = FALSE
var/is_operating = FALSE
@@ -144,13 +145,12 @@
icon_state = "silver"
sheetType = /obj/item/stack/sheet/mineral/silver
max_integrity = 300
rad_insulation = RAD_HEAVY_INSULATION
/obj/structure/mineral_door/gold
name = "gold door"
icon_state = "gold"
sheetType = /obj/item/stack/sheet/mineral/gold
rad_insulation = RAD_HEAVY_INSULATION
rad_insulation_gamma = RAD_MEDIUM_INSULATION
/obj/structure/mineral_door/uranium
name = "uranium door"
@@ -167,7 +167,7 @@
/obj/structure/mineral_door/transparent
opacity = FALSE
rad_insulation = RAD_VERY_LIGHT_INSULATION
rad_insulation_beta = RAD_MEDIUM_INSULATION
/obj/structure/mineral_door/transparent/operate_update()
density = !density
@@ -205,7 +205,6 @@
icon_state = "diamond"
sheetType = /obj/item/stack/sheet/mineral/diamond
max_integrity = 1000
rad_insulation = RAD_EXTREME_INSULATION
/obj/structure/mineral_door/wood
name = "wood door"
@@ -216,7 +215,7 @@
hardness = 1
resistance_flags = FLAMMABLE
max_integrity = 200
rad_insulation = RAD_VERY_LIGHT_INSULATION
rad_insulation_beta = RAD_VERY_LIGHT_INSULATION
/obj/structure/mineral_door/wood/Initialize(mapload)
. = ..()
+4 -19
View File
@@ -71,25 +71,10 @@
desc = "This statue has a sickening green colour."
icon_state = "eng"
/obj/structure/statue/uranium/attackby__legacy__attackchain(obj/item/W, mob/user, params)
radiate()
return ..()
/obj/structure/statue/uranium/Bumped(atom/user)
radiate()
..()
/obj/structure/statue/uranium/attack_hand(mob/user)
radiate()
..()
/obj/structure/statue/uranium/proc/radiate()
if(!active)
if(world.time > last_event + 1.5 SECONDS)
active = TRUE
radiation_pulse(src, 30)
last_event = world.time
active = FALSE
/obj/statue/uranium/Initialize(mapload)
. = ..()
var/datum/component/inherent_radioactivity/radioactivity = AddComponent(/datum/component/inherent_radioactivity, 150, 0, 0, 1.5)
START_PROCESSING(SSradiation, radioactivity)
/obj/structure/statue/plasma
max_integrity = 200
+50 -12
View File
@@ -14,7 +14,7 @@
max_integrity = 25
resistance_flags = ACID_PROOF
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 80, ACID = 100)
rad_insulation = RAD_VERY_LIGHT_INSULATION
rad_insulation_beta = RAD_MEDIUM_INSULATION
cares_about_temperature = TRUE
var/ini_dir = null
var/state = WINDOW_OUT_OF_FRAME
@@ -40,6 +40,13 @@
var/env_smash_level = ENVIRONMENT_SMASH_STRUCTURES
/// How well this window resists superconductivity.
var/superconductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
/// How much we get activated by gamma radiation
var/rad_conversion_amount = 0
/obj/structure/window/rad_act(atom/source, amount, emission_type)
if(emission_type == GAMMA_RAD && amount * rad_conversion_amount > RAD_BACKGROUND_RADIATION)
AddComponent(/datum/component/radioactive, amount * rad_conversion_amount, src, BETA_RAD, 60)
/obj/structure/window/examine(mob/user)
. = ..()
@@ -518,7 +525,7 @@
reinf = TRUE
heat_resistance = 1300
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, RAD = 100, FIRE = 80, ACID = 100)
rad_insulation = RAD_NO_INSULATION
rad_insulation_beta = RAD_NO_INSULATION
max_integrity = 50
explosion_block = 1
glass_type = /obj/item/stack/sheet/rglass
@@ -631,7 +638,7 @@
/obj/structure/window/plasmabasic
name = "plasma window"
desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through. Lacks protection from radiation."
desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon_state = "plasmawindow"
glass_decal = /obj/effect/decal/cleanable/glass/plasma
shardtype = /obj/item/shard/plasma
@@ -640,12 +647,14 @@
max_integrity = 150
explosion_block = 1
armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, RAD = 100, FIRE = 99, ACID = 100)
rad_insulation = RAD_NO_INSULATION
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_WINDOW
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_conversion_amount = 2
/obj/structure/window/plasmareinforced
name = "reinforced plasma window"
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof. Lacks protection from radiation."
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon_state = "plasmarwindow"
glass_decal = /obj/effect/decal/cleanable/glass/plasma
shardtype = /obj/item/shard/plasma
@@ -655,10 +664,31 @@
max_integrity = 500
explosion_block = 2
armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, RAD = 100, FIRE = 99, ACID = 100)
rad_insulation = RAD_NO_INSULATION
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_WINDOW
damage_deflection = 21
env_smash_level = ENVIRONMENT_SMASH_WALLS // these windows are a fair bit tougher
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_conversion_amount = 1.5
/obj/structure/window/plastitanium
name = "plastitanium window"
desc = "An evil looking window of plasma and titanium. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon_state = "plastitaniumwindow"
glass_decal = /obj/effect/decal/cleanable/glass/plastitanium
shardtype = /obj/item/shard/plasma
glass_type = /obj/item/stack/sheet/plastitaniumglass
reinf = TRUE
heat_resistance = 32000
max_integrity = 600
explosion_block = 2
armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, RAD = 100, FIRE = 99, ACID = 100)
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_WINDOW
damage_deflection = 21
env_smash_level = ENVIRONMENT_SMASH_WALLS // these windows are a fair bit tougher
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_conversion_amount = 2.25
/obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
@@ -683,7 +713,7 @@
/obj/structure/window/full/plasmabasic
name = "plasma window"
desc = "A plasma-glass alloy window. It looks insanely tough to break. It appears it's also insanely tough to burn through. Has very light protection from radiation."
desc = "A plasma-glass alloy window. It looks insanely tough to break. It appears it's also insanely tough to burn through. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon = 'icons/obj/smooth_structures/windows/plasma_window.dmi'
icon_state = "plasma_window-0"
base_icon_state = "plasma_window"
@@ -697,10 +727,13 @@
edge_overlay_file = 'icons/obj/smooth_structures/windows/window_edges.dmi'
env_smash_level = ENVIRONMENT_SMASH_WALLS // these windows are a fair bit tougher
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_FULL_WINDOW
rad_conversion_amount = 2.6
/obj/structure/window/full/plasmareinforced
name = "reinforced plasma window"
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof. Offers superior protection from radiation."
desc = "A plasma-glass alloy window, with rods supporting it. It looks hopelessly tough to break. It also looks completely fireproof, considering how basic plasma windows are insanely fireproof. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon = 'icons/obj/smooth_structures/windows/rplasma_window.dmi'
icon_state = "rplasma_window-0"
base_icon_state = "rplasma_window"
@@ -712,10 +745,12 @@
max_integrity = 1000
explosion_block = 2
armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, RAD = 100, FIRE = 99, ACID = 100)
rad_insulation = RAD_HEAVY_INSULATION
edge_overlay_file = 'icons/obj/smooth_structures/windows/reinforced_window_edges.dmi'
env_smash_level = ENVIRONMENT_SMASH_RWALLS // these ones are insanely tough
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_FULL_WINDOW
rad_conversion_amount = 2.2
/obj/structure/window/full/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
return
@@ -730,7 +765,7 @@
reinf = TRUE
heat_resistance = 1600
armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, RAD = 100, FIRE = 80, ACID = 100)
rad_insulation = RAD_HEAVY_INSULATION
rad_insulation_beta = RAD_BETA_BLOCKER
explosion_block = 1
glass_type = /obj/item/stack/sheet/rglass
edge_overlay_file = 'icons/obj/smooth_structures/windows/reinforced_window_edges.dmi'
@@ -775,7 +810,7 @@
/obj/structure/window/full/plastitanium
name = "plastitanium window"
desc = "An evil looking window of plasma and titanium."
desc = "An evil looking window of plasma and titanium. When hit with Gamma particles it will become charged and start emitting Beta particles"
icon = 'icons/obj/smooth_structures/windows/plastitanium_window.dmi'
icon_state = "plastitanium_window-0"
base_icon_state = "plastitanium_window"
@@ -783,13 +818,16 @@
reinf = TRUE
heat_resistance = 32000
armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, RAD = 100, FIRE = 99, ACID = 100)
rad_insulation = RAD_HEAVY_INSULATION
rad_insulation_beta = RAD
explosion_block = 3
glass_type = /obj/item/stack/sheet/plastitaniumglass
smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM, SMOOTH_GROUP_PLASTITANIUM_WALLS)
canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM, SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS)
env_smash_level = ENVIRONMENT_SMASH_RWALLS //used in shuttles, same reason as above
superconductivity = ZERO_HEAT_TRANSFER_COEFFICIENT
rad_insulation_beta = RAD_NO_INSULATION
rad_insulation_gamma = RAD_GAMMA_FULL_WINDOW
rad_conversion_amount = 3
/obj/structure/window/reinforced/clockwork
name = "brass window"