diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index c630fd0b2f..3338fc1cda 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -69,6 +69,7 @@
#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" //from base of datum/radiation_wave/radiate(): (strength)
#define COMPONENT_BLOCK_CONTAMINATION 1
#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" //from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width)
+ #define COMPONENT_RAD_WAVE_HANDLED 1
#define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next)
#define COMPONENT_BLOCK_REACH 1
#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I)
@@ -257,4 +258,4 @@
//Ouch my toes!
#define CALTROP_BYPASS_SHOES 1
-#define CALTROP_IGNORE_WALKERS 2
\ No newline at end of file
+#define CALTROP_IGNORE_WALKERS 2
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index edd77ecf6b..1b64ce7e6c 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -63,6 +63,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define ACID_PROOF (1<<5) //acid stuck on it doesn't melt it.
#define INDESTRUCTIBLE (1<<6) //doesn't take damage
#define FREEZE_PROOF (1<<7) //can't be frozen
+#define GOLIATH_RESISTANCE (1<<8) //CIT CHANGE
+#define GOLIATH_WEAKNESS (1<<9) //CIT CHANGE
//tesla_zap
#define TESLA_MACHINE_EXPLOSIVE (1<<0)
@@ -78,3 +80,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define EMP_PROTECT_SELF (1<<0)
#define EMP_PROTECT_CONTENTS (1<<1)
#define EMP_PROTECT_WIRES (1<<2)
+
+// radiation
+#define RAD_PROTECT_CONTENTS (1<<0)
+#define RAD_NO_CONTAMINATE (1<<1)
diff --git a/code/__HELPERS/radiation.dm b/code/__HELPERS/radiation.dm
index a570ab43ba..e082be7d1f 100644
--- a/code/__HELPERS/radiation.dm
+++ b/code/__HELPERS/radiation.dm
@@ -18,7 +18,7 @@
if(ignored_things[thing.type])
continue
. += thing
- if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_PROBE) & COMPONENT_BLOCK_RADIATION)
+ if((thing.rad_flags & RAD_PROTECT_CONTENTS) || (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_PROBE) & COMPONENT_BLOCK_RADIATION))
continue
processing_list += thing.contents
@@ -42,4 +42,4 @@
if(log)
var/turf/_source_T = isturf(source) ? source : get_turf(source)
log_game("Radiation pulse with intensity: [intensity] and range modifier: [range_modifier] in [loc_name(_source_T)] ")
- return TRUE
\ No newline at end of file
+ return TRUE
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 0760b81927..835a733752 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -111,7 +111,9 @@ GLOBAL_LIST_INIT(bitfields, list(
"UNACIDABLE" = UNACIDABLE,
"ACID_PROOF" = ACID_PROOF,
"INDESTRUCTIBLE" = INDESTRUCTIBLE,
- "FREEZE_PROOF" = FREEZE_PROOF
+ "FREEZE_PROOF" = FREEZE_PROOF,
+ "GOLIATH_RESISTANCE" = GOLIATH_RESISTANCE,
+ "GOLIATH_WEAKNESS" = GOLIATH_WEAKNESS
),
"reagents_holder_flags" = list(
"REAGENT_NOREACT" = REAGENT_NOREACT
@@ -167,4 +169,8 @@ GLOBAL_LIST_INIT(bitfields, list(
"car_traits" = list(
"CAN_KIDNAP" = CAN_KIDNAP,
),
+ "rad_flags" = list(
+ "RAD_PROTECT_CONTENTS" = RAD_PROTECT_CONTENTS,
+ "RAD_NO_CONTAMINATE" = RAD_NO_CONTAMINATE,
+ ),
))
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 39f2eaf08b..a1fd15b806 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -14,7 +14,8 @@ SUBSYSTEM_DEF(traumas)
//phobia types is to pull from randomly for brain traumas, e.g. conspiracies is for special assignment only
phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
- "aliens", "strangers", "birds", "falling", "anime")
+ "aliens", "strangers", "birds", "falling", "anime", "mimes"
+ )
phobia_words = list("spiders" = strings(PHOBIA_FILE, "spiders"),
"space" = strings(PHOBIA_FILE, "space"),
@@ -33,8 +34,9 @@ SUBSYSTEM_DEF(traumas)
"conspiracies" = strings(PHOBIA_FILE, "conspiracies"),
"birds" = strings(PHOBIA_FILE, "birds"),
"falling" = strings(PHOBIA_FILE, "falling"),
- "anime" = strings(PHOBIA_FILE, "anime")
- )
+ "anime" = strings(PHOBIA_FILE, "anime"),
+ "mimes" = strings(PHOBIA_FILE, "mimes")
+ )
phobia_mobs = list("spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)),
"security" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209)),
@@ -42,7 +44,7 @@ SUBSYSTEM_DEF(traumas)
"skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)),
"snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)),
"robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai,
- /mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)),
+ /mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer, /mob/living/simple_animal/bot/honkbot)),
"doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)),
"the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct,
/mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
@@ -55,29 +57,30 @@ SUBSYSTEM_DEF(traumas)
"anime" = typecacheof(list(/mob/living/simple_animal/hostile/guardian))
)
+
phobia_objs = list("snakes" = typecacheof(list(/obj/item/rod_of_asclepius)),
- "spiders" = typecacheof(list(/obj/structure/spider)),
+ "spiders" = typecacheof(list(/obj/structure/spider)),
- "security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
+ "security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det,
/obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs,
/obj/machinery/door/airlock/security)),
- "clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
+ "clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
/obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn,
/obj/item/pda/clown, /obj/item/grown/bananapeel)),
- "greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
+ "greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
/obj/item/twohanded/spear, /obj/item/clothing/mask/gas)),
- "lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail,
+ "lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail,
/obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)),
- "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
+ "skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
/obj/effect/decal/remains/human)),
- "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
+ "conspiracies" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_security,
/obj/item/clothing/under/rank/chief_engineer, /obj/item/clothing/under/rank/chief_medical_officer,
/obj/item/clothing/under/rank/head_of_personnel, /obj/item/clothing/under/rank/research_director,
/obj/item/clothing/under/rank/head_of_security/grey, /obj/item/clothing/under/rank/head_of_security/alt,
@@ -90,10 +93,10 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/suit/space/hardsuit/ert/engi, /obj/item/clothing/suit/space/hardsuit/ert/med,
/obj/item/clothing/suit/space/hardsuit/deathsquad, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad,
/obj/machinery/door/airlock/centcom)),
- "robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
+ "robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
/obj/item/aicard, /obj/item/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)),
- "doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
+ "doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
/obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer,
@@ -102,14 +105,14 @@ SUBSYSTEM_DEF(traumas)
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
- "authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
+ "authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
/obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/chief_engineer,
/obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander,
/obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold,
/obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)),
- "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
+ "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
/obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, /obj/item/restraints/legcuffs/bola/cult,
/obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/hardsuit/cult,
/obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
@@ -123,7 +126,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/gun/magic/staff, /obj/item/gun/magic/wand,
/obj/item/nullrod, /obj/item/clothing/under/rank/chaplain)),
- "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
+ "aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
/obj/structure/alien, /obj/item/toy/toy_xeno,
/obj/item/clothing/suit/armor/abductor, /obj/item/abductor, /obj/item/gun/energy/alien,
/obj/item/abductor_baton, /obj/item/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
@@ -132,19 +135,26 @@ SUBSYSTEM_DEF(traumas)
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
/obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor,
/obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor)),
-
- "birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
+
+ "birds" = typecacheof(list(/obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker,
/obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken,
/obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/owl, /obj/item/clothing/mask/gas/owl_mask,
/obj/item/clothing/under/griffin, /obj/item/clothing/shoes/griffin, /obj/item/clothing/head/griffin,
/obj/item/clothing/head/helmet/space/freedom, /obj/item/clothing/suit/space/freedom)),
-
- "anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
+
+ "anime" = typecacheof(list(/obj/item/clothing/under/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi,
/obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/head/kitty/genuine, /obj/item/clothing/suit/space/space_ninja,
/obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, /obj/item/twohanded/vibro_weapon,
- /obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe))
+ /obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)),
+
+ "mimes" = typecacheof(list(/obj/item/pda/mime, /obj/item/clothing/under/rank/mime, /obj/item/clothing/mask/gas/mime,
+ /obj/item/clothing/head/frenchberet, /obj/item/clothing/suit/suspenders, /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing,
+ /obj/item/storage/backpack/mime, /obj/item/reagent_containers/food/snacks/grown/banana/mime,
+ /obj/item/grown/bananapeel/mimanapeel, /obj/item/cartridge/virus/mime, /obj/item/clothing/shoes/sneakers/mime,
+ /obj/item/bedsheet/mime, /obj/item/reagent_containers/food/snacks/burger/mime, /obj/item/clothing/head/beret, /obj/item/clothing/mask/gas/sexymime,
+ /obj/item/clothing/under/sexymime, /obj/item/toy/figure/mime, /obj/item/toy/crayon/mime, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, /obj/mecha/combat/reticence))
)
-
+
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
"the supernatural" = typecacheof(list(/turf/open/floor/clockwork, /turf/closed/wall/clockwork,
/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)),
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
index ccd3d30463..c93be4dae3 100644
--- a/code/datums/components/footstep.dm
+++ b/code/datums/components/footstep.dm
@@ -27,11 +27,11 @@
v /= 2
e -= 5
steps++
- if(steps >= 6)
+ if(steps >= 3)
steps = 0
- if(steps % 2)
+ else
return
- if(!LM.has_gravity(T) && steps != 0) // don't need to step as often when you hop around
+ if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
return
playsound(T, pick(GLOB.footstep[T.footstep][1]),
GLOB.footstep[T.footstep][2] * v,
diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm
index f435a21f49..2e6f8f79f6 100644
--- a/code/datums/components/mirage_border.dm
+++ b/code/datums/components/mirage_border.dm
@@ -4,7 +4,7 @@
/datum/component/mirage_border/Initialize(turf/target, direction, range=world.view)
if(!isturf(parent))
return COMPONENT_INCOMPATIBLE
- if(!target || !istype(target) || !direction)
+ if(!target || !direction)
. = COMPONENT_INCOMPATIBLE
CRASH("[type] improperly instanced with the following args: target=\[[target]\], direction=\[[direction]\], range=\[[range]\]")
diff --git a/code/datums/components/rad_insulation.dm b/code/datums/components/rad_insulation.dm
index 1ffc141a60..73d8c29440 100644
--- a/code/datums/components/rad_insulation.dm
+++ b/code/datums/components/rad_insulation.dm
@@ -21,4 +21,5 @@
return COMPONENT_BLOCK_CONTAMINATION
/datum/component/rad_insulation/proc/rad_pass(datum/source, datum/radiation_wave/wave, width)
- wave.intensity = wave.intensity*(1-((1-amount)/width)) // The further out the rad wave goes the less it's affected by insulation (larger width)
\ No newline at end of file
+ wave.intensity = wave.intensity*(1-((1-amount)/width)) // The further out the rad wave goes the less it's affected by insulation (larger width)
+ return COMPONENT_RAD_WAVE_HANDLED
diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm
index 6fa1e2a476..5fb777f9c5 100644
--- a/code/datums/radiation_wave.dm
+++ b/code/datums/radiation_wave.dm
@@ -81,7 +81,10 @@
var/atom/thing = atoms[k]
if(!thing)
continue
- SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src, width)
+ if (SEND_SIGNAL(thing, COMSIG_ATOM_RAD_WAVE_PASSING, src, width) & COMPONENT_RAD_WAVE_HANDLED)
+ continue
+ if (thing.rad_insulation != RAD_NO_INSULATION)
+ intensity *= (1-((1-thing.rad_insulation)/width))
/datum/radiation_wave/proc/radiate(list/atoms, strength)
var/contamination_chance = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_CHANCE_COEFFICIENT * min(1, 1/(steps*range_modifier))
@@ -92,7 +95,7 @@
thing.rad_act(strength)
// This list should only be for types which don't get contaminated but you want to look in their contents
- // If you don't want to look in their contents and you don't want to rad_act them:
+ // If you don't want to look in their contents and you don't want to rad_act them:
// modify the ignored_things list in __HELPERS/radiation.dm instead
var/static/list/blacklisted = typecacheof(list(
/turf,
@@ -109,4 +112,4 @@
if(SEND_SIGNAL(thing, COMSIG_ATOM_RAD_CONTAMINATING, strength) & COMPONENT_BLOCK_CONTAMINATION)
continue
var/rad_strength = (strength-RAD_MINIMUM_CONTAMINATION) * RAD_CONTAMINATION_STR_COEFFICIENT
- thing.AddComponent(/datum/component/radioactive, rad_strength, source)
\ No newline at end of file
+ thing.AddComponent(/datum/component/radioactive, rad_strength, source)
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index b05e00d35c..8e067fc47e 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -254,3 +254,17 @@
dumb_thing = FALSE //only once per life
if(prob(1))
new/obj/item/reagent_containers/food/snacks/pastatomato(get_turf(H)) //now that's what I call spaghetti code
+
+/datum/quirk/phobia
+ name = "Phobia"
+ desc = "You've had a traumatic past, that has scared you for life while dealing with your greatest fear."
+ value = -2 // It can hardstun you. You can be a job that your phobia targets...
+ gain_text = "You feel your fears manifest themselfs."
+ lose_text = "You feel your fears fade away."
+ medical_record_text = "Patient has an extreme or irrational fear of or aversion to something."
+ var/datum/brain_trauma/mild/phobia/phobia
+
+/datum/quirk/phobia/add()
+ var/mob/living/carbon/human/H = quirk_holder
+ phobia = new
+ H.gain_trauma(phobia, TRAUMA_RESILIENCE_SURGERY)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 2af31607ea..48596a0b6d 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -32,6 +32,9 @@
var/list/filter_data //For handling persistent filters
+ var/rad_flags = NONE // Will move to flags_1 when i can be arsed to
+ var/rad_insulation = RAD_NO_INSULATION
+
/atom/New(loc, ...)
//atom creation method that preloads variables at creation
if(GLOB.use_preloader && (src.type == GLOB._preloader.target_path))//in case the instanciated atom is creating other atoms in New()
@@ -697,10 +700,9 @@ Proc for attack log creation, because really why not
/atom/movable/proc/get_filter(name)
if(filter_data && filter_data[name])
return filters[filter_data.Find(name)]
-
+
/atom/movable/proc/remove_filter(name)
if(filter_data[name])
filter_data -= name
update_filters()
return TRUE
-
\ No newline at end of file
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index cc50492818..3a6cf2b922 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -406,6 +406,8 @@
lying_prev = 0
/obj/machinery/jukebox/proc/dance_over()
+ SSjukeboxes.removejukebox(SSjukeboxes.findjukeboxindex(src))
+ STOP_PROCESSING(SSobj, src)
for(var/mob/living/L in rangers)
if(!L || !L.client)
continue
@@ -420,8 +422,6 @@
/obj/machinery/jukebox/process()
if(active && world.time >= stop)
active = FALSE
- SSjukeboxes.removejukebox(SSjukeboxes.findjukeboxindex(src))
- STOP_PROCESSING(SSobj, src)
dance_over()
playsound(src,'sound/machines/terminal_off.ogg',50,1)
update_icon()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 948a62de61..7188fbc50e 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -95,6 +95,9 @@
var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close
var/prying_so_hard = FALSE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_MEDIUM_INSULATION
+
var/static/list/airlock_overlays = list()
/obj/machinery/door/airlock/Initialize()
@@ -152,7 +155,6 @@
/obj/machinery/door/airlock/ComponentInitialize()
. = ..()
AddComponent(/datum/component/ntnet_interface)
- AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
/obj/machinery/door/airlock/proc/update_other_id()
for(var/obj/machinery/door/airlock/A in GLOB.airlocks)
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index 1d77dfcf8b..c0e81a7949 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -163,7 +163,7 @@
return 0
L.Knockdown(stunforce)
- L.adjustStaminaLoss(stunforce*0.1)//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
+ L.adjustStaminaLoss(stunforce*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
L.apply_effect(EFFECT_STUTTER, stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
if(user)
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 5878b569c3..d52ec81a05 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -24,6 +24,8 @@
smooth = SMOOTH_TRUE
can_be_unanchored = FALSE
CanAtmosPass = ATMOS_PASS_DENSITY
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_MEDIUM_INSULATION
var/mineral = /obj/item/stack/sheet/metal
var/mineral_amount = 2
var/walltype = /turf/closed/wall
@@ -34,10 +36,6 @@
. = ..()
air_update_turf(TRUE)
-/obj/structure/falsewall/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
-
/obj/structure/falsewall/ratvar_act()
new /obj/structure/falsewall/brass(loc)
qdel(src)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index b319aab537..cd87075258 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -9,10 +9,8 @@
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
var/can_displace = TRUE //If the girder can be moved around by wrenching it
max_integrity = 200
-
-/obj/structure/girder/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_VERY_LIGHT_INSULATION
/obj/structure/girder/examine(mob/user)
. = ..()
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 93ce26e0ae..6fac5da2a5 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -16,10 +16,7 @@
var/rods_broken = TRUE
var/grille_type = null
var/broken_type = /obj/structure/grille/broken
-
-/obj/structure/grille/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
. = ..()
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index c5c8dd3c68..609384cdda 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -63,10 +63,8 @@
/obj/structure/holosign/barrier/engineering
icon_state = "holosign_engi"
-
-/obj/structure/holosign/barrier/engineering/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_LIGHT_INSULATION)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_LIGHT_INSULATION
/obj/structure/holosign/barrier/atmos
name = "holo firelock"
@@ -168,4 +166,4 @@
var/mob/living/M = AM
M.electrocute_act(15,"Energy Barrier", safety=1)
shockcd = TRUE
- addtimer(CALLBACK(src, .proc/cooldown), 5)
\ No newline at end of file
+ addtimer(CALLBACK(src, .proc/cooldown), 5)
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index c3316f2568..3c9b70e967 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -21,15 +21,14 @@
var/openSound = 'sound/effects/stonedoor_openclose.ogg'
var/closeSound = 'sound/effects/stonedoor_openclose.ogg'
CanAtmosPass = ATMOS_PASS_DENSITY
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_MEDIUM_INSULATION
/obj/structure/mineral_door/Initialize()
. = ..()
initial_state = icon_state
air_update_turf(TRUE)
-/obj/structure/mineral_door/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
-
/obj/structure/mineral_door/Move()
var/turf/T = loc
. = ..()
@@ -150,17 +149,13 @@
icon_state = "silver"
sheetType = /obj/item/stack/sheet/mineral/silver
max_integrity = 300
-
-/obj/structure/mineral_door/silver/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
+ rad_insulation = RAD_HEAVY_INSULATION
/obj/structure/mineral_door/gold
name = "gold door"
icon_state = "gold"
sheetType = /obj/item/stack/sheet/mineral/gold
-
-/obj/structure/mineral_door/gold/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
+ rad_insulation = RAD_HEAVY_INSULATION
/obj/structure/mineral_door/uranium
name = "uranium door"
@@ -180,9 +175,7 @@
/obj/structure/mineral_door/transparent
opacity = FALSE
-
-/obj/structure/mineral_door/transparent/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
+ rad_insulation = RAD_VERY_LIGHT_INSULATION
/obj/structure/mineral_door/transparent/Close()
..()
@@ -218,9 +211,7 @@
icon_state = "diamond"
sheetType = /obj/item/stack/sheet/mineral/diamond
max_integrity = 1000
-
-/obj/structure/mineral_door/transparent/diamond/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION)
+ rad_insulation = RAD_EXTREME_INSULATION
/obj/structure/mineral_door/wood
name = "wood door"
@@ -230,9 +221,7 @@
sheetType = /obj/item/stack/sheet/mineral/wood
resistance_flags = FLAMMABLE
max_integrity = 200
-
-/obj/structure/mineral_door/wood/ComponentInitialize()
- AddComponent(/datum/component/rad_insulation, RAD_VERY_LIGHT_INSULATION)
+ rad_insulation = RAD_VERY_LIGHT_INSULATION
/obj/structure/mineral_door/paperframe
name = "paper frame door"
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
index 56b43a289b..84add2f65f 100644
--- a/code/game/objects/structures/signs/_signs.dm
+++ b/code/game/objects/structures/signs/_signs.dm
@@ -7,10 +7,7 @@
max_integrity = 100
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
var/buildable_sign = 1 //unwrenchable and modifiable
-
-/obj/structure/sign/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION) // Since this is on a wall if it becomes irradiated it will smuggle the radiation past the wall
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
/obj/structure/sign/basic
name = "blank sign"
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 3dcf91ae8f..a26d57e3e1 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -25,7 +25,8 @@
var/real_explosion_block //ignore this, just use explosion_block
var/breaksound = "shatter"
var/hitsound = 'sound/effects/Glasshit.ogg'
- var/rad_insulation = RAD_VERY_LIGHT_INSULATION
+ rad_insulation = RAD_VERY_LIGHT_INSULATION
+ rad_flags = RAD_PROTECT_CONTENTS
/obj/structure/window/examine(mob/user)
..()
@@ -63,7 +64,6 @@
/obj/structure/window/ComponentInitialize()
. = ..()
- AddComponent(/datum/component/rad_insulation, rad_insulation, TRUE, FALSE)
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation))
/obj/structure/window/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
@@ -735,4 +735,4 @@
update_icon()
return
..()
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index 578232fba0..2165dbd8db 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -3,10 +3,8 @@
opacity = 1
density = TRUE
blocks_air = 1
-
-/turf/closed/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_MEDIUM_INSULATION)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
+ rad_insulation = RAD_MEDIUM_INSULATION
/turf/closed/AfterChange()
. = ..()
diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm
index c667714273..d52a3bcc23 100644
--- a/code/game/turfs/simulated/wall/reinf_walls.dm
+++ b/code/game/turfs/simulated/wall/reinf_walls.dm
@@ -12,10 +12,7 @@
sheet_amount = 1
girder_type = /obj/structure/girder/reinforced
explosion_block = 2
-
-/turf/closed/wall/r_wall/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_HEAVY_INSULATION)
+ rad_insulation = RAD_HEAVY_INSULATION
/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
switch(d_state)
@@ -229,4 +226,4 @@
/turf/closed/wall/r_wall/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
if(the_rcd.canRturf)
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index c233ce414d..1748813f56 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -126,10 +126,7 @@
equip_delay_other = 60
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
resistance_flags = NONE
-
-/obj/item/clothing/head/radiation/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
+ rad_flags = RAD_PROTECT_CONTENTS
/obj/item/clothing/suit/radiation
name = "radiation suit"
@@ -148,9 +145,4 @@
equip_delay_other = 60
flags_inv = HIDEJUMPSUIT
resistance_flags = NONE
-
-/obj/item/clothing/suit/radiation/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE)
- // Just don't want things to be irradiated inside this
- // Except things on the mob aren't even inside the suit so ehhhhhh
+ rad_flags = RAD_PROTECT_CONTENTS
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index c3e0cf2b85..bcd9642662 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -466,6 +466,7 @@
item_color = "black_tango"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/under/stripeddress
name = "striped dress"
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
index aae4324e65..053373c05a 100644
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ b/code/modules/jobs/job_types/cargo_service.dm
@@ -93,6 +93,7 @@ Shaft Miner
/obj/item/storage/bag/ore=1,\
/obj/item/kitchen/knife/combat/survival=1,\
/obj/item/mining_voucher=1,\
+ /obj/item/suit_voucher=1,\
/obj/item/stack/marker_beacon/ten=1)
backpack = /obj/item/storage/backpack/explorer
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index a905a3baa9..2c7eaf09ba 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -114,3 +114,63 @@
var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', "hostile_env_glass")
M.appearance_flags = RESET_COLOR
. += M
+
+
+// CITADEL ADDITIONS BELOW
+
+/****************SEVA Suit and Mask****************/
+
+/obj/item/clothing/suit/hooded/seva
+ name = "SEVA suit"
+ desc = "A fire-proof suit for exploring hot environments."
+ icon_state = "seva"
+ item_state = "seva"
+ w_class = WEIGHT_CLASS_BULKY
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ hoodtype = /obj/item/clothing/head/hooded/seva
+ armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
+ 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)
+ resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
+
+/obj/item/clothing/head/hooded/seva
+ name = "SEVA hood"
+ desc = "A fire-proof hood for exploring hot environments."
+ icon_state = "seva"
+ item_state = "seva"
+ body_parts_covered = HEAD
+ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
+ armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 50, "rad" = 25, "fire" = 100, "acid" = 25)
+ resistance_flags = FIRE_PROOF | GOLIATH_WEAKNESS
+
+/****************Exo-Suit and Mask****************/
+
+/obj/item/clothing/suit/hooded/exo
+ name = "Exo-suit"
+ desc = "A robust suit for exploring dangerous environments."
+ icon_state = "exo"
+ item_state = "exo"
+ w_class = WEIGHT_CLASS_BULKY
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ cold_protection = CHEST|GROIN|LEGS|ARMS
+ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ hoodtype = /obj/item/clothing/head/hooded/exo
+ armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ 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)
+ resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
+
+/obj/item/clothing/head/hooded/exo
+ name = "Exo-hood"
+ desc = "A robust helmet for exploring dangerous environments."
+ icon_state = "exo"
+ item_state = "exo"
+ body_parts_covered = HEAD
+ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
+ armor = list("melee" = 65, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 60, "bio" = 25, "rad" = 10, "fire" = 0, "acid" = 0)
+ resistance_flags = FIRE_PROOF | GOLIATH_RESISTANCE
\ No newline at end of file
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index fb6e9eb6fe..69b1bcaab4 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -15,8 +15,8 @@
force_wielded = 20
throwforce = 5
throw_speed = 4
- light_range = 5
- light_power = 1
+ light_range = 7
+ light_power = 2
armour_penetration = 10
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -117,7 +117,7 @@
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
if(user && lavaland_equipment_pressure_check(get_turf(user))) //CIT CHANGE - makes sure below only happens in low pressure environments
- user.adjustStaminaLoss(-13)//CIT CHANGE - makes crushers heal stamina
+ user.adjustStaminaLoss(-30)//CIT CHANGE - makes crushers heal stamina
/obj/item/twohanded/required/kinetic_crusher/proc/Recharge()
if(!charged)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 209a8118fc..63f7a7e414 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -146,6 +146,9 @@
if(istype(I, /obj/item/mining_voucher))
RedeemVoucher(I, user)
return
+ if(istype(I, /obj/item/suit_voucher))
+ RedeemSVoucher(I, user)
+ return
if(istype(I, /obj/item/card/id))
var/obj/item/card/id/C = usr.get_active_held_item()
if(istype(C) && !istype(inserted_id))
@@ -231,6 +234,13 @@
icon_state = "mining_voucher"
w_class = WEIGHT_CLASS_TINY
+/obj/item/suit_voucher
+ name = "suit voucher"
+ desc = "A token to redeem a new suit. Use it on a mining equipment vendor."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "mining_voucher"
+ w_class = WEIGHT_CLASS_TINY
+
/**********************Mining Point Card**********************/
/obj/item/card/mining_point_card
@@ -284,3 +294,22 @@
new /obj/item/encryptionkey/headset_cargo(src)
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/mining_access_card(src)
+
+
+//CITADEL ADDITIONS BELOW
+
+/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
+ var/items = list("Exo-suit", "SEVA suit")
+
+ var/selection = input(redeemer, "Pick your suit.", "Suit Voucher Redemption") as null|anything in items
+ if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
+ return
+ var/drop_location = drop_location()
+ switch(selection)
+ if("Exo-suit")
+ new /obj/item/clothing/suit/hooded/exo(drop_location)
+ if("SEVA suit")
+ new /obj/item/clothing/suit/hooded/seva(drop_location)
+
+ SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection)
+ qdel(voucher)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 84b949014c..7bc0e281c5 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -20,7 +20,7 @@
GLOB.carbon_list -= src
/mob/living/carbon/initialize_footstep()
- AddComponent(/datum/component/footstep, 1, 2)
+ AddComponent(/datum/component/footstep, 0.6, 2)
/mob/living/carbon/relaymove(mob/user, direction)
if(user in src.stomach_contents)
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 124fd622d7..b22498670a 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -2,7 +2,7 @@
/mob/living/carbon/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked = FALSE)
var/hit_percent = (100-blocked)/100
- if(!damage || hit_percent <= 0)
+ if(hit_percent <= 0)
return 0
var/obj/item/bodypart/BP = null
@@ -18,13 +18,13 @@
switch(damagetype)
if(BRUTE)
if(BP)
- if(BP.receive_damage(damage * hit_percent, 0))
+ if(damage > 0 ? BP.receive_damage(damage * hit_percent, 0) : BP.heal_damage(abs(damage * hit_percent), 0))
update_damage_overlays()
else //no bodypart, we deal damage with a more general method.
adjustBruteLoss(damage * hit_percent)
if(BURN)
if(BP)
- if(BP.receive_damage(0, damage * hit_percent))
+ if(damage > 0 ? BP.receive_damage(0, damage * hit_percent) : BP.heal_damage(0, abs(damage * hit_percent)))
update_damage_overlays()
else
adjustFireLoss(damage * hit_percent)
@@ -36,7 +36,7 @@
adjustCloneLoss(damage * hit_percent)
if(STAMINA)
if(BP)
- if(BP.receive_damage(0, 0, damage * hit_percent))
+ if(damage > 0 ? BP.receive_damage(0, 0, damage * hit_percent) : BP.heal_damage(0, 0, abs(damage * hit_percent)))
update_damage_overlays()
else
adjustStaminaLoss(damage * hit_percent)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 1f68431771..79ea11682d 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1600,7 +1600,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H)
var/hit_percent = (100-(blocked+armor))/100
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
- if(!damage || hit_percent <= 0)
+ if(hit_percent <= 0)
return 0
var/obj/item/bodypart/BP = null
@@ -1617,14 +1617,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(BRUTE)
H.damageoverlaytemp = 20
if(BP)
- if(BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0))
+ if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0))
H.update_damage_overlays()
else//no bodypart, we deal damage with a more general method.
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
if(BURN)
H.damageoverlaytemp = 20
if(BP)
- if(BP.receive_damage(0, damage * hit_percent * burnmod * H.physiology.burn_mod))
+ if(damage > 0 ? BP.receive_damage(0, damage * hit_percent * burnmod * H.physiology.burn_mod) : BP.heal_damage(0, abs(damage * hit_percent * burnmod * H.physiology.burn_mod)))
H.update_damage_overlays()
else
H.adjustFireLoss(damage * hit_percent * burnmod * H.physiology.burn_mod)
@@ -1636,7 +1636,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
H.adjustCloneLoss(damage * hit_percent * H.physiology.clone_mod)
if(STAMINA)
if(BP)
- if(BP.receive_damage(0, 0, damage * hit_percent * H.physiology.stamina_mod))
+ if(damage > 0 ? BP.receive_damage(0, 0, damage * hit_percent * H.physiology.stamina_mod) : BP.heal_damage(0, 0, abs(damage * hit_percent * H.physiology.stamina_mod)))
H.update_stamina()
else
H.adjustStaminaLoss(damage * hit_percent * H.physiology.stamina_mod)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 0e69db8f51..d0e3fc8b1c 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -11,6 +11,7 @@
weather_immunities = list("ash")
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
mob_biotypes = list(MOB_ROBOTIC)
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/last_lawchange_announce = 0
@@ -52,10 +53,6 @@
diag_hud_set_status()
diag_hud_set_health()
-/mob/living/silicon/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, TRUE)
-
/mob/living/silicon/med_hud_set_health()
return //we use a different hud
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 97dede3d2f..899e901827 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -33,7 +33,7 @@ Difficulty: Medium
movement_type = GROUND
speak_emote = list("roars")
speed = 1
- move_to_delay = 3
+ move_to_delay = 2
projectiletype = /obj/item/projectile/kinetic/miner
projectilesound = 'sound/weapons/kenetic_accel.ogg'
ranged = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 1784405f30..c60dae6a35 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -41,6 +41,7 @@ Difficulty: Hard
melee_damage_upper = 40
speed = 1
move_to_delay = 10
+ ranged_cooldown_time = 10
ranged = 1
pixel_x = -32
del_on_death = 1
@@ -62,7 +63,7 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/bubblegum/Life()
..()
- move_to_delay = CLAMP(round((health/maxHealth) * 10), 5, 10)
+ move_to_delay = CLAMP(round((health/maxHealth) * 10), 3, 10)
/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire()
anger_modifier = CLAMP(((maxHealth - health)/50),0,20)
@@ -235,4 +236,4 @@ Difficulty: Hard
return 1
return 0
-#undef MEDAL_PREFIX
\ No newline at end of file
+#undef MEDAL_PREFIX
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index 2c5d004054..c491b3e78d 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -79,14 +79,14 @@ Difficulty: Very Hard
INVOKE_ASYNC(src, .proc/spiral_shoot, pick(TRUE, FALSE))
else if(prob(20))
- ranged_cooldown = world.time + 30
+ ranged_cooldown = world.time + 2
random_shots()
else
if(prob(70))
- ranged_cooldown = world.time + 20
+ ranged_cooldown = world.time + 10
blast()
else
- ranged_cooldown = world.time + 40
+ ranged_cooldown = world.time + 20
INVOKE_ASYNC(src, .proc/alternating_dir_shots)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index fac14eeb0e..b1694a6172 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -48,7 +48,7 @@ Difficulty: Medium
melee_damage_lower = 40
melee_damage_upper = 40
speed = 1
- move_to_delay = 10
+ move_to_delay = 5
ranged = 1
pixel_x = -16
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
index 99d13cab24..293e3e21fd 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm
@@ -65,9 +65,9 @@ Difficulty: Hard
var/burst_range = 3 //range on burst aoe
var/beam_range = 5 //range on cross blast beams
- var/chaser_speed = 3 //how fast chasers are currently
- var/chaser_cooldown = 101 //base cooldown/cooldown var between spawning chasers
- var/major_attack_cooldown = 60 //base cooldown for major attacks
+ var/chaser_speed = 2 //how fast chasers are currently
+ var/chaser_cooldown = 50 //base cooldown/cooldown var between spawning chasers
+ var/major_attack_cooldown = 40 //base cooldown for major attacks
var/arena_cooldown = 200 //base cooldown/cooldown var for creating an arena
var/blinking = FALSE //if we're doing something that requires us to stand still and not attack
var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to
@@ -204,7 +204,7 @@ Difficulty: Hard
return
target_slowness += L.movement_delay()
target_slowness = max(target_slowness, 1)
- chaser_speed = max(1, (3 - anger_modifier * 0.04) + ((target_slowness - 1) * 0.5))
+ chaser_speed = max(1, (2 - anger_modifier * 0.04) + ((target_slowness - 1) * 0.5))
arena_trap(target)
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75) //scale cooldown lower with high anger.
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 2710d58a67..5bfabe376e 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -31,12 +31,13 @@ Difficulty: Medium
armour_penetration = 50
melee_damage_lower = 25
melee_damage_upper = 25
- speed = 2
+ speed = 1
+ move_to_delay = 2
ranged = 1
del_on_death = 1
retreat_distance = 5
minimum_distance = 5
- ranged_cooldown_time = 20
+ ranged_cooldown_time = 10
var/size = 5
var/charging = 0
medal_type = BOSS_MEDAL_LEGION
@@ -44,7 +45,7 @@ Difficulty: Medium
pixel_y = -90
pixel_x = -75
loot = list(/obj/item/stack/sheet/bone = 3)
- vision_range = 13
+ vision_range = 10
wander = FALSE
elimination = 1
appearance_flags = 0
@@ -87,6 +88,7 @@ Difficulty: Medium
retreat_distance = 0
minimum_distance = 0
speed = 0
+ move_to_delay = 1
charging = 1
addtimer(CALLBACK(src, .proc/reset_charge), 50)
@@ -94,7 +96,8 @@ Difficulty: Medium
ranged = 1
retreat_distance = 5
minimum_distance = 5
- speed = 2
+ speed = 1
+ move_to_delay = 2
charging = 0
/mob/living/simple_animal/hostile/megafauna/legion/death()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
index 6af5174ec5..43bc2c26f8 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
@@ -19,8 +19,8 @@
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
minbodytemp = 0
maxbodytemp = INFINITY
- vision_range = 5
- aggro_vision_range = 18
+ vision_range = 4
+ aggro_vision_range = 15
anchored = TRUE
mob_size = MOB_SIZE_LARGE
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index f74f9a436c..23f08ab234 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -10,24 +10,23 @@
icon_gib = "syndicate_gib"
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
mouse_opacity = MOUSE_OPACITY_OPAQUE
- move_to_delay = 40
+ move_to_delay = 10
ranged = 1
- ranged_cooldown_time = 120
+ ranged_cooldown_time = 60
friendly = "wails at"
speak_emote = list("bellows")
- vision_range = 4
speed = 3
maxHealth = 300
health = 300
harm_intent_damage = 0
obj_damage = 100
- melee_damage_lower = 25
- melee_damage_upper = 25
+ melee_damage_lower = 18
+ melee_damage_upper = 18
attacktext = "pulverizes"
attack_sound = 'sound/weapons/punch1.ogg'
throw_message = "does nothing to the rocky hide of the"
- vision_range = 5
- aggro_vision_range = 9
+ vision_range = 4
+ aggro_vision_range = 7
anchored = TRUE //Stays anchored until death as to be unpullable
var/pre_attack = 0
var/pre_attack_icon = "Goliath_preattack"
@@ -67,7 +66,7 @@
pre_attack = 0
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- ranged_cooldown -= 10
+ ranged_cooldown -= 5
handle_preattack()
. = ..()
@@ -111,6 +110,7 @@
maxHealth = 400
health = 400
speed = 4
+ ranged_cooldown_time = 80
pre_attack_icon = "Goliath_preattack"
throw_message = "does nothing to the rocky hide of the"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days
@@ -184,7 +184,14 @@
if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD)
continue
visible_message("[src] grabs hold of [L]!")
- L.Stun(100)
+ var/mob/living/carbon/C = L
+ var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
+ if(S && S.resistance_flags & GOLIATH_RESISTANCE)
+ L.Stun(75)
+ else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
+ L.Stun(125)
+ else
+ L.Stun(100)
L.adjustBruteLoss(rand(10,15))
latched = TRUE
if(!latched)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
index 73356658a3..cf4401c68a 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm
@@ -11,8 +11,8 @@
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 14
ranged = 1
- vision_range = 5
- aggro_vision_range = 9
+ vision_range = 4
+ aggro_vision_range = 7
speed = 3
maxHealth = 75
health = 75
@@ -24,7 +24,7 @@
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
ranged_cooldown = 0
- ranged_cooldown_time = 20
+ ranged_cooldown_time = 15
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
retreat_distance = 3
@@ -131,6 +131,7 @@
maxHealth = 60
health = 60
speed = 2 //faster!
+ move_to_delay = 10 //actually faster!
crusher_drop_mod = 20
dwarf_mob = TRUE
@@ -289,7 +290,7 @@
gloves = /obj/item/clothing/gloves/color/black
mask = /obj/item/clothing/mask/gas/explorer
if(prob(20))
- suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/cloak/goliath = 2))
+ suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 6, /obj/item/clothing/suit/hooded/cloak/goliath = 2, /obj/item/clothing/suit/hooded/exo = 6, /obj/item/clothing/suit/hooded/seva = 6))
if(prob(30))
r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ))
if(prob(10))
@@ -377,7 +378,3 @@
id = /obj/item/card/id/knight //END OF CIT CHANGE
id_job = "Knight"
. = ..()
-
-
-
-
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 4fe77def51..3b9c3a549b 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -26,14 +26,11 @@
var/bitcoinproduction_drain = 0.15
var/bitcoinmining = FALSE
+ rad_insulation = RAD_EXTREME_INSULATION
/obj/machinery/power/rad_collector/anchored
anchored = TRUE
-/obj/machinery/power/rad_collector/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_EXTREME_INSULATION, FALSE, FALSE)
-
/obj/machinery/power/rad_collector/Destroy()
return ..()
@@ -234,4 +231,4 @@
#undef RAD_COLLECTOR_COEFFICIENT
#undef RAD_COLLECTOR_STORED_OUT
#undef RAD_COLLECTOR_MINING_CONVERSION_RATE
-#undef RAD_COLLECTOR_OUTPUT
\ No newline at end of file
+#undef RAD_COLLECTOR_OUTPUT
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index fd98c54b81..871fd32b16 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -10,6 +10,7 @@
resistance_flags = FIRE_PROOF
interaction_flags_machine = INTERACT_MACHINE_OPEN | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON
obj_flags = CAN_BE_HIT | USES_TGUI
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
var/datum/gas_mixture/air_contents // internal reservoir
var/full_pressure = FALSE
var/pressure_charging = TRUE
@@ -42,10 +43,6 @@
return INITIALIZE_HINT_LATELOAD //we need turfs to have air
-/obj/machinery/disposal/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
-
/obj/machinery/disposal/proc/trunk_check()
trunk = locate() in loc
if(!trunk)
diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm
index 2c0a6aa646..726149ce24 100644
--- a/code/modules/recycling/disposal/holder.dm
+++ b/code/modules/recycling/disposal/holder.dm
@@ -7,6 +7,7 @@
invisibility = INVISIBILITY_MAXIMUM
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
dir = NONE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
var/datum/gas_mixture/gas // gas used to flush, will appear at exit point
var/active = FALSE // true if the holder is moving, otherwise inactive
var/count = 1000 // can travel 1000 steps before going inactive (in case of loops)
@@ -14,10 +15,6 @@
var/tomail = FALSE // contains wrapped package
var/hasmob = FALSE // contains a mob
-/obj/structure/disposalholder/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
-
/obj/structure/disposalholder/Destroy()
QDEL_NULL(gas)
active = FALSE
diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm
index d7a2d5f820..7655988c8f 100644
--- a/code/modules/recycling/disposal/outlet.dm
+++ b/code/modules/recycling/disposal/outlet.dm
@@ -6,6 +6,7 @@
icon_state = "outlet"
density = TRUE
anchored = TRUE
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
var/active = FALSE
var/turf/target // this will be where the output objects are 'thrown' to.
var/obj/structure/disposalpipe/trunk/trunk // the attached pipe trunk
@@ -28,10 +29,6 @@
if(trunk)
trunk.linked = src // link the pipe trunk to self
-/obj/structure/disposaloutlet/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
-
/obj/structure/disposaloutlet/Destroy()
if(trunk)
trunk.linked = null
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index bc073d5e32..6c269e44be 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -12,6 +12,7 @@
max_integrity = 200
armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30)
layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes
+ rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
var/dpdir = NONE // bitmask of pipe directions
var/initialize_dirs = NONE // bitflags of pipe directions added on init, see \code\_DEFINES\pipe_construction.dm
var/flip_type // If set, the pipe is flippable and becomes this type when flipped
@@ -42,10 +43,6 @@
dpdir |= turn(dir, 180)
update()
-/obj/structure/disposalpipe/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION)
-
// pipe is deleted
// ensure if holder is present, it is expelled
/obj/structure/disposalpipe/Destroy()
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index d8918b609f..1841ac52b5 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -31,7 +31,7 @@
var/stamina_dam = 0
var/max_stamina_damage = 0
var/max_damage = 0
- var/stam_heal_tick = 3 //per Life().
+ var/stam_heal_tick = 0 //per Life(). Defaults to 0 due to citadel changes
var/brute_reduction = 0 //Subtracted to brute damage taken
var/burn_reduction = 0 //Subtracted to burn damage taken
@@ -135,7 +135,7 @@
//Return TRUE to get whatever mob this is in to update health.
/obj/item/bodypart/proc/on_life()
- if(stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
+ if(stam_heal_tick && stamina_dam > DAMAGE_PRECISION) //DO NOT update health here, it'll be done in the carbon's life.
if(heal_damage(brute = 0, burn = 0, stamina = stam_heal_tick, only_robotic = FALSE, only_organic = FALSE, updating_health = FALSE))
. |= BODYPART_LIFE_UPDATE_HEALTH
@@ -441,7 +441,7 @@
px_x = 0
px_y = 0
stam_damage_coeff = 1
- max_stamina_damage = 100
+ max_stamina_damage = 200
var/obj/item/cavity_item
/obj/item/bodypart/chest/Destroy()
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index c08e6e5673..1f0fa00632 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -12,7 +12,7 @@
px_x = 0
px_y = -8
stam_damage_coeff = 1
- max_stamina_damage = 100
+ max_stamina_damage = 0 //Setting this to 0 since this has the same exact effects as the chest when disabled
var/mob/living/brain/brainmob = null //The current occupant.
var/obj/item/organ/brain/brain = null //The brain organ
diff --git a/config/title_screens/README.txt b/config/title_screens/README.txt
index 6e7bf166f8..759a8aa61b 100644
--- a/config/title_screens/README.txt
+++ b/config/title_screens/README.txt
@@ -1,7 +1,7 @@
The enclosed images folder holds the image files used as the title screen for the game. All common formats such as PNG, JPG, and GIF are supported.
Byond's DMI format is also supported, but if you use a DMI only include one image per file and do not give it an icon_state (the text label below the image).
-Keep in mind that the area a title screen fills is a 480px square so you should scale/crop source images to these dimensions first.
+Keep in mind that the area a title screen fills is a 672x480px rectangle, so you should scale/crop source images to these dimensions first.
The game won't scale these images for you, so smaller images will not fill the screen and larger ones will be cut off.
Using unnecessarily huge images can cause client side lag and should be avoided. Extremely large GIFs should preferentially be converted to DMIs.
@@ -47,4 +47,4 @@ Rare Titles:
Rare titles are a just for fun feature where they will only have a 1% chance of appear in in the title screen pool of a given round.
Add the phrase "rare+" to the beginning of the name. Again note there are no spaces. A title cannot be rare title and a map title at the same time.
-An example of a rare title name is "rare+explosion"
\ No newline at end of file
+An example of a rare title name is "rare+explosion"
diff --git a/html/changelogs/AutoChangeLog-pr-7550.yml b/html/changelogs/AutoChangeLog-pr-7550.yml
new file mode 100644
index 0000000000..2bef8d3854
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7550.yml
@@ -0,0 +1,13 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - balance: "Most of Lavaland's mobs are now on crack."
+ - balance: "Blood drunk miners now move once every two ticks, rather than once every three ticks."
+ - balance: "Bubblegum now has a maximum movement speed of once every three ticks. Buffed from the original value of once per 5 ticks."
+ - balance: "The minimum time for the Colossus to attack again after firing a random shot is two deciseconds, Sped up from the original value of three seconds. The minimum time for the Colossus to attack again after performing a blast is now one second, with the original value being two seconds. The minimum time for it to attack again after performing its alternating shot pattern is now two seconds, original value being four seconds."
+ - balance: "Ashdrakes now move once every five ticks, rather than once every ten ticks."
+ - balance: "Heirophant chasers now move once every two ticks rather than three ticks by default, and the chaser cooldown has been reduced from 10 seconds to 5 seconds. The cooldown for the Heirophant's major attacks has also been sped up to 4 seconds from the original value of 6 seconds."
+ - balance: "The Legion (megafauna) now moves at two ticks per second rather than three ticks. It additionally now actually moves faster while charging. The cooldown timer for it's special attacks has been reduced from 2 seconds to 1 second. Additionally, The Legion's view range has been decreased from 13 tiles to 10 tiles."
+ - balance: "All megafauna now have a default view range of 4 tiles, decreased from the original of 5 tiles, and an aggro'd view range of 15 tiles, decreased from the original of 18"
+ - balance: "Goliaths now move once every ten ticks, sped up from the original value of 40(!!!) ticks. Additionally, their cooldown for their tentacles has been reduced from 12 seconds to 6 seconds. To compensate, their cooldown now only decreases by 5 deciseconds every time they're attacked, rather than 10 deciseconds, their melee damage has been reduced to 18 per hit from 25 per hit, and their vision range has been decreased from 5 tiles unaggroed, 9 tiles when aggroed, to 4 tiles and 7 tiles respectively. Ancient goliaths have a default attack cooldown of 8 seconds, sped up from the original value of 12 seconds."
+ - balance: "Legion (the common mob) now has a cooldown of 1.5 seconds on their skull attack, sped up from the original value of 2 seconds. Additionally, their view range has been decreased from 5 tiles, 9 tiles when aggroed, to 4 tiles, 7 tiles when aggroed."
diff --git a/html/changelogs/AutoChangeLog-pr-7596.yml b/html/changelogs/AutoChangeLog-pr-7596.yml
new file mode 100644
index 0000000000..a0dfbfe151
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7596.yml
@@ -0,0 +1,9 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Stamina no longer regenerates at hyper speeds."
+ - tweak: "To accommodate for upstream's stamina changes, knockdown() now applies staminaloss only to the chest."
+ - tweak: "adjuststaminaloss() now has a new argument that allows you to specify a zone to apply staminaloss to. This defaults to the chest"
+ - tweak: "apply_damage() is now capable of healing carbon mobs and human mobs."
+ - tweak: "Since the head has the same exact effects as the chest when disabled, and doesn't really make much sense to be affected by stamina, the head no longer has stamina."
+ - tweak: "The chest now has a stamina cap of 200 stamina due to the above."
diff --git a/html/changelogs/AutoChangeLog-pr-7598.yml b/html/changelogs/AutoChangeLog-pr-7598.yml
new file mode 100644
index 0000000000..5c15f79f98
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7598.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - tweak: "Footsteps now sound mostly the same as they did before the hard sync"
diff --git a/html/changelogs/AutoChangeLog-pr-7604.yml b/html/changelogs/AutoChangeLog-pr-7604.yml
new file mode 100644
index 0000000000..3dcc7c542c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7604.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Jukeboxes now properly remove themselves from the active jukebox list when destroyed"
diff --git a/html/changelogs/AutoChangeLog-pr-7611.yml b/html/changelogs/AutoChangeLog-pr-7611.yml
new file mode 100644
index 0000000000..a76e79cf39
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7611.yml
@@ -0,0 +1,8 @@
+author: "nicc"
+delete-after: True
+changes:
+ - rscadd: "Exo-suit"
+ - rscadd: "SEVA suit"
+ - rscadd: "Flags for Goliath resistance and weakness"
+ - rscadd: "suit voucher"
+ - rscadd: "temp suit sprites"
diff --git a/html/changelogs/AutoChangeLog-pr-7612.yml b/html/changelogs/AutoChangeLog-pr-7612.yml
new file mode 100644
index 0000000000..2e429013ec
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7612.yml
@@ -0,0 +1,4 @@
+author: "Naksu"
+delete-after: True
+changes:
+ - code_imp: "default radiation insulation is now handled by atom vars rather than a component, components can still be used."
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 5f01bb5749..39726a6ece 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index fa10f9538a..4bc07f86f5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 10e45387e5..a9d1398c20 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index f01f7cac77..3737ee694e 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
index 217eb9d749..9921e4ed47 100644
--- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm
@@ -9,12 +9,8 @@
if(updating_stamina)
update_health_hud()
-/mob/living/carbon/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE)
+/mob/living/carbon/adjustStaminaLoss(amount, updating_health = TRUE, forced = FALSE, affected_zone = BODY_ZONE_CHEST)
if(!forced && (status_flags & GODMODE))
return FALSE
- if(amount > 0)
- amount = CLAMP(amount, 0, 200 - getStaminaLoss())
- take_overall_damage(0, 0, amount, updating_health)
- else
- heal_overall_damage(0, 0, abs(amount), FALSE, FALSE, updating_health)
+ apply_damage(amount, STAMINA, affected_zone)
return amount
diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi
index 1a95d6a3bd..5d9f0ad235 100644
Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ
diff --git a/strings/phobia.json b/strings/phobia.json
index 379dd1829a..3be9794bf9 100644
--- a/strings/phobia.json
+++ b/strings/phobia.json
@@ -71,6 +71,17 @@
"slipping"
],
+ "mimes": [
+ "mime",
+ "silence",
+ "mimic",
+ "invisible",
+ "french",
+ "oui",
+ "pretending",
+ "nothing"
+ ],
+
"greytide": [
"assistant",
"grey",