From a693f56d51f8d954eb780a5bc27b5b48f3059ad2 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Mon, 16 Feb 2026 18:40:29 +0000 Subject: [PATCH 01/20] repath --- _maps/map_files/daftmarsh/daftmarsh.dmm | 44 +++++------ _maps/map_files/rosewood/rosewood.dmm | 60 +++++++------- _maps/map_files/rosewood/rosewood_marsh.dmm | 26 +++--- _maps/map_files/shared/CentCom.dmm | 16 ++-- _maps/map_files/vanderlin/vanderlin.dmm | 74 +++++++++--------- _maps/map_files/vanderlin/vanderlin_bog.dmm | 20 ++--- .../map_files/vanderlin/vanderlin_forest.dmm | 8 +- .../vanderlin/vanderlin_mountain.dmm | 2 +- .../whitepalacepass/WhitePalacePass.dmm | 56 ++++++------- _maps/matthios_tomb/boss/orcboss.dmm | 2 +- _maps/matthios_tomb/hallway/Malphpiece3.dmm | 2 +- _maps/matthios_tomb/hallway/Malphpiece5.dmm | 2 +- _maps/matthios_tomb/room/SmallChurch.dmm | 10 +-- _maps/matthios_tomb/room/Thelastbreath.dmm | 4 +- _maps/matthios_tomb/room/hctomb2.dmm | 2 +- _maps/matthios_tomb/room/hctomb5.dmm | 2 +- _maps/matthios_tomb/room/queensretreat.dmm | 2 +- _maps/matthios_tomb/room/rousecamp.dmm | 2 +- .../malums_anvil_dungeons/embercradle.dmm | 8 +- .../malums_anvil_dungeons/mountaintown.dmm | 6 +- .../sk_dungeon/small_bog_dungeon_1.dmm | 6 +- .../sk_dungeon/small_bog_dungeon_3.dmm | 2 +- code/controllers/subsystem/storyteller.dm | 2 +- code/datums/gods/patrons/divine_pantheon.dm | 36 ++++++--- code/datums/migrants/waves/daywalker.dm | 2 +- .../datums/migrants/waves/grenzelhoft_wave.dm | 4 +- .../personal_objectives/abyssor/take_bath.dm | 2 +- .../personal_objectives/necra/hear_cries.dm | 2 +- code/modules/clothing/neck/psycross.dm | 48 +++++------- code/modules/crafting/artificer/misc.dm | 29 ++++--- .../adventurer/types/combat/cleric.dm | 20 ++--- .../adventurer/types/combat/hollowranger.dm | 2 +- .../job_types/adventurer/types/combat/monk.dm | 20 ++--- .../adventurer/types/pilgrim/briar.dm | 2 +- .../types/pilgrim/rare/grenzelhoft.dm | 2 +- .../adventurer/types/special/crusader.dm | 6 +- .../adventurer/types/wretch/heretic.dm | 24 +++--- .../jobs/job_types/church/gmtemplar.dm | 2 +- code/modules/jobs/job_types/church/monk.dm | 20 ++--- code/modules/jobs/job_types/church/priest.dm | 2 +- code/modules/jobs/job_types/church/templar.dm | 20 ++--- .../jobs/job_types/garrison/town_elder.dm | 20 ++--- .../inquistion/puritian/preceptor.dm | 2 +- .../jobs/job_types/nobility/archivist.dm | 4 +- .../other/folkheroes/lakkariancleric.dm | 2 +- .../other/folkheroes/monsterhunter.dm | 6 +- .../job_types/other/folkheroes/paladin.dm | 22 +++--- .../other/folkheroes/swashbuckler.dm | 2 +- .../jobs/job_types/peasants/gravedigger.dm | 2 +- .../jobs/job_types/youngfolk/churchling.dm | 22 +++--- .../spell_types/pointed/aoe/churn_undead.dm | 2 +- .../spells/spell_types/pointed/avert.dm | 2 +- .../spells/spell_types/pointed/beast_tame.dm | 2 +- .../spells/spell_types/pointed/blindness.dm | 2 +- .../spell_types/pointed/burial_rites.dm | 2 +- .../spell_types/pointed/conjure/garden_fae.dm | 2 +- .../pointed/conjure/kneestingers.dm | 2 +- .../spells/spell_types/pointed/endure.dm | 2 +- .../spells/spell_types/pointed/eoran_bloom.dm | 2 +- .../spells/spell_types/pointed/eoran_charm.dm | 2 +- .../spells/spell_types/pointed/hammer_fall.dm | 2 +- .../spells/spell_types/pointed/heat_metal.dm | 2 +- .../spell_types/pointed/instill_perfection.dm | 2 +- .../spell_types/pointed/ocean_embrace.dm | 2 +- .../spells/spell_types/pointed/persistence.dm | 2 +- .../pointed/projectile/eora_curse.dm | 2 +- .../pointed/projectile/falcon_disrupt.dm | 2 +- .../pointed/projectile/moonlit_dagger.dm | 2 +- .../pointed/projectile/swordfish.dm | 2 +- .../spells/spell_types/pointed/respite.dm | 2 +- .../spells/spell_types/pointed/revive.dm | 2 +- .../spell_types/pointed/sacred_flame.dm | 2 +- .../pointed/status/fortune_wheel.dm | 2 +- .../pointed/status/invisibility.dm | 2 +- .../pointed/status/vigorous_craft.dm | 2 +- .../spell_types/undirected/beast_sense.dm | 2 +- .../spell_types/undirected/bless_crops.dm | 2 +- .../undirected/call_of_the_moon.dm | 2 +- .../spell_types/undirected/call_to_arms.dm | 2 +- .../undirected/conjure_item/briar_claw.dm | 2 +- .../undirected/conjure_item/summon_leech.dm | 4 +- .../undirected/conjure_item/summon_trident.dm | 2 +- .../spell_types/undirected/divine_strike.dm | 2 +- .../undirected/jaunt/bush_jaunt.dm | 2 +- .../undirected/jaunt/illusory_prop.dm | 2 +- .../undirected/list_target/vicious_mimicry.dm | 2 +- .../spell_types/undirected/locate_dead.dm | 2 +- .../undirected/shapeshift/troll_form.dm | 4 +- .../spell_types/undirected/soul_speak.dm | 2 +- .../spell_types/undirected/touch/entangler.dm | 2 +- .../spell_types/undirected/troll_shape.dm | 2 +- code/modules/unit_tests/craftable_clothes.dm | 1 - icons/roguetown/clothing/neck.dmi | Bin 62827 -> 61306 bytes .../3532_Prayer_and_psycross_changes.txt | 4 +- 94 files changed, 392 insertions(+), 382 deletions(-) diff --git a/_maps/map_files/daftmarsh/daftmarsh.dmm b/_maps/map_files/daftmarsh/daftmarsh.dmm index b79892741b7..9ab3ad69ded 100644 --- a/_maps/map_files/daftmarsh/daftmarsh.dmm +++ b/_maps/map_files/daftmarsh/daftmarsh.dmm @@ -3246,11 +3246,11 @@ /area/indoors/town/vault) "cGO" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_y = 4; pixel_x = -6 }, -/obj/item/clothing/neck/psycross/silver/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, /obj/item/clothing/neck/psycross/silver{ pixel_x = 7; pixel_y = 2 @@ -3259,13 +3259,13 @@ pixel_x = -5; pixel_y = 8 }, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/ravox{ +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox{ pixel_x = 7; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor{ +/obj/item/clothing/neck/psycross/silver/divine/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor{ pixel_y = 6; pixel_x = 7 }, @@ -3356,24 +3356,24 @@ /area/indoors/town/steward) "cKT" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/malum/steel, -/obj/item/clothing/neck/psycross/silver/malum/steel{ +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel{ pixel_y = -5; pixel_x = -11 }, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/xylix{ +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/xylix{ pixel_y = 7; pixel_x = 8 }, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_y = 7; pixel_x = -7 }, /obj/structure/fluff/walldeco/church/line{ dir = 4 }, -/obj/item/clothing/neck/psycross/silver/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, /turf/open/floor/churchmarble, /area/indoors/town/church) "cLh" = ( @@ -14050,23 +14050,23 @@ /area/indoors/town/keep/magician) "mdH" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/pestra, -/obj/item/clothing/neck/psycross/silver/pestra{ +/obj/item/clothing/neck/psycross/silver/divine/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra{ pixel_y = 7; pixel_x = 9 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_y = 7; pixel_x = 3 }, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_y = 4; pixel_x = 5 }, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_y = -3; pixel_x = 9 }, @@ -19302,7 +19302,7 @@ /area/indoors/town/tavern) "qOl" = ( /obj/structure/table/wood/plain_alt, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /turf/open/floor/blocks/newstone, /area/indoors/town/church) "qOp" = ( @@ -23545,7 +23545,7 @@ /area/outdoors/town) "uOC" = ( /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_x = 5; pixel_y = -3 }, diff --git a/_maps/map_files/rosewood/rosewood.dmm b/_maps/map_files/rosewood/rosewood.dmm index 9817b0dad7a..0a4147ce5af 100644 --- a/_maps/map_files/rosewood/rosewood.dmm +++ b/_maps/map_files/rosewood/rosewood.dmm @@ -1774,7 +1774,7 @@ /obj/structure/table/wood{ icon_state = "tablewood1" }, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /turf/open/floor/blocks, /area/outdoors/exposed/church) "aTp" = ( @@ -5668,21 +5668,21 @@ /area/outdoors/town/roofs) "cIb" = ( /obj/structure/rack/shelf/biggest, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_y = 7; pixel_x = 3 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_y = 3; pixel_x = 12 }, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_x = 3; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_x = 9; pixel_y = 3 }, @@ -17064,8 +17064,8 @@ /area/indoors/town/keep) "ili" = ( /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/dendor, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_y = 7; pixel_x = -7 }, @@ -20008,11 +20008,11 @@ /area/indoors/town/keep) "jJh" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_y = 4; pixel_x = -6 }, -/obj/item/clothing/neck/psycross/silver/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, /obj/item/clothing/neck/psycross/silver{ pixel_x = 7; pixel_y = 2 @@ -20021,13 +20021,13 @@ pixel_x = -5; pixel_y = 8 }, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/ravox{ +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox{ pixel_x = 7; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor{ +/obj/item/clothing/neck/psycross/silver/divine/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor{ pixel_y = 6; pixel_x = 7 }, @@ -25007,23 +25007,23 @@ /area/indoors/town/clinic_large) "miF" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/pestra, -/obj/item/clothing/neck/psycross/silver/pestra{ +/obj/item/clothing/neck/psycross/silver/divine/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra{ pixel_y = 7; pixel_x = 9 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_y = 7; pixel_x = 3 }, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_y = 4; pixel_x = 5 }, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_y = -3; pixel_x = 9 }, @@ -25172,24 +25172,24 @@ /area/under/town/sewer) "mlB" = ( /obj/structure/rack, -/obj/item/clothing/neck/psycross/silver/malum/steel, -/obj/item/clothing/neck/psycross/silver/malum/steel{ +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel{ pixel_y = -5; pixel_x = -11 }, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/xylix{ +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/xylix{ pixel_y = 7; pixel_x = 8 }, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_y = 7; pixel_x = -7 }, /obj/structure/fluff/walldeco/church/line{ dir = 4 }, -/obj/item/clothing/neck/psycross/silver/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, /obj/item/clothing/cloak/poncho, /obj/item/clothing/cloak/poncho, /turf/open/floor/ruinedwood/darker, @@ -47781,7 +47781,7 @@ /area/indoors/town/tavern) "xlQ" = ( /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_x = -8; pixel_y = 4 }, diff --git a/_maps/map_files/rosewood/rosewood_marsh.dmm b/_maps/map_files/rosewood/rosewood_marsh.dmm index 59fc7177535..801b640b878 100644 --- a/_maps/map_files/rosewood/rosewood_marsh.dmm +++ b/_maps/map_files/rosewood/rosewood_marsh.dmm @@ -151,7 +151,7 @@ /turf/open/floor/ruinedwood/turned/darker, /area/indoors/lich) "aU" = ( -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = -7; pixel_y = -3 }, @@ -159,7 +159,7 @@ pixel_x = 1; pixel_y = 7 }, -/obj/item/clothing/neck/psycross/silver/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra, /turf/open/floor/cobble, /area/indoors/lich) "aW" = ( @@ -4301,11 +4301,11 @@ pixel_x = -9; pixel_y = 0 }, -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = 2; pixel_y = 8 }, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /obj/effect/decal/remains/human, /turf/open/water/blood, /area/indoors/lich) @@ -4677,12 +4677,12 @@ /turf/open/floor/churchrough, /area/indoors/cave) "Ba" = ( -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = 2; pixel_y = 7 }, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = -20; pixel_y = 13 }, @@ -5247,7 +5247,7 @@ /turf/open/floor/grass/cold, /area/indoors/mountains) "Ef" = ( -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /obj/effect/decal/remains/human, /turf/open/floor/dirt, /area/outdoors/bog) @@ -6683,7 +6683,7 @@ /turf/open/floor/tile/masonic/spiral, /area/indoors/lich) "ME" = ( -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = 5; pixel_y = 7 }, @@ -6691,8 +6691,8 @@ pixel_x = -6; pixel_y = 6 }, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_x = 15; pixel_y = -2 }, @@ -7493,11 +7493,11 @@ pixel_x = 6; pixel_y = 11 }, -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = -10; pixel_y = 10 }, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/cobblerock, /area/indoors/lich) "Sb" = ( diff --git a/_maps/map_files/shared/CentCom.dmm b/_maps/map_files/shared/CentCom.dmm index ae030538ac2..b52fdedc43a 100644 --- a/_maps/map_files/shared/CentCom.dmm +++ b/_maps/map_files/shared/CentCom.dmm @@ -3122,13 +3122,13 @@ "rf" = ( /obj/item/clothing/neck/mercator, /obj/item/clothing/neck/shalal, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/dendor, -/obj/item/clothing/neck/psycross/silver/eora, -/obj/item/clothing/neck/psycross/g, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/dendor, +/obj/item/clothing/neck/psycross/silver/divine/eora, +/obj/item/clothing/neck/psycross/gold, +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/wood, /area/indoors) "ri" = ( @@ -6225,7 +6225,7 @@ /obj/item/clothing/pants/grenzelpants, /obj/item/clothing/shirt/grenzelhoft, /obj/item/clothing/shoes/rare/grenzelhoft, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /turf/open/floor/herringbone, /area/indoors/vampire_manor) "Mm" = ( diff --git a/_maps/map_files/vanderlin/vanderlin.dmm b/_maps/map_files/vanderlin/vanderlin.dmm index 3f9519d35fc..608f1c81f9d 100644 --- a/_maps/map_files/vanderlin/vanderlin.dmm +++ b/_maps/map_files/vanderlin/vanderlin.dmm @@ -1737,18 +1737,18 @@ /obj/machinery/light/fueled/wallfire/candle{ pixel_y = -32 }, -/obj/item/clothing/neck/psycross/silver/dendor, -/obj/item/clothing/neck/psycross/silver/dendor, -/obj/item/clothing/neck/psycross/silver/dendor, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/ravox, -/obj/item/clothing/neck/psycross/silver/malum/steel, -/obj/item/clothing/neck/psycross/silver/malum/steel, -/obj/item/clothing/neck/psycross/silver/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, /turf/open/floor/churchmarble, /area/indoors/town/church) "aPp" = ( @@ -4869,9 +4869,9 @@ /obj/item/clothing/head/padded/deathshroud, /obj/item/clothing/head/padded/deathshroud, /obj/item/clothing/head/padded/deathshroud, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /obj/structure/closet/crate/crafted_closet, /turf/open/floor/churchmarble, /area/indoors/town/church) @@ -5460,7 +5460,7 @@ /area/indoors/town/keep/gate) "cEP" = ( /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, /obj/item/clothing/head/padded/briarthorns, /turf/open/floor/ruinedwood/chevron, /area/outdoors/mountains) @@ -6844,9 +6844,9 @@ /obj/item/clothing/head/roguehood/eora, /obj/item/clothing/head/roguehood/eora, /obj/item/clothing/head/roguehood/eora, -/obj/item/clothing/neck/psycross/silver/eora, -/obj/item/clothing/neck/psycross/silver/eora, -/obj/item/clothing/neck/psycross/silver/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, /turf/open/floor/churchmarble, /area/indoors/town/church) "dlo" = ( @@ -8406,7 +8406,7 @@ /area/outdoors/town) "dYC" = ( /obj/structure/table/wood/plain_alt, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /turf/open/floor/blocks/newstone, /area/indoors/town/church) "dYE" = ( @@ -10890,7 +10890,7 @@ /turf/open/floor/carpet/royalblack, /area/indoors/town/church) "fnr" = ( -/obj/item/clothing/neck/psycross/silver/eora, +/obj/item/clothing/neck/psycross/silver/divine/eora, /obj/item/candle/eora/lit, /obj/item/candle/eora/lit{ pixel_x = 7; @@ -13386,7 +13386,7 @@ /area/indoors/town/keep/halls/w) "gxi" = ( /obj/structure/table/church, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = -2; pixel_y = 11 }, @@ -18522,7 +18522,7 @@ /area/indoors/town/keep/magician) "iZU" = ( /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_x = 8; pixel_y = 5 }, @@ -19579,9 +19579,9 @@ /obj/item/clothing/shirt/robe/abyssor, /obj/item/clothing/shirt/robe/abyssor, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/churchmarble, /area/indoors/town/church) "jzG" = ( @@ -24058,7 +24058,7 @@ "lJX" = ( /obj/structure/fluff/railing/wood, /obj/structure/table/wood/plain/alt, -/obj/item/clothing/neck/psycross/silver/dendor, +/obj/item/clothing/neck/psycross/silver/divine/dendor, /obj/item/clothing/shirt/robe/dendor, /turf/open/floor/ruinedwood/chevron, /area/outdoors/mountains) @@ -35292,9 +35292,9 @@ /obj/item/clothing/shirt/robe/phys, /obj/item/clothing/head/roguehood/phys, /obj/item/clothing/head/roguehood/phys, -/obj/item/clothing/neck/psycross/silver/pestra, -/obj/item/clothing/neck/psycross/silver/pestra, -/obj/item/clothing/neck/psycross/silver/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra, +/obj/item/clothing/neck/psycross/silver/divine/pestra, /turf/open/floor/churchmarble, /area/indoors/town/church) "raJ" = ( @@ -38901,9 +38901,9 @@ /obj/structure/fluff/walldeco/church/line{ dir = 4 }, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/noc, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /turf/open/floor/churchmarble, /area/indoors/town/church) "sLQ" = ( @@ -41508,7 +41508,7 @@ /obj/structure/table/church{ dir = 1 }, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = -2; pixel_y = 11 }, @@ -43577,9 +43577,9 @@ /obj/item/clothing/head/roguehood/astrata, /obj/item/clothing/head/roguehood/astrata, /obj/item/clothing/head/roguehood/astrata, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /turf/open/floor/churchmarble, /area/indoors/town/church) "uWU" = ( diff --git a/_maps/map_files/vanderlin/vanderlin_bog.dmm b/_maps/map_files/vanderlin/vanderlin_bog.dmm index c5aaec3c710..3a91c416f67 100644 --- a/_maps/map_files/vanderlin/vanderlin_bog.dmm +++ b/_maps/map_files/vanderlin/vanderlin_bog.dmm @@ -1573,7 +1573,7 @@ /area/under/cavewet) "aLT" = ( /obj/structure/fluff/nest, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/abyss_tile{ color = "#7D9BAE" }, @@ -1653,7 +1653,7 @@ /area/under/cavewet) "aNI" = ( /obj/structure/fluff/nest, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/abyss_tile/two{ color = "#29404E" }, @@ -2077,7 +2077,7 @@ /area/under/cavewet) "aYN" = ( /obj/structure/fluff/nest, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/abyss_tile{ color = "#547285" }, @@ -2950,7 +2950,7 @@ /mob/living/carbon/human/species/triton/base/unskilled/naked, /obj/effect/mapping_helpers/floor_clothing_equipper, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /obj/item/clothing/head/padded/abyssor, /obj/item/weapon/sword/gladius, /turf/open/floor/abyss_tile/three{ @@ -4668,7 +4668,7 @@ /obj/item/weapon/mace/steel/rungu, /obj/item/clothing/head/helmet/heavy/abyssorgreathelm, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/abyss_tile{ color = "#7D9BAE" }, @@ -8308,7 +8308,7 @@ /obj/structure/closet/crate/drawer{ color = "#7D9BAE" }, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /turf/open/floor/carpet/royalblack, /area/under/cavewet) "jlv" = ( @@ -8586,7 +8586,7 @@ /turf/open/floor/dirt/road, /area/indoors/shelter/bog) "jCT" = ( -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /turf/open/floor/abyss_tile/three{ color = "#547285" }, @@ -8774,7 +8774,7 @@ /obj/effect/mapping_helpers/floor_clothing_equipper, /obj/item/clothing/head/fisherhat, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /obj/item/weapon/polearm/spear/hoplite/abyssal, /turf/open/floor/abyss_tile/three{ color = "#7D9BAE" @@ -12815,7 +12815,7 @@ /mob/living/carbon/human/species/triton/base/very_skilled/naked, /obj/effect/mapping_helpers/floor_clothing_equipper, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /obj/item/clothing/head/crown/circlet/sleepless, /obj/item/clothing/neck/mana_star, /obj/structure/carpet/blue, @@ -12853,7 +12853,7 @@ /mob/living/carbon/human/species/triton/base/unskilled/naked, /obj/effect/mapping_helpers/floor_clothing_equipper, /obj/item/clothing/shirt/robe/abyssor, -/obj/item/clothing/neck/psycross/silver/abyssor, +/obj/item/clothing/neck/psycross/silver/divine/abyssor, /obj/item/weapon/polearm/spear/hoplite/abyssal, /obj/item/clothing/head/padded/abyssor, /turf/open/floor/abyss_tile/three{ diff --git a/_maps/map_files/vanderlin/vanderlin_forest.dmm b/_maps/map_files/vanderlin/vanderlin_forest.dmm index 855af0b463e..9fe588d1d88 100644 --- a/_maps/map_files/vanderlin/vanderlin_forest.dmm +++ b/_maps/map_files/vanderlin/vanderlin_forest.dmm @@ -720,7 +720,7 @@ /area/indoors/dungeon) "iJ" = ( /obj/structure/table/wood/fancy/orange, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /turf/open/floor/sandstone_tile/six, /area/indoors/dungeon) "iK" = ( @@ -1878,7 +1878,7 @@ /obj/effect/mapping_helpers/floor_clothing_equipper, /obj/item/clothing/shirt/robe/necra, /obj/item/clothing/head/padded/deathshroud, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /obj/item/weapon/flail, /obj/item/weapon/shield/tower/buckleriron, /obj/item/jingle_bells, @@ -2011,7 +2011,7 @@ /area/outdoors/mountains) "xK" = ( /obj/structure/table/stone_small, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/herringbone, /area/indoors/dungeon) @@ -2588,7 +2588,7 @@ name = "Saint's coffin" }, /obj/item/clothing/head/flowercrown/salvia, -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/tile/masonic/spiral, /area/indoors/dungeon) "DW" = ( diff --git a/_maps/map_files/vanderlin/vanderlin_mountain.dmm b/_maps/map_files/vanderlin/vanderlin_mountain.dmm index 2ea17ced2b7..52889bd3d04 100644 --- a/_maps/map_files/vanderlin/vanderlin_mountain.dmm +++ b/_maps/map_files/vanderlin/vanderlin_mountain.dmm @@ -2859,7 +2859,7 @@ /turf/open/floor/dirt, /area/outdoors/mountains/anvil/lavaexposed) "Rw" = ( -/obj/item/clothing/neck/psycross/silver/malum, +/obj/item/clothing/neck/psycross/silver/divine/malum, /turf/open/floor/naturalstone, /area/under/mountains/anvil/lower) "RB" = ( diff --git a/_maps/map_files/whitepalacepass/WhitePalacePass.dmm b/_maps/map_files/whitepalacepass/WhitePalacePass.dmm index e8e68b01d7c..358e0be4872 100644 --- a/_maps/map_files/whitepalacepass/WhitePalacePass.dmm +++ b/_maps/map_files/whitepalacepass/WhitePalacePass.dmm @@ -14094,7 +14094,7 @@ /turf/open/floor/ruinedwood, /area/indoors/villagegarrison) "ncN" = ( -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/cobble, /area/indoors/town/church) "ndy" = ( @@ -15360,24 +15360,24 @@ /area/indoors/soilsons) "ogV" = ( /obj/structure/table/wood/crafted, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = 7; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = 11; pixel_y = 5 }, -/obj/item/clothing/neck/psycross/silver/eora{ +/obj/item/clothing/neck/psycross/silver/divine/eora{ pixel_x = -9; pixel_y = -6 }, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_x = -11; pixel_y = 11 }, -/obj/item/clothing/neck/psycross/silver/astrata{ +/obj/item/clothing/neck/psycross/silver/divine/astrata{ pixel_x = 5; pixel_y = 8 }, @@ -17844,35 +17844,35 @@ /area/indoors/town/keep/knight) "qoo" = ( /obj/structure/table/wood/crafted, -/obj/item/clothing/neck/psycross/silver/xylix, -/obj/item/clothing/neck/psycross/silver/xylix{ +/obj/item/clothing/neck/psycross/silver/divine/xylix, +/obj/item/clothing/neck/psycross/silver/divine/xylix{ pixel_x = 2; pixel_y = 6 }, -/obj/item/clothing/neck/psycross/silver/xylix{ +/obj/item/clothing/neck/psycross/silver/divine/xylix{ pixel_y = 16 }, -/obj/item/clothing/neck/psycross/silver/pestra{ +/obj/item/clothing/neck/psycross/silver/divine/pestra{ pixel_x = -11; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/pestra{ +/obj/item/clothing/neck/psycross/silver/divine/pestra{ pixel_x = -9; pixel_y = 18 }, -/obj/item/clothing/neck/psycross/silver/pestra{ +/obj/item/clothing/neck/psycross/silver/divine/pestra{ pixel_x = -12; pixel_y = 2 }, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_x = 11; pixel_y = 13 }, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_x = 7; pixel_y = -3 }, -/obj/item/clothing/neck/psycross/silver/dendor{ +/obj/item/clothing/neck/psycross/silver/divine/dendor{ pixel_x = 11; pixel_y = 5 }, @@ -19122,27 +19122,27 @@ /area/indoors/town/bath) "rBg" = ( /obj/structure/table/wood/crafted, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_x = 8; pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_x = 11; pixel_y = 7 }, -/obj/item/clothing/neck/psycross/silver/necra{ +/obj/item/clothing/neck/psycross/silver/divine/necra{ pixel_x = -6; pixel_y = 11 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_x = -2; pixel_y = -4 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_x = 7; pixel_y = 5 }, -/obj/item/clothing/neck/psycross/silver/noc{ +/obj/item/clothing/neck/psycross/silver/divine/noc{ pixel_x = -10; pixel_y = 9 }, @@ -21799,26 +21799,26 @@ /area/indoors/town/keep/halls/s) "uaa" = ( /obj/structure/table/wood/crafted, -/obj/item/clothing/neck/psycross/silver/ravox{ +/obj/item/clothing/neck/psycross/silver/divine/ravox{ pixel_y = -5 }, -/obj/item/clothing/neck/psycross/silver/ravox{ +/obj/item/clothing/neck/psycross/silver/divine/ravox{ pixel_x = -9; pixel_y = -1 }, -/obj/item/clothing/neck/psycross/silver/ravox{ +/obj/item/clothing/neck/psycross/silver/divine/ravox{ pixel_x = -6; pixel_y = 12 }, -/obj/item/clothing/neck/psycross/silver/malum{ +/obj/item/clothing/neck/psycross/silver/divine/malum{ pixel_x = 5; pixel_y = -3 }, -/obj/item/clothing/neck/psycross/silver/malum{ +/obj/item/clothing/neck/psycross/silver/divine/malum{ pixel_x = 9; pixel_y = -1 }, -/obj/item/clothing/neck/psycross/silver/malum{ +/obj/item/clothing/neck/psycross/silver/divine/malum{ pixel_x = 10; pixel_y = 8 }, diff --git a/_maps/matthios_tomb/boss/orcboss.dmm b/_maps/matthios_tomb/boss/orcboss.dmm index e9921f6c402..dc8d200ecda 100644 --- a/_maps/matthios_tomb/boss/orcboss.dmm +++ b/_maps/matthios_tomb/boss/orcboss.dmm @@ -116,7 +116,7 @@ /area/under/tomb/indoors) "wr" = ( /obj/structure/toilet, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /obj/item/natural/poo{ pixel_y = 9 }, diff --git a/_maps/matthios_tomb/hallway/Malphpiece3.dmm b/_maps/matthios_tomb/hallway/Malphpiece3.dmm index b5cac053189..6a2670c9d07 100644 --- a/_maps/matthios_tomb/hallway/Malphpiece3.dmm +++ b/_maps/matthios_tomb/hallway/Malphpiece3.dmm @@ -36,7 +36,7 @@ /obj/item/clothing/shirt/tunic/colored/blue, /obj/item/gem/blue, /obj/item/clothing/shoes/boots, -/obj/item/clothing/neck/psycross/silver/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, /obj/item/clothing/ring/silver/saffira, /obj/item/storage/belt/leather/plaquesilver, /obj/item/weapon/sword/rapier/silver, diff --git a/_maps/matthios_tomb/hallway/Malphpiece5.dmm b/_maps/matthios_tomb/hallway/Malphpiece5.dmm index 8ff20a1ff4c..d6c5b204d8b 100644 --- a/_maps/matthios_tomb/hallway/Malphpiece5.dmm +++ b/_maps/matthios_tomb/hallway/Malphpiece5.dmm @@ -124,7 +124,7 @@ /obj/effect/landmark/chest_or_mimic, /obj/item/ore/gold, /obj/item/ore/gold, -/obj/item/clothing/neck/psycross/silver/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, /turf/open/floor/volcanic, /area/under/tomb/cave) "Z" = ( diff --git a/_maps/matthios_tomb/room/SmallChurch.dmm b/_maps/matthios_tomb/room/SmallChurch.dmm index 4ba57fcc6e9..7891be7a43c 100644 --- a/_maps/matthios_tomb/room/SmallChurch.dmm +++ b/_maps/matthios_tomb/room/SmallChurch.dmm @@ -636,7 +636,7 @@ /area/under/tomb/indoors/church) "xM" = ( /obj/structure/closet/crate/chest/crate, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /turf/open/floor/churchmarble, /area/under/tomb/indoors/church) "yc" = ( @@ -843,8 +843,8 @@ /obj/item/clothing/cloak/stabard/templar/astrata/alt, /obj/item/clothing/cloak/stabard/templar/astrata, /obj/item/clothing/cloak/stabard/templar/astrata, -/obj/item/clothing/neck/psycross/silver/astrata, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /obj/item/clothing/shirt/robe/astrata, /obj/item/clothing/shirt/robe/astrata, /obj/item/clothing/head/helmet/heavy/necked/astrata, @@ -1046,8 +1046,8 @@ /area/under/tomb/indoors/church) "OD" = ( /obj/structure/closet/crate/chest/crate, -/obj/item/clothing/neck/psycross/silver/necra, -/obj/item/clothing/neck/psycross/silver/astrata, +/obj/item/clothing/neck/psycross/silver/divine/necra, +/obj/item/clothing/neck/psycross/silver/divine/astrata, /turf/open/floor/churchmarble, /area/under/tomb/indoors/church) "OM" = ( diff --git a/_maps/matthios_tomb/room/Thelastbreath.dmm b/_maps/matthios_tomb/room/Thelastbreath.dmm index b368697b63b..e7aac687cc8 100644 --- a/_maps/matthios_tomb/room/Thelastbreath.dmm +++ b/_maps/matthios_tomb/room/Thelastbreath.dmm @@ -1939,7 +1939,7 @@ /obj/item/clothing/shirt/dress/silkdress/colored/silkdressprimary, /obj/item/clothing/pants/trou/shadowpants, /obj/item/clothing/ring/gold/blortz, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /turf/open/floor/cobblerock, /area/under/tomb/wilds) "BV" = ( @@ -2569,7 +2569,7 @@ /obj/item/clothing/armor/plate/rust, /obj/item/clothing/armor/chainmail, /obj/item/clothing/ring/gold/rontz, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /mob/living/carbon/human/species/skeleton/npc/no_equipment{ base_speed = 12; base_strength = 15; diff --git a/_maps/matthios_tomb/room/hctomb2.dmm b/_maps/matthios_tomb/room/hctomb2.dmm index bc8c0d5cb63..1a94d948331 100644 --- a/_maps/matthios_tomb/room/hctomb2.dmm +++ b/_maps/matthios_tomb/room/hctomb2.dmm @@ -436,7 +436,7 @@ /obj/item/clothing/pants/trou/leather/mourning, /obj/item/clothing/shirt/robe/necra, /obj/item/clothing/head/padded/deathshroud, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /turf/open/floor/dirt/road, /area/under/tomb) "IB" = ( diff --git a/_maps/matthios_tomb/room/hctomb5.dmm b/_maps/matthios_tomb/room/hctomb5.dmm index 4ba83f2db88..d5885e410d8 100644 --- a/_maps/matthios_tomb/room/hctomb5.dmm +++ b/_maps/matthios_tomb/room/hctomb5.dmm @@ -307,7 +307,7 @@ /turf/open/floor/wood, /area/under/tomb/indoors/rest) "Pa" = ( -/obj/item/clothing/neck/psycross/g{ +/obj/item/clothing/neck/psycross/gold{ pixel_x = -6; pixel_y = 0 }, diff --git a/_maps/matthios_tomb/room/queensretreat.dmm b/_maps/matthios_tomb/room/queensretreat.dmm index c279261fc38..987b5cd2bf4 100644 --- a/_maps/matthios_tomb/room/queensretreat.dmm +++ b/_maps/matthios_tomb/room/queensretreat.dmm @@ -926,7 +926,7 @@ "Pd" = ( /obj/machinery/light/fueled/wallfire/candle/weak/r, /obj/structure/closet/crate/crafted_closet/lord, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /obj/item/clothing/ring/silver/noc, /obj/item/reagent_containers/glass/bottle/stronghealthpot, /obj/item/reagent_containers/glass/bottle/stronghealthpot, diff --git a/_maps/matthios_tomb/room/rousecamp.dmm b/_maps/matthios_tomb/room/rousecamp.dmm index 50a82be2a9f..be2028582d4 100644 --- a/_maps/matthios_tomb/room/rousecamp.dmm +++ b/_maps/matthios_tomb/room/rousecamp.dmm @@ -119,7 +119,7 @@ /area/under/tomb/indoors) "nJ" = ( /obj/structure/table/church/m, -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/churchmarble, /area/under/tomb/cave/lava) "nR" = ( diff --git a/_maps/templates/malums_anvil_dungeons/embercradle.dmm b/_maps/templates/malums_anvil_dungeons/embercradle.dmm index 4d0faf2a78c..9f40a909e21 100644 --- a/_maps/templates/malums_anvil_dungeons/embercradle.dmm +++ b/_maps/templates/malums_anvil_dungeons/embercradle.dmm @@ -2467,7 +2467,7 @@ /obj/item/storage/belt/leather/plaquesilver, /obj/item/clothing/ring/silver/noc, /obj/item/clothing/wrists/nocwrappings, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /obj/effect/mapping_helpers/floor_clothing_equipper, /mob/living/carbon/human/species/skeleton/npc/no_equipment, /turf/open/floor/carpet/purple, @@ -3265,7 +3265,7 @@ /obj/structure/table/church{ dir = 1 }, -/obj/item/clothing/neck/psycross/g, +/obj/item/clothing/neck/psycross/gold, /turf/open/floor/cobble, /area/under/mountains/anvil/dungeon/lower) "Ru" = ( @@ -3452,7 +3452,7 @@ /area/under/mountains/anvil/dungeon) "Uf" = ( /obj/structure/table/church, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /turf/open/floor/cobble, /area/under/mountains/anvil/dungeon/lower) "Ui" = ( @@ -3713,7 +3713,7 @@ "Xr" = ( /mob/living/carbon/human/species/skeleton/npc/no_equipment, /obj/item/clothing/shirt/robe/noc, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /obj/item/clothing/head/roguehood/nochood, /obj/item/clothing/gloves/leather/black, /obj/item/clothing/shoes/boots/leather, diff --git a/_maps/templates/malums_anvil_dungeons/mountaintown.dmm b/_maps/templates/malums_anvil_dungeons/mountaintown.dmm index 4ee24280291..14173e53e4a 100644 --- a/_maps/templates/malums_anvil_dungeons/mountaintown.dmm +++ b/_maps/templates/malums_anvil_dungeons/mountaintown.dmm @@ -1234,7 +1234,7 @@ /obj/structure/table/wood/large/corner_blue{ dir = 10 }, -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/churchmarble, /area/under/mountains/anvil/dungeon) "qN" = ( @@ -1715,7 +1715,7 @@ "xF" = ( /obj/structure/closet/crate/drawer, /obj/item/candle/yellow, -/obj/item/clothing/neck/psycross/silver/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, /turf/open/floor/wood/nosmooth, /area/under/mountains/anvil/dungeon) "xJ" = ( @@ -3602,7 +3602,7 @@ /area/under/mountains/anvil/dungeon/lower) "Zq" = ( /obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/neck/psycross/silver/malum/steel, +/obj/item/clothing/neck/psycross/silver/divine/malum/steel, /obj/effect/decal/cleanable/blood/gibs/body, /turf/open/floor/wood/nosmooth, /area/under/mountains/anvil/dungeon) diff --git a/_maps/templates/sk_dungeon/small_bog_dungeon_1.dmm b/_maps/templates/sk_dungeon/small_bog_dungeon_1.dmm index 8dc54165692..653d3968c8d 100644 --- a/_maps/templates/sk_dungeon/small_bog_dungeon_1.dmm +++ b/_maps/templates/sk_dungeon/small_bog_dungeon_1.dmm @@ -280,7 +280,7 @@ /area/outdoors/bog) "ON" = ( /obj/structure/closet/crate/coffin, -/obj/item/clothing/neck/psycross/silver/necra, +/obj/item/clothing/neck/psycross/silver/divine/necra, /turf/open/floor/blocks, /area/outdoors/bog) "OQ" = ( @@ -344,7 +344,7 @@ /area/outdoors/bog) "Wo" = ( /obj/structure/closet/crate/coffin, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /turf/open/floor/blocks/paving, /area/outdoors/bog) "WF" = ( @@ -357,7 +357,7 @@ /area/outdoors/bog) "YA" = ( /obj/structure/closet/crate/coffin, -/obj/item/clothing/neck/psycross/silver/ravox, +/obj/item/clothing/neck/psycross/silver/divine/ravox, /turf/open/floor/blocks/paving, /area/outdoors/bog) diff --git a/_maps/templates/sk_dungeon/small_bog_dungeon_3.dmm b/_maps/templates/sk_dungeon/small_bog_dungeon_3.dmm index c5209b7ed49..919f51d9a22 100644 --- a/_maps/templates/sk_dungeon/small_bog_dungeon_3.dmm +++ b/_maps/templates/sk_dungeon/small_bog_dungeon_3.dmm @@ -130,7 +130,7 @@ /obj/structure/closet/crate/coffin, /obj/item/clothing/head/helmet/heavy/necked/noc, /obj/item/clothing/ring/silver/noc, -/obj/item/clothing/neck/psycross/silver/noc, +/obj/item/clothing/neck/psycross/silver/divine/noc, /turf/open/floor/herringbone, /area/outdoors/bog) "Q" = ( diff --git a/code/controllers/subsystem/storyteller.dm b/code/controllers/subsystem/storyteller.dm index e3c3a99711d..39fc7a3f9aa 100644 --- a/code/controllers/subsystem/storyteller.dm +++ b/code/controllers/subsystem/storyteller.dm @@ -1564,7 +1564,7 @@ SUBSYSTEM_DEF(gamemode) current_valid_humans += human_mob record_round_statistic(STATS_TOTAL_POPULATION) for(var/obj/item/clothing/neck/current_item in human_mob.get_equipped_items(TRUE)) - if(current_item.type in list(/obj/item/clothing/neck/psycross, /obj/item/clothing/neck/psycross/silver, /obj/item/clothing/neck/psycross/g)) + if(current_item.type in list(/obj/item/clothing/neck/psycross, /obj/item/clothing/neck/psycross/silver, /obj/item/clothing/neck/psycross/gold)) record_round_statistic(STATS_PSYCROSS_USERS) break switch(human_mob.gender) diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index 0dd39afa515..f9fa3a90dc0 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -38,6 +38,22 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( return FALSE /* ----------------- */ +/datum/patron/divine/undivided + name = TEN_UNDIVIDED + domain = "" + desc = "The Divine Pantheon Undivided." + flaws = "" + worshippers = "" + sins = "" + boons = "" + added_traits = list() + devotion_holder = /datum/devotion/divine/undivided + confess_lines = list( + "ASTRATA IS MY LIGHT!", + "ASTRATA BRINGS LAW!", + "I SERVE THE GLORY OF THE SUN!", + ) + /datum/patron/divine/astrata name = ASTRATA @@ -55,7 +71,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I SERVE THE GLORY OF THE SUN!", ) storyteller = /datum/storyteller/astrata - associated_psycross = /obj/item/clothing/neck/psycross/silver/astrata + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/astrata /datum/patron/divine/noc name = NOC @@ -73,7 +89,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I SEEK THE MYSTERIES OF THE MOON!", ) storyteller = /datum/storyteller/noc - associated_psycross = /obj/item/clothing/neck/psycross/silver/noc + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/noc /datum/patron/divine/dendor name = DENDOR @@ -91,7 +107,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I ANSWER THE CALL OF THE WILD!", ) storyteller = /datum/storyteller/dendor - associated_psycross = /obj/item/clothing/neck/psycross/silver/dendor + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/dendor /datum/patron/divine/abyssor name = ABYSSOR @@ -109,7 +125,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I AM DRAWN BY THE PULL OF THE TIDE!", ) storyteller = /datum/storyteller/abyssor - associated_psycross = /obj/item/clothing/neck/psycross/silver/abyssor + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/abyssor /datum/patron/divine/necra name = NECRA @@ -127,7 +143,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I FEAR NOT DEATH, MY LADY AWAITS ME!", ) storyteller = /datum/storyteller/necra - associated_psycross = /obj/item/clothing/neck/psycross/silver/necra + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/necra /datum/patron/divine/ravox name = RAVOX @@ -145,7 +161,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "THE DRUMS OF WAR BEAT IN MY CHEST!", ) storyteller = /datum/storyteller/ravox - associated_psycross = /obj/item/clothing/neck/psycross/silver/ravox + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/ravox /datum/patron/divine/xylix name = XYLIX @@ -170,7 +186,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "EORA BRINGS US TOGETHER!", ) storyteller = /datum/storyteller/xylix - associated_psycross = /obj/item/clothing/neck/psycross/silver/xylix + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/xylix /datum/patron/divine/pestra name = PESTRA @@ -188,7 +204,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "MY AFFLICTION IS MY TESTAMENT!", ) storyteller = /datum/storyteller/pestra - associated_psycross = /obj/item/clothing/neck/psycross/silver/pestra + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/pestra /datum/patron/divine/pestra/preference_accessible(datum/preferences/prefs) . = ..() @@ -214,7 +230,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I AM AN INSTRUMENT OF CREATION!", ) storyteller = /datum/storyteller/malum - associated_psycross = /obj/item/clothing/neck/psycross/silver/malum + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/malum /datum/patron/divine/eora name = EORA @@ -232,4 +248,4 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( "I LOVE YOU, EVEN AS YOU TRESPASS AGAINST ME!", ) storyteller = /datum/storyteller/eora - associated_psycross = /obj/item/clothing/neck/psycross/silver/eora + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine/eora diff --git a/code/datums/migrants/waves/daywalker.dm b/code/datums/migrants/waves/daywalker.dm index e6620edecc7..27fe2e0d51f 100644 --- a/code/datums/migrants/waves/daywalker.dm +++ b/code/datums/migrants/waves/daywalker.dm @@ -43,7 +43,7 @@ /datum/outfit/daywalker name = "Daywalker (Migrant Wave)" wrists = /obj/item/clothing/wrists/bracers/leather - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata gloves = /obj/item/clothing/gloves/fingerless/shadowgloves pants = /obj/item/clothing/pants/trou/shadowpants shirt = /obj/item/clothing/shirt/tunic/colored/black diff --git a/code/datums/migrants/waves/grenzelhoft_wave.dm b/code/datums/migrants/waves/grenzelhoft_wave.dm index 9e13177583c..3f3bd3e7f51 100644 --- a/code/datums/migrants/waves/grenzelhoft_wave.dm +++ b/code/datums/migrants/waves/grenzelhoft_wave.dm @@ -58,7 +58,7 @@ name = "Grenzelhoft Count (Migrant Wave)" shoes = /obj/item/clothing/shoes/rare/grenzelhoft gloves = /obj/item/clothing/gloves/angle/grenzel - wrists = /obj/item/clothing/neck/psycross/g + wrists = /obj/item/clothing/neck/psycross/gold head = /obj/item/clothing/head/helmet/skullcap/grenzelhoft armor = /obj/item/clothing/armor/brigandine belt = /obj/item/storage/belt/leather/plaquesilver @@ -130,7 +130,7 @@ name = "Grenzelhoft Countess (Migrant Wave)" shoes = /obj/item/clothing/shoes/rare/grenzelhoft gloves = /obj/item/clothing/gloves/angle/grenzel - wrists = /obj/item/clothing/neck/psycross/g + wrists = /obj/item/clothing/neck/psycross/gold head = /obj/item/clothing/head/helmet/skullcap/grenzelhoft armor = /obj/item/clothing/armor/gambeson/heavy/dress/alt belt = /obj/item/storage/belt/leather/plaquesilver diff --git a/code/game/gamemodes/personal_objectives/abyssor/take_bath.dm b/code/game/gamemodes/personal_objectives/abyssor/take_bath.dm index 4af5e7df7cb..4400019219a 100644 --- a/code/game/gamemodes/personal_objectives/abyssor/take_bath.dm +++ b/code/game/gamemodes/personal_objectives/abyssor/take_bath.dm @@ -22,7 +22,7 @@ var/amulet_found = FALSE for(var/obj/item/clothing/neck/current_item in owner.current.get_equipped_items(TRUE)) - if(current_item.type in list(/obj/item/clothing/neck/psycross/silver/abyssor)) + if(current_item.type in list(/obj/item/clothing/neck/psycross/silver/divine/abyssor)) amulet_found = TRUE if(!amulet_found) diff --git a/code/game/gamemodes/personal_objectives/necra/hear_cries.dm b/code/game/gamemodes/personal_objectives/necra/hear_cries.dm index 4c56e3cda60..f97e92d5caa 100644 --- a/code/game/gamemodes/personal_objectives/necra/hear_cries.dm +++ b/code/game/gamemodes/personal_objectives/necra/hear_cries.dm @@ -37,7 +37,7 @@ var/amulet_found = FALSE for(var/obj/item/clothing/neck/current_item in user.get_equipped_items(TRUE)) - if(current_item.type in list(/obj/item/clothing/neck/psycross/silver/necra)) + if(current_item.type in list(/obj/item/clothing/neck/psycross/silver/divine/necra)) amulet_found = TRUE if(!amulet_found) diff --git a/code/modules/clothing/neck/psycross.dm b/code/modules/clothing/neck/psycross.dm index a21d93f2580..078241392e6 100644 --- a/code/modules/clothing/neck/psycross.dm +++ b/code/modules/clothing/neck/psycross.dm @@ -33,62 +33,58 @@ enchant(/datum/enchantment/silver) // PANTHEON SILVER PSYCROSSES START +/obj/item/clothing/neck/psycross/silver/divine + name = "amulet of the ten" + desc = "The Ten eternal, strength in unity. Stalwart for centuries against the darkness." + icon_state = "undivided" + resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/astrata +/obj/item/clothing/neck/psycross/silver/divine/astrata name = "amulet of Astrata" desc = "Blessed be everything the light of the sun touches, for it is protected by Her grace." icon_state = "astrata" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/noc +/obj/item/clothing/neck/psycross/silver/divine/noc name = "amulet of Noc" desc = "Diligence, study, pursuit of truth and wisdom. Let nothing deter you from it." icon_state = "noc" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/dendor +/obj/item/clothing/neck/psycross/silver/divine/dendor name = "amulet of Dendor" desc = "Nature is a body of which we are but its entrails." icon_state = "dendor" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/abyssor +/obj/item/clothing/neck/psycross/silver/divine/abyssor name = "amulet of Abyssor" desc = "Oceanshaper and guardian of the seas, make them remember his name." icon_state = "abyssor" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/necra +/obj/item/clothing/neck/psycross/silver/divine/necra name = "amulet of Necra" desc = "Where, grave, thy victory? I triumph still while the Veiled Lady abides by me." icon_state = "necra" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/ravox +/obj/item/clothing/neck/psycross/silver/divine/ravox name = "amulet of Ravox" desc = "Struggle. Challenge. And rise to struggle again. That is the sword of he who yet lives to fight again." icon_state = "ravox" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/xylix +/obj/item/clothing/neck/psycross/silver/divine/xylix name = "amulet of Xylix" desc = "Be not fooled, and be not afraid to." icon_state = "xylix" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/eora +/obj/item/clothing/neck/psycross/silver/divine/eora name = "amulet of Eora" desc = "And I love thee because thou art love." icon_state = "eora" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/holy/eora +/obj/item/clothing/neck/psycross/silver/divine/eora/potion name = "Eora's love potion" desc = "Eora's blessing is upon thy, use me on someone else and you shall be soulbond." icon_state = "eora" - resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/holy/eora/attack(mob/living/love_target, mob/user, list/modifiers) +/obj/item/clothing/neck/psycross/silver/divine/eora/potion/attack(mob/living/love_target, mob/user, list/modifiers) if(!isliving(love_target) || love_target.stat == DEAD) to_chat(user, span_warning("The love potion only works on living things, sicko!")) return ..() @@ -110,25 +106,25 @@ love_target.apply_status_effect(/datum/status_effect/in_love, user) qdel(src) -/obj/item/clothing/neck/psycross/silver/pestra +/obj/item/clothing/neck/psycross/silver/divine/pestra name = "amulet of Pestra" desc = "When pure, alcohol is best used as a cleanser of wounds and a cleanser of the palate." icon_state = "pestra" resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/malum +/obj/item/clothing/neck/psycross/silver/divine/malum name = "amulet of Malum" desc = "Blessed be our works, made in His name." icon_state = "malum" resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/silver/malum/steel +/obj/item/clothing/neck/psycross/silver/divine/malum/steel name = "amulet of Malum" desc = "Let the tools that guide thee be thy hands." icon_state = "malum_alt" resistance_flags = FIRE_PROOF -/obj/item/clothing/neck/psycross/g +/obj/item/clothing/neck/psycross/gold name = "golden psycross" desc = "Let His name be naught but forgot'n. Let devotion to Him endure, in heart and in deed, beyond the veil of sight." icon_state = "psycross_gold" @@ -136,9 +132,3 @@ resistance_flags = FIRE_PROOF sellprice = 100 smeltresult = /obj/item/ingot/gold - -/obj/item/clothing/neck/psycross/silver/undivided - name = "amulet of the ten" - desc = "The Ten eternal, strength in unity. Stalwart for centuries against the darkness." - icon_state = "undivided" - diff --git a/code/modules/crafting/artificer/misc.dm b/code/modules/crafting/artificer/misc.dm index 7a46c4fea85..94b08b940ec 100644 --- a/code/modules/crafting/artificer/misc.dm +++ b/code/modules/crafting/artificer/misc.dm @@ -481,64 +481,69 @@ /datum/artificer_recipe/psycross/gold name = "golden Psycross" required_item = /obj/item/ingot/gold - created_item = /obj/item/clothing/neck/psycross/g + created_item = /obj/item/clothing/neck/psycross/gold hammers_per_item = 7 craftdiff = 3 +/datum/artificer_recipe/psycross/undivided + name = "Undivided Psycross" + required_item = /obj/item/ingot/silver + created_item = /obj/item/clothing/neck/psycross/silver/divine + /datum/artificer_recipe/psycross/noc name = "Noc Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/noc + created_item = /obj/item/clothing/neck/psycross/silver/divine/noc /datum/artificer_recipe/psycross/astrata name = "Astrata Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/astrata + created_item = /obj/item/clothing/neck/psycross/silver/divine/astrata /datum/artificer_recipe/psycross/dendor name = "Dendor Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/dendor + created_item = /obj/item/clothing/neck/psycross/silver/divine/dendor /datum/artificer_recipe/psycross/abyssor name = "Abyssor Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/abyssor + created_item = /obj/item/clothing/neck/psycross/silver/divine/abyssor /datum/artificer_recipe/psycross/necra name = "Necra Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/necra + created_item = /obj/item/clothing/neck/psycross/silver/divine/necra /datum/artificer_recipe/psycross/ravox name = "Ravox Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/ravox + created_item = /obj/item/clothing/neck/psycross/silver/divine/ravox /datum/artificer_recipe/psycross/xylix name = "Xylix Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/xylix + created_item = /obj/item/clothing/neck/psycross/silver/divine/xylix /datum/artificer_recipe/psycross/eora name = "Eora Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/eora + created_item = /obj/item/clothing/neck/psycross/silver/divine/eora /datum/artificer_recipe/psycross/pestra name = "Pestra Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/pestra + created_item = /obj/item/clothing/neck/psycross/silver/divine/pestra /datum/artificer_recipe/psycross/malum_silver name = "Malum Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/malum + created_item = /obj/item/clothing/neck/psycross/silver/divine/malum /datum/artificer_recipe/psycross/malum_steel name = "Malum Steel Psycross" required_item = /obj/item/ingot/silver - created_item = /obj/item/clothing/neck/psycross/silver/malum/steel + created_item = /obj/item/clothing/neck/psycross/silver/divine/malum/steel additional_items = list(/obj/item/ingot/steel = 1) craftdiff = 3 diff --git a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm index 8ac4d9184e6..86811adb245 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm @@ -160,34 +160,34 @@ if(equipped_human.patron) switch(equipped_human.patron.type) if(/datum/patron/divine/astrata) - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata cloak = /obj/item/clothing/cloak/stabard/templar/astrata if(/datum/patron/divine/dendor) - wrists = /obj/item/clothing/neck/psycross/silver/dendor + wrists = /obj/item/clothing/neck/psycross/silver/divine/dendor cloak = /obj/item/clothing/cloak/stabard/templar/dendor if(/datum/patron/divine/necra) - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra cloak = /obj/item/clothing/cloak/stabard/templar/necra beltr = /obj/item/weapon/shovel/small if(/datum/patron/divine/eora) - wrists = /obj/item/clothing/neck/psycross/silver/eora + wrists = /obj/item/clothing/neck/psycross/silver/divine/eora cloak = /obj/item/clothing/cloak/stabard/templar/eora if(/datum/patron/divine/ravox) - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox cloak = /obj/item/clothing/cloak/stabard/templar/ravox if(/datum/patron/divine/noc) - wrists = /obj/item/clothing/neck/psycross/silver/noc + wrists = /obj/item/clothing/neck/psycross/silver/divine/noc cloak = /obj/item/clothing/cloak/stabard/templar/noc if(/datum/patron/divine/pestra) - wrists = /obj/item/clothing/neck/psycross/silver/pestra + wrists = /obj/item/clothing/neck/psycross/silver/divine/pestra cloak = /obj/item/clothing/cloak/stabard/templar/pestra if(/datum/patron/divine/abyssor) - wrists = /obj/item/clothing/neck/psycross/silver/abyssor + wrists = /obj/item/clothing/neck/psycross/silver/divine/abyssor cloak = /obj/item/clothing/cloak/stabard/templar/abyssor beltl = /obj/item/fishingrod if(/datum/patron/divine/malum) - wrists = /obj/item/clothing/neck/psycross/silver/malum + wrists = /obj/item/clothing/neck/psycross/silver/divine/malum cloak = /obj/item/clothing/cloak/stabard/templar/malum if(/datum/patron/divine/xylix) - wrists = /obj/item/clothing/neck/psycross/silver/xylix + wrists = /obj/item/clothing/neck/psycross/silver/divine/xylix cloak = /obj/item/clothing/cloak/stabard/templar/xylix diff --git a/code/modules/jobs/job_types/adventurer/types/combat/hollowranger.dm b/code/modules/jobs/job_types/adventurer/types/combat/hollowranger.dm index 8a441a8e48c..5e3c3b33184 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/hollowranger.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/hollowranger.dm @@ -58,7 +58,7 @@ beltl = /obj/item/ammo_holder/quiver/arrows beltr = /obj/item/weapon/knife/cleaver/combat armor = /obj/item/clothing/armor/leather/jacket - wrists = /obj/item/clothing/neck/psycross/silver/dendor + wrists = /obj/item/clothing/neck/psycross/silver/divine/dendor gloves = /obj/item/clothing/gloves/fingerless cloak = /obj/item/clothing/cloak/raincloak/furcloak/colored/black diff --git a/code/modules/jobs/job_types/adventurer/types/combat/monk.dm b/code/modules/jobs/job_types/adventurer/types/combat/monk.dm index 81f6b3fab51..bcb1d0363f9 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/monk.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/monk.dm @@ -62,22 +62,22 @@ switch(H.patron?.type) if(/datum/patron/divine/astrata) - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/necra) // Necra acolytes are now gravetenders - neck = /obj/item/clothing/neck/psycross/silver/necra + neck = /obj/item/clothing/neck/psycross/silver/divine/necra if(/datum/patron/divine/eora) - neck = /obj/item/clothing/neck/psycross/silver/eora + neck = /obj/item/clothing/neck/psycross/silver/divine/eora if(/datum/patron/divine/noc) - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc if(/datum/patron/divine/pestra) - neck = /obj/item/clothing/neck/psycross/silver/pestra + neck = /obj/item/clothing/neck/psycross/silver/divine/pestra if(/datum/patron/divine/dendor) - neck = /obj/item/clothing/neck/psycross/silver/dendor + neck = /obj/item/clothing/neck/psycross/silver/divine/dendor if(/datum/patron/divine/abyssor) - neck = /obj/item/clothing/neck/psycross/silver/abyssor + neck = /obj/item/clothing/neck/psycross/silver/divine/abyssor if(/datum/patron/divine/ravox) - neck = /obj/item/clothing/neck/psycross/silver/ravox + neck = /obj/item/clothing/neck/psycross/silver/divine/ravox if(/datum/patron/divine/xylix) - neck = /obj/item/clothing/neck/psycross/silver/xylix + neck = /obj/item/clothing/neck/psycross/silver/divine/xylix if(/datum/patron/divine/malum) - neck = /obj/item/clothing/neck/psycross/silver/malum + neck = /obj/item/clothing/neck/psycross/silver/divine/malum diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/briar.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/briar.dm index 66ce39655bc..0e6df51fdea 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/briar.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/briar.dm @@ -67,7 +67,7 @@ name = "Briar (Pilgrim)" belt = /obj/item/storage/belt/leather/rope mask = /obj/item/clothing/face/druid - neck = /obj/item/clothing/neck/psycross/silver/dendor + neck = /obj/item/clothing/neck/psycross/silver/divine/dendor shirt = /obj/item/clothing/armor/leather/vest armor = /obj/item/clothing/shirt/robe/dendor wrists = /obj/item/clothing/wrists/bracers/leather diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm index 3b83958760c..c785d103e18 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/rare/grenzelhoft.dm @@ -61,7 +61,7 @@ name = "Grenzelhoft Count (Pilgrim)" shoes = /obj/item/clothing/shoes/rare/grenzelhoft gloves = /obj/item/clothing/gloves/angle/grenzel - wrists = /obj/item/clothing/neck/psycross/g + wrists = /obj/item/clothing/neck/psycross/gold head = /obj/item/clothing/head/helmet/skullcap/grenzelhoft armor = /obj/item/clothing/armor/brigandine belt = /obj/item/storage/belt/leather/plaquesilver diff --git a/code/modules/jobs/job_types/adventurer/types/special/crusader.dm b/code/modules/jobs/job_types/adventurer/types/special/crusader.dm index 040df3c042e..327ee0b8123 100644 --- a/code/modules/jobs/job_types/adventurer/types/special/crusader.dm +++ b/code/modules/jobs/job_types/adventurer/types/special/crusader.dm @@ -82,13 +82,13 @@ switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) cloak = /obj/item/clothing/cloak/stabard/templar/astrata - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/necra) cloak = /obj/item/clothing/cloak/stabard/templar/necra - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra else cloak = /obj/item/clothing/cloak/stabard/templar/ravox - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox if(equipped_human.gender == FEMALE) head = /obj/item/clothing/head/helmet/heavy/crusader/t diff --git a/code/modules/jobs/job_types/adventurer/types/wretch/heretic.dm b/code/modules/jobs/job_types/adventurer/types/wretch/heretic.dm index c9509bd5ea3..24de37e0136 100644 --- a/code/modules/jobs/job_types/adventurer/types/wretch/heretic.dm +++ b/code/modules/jobs/job_types/adventurer/types/wretch/heretic.dm @@ -142,27 +142,27 @@ switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata head = /obj/item/clothing/head/helmet/heavy/necked/astrata cloak = /obj/item/clothing/cloak/stabard/templar/astrata backr = /obj/item/weapon/sword/long/exe/astrata if(/datum/patron/divine/noc) - wrists = /obj/item/clothing/neck/psycross/silver/noc + wrists = /obj/item/clothing/neck/psycross/silver/divine/noc head = /obj/item/clothing/head/helmet/heavy/necked/noc cloak = /obj/item/clothing/cloak/stabard/templar/noc beltl = /obj/item/weapon/sword/sabre/noc if(/datum/patron/divine/dendor) - wrists = /obj/item/clothing/neck/psycross/silver/dendor + wrists = /obj/item/clothing/neck/psycross/silver/divine/dendor head = /obj/item/clothing/head/helmet/heavy/necked/dendorhelm cloak = /obj/item/clothing/cloak/stabard/templar/dendor backr = /obj/item/weapon/polearm/halberd/bardiche/dendor if(/datum/patron/divine/necra) - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra head = /obj/item/clothing/head/helmet/heavy/necked/necra cloak = /obj/item/clothing/cloak/stabard/templar/necra beltl = /obj/item/weapon/flail/sflail/necraflail if(/datum/patron/divine/pestra) - wrists = /obj/item/clothing/neck/psycross/silver/pestra + wrists = /obj/item/clothing/neck/psycross/silver/divine/pestra head = /obj/item/clothing/head/helmet/heavy/necked/pestrahelm cloak = /obj/item/clothing/cloak/stabard/templar/pestra backpack_contents += /obj/item/reagent_containers/glass/bottle/strongpoison @@ -170,27 +170,27 @@ beltl = /obj/item/weapon/knife/dagger/steel/pestrasickle if(/datum/patron/divine/eora) head = /obj/item/clothing/head/helmet/sallet/eoran - wrists = /obj/item/clothing/neck/psycross/silver/eora + wrists = /obj/item/clothing/neck/psycross/silver/divine/eora cloak = /obj/item/clothing/cloak/stabard/templar/eora beltr = /obj/item/weapon/sword/rapier/eora if(/datum/patron/divine/ravox) - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox head = /obj/item/clothing/head/helmet/heavy/necked/ravox cloak = /obj/item/clothing/cloak/stabard/templar/ravox backr = /obj/item/weapon/sword/long/ravox if(/datum/patron/divine/malum) - wrists = /obj/item/clothing/neck/psycross/silver/malum + wrists = /obj/item/clothing/neck/psycross/silver/divine/malum head = /obj/item/clothing/head/helmet/heavy/necked/malumhelm cloak = /obj/item/clothing/cloak/stabard/templar/malum backr = /obj/item/weapon/hammer/sledgehammer/war/malum if(/datum/patron/divine/abyssor) head = /obj/item/clothing/head/helmet/heavy/necked/abyssor armor = /obj/item/clothing/armor/brigandine/abyssor - wrists = /obj/item/clothing/neck/psycross/silver/abyssor + wrists = /obj/item/clothing/neck/psycross/silver/divine/abyssor cloak = /obj/item/clothing/cloak/stabard/templar/abyssor backr = /obj/item/weapon/polearm/spear/abyssor if(/datum/patron/divine/xylix) - wrists = /obj/item/clothing/neck/psycross/silver/xylix + wrists = /obj/item/clothing/neck/psycross/silver/divine/xylix head = /obj/item/clothing/head/helmet/heavy/necked/xylix cloak = /obj/item/clothing/cloak/stabard/templar/xylix beltl = /obj/item/weapon/whip/xylix @@ -239,7 +239,7 @@ beltr = /obj/item/weapon/knife/dagger/steel/dirk/baotha beltl = /obj/item/weapon/knife/dagger/steel/dirk/baotha if(/datum/patron/psydon, /datum/patron/psydon/extremist) - wrists = /obj/item/clothing/neck/psycross/g + wrists = /obj/item/clothing/neck/psycross/gold armor = /obj/item/clothing/armor/cuirass/fluted cloak = /obj/item/clothing/cloak/psydontabard gloves = /obj/item/clothing/gloves/chain/psydon @@ -249,6 +249,6 @@ beltl = /obj/item/weapon/scabbard/sword else head = /obj/item/clothing/head/helmet/heavy/bucket - wrists = /obj/item/clothing/neck/psycross/silver/undivided + wrists = /obj/item/clothing/neck/psycross/silver/divine cloak = /obj/item/clothing/cloak/templar/undivided beltr = /obj/item/weapon/sword/long/decorated diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 8ab2ce28e86..403ae200953 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -101,7 +101,7 @@ belt = /obj/item/storage/belt/leather/black ring = /obj/item/clothing/ring/silver/rontz gloves = /obj/item/clothing/gloves/plate/silver - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox diff --git a/code/modules/jobs/job_types/church/monk.dm b/code/modules/jobs/job_types/church/monk.dm index ede899ae441..a8eb2260bb7 100644 --- a/code/modules/jobs/job_types/church/monk.dm +++ b/code/modules/jobs/job_types/church/monk.dm @@ -150,13 +150,13 @@ switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) head = /obj/item/clothing/head/roguehood/astrata - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata wrists = /obj/item/clothing/wrists/wrappings shoes = /obj/item/clothing/shoes/sandals armor = /obj/item/clothing/shirt/robe/astrata if(/datum/patron/divine/necra) head = /obj/item/clothing/head/padded/deathshroud - neck = /obj/item/clothing/neck/psycross/silver/necra + neck = /obj/item/clothing/neck/psycross/silver/divine/necra shoes = /obj/item/clothing/shoes/boots pants = /obj/item/clothing/pants/trou/leather/mourning armor = /obj/item/clothing/shirt/robe/necra @@ -167,46 +167,46 @@ backl = /obj/item/weapon/polearm/woodstaff/quarterstaff if(/datum/patron/divine/eora) mask = /obj/item/clothing/face/operavisage - neck = /obj/item/clothing/neck/psycross/silver/eora + neck = /obj/item/clothing/neck/psycross/silver/divine/eora shoes = /obj/item/clothing/shoes/sandals armor = /obj/item/clothing/shirt/robe/eora if(/datum/patron/divine/noc) head = /obj/item/clothing/head/roguehood/nochood - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc wrists = /obj/item/clothing/wrists/nocwrappings shoes = /obj/item/clothing/shoes/sandals armor = /obj/item/clothing/shirt/robe/noc if(/datum/patron/divine/pestra) head = /obj/item/clothing/head/padded/pestra - neck = /obj/item/clothing/neck/psycross/silver/pestra + neck = /obj/item/clothing/neck/psycross/silver/divine/pestra shoes = /obj/item/clothing/shoes/sandals armor = /obj/item/clothing/shirt/robe/pestra backpack_contents += /obj/item/needle/blessed if(/datum/patron/divine/dendor) head = /obj/item/clothing/head/padded/briarthorns - neck = /obj/item/clothing/neck/psycross/silver/dendor + neck = /obj/item/clothing/neck/psycross/silver/divine/dendor shoes = /obj/item/clothing/shoes/sandals armor = /obj/item/clothing/shirt/robe/dendor if(/datum/patron/divine/abyssor) head = /obj/item/clothing/head/padded/abyssor - neck = /obj/item/clothing/neck/psycross/silver/abyssor + neck = /obj/item/clothing/neck/psycross/silver/divine/abyssor shoes = /obj/item/clothing/shoes/boots armor = /obj/item/clothing/shirt/robe/abyssor if(/datum/patron/divine/ravox) head = /obj/item/clothing/head/helmet/leather/headscarf - neck = /obj/item/clothing/neck/psycross/silver/ravox + neck = /obj/item/clothing/neck/psycross/silver/divine/ravox shoes = /obj/item/clothing/shoes/boots shirt = /obj/item/clothing/armor/gambeson/light armor = /obj/item/clothing/armor/leather cloak = /obj/item/clothing/cloak/stabard/templar/ravox if(/datum/patron/divine/xylix) head = /obj/item/clothing/head/roguehood/colored/random - neck = /obj/item/clothing/neck/psycross/silver/xylix + neck = /obj/item/clothing/neck/psycross/silver/divine/xylix shoes = /obj/item/clothing/shoes/boots armor = /obj/item/clothing/shirt/robe/colored/purple if(/datum/patron/divine/malum) head = /obj/item/clothing/head/headband/colored/red - neck = /obj/item/clothing/neck/psycross/silver/malum + neck = /obj/item/clothing/neck/psycross/silver/divine/malum shoes = /obj/item/clothing/shoes/boots armor = /obj/item/clothing/shirt/robe/colored/red backl = /obj/item/weapon/polearm/woodstaff/quarterstaff diff --git a/code/modules/jobs/job_types/church/priest.dm b/code/modules/jobs/job_types/church/priest.dm index 1bb84787224..c96b0bec061 100644 --- a/code/modules/jobs/job_types/church/priest.dm +++ b/code/modules/jobs/job_types/church/priest.dm @@ -78,7 +78,7 @@ /datum/outfit/priest name = "Priest" - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata head = /obj/item/clothing/head/priestmask shirt = /obj/item/clothing/shirt/undershirt/priest pants = /obj/item/clothing/pants/tights/colored/black diff --git a/code/modules/jobs/job_types/church/templar.dm b/code/modules/jobs/job_types/church/templar.dm index fac6cf8cb5a..b5b990cb7fc 100644 --- a/code/modules/jobs/job_types/church/templar.dm +++ b/code/modules/jobs/job_types/church/templar.dm @@ -146,27 +146,27 @@ . = ..() switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata head = /obj/item/clothing/head/helmet/heavy/necked/astrata cloak = /obj/item/clothing/cloak/stabard/templar/astrata backr = /obj/item/weapon/sword/long/exe/astrata if(/datum/patron/divine/noc) - wrists = /obj/item/clothing/neck/psycross/silver/noc + wrists = /obj/item/clothing/neck/psycross/silver/divine/noc head = /obj/item/clothing/head/helmet/heavy/necked/noc cloak = /obj/item/clothing/cloak/stabard/templar/noc beltl = /obj/item/weapon/sword/sabre/noc if(/datum/patron/divine/dendor) - wrists = /obj/item/clothing/neck/psycross/silver/dendor + wrists = /obj/item/clothing/neck/psycross/silver/divine/dendor head = /obj/item/clothing/head/helmet/heavy/necked/dendorhelm cloak = /obj/item/clothing/cloak/stabard/templar/dendor backr = /obj/item/weapon/polearm/halberd/bardiche/dendor if(/datum/patron/divine/necra) - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra head = /obj/item/clothing/head/helmet/heavy/necked/necra cloak = /obj/item/clothing/cloak/stabard/templar/necra beltl = /obj/item/weapon/flail/sflail/necraflail if(/datum/patron/divine/pestra) - wrists = /obj/item/clothing/neck/psycross/silver/pestra + wrists = /obj/item/clothing/neck/psycross/silver/divine/pestra head = /obj/item/clothing/head/helmet/heavy/necked/pestrahelm cloak = /obj/item/clothing/cloak/stabard/templar/pestra backpack_contents += /obj/item/reagent_containers/glass/bottle/poison @@ -174,25 +174,25 @@ beltl = /obj/item/weapon/knife/dagger/steel/pestrasickle if(/datum/patron/divine/eora) head = /obj/item/clothing/head/helmet/sallet/eoran - wrists = /obj/item/clothing/neck/psycross/silver/eora + wrists = /obj/item/clothing/neck/psycross/silver/divine/eora cloak = /obj/item/clothing/cloak/stabard/templar/eora if(/datum/patron/divine/ravox) - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox head = /obj/item/clothing/head/helmet/heavy/necked/ravox cloak = /obj/item/clothing/cloak/stabard/templar/ravox backr = /obj/item/weapon/sword/long/ravox if(/datum/patron/divine/malum) - wrists = /obj/item/clothing/neck/psycross/silver/malum + wrists = /obj/item/clothing/neck/psycross/silver/divine/malum head = /obj/item/clothing/head/helmet/heavy/necked/malumhelm cloak = /obj/item/clothing/cloak/stabard/templar/malum backr = /obj/item/weapon/hammer/sledgehammer/war/malum if(/datum/patron/divine/abyssor) head = /obj/item/clothing/head/helmet/heavy/necked/abyssor armor = /obj/item/clothing/armor/brigandine/abyssor - wrists = /obj/item/clothing/neck/psycross/silver/abyssor + wrists = /obj/item/clothing/neck/psycross/silver/divine/abyssor cloak = /obj/item/clothing/cloak/stabard/templar/abyssor if(/datum/patron/divine/xylix) - wrists = /obj/item/clothing/neck/psycross/silver/xylix + wrists = /obj/item/clothing/neck/psycross/silver/divine/xylix head = /obj/item/clothing/head/helmet/heavy/necked/xylix cloak = /obj/item/clothing/cloak/stabard/templar/xylix beltl = /obj/item/weapon/whip/xylix diff --git a/code/modules/jobs/job_types/garrison/town_elder.dm b/code/modules/jobs/job_types/garrison/town_elder.dm index fbdf02acc23..7cc8356b771 100644 --- a/code/modules/jobs/job_types/garrison/town_elder.dm +++ b/code/modules/jobs/job_types/garrison/town_elder.dm @@ -371,26 +371,26 @@ . = ..() switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/necra) - neck = /obj/item/clothing/neck/psycross/silver/necra + neck = /obj/item/clothing/neck/psycross/silver/divine/necra if(/datum/patron/divine/eora) - neck = /obj/item/clothing/neck/psycross/silver/eora + neck = /obj/item/clothing/neck/psycross/silver/divine/eora if(/datum/patron/divine/noc) - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc if(/datum/patron/divine/pestra) - neck = /obj/item/clothing/neck/psycross/silver/pestra + neck = /obj/item/clothing/neck/psycross/silver/divine/pestra backpack_contents += /obj/item/needle/blessed if(/datum/patron/divine/dendor) - neck = /obj/item/clothing/neck/psycross/silver/dendor + neck = /obj/item/clothing/neck/psycross/silver/divine/dendor if(/datum/patron/divine/abyssor) - neck = /obj/item/clothing/neck/psycross/silver/abyssor + neck = /obj/item/clothing/neck/psycross/silver/divine/abyssor if(/datum/patron/divine/ravox) - neck = /obj/item/clothing/neck/psycross/silver/ravox + neck = /obj/item/clothing/neck/psycross/silver/divine/ravox if(/datum/patron/divine/xylix) - neck = /obj/item/clothing/neck/psycross/silver/xylix + neck = /obj/item/clothing/neck/psycross/silver/divine/xylix if(/datum/patron/divine/malum) - neck = /obj/item/clothing/neck/psycross/silver/malum + neck = /obj/item/clothing/neck/psycross/silver/divine/malum backpack_contents += /obj/item/weapon/hammer/iron else neck = /obj/item/clothing/neck/psycross/silver diff --git a/code/modules/jobs/job_types/inquistion/puritian/preceptor.dm b/code/modules/jobs/job_types/inquistion/puritian/preceptor.dm index 29509681126..ef5e3e576ea 100644 --- a/code/modules/jobs/job_types/inquistion/puritian/preceptor.dm +++ b/code/modules/jobs/job_types/inquistion/puritian/preceptor.dm @@ -68,7 +68,7 @@ head = /obj/item/clothing/head/headband/naledi mask = /obj/item/clothing/face/lordmask/naledi/sojourner gloves = /obj/item/clothing/gloves/bandages/pugilist - neck = /obj/item/clothing/neck/psycross/g + neck = /obj/item/clothing/neck/psycross/gold wrists = /obj/item/clothing/wrists/bracers/naledi ring = /obj/item/clothing/ring/signet diff --git a/code/modules/jobs/job_types/nobility/archivist.dm b/code/modules/jobs/job_types/nobility/archivist.dm index 79da01d5800..d461c2e4772 100644 --- a/code/modules/jobs/job_types/nobility/archivist.dm +++ b/code/modules/jobs/job_types/nobility/archivist.dm @@ -92,7 +92,7 @@ beltl = /obj/item/storage/keyring/archivist beltr = /obj/item/book/granter/spellbook/apprentice backl = /obj/item/storage/backpack/satchel - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc backpack_contents = list( /obj/item/textbook = 1, /obj/item/natural/feather = 1 @@ -156,7 +156,7 @@ belt = /obj/item/storage/belt/leather/plaquesilver beltr = /obj/item/storage/keyring/archivist wrists = /obj/item/clothing/wrists/nocwrappings - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc backl = /obj/item/storage/backpack/satchel backpack_contents = list( /obj/item/storage/belt/pouch/coins/poor = 1, diff --git a/code/modules/jobs/job_types/other/folkheroes/lakkariancleric.dm b/code/modules/jobs/job_types/other/folkheroes/lakkariancleric.dm index 0dde84ca777..db5f615f1ec 100644 --- a/code/modules/jobs/job_types/other/folkheroes/lakkariancleric.dm +++ b/code/modules/jobs/job_types/other/folkheroes/lakkariancleric.dm @@ -68,7 +68,7 @@ armor = /obj/item/clothing/armor/gambeson/heavy/lakkarijupon shirt = /obj/item/clothing/shirt/undershirt/fancy gloves = /obj/item/clothing/gloves/leather - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata pants = /obj/item/clothing/pants/trou/leather/quiltedkilt/colored/blue shoes = /obj/item/clothing/shoes/boots/leather neck = /obj/item/clothing/neck/coif/cloth // price to pay for being a speedy class, less neck protection diff --git a/code/modules/jobs/job_types/other/folkheroes/monsterhunter.dm b/code/modules/jobs/job_types/other/folkheroes/monsterhunter.dm index a51a197f1e3..0781bc0a643 100644 --- a/code/modules/jobs/job_types/other/folkheroes/monsterhunter.dm +++ b/code/modules/jobs/job_types/other/folkheroes/monsterhunter.dm @@ -65,10 +65,10 @@ if(/datum/patron/psydon, /datum/patron/psydon/extremist) wrists = /obj/item/clothing/neck/psycross/silver if(/datum/patron/divine/astrata) - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/necra) - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra if(/datum/patron/divine/pestra) - wrists = /obj/item/clothing/neck/psycross/silver/pestra + wrists = /obj/item/clothing/neck/psycross/silver/divine/pestra else wrists = /obj/item/clothing/neck/silveramulet diff --git a/code/modules/jobs/job_types/other/folkheroes/paladin.dm b/code/modules/jobs/job_types/other/folkheroes/paladin.dm index 31b6bb23f1a..4677f4554d6 100644 --- a/code/modules/jobs/job_types/other/folkheroes/paladin.dm +++ b/code/modules/jobs/job_types/other/folkheroes/paladin.dm @@ -113,34 +113,34 @@ switch(H.patron?.type) if(/datum/patron/psydon, /datum/patron/psydon/extremist) head = /obj/item/clothing/head/helmet/heavy/bucket/gold - wrists = /obj/item/clothing/neck/psycross/g + wrists = /obj/item/clothing/neck/psycross/gold if(/datum/patron/divine/astrata) head = /obj/item/clothing/head/helmet/heavy/necked/astrata - wrists = /obj/item/clothing/neck/psycross/silver/astrata + wrists = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/noc) head = /obj/item/clothing/head/helmet/heavy/necked/noc - wrists = /obj/item/clothing/neck/psycross/silver/noc + wrists = /obj/item/clothing/neck/psycross/silver/divine/noc if(/datum/patron/divine/dendor) head = /obj/item/clothing/head/helmet/heavy/necked/dendorhelm - wrists = /obj/item/clothing/neck/psycross/silver/dendor + wrists = /obj/item/clothing/neck/psycross/silver/divine/dendor if(/datum/patron/divine/abyssor) head = /obj/item/clothing/head/helmet/heavy/necked/abyssor - wrists = /obj/item/clothing/neck/psycross/silver/abyssor + wrists = /obj/item/clothing/neck/psycross/silver/divine/abyssor if(/datum/patron/divine/necra) head = /obj/item/clothing/head/helmet/heavy/necked/necra - wrists = /obj/item/clothing/neck/psycross/silver/necra + wrists = /obj/item/clothing/neck/psycross/silver/divine/necra if(/datum/patron/divine/ravox) head = /obj/item/clothing/head/helmet/heavy/necked/ravox - wrists = /obj/item/clothing/neck/psycross/silver/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox if(/datum/patron/divine/xylix) head = /obj/item/clothing/head/helmet/heavy/necked/xylix - wrists = /obj/item/clothing/neck/psycross/silver/xylix + wrists = /obj/item/clothing/neck/psycross/silver/divine/xylix if(/datum/patron/divine/pestra) head = /obj/item/clothing/head/helmet/heavy/necked/pestrahelm - wrists = /obj/item/clothing/neck/psycross/silver/pestra + wrists = /obj/item/clothing/neck/psycross/silver/divine/pestra if(/datum/patron/divine/malum) head = /obj/item/clothing/head/helmet/heavy/necked/malumhelm - wrists = /obj/item/clothing/neck/psycross/silver/malum + wrists = /obj/item/clothing/neck/psycross/silver/divine/malum if(/datum/patron/divine/eora) head = /obj/item/clothing/head/helmet/sallet/eoran - wrists = /obj/item/clothing/neck/psycross/silver/eora + wrists = /obj/item/clothing/neck/psycross/silver/divine/eora diff --git a/code/modules/jobs/job_types/other/folkheroes/swashbuckler.dm b/code/modules/jobs/job_types/other/folkheroes/swashbuckler.dm index 7db16648ed1..6e86a31b0e0 100644 --- a/code/modules/jobs/job_types/other/folkheroes/swashbuckler.dm +++ b/code/modules/jobs/job_types/other/folkheroes/swashbuckler.dm @@ -59,7 +59,7 @@ beltl = /obj/item/weapon/sword/sabre/cutlass beltr = /obj/item/weapon/knife/dagger shoes = /obj/item/clothing/shoes/boots - neck = /obj/item/clothing/neck/psycross/silver/abyssor + neck = /obj/item/clothing/neck/psycross/silver/divine/abyssor /datum/outfit/folkhero/swashbuckler/pre_equip(mob/living/carbon/human/H, visuals_only) . = ..() diff --git a/code/modules/jobs/job_types/peasants/gravedigger.dm b/code/modules/jobs/job_types/peasants/gravedigger.dm index f619f1ea02f..21301084d8e 100644 --- a/code/modules/jobs/job_types/peasants/gravedigger.dm +++ b/code/modules/jobs/job_types/peasants/gravedigger.dm @@ -65,7 +65,7 @@ /datum/outfit/undertaker name = "Gravetender" head = /obj/item/clothing/head/padded/deathshroud - neck = /obj/item/clothing/neck/psycross/silver/necra + neck = /obj/item/clothing/neck/psycross/silver/divine/necra pants = /obj/item/clothing/pants/trou/leather/mourning armor = /obj/item/clothing/shirt/robe/necra shoes = /obj/item/clothing/shoes/boots diff --git a/code/modules/jobs/job_types/youngfolk/churchling.dm b/code/modules/jobs/job_types/youngfolk/churchling.dm index 8c3d0bfb232..068f56afca0 100644 --- a/code/modules/jobs/job_types/youngfolk/churchling.dm +++ b/code/modules/jobs/job_types/youngfolk/churchling.dm @@ -51,7 +51,7 @@ /datum/outfit/churchling name = "Churchling" - neck = /obj/item/clothing/neck/psycross/silver/undivided + neck = /obj/item/clothing/neck/psycross/silver/divine armor = /obj/item/clothing/shirt/robe shirt = /obj/item/clothing/shirt/undershirt pants = /obj/item/clothing/pants/tights @@ -68,22 +68,22 @@ switch(equipped_human.patron?.type) if(/datum/patron/divine/astrata) - neck = /obj/item/clothing/neck/psycross/silver/astrata + neck = /obj/item/clothing/neck/psycross/silver/divine/astrata if(/datum/patron/divine/necra) - neck = /obj/item/clothing/neck/psycross/silver/necra + neck = /obj/item/clothing/neck/psycross/silver/divine/necra if(/datum/patron/divine/eora) - neck = /obj/item/clothing/neck/psycross/silver/eora + neck = /obj/item/clothing/neck/psycross/silver/divine/eora if(/datum/patron/divine/noc) - neck = /obj/item/clothing/neck/psycross/silver/noc + neck = /obj/item/clothing/neck/psycross/silver/divine/noc if(/datum/patron/divine/pestra) - neck = /obj/item/clothing/neck/psycross/silver/pestra + neck = /obj/item/clothing/neck/psycross/silver/divine/pestra if(/datum/patron/divine/dendor) - neck = /obj/item/clothing/neck/psycross/silver/dendor + neck = /obj/item/clothing/neck/psycross/silver/divine/dendor if(/datum/patron/divine/abyssor) - neck = /obj/item/clothing/neck/psycross/silver/abyssor + neck = /obj/item/clothing/neck/psycross/silver/divine/abyssor if(/datum/patron/divine/ravox) - neck = /obj/item/clothing/neck/psycross/silver/ravox + neck = /obj/item/clothing/neck/psycross/silver/divine/ravox if(/datum/patron/divine/xylix) - neck = /obj/item/clothing/neck/psycross/silver/xylix + neck = /obj/item/clothing/neck/psycross/silver/divine/xylix if(/datum/patron/divine/malum) - neck = /obj/item/clothing/neck/psycross/silver/malum + neck = /obj/item/clothing/neck/psycross/silver/divine/malum diff --git a/code/modules/spells/spell_types/pointed/aoe/churn_undead.dm b/code/modules/spells/spell_types/pointed/aoe/churn_undead.dm index cedbc225d00..27d6fa77c99 100644 --- a/code/modules/spells/spell_types/pointed/aoe/churn_undead.dm +++ b/code/modules/spells/spell_types/pointed/aoe/churn_undead.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/necra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/necra) invocation = "The Undermaiden rebukes!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/avert.dm b/code/modules/spells/spell_types/pointed/avert.dm index 6931df59250..f335e2e7f49 100644 --- a/code/modules/spells/spell_types/pointed/avert.dm +++ b/code/modules/spells/spell_types/pointed/avert.dm @@ -13,7 +13,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/necra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/necra) invocation = "Undermaiden avert your gaze!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/beast_tame.dm b/code/modules/spells/spell_types/pointed/beast_tame.dm index 9d88aa6f409..afda358b325 100644 --- a/code/modules/spells/spell_types/pointed/beast_tame.dm +++ b/code/modules/spells/spell_types/pointed/beast_tame.dm @@ -10,7 +10,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list( /datum/attunement/earth = 1, ) diff --git a/code/modules/spells/spell_types/pointed/blindness.dm b/code/modules/spells/spell_types/pointed/blindness.dm index 7da79c67def..d149a9b618b 100644 --- a/code/modules/spells/spell_types/pointed/blindness.dm +++ b/code/modules/spells/spell_types/pointed/blindness.dm @@ -34,7 +34,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/noc) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/noc) invocation = "Noc blinds thee of thy sins!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/burial_rites.dm b/code/modules/spells/spell_types/pointed/burial_rites.dm index c1ec2542b6f..49f8f0e86a1 100644 --- a/code/modules/spells/spell_types/pointed/burial_rites.dm +++ b/code/modules/spells/spell_types/pointed/burial_rites.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/necra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/necra) invocation = "Undermaiden grant thee passage forth and spare the trials of the forgotten." invocation_type = INVOCATION_WHISPER diff --git a/code/modules/spells/spell_types/pointed/conjure/garden_fae.dm b/code/modules/spells/spell_types/pointed/conjure/garden_fae.dm index 46ccabb9510..d3ff5dd065c 100644 --- a/code/modules/spells/spell_types/pointed/conjure/garden_fae.dm +++ b/code/modules/spells/spell_types/pointed/conjure/garden_fae.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) cooldown_time = 5 MINUTES spell_cost = 50 charge_time = 2 SECONDS diff --git a/code/modules/spells/spell_types/pointed/conjure/kneestingers.dm b/code/modules/spells/spell_types/pointed/conjure/kneestingers.dm index 6245267bca9..38e25f32c63 100644 --- a/code/modules/spells/spell_types/pointed/conjure/kneestingers.dm +++ b/code/modules/spells/spell_types/pointed/conjure/kneestingers.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list( /datum/attunement/earth = 0.6, ) diff --git a/code/modules/spells/spell_types/pointed/endure.dm b/code/modules/spells/spell_types/pointed/endure.dm index ed4f5a5d787..bee596f3f41 100644 --- a/code/modules/spells/spell_types/pointed/endure.dm +++ b/code/modules/spells/spell_types/pointed/endure.dm @@ -68,7 +68,7 @@ psicross_bonus = 0.3 if(/obj/item/clothing/neck/psycross/silver) psicross_bonus = 0.4 - if(/obj/item/clothing/neck/psycross/g) // PURITY AFLOAT. + if(/obj/item/clothing/neck/psycross/gold) // PURITY AFLOAT. psicross_bonus = 0.4 if(damtotal >= 300) // ARE THEY ENDURING MUCH, IN ONE WAY OR ANOTHER? situational_bonus += 0.3 diff --git a/code/modules/spells/spell_types/pointed/eoran_bloom.dm b/code/modules/spells/spell_types/pointed/eoran_bloom.dm index beb587b23c8..20d2beefa5a 100644 --- a/code/modules/spells/spell_types/pointed/eoran_bloom.dm +++ b/code/modules/spells/spell_types/pointed/eoran_bloom.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/eora) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/eora) invocation = "Be at peace with Eora." invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/eoran_charm.dm b/code/modules/spells/spell_types/pointed/eoran_charm.dm index ffef44b04cc..e31cfdcd698 100644 --- a/code/modules/spells/spell_types/pointed/eoran_charm.dm +++ b/code/modules/spells/spell_types/pointed/eoran_charm.dm @@ -31,7 +31,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/eora) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/eora) invocation = "Experiamur vim amoris!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/hammer_fall.dm b/code/modules/spells/spell_types/pointed/hammer_fall.dm index f3173963c5c..40fe882601f 100644 --- a/code/modules/spells/spell_types/pointed/hammer_fall.dm +++ b/code/modules/spells/spell_types/pointed/hammer_fall.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/malum) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/malum) invocation = "Let the weight of Malum's hammer fall!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/heat_metal.dm b/code/modules/spells/spell_types/pointed/heat_metal.dm index 0fbf5ff0172..0cc48294fce 100644 --- a/code/modules/spells/spell_types/pointed/heat_metal.dm +++ b/code/modules/spells/spell_types/pointed/heat_metal.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/malum) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/malum) invocation = "Metal bends to the heat of Malum's forge!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/instill_perfection.dm b/code/modules/spells/spell_types/pointed/instill_perfection.dm index 4b8543dfe89..2505fa38c21 100644 --- a/code/modules/spells/spell_types/pointed/instill_perfection.dm +++ b/code/modules/spells/spell_types/pointed/instill_perfection.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/eora) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/eora) invocation = "Eora, lend some of your divine beauty!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/ocean_embrace.dm b/code/modules/spells/spell_types/pointed/ocean_embrace.dm index 6c88fe4d426..ef603f8cab0 100644 --- a/code/modules/spells/spell_types/pointed/ocean_embrace.dm +++ b/code/modules/spells/spell_types/pointed/ocean_embrace.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/abyssor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/abyssor) invocation = "Embrace the waters of Abyssor's domain!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/persistence.dm b/code/modules/spells/spell_types/pointed/persistence.dm index a618c36f994..bf2e1cb4821 100644 --- a/code/modules/spells/spell_types/pointed/persistence.dm +++ b/code/modules/spells/spell_types/pointed/persistence.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/ravox) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/ravox) invocation = "Ravox deems your persistence worthy!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/projectile/eora_curse.dm b/code/modules/spells/spell_types/pointed/projectile/eora_curse.dm index 17096651ed3..5eaacf24f33 100644 --- a/code/modules/spells/spell_types/pointed/projectile/eora_curse.dm +++ b/code/modules/spells/spell_types/pointed/projectile/eora_curse.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/eora) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/eora) invocation = "Nulla felicitas sine amore!" invocation_type = INVOCATION_WHISPER diff --git a/code/modules/spells/spell_types/pointed/projectile/falcon_disrupt.dm b/code/modules/spells/spell_types/pointed/projectile/falcon_disrupt.dm index 46f945ff857..440eac9f9a7 100644 --- a/code/modules/spells/spell_types/pointed/projectile/falcon_disrupt.dm +++ b/code/modules/spells/spell_types/pointed/projectile/falcon_disrupt.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list(/datum/attunement/earth = 0.5) charge_time = 1 SECONDS charge_drain = 1 diff --git a/code/modules/spells/spell_types/pointed/projectile/moonlit_dagger.dm b/code/modules/spells/spell_types/pointed/projectile/moonlit_dagger.dm index d3d3dcaf78d..97994b42cbe 100644 --- a/code/modules/spells/spell_types/pointed/projectile/moonlit_dagger.dm +++ b/code/modules/spells/spell_types/pointed/projectile/moonlit_dagger.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/noc) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/noc) invocation = "Begone foul beasts!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/projectile/swordfish.dm b/code/modules/spells/spell_types/pointed/projectile/swordfish.dm index 149492d268f..b2e6d8a83ad 100644 --- a/code/modules/spells/spell_types/pointed/projectile/swordfish.dm +++ b/code/modules/spells/spell_types/pointed/projectile/swordfish.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/abyssor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/abyssor) invocation = "Feel Abyssor's rage!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/respite.dm b/code/modules/spells/spell_types/pointed/respite.dm index 98da15950c3..e8dddc9aacc 100644 --- a/code/modules/spells/spell_types/pointed/respite.dm +++ b/code/modules/spells/spell_types/pointed/respite.dm @@ -32,7 +32,7 @@ psicross_bonus = -5 if(/obj/item/clothing/neck/psycross/silver) psicross_bonus = -7 - if(/obj/item/clothing/neck/psycross/g) // PURITY AFLOAT. + if(/obj/item/clothing/neck/psycross/gold) // PURITY AFLOAT. psicross_bonus = -7 if(brute > 100) sit_bonus1 = -2 diff --git a/code/modules/spells/spell_types/pointed/revive.dm b/code/modules/spells/spell_types/pointed/revive.dm index dcedb35344e..9a643d12e1e 100644 --- a/code/modules/spells/spell_types/pointed/revive.dm +++ b/code/modules/spells/spell_types/pointed/revive.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/astrata) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/astrata) charge_time = 5 SECONDS charge_slowdown = 0.7 diff --git a/code/modules/spells/spell_types/pointed/sacred_flame.dm b/code/modules/spells/spell_types/pointed/sacred_flame.dm index 5c757e1cd08..c3f7d9f8633 100644 --- a/code/modules/spells/spell_types/pointed/sacred_flame.dm +++ b/code/modules/spells/spell_types/pointed/sacred_flame.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/astrata) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/astrata) invocation = "Cleansing flames, kindle!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/pointed/status/fortune_wheel.dm b/code/modules/spells/spell_types/pointed/status/fortune_wheel.dm index c3d3fe0da33..ed81332362d 100644 --- a/code/modules/spells/spell_types/pointed/status/fortune_wheel.dm +++ b/code/modules/spells/spell_types/pointed/status/fortune_wheel.dm @@ -6,7 +6,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/xylix) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/xylix) charge_required = FALSE spell_cost = 35 diff --git a/code/modules/spells/spell_types/pointed/status/invisibility.dm b/code/modules/spells/spell_types/pointed/status/invisibility.dm index e6f9cc0d283..9eb7c3acfe6 100644 --- a/code/modules/spells/spell_types/pointed/status/invisibility.dm +++ b/code/modules/spells/spell_types/pointed/status/invisibility.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/noc) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/noc) charge_required = FALSE cooldown_time = 2 MINUTES diff --git a/code/modules/spells/spell_types/pointed/status/vigorous_craft.dm b/code/modules/spells/spell_types/pointed/status/vigorous_craft.dm index 647f194f11f..c6dbb9abcf4 100644 --- a/code/modules/spells/spell_types/pointed/status/vigorous_craft.dm +++ b/code/modules/spells/spell_types/pointed/status/vigorous_craft.dm @@ -8,7 +8,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/malum) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/malum) invocation = "Through ash and flame! Legere librum!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/undirected/beast_sense.dm b/code/modules/spells/spell_types/undirected/beast_sense.dm index 720392e8fd5..80481ad0251 100644 --- a/code/modules/spells/spell_types/undirected/beast_sense.dm +++ b/code/modules/spells/spell_types/undirected/beast_sense.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list( /datum/attunement/earth = 0.5, ) diff --git a/code/modules/spells/spell_types/undirected/bless_crops.dm b/code/modules/spells/spell_types/undirected/bless_crops.dm index b28297c7bac..77f73059643 100644 --- a/code/modules/spells/spell_types/undirected/bless_crops.dm +++ b/code/modules/spells/spell_types/undirected/bless_crops.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list( /datum/attunement/earth = 0.5, /datum/attunement/life = 0.5, diff --git a/code/modules/spells/spell_types/undirected/call_of_the_moon.dm b/code/modules/spells/spell_types/undirected/call_of_the_moon.dm index 3065e72877a..41dc8ed8819 100644 --- a/code/modules/spells/spell_types/undirected/call_of_the_moon.dm +++ b/code/modules/spells/spell_types/undirected/call_of_the_moon.dm @@ -4,7 +4,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) has_visual_effects = TRUE use_language = TRUE diff --git a/code/modules/spells/spell_types/undirected/call_to_arms.dm b/code/modules/spells/spell_types/undirected/call_to_arms.dm index 768d56b1ecb..251356e20e3 100644 --- a/code/modules/spells/spell_types/undirected/call_to_arms.dm +++ b/code/modules/spells/spell_types/undirected/call_to_arms.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/ravox) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/ravox) invocation = "MAY THE FIGHT BE BLOODY!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/undirected/conjure_item/briar_claw.dm b/code/modules/spells/spell_types/undirected/conjure_item/briar_claw.dm index 7e6a322df1d..b63416fdeb6 100644 --- a/code/modules/spells/spell_types/undirected/conjure_item/briar_claw.dm +++ b/code/modules/spells/spell_types/undirected/conjure_item/briar_claw.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) spell_cost = 15 item_duration = 1 MINUTES cooldown_time = 4 MINUTES diff --git a/code/modules/spells/spell_types/undirected/conjure_item/summon_leech.dm b/code/modules/spells/spell_types/undirected/conjure_item/summon_leech.dm index 7b128219a58..2aef1942024 100644 --- a/code/modules/spells/spell_types/undirected/conjure_item/summon_leech.dm +++ b/code/modules/spells/spell_types/undirected/conjure_item/summon_leech.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/abyssor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/abyssor) invocation = "Abyssor bless me with one of your servants!" invocation_type = INVOCATION_WHISPER @@ -24,7 +24,7 @@ desc = "Summon a leech by Pestra's will." button_icon_state = "diagnose" - required_items = list(/obj/item/clothing/neck/psycross/silver/pestra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/pestra) invocation = "Pestra grant me the creacher to cleanse the blood!" invocation_type = INVOCATION_WHISPER diff --git a/code/modules/spells/spell_types/undirected/conjure_item/summon_trident.dm b/code/modules/spells/spell_types/undirected/conjure_item/summon_trident.dm index 2249fd03f82..bedb06ceb36 100644 --- a/code/modules/spells/spell_types/undirected/conjure_item/summon_trident.dm +++ b/code/modules/spells/spell_types/undirected/conjure_item/summon_trident.dm @@ -26,7 +26,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/abyssor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/abyssor) invocation = "Let Abyssor's wrath be known!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/undirected/divine_strike.dm b/code/modules/spells/spell_types/undirected/divine_strike.dm index e8805356f6b..bb54c97b210 100644 --- a/code/modules/spells/spell_types/undirected/divine_strike.dm +++ b/code/modules/spells/spell_types/undirected/divine_strike.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/ravox) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/ravox) invocation = "Ravox deems your persistence worthy!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/spells/spell_types/undirected/jaunt/bush_jaunt.dm b/code/modules/spells/spell_types/undirected/jaunt/bush_jaunt.dm index 858b7d3c185..3dcf7bbc3b0 100644 --- a/code/modules/spells/spell_types/undirected/jaunt/bush_jaunt.dm +++ b/code/modules/spells/spell_types/undirected/jaunt/bush_jaunt.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) cooldown_time = 2 MINUTES spell_cost = 20 has_visual_effects = FALSE diff --git a/code/modules/spells/spell_types/undirected/jaunt/illusory_prop.dm b/code/modules/spells/spell_types/undirected/jaunt/illusory_prop.dm index 59469cd8b18..faeb34cdca9 100644 --- a/code/modules/spells/spell_types/undirected/jaunt/illusory_prop.dm +++ b/code/modules/spells/spell_types/undirected/jaunt/illusory_prop.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/xylix) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/xylix) cooldown_time = 2 MINUTES spell_cost = 25 has_visual_effects = FALSE diff --git a/code/modules/spells/spell_types/undirected/list_target/vicious_mimicry.dm b/code/modules/spells/spell_types/undirected/list_target/vicious_mimicry.dm index ba8f02417cd..ee47294dc09 100644 --- a/code/modules/spells/spell_types/undirected/list_target/vicious_mimicry.dm +++ b/code/modules/spells/spell_types/undirected/list_target/vicious_mimicry.dm @@ -6,7 +6,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/xylix) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/xylix) cooldown_time = 1 MINUTES spell_cost = 25 diff --git a/code/modules/spells/spell_types/undirected/locate_dead.dm b/code/modules/spells/spell_types/undirected/locate_dead.dm index e493c2e2960..7ce59f77413 100644 --- a/code/modules/spells/spell_types/undirected/locate_dead.dm +++ b/code/modules/spells/spell_types/undirected/locate_dead.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/necra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/necra) invocation = "Undermaiden, guide my hand to those who have lost their way." invocation_type = INVOCATION_WHISPER diff --git a/code/modules/spells/spell_types/undirected/shapeshift/troll_form.dm b/code/modules/spells/spell_types/undirected/shapeshift/troll_form.dm index a179876828b..e413de78651 100644 --- a/code/modules/spells/spell_types/undirected/shapeshift/troll_form.dm +++ b/code/modules/spells/spell_types/undirected/shapeshift/troll_form.dm @@ -7,7 +7,7 @@ charge_required = FALSE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) possible_shapes = list(/mob/living/simple_animal/hostile/retaliate/troll) @@ -41,6 +41,6 @@ . = ..() if(!.) return - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) spell_cost = 100 spell_type = SPELL_MIRACLE diff --git a/code/modules/spells/spell_types/undirected/soul_speak.dm b/code/modules/spells/spell_types/undirected/soul_speak.dm index d41c56b9ba6..37a3b0d8b0c 100644 --- a/code/modules/spells/spell_types/undirected/soul_speak.dm +++ b/code/modules/spells/spell_types/undirected/soul_speak.dm @@ -7,7 +7,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/necra) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/necra) invocation = "Undermaiden grant thee passage forth and spare the trials of the forgotten." invocation_type = INVOCATION_WHISPER diff --git a/code/modules/spells/spell_types/undirected/touch/entangler.dm b/code/modules/spells/spell_types/undirected/touch/entangler.dm index 530248dfb60..ca69036bf5b 100644 --- a/code/modules/spells/spell_types/undirected/touch/entangler.dm +++ b/code/modules/spells/spell_types/undirected/touch/entangler.dm @@ -6,7 +6,7 @@ spell_type = SPELL_MIRACLE associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) attunements = list( /datum/attunement/earth = 0.5, ) diff --git a/code/modules/spells/spell_types/undirected/troll_shape.dm b/code/modules/spells/spell_types/undirected/troll_shape.dm index 64b57b33b65..ff3a60dd5b6 100644 --- a/code/modules/spells/spell_types/undirected/troll_shape.dm +++ b/code/modules/spells/spell_types/undirected/troll_shape.dm @@ -11,7 +11,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross/silver/dendor) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine/dendor) invocation = "DENDOR LEND ME YOUR POWER!!" invocation_type = INVOCATION_SHOUT diff --git a/code/modules/unit_tests/craftable_clothes.dm b/code/modules/unit_tests/craftable_clothes.dm index 8ffc6b91eab..59e02b77929 100644 --- a/code/modules/unit_tests/craftable_clothes.dm +++ b/code/modules/unit_tests/craftable_clothes.dm @@ -48,7 +48,6 @@ abstract types are automatically excluded. /obj/item/clothing/head/helmet/heavy/ordinatorhelm, ///special item //! probably can add this at some point /obj/item/clothing/head/roguehood/psydon/confessor, ///inqport /obj/item/clothing/face/facemask/steel/confessor, ///inqport - /obj/item/clothing/neck/psycross/silver/undivided, //Not supposed to get this, not yet at the very least. /obj/item/clothing/gloves/bandages/pugilist, /obj/item/clothing/armor/gambeson/heavy/otavan/inq, ///inqport /obj/item/clothing/armor/gambeson/heavy/otavan, ///null diff --git a/icons/roguetown/clothing/neck.dmi b/icons/roguetown/clothing/neck.dmi index 8203b9929b75b35050cd18201910671d281b1834..41db683b98b4288275d53d41a95d9713f4b35870 100644 GIT binary patch literal 61306 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 m#Lx)bd2 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

aPh& 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 diff --git a/tools/UpdatePaths/Scripts/3532_Prayer_and_psycross_changes.txt b/tools/UpdatePaths/Scripts/3532_Prayer_and_psycross_changes.txt index 98b47e48729..dfa4072bec4 100644 --- a/tools/UpdatePaths/Scripts/3532_Prayer_and_psycross_changes.txt +++ b/tools/UpdatePaths/Scripts/3532_Prayer_and_psycross_changes.txt @@ -1,2 +1,2 @@ -/obj/item/clothing/neck/psycross/noc : /obj/item/clothing/neck/psycross/silver/noc{@OLD} -/obj/item/clothing/neck/psycross/silver/malum_steel : /obj/item/clothing/neck/psycross/silver/malum/steel{@OLD} +/obj/item/clothing/neck/psycross/noc : /obj/item/clothing/neck/psycross/silver/divine/noc{@OLD} +/obj/item/clothing/neck/psycross/silver/divine/malum_steel : /obj/item/clothing/neck/psycross/silver/divine/malum/steel{@OLD} From a250e868cc95cc7ffe2f88b85617e513443bf8bd Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 17 Feb 2026 04:06:54 +0000 Subject: [PATCH 02/20] start --- code/datums/faith/devotion_subtypes.dm | 4 ++++ code/datums/gods/patrons/divine_pantheon.dm | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 7100e122b72..432db9d7402 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -1,3 +1,7 @@ +/datum/devotion/divine/undivided + + + /datum/devotion/divine/astrata miracles = list( CLERIC_T0 = /datum/action/cooldown/spell/healing, diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index f9fa3a90dc0..31aa89481b3 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -40,19 +40,20 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( /* ----------------- */ /datum/patron/divine/undivided name = TEN_UNDIVIDED - domain = "" - desc = "The Divine Pantheon Undivided." - flaws = "" - worshippers = "" - sins = "" - boons = "" + domain = "Unity and Conflict. Denizens of the Eternal Plane." + desc = "The Divine Pantheon Undivided. Worship in such a manner is tolerated, but disapproved of. The Ten rarely give their blessings to those who do not give single-minded adoration to a single diety." + flaws = "Discordant, Unyielding, Uninterested." + worshippers = "The Meek, The Indecisive, The " + sins = "Temptation, Ignorance, Denial" + boons = "The Ten pull for your devotion." added_traits = list() devotion_holder = /datum/devotion/divine/undivided confess_lines = list( - "ASTRATA IS MY LIGHT!", - "ASTRATA BRINGS LAW!", - "I SERVE THE GLORY OF THE SUN!", + "THE TEN GUIDE US!", + "THE TEN PROTECT US!", + "I SERVE THE DIVINE TEN!", ) + associated_psycross = /obj/item/clothing/neck/psycross/silver/divine /datum/patron/divine/astrata From 64322855fc010bf5774a5f0ebf2c264a6e6b7fb5 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 17 Feb 2026 15:57:35 +0000 Subject: [PATCH 03/20] cleaner convert code for priest, and identify the shamed --- code/__DEFINES/roguetown.dm | 1 + code/__DEFINES/storytellers.dm | 1 + code/__DEFINES/traits/definitions.dm | 2 + code/_globalvars/special_traits/traits.dm | 2 +- code/_globalvars/traits.dm | 4 + code/datums/faith/_devotion.dm | 2 +- code/datums/faith/devotion_subtypes.dm | 2 +- code/datums/gods/patrons/divine_pantheon.dm | 2 +- .../adventurer/types/combat/cleric.dm | 1 + .../jobs/job_types/church/gmtemplar.dm | 1 + code/modules/jobs/job_types/church/monk.dm | 4 + code/modules/jobs/job_types/church/priest.dm | 10 +- code/modules/jobs/job_types/church/templar.dm | 1 + .../job_types/other/folkheroes/paladin.dm | 10 +- .../jobs/job_types/youngfolk/churchling.dm | 2 +- .../mob/living/carbon/human/examine.dm | 3 + .../list_target/convert_role/brotherhood.dm | 2 +- .../list_target/convert_role/church.dm | 98 +++++++++---------- 18 files changed, 82 insertions(+), 66 deletions(-) diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index b9db3321caf..de4c627b0bb 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -1,4 +1,5 @@ #define ALL_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) +#define UNDIVIDED_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora, /datum/patron/divine/undivided) #define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) #define ALL_PALADIN_PATRONS list(/datum/patron/psydon, /datum/patron/psydon/extremist, /datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) #define ALL_TEMPLAR_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/pestra, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/malum, /datum/patron/divine/xylix) diff --git a/code/__DEFINES/storytellers.dm b/code/__DEFINES/storytellers.dm index 500121cbf72..82d1cd011e5 100644 --- a/code/__DEFINES/storytellers.dm +++ b/code/__DEFINES/storytellers.dm @@ -212,6 +212,7 @@ #define MALUM "Malum" #define EORA "Eora" #define DENDOR "Dendor" +#define TEN_UNDIVIDED "Ten Undivided" // Inhumen pantheon #define ZIZO "Zizo" diff --git a/code/__DEFINES/traits/definitions.dm b/code/__DEFINES/traits/definitions.dm index fd25a2dcb03..7ed65554486 100644 --- a/code/__DEFINES/traits/definitions.dm +++ b/code/__DEFINES/traits/definitions.dm @@ -453,6 +453,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_INQUISITION "Member of the Oratorium Throni Vacui" #define TRAIT_PURITAN "Puritan" #define TRAIT_SILVER_BLESSED "Silver Blessed" +#define TRAIT_TEN_UNDIVIDED "Worshipper of the Ten Undivided" +#define TRAIT_DIVINE_SERVANT "Divine Servant" // Inhumen patron trait bonuses #define TRAIT_ORGAN_EATER "Blessing of Graggar"//Can eat organs (duh.) and raw meat diff --git a/code/_globalvars/special_traits/traits.dm b/code/_globalvars/special_traits/traits.dm index 3aed25ed5ca..5b0c367e7ed 100644 --- a/code/_globalvars/special_traits/traits.dm +++ b/code/_globalvars/special_traits/traits.dm @@ -877,7 +877,7 @@ var/holder = character.patron?.devotion_holder if(holder) var/datum/devotion/devotion = new holder() - devotion.make_churching() + devotion.make_churchling() devotion.grant_to(character) character.mind.special_items["Baotha's Gift"] = /obj/item/clothing/head/corruptflower character.AddComponent(/datum/component/theme_music) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 1af6450dd68..11d6281a3d0 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -99,6 +99,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "Blessing of Pestra"= TRAIT_ROT_EATER, "Blessing of Dendor" = TRAIT_KNEESTINGER_IMMUNITY, "Blessing of Necra" = TRAIT_SOUL_EXAMINE, + "Worshipper of the Ten Undivided" = TRAIT_TEN_UNDIVIDED, + "Divine Servant" = TRAIT_DIVINE_SERVANT, "Golden Blood" = TRAIT_SEEPRICES, "Of the Cabal" = TRAIT_CABAL, "Unleechable" = TRAIT_LEECHIMMUNE, @@ -258,6 +260,8 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_INTRAINING = "I'm going to be a knight someday! I can use training dummies more effectively than others.", TRAIT_MALUMFIRE = "My hands are blessed by Malum to forge items of superb quality.", TRAIT_DEATHSIGHT = span_info("I can feel when someone nearby draws the Undermaiden's attention, a tiny voice whispering 'Someone has died,' in my ear."), + TRAIT_TEN_UNDIVIDED = span_info("I serve The Ten equally. I wonder which one I should profess myself to..."), + TRAIT_DIVINE_SERVANT = SPAN_GOD_ASTRATA("I serve the divine."), TRAIT_CABAL = span_purple("In secret, I have studied the ways of Her ascension, and know of others of the Cabal."), TRAIT_LEGENDARY_ALCHEMIST = span_info("An expert in the art of finding herbs in the wild."), TRAIT_DECEIVING_MEEKNESS = "People look at me and think I am a weakling. They are mistaken.", diff --git a/code/datums/faith/_devotion.dm b/code/datums/faith/_devotion.dm index 61b5182c65a..03869356487 100644 --- a/code/datums/faith/_devotion.dm +++ b/code/datums/faith/_devotion.dm @@ -172,7 +172,7 @@ progression = CLERIC_REQ_1 max_progression = CLERIC_REQ_3 -/datum/devotion/proc/make_churching() +/datum/devotion/proc/make_churchling() max_devotion = CLERIC_REQ_1 progression = CLERIC_REQ_1 max_progression = CLERIC_REQ_1 diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 432db9d7402..03c2e620346 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -138,7 +138,7 @@ /datum/action/cooldown/spell/healing/profane, ) -/datum/devotion/inhumen/make_churching() +/datum/devotion/inhumen/make_churchling() . = ..() miracles_extra += list( /datum/action/cooldown/spell/healing/profane, diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index 31aa89481b3..25fcb7c356e 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -46,7 +46,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( worshippers = "The Meek, The Indecisive, The " sins = "Temptation, Ignorance, Denial" boons = "The Ten pull for your devotion." - added_traits = list() + added_traits = list(TRAIT_TEN_UNDIVIDED) devotion_holder = /datum/devotion/divine/undivided confess_lines = list( "THE TEN GUIDE US!", diff --git a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm index 86811adb245..6494542e00b 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm @@ -35,6 +35,7 @@ ) traits = list( + TRAIT_DIVINE_SERVANT, TRAIT_MEDIUMARMOR, ) diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 403ae200953..9f0893e6743 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -49,6 +49,7 @@ ) traits = list( + TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_STEELHEARTED, TRAIT_KNOWBANDITS diff --git a/code/modules/jobs/job_types/church/monk.dm b/code/modules/jobs/job_types/church/monk.dm index a8eb2260bb7..8c47005bd75 100644 --- a/code/modules/jobs/job_types/church/monk.dm +++ b/code/modules/jobs/job_types/church/monk.dm @@ -40,6 +40,10 @@ /datum/skill/craft/cooking = 2 ) + traits = list( + TRAIT_DIVINE_SERVANT, + ) + languages = list(/datum/language/celestial) /datum/job/monk/after_spawn(mob/living/carbon/human/spawned, client/player_client) diff --git a/code/modules/jobs/job_types/church/priest.dm b/code/modules/jobs/job_types/church/priest.dm index c96b0bec061..e3cab82eefc 100644 --- a/code/modules/jobs/job_types/church/priest.dm +++ b/code/modules/jobs/job_types/church/priest.dm @@ -20,9 +20,9 @@ outfit = /datum/outfit/priest spells = list( - /datum/action/cooldown/spell/undirected/list_target/convert_role/templar, - /datum/action/cooldown/spell/undirected/list_target/convert_role/acolyte, - /datum/action/cooldown/spell/undirected/list_target/convert_role/churchling, + /datum/action/cooldown/spell/undirected/list_target/convert_role/church/templar, + /datum/action/cooldown/spell/undirected/list_target/convert_role/church/acolyte, + /datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling, /datum/action/cooldown/spell/undirected/call_bird/priest, ) @@ -53,6 +53,10 @@ /datum/skill/labor/mathematics = 3 ) + traits = list( + TRAIT_DIVINE_SERVANT, + ) + languages = list(/datum/language/celestial) can_have_apprentices = FALSE diff --git a/code/modules/jobs/job_types/church/templar.dm b/code/modules/jobs/job_types/church/templar.dm index b5b990cb7fc..36d1929a56a 100644 --- a/code/modules/jobs/job_types/church/templar.dm +++ b/code/modules/jobs/job_types/church/templar.dm @@ -46,6 +46,7 @@ ) traits = list( + TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_STEELHEARTED, TRAIT_KNOWBANDITS diff --git a/code/modules/jobs/job_types/other/folkheroes/paladin.dm b/code/modules/jobs/job_types/other/folkheroes/paladin.dm index 4677f4554d6..10a5858a0db 100644 --- a/code/modules/jobs/job_types/other/folkheroes/paladin.dm +++ b/code/modules/jobs/job_types/other/folkheroes/paladin.dm @@ -34,6 +34,7 @@ ) traits = list( + TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_NOBLE, ) @@ -50,7 +51,8 @@ spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_CON, 1) spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_PER, 1) spawned.grant_language(/datum/language/newpsydonic) - ADD_TRAIT(spawned, TRAIT_PSYDONIAN_GRIT, TRAIT_GENERIC) + ADD_TRAIT(spawned, TRAIT_PSYDONIAN_GRIT, JOB_TRAIT) + REMOVE_TRAIT(spawned, TRAIT_DIVINE_SERVANT, JOB_TRAIT) if(/datum/patron/divine/astrata) spawned.cmode_music = 'sound/music/cmode/church/CombatAstrata.ogg' if(/datum/patron/divine/noc) @@ -61,7 +63,7 @@ spawned.cmode_music = 'sound/music/cmode/church/CombatAbyssor.ogg' if(/datum/patron/divine/necra) spawned.cmode_music = 'sound/music/cmode/church/CombatGravekeeper.ogg' - ADD_TRAIT(spawned, TRAIT_GRAVEROBBER, TRAIT_GENERIC) + ADD_TRAIT(spawned, TRAIT_GRAVEROBBER, JOB_TRAIT) if(/datum/patron/divine/ravox) spawned.cmode_music = 'sound/music/cmode/church/CombatRavox.ogg' if(/datum/patron/divine/xylix) @@ -73,11 +75,11 @@ if(/datum/patron/divine/eora) spawned.cmode_music = 'sound/music/cmode/church/CombatEora.ogg' spawned.virginity = FALSE - ADD_TRAIT(spawned, TRAIT_BEAUTIFUL, TRAIT_GENERIC) + ADD_TRAIT(spawned, TRAIT_BEAUTIFUL, JOB_TRAIT) else spawned.cmode_music = 'sound/music/cmode/church/CombatInquisitor.ogg' - if(!spawned.has_language(/datum/language/celestial) && (spawned.patron?.type in ALL_TEMPLE_PATRONS) && spawned.patron?.type != /datum/patron/psydon) + if(!spawned.has_language(/datum/language/celestial) && (spawned.patron?.type in ALL_TEMPLE_PATRONS)) spawned.grant_language(/datum/language/celestial) to_chat(spawned, "I can speak Celestial with ,c before my speech.") diff --git a/code/modules/jobs/job_types/youngfolk/churchling.dm b/code/modules/jobs/job_types/youngfolk/churchling.dm index 068f56afca0..ad3adbf5daf 100644 --- a/code/modules/jobs/job_types/youngfolk/churchling.dm +++ b/code/modules/jobs/job_types/youngfolk/churchling.dm @@ -46,7 +46,7 @@ var/holder = spawned.patron?.devotion_holder if(holder) var/datum/devotion/devotion = new holder() - devotion.make_churching() + devotion.make_churchling() devotion.grant_to(spawned) /datum/outfit/churchling diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 0fe4effc2a1..b9e29b5f498 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -259,6 +259,9 @@ else . += span_redtext("[m1] an ex-agent of the court.") + if(HAS_TRAIT(src, TRAIT_TEN_UNDIVIDED) && HAS_TRAIT(user, TRAIT_DIVINE_SERVANT)) + . += SPAN_GOD_ASTRATA("A worshipper of The Ten Undivided. Shame!") + if(real_name in GLOB.excommunicated_players) . += span_userdanger("EXCOMMUNICATED!") diff --git a/code/modules/spells/spell_types/undirected/list_target/convert_role/brotherhood.dm b/code/modules/spells/spell_types/undirected/list_target/convert_role/brotherhood.dm index 794c3690a43..c5e3d090d06 100644 --- a/code/modules/spells/spell_types/undirected/list_target/convert_role/brotherhood.dm +++ b/code/modules/spells/spell_types/undirected/list_target/convert_role/brotherhood.dm @@ -8,7 +8,7 @@ accept_message = "All for one and one for all!" refuse_message = "I refuse." -/datum/action/cooldown/spell/undirected/list_target/convert_role/guard/on_conversion(mob/living/cast_on) +/datum/action/cooldown/spell/undirected/list_target/convert_role/brotherhood/on_conversion(mob/living/cast_on) . = ..() if(cast_on.gender == FEMALE) new_role = "Sister" diff --git a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm index 431802a2636..2565d8697e4 100644 --- a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm +++ b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm @@ -1,4 +1,39 @@ -/datum/action/cooldown/spell/undirected/list_target/convert_role/templar +/datum/action/cooldown/spell/undirected/list_target/convert_role/church + var/allow_undivided = FALSE + +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/cast(mob/living/carbon/human/cast_on) + // Patron-specific checks happen here, AFTER priest picks the target + var/mob/living/living_owner = owner + + if(cast_on.cleric) + to_chat(owner, span_info("[cast_on.real_name] already serves their god(s).")) + return + + if(!cast_on.patron) + to_chat(owner, span_info("The Ten glare upon you in confusion. CHILD, [cast_on.real_name] has no form of faith.")) + return + + if(cast_on.patron.type in ALL_PROFANE_PATRONS) + to_chat(owner, span_danger("The Ten glare upon you in fury. CHILD, [cast_on.real_name] serves the Inhumen, do not disgrace Our name.")) + living_owner.adjust_divine_fire_stacks(50) // Half of the damage that you get if you say a profane word, hurts alot. + living_owner.IgniteMob() + return // Stop the recruitment entirely + + if(istype(cast_on.patron, /datum/patron/psydon)) + to_chat(owner, span_info("The Ten glare upon you in sadness. CHILD, [cast_on.real_name] serves Psydon, he is dead, nobody can answer these prayers.")) + return // Stop recruitment + + if(!allow_undivided && istype(cast_on.patron, /datum/patron/divine/undivided)) + to_chat(owner, span_info("The Ten glare upon you in stubbornness. CHILD, [cast_on.real_name] worships Us undivided. They can serve only one.")) + return // Stop recruitment + + if(!(cast_on.patron.type in ALL_TEMPLE_PATRONS)) + to_chat(owner, span_danger("The Ten glare upon you in anger. CHILD, [cast_on.real_name] does not worship Our divinity. They are undeserving of Our grace.")) + return // Stop recruitment + + return ..() + +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/templar name = "Recruit Templar" button_icon_state = "recruit_templar" @@ -8,7 +43,7 @@ accept_message = "FOR THE TEN!" refuse_message = "I refuse." -/datum/action/cooldown/spell/undirected/list_target/convert_role/templar/on_conversion(mob/living/carbon/human/cast_on) +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/templar/on_conversion(mob/living/carbon/human/cast_on) . = ..() var/holder = cast_on.patron?.devotion_holder if(holder) @@ -17,25 +52,7 @@ devotion.grant_to(cast_on) -/datum/action/cooldown/spell/undirected/list_target/convert_role/templar/cast(mob/living/carbon/human/cast_on) - // Patron-specific checks happen here, AFTER priest picks the target - var/mob/living/living_owner = owner - - if(cast_on.patron && (cast_on.patron.type in ALL_PROFANE_PATRONS)) - to_chat(owner, span_danger("The Ten glare upon you in fury. CHILD, [cast_on.real_name] serves the Inhumen, do not disgrace Our name.")) - living_owner.adjust_divine_fire_stacks(50) // Half of the damage that you get if you say a profane word, hurts alot. - living_owner.IgniteMob() - return // Stop the recruitment entirely - - if(cast_on.patron && istype(cast_on.patron, /datum/patron/psydon)) - to_chat(owner, span_info("The Ten glare upon you in sadness. CHILD, [cast_on.real_name] serves Psydon, he is dead, nobody can answer these prayers.")) - return // Stop recruitment - - return ..() - - - -/datum/action/cooldown/spell/undirected/list_target/convert_role/acolyte +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/acolyte name = "Recruit Acolyte" button_icon_state = "recruit_acolyte" @@ -45,25 +62,7 @@ accept_message = "FOR THE TEN!" refuse_message = "I refuse." - -/datum/action/cooldown/spell/undirected/list_target/convert_role/acolyte/cast(mob/living/carbon/human/cast_on) - // Patron-specific checks happen here, AFTER priest picks the target - var/mob/living/living_owner = owner - - if(cast_on.patron && (cast_on.patron.type in ALL_PROFANE_PATRONS)) - to_chat(owner, span_danger("The Ten glare upon you in fury. CHILD, [cast_on.real_name] serves the Inhumen, do not disgrace Our name.")) - living_owner.adjust_divine_fire_stacks(50) // Half of the damage that you get if you say a profane word, hurts alot. - living_owner.IgniteMob() - return // Stop the recruitment entirely - - if(cast_on.patron && istype(cast_on.patron, /datum/patron/psydon)) - to_chat(owner, span_info("The Ten glare upon you in sadness. CHILD, [cast_on.real_name] serves Psydon, he is dead, nobody can answer these prayers.")) - return // Stop recruitment - - return ..() - - -/datum/action/cooldown/spell/undirected/list_target/convert_role/acolyte/on_conversion(mob/living/carbon/human/cast_on) +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/acolyte/on_conversion(mob/living/carbon/human/cast_on) . = ..() var/holder = cast_on.patron?.devotion_holder if(holder) @@ -71,7 +70,7 @@ devotion.make_acolyte() devotion.grant_to(cast_on) -/datum/action/cooldown/spell/undirected/list_target/convert_role/churchling +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling name = "Recruit Churchling" button_icon_state = "recruit_acolyte" @@ -81,25 +80,17 @@ accept_message = "FOR THE TEN!" refuse_message = "I refuse." + allow_undivided = TRUE -/datum/action/cooldown/spell/undirected/list_target/convert_role/churchling/cast(mob/living/carbon/human/cast_on) - // Patron-specific checks happen here, AFTER priest picks the target - if(cast_on.patron && istype(cast_on.patron, /datum/patron/psydon)) - to_chat(owner, span_info("The Ten glare upon you in sadness. CHILD, [cast_on.real_name] serves Psydon, he is dead, nobody can answer these prayers.")) - return // Stop recruitment - - return ..() - - -/datum/action/cooldown/spell/undirected/list_target/convert_role/churchling/on_conversion(mob/living/carbon/human/cast_on) +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling/on_conversion(mob/living/carbon/human/cast_on) . = ..() var/holder = cast_on.patron?.devotion_holder if(holder) var/datum/devotion/devotion = new holder() - devotion.make_churching() + devotion.make_churchling() devotion.grant_to(cast_on) -/datum/action/cooldown/spell/undirected/list_target/convert_role/churchling/can_convert(mob/living/carbon/human/cast_on) +/datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling/can_convert(mob/living/carbon/human/cast_on) if(QDELETED(cast_on)) return FALSE //need a mind @@ -107,6 +98,7 @@ return FALSE //only orphans who aren't apprentices if(istype(cast_on.mind.assigned_role, /datum/job/orphan) && cast_on.is_apprentice()) + to_chat(owner, span_info("You cannot recruit a child already in an apprenticeship.")) return FALSE if(cast_on.age != AGE_CHILD) return FALSE From 2e8bdd6205dd66c0a239bb3e24d0c4ee033e3320 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 17 Feb 2026 17:34:17 +0000 Subject: [PATCH 04/20] better trait application --- code/_globalvars/traits.dm | 2 +- code/datums/faith/devotion_subtypes.dm | 11 ++++++++++- code/datums/gods/patrons/divine_pantheon.dm | 2 +- .../adventurer/types/combat/cleric.dm | 1 - .../jobs/job_types/church/gmtemplar.dm | 1 - code/modules/jobs/job_types/church/monk.dm | 4 ---- code/modules/jobs/job_types/church/priest.dm | 4 ---- code/modules/jobs/job_types/church/templar.dm | 1 - .../job_types/other/folkheroes/paladin.dm | 2 -- .../mob/living/carbon/human/examine.dm | 2 +- .../spells/spell_types/pointed/healing.dm | 19 ++++++++++++++++++- 11 files changed, 31 insertions(+), 18 deletions(-) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 11d6281a3d0..ce17334622c 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -260,7 +260,7 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_INTRAINING = "I'm going to be a knight someday! I can use training dummies more effectively than others.", TRAIT_MALUMFIRE = "My hands are blessed by Malum to forge items of superb quality.", TRAIT_DEATHSIGHT = span_info("I can feel when someone nearby draws the Undermaiden's attention, a tiny voice whispering 'Someone has died,' in my ear."), - TRAIT_TEN_UNDIVIDED = span_info("I serve The Ten equally. I wonder which one I should profess myself to..."), + TRAIT_TEN_UNDIVIDED = "I serve The Ten equally. I wonder which one I should profess myself to...", TRAIT_DIVINE_SERVANT = SPAN_GOD_ASTRATA("I serve the divine."), TRAIT_CABAL = span_purple("In secret, I have studied the ways of Her ascension, and know of others of the Cabal."), TRAIT_LEGENDARY_ALCHEMIST = span_info("An expert in the art of finding herbs in the wild."), diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 03c2e620346..094d80b6603 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -12,6 +12,7 @@ viable_tasks = list( /datum/devotion_task/astrata_purge, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/noc miracles = list( @@ -25,6 +26,7 @@ /datum/devotion_task/noc_write, /datum/devotion_task/noc_read, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/dendor miracles = list( @@ -38,6 +40,7 @@ /datum/devotion_task/dendor_harvest, /datum/devotion_task/dendor_bless, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/abyssor miracles = list( @@ -50,6 +53,7 @@ /datum/devotion_task/abyssor_sail, /datum/devotion_task/abyssor_fish, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/necra miracles = list( @@ -62,7 +66,7 @@ /datum/devotion_task/necra_bury, /datum/devotion_task/astrata_purge, ) - traits = list(TRAIT_DEATHSIGHT) + traits = list(TRAIT_DIVINE_SERVANT, TRAIT_DEATHSIGHT) /datum/devotion/divine/ravox miracles = list( @@ -71,6 +75,7 @@ CLERIC_T2 = /datum/action/cooldown/spell/undirected/divine_strike, CLERIC_T3 = /datum/action/cooldown/spell/persistence, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/xylix miracles = list( @@ -83,6 +88,7 @@ /datum/devotion_task/xylix_gamble, /datum/devotion_task/xylix_trick, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/pestra miracles = list( @@ -95,6 +101,7 @@ /datum/devotion_task/pestra_heal, /datum/devotion_task/pestra_medicine, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/malum miracles = list( @@ -108,6 +115,7 @@ /datum/devotion_task/malum_smelt, /datum/devotion_task/malum_forge, ) + traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/eora miracles = list( @@ -124,6 +132,7 @@ /datum/devotion_task/eora_create, /datum/devotion_task/eora_hug, ) + traits = list(TRAIT_DIVINE_SERVANT) // Inhumen /datum/devotion/inhumen/make_cleric() diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index 25fcb7c356e..cb76e70ec32 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( domain = "Unity and Conflict. Denizens of the Eternal Plane." desc = "The Divine Pantheon Undivided. Worship in such a manner is tolerated, but disapproved of. The Ten rarely give their blessings to those who do not give single-minded adoration to a single diety." flaws = "Discordant, Unyielding, Uninterested." - worshippers = "The Meek, The Indecisive, The " + worshippers = "The Meek and The Indecisive" sins = "Temptation, Ignorance, Denial" boons = "The Ten pull for your devotion." added_traits = list(TRAIT_TEN_UNDIVIDED) diff --git a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm index 6494542e00b..86811adb245 100644 --- a/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm +++ b/code/modules/jobs/job_types/adventurer/types/combat/cleric.dm @@ -35,7 +35,6 @@ ) traits = list( - TRAIT_DIVINE_SERVANT, TRAIT_MEDIUMARMOR, ) diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 9f0893e6743..403ae200953 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -49,7 +49,6 @@ ) traits = list( - TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_STEELHEARTED, TRAIT_KNOWBANDITS diff --git a/code/modules/jobs/job_types/church/monk.dm b/code/modules/jobs/job_types/church/monk.dm index 8c47005bd75..a8eb2260bb7 100644 --- a/code/modules/jobs/job_types/church/monk.dm +++ b/code/modules/jobs/job_types/church/monk.dm @@ -40,10 +40,6 @@ /datum/skill/craft/cooking = 2 ) - traits = list( - TRAIT_DIVINE_SERVANT, - ) - languages = list(/datum/language/celestial) /datum/job/monk/after_spawn(mob/living/carbon/human/spawned, client/player_client) diff --git a/code/modules/jobs/job_types/church/priest.dm b/code/modules/jobs/job_types/church/priest.dm index e3cab82eefc..e8d9bb980ed 100644 --- a/code/modules/jobs/job_types/church/priest.dm +++ b/code/modules/jobs/job_types/church/priest.dm @@ -53,10 +53,6 @@ /datum/skill/labor/mathematics = 3 ) - traits = list( - TRAIT_DIVINE_SERVANT, - ) - languages = list(/datum/language/celestial) can_have_apprentices = FALSE diff --git a/code/modules/jobs/job_types/church/templar.dm b/code/modules/jobs/job_types/church/templar.dm index 36d1929a56a..b5b990cb7fc 100644 --- a/code/modules/jobs/job_types/church/templar.dm +++ b/code/modules/jobs/job_types/church/templar.dm @@ -46,7 +46,6 @@ ) traits = list( - TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_STEELHEARTED, TRAIT_KNOWBANDITS diff --git a/code/modules/jobs/job_types/other/folkheroes/paladin.dm b/code/modules/jobs/job_types/other/folkheroes/paladin.dm index 10a5858a0db..46bfacc4c3d 100644 --- a/code/modules/jobs/job_types/other/folkheroes/paladin.dm +++ b/code/modules/jobs/job_types/other/folkheroes/paladin.dm @@ -34,7 +34,6 @@ ) traits = list( - TRAIT_DIVINE_SERVANT, TRAIT_HEAVYARMOR, TRAIT_NOBLE, ) @@ -52,7 +51,6 @@ spawned.adjust_stat_modifier(STATMOD_JOB, STATKEY_PER, 1) spawned.grant_language(/datum/language/newpsydonic) ADD_TRAIT(spawned, TRAIT_PSYDONIAN_GRIT, JOB_TRAIT) - REMOVE_TRAIT(spawned, TRAIT_DIVINE_SERVANT, JOB_TRAIT) if(/datum/patron/divine/astrata) spawned.cmode_music = 'sound/music/cmode/church/CombatAstrata.ogg' if(/datum/patron/divine/noc) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b9e29b5f498..eceea7d00be 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -259,7 +259,7 @@ else . += span_redtext("[m1] an ex-agent of the court.") - if(HAS_TRAIT(src, TRAIT_TEN_UNDIVIDED) && HAS_TRAIT(user, TRAIT_DIVINE_SERVANT)) + if((HAS_TRAIT(src, TRAIT_TEN_UNDIVIDED) && !HAS_TRAIT(src, TRAIT_DIVINE_SERVANT)) && HAS_TRAIT(user, TRAIT_DIVINE_SERVANT)) . += SPAN_GOD_ASTRATA("A worshipper of The Ten Undivided. Shame!") if(real_name in GLOB.excommunicated_players) diff --git a/code/modules/spells/spell_types/pointed/healing.dm b/code/modules/spells/spell_types/pointed/healing.dm index 38a4d85759b..38ca4c21296 100644 --- a/code/modules/spells/spell_types/pointed/healing.dm +++ b/code/modules/spells/spell_types/pointed/healing.dm @@ -25,6 +25,8 @@ var/stun_undead = FALSE /// Unholy, profane healing var/is_profane = FALSE + /// Patron Restrictive + var/patron_restrictive = FALSE /datum/action/cooldown/spell/healing/is_valid_target(atom/cast_on) . = ..() @@ -34,11 +36,25 @@ /datum/action/cooldown/spell/healing/cast(mob/living/cast_on) . = ..() + if(is_profane && patron_restrictive && !(cast_on.patron in ALL_PROFANE_PATRONS)) + cast_on.visible_message( + span_warning("The Inhumen Four sear the flesh of [cast_on]! a non-believer and weakling!"), + span_notice("The Inhumen Four lash out at me with a wave of pain!"), + ) + cast_on.emote("scream") + return + if(!is_profane) if(HAS_TRAIT(cast_on, TRAIT_ASTRATA_CURSE)) cast_on.visible_message(span_danger("[cast_on] recoils in pain!"), span_userdanger("Divine healing shuns me!")) cast_on.cursed_freak_out() return + /// The Ten won't provide greater healing to undivided worshippers, they do not approve. + /// This is ignored if they're already a divine servant, like a Templar, as undivded can only become church roles from round start. + if(HAS_TRAIT(cast_on, TRAIT_TEN_UNDIVIDED) && !HAS_TRAIT(cast_on, TRAIT_DIVINE_SERVANT) && patron_restrictive) + cast_on.visible_message(span_danger("[cast_on] recoils in shame!"), span_userdanger("The Ten reject my indecisiveness!")) + cast_on.cursed_freak_out() + return if(cast_on.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead if(cast_on.mind?.has_antag_datum(/datum/antagonist/vampire/lord)) cast_on.visible_message(span_warning("[cast_on] overpowers being burned!"), span_greentext("I overpower being burned!")) @@ -52,7 +68,7 @@ return if((cast_on.real_name in GLOB.excommunicated_players) && !HAS_TRAIT(cast_on, TRAIT_FANATICAL)) cast_on.visible_message( - span_warning("The angry Ten the flesh of [cast_on]! a foolish blasphemer and heretic!"), + span_warning("The angry Ten sear the flesh of [cast_on]! a foolish blasphemer and heretic!"), span_notice("I am despised by the Ten, rejected, and they remind me just how unlovable I am with a wave of pain!"), ) cast_on.emote("scream") @@ -232,6 +248,7 @@ wound_modifier = 0.5 blood_restoration = BLOOD_VOLUME_SURVIVE stun_undead = TRUE + patron_restrictive = TRUE /datum/action/cooldown/spell/healing/greater/profane name = "Corrupt Miracle" From b6810a0e83d94abd8fc8752a824868bc28918300 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 17 Feb 2026 17:40:40 +0000 Subject: [PATCH 05/20] heal refuses heretics --- code/modules/spells/spell_types/pointed/healing.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/spells/spell_types/pointed/healing.dm b/code/modules/spells/spell_types/pointed/healing.dm index 38ca4c21296..1b090c7f3fe 100644 --- a/code/modules/spells/spell_types/pointed/healing.dm +++ b/code/modules/spells/spell_types/pointed/healing.dm @@ -66,7 +66,7 @@ cast_on.adjust_divine_fire_stacks(1) cast_on.IgniteMob() return - if((cast_on.real_name in GLOB.excommunicated_players) && !HAS_TRAIT(cast_on, TRAIT_FANATICAL)) + if(((cast_on.real_name in GLOB.excommunicated_players) || (cast_on.real_name in GLOB.heretical_players)) && !HAS_TRAIT(cast_on, TRAIT_FANATICAL)) cast_on.visible_message( span_warning("The angry Ten sear the flesh of [cast_on]! a foolish blasphemer and heretic!"), span_notice("I am despised by the Ten, rejected, and they remind me just how unlovable I am with a wave of pain!"), From fe92e84b873148c03236e0ee2c7f0ce8422f698e Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 01:23:11 +0000 Subject: [PATCH 06/20] holy fire enchant --- code/__DEFINES/enchantments.dm | 12 +- code/datums/components/enchanted_item.dm | 57 ++++++--- code/datums/components/martyrweapon.dm | 121 +++++++++--------- code/datums/faith/devotion_subtypes.dm | 14 ++ .../jobs/job_types/church/gmtemplar.dm | 2 +- .../jobs/job_types/youngfolk/churchling.dm | 2 +- .../pointed/enchantment/_enchantment.dm | 5 +- .../pointed/enchantment/holyflame_blade.dm | 36 ++++++ vanderlin.dme | 1 + 9 files changed, 164 insertions(+), 86 deletions(-) create mode 100644 code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm diff --git a/code/__DEFINES/enchantments.dm b/code/__DEFINES/enchantments.dm index 16135013f28..2979059f753 100644 --- a/code/__DEFINES/enchantments.dm +++ b/code/__DEFINES/enchantments.dm @@ -1,10 +1,18 @@ #define DEFAULT_DURATION 9000 // 15 MINUTES + #define SEARING_BLADE_ENCHANT 1 #define FORCE_BLADE_ENCHANT 2 #define DURABILITY_ENCHANT 3 +#define DIVINE_FIRE_ENCHANT 4 + #define SEARING_BLADE_DAMAGE 8 -#define FORCE_BLADE_FORCE 5 -#define DURABILITY_INCREASE 100 #define SEARING_FILTER "searing_blade" + +#define FORCE_BLADE_FORCE 5 #define FORCE_FILTER "force_blade" + +#define DURABILITY_INCREASE 100 #define DURABILITY_FILTER "durability_enchant" + +#define DIVINE_FIRE_DAMAGE 8 +#define DIVINE_FILTER "holy_blade" diff --git a/code/datums/components/enchanted_item.dm b/code/datums/components/enchanted_item.dm index c630af6873d..a75c80ef5ea 100644 --- a/code/datums/components/enchanted_item.dm +++ b/code/datums/components/enchanted_item.dm @@ -25,22 +25,23 @@ var/decay_timer /datum/component/enchanted_weapon/Initialize( - duration = 15 MINUTES, - refresh_count = 4, - refresh_skill = /datum/skill/magic/arcane, - skill_threshold = SKILL_LEVEL_JOURNEYMAN, - enchant_type = SEARING_BLADE_ENCHANT, - current_user, + n_duration = 15 MINUTES, + n_refresh_count = 4, + n_refresh_skill = /datum/skill/magic/arcane, + n_skill_threshold = SKILL_LEVEL_JOURNEYMAN, + n_enchant_type = SEARING_BLADE_ENCHANT, + n_current_user, ) if(!istype(parent, /obj/item/weapon)) return COMPONENT_INCOMPATIBLE - src.duration = duration - src.refresh_count = refresh_count - src.refresh_skill = refresh_skill - src.enchant_type = enchant_type - if(current_user) - src.current_user = WEAKREF(current_user) + duration = n_duration + refresh_count = n_refresh_count + refresh_skill = n_refresh_skill + skill_threshold = n_skill_threshold + enchant_type = n_enchant_type + if(n_current_user) + current_user = WEAKREF(n_current_user) RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip)) @@ -59,6 +60,8 @@ I.add_filter(FORCE_FILTER, 2, outline_filter(1, "#9400D3")) if(SEARING_BLADE_ENCHANT) I.add_filter(SEARING_FILTER, 2, outline_filter(1, "#64af18")) + if(DIVINE_FIRE_ENCHANT) + I.add_filter(DIVINE_FILTER, 2, outline_filter(1, "#dddddd")) if(DURABILITY_ENCHANT) I.modify_max_integrity(I.max_integrity + DURABILITY_INCREASE) I.add_filter(DURABILITY_FILTER, 2, outline_filter(1, "#808080")) @@ -108,6 +111,8 @@ I.remove_filter(FORCE_FILTER) if(SEARING_BLADE_ENCHANT) I.remove_filter(SEARING_FILTER) + if(DIVINE_FIRE_ENCHANT) + I.remove_filter(DIVINE_FILTER) if(DURABILITY_ENCHANT) I.modify_max_integrity(I.max_integrity - DURABILITY_INCREASE, can_break = FALSE) I.remove_filter(DURABILITY_FILTER) @@ -124,12 +129,15 @@ current_user = null /datum/component/enchanted_weapon/proc/on_examine(datum/source, mob/user, list/examine_list) - if(enchant_type == SEARING_BLADE_ENCHANT) - examine_list += "This weapon is enchanted with a green flame enchantment." - else if(enchant_type == FORCE_BLADE_ENCHANT) - examine_list += "This weapon is enchanted with a force blade enchantment." - else if(enchant_type == DURABILITY_ENCHANT) - examine_list += "This weapon is enchanted with a durability enchantment." + switch(enchant_type) + if(SEARING_BLADE_ENCHANT) + examine_list += "This weapon is enchanted with a green flame enchantment." + if(FORCE_BLADE_ENCHANT) + examine_list += "This weapon is enchanted with a force blade enchantment." + if(DURABILITY_ENCHANT) + examine_list += "This weapon is enchanted with a durability enchantment." + if(DIVINE_FIRE_ENCHANT) + examine_list += "This weapon is enchanted with a divine flame enchantment." examine_list += "It will last for [timeleft(decay_timer) / 10] more seconds." /datum/component/enchanted_weapon/proc/item_afterattack(obj/item/source, atom/target, mob/user, proximity_flag, list/modifiers) @@ -137,8 +145,15 @@ return if(enchant_type == SEARING_BLADE_ENCHANT) if(isliving(target)) - var/mob/living/M = target - M.adjustFireLoss(SEARING_BLADE_DAMAGE) - to_chat(M, span_warning("Flames leaps from [source] and singes you!")) + var/mob/living/target_mob = target + target_mob.adjustFireLoss(SEARING_BLADE_DAMAGE) + to_chat(target_mob, span_warning("Flames leaps from [source] and singes you!")) + // Permanent temporary solution until I figure out how to hack a dynamic on mob sprites + // Bypass parry & dodge btw. + else if(enchant_type == DIVINE_FIRE_ENCHANT) + if(isliving(target)) + var/mob/living/target_mob = target + target_mob.adjustFireLoss(DIVINE_FIRE_DAMAGE) + to_chat(target_mob, span_warning("Divine fire leaps from [source] and singes you!")) // Permanent temporary solution until I figure out how to hack a dynamic on mob sprites // Bypass parry & dodge btw. diff --git a/code/datums/components/martyrweapon.dm b/code/datums/components/martyrweapon.dm index 7570ecd37fb..97fe815d690 100644 --- a/code/datums/components/martyrweapon.dm +++ b/code/datums/components/martyrweapon.dm @@ -15,7 +15,7 @@ var/ignite_chance = 2 var/traits_applied = list(TRAIT_NOPAIN, TRAIT_NOPAINSTUN, TRAIT_LONGSTRIDER) var/stat_bonus_martyr = 3 - var/mob/living/current_holder + var/mob/living/bound_user var/is_active = FALSE var/allow_all = FALSE var/is_activating @@ -79,10 +79,10 @@ /datum/component/martyrweapon/proc/handle_end() deactivate() - var/mob/living/carbon/C = current_holder + var/mob/living/carbon/C = bound_user switch(current_state) if(STATE_SAFE) - var/area/A = get_area(current_holder) + var/area/A = get_area(bound_user) var/success = FALSE for(var/AR in allowed_areas) //Are we in a whitelisted area? (Church, mainly) if(istype(A, AR)) @@ -95,9 +95,9 @@ if(istype(mercyarea, AR)) success = TRUE if(success) - to_chat(current_holder, span_notice("The weapon fizzles out, its energies dissipating across the holy grounds.")) + to_chat(bound_user, span_notice("The weapon fizzles out, its energies dissipating across the holy grounds.")) else - to_chat(current_holder, span_notice("The weapon begins to fizzle out, but the energy has nowhere to go!")) + to_chat(bound_user, span_notice("The weapon begins to fizzle out, but the energy has nowhere to go!")) C.freak_out() deathprocess() @@ -106,20 +106,20 @@ deathprocess() /datum/component/martyrweapon/proc/deathprocess() - if(current_holder) - current_holder.Stun(16000, 1, 1) //Even if you glitch out to survive you're still permastunned, you are not meant to come back from this - var/mob/living/carbon/human/H = current_holder + if(bound_user) + bound_user.Stun(16000, 1, 1) //Even if you glitch out to survive you're still permastunned, you are not meant to come back from this + var/mob/living/carbon/human/H = bound_user if(H.cmode) //Turn off the music H.toggle_cmode() addtimer(CALLBACK(src, PROC_REF(killhost)), 30 SECONDS) - current_holder.visible_message(span_warning("[current_holder] falls to their knees, planting their weapon into the ground as holy energies pulse from their body!"), span_warning("My oath is fulfilled. I hope I made it count. I have thirty seconds to make peace with the Gods and my Kin.")) - current_holder.playsound_local(current_holder, 'sound/health/fastbeat.ogg', 100) + bound_user.visible_message(span_warning("[bound_user] falls to their knees, planting their weapon into the ground as holy energies pulse from their body!"), span_warning("My oath is fulfilled. I hope I made it count. I have thirty seconds to make peace with the Gods and my Kin.")) + bound_user.playsound_local(bound_user, 'sound/health/fastbeat.ogg', 100) /datum/component/martyrweapon/proc/killhost() - if(current_holder) - var/mob/living/carbon/human/H = current_holder - current_holder.playsound_local(current_holder, 'sound/magic/ahh1.ogg', 100) - current_holder.visible_message(span_info("[current_holder] fades away."), span_info("Your life led up to this moment. In the face of the decay of the world, you endured. Now you rest. You feel your soul shed from its mortal coils, and the embrace of [H.patron.name]")) + if(bound_user) + var/mob/living/carbon/human/H = bound_user + bound_user.playsound_local(bound_user, 'sound/magic/ahh1.ogg', 100) + bound_user.visible_message(span_info("[bound_user] fades away."), span_info("Your life led up to this moment. In the face of the decay of the world, you endured. Now you rest. You feel your soul shed from its mortal coils, and the embrace of [H.patron.name]")) H.dust(drop_items = TRUE) is_dying = FALSE @@ -127,18 +127,18 @@ /datum/component/martyrweapon/proc/timehint() var/result = round((end_activation - world.time) / 600) //Minutes if(result != last_time && last_time != 30) - to_chat(current_holder,span_notice("[result + 1] minute[result ? "s" : ""] left.")) + to_chat(bound_user,span_notice("[result + 1] minute[result ? "s" : ""] left.")) last_time = result return result if(result == 0) var/resultadv = (end_activation - world.time) / 10 //Seconds if(resultadv < 30 && resultadv > 27 && last_time != 30) - to_chat(current_holder,span_notice("30 SECONDS! MY POWER SURGES!!")) + to_chat(bound_user,span_notice("30 SECONDS! MY POWER SURGES!!")) last_time = 30 return 30 else if(resultadv == 10 && last_time != 10) - to_chat(current_holder,span_crit("10 SECONDS")) + to_chat(bound_user,span_crit("10 SECONDS")) last_time = resultadv return 0 @@ -179,17 +179,20 @@ to_chat(H, span_warn("It slips from my grasp. I can't get a hold.")) H.dropItemToGround(parent) return - else + if(!bound_user) + bound_user = user + to_chat(user, SPAN_GOD_ASTRATA("The weapon binds to you.")) + if(user == bound_user) RegisterSignal(user, COMSIG_CLICK_ALT, PROC_REF(altclick), override = TRUE) - current_holder = user - if(J.title == "Grandmaster Templar") - to_chat(user, span_warning("The weapon binds to you.")) else - RegisterSignal(user, COMSIG_CLICK_ALT, PROC_REF(altclick), override = TRUE) - current_holder = user + if(!bound_user) + bound_user = user + to_chat(user, SPAN_GOD_ASTRATA("The weapon binds to you.")) + if(user == bound_user) + RegisterSignal(user, COMSIG_CLICK_ALT, PROC_REF(altclick), override = TRUE) /datum/component/martyrweapon/proc/altclick(mob/user) - if(user == current_holder && !is_active && !is_activating) + if(user == bound_user && !is_active && !is_activating) var/holding = user.get_active_held_item() if(holding == parent) if(COOLDOWN_FINISHED(src, weaponactivate)) @@ -227,13 +230,13 @@ //IF it gets dropped, somehow (likely delimbing), turn it off immediately. /datum/component/martyrweapon/proc/on_drop(datum/source, mob/user) - if(current_holder == user) + if(bound_user == user) UnregisterSignal(user, COMSIG_CLICK_ALT) if(current_state == STATE_SAFE && is_active) deactivate() /datum/component/martyrweapon/proc/on_examine(datum/source, mob/user, list/examine_list) - if(current_holder && current_holder == user) + if(bound_user && bound_user == user) examine_list += span_notice("It looks to be bound to you. Alt + right click to activate it.") if(!COOLDOWN_FINISHED(src, weaponactivate)) examine_list += span_notice("The time remaining until it is prepared: [COOLDOWN_TIMELEFT(src, weaponactivate) / 600] minutes") @@ -241,19 +244,19 @@ examine_list += span_notice("It looks ready to be used again.") if(is_active) examine_list += span_warningbig("It is lit afire by godly energies!") - if(user == current_holder) + if(user == bound_user) examine_list += span_warningbig("SLAY THE HERETICS! TAKE THEM WITH YOU!") /datum/component/martyrweapon/proc/adjust_traits(remove = FALSE) for(var/trait in traits_applied) if(!remove) - ADD_TRAIT(current_holder, trait, "martyrweapon") + ADD_TRAIT(bound_user, trait, "martyrweapon") else - REMOVE_TRAIT(current_holder, trait, "martyrweapon") + REMOVE_TRAIT(bound_user, trait, "martyrweapon") /datum/component/martyrweapon/proc/adjust_stats(state) - if(current_holder) - var/mob/living/carbon/human/H = current_holder + if(bound_user) + var/mob/living/carbon/human/H = bound_user switch(state) if(STATE_SAFE) //Lowered damage due to BURN damage type and SAFE activation var/obj/item/I = parent @@ -263,20 +266,20 @@ I.force_wielded = active_safe_damage_wielded return if(STATE_MARTYR) - current_holder.STASTR += stat_bonus_martyr - //current_holder.STASPD += stat_bonus_martyr - current_holder.STACON += stat_bonus_martyr - current_holder.STAEND += stat_bonus_martyr - current_holder.STAINT += stat_bonus_martyr - current_holder.STAPER += stat_bonus_martyr - current_holder.STALUC += stat_bonus_martyr + bound_user.STASTR += stat_bonus_martyr + //bound_user.STASPD += stat_bonus_martyr + bound_user.STACON += stat_bonus_martyr + bound_user.STAEND += stat_bonus_martyr + bound_user.STAINT += stat_bonus_martyr + bound_user.STAPER += stat_bonus_martyr + bound_user.STALUC += stat_bonus_martyr H.adjust_energy(9999) if(STATE_MARTYRULT) // This ONLY triggers a minute and a half into the ult. They'll have this for thirty seconds and then DIE. Go off King. - ADD_TRAIT(current_holder, TRAIT_NOSTAMINA, TRAIT_GENERIC) - current_holder.STASTR = 20 - current_holder.STAPER = 20 - current_holder.STACON = 20 - current_holder.STAEND = 20 + ADD_TRAIT(bound_user, TRAIT_NOSTAMINA, TRAIT_GENERIC) + bound_user.STASTR = 20 + bound_user.STAPER = 20 + bound_user.STACON = 20 + bound_user.STAEND = 20 //This is called regardless of the activated state (safe or not) /datum/component/martyrweapon/proc/deactivate() @@ -287,7 +290,7 @@ I.damtype = BRUTE I.possible_item_intents = inactive_intents I.gripped_intents = inactive_intents_wielded - current_holder.update_a_intents() + bound_user.update_a_intents() I.force = initial(I.force) I.force_wielded = initial(I.force_wielded) I.max_integrity = initial(I.max_integrity) @@ -320,11 +323,11 @@ I.item_state = initial(I.item_state) I.toggle_state = null - current_holder.regenerate_icons() + bound_user.regenerate_icons() //This is called once all the checks are passed and the options are made by the player to commit. /datum/component/martyrweapon/proc/activate(mob/user, status_flag) - current_holder.visible_message("[span_notice("[current_holder] begins invoking their Oath!")]", span_notice("You begin to invoke your oath.")) + bound_user.visible_message("[span_notice("[bound_user] begins invoking their Oath!")]", span_notice("You begin to invoke your oath.")) if(do_after(user, 5 SECONDS, parent)) flash_lightning(user) var/obj/item/I = parent @@ -343,8 +346,8 @@ if(STATE_SAFE) end_activation = world.time + safe_duration //Only a duration and nothing else. adjust_stats(current_state) //Lowers the damage of the sword due to safe activation. - current_holder.energy = current_holder.max_energy - current_holder.stamina = 0 + bound_user.energy = bound_user.max_energy + bound_user.stamina = 0 I.blade_int = I.max_blade_int if(STATE_MARTYR) end_activation = world.time + martyr_duration @@ -353,8 +356,8 @@ I.blade_int = I.max_blade_int adjust_stats(current_state) //Gives them extra stats. - current_holder.stamina = 0 - current_holder.energy = current_holder.max_energy + bound_user.stamina = 0 + bound_user.energy = bound_user.max_energy if(STATE_MARTYRULT) end_activation = world.time + ultimate_duration @@ -363,22 +366,22 @@ I.max_blade_int = 9999 I.blade_int = I.max_blade_int - current_holder.adjust_skillrank(/datum/skill/misc/athletics, 6, FALSE) + bound_user.adjust_skillrank(/datum/skill/misc/athletics, 6, FALSE) adjust_stats(STATE_MARTYR) - current_holder.energy = current_holder.max_energy - current_holder.stamina = 0 + bound_user.energy = bound_user.max_energy + bound_user.stamina = 0 - current_holder.adjust_skillrank(/datum/skill/combat/swords, 1, FALSE) - current_holder.adjust_skillrank(/datum/skill/combat/axesmaces, 1, FALSE) - current_holder.adjust_skillrank(/datum/skill/combat/polearms, 1, FALSE) + bound_user.adjust_skillrank(/datum/skill/combat/swords, 1, FALSE) + bound_user.adjust_skillrank(/datum/skill/combat/axesmaces, 1, FALSE) + bound_user.adjust_skillrank(/datum/skill/combat/polearms, 1, FALSE) else end_activation = world.time + safe_duration - if(ishuman(current_holder)) - var/mob/living/carbon/human/H = current_holder + if(ishuman(bound_user)) + var/mob/living/carbon/human/H = bound_user switch(status_flag) if(STATE_MARTYR) SEND_SOUND(H, sound(null)) @@ -397,7 +400,7 @@ is_active = TRUE else is_activating = FALSE - SEND_SOUND(current_holder, sound(null)) + SEND_SOUND(bound_user, sound(null)) #undef STATE_SAFE #undef STATE_MARTYR diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 094d80b6603..64008bf2224 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -1,6 +1,20 @@ /datum/devotion/divine/undivided + traits = list(TRAIT_DIVINE_SERVANT) +/datum/devotion/divine/undivided/make_templar() + devotion = 50 + max_devotion = CLERIC_REQ_3 + progression = CLERIC_REQ_1 + max_progression = CLERIC_REQ_2 + miracles = list( + CLERIC_T0 = /datum/action/cooldown/spell/healing, + CLERIC_T1 = /datum/action/cooldown/spell/avert, + CLERIC_T2 = /datum/action/cooldown/spell/enchantment/holy_flame, + ) + viable_tasks = list( + /datum/devotion_task/astrata_purge, + ) /datum/devotion/divine/astrata miracles = list( diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 403ae200953..5763378c668 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -13,7 +13,7 @@ cmode_music = 'sound/music/cmode/church/CombatRavox.ogg' allowed_races = RACES_PLAYER_NONDISCRIMINATED - allowed_patrons = list(/datum/patron/divine/ravox) + allowed_patrons = list(/datum/patron/divine/undivided) outfit = /datum/outfit/gmtemplar give_bank_account = 0 diff --git a/code/modules/jobs/job_types/youngfolk/churchling.dm b/code/modules/jobs/job_types/youngfolk/churchling.dm index ad3adbf5daf..139a8e536fd 100644 --- a/code/modules/jobs/job_types/youngfolk/churchling.dm +++ b/code/modules/jobs/job_types/youngfolk/churchling.dm @@ -14,7 +14,7 @@ allowed_ages = list(AGE_CHILD) allowed_races = RACES_PLAYER_ALL - allowed_patrons = ALL_TEMPLE_PATRONS + allowed_patrons = UNDIVIDED_TEMPLE_PATRONS outfit = /datum/outfit/churchling give_bank_account = TRUE diff --git a/code/modules/spells/spell_types/pointed/enchantment/_enchantment.dm b/code/modules/spells/spell_types/pointed/enchantment/_enchantment.dm index 0ec0e2af755..db3a87a25e1 100644 --- a/code/modules/spells/spell_types/pointed/enchantment/_enchantment.dm +++ b/code/modules/spells/spell_types/pointed/enchantment/_enchantment.dm @@ -42,6 +42,7 @@ if(!enchant_item) to_chat(owner, span_warning("There is nothing to enchant!")) return - enchantment_duration *= attuned_strength - enchant_item.AddComponent(/datum/component/enchanted_weapon, enchantment_duration, allows_refresh, associated_skill, enchantment, holder) + if(spell_type != SPELL_MIRACLE) + enchantment_duration *= attuned_strength + enchant_item.AddComponent(/datum/component/enchanted_weapon, enchantment_duration, allows_refresh, associated_skill, 1, enchantment, holder) cooldown_time = cooldown_time || enchantment_duration diff --git a/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm b/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm new file mode 100644 index 00000000000..0c5c167b9e3 --- /dev/null +++ b/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm @@ -0,0 +1,36 @@ +/datum/action/cooldown/spell/enchantment/holy_flame + name = "Imbue Holy Fire" + desc = "Enchant a weapon with divine flames." + button_icon_state = "enchant_weapon" + + enchantment_duration = 5 MINUTES + attunements = list( + /datum/attunement/fire = 0.3, + ) + + charge_required = FALSE + spell_cost = 30 + spell_flags = SPELL_RITUOS + enchantment = DIVINE_FIRE_ENCHANT + spell_type = SPELL_MIRACLE + associated_skill = /datum/skill/magic/holy + +/datum/action/cooldown/spell/enchantment/holy_flame/is_valid_target(atom/cast_on) + var/obj/item/weapon/enchant_item + if(istype(cast_on, /obj/item/weapon)) + enchant_item = cast_on + else if(isliving(cast_on)) + var/mob/living/living_mob = cast_on + var/obj/item/weapon/held = living_mob.get_active_held_item() + if(istype(held)) + enchant_item = held + + if(!enchant_item) + to_chat(owner, span_warning("There is nothing to enchant!")) + return FALSE + + if(enchant_item.GetComponent(/datum/component/martyrweapon)) + to_chat(owner, span_warning("You cannot imbue such a powerful weapon with any more divine power!")) + return FALSE + + return TRUE diff --git a/vanderlin.dme b/vanderlin.dme index 623fa98a314..4440e1b890f 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3529,6 +3529,7 @@ #include "code\modules\spells\spell_types\pointed\conjure\web.dm" #include "code\modules\spells\spell_types\pointed\enchantment\_enchantment.dm" #include "code\modules\spells\spell_types\pointed\enchantment\greenflame_blade.dm" +#include "code\modules\spells\spell_types\pointed\enchantment\holyflame_blade.dm" #include "code\modules\spells\spell_types\pointed\projectile\_projectile.dm" #include "code\modules\spells\spell_types\pointed\projectile\acid_splash.dm" #include "code\modules\spells\spell_types\pointed\projectile\arcyne_bolt.dm" From 145c51eae4df760b52ca21b640957f8db49a4048 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 03:29:08 +0000 Subject: [PATCH 07/20] conversion . --- code/__DEFINES/roguetown.dm | 1 + code/__DEFINES/storytellers.dm | 8 +++++ code/__DEFINES/traits/definitions.dm | 1 + code/__HELPERS/global_lists.dm | 3 +- code/_globalvars/traits.dm | 6 ++-- code/datums/components/enchanted_item.dm | 5 ++- code/datums/elements/divine_intervention.dm | 2 +- code/datums/faith/_devotion.dm | 7 ++++ code/datums/faith/devotion_subtypes.dm | 3 +- code/datums/gods/_faith.dm | 2 +- code/datums/gods/_patron.dm | 5 ++- code/game/objects/structures/fluff.dm | 32 +++++++++++++++++++ code/modules/admin/topic.dm | 2 +- .../client/preferences/_preferences.dm | 6 ++-- .../preferences/preferences_savefile.dm | 4 +-- .../modules/events/god_intervention/schism.dm | 4 +-- code/modules/jobs/job_types/_job.dm | 4 +-- code/modules/mob/living/stats.dm | 32 +++++++++++++++++-- .../spells/spell_types/pointed/avert.dm | 3 ++ .../pointed/enchantment/holyflame_blade.dm | 1 + .../spells/spell_types/pointed/healing.dm | 4 ++- 21 files changed, 114 insertions(+), 21 deletions(-) diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index de4c627b0bb..133a48263d1 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -8,6 +8,7 @@ /// Currently same as ALL_ICONOCLAST_PATRONS, but in text format because byond sucks and won't read things properly. #define COLORFUL_PATRONS list("Psydon", "Astrata", "Noc", "Dendor", "Abyssor", "Necra", "Ravox", "Xylix", "Pestra", "Malum", "Eora", "Graggar", "Zizo", "Matthios", "Baotha") +#define TEMPLE_PATRON_NAMES list("Astrata", "Noc", "Dendor", "Abyssor", "Necra", "Ravox", "Xylix", "Pestra", "Malum", "Eora") GLOBAL_LIST_INIT(curse_names, list()) diff --git a/code/__DEFINES/storytellers.dm b/code/__DEFINES/storytellers.dm index 82d1cd011e5..be5877005aa 100644 --- a/code/__DEFINES/storytellers.dm +++ b/code/__DEFINES/storytellers.dm @@ -219,3 +219,11 @@ #define BAOTHA "Baotha" #define GRAGGAR "Graggar" #define MATTHIOS "Matthios" + +// Devotion Classes +#define DEVOTION_CLASS_PRIEST "Priest" +#define DEVOTION_CLASS_TEMPLAR "Templar" +#define DEVOTION_CLASS_ACOLYTE "Acolyte" +#define DEVOTION_CLASS_ABSOLVER "Absolver" +#define DEVOTION_CLASS_CLERIC "Cleric" +#define DEVOTION_CLASS_CHURCHLING "Churchling" diff --git a/code/__DEFINES/traits/definitions.dm b/code/__DEFINES/traits/definitions.dm index 7ed65554486..3b3f71418f0 100644 --- a/code/__DEFINES/traits/definitions.dm +++ b/code/__DEFINES/traits/definitions.dm @@ -455,6 +455,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SILVER_BLESSED "Silver Blessed" #define TRAIT_TEN_UNDIVIDED "Worshipper of the Ten Undivided" #define TRAIT_DIVINE_SERVANT "Divine Servant" +#define TRAIT_DIVINE_CONVERT "Divine Convert" // Inhumen patron trait bonuses #define TRAIT_ORGAN_EATER "Blessing of Graggar"//Can eat organs (duh.) and raw meat diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 1418b59f7e9..f2d0d292354 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -60,7 +60,8 @@ patron = new patron() - GLOB.patron_list[patron.type] = patron + GLOB.patrons_by_type[patron.type] = patron + GLOB.patrons_by_name[patron.name] = patron LAZYINITLIST(GLOB.patrons_by_faith[patron.associated_faith]) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index ce17334622c..9e8813abae7 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -101,6 +101,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "Blessing of Necra" = TRAIT_SOUL_EXAMINE, "Worshipper of the Ten Undivided" = TRAIT_TEN_UNDIVIDED, "Divine Servant" = TRAIT_DIVINE_SERVANT, + "Divine Convert" = TRAIT_DIVINE_CONVERT, "Golden Blood" = TRAIT_SEEPRICES, "Of the Cabal" = TRAIT_CABAL, "Unleechable" = TRAIT_LEECHIMMUNE, @@ -260,8 +261,9 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_INTRAINING = "I'm going to be a knight someday! I can use training dummies more effectively than others.", TRAIT_MALUMFIRE = "My hands are blessed by Malum to forge items of superb quality.", TRAIT_DEATHSIGHT = span_info("I can feel when someone nearby draws the Undermaiden's attention, a tiny voice whispering 'Someone has died,' in my ear."), - TRAIT_TEN_UNDIVIDED = "I serve The Ten equally. I wonder which one I should profess myself to...", - TRAIT_DIVINE_SERVANT = SPAN_GOD_ASTRATA("I serve the divine."), + TRAIT_TEN_UNDIVIDED = "I haven't connected a divine patron. I wonder which one I should profess myself to...", + TRAIT_DIVINE_SERVANT = SPAN_GOD_GENERIC("I serve the divine."), + TRAIT_DIVINE_CONVERT = SPAN_GOD_GENERIC("I recently converted to a new Patron."), TRAIT_CABAL = span_purple("In secret, I have studied the ways of Her ascension, and know of others of the Cabal."), TRAIT_LEGENDARY_ALCHEMIST = span_info("An expert in the art of finding herbs in the wild."), TRAIT_DECEIVING_MEEKNESS = "People look at me and think I am a weakling. They are mistaken.", diff --git a/code/datums/components/enchanted_item.dm b/code/datums/components/enchanted_item.dm index a75c80ef5ea..56ff5d476c9 100644 --- a/code/datums/components/enchanted_item.dm +++ b/code/datums/components/enchanted_item.dm @@ -153,7 +153,10 @@ else if(enchant_type == DIVINE_FIRE_ENCHANT) if(isliving(target)) var/mob/living/target_mob = target - target_mob.adjustFireLoss(DIVINE_FIRE_DAMAGE) + var/damage_amt = DIVINE_FIRE_DAMAGE + if(source.has_enchantment(/datum/enchantment/silver)) + damage_amt = damage_amt*1.5 + target_mob.adjustFireLoss(damage_amt) to_chat(target_mob, span_warning("Divine fire leaps from [source] and singes you!")) // Permanent temporary solution until I figure out how to hack a dynamic on mob sprites // Bypass parry & dodge btw. diff --git a/code/datums/elements/divine_intervention.dm b/code/datums/elements/divine_intervention.dm index 5f6913f83c0..68c29181e6d 100644 --- a/code/datums/elements/divine_intervention.dm +++ b/code/datums/elements/divine_intervention.dm @@ -10,7 +10,7 @@ . = ..() if(!istype(target)) return ELEMENT_INCOMPATIBLE - src.patron = GLOB.patron_list[patron] + src.patron = GLOB.patrons_by_type[patron] src.allows_pantheon = allows_pantheon src.stress_event = stress_event src.sets_alight = sets_alight diff --git a/code/datums/faith/_devotion.dm b/code/datums/faith/_devotion.dm index 03869356487..7227b69df5a 100644 --- a/code/datums/faith/_devotion.dm +++ b/code/datums/faith/_devotion.dm @@ -29,6 +29,8 @@ var/list/datum/devotion_task/tasks = list() var/list/viable_tasks = list() + var/devotion_class = DEVOTION_CLASS_CLERIC + /datum/devotion/Destroy(force) remove() STOP_PROCESSING(SSprocessing, src) @@ -150,21 +152,25 @@ /datum/action/cooldown/spell/undirected/touch/orison, /datum/action/cooldown/spell/cure_rot, ) + devotion_class = DEVOTION_CLASS_PRIEST /datum/devotion/proc/make_templar() devotion = 50 max_devotion = CLERIC_REQ_3 progression = CLERIC_REQ_1 max_progression = CLERIC_REQ_2 + devotion_class = DEVOTION_CLASS_TEMPLAR /datum/devotion/proc/make_absolver() devotion = 100 max_devotion = CLERIC_REQ_3 progression = CLERIC_REQ_3 max_progression = CLERIC_REQ_3 + devotion_class = DEVOTION_CLASS_ABSOLVER /datum/devotion/proc/make_acolyte() progression = CLERIC_REQ_1 + devotion_class = DEVOTION_CLASS_ACOLYTE /datum/devotion/proc/make_cleric() devotion = 50 @@ -180,6 +186,7 @@ /datum/action/cooldown/spell/undirected/touch/orison/lesser, /datum/action/cooldown/spell/diagnose/holy, ) + devotion_class = DEVOTION_CLASS_CHURCHLING /mob/living/carbon/human/proc/devotionreport() set name = "Check Devotion" diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 64008bf2224..14794a5fd2a 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -9,12 +9,13 @@ miracles = list( CLERIC_T0 = /datum/action/cooldown/spell/healing, - CLERIC_T1 = /datum/action/cooldown/spell/avert, + CLERIC_T1 = /datum/action/cooldown/spell/avert/templar, CLERIC_T2 = /datum/action/cooldown/spell/enchantment/holy_flame, ) viable_tasks = list( /datum/devotion_task/astrata_purge, ) + devotion_class = DEVOTION_CLASS_TEMPLAR /datum/devotion/divine/astrata miracles = list( diff --git a/code/datums/gods/_faith.dm b/code/datums/gods/_faith.dm index fe707d40bdc..686a3e63f3e 100644 --- a/code/datums/gods/_faith.dm +++ b/code/datums/gods/_faith.dm @@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(faith_list) return FALSE for(var/datum/patron/patron as anything in patrons) - patron = GLOB.patron_list[patron] + patron = GLOB.patrons_by_type[patron] if(patron.preference_accessible(prefs)) return TRUE diff --git a/code/datums/gods/_patron.dm b/code/datums/gods/_patron.dm index b6e16da6253..685ed2f66b5 100644 --- a/code/datums/gods/_patron.dm +++ b/code/datums/gods/_patron.dm @@ -1,4 +1,5 @@ -GLOBAL_LIST_EMPTY(patron_list) +GLOBAL_LIST_EMPTY(patrons_by_type) +GLOBAL_LIST_EMPTY(patrons_by_name) GLOBAL_LIST_EMPTY(patrons_by_faith) GLOBAL_LIST_EMPTY(prayers) @@ -49,6 +50,8 @@ GLOBAL_LIST_EMPTY(prayers) return TRUE /datum/patron/proc/on_gain(mob/living/pious) + if(HAS_TRAIT(pious, TRAIT_DIVINE_CONVERT)) + return for(var/trait in added_traits) ADD_TRAIT(pious, trait, "[type]") for(var/verb in added_verbs) diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 73637a00377..2c559784843 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -1171,6 +1171,38 @@ attacked_sound = list("sound/combat/hits/onmetal/metalimpact (1).ogg", "sound/combat/hits/onmetal/metalimpact (2).ogg") max_integrity = 450 +/obj/structure/fluff/psycross/attack_hand_secondary(mob/living/carbon/user, list/modifiers) + . = ..() + if(!istype(user)) + return + if(!divine) + return + if(!HAS_TRAIT(user, TRAIT_TEN_UNDIVIDED) || (HAS_TRAIT(user, TRAIT_DIVINE_SERVANT) && !(user.job == "Churchling"))) + return + if(user?.patron.type != /datum/patron/divine/undivided) + return + + var/datum/patron/old_patron = user.patron + var/pick_one = tgui_alert(user, "Do you wish to devote yourself to a Patron?", "Pick a Patron", list("Yes","No")) + if(pick_one != "Yes") + return + + var/datum/patron/new_patron = GLOB.patrons_by_name[tgui_input_list(user, "Choose your new Patron.", "Pick a Patron", TEMPLE_PATRON_NAMES)] + if(!istype(new_patron, /datum/patron) || !(new_patron.type in ALL_TEMPLE_PATRONS)) + return + + var/confirm = tgui_alert(user, "Your new Patron is [new_patron]. Is this correct?", "Confirm choice", list("Yes", "No")) + if(confirm != "Yes") + return + + ADD_TRAIT(user, TRAIT_DIVINE_CONVERT, DEVOTION_TRAIT) + user.set_patron(new_patron) + to_chat(user, "You have devoted yourself to [new_patron]!") + log_game("PATRON: [key_name(user)] changed their patron from [old_patron.name] to [new_patron]") + visible_message("A bright light flashes out from [src] as it channels divine focus.") + AOE_flash(user, range = 5) + playsound(src, 'sound/magic/bless.ogg', 50, TRUE) + /obj/structure/fluff/psycross/attackby(obj/item/W, mob/living/carbon/human/user, list/modifiers) if(!user.mind) return ..() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d099fb661a5..c6aa6432606 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1290,7 +1290,7 @@ if(!ishuman(M)) return - var/patron_to_change_to = browser_input_list(usr, "Change to what patron?", "THE GODS", GLOB.patron_list) + var/patron_to_change_to = browser_input_list(usr, "Change to what patron?", "THE GODS", GLOB.patrons_by_type) if(!patron_to_change_to) return diff --git a/code/modules/client/preferences/_preferences.dm b/code/modules/client/preferences/_preferences.dm index cffa9b168ae..a8444fa14c1 100644 --- a/code/modules/client/preferences/_preferences.dm +++ b/code/modules/client/preferences/_preferences.dm @@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(name_adjustments, list()) //we couldn't load character data so just randomize the character appearance + name randomise_appearance_prefs(include_donator = donator) //let's create a random character then - rather than a fat, bald and naked man. if(!selected_patron) - selected_patron = GLOB.patron_list[default_patron] + selected_patron = GLOB.patrons_by_type[default_patron] key_bindings = deepCopyList(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds and update their movement keys if(isclient(C)) C.update_movement_keys() @@ -1622,12 +1622,12 @@ GLOBAL_LIST_INIT(name_adjustments, list()) var/datum/faith/faith = faiths_named[faith_input] to_chat(user, "Faith: [faith.name]") to_chat(user, "Background: [faith.desc]") - selected_patron = GLOB.patron_list[faith.godhead] || GLOB.patron_list[pick(GLOB.patrons_by_faith[faith.type])] + selected_patron = GLOB.patrons_by_type[faith.godhead] || GLOB.patrons_by_type[pick(GLOB.patrons_by_faith[faith.type])] if("patron") var/list/patrons_named = list() for(var/datum/patron/patron as anything in GLOB.patrons_by_faith[selected_patron.associated_faith || initial(default_patron.associated_faith)]) - patron = GLOB.patron_list[patron] + patron = GLOB.patrons_by_type[patron] if(!patron.preference_accessible(src)) continue var/pref_name = patron.display_name ? patron.display_name : patron.name diff --git a/code/modules/client/preferences/preferences_savefile.dm b/code/modules/client/preferences/preferences_savefile.dm index 7682642c543..a84d0608dfb 100644 --- a/code/modules/client/preferences/preferences_savefile.dm +++ b/code/modules/client/preferences/preferences_savefile.dm @@ -375,10 +375,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/patron_typepath S["selected_patron"] >> patron_typepath if(patron_typepath) - selected_patron = GLOB.patron_list[patron_typepath] + selected_patron = GLOB.patrons_by_type[patron_typepath] if(!selected_patron) //failsafe - selected_patron = GLOB.patron_list[default_patron] + selected_patron = GLOB.patrons_by_type[default_patron] //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) diff --git a/code/modules/events/god_intervention/schism.dm b/code/modules/events/god_intervention/schism.dm index 59a05b46c0d..417ff56483a 100644 --- a/code/modules/events/god_intervention/schism.dm +++ b/code/modules/events/god_intervention/schism.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_EMPTY(tennite_schisms) /datum/tennite_schism/New(datum/patron/challenger) . = ..() challenger_god = WEAKREF(challenger) - astrata_god = WEAKREF(GLOB.patron_list[/datum/patron/divine/astrata]) + astrata_god = WEAKREF(GLOB.patrons_by_type[/datum/patron/divine/astrata]) GLOB.tennite_schisms += src /datum/tennite_schism/Destroy() @@ -388,7 +388,7 @@ GLOBAL_LIST_EMPTY(tennite_schisms) var/astrata_influence = get_storyteller_influence(ASTRATA) || 0 for(var/type in subtypesof(/datum/patron/divine) - list(/datum/patron/divine/astrata, /datum/patron/divine/eora)) - var/datum/patron/divine/god = GLOB.patron_list[type] + var/datum/patron/divine/god = GLOB.patrons_by_type[type] if(!god) continue diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index b010b6e05d9..cb77cd17c50 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -385,11 +385,11 @@ var/list/datum/patron/all_gods = list() var/list/datum/patron/pantheon_gods = list() - for(var/god in GLOB.patron_list) + for(var/god in GLOB.patrons_by_type) if(!(god in allowed_patrons)) continue all_gods |= god - var/datum/patron/P = GLOB.patron_list[god] + var/datum/patron/P = GLOB.patrons_by_type[god] if(P.associated_faith == old_patron.associated_faith) //Prioritize choosing a possible patron within our pantheon pantheon_gods |= god diff --git a/code/modules/mob/living/stats.dm b/code/modules/mob/living/stats.dm index ceab89d777a..21888f5e558 100644 --- a/code/modules/mob/living/stats.dm +++ b/code/modules/mob/living/stats.dm @@ -41,7 +41,7 @@ var/has_rolled_for_stats = FALSE /mob/living/proc/init_faith() - patron = GLOB.patron_list[/datum/patron/godless/godless] + patron = GLOB.patrons_by_type[/datum/patron/godless/godless] /mob/living/proc/set_patron(datum/patron/new_patron, check_antag = FALSE) if(!new_patron) @@ -49,15 +49,43 @@ if(check_antag && mind?.special_role) return FALSE if(ispath(new_patron)) - new_patron = GLOB.patron_list[new_patron] + new_patron = GLOB.patrons_by_type[new_patron] if(!istype(new_patron)) return FALSE if(patron && !ispath(patron)) patron.on_remove(src) mana_pool?.remove_attunements(patron) + + var/mob/living/carbon/human/devout + var/stored_cleric_class + if(ishuman(src)) + devout = src + if(devout.cleric) + stored_cleric_class = devout.cleric.devotion_class + qdel(devout.cleric) + patron = new_patron patron.on_gain(src) mana_pool?.set_attunements(patron) + if(devout && stored_cleric_class) + var/holder = devout.patron?.devotion_holder + if(holder) + var/datum/devotion/devotion = new holder() + switch(stored_cleric_class) + if(DEVOTION_CLASS_PRIEST) + devotion.make_priest() + if(DEVOTION_CLASS_TEMPLAR) + devotion.make_templar() + if(DEVOTION_CLASS_ACOLYTE) + devotion.make_acolyte() + if(DEVOTION_CLASS_ABSOLVER) + devotion.make_absolver() + if(DEVOTION_CLASS_CLERIC) + devotion.make_cleric() + if(DEVOTION_CLASS_CHURCHLING) + devotion.make_churchling() + devotion.grant_to(devout) + return TRUE ///Rolls random stats base 10, +-1, for SPECIAL, and applies species stats and age stats. diff --git a/code/modules/spells/spell_types/pointed/avert.dm b/code/modules/spells/spell_types/pointed/avert.dm index f335e2e7f49..546ba694420 100644 --- a/code/modules/spells/spell_types/pointed/avert.dm +++ b/code/modules/spells/spell_types/pointed/avert.dm @@ -29,6 +29,9 @@ "Some vast, immeasurably distant figure looms beyond my perception - I feel it, more than I see. It waits. It watches.", ) +/datum/action/cooldown/spell/avert/templar + required_items = list(/obj/item/clothing/neck/psycross/silver/divine) + /datum/action/cooldown/spell/avert/is_valid_target(atom/cast_on) . = ..() if(!.) diff --git a/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm b/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm index 0c5c167b9e3..9f684b01293 100644 --- a/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm +++ b/code/modules/spells/spell_types/pointed/enchantment/holyflame_blade.dm @@ -14,6 +14,7 @@ enchantment = DIVINE_FIRE_ENCHANT spell_type = SPELL_MIRACLE associated_skill = /datum/skill/magic/holy + required_items = list(/obj/item/clothing/neck/psycross/silver/divine) /datum/action/cooldown/spell/enchantment/holy_flame/is_valid_target(atom/cast_on) var/obj/item/weapon/enchant_item diff --git a/code/modules/spells/spell_types/pointed/healing.dm b/code/modules/spells/spell_types/pointed/healing.dm index 1b090c7f3fe..a36a57d2897 100644 --- a/code/modules/spells/spell_types/pointed/healing.dm +++ b/code/modules/spells/spell_types/pointed/healing.dm @@ -9,7 +9,7 @@ spell_type = SPELL_MIRACLE antimagic_flags = MAGIC_RESISTANCE_HOLY associated_skill = /datum/skill/magic/holy - required_items = list(/obj/item/clothing/neck/psycross) + required_items = list(/obj/item/clothing/neck/psycross/silver/divine) charge_required = FALSE cooldown_time = 10 SECONDS @@ -234,6 +234,7 @@ antimagic_flags = MAGIC_RESISTANCE_UNHOLY required_items = null is_profane = TRUE + required_items = list(/obj/item/clothing/neck/psycross) /datum/action/cooldown/spell/healing/greater name = "Miracle" @@ -256,3 +257,4 @@ required_items = null stun_undead = FALSE is_profane = TRUE + required_items = list(/obj/item/clothing/neck/psycross) From d5f426e326c3ff1c5a3f07ccbf0cf36a136f52b3 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 03:41:16 +0000 Subject: [PATCH 08/20] brand name --- code/__DEFINES/roguetown.dm | 2 +- code/__DEFINES/storytellers.dm | 2 +- code/__DEFINES/traits/definitions.dm | 2 +- code/_globalvars/traits.dm | 4 ++-- code/datums/faith/devotion_subtypes.dm | 4 ++-- code/datums/gods/patrons/divine_pantheon.dm | 10 +++++----- code/game/objects/structures/fluff.dm | 4 ++-- code/modules/jobs/job_types/church/gmtemplar.dm | 4 ++-- code/modules/mob/living/carbon/human/examine.dm | 4 ++-- code/modules/spells/spell_types/pointed/healing.dm | 4 ++-- .../undirected/list_target/convert_role/church.dm | 8 ++++---- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 133a48263d1..6ff0d637175 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -1,5 +1,5 @@ #define ALL_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) -#define UNDIVIDED_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora, /datum/patron/divine/undivided) +#define UNDIVIDED_TEMPLE_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora, /datum/patron/divine/centrist) #define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) #define ALL_PALADIN_PATRONS list(/datum/patron/psydon, /datum/patron/psydon/extremist, /datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/xylix, /datum/patron/divine/pestra, /datum/patron/divine/malum, /datum/patron/divine/eora) #define ALL_TEMPLAR_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/eora, /datum/patron/divine/necra, /datum/patron/divine/ravox, /datum/patron/divine/pestra, /datum/patron/divine/dendor, /datum/patron/divine/abyssor, /datum/patron/divine/malum, /datum/patron/divine/xylix) diff --git a/code/__DEFINES/storytellers.dm b/code/__DEFINES/storytellers.dm index be5877005aa..e5f40927ca4 100644 --- a/code/__DEFINES/storytellers.dm +++ b/code/__DEFINES/storytellers.dm @@ -212,7 +212,7 @@ #define MALUM "Malum" #define EORA "Eora" #define DENDOR "Dendor" -#define TEN_UNDIVIDED "Ten Undivided" +#define DIVINE_CENTRIST "Enlightened Centrism" // Inhumen pantheon #define ZIZO "Zizo" diff --git a/code/__DEFINES/traits/definitions.dm b/code/__DEFINES/traits/definitions.dm index 3b3f71418f0..3f2d3e21f9f 100644 --- a/code/__DEFINES/traits/definitions.dm +++ b/code/__DEFINES/traits/definitions.dm @@ -453,7 +453,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_INQUISITION "Member of the Oratorium Throni Vacui" #define TRAIT_PURITAN "Puritan" #define TRAIT_SILVER_BLESSED "Silver Blessed" -#define TRAIT_TEN_UNDIVIDED "Worshipper of the Ten Undivided" +#define TRAIT_DIVINE_CENTRIST "Divine Centrist" #define TRAIT_DIVINE_SERVANT "Divine Servant" #define TRAIT_DIVINE_CONVERT "Divine Convert" diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 9e8813abae7..74b24a81da1 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "Blessing of Pestra"= TRAIT_ROT_EATER, "Blessing of Dendor" = TRAIT_KNEESTINGER_IMMUNITY, "Blessing of Necra" = TRAIT_SOUL_EXAMINE, - "Worshipper of the Ten Undivided" = TRAIT_TEN_UNDIVIDED, + "Enlightened Centrist" = TRAIT_DIVINE_CENTRIST, "Divine Servant" = TRAIT_DIVINE_SERVANT, "Divine Convert" = TRAIT_DIVINE_CONVERT, "Golden Blood" = TRAIT_SEEPRICES, @@ -261,7 +261,7 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_INTRAINING = "I'm going to be a knight someday! I can use training dummies more effectively than others.", TRAIT_MALUMFIRE = "My hands are blessed by Malum to forge items of superb quality.", TRAIT_DEATHSIGHT = span_info("I can feel when someone nearby draws the Undermaiden's attention, a tiny voice whispering 'Someone has died,' in my ear."), - TRAIT_TEN_UNDIVIDED = "I haven't connected a divine patron. I wonder which one I should profess myself to...", + TRAIT_DIVINE_CENTRIST = "I haven't connected a divine patron. I wonder which one I should profess myself to...", TRAIT_DIVINE_SERVANT = SPAN_GOD_GENERIC("I serve the divine."), TRAIT_DIVINE_CONVERT = SPAN_GOD_GENERIC("I recently converted to a new Patron."), TRAIT_CABAL = span_purple("In secret, I have studied the ways of Her ascension, and know of others of the Cabal."), diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 14794a5fd2a..c2c0596a0cd 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -1,7 +1,7 @@ -/datum/devotion/divine/undivided +/datum/devotion/divine/centrist traits = list(TRAIT_DIVINE_SERVANT) -/datum/devotion/divine/undivided/make_templar() +/datum/devotion/divine/centrist/make_templar() devotion = 50 max_devotion = CLERIC_REQ_3 progression = CLERIC_REQ_1 diff --git a/code/datums/gods/patrons/divine_pantheon.dm b/code/datums/gods/patrons/divine_pantheon.dm index cb76e70ec32..e943c64f9a9 100644 --- a/code/datums/gods/patrons/divine_pantheon.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -38,16 +38,16 @@ GLOBAL_LIST_INIT(patron_sound_themes, list( return FALSE /* ----------------- */ -/datum/patron/divine/undivided - name = TEN_UNDIVIDED +/datum/patron/divine/centrist + name = DIVINE_CENTRIST domain = "Unity and Conflict. Denizens of the Eternal Plane." - desc = "The Divine Pantheon Undivided. Worship in such a manner is tolerated, but disapproved of. The Ten rarely give their blessings to those who do not give single-minded adoration to a single diety." + desc = "Worshipping The Ten equally. Worship in such a manner is tolerated, but greatly disapproved of. The Ten rarely give their blessings to those who do not give single-minded adoration to a single diety." flaws = "Discordant, Unyielding, Uninterested." worshippers = "The Meek and The Indecisive" sins = "Temptation, Ignorance, Denial" boons = "The Ten pull for your devotion." - added_traits = list(TRAIT_TEN_UNDIVIDED) - devotion_holder = /datum/devotion/divine/undivided + added_traits = list(TRAIT_DIVINE_CENTRIST) + devotion_holder = /datum/devotion/divine/centrist confess_lines = list( "THE TEN GUIDE US!", "THE TEN PROTECT US!", diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 2c559784843..b4cd535ad4a 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -1177,9 +1177,9 @@ return if(!divine) return - if(!HAS_TRAIT(user, TRAIT_TEN_UNDIVIDED) || (HAS_TRAIT(user, TRAIT_DIVINE_SERVANT) && !(user.job == "Churchling"))) + if(!HAS_TRAIT(user, TRAIT_DIVINE_CENTRIST) || (HAS_TRAIT(user, TRAIT_DIVINE_SERVANT) && !(user.job == "Churchling"))) return - if(user?.patron.type != /datum/patron/divine/undivided) + if(user?.patron.type != /datum/patron/divine/centrist) return var/datum/patron/old_patron = user.patron diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 5763378c668..9665566f7d5 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -13,7 +13,7 @@ cmode_music = 'sound/music/cmode/church/CombatRavox.ogg' allowed_races = RACES_PLAYER_NONDISCRIMINATED - allowed_patrons = list(/datum/patron/divine/undivided) + allowed_patrons = list(/datum/patron/divine/centrist) outfit = /datum/outfit/gmtemplar give_bank_account = 0 @@ -101,7 +101,7 @@ belt = /obj/item/storage/belt/leather/black ring = /obj/item/clothing/ring/silver/rontz gloves = /obj/item/clothing/gloves/plate/silver - wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox + wrists = /obj/item/clothing/neck/psycross/silver/divine diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index eceea7d00be..d44ec28773c 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -259,8 +259,8 @@ else . += span_redtext("[m1] an ex-agent of the court.") - if((HAS_TRAIT(src, TRAIT_TEN_UNDIVIDED) && !HAS_TRAIT(src, TRAIT_DIVINE_SERVANT)) && HAS_TRAIT(user, TRAIT_DIVINE_SERVANT)) - . += SPAN_GOD_ASTRATA("A worshipper of The Ten Undivided. Shame!") + if(HAS_TRAIT(user, TRAIT_DIVINE_SERVANT) && (HAS_TRAIT(src, TRAIT_DIVINE_CENTRIST) && !HAS_TRAIT(src, TRAIT_DIVINE_SERVANT))) + . += SPAN_GOD_ASTRATA("An 'Enlightened Centrist'. Shame!") if(real_name in GLOB.excommunicated_players) . += span_userdanger("EXCOMMUNICATED!") diff --git a/code/modules/spells/spell_types/pointed/healing.dm b/code/modules/spells/spell_types/pointed/healing.dm index a36a57d2897..5a59bf063ca 100644 --- a/code/modules/spells/spell_types/pointed/healing.dm +++ b/code/modules/spells/spell_types/pointed/healing.dm @@ -49,9 +49,9 @@ cast_on.visible_message(span_danger("[cast_on] recoils in pain!"), span_userdanger("Divine healing shuns me!")) cast_on.cursed_freak_out() return - /// The Ten won't provide greater healing to undivided worshippers, they do not approve. + /// The Ten won't provide greater healing to centrist worshippers, they do not approve. /// This is ignored if they're already a divine servant, like a Templar, as undivded can only become church roles from round start. - if(HAS_TRAIT(cast_on, TRAIT_TEN_UNDIVIDED) && !HAS_TRAIT(cast_on, TRAIT_DIVINE_SERVANT) && patron_restrictive) + if(HAS_TRAIT(cast_on, TRAIT_DIVINE_CENTRIST) && !HAS_TRAIT(cast_on, TRAIT_DIVINE_SERVANT) && patron_restrictive) cast_on.visible_message(span_danger("[cast_on] recoils in shame!"), span_userdanger("The Ten reject my indecisiveness!")) cast_on.cursed_freak_out() return diff --git a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm index 2565d8697e4..e51104cff65 100644 --- a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm +++ b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm @@ -1,5 +1,5 @@ /datum/action/cooldown/spell/undirected/list_target/convert_role/church - var/allow_undivided = FALSE + var/allow_centrist = FALSE /datum/action/cooldown/spell/undirected/list_target/convert_role/church/cast(mob/living/carbon/human/cast_on) // Patron-specific checks happen here, AFTER priest picks the target @@ -23,8 +23,8 @@ to_chat(owner, span_info("The Ten glare upon you in sadness. CHILD, [cast_on.real_name] serves Psydon, he is dead, nobody can answer these prayers.")) return // Stop recruitment - if(!allow_undivided && istype(cast_on.patron, /datum/patron/divine/undivided)) - to_chat(owner, span_info("The Ten glare upon you in stubbornness. CHILD, [cast_on.real_name] worships Us undivided. They can serve only one.")) + if(!allow_centrist && istype(cast_on.patron, /datum/patron/divine/centrist)) + to_chat(owner, span_info("The Ten glare upon you in stubbornness. [cast_on.real_name] worships The Ten equally. They can serve only one.")) return // Stop recruitment if(!(cast_on.patron.type in ALL_TEMPLE_PATRONS)) @@ -80,7 +80,7 @@ accept_message = "FOR THE TEN!" refuse_message = "I refuse." - allow_undivided = TRUE + allow_centrist = TRUE /datum/action/cooldown/spell/undirected/list_target/convert_role/church/churchling/on_conversion(mob/living/carbon/human/cast_on) . = ..() From b0b97b3bb8ed3de2813fb674847bbf517d5123b5 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 04:10:01 +0000 Subject: [PATCH 09/20] lint fix --- code/modules/unit_tests/craftable_clothes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/unit_tests/craftable_clothes.dm b/code/modules/unit_tests/craftable_clothes.dm index 59e02b77929..2b614bddf4e 100644 --- a/code/modules/unit_tests/craftable_clothes.dm +++ b/code/modules/unit_tests/craftable_clothes.dm @@ -82,7 +82,7 @@ abstract types are automatically excluded. var/list/excluded_paths_with_their_subtypes = list( /obj/item/clothing/neck/mercmedal, // only earnable via hermes /obj/item/clothing/neck/shalal, // this is a medal - /obj/item/clothing/neck/psycross/silver/holy, // unimplemented + /obj/item/clothing/neck/psycross/silver/divine/eora/potion, // unimplemented /obj/item/clothing/armor/skin_armor, // bruh /obj/item/clothing/head/hooded, // abstract items connected to a cloak, shouldn't be craftable /obj/item/clothing/accessory, // ??? From a50d48f3f6d860036093a68cff450d7fd954e7d9 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 04:27:31 +0000 Subject: [PATCH 10/20] more lint fix --- code/modules/spells/spell_types/pointed/avert.dm | 1 + .../spell_types/undirected/list_target/convert_role/church.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/modules/spells/spell_types/pointed/avert.dm b/code/modules/spells/spell_types/pointed/avert.dm index 546ba694420..daa4ece99e0 100644 --- a/code/modules/spells/spell_types/pointed/avert.dm +++ b/code/modules/spells/spell_types/pointed/avert.dm @@ -30,6 +30,7 @@ ) /datum/action/cooldown/spell/avert/templar + name = "Divine Grace" required_items = list(/obj/item/clothing/neck/psycross/silver/divine) /datum/action/cooldown/spell/avert/is_valid_target(atom/cast_on) diff --git a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm index e51104cff65..0b0b7345165 100644 --- a/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm +++ b/code/modules/spells/spell_types/undirected/list_target/convert_role/church.dm @@ -1,4 +1,5 @@ /datum/action/cooldown/spell/undirected/list_target/convert_role/church + name = "Recruit Church Nerd" var/allow_centrist = FALSE /datum/action/cooldown/spell/undirected/list_target/convert_role/church/cast(mob/living/carbon/human/cast_on) From 0c9d16af1e1195f5d8a96b1bc0b3ad248fee94a7 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 10:18:38 +0000 Subject: [PATCH 11/20] rv --- code/modules/jobs/job_types/church/gmtemplar.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 9665566f7d5..dfc2cbbce16 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -2,7 +2,7 @@ title = "Grandmaster Templar" tutorial = "At the upper echelon of the Templaric order sit the Grandmasters, five who sit in the Head in Kingsfield, and one appointed to each sanctified Tennite Church across the realm.\ They are masters of Ravox's arts and beholden to no will except Justice and Astrata, the latter of which they know the overbearing presence of all too well. \ - Despite her cruel authority, the Ravoxian Grandmasters of the Order dare not rise up against the Astratan priests and their sect of guardians at the Head of the Order, lest they be excommunicated." + Despite her cruel authority, the Grandmasters of the Order dare not rise up against the Astratan priests and their sect of guardians at the Head of the Order, lest they be excommunicated." department_flag = CHURCHMEN job_flags = (JOB_ANNOUNCE_ARRIVAL | JOB_SHOW_IN_CREDITS | JOB_EQUIP_RANK | JOB_NEW_PLAYER_JOINABLE) display_order = JDO_GMTEMPLAR From 9f782e68bcb303a9c2d0840afda68dfc82eaccca Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 12:44:43 +0000 Subject: [PATCH 12/20] verb helpers --- code/datums/components/enchanted_item.dm | 4 ++-- code/modules/admin/admin.dm | 11 ++------- .../modules/events/god_intervention/schism.dm | 4 +--- code/modules/jobs/job_types/church/priest.dm | 24 +++++++++++++++---- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/code/datums/components/enchanted_item.dm b/code/datums/components/enchanted_item.dm index 56ff5d476c9..b4d56a328c9 100644 --- a/code/datums/components/enchanted_item.dm +++ b/code/datums/components/enchanted_item.dm @@ -147,7 +147,7 @@ if(isliving(target)) var/mob/living/target_mob = target target_mob.adjustFireLoss(SEARING_BLADE_DAMAGE) - to_chat(target_mob, span_warning("Flames leaps from [source] and singes you!")) + target_mob.visible_message(span_warning("Flames leap from [source], burning [target_mob]!"), span_warning("Flames leap from [source] and singes you!")) // Permanent temporary solution until I figure out how to hack a dynamic on mob sprites // Bypass parry & dodge btw. else if(enchant_type == DIVINE_FIRE_ENCHANT) @@ -157,6 +157,6 @@ if(source.has_enchantment(/datum/enchantment/silver)) damage_amt = damage_amt*1.5 target_mob.adjustFireLoss(damage_amt) - to_chat(target_mob, span_warning("Divine fire leaps from [source] and singes you!")) + target_mob.visible_message(span_warning("Divine fire leaps from [source], burning [target_mob]!"), span_warning("Divine fire leaps from [source] and singes you!")) // Permanent temporary solution until I figure out how to hack a dynamic on mob sprites // Bypass parry & dodge btw. diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 326bd5005ed..462ecbc8642 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1113,11 +1113,7 @@ HL.mind.set_assigned_role(/datum/job/villager) HL.job = "Ex-Priest" - - remove_verb(HL, /mob/living/carbon/human/proc/coronate_lord) - remove_verb(HL, /mob/living/carbon/human/proc/churchexcommunicate) - remove_verb(HL, /mob/living/carbon/human/proc/churchcurse) - remove_verb(HL, /mob/living/carbon/human/proc/churchannouncement) + HL.remove_priest_verbs() priest_job?.remove_spells(HL) GLOB.excommunicated_players |= HL.real_name HL.cleric?.excommunicate() @@ -1131,10 +1127,7 @@ var/datum/devotion/devotion = new holder() devotion.make_priest() devotion.grant_to(M) - add_verb(M, /mob/living/carbon/human/proc/coronate_lord) - add_verb(M, /mob/living/carbon/human/proc/churchexcommunicate) - add_verb(M, /mob/living/carbon/human/proc/churchcurse) - add_verb(M, /mob/living/carbon/human/proc/churchannouncement) + M.give_priest_verbs() removeomen(OMEN_NOPRIEST) priority_announce("Astrata has anointed [M.real_name] as the new head of the Church of the Ten!", title = "Astrata Shines!", sound = 'sound/misc/bell.ogg') diff --git a/code/modules/events/god_intervention/schism.dm b/code/modules/events/god_intervention/schism.dm index 417ff56483a..2b8bedc182c 100644 --- a/code/modules/events/god_intervention/schism.dm +++ b/code/modules/events/god_intervention/schism.dm @@ -181,9 +181,7 @@ GLOBAL_LIST_EMPTY(tennite_schisms) START_PROCESSING(SSprocessing, C) add_verb(selected_priest, /mob/living/carbon/human/proc/devotionreport) add_verb(selected_priest, /mob/living/carbon/human/proc/clericpray) - add_verb(selected_priest, /mob/living/carbon/human/proc/churchexcommunicate) - add_verb(selected_priest, /mob/living/carbon/human/proc/churchcurse) - add_verb(selected_priest, /mob/living/carbon/human/proc/churchannouncement) + selected_priest.give_priest_verbs(coronate = FALSE, penance = FALSE) priority_announce("[challenger.name] has selected [selected_priest.real_name] as a new [male ? "Vice Priest" : "Vice Priestess"]! Power sharing begins!", "[male ? "Vice Priest" : "Vice Priestess"] rises", 'sound/magic/inspire_02.ogg') diff --git a/code/modules/jobs/job_types/church/priest.dm b/code/modules/jobs/job_types/church/priest.dm index e8d9bb980ed..5deb89781bd 100644 --- a/code/modules/jobs/job_types/church/priest.dm +++ b/code/modules/jobs/job_types/church/priest.dm @@ -62,11 +62,7 @@ spawned.adjust_skillrank(/datum/skill/combat/polearms, 1, TRUE) spawned.adjust_skillrank(/datum/skill/magic/holy, 1, TRUE) - add_verb(spawned, /mob/living/carbon/human/proc/coronate_lord) - add_verb(spawned, /mob/living/carbon/human/proc/churchexcommunicate) - add_verb(spawned, /mob/living/carbon/human/proc/churchcurse) - add_verb(spawned, /mob/living/carbon/human/proc/churchannouncement) - add_verb(spawned, list(/mob/living/carbon/human/proc/absolve_penance_verb, /mob/living/carbon/human/proc/assign_penance_verb)) + spawned.give_priest_verbs() spawned.virginity = TRUE @@ -235,3 +231,21 @@ return FALSE priority_announce("[inputty]", title = "The [get_role_title()] Speaks", sound = 'sound/misc/bell.ogg') src.log_talk("[TIMETOTEXT4LOGS] [inputty]", LOG_SAY, tag="Priest announcement") + +/// Helper for giving priest verbs, and whether that should include coronation or penance verbs. +/mob/living/carbon/human/proc/give_priest_verbs(coronate = TRUE, penance = TRUE) + add_verb(src, /mob/living/carbon/human/proc/churchexcommunicate) + add_verb(src, /mob/living/carbon/human/proc/churchcurse) + add_verb(src, /mob/living/carbon/human/proc/churchannouncement) + if(coronate) + add_verb(src, /mob/living/carbon/human/proc/coronate_lord) + if(penance) + add_verb(src, list(/mob/living/carbon/human/proc/absolve_penance_verb, /mob/living/carbon/human/proc/assign_penance_verb)) + +/// Helper for removing priest verbs +/mob/living/carbon/human/proc/remove_priest_verbs() + remove_verb(src, /mob/living/carbon/human/proc/churchexcommunicate) + remove_verb(src, /mob/living/carbon/human/proc/churchcurse) + remove_verb(src, /mob/living/carbon/human/proc/churchannouncement) + remove_verb(src, /mob/living/carbon/human/proc/coronate_lord) + remove_verb(src, list(/mob/living/carbon/human/proc/absolve_penance_verb, /mob/living/carbon/human/proc/assign_penance_verb)) From ff6e1ec474a193d27ec7f577af0e472a0c917bfc Mon Sep 17 00:00:00 2001 From: forest2001 Date: Wed, 18 Feb 2026 15:53:38 +0000 Subject: [PATCH 13/20] temp lore primer content --- strings/rt/Lore_Primer.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/strings/rt/Lore_Primer.txt b/strings/rt/Lore_Primer.txt index 1f0c06c7494..71edaddd206 100644 --- a/strings/rt/Lore_Primer.txt +++ b/strings/rt/Lore_Primer.txt @@ -230,6 +230,19 @@ While it's not required reading, leadership roles may find this information usef The time of Psydon has passed, The Ten are righteous. Necra leads us to salvation.

+

+ Divine Centrism +
+ Equal, and perhaps confused, worship of The Ten. +

+ Only the Templaric Order can truly claim to serve the pantheon in a unified manner, and even then it is typically only the Grandmasters of the Order who do so with the blessings of the gods. +

+ A common stance for youths who are too young or uninformed to truly devote themselves to a sole pantheon, it is the duty of The Church to guide them to choose and profess themselves to a sole patron god. +

+ For an adult not in direct service of the pantheon to profess themselves with such faith is a slight upon the gods. They should be shamed, educated, and brought to the light of a sole patron. Astrata turns her gaze away from such indecisiveness. +

+
+
Astrata
From c65ad3f52d1592bc3c6c96448f6e54dcca69de8c Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 19 Feb 2026 19:57:47 +0000 Subject: [PATCH 14/20] Back to Ravox. --- code/__DEFINES/storytellers.dm | 1 + code/datums/faith/_devotion.dm | 7 +++++++ code/datums/faith/devotion_subtypes.dm | 8 +------- code/modules/jobs/job_types/church/gmtemplar.dm | 6 +++--- code/modules/mob/living/stats.dm | 2 ++ code/modules/spells/spell_types/pointed/avert.dm | 1 + strings/rt/Lore_Primer.txt | 2 -- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/storytellers.dm b/code/__DEFINES/storytellers.dm index e5f40927ca4..b46c4831e8d 100644 --- a/code/__DEFINES/storytellers.dm +++ b/code/__DEFINES/storytellers.dm @@ -222,6 +222,7 @@ // Devotion Classes #define DEVOTION_CLASS_PRIEST "Priest" +#define DEVOTION_CLASS_GRANDMASTER "Grandmaster" #define DEVOTION_CLASS_TEMPLAR "Templar" #define DEVOTION_CLASS_ACOLYTE "Acolyte" #define DEVOTION_CLASS_ABSOLVER "Absolver" diff --git a/code/datums/faith/_devotion.dm b/code/datums/faith/_devotion.dm index 7227b69df5a..a32ad89d398 100644 --- a/code/datums/faith/_devotion.dm +++ b/code/datums/faith/_devotion.dm @@ -154,6 +154,13 @@ ) devotion_class = DEVOTION_CLASS_PRIEST +/datum/devotion/proc/make_gmtemplar() + devotion = 50 + max_devotion = CLERIC_REQ_3 + progression = CLERIC_REQ_1 + max_progression = CLERIC_REQ_2 + devotion_class = DEVOTION_CLASS_GRANDMASTER + /datum/devotion/proc/make_templar() devotion = 50 max_devotion = CLERIC_REQ_3 diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index c2c0596a0cd..08cb4f5d367 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -1,12 +1,7 @@ /datum/devotion/divine/centrist traits = list(TRAIT_DIVINE_SERVANT) -/datum/devotion/divine/centrist/make_templar() - devotion = 50 - max_devotion = CLERIC_REQ_3 - progression = CLERIC_REQ_1 - max_progression = CLERIC_REQ_2 - +/datum/devotion/divine/make_gmtemplar() miracles = list( CLERIC_T0 = /datum/action/cooldown/spell/healing, CLERIC_T1 = /datum/action/cooldown/spell/avert/templar, @@ -15,7 +10,6 @@ viable_tasks = list( /datum/devotion_task/astrata_purge, ) - devotion_class = DEVOTION_CLASS_TEMPLAR /datum/devotion/divine/astrata miracles = list( diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index dfc2cbbce16..5f36390031b 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -13,7 +13,7 @@ cmode_music = 'sound/music/cmode/church/CombatRavox.ogg' allowed_races = RACES_PLAYER_NONDISCRIMINATED - allowed_patrons = list(/datum/patron/divine/centrist) + allowed_patrons = list(/datum/patron/divine/ravox) outfit = /datum/outfit/gmtemplar give_bank_account = 0 @@ -62,7 +62,7 @@ var/holder = spawned.patron?.devotion_holder if(holder) var/datum/devotion/devotion = new holder() - devotion.make_templar() + devotion.make_gmtemplar() devotion.grant_to(spawned) var/static/list/selectableweapon = list( @@ -101,7 +101,7 @@ belt = /obj/item/storage/belt/leather/black ring = /obj/item/clothing/ring/silver/rontz gloves = /obj/item/clothing/gloves/plate/silver - wrists = /obj/item/clothing/neck/psycross/silver/divine + wrists = /obj/item/clothing/neck/psycross/silver/divine/ravox diff --git a/code/modules/mob/living/stats.dm b/code/modules/mob/living/stats.dm index 21888f5e558..7141c572c49 100644 --- a/code/modules/mob/living/stats.dm +++ b/code/modules/mob/living/stats.dm @@ -74,6 +74,8 @@ switch(stored_cleric_class) if(DEVOTION_CLASS_PRIEST) devotion.make_priest() + if(DEVOTION_CLASS_GRANDMASTER) + devotion.make_gmtemplar() if(DEVOTION_CLASS_TEMPLAR) devotion.make_templar() if(DEVOTION_CLASS_ACOLYTE) diff --git a/code/modules/spells/spell_types/pointed/avert.dm b/code/modules/spells/spell_types/pointed/avert.dm index daa4ece99e0..01089ed031e 100644 --- a/code/modules/spells/spell_types/pointed/avert.dm +++ b/code/modules/spells/spell_types/pointed/avert.dm @@ -31,6 +31,7 @@ /datum/action/cooldown/spell/avert/templar name = "Divine Grace" + invocation = "May The Ten grace you with time!" required_items = list(/obj/item/clothing/neck/psycross/silver/divine) /datum/action/cooldown/spell/avert/is_valid_target(atom/cast_on) diff --git a/strings/rt/Lore_Primer.txt b/strings/rt/Lore_Primer.txt index 71edaddd206..fbac88854ce 100644 --- a/strings/rt/Lore_Primer.txt +++ b/strings/rt/Lore_Primer.txt @@ -235,8 +235,6 @@ While it's not required reading, leadership roles may find this information usef
Equal, and perhaps confused, worship of The Ten.

- Only the Templaric Order can truly claim to serve the pantheon in a unified manner, and even then it is typically only the Grandmasters of the Order who do so with the blessings of the gods. -

A common stance for youths who are too young or uninformed to truly devote themselves to a sole pantheon, it is the duty of The Church to guide them to choose and profess themselves to a sole patron god.

For an adult not in direct service of the pantheon to profess themselves with such faith is a slight upon the gods. They should be shamed, educated, and brought to the light of a sole patron. Astrata turns her gaze away from such indecisiveness. From abf141b32e68b0ead6e6e1a9d2107642279bf308 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Thu, 19 Feb 2026 22:53:57 +0000 Subject: [PATCH 15/20] shield work --- code/datums/faith/_devotion.dm | 8 +- code/datums/faith/devotion_subtypes.dm | 2 + .../jobs/job_types/church/gmtemplar.dm | 2 +- .../pointed/status/divine_shield.dm | 89 +++++++++++++++++++ vanderlin.dme | 1 + 5 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 code/modules/spells/spell_types/pointed/status/divine_shield.dm diff --git a/code/datums/faith/_devotion.dm b/code/datums/faith/_devotion.dm index a32ad89d398..3046f82787e 100644 --- a/code/datums/faith/_devotion.dm +++ b/code/datums/faith/_devotion.dm @@ -155,10 +155,10 @@ devotion_class = DEVOTION_CLASS_PRIEST /datum/devotion/proc/make_gmtemplar() - devotion = 50 - max_devotion = CLERIC_REQ_3 - progression = CLERIC_REQ_1 - max_progression = CLERIC_REQ_2 + devotion = 150 + max_devotion = 350 + progression = CLERIC_REQ_3 + max_progression = CLERIC_REQ_3 devotion_class = DEVOTION_CLASS_GRANDMASTER /datum/devotion/proc/make_templar() diff --git a/code/datums/faith/devotion_subtypes.dm b/code/datums/faith/devotion_subtypes.dm index 08cb4f5d367..0ec8deb1b78 100644 --- a/code/datums/faith/devotion_subtypes.dm +++ b/code/datums/faith/devotion_subtypes.dm @@ -2,10 +2,12 @@ traits = list(TRAIT_DIVINE_SERVANT) /datum/devotion/divine/make_gmtemplar() + . = ..() miracles = list( CLERIC_T0 = /datum/action/cooldown/spell/healing, CLERIC_T1 = /datum/action/cooldown/spell/avert/templar, CLERIC_T2 = /datum/action/cooldown/spell/enchantment/holy_flame, + CLERIC_T3 = /datum/action/cooldown/spell/status/divine_shield, ) viable_tasks = list( /datum/devotion_task/astrata_purge, diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 5f36390031b..1df6a4c3670 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -67,7 +67,7 @@ var/static/list/selectableweapon = list( "Longsword" = /obj/item/weapon/sword/long/grandmaster, - "Spear" = /obj/item/weapon/polearm/spear/grandmaster, + "Trident" = /obj/item/weapon/polearm/spear/grandmaster, "Axe" = /obj/item/weapon/greataxe/steel/grandmaster, "Mace" = /obj/item/weapon/mace/goden/steel/grandmaster, ) diff --git a/code/modules/spells/spell_types/pointed/status/divine_shield.dm b/code/modules/spells/spell_types/pointed/status/divine_shield.dm new file mode 100644 index 00000000000..e2d5ce43722 --- /dev/null +++ b/code/modules/spells/spell_types/pointed/status/divine_shield.dm @@ -0,0 +1,89 @@ +/datum/action/cooldown/spell/status/divine_shield + name = "Divine Shield" + desc = "Protect the target from harm, taking their suffering unto yourself." + button_icon_state = "regression" + sound = 'sound/magic/holyshield.ogg' + charge_sound = 'sound/magic/holycharging.ogg' + + cast_range = 3 + spell_type = SPELL_MIRACLE + antimagic_flags = MAGIC_RESISTANCE_HOLY + associated_skill = /datum/skill/magic/holy + required_items = list(/obj/item/clothing/neck/psycross/silver/divine) + + self_cast_possible = FALSE + + charge_required = TRUE + charge_time = 3 SECONDS + cooldown_time = 6 MINUTES + + invocation = "May The Ten protect you!" + invocation_type = INVOCATION_SHOUT + + spell_cost = 100 + + status_effect = /datum/status_effect/buff/divine_shield + +/datum/action/cooldown/spell/status/divine_shield/before_cast(mob/living/cast_on) + . = ..() + extra_args = list(owner) + +/datum/status_effect/buff/divine_shield + id = "divine_shield" + alert_type = /atom/movable/screen/alert/status_effect/buff/divine_shield + duration = 2 MINUTES + effectedstats = list(STATKEY_CON = 3) + var/static/mutable_appearance/shielded = mutable_appearance('icons/effects/effects.dmi', "shieldsparkles") + var/mob/living/carbon/protector_mob + COOLDOWN_DECLARE(message_cooldown) + +/datum/status_effect/buff/divine_shield/on_creation(mob/living/new_owner, duration_override, mob/living/protector) + if(!protector) + qdel(src) + return FALSE + + protector_mob = protector + protector_mob.apply_status_effect(arglist(list(/datum/status_effect/debuff/divine_shield, duration))) + return ..() + +/datum/status_effect/buff/divine_shield/on_apply() + . = ..() + var/mob/living/target = owner + target.add_overlay(shielded) + target.AddElement(/datum/element/relay_attackers) + RegisterSignal(target, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(upon_attacked)) + +/datum/status_effect/buff/divine_shield/on_remove() + . = ..() + var/mob/living/target = owner + target.cut_overlay(shielded) + target.RemoveElement(/datum/element/relay_attackers) + UnregisterSignal(target, COMSIG_ATOM_WAS_ATTACKED) + +/datum/status_effect/buff/divine_shield/proc/upon_attacked(mob/living/attacked, mob/living/carbon/human/attacker, damage) + SIGNAL_HANDLER + protector_mob.apply_damage(damage, BRUTE, forced = TRUE) + owner.heal_overall_damage(damage, damage)//Currently the closest option I have, I can't find a way to relay damage but also not take the damage. + + if(COOLDOWN_FINISHED(src, message_cooldown)) + to_chat(protector_mob, SPAN_GOD_RAVOX("Your divine shield reflects damage to you from [owner.real_name].")) + to_chat(owner, SPAN_GOD_RAVOX("Your divine shield reflects damage from you to [protector_mob.real_name].")) + COOLDOWN_START(src, message_cooldown, 5 SECONDS) + +/atom/movable/screen/alert/status_effect/buff/divine_shield + name = "Divine Shield" + desc = span_nicegreen("I am shielded by divine energies.") + icon_state = "buff" + + +/datum/status_effect/debuff/divine_shield + id = "divine_shield_r" + alert_type = /atom/movable/screen/alert/status_effect/debuff/divine_shield + duration = 2 MINUTES + effectedstats = list(STATKEY_CON = -2) + +/atom/movable/screen/alert/status_effect/debuff/divine_shield + name = "Divine Shield" + desc = span_red("I am channeling divine power to shield my target.") + icon_state = "debuff" + alert_group = ALERT_DEBUFF diff --git a/vanderlin.dme b/vanderlin.dme index e3d6bf83f11..551192eaa98 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3554,6 +3554,7 @@ #include "code\modules\spells\spell_types\pointed\projectile\unholy_grasp.dm" #include "code\modules\spells\spell_types\pointed\status\_status.dm" #include "code\modules\spells\spell_types\pointed\status\booming_blade.dm" +#include "code\modules\spells\spell_types\pointed\status\divine_shield.dm" #include "code\modules\spells\spell_types\pointed\status\fortune_wheel.dm" #include "code\modules\spells\spell_types\pointed\status\frostbite.dm" #include "code\modules\spells\spell_types\pointed\status\guidance.dm" From 707c1a5bb6ec2796be7462bbc4fce09112b2b88e Mon Sep 17 00:00:00 2001 From: forest2001 Date: Fri, 20 Feb 2026 10:01:36 +0000 Subject: [PATCH 16/20] shield function --- .../jobs/job_types/church/gmtemplar.dm | 2 +- .../pointed/status/divine_shield.dm | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/code/modules/jobs/job_types/church/gmtemplar.dm b/code/modules/jobs/job_types/church/gmtemplar.dm index 1df6a4c3670..5853bb6b7f9 100644 --- a/code/modules/jobs/job_types/church/gmtemplar.dm +++ b/code/modules/jobs/job_types/church/gmtemplar.dm @@ -2,7 +2,7 @@ title = "Grandmaster Templar" tutorial = "At the upper echelon of the Templaric order sit the Grandmasters, five who sit in the Head in Kingsfield, and one appointed to each sanctified Tennite Church across the realm.\ They are masters of Ravox's arts and beholden to no will except Justice and Astrata, the latter of which they know the overbearing presence of all too well. \ - Despite her cruel authority, the Grandmasters of the Order dare not rise up against the Astratan priests and their sect of guardians at the Head of the Order, lest they be excommunicated." + Despite her cruel authority, the Ravoxian Grandmasters of the Order dare not rise up against the Astratan priests and their sect of guardians at the Head of the Order, lest they be excommunicated." department_flag = CHURCHMEN job_flags = (JOB_ANNOUNCE_ARRIVAL | JOB_SHOW_IN_CREDITS | JOB_EQUIP_RANK | JOB_NEW_PLAYER_JOINABLE) display_order = JDO_GMTEMPLAR diff --git a/code/modules/spells/spell_types/pointed/status/divine_shield.dm b/code/modules/spells/spell_types/pointed/status/divine_shield.dm index e2d5ce43722..c4c86cdf066 100644 --- a/code/modules/spells/spell_types/pointed/status/divine_shield.dm +++ b/code/modules/spells/spell_types/pointed/status/divine_shield.dm @@ -1,3 +1,7 @@ +#define SHIELD_DURATION 1 MINUTES +/// Duration + (3 * Duration) +#define SHIELD_COOLDOWN ((3 * SHIELD_DURATION) + SHIELD_DURATION) + /datum/action/cooldown/spell/status/divine_shield name = "Divine Shield" desc = "Protect the target from harm, taking their suffering unto yourself." @@ -15,7 +19,7 @@ charge_required = TRUE charge_time = 3 SECONDS - cooldown_time = 6 MINUTES + cooldown_time = SHIELD_COOLDOWN invocation = "May The Ten protect you!" invocation_type = INVOCATION_SHOUT @@ -31,11 +35,12 @@ /datum/status_effect/buff/divine_shield id = "divine_shield" alert_type = /atom/movable/screen/alert/status_effect/buff/divine_shield - duration = 2 MINUTES + duration = SHIELD_DURATION effectedstats = list(STATKEY_CON = 3) var/static/mutable_appearance/shielded = mutable_appearance('icons/effects/effects.dmi', "shieldsparkles") var/mob/living/carbon/protector_mob COOLDOWN_DECLARE(message_cooldown) + var/changed_godmode = FALSE /datum/status_effect/buff/divine_shield/on_creation(mob/living/new_owner, duration_override, mob/living/protector) if(!protector) @@ -52,13 +57,19 @@ target.add_overlay(shielded) target.AddElement(/datum/element/relay_attackers) RegisterSignal(target, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(upon_attacked)) + if(target.status_flags & GODMODE) + return + changed_godmode = TRUE + target.status_flags |= GODMODE /datum/status_effect/buff/divine_shield/on_remove() - . = ..() var/mob/living/target = owner target.cut_overlay(shielded) target.RemoveElement(/datum/element/relay_attackers) UnregisterSignal(target, COMSIG_ATOM_WAS_ATTACKED) + if(changed_godmode) + owner.status_flags &= ~GODMODE + return ..() /datum/status_effect/buff/divine_shield/proc/upon_attacked(mob/living/attacked, mob/living/carbon/human/attacker, damage) SIGNAL_HANDLER @@ -79,7 +90,7 @@ /datum/status_effect/debuff/divine_shield id = "divine_shield_r" alert_type = /atom/movable/screen/alert/status_effect/debuff/divine_shield - duration = 2 MINUTES + duration = SHIELD_DURATION effectedstats = list(STATKEY_CON = -2) /atom/movable/screen/alert/status_effect/debuff/divine_shield @@ -87,3 +98,7 @@ desc = span_red("I am channeling divine power to shield my target.") icon_state = "debuff" alert_group = ALERT_DEBUFF + + +#undef SHIELD_DURATION +#undef SHIELD_COOLDOWN From 853ddac34cba836c2b93696cc7a5f338ff0b7dba Mon Sep 17 00:00:00 2001 From: forest2001 Date: Fri, 20 Feb 2026 10:17:17 +0000 Subject: [PATCH 17/20] devotion stat entry --- code/modules/mob/living/carbon/human/human.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index db26e4d5eef..8910ce129db 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -186,6 +186,8 @@ . = ..() if(clan) . += "VITAE: [bloodpool]" + if(cleric) + . += "Devotion: [cleric.devotion]/[cleric.max_devotion]" /mob/living/carbon/human/show_inv(mob/user) user.set_machine(src) From a10af07ab47774d5cf37a17c1f5fb941d2056431 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sat, 21 Feb 2026 21:47:08 +0000 Subject: [PATCH 18/20] vitae --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8910ce129db..a9e8fb149d4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -185,7 +185,7 @@ /mob/living/carbon/human/get_status_tab_items() . = ..() if(clan) - . += "VITAE: [bloodpool]" + . += "VITAE: [round(bloodpool)]/[maxbloodpool]" if(cleric) . += "Devotion: [cleric.devotion]/[cleric.max_devotion]" From a5242525d888572ad32c95365e0d40882c560b21 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Sun, 22 Feb 2026 15:22:48 +0000 Subject: [PATCH 19/20] bugfix --- code/modules/jobs/job_types/garrison/royal_knight.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/jobs/job_types/garrison/royal_knight.dm b/code/modules/jobs/job_types/garrison/royal_knight.dm index 25c6a82b518..ef485d7740c 100644 --- a/code/modules/jobs/job_types/garrison/royal_knight.dm +++ b/code/modules/jobs/job_types/garrison/royal_knight.dm @@ -157,6 +157,8 @@ ) var/helmetchoice = spawned.select_equippable(player_client, selectablehelmets, message = "Choose Your Helmet", title = "ROYAL KNIGHT") + if(!helmetchoice) + return /datum/job/advclass/royalknight/steam title = "Steam Knight" From b8d49bf271a9fa5366a3a8839d9b62439f7a3307 Mon Sep 17 00:00:00 2001 From: forest2001 Date: Tue, 24 Feb 2026 04:10:10 +0000 Subject: [PATCH 20/20] rounding --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a9e8fb149d4..dc5f7de967a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -187,7 +187,7 @@ if(clan) . += "VITAE: [round(bloodpool)]/[maxbloodpool]" if(cleric) - . += "Devotion: [cleric.devotion]/[cleric.max_devotion]" + . += "Devotion: [round(cleric.devotion)]/[cleric.max_devotion]" /mob/living/carbon/human/show_inv(mob/user) user.set_machine(src)