Radiation fixes. (#26113)

This commit is contained in:
Qwertytoforty
2024-07-25 13:15:12 -04:00
committed by GitHub
parent 07200a4a1c
commit e4ed1b1db3
16 changed files with 103 additions and 7 deletions
@@ -201,6 +201,7 @@
armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, RAD = INFINITY, FIRE = INFINITY, ACID = 75)
item_color = "ancient"
resistance_flags = FIRE_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
sprite_sheets = null
/obj/item/clothing/suit/space/hardsuit/ancient
@@ -211,6 +212,7 @@
armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, RAD = INFINITY, FIRE = INFINITY, ACID = 75)
slowdown = 3
resistance_flags = FIRE_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
sprite_sheets = null
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient
var/footstep = 1
+1
View File
@@ -155,6 +155,7 @@
flags = null
item_state = "thunderdome"
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = 450, ACID = 450)
flags_2 = RAD_PROTECT_CONTENTS_2
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
@@ -121,6 +121,7 @@
name = "elite emergency response team engineer helmet"
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = INFINITY, FIRE = 200, ACID = 200)
flags_2 = RAD_PROTECT_CONTENTS_2
icon_state = "hardsuit0-gammaengineer"
item_color = "gammaengineer"
@@ -137,6 +138,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
icon_state = "ert_gengineer"
armor = list(MELEE = 40, BULLET = 15, LASER = 20, ENERGY = 5, BOMB = 15, RAD = INFINITY, FIRE = 200, ACID = 200)
flags_2 = RAD_PROTECT_CONTENTS_2
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer/gamma
slowdown = 0
@@ -377,11 +377,13 @@
//Strike team hardsuits
/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/sst
armor = list(MELEE = 115, BULLET = 115, LASER = 50, ENERGY = 35, BOMB = 200, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) //Almost as good as DS gear, but unlike DS can switch to combat for mobility
flags_2 = RAD_PROTECT_CONTENTS_2
icon_state = "hardsuit0-sst"
item_color = "sst"
/obj/item/clothing/suit/space/hardsuit/syndi/elite/sst
armor = list(MELEE = 115, BULLET = 115, LASER = 50, ENERGY = 40, BOMB = 200, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
flags_2 = RAD_PROTECT_CONTENTS_2
icon_state = "hardsuit0-sst"
item_color = "sst"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/sst
@@ -488,6 +490,7 @@
item_state = "singuloth_helm"
item_color = "singuloth"
armor = list(MELEE = 35, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 15, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
flags_2 = RAD_PROTECT_CONTENTS_2
sprite_sheets = null
/obj/item/clothing/suit/space/hardsuit/singuloth
@@ -496,6 +499,7 @@
icon_state = "hardsuit-singuloth"
item_state = "singuloth_hardsuit"
flags = STOPSPRESSUREDMAGE
flags_2 = RAD_PROTECT_CONTENTS_2
armor = list(MELEE = 35, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 15, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/singuloth
sprite_sheets = null
@@ -44,6 +44,7 @@
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
vision_flags = SEE_MOBS
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these
see_in_dark = 8
@@ -60,6 +61,7 @@
flags_inv = HIDESHOES | HIDEJUMPSUIT | HIDETAIL
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
strip_delay = 130
dog_fashion = /datum/dog_fashion/back/deathsquad
@@ -97,6 +99,7 @@
slowdown = 0
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
w_class = WEIGHT_CLASS_NORMAL
/obj/item/clothing/suit/space/deathsquad/officer/solgov
@@ -88,6 +88,7 @@
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) //Matches DS gear.
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
/obj/item/clothing/suit/space/syndicate/black
name = "black space suit"
@@ -100,6 +101,7 @@
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) //Matches DS gear.
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
//Black-green syndicate space suit
/obj/item/clothing/head/helmet/space/syndicate/black/green
@@ -161,6 +163,7 @@
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) //Matches DS gear.
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
/obj/item/clothing/suit/space/syndicate/black/red
name = "black and red space suit"
@@ -173,6 +176,7 @@
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) //Matches DS gear.
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
//Black with yellow/red engineering syndicate space suit
@@ -702,6 +702,7 @@
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
sprite_sheets = null
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = 450, ACID = 450)
flags_2 = RAD_PROTECT_CONTENTS_2
/obj/item/clothing/suit/armor/heavy
name = "heavy armor"
@@ -712,6 +713,7 @@
w_class = WEIGHT_CLASS_BULKY
gas_transfer_coefficient = 0.90
flags = THICKMATERIAL
flags_2 = RAD_PROTECT_CONTENTS_2
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 3
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -722,6 +724,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = THICKMATERIAL
flags_2 = RAD_PROTECT_CONTENTS_2
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
hide_tail_by_species = list("Vox")
@@ -1211,6 +1211,7 @@
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags = STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
flags_2 = RAD_PROTECT_CONTENTS_2
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD
armor = list(MELEE = INFINITY, BULLET = INFINITY, LASER = INFINITY, ENERGY = INFINITY, BOMB = INFINITY, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD
@@ -184,3 +184,4 @@
slowdown = -10
siemens_coefficient = 0
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
@@ -53,6 +53,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
resistance_flags = FIRE_PROOF | LAVA_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
slowdown = 0
armor = list(MELEE = 120, BULLET = 35, LASER = 25, ENERGY = 25, BOMB = 150, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/melee/spellblade)
@@ -90,7 +91,7 @@
heat_protection = HEAD
armor = list(MELEE = 120, BULLET = 35, LASER = 25, ENERGY = 25, BOMB = 150, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY)
resistance_flags = FIRE_PROOF | LAVA_PROOF
flags_2 = RAD_PROTECT_CONTENTS_2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
@@ -449,6 +449,65 @@
return min(1,thermal_protection)
//This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list)
/mob/living/carbon/human/proc/get_rad_protection_flags()
var/rad_protection_flags = 0
//Handle normal clothing
if(head)
if(head.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= head.body_parts_covered
if(wear_suit)
if(wear_suit.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= wear_suit.body_parts_covered
if(w_uniform)
if(w_uniform.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= w_uniform.body_parts_covered
if(shoes)
if(shoes.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= shoes.body_parts_covered
if(gloves)
if(gloves.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= gloves.body_parts_covered
if(wear_mask)
if(wear_mask.flags_2 & RAD_PROTECT_CONTENTS_2)
rad_protection_flags |= wear_mask.body_parts_covered
return rad_protection_flags
/mob/living/carbon/human/proc/get_rad_protection()
if(HAS_TRAIT(src, TRAIT_RADIMMUNE))
return 1
var/rad_protection_flags = get_rad_protection_flags()
var/rad_protection = 0
if(rad_protection_flags)
if(rad_protection_flags & HEAD)
rad_protection += THERMAL_PROTECTION_HEAD //This is correct. This uses the same percent defines as thermal protection.
if(rad_protection_flags & UPPER_TORSO)
rad_protection += THERMAL_PROTECTION_UPPER_TORSO
if(rad_protection_flags & LOWER_TORSO)
rad_protection += THERMAL_PROTECTION_LOWER_TORSO
if(rad_protection_flags & LEG_LEFT)
rad_protection += THERMAL_PROTECTION_LEG_LEFT
if(rad_protection_flags & LEG_RIGHT)
rad_protection += THERMAL_PROTECTION_LEG_RIGHT
if(rad_protection_flags & FOOT_LEFT)
rad_protection += THERMAL_PROTECTION_FOOT_LEFT
if(rad_protection_flags & FOOT_RIGHT)
rad_protection += THERMAL_PROTECTION_FOOT_RIGHT
if(rad_protection_flags & ARM_LEFT)
rad_protection += THERMAL_PROTECTION_ARM_LEFT
if(rad_protection_flags & ARM_RIGHT)
rad_protection += THERMAL_PROTECTION_ARM_RIGHT
if(rad_protection_flags & HAND_LEFT)
rad_protection += THERMAL_PROTECTION_HAND_LEFT
if(rad_protection_flags & HAND_RIGHT)
rad_protection += THERMAL_PROTECTION_HAND_RIGHT
return min(1,rad_protection)
/mob/living/carbon/human/proc/get_covered_bodyparts()
var/covered = 0
+4 -2
View File
@@ -1056,11 +1056,13 @@
amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated
var/blocked = getarmor(null, RAD)
if(blocked == INFINITY) // Full protection, go no further.
return
if(amount > RAD_BURN_THRESHOLD)
apply_damage(RAD_BURN_CURVE(amount), BURN, null, blocked)
apply_effect((amount * RAD_MOB_COEFFICIENT) / max(1, (radiation ** 2) * RAD_OVERDOSE_REDUCTION), IRRADIATE, blocked)
apply_effect((amount * RAD_MOB_COEFFICIENT) / max(1, (radiation ** 2) * RAD_OVERDOSE_REDUCTION), IRRADIATE, ARMOUR_VALUE_TO_PERCENTAGE(blocked))
/mob/living/proc/fakefireextinguish()
return
+1
View File
@@ -148,6 +148,7 @@
part.max_heat_protection_temperature = theme.max_heat_protection_temperature
part.min_cold_protection_temperature = theme.min_cold_protection_temperature
part.siemens_coefficient = theme.siemens_coefficient
part.flags_2 = theme.flag_2_flags
for(var/obj/item/part as anything in mod_parts)
RegisterSignal(part, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_part_destruction)) //look into
RegisterSignal(part, COMSIG_PARENT_QDELETING, PROC_REF(on_part_deletion))
+10 -4
View File
@@ -27,6 +27,8 @@
var/obj/item/mod/armor/armor_type_2 = null
/// Resistance flags shared across the MOD parts.
var/resistance_flags = NONE
/// Flag_2 flags to apply to the modsuit parts.
var/flag_2_flags = NONE
/// Atom flags shared across the MOD parts.
var/atom_flags = NONE
/// Max heat protection shared across the MOD parts.
@@ -230,6 +232,7 @@
default_skin = "advanced"
armor_type_1 = /obj/item/mod/armor/mod_theme_advanced
resistance_flags = FIRE_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
complexity_max = DEFAULT_MAX_COMPLEXITY - 3
charge_drain = DEFAULT_CHARGE_DRAIN * 1.5
@@ -913,7 +916,7 @@
All rights reserved, tampering with suit will void warranty."
default_skin = "syndicate"
armor_type_1 = /obj/item/mod/armor/mod_theme_syndicate
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 1
@@ -1001,6 +1004,7 @@
default_skin = "elite"
armor_type_1 = /obj/item/mod/armor/mod_theme_elite
resistance_flags = FIRE_PROOF | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 1
@@ -1120,6 +1124,7 @@
armor_type_1 = /obj/item/mod/armor/mod_theme_responsory
resistance_flags = FIRE_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 0.5
@@ -1201,6 +1206,7 @@
default_skin = "apocryphal"
armor_type_1 = /obj/item/mod/armor/mod_theme_apocryphal
resistance_flags = FIRE_PROOF | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
ui_theme = "malfunction"
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
@@ -1257,7 +1263,7 @@
default_skin = "corporate"
armor_type_1 = /obj/item/mod/armor/mod_theme_corporate
resistance_flags = FIRE_PROOF | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
siemens_coefficient = 0
slowdown_inactive = 0.5
@@ -1310,7 +1316,7 @@
default_skin = "debug"
armor_type_1 = /obj/item/mod/armor/mod_theme_debug
resistance_flags = FIRE_PROOF | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
complexity_max = 50
siemens_coefficient = 0
@@ -1362,7 +1368,7 @@
default_skin = "debug"
armor_type_1 = /obj/item/mod/armor/mod_theme_administrative
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
flag_2_flags = RAD_PROTECT_CONTENTS_2
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
complexity_max = 1000
charge_drain = DEFAULT_CHARGE_DRAIN * 0