diff --git a/code/__DEFINES/roguetown.dm b/code/__DEFINES/roguetown.dm index 85380ceaa1..3e3b56d85a 100644 --- a/code/__DEFINES/roguetown.dm +++ b/code/__DEFINES/roguetown.dm @@ -1,9 +1,9 @@ //used in various places -#define ALL_RACES_LIST list("human", "dwarf", "elf", "tiefling", "aasimar") +#define ALL_RACES_LIST list("human", "dwarf", "elf", "tiefling", "aasimar") #define ALL_RACES_LIST_NAMES list("Humen", "Half-Elf", "Dark Elf", "Elf", "Dwarf","Tiefling", "Aasimar") -#define ALL_PATRON_NAMES_LIST list("Astrata", "Noc", "Xylix", "Eora", "Malum", "Dendor", "Abyssor", "Necra", "Pestra", "Malum", "Ravox") +#define ALL_CLERIC_PATRONS list(/datum/patron/divine/astrata, /datum/patron/divine/noc, /datum/patron/divine/dendor, /datum/patron/divine/necra, /datum/patron/divine/pestra) #define PLATEHIT "plate" #define CHAINHIT "chain" @@ -42,40 +42,6 @@ GLOBAL_LIST_INIT(wolf_suffixes, list("Fang", "Claw", "Stalker", "Prowler", "Roar #define FAMILY_PARTIAL 2 #define FAMILY_FULL 3 -#define FAITH_NONE 0 -#define FAITH_PSYDON 1 -#define FAITH_ELF 2 -#define FAITH_DWARF 3 -#define FAITH_SPIDER 4 -#define FAITH_ZIZO 5 - -/proc/get_faith_name(faith) - switch(faith) - if(FAITH_PSYDON) - return "Father-Son" - if(FAITH_ELF) - return "Elfish Pantheon" - if(FAITH_DWARF) - return "Dwarfish Paganism" - if(FAITH_SPIDER) - return "Spider Queen" - if(FAITH_ZIZO) - return "Zizo" - -/proc/get_faith_desc(faith) - switch(faith) - if(FAITH_PSYDON) - return "You believe in the Father-Son. Only through His sun SAVIOR PSYDON may you join His golden kingdom in death." - if(FAITH_ELF) - return "You believe in the FAERIE PANTHEON, may Brother Courage and Sister Pride protect you from the wrath of the Trickster." - if(FAITH_DWARF) - return "By rock, you believe in DWARFISH PAGANISM! Only by respecting the gods of soil and water may you survive this week." - if(FAITH_SPIDER) - return "You pledged your faith in the SPIDER QUEEN, a godlike creature who ruled the Under-World before her untimely death." - if(FAITH_ZIZO) - return "You are a disgusting slave of ZIZO! Let the scum of creation die in obscene ways as your beautiful evil turns the world dark and miserable." - - GLOBAL_LIST_EMPTY(sunlights) GLOBAL_LIST_EMPTY(job_respawn_delays) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 77f138c76e..037721c91a 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -73,10 +73,21 @@ for(var/i in 0 to 20) GLOB.mouseicons_human += file("icons/effects/mousemice/swang/[i * 5].dmi") + // Faiths + for(var/path in subtypesof(/datum/faith)) + var/datum/faith/faith = new path() + GLOB.faithlist[path] = faith + if(faith.preference_accessible) + GLOB.preference_faiths[path] = faith + // Patron Gods - for(var/gods in subtypesof(/datum/patrongods)) - var/datum/patrongods/A = new gods() - GLOB.patronlist[A] = gods + for(var/path in subtypesof(/datum/patron)) + var/datum/patron/patron = new path() + GLOB.patronlist[path] = patron + LAZYINITLIST(GLOB.patrons_by_faith[patron.associated_faith]) + GLOB.patrons_by_faith[patron.associated_faith][path] = patron + if(patron.preference_accessible) + GLOB.preference_patrons[path] = patron //creates every subtype of prototype (excluding prototype) and adds it to list L. //if no list/L is provided, one is created. diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index b8e4da2133..12fff50e1d 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -127,13 +127,13 @@ SUBSYSTEM_DEF(job) if(flag && (!(flag in player.client.prefs.be_special))) JobDebug("FOC flag failed, Player: [player], Flag: [flag], ") continue - if(player.mind && job.title in player.mind.restricted_roles) + if(player.mind && (job.title in player.mind.restricted_roles)) JobDebug("FOC incompatible with antagonist role, Player: [player]") continue - if(!(player.client.prefs.pref_species.name in job.allowed_races)) + if(length(job.allowed_races) && !(player.client.prefs.pref_species.name in job.allowed_races)) JobDebug("FOC incompatible with species, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue - if(!(player.client.prefs.selected_patron.name in job.allowed_patrons)) + if(length(job.allowed_patrons) && !(player.client.prefs.selected_patron.type in job.allowed_patrons)) JobDebug("FOC incompatible with patron, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue if(job.plevel_req > player.client.patreonlevel()) @@ -141,10 +141,10 @@ SUBSYSTEM_DEF(job) continue if(get_playerquality(player.ckey) < job.min_pq) continue - if(!(player.client.prefs.gender in job.allowed_sexes)) + if(length(job.allowed_sexes) && !(player.client.prefs.gender in job.allowed_sexes)) JobDebug("FOC incompatible with sex, Player: [player], Job: [job.title]") continue - if(!(player.client.prefs.age in job.allowed_ages)) + if(length(job.allowed_ages) && !(player.client.prefs.age in job.allowed_ages)) JobDebug("FOC incompatible with age, Player: [player], Job: [job.title], Age: [player.client.prefs.age]") continue if(check_blacklist(player.client.ckey) && !job.bypass_jobban) @@ -200,11 +200,11 @@ SUBSYSTEM_DEF(job) JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue - if(!(player.client.prefs.pref_species.name in job.allowed_races)) + if(length(job.allowed_races) && !(player.client.prefs.pref_species.name in job.allowed_races)) JobDebug("GRJ incompatible with species, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue - if(!(player.client.prefs.selected_patron.name in job.allowed_patrons)) + if(length(job.allowed_patrons) && !(player.client.prefs.selected_patron.type in job.allowed_patrons)) JobDebug("GRJ incompatible with patron, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue @@ -215,11 +215,11 @@ SUBSYSTEM_DEF(job) if(get_playerquality(player.ckey) < job.min_pq) continue - if(!(player.client.prefs.age in job.allowed_ages)) + if(length(job.allowed_ages) && !(player.client.prefs.age in job.allowed_ages)) JobDebug("GRJ incompatible with age, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue - if(!(player.client.prefs.gender in job.allowed_sexes)) + if(length(job.allowed_sexes) && !(player.client.prefs.gender in job.allowed_sexes)) JobDebug("GRJ incompatible with sex, Player: [player], Job: [job.title]") continue @@ -439,11 +439,11 @@ SUBSYSTEM_DEF(job) JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue - if(!(player.client.prefs.pref_species.name in job.allowed_races)) + if(length(job.allowed_races) && !(player.client.prefs.pref_species.name in job.allowed_races)) JobDebug("DO incompatible with species, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue - if(!(player.client.prefs.selected_patron.name in job.allowed_patrons)) + if(length(job.allowed_patrons) && !(player.client.prefs.selected_patron.type in job.allowed_patrons)) JobDebug("DO incompatible with patron, Player: [player], Job: [job.title], Race: [player.client.prefs.pref_species.name]") continue @@ -465,11 +465,11 @@ SUBSYSTEM_DEF(job) if(job.whitelist_req && (!player.client.whitelisted())) continue - if(!(player.client.prefs.age in job.allowed_ages)) + if(length(job.allowed_ages) && !(player.client.prefs.age in job.allowed_ages)) JobDebug("DO incompatible with age, Player: [player], Job: [job.title]") continue - if(!(player.client.prefs.gender in job.allowed_sexes)) + if(length(job.allowed_sexes) && !(player.client.prefs.gender in job.allowed_sexes)) JobDebug("DO incompatible with gender preference, Player: [player], Job: [job.title]") continue @@ -527,10 +527,10 @@ SUBSYSTEM_DEF(job) if(player.mind && job.title in player.mind.restricted_roles) continue - if(!(player.client.prefs.pref_species.name in job.allowed_races)) + if(length(job.allowed_races) && !(player.client.prefs.pref_species.name in job.allowed_races)) continue - if(!(player.client.prefs.selected_patron.name in job.allowed_patrons)) + if(length(job.allowed_patrons) && !(player.client.prefs.selected_patron.type in job.allowed_patrons)) continue if(job.plevel_req > player.client.patreonlevel()) @@ -549,10 +549,10 @@ SUBSYSTEM_DEF(job) if(job.whitelist_req && (!player.client.whitelisted())) continue - if(!(player.client.prefs.age in job.allowed_ages)) + if(length(job.allowed_ages) && !(player.client.prefs.age in job.allowed_ages)) continue - if(!(player.client.prefs.gender in job.allowed_sexes)) + if(length(job.allowed_sexes) && !(player.client.prefs.gender in job.allowed_sexes)) continue if(!job.special_job_check(player)) diff --git a/code/controllers/subsystem/rogue/devotion.dm b/code/controllers/subsystem/rogue/devotion.dm index cf2bad2ee9..ef31bdfe05 100644 --- a/code/controllers/subsystem/rogue/devotion.dm +++ b/code/controllers/subsystem/rogue/devotion.dm @@ -30,7 +30,7 @@ return FALSE /datum/devotion/cleric_holder/proc/update_devotion(dev_amt, prog_amt) - var/datum/patrongods/P = patron + var/datum/patron/P = patron devotion += dev_amt //Max devotion limit if(devotion > max_devotion) @@ -63,7 +63,7 @@ if(!H || !H.mind) return - var/datum/patrongods/A = H.PATRON + var/datum/patron/A = H.patron var/list/spelllist = list(A.t0, A.t1, A.t2, A.t3) for(var/spell_type in spelllist) if(!spell_type || H.mind.has_spell(spell_type)) @@ -76,7 +76,7 @@ if(!H || !H.mind) return - var/datum/patrongods/A = H.PATRON + var/datum/patron/A = H.patron var/list/spelllist = list(A.t0, A.t1) for(var/spell_type in spelllist) if(!spell_type || H.mind.has_spell(spell_type)) @@ -88,7 +88,7 @@ if(!H || !H.mind) return - var/datum/patrongods/A = H.PATRON + var/datum/patron/A = H.patron var/list/spelllist = list(/obj/effect/proc_holder/spell/targeted/churn, A.t0) for(var/spell_type in spelllist) if(!spell_type || H.mind.has_spell(spell_type)) @@ -123,7 +123,7 @@ var/datum/devotion/cleric_holder/C = src.cleric var/prayersesh = 0 - visible_message("[src] kneels their head in prayer to the Gods.", "I kneel my head in prayer to [PATRON]") + visible_message("[src] kneels their head in prayer to the Gods.", "I kneel my head in prayer to [patron.name]") for(var/i in 1 to 20) if(do_after(src, 30)) if(C.devotion >= C.max_devotion) diff --git a/code/datums/gods/_faith.dm b/code/datums/gods/_faith.dm new file mode 100644 index 0000000000..e358fade3a --- /dev/null +++ b/code/datums/gods/_faith.dm @@ -0,0 +1,13 @@ +GLOBAL_LIST_EMPTY(faithlist) + +GLOBAL_LIST_EMPTY(preference_faiths) + +/datum/faith + /// Name of the faith + var/name + /// Description of the faith + var/desc = "A faith that believes in the power of reporting this issue on GitHub - You shouldn't be seeing this, someone forgot to set the description for this faith." + /// Our "primary" patron god + var/datum/patron/godhead = /datum/patron + /// Whether or not this faith can be accessed in preferences + var/preference_accessible = TRUE \ No newline at end of file diff --git a/code/datums/gods/_patron.dm b/code/datums/gods/_patron.dm new file mode 100644 index 0000000000..b821b85d98 --- /dev/null +++ b/code/datums/gods/_patron.dm @@ -0,0 +1,34 @@ +#define CLERIC_SPELLS "Cleric" +#define PRIEST_SPELLS "Priest" + +GLOBAL_LIST_EMPTY(patronlist) +GLOBAL_LIST_EMPTY(patrons_by_faith) +GLOBAL_LIST_EMPTY(preference_patrons) + +/datum/patron + /// Name of the god + var/name + /// Domain of the god, such as earth, fire, water, murder etc + var/domain = "Bad coding practices" + /// Description of the god + var/desc = "A god that ordains you to report this on GitHub - You shouldn't be seeing this, someone forgot to set the description of this patron." + /// String that represents who worships this guy + var/worshippers = "Shitty coders" + ///String that represents the god's flaws + var/flaws = "This spagetti code" + ///Strong that represents what this god views as sins + var/sins = "Codersocks" + /// Faith this god belongs to + var/datum/faith/associated_faith = /datum/faith + /// Whether or not we are accessible in preferences + var/preference_accessible = TRUE + /// Some gods have related confessions, if they're evil and such + var/list/confess_lines + /// Tier 0 spell + var/t0 + /// Tier 1 spell + var/t1 + /// Tier 2 spell + var/t2 + /// Final tier spell + var/t3 \ No newline at end of file diff --git a/code/datums/gods/faiths/atheism.dm b/code/datums/gods/faiths/atheism.dm new file mode 100644 index 0000000000..889330e491 --- /dev/null +++ b/code/datums/gods/faiths/atheism.dm @@ -0,0 +1,5 @@ +/datum/faith/godless + name = "Godless" //Redditor religion + desc = "Although gods obviously exist in this world, you refuse to bow down to them! You are completely godless." + godhead = /datum/patron/godless + preference_accessible = FALSE \ No newline at end of file diff --git a/code/datums/gods/faiths/divine_pantheon.dm b/code/datums/gods/faiths/divine_pantheon.dm new file mode 100644 index 0000000000..e11e816266 --- /dev/null +++ b/code/datums/gods/faiths/divine_pantheon.dm @@ -0,0 +1,4 @@ +/datum/faith/divine_pantheon + name = "Divine Pantheon" + desc = "The most accepted religion in Rockhill. May Almighty Psydon and His ten children protect us from Zizo!" + godhead = /datum/patron/divine/astrata \ No newline at end of file diff --git a/code/datums/gods/faiths/inhumen_pantheon.dm b/code/datums/gods/faiths/inhumen_pantheon.dm new file mode 100644 index 0000000000..8e1b46c026 --- /dev/null +++ b/code/datums/gods/faiths/inhumen_pantheon.dm @@ -0,0 +1,8 @@ +/datum/faith/inhumen_pantheon + name = "Inhumen Pantheon" + desc = "The nine are FALSE GODS.\n\ + They keep us trapped in tartarus and choke out our divine light, \ + but only though FULL BELIEF in the divinity of men and women can we escape and reach the TRUE spiritual realm.\n\ + The godhead smiles upon us as we defile Psydon and become the divinities we were always meant to be." + godhead = /datum/patron/inhumen/zizo + preference_accessible = FALSE \ No newline at end of file diff --git a/code/datums/gods/patrons/atheism.dm b/code/datums/gods/patrons/atheism.dm new file mode 100644 index 0000000000..e014027fa9 --- /dev/null +++ b/code/datums/gods/patrons/atheism.dm @@ -0,0 +1,12 @@ +/datum/patron/godless + name = "Science" + domain = "Ontological Reality" + desc = "No gods or kings, only man! Gods exist but you give them the finger." + worshippers = "Madmen, some dwarves, the occasional mathematician" + associated_faith = /datum/faith/godless + preference_accessible = FALSE + confess_lines = list( + "No Gods, No Masters! The faith is FALSE!", + "A man chooses, a slave obeys - I will be free from the Gods!", + "The old ways WILL CRUMBLE, the gods are UNTRUE!" + ) \ No newline at end of file diff --git a/code/datums/gods/patrons.dm b/code/datums/gods/patrons/divine_pantheon.dm similarity index 57% rename from code/datums/gods/patrons.dm rename to code/datums/gods/patrons/divine_pantheon.dm index d01caa1b15..20bc86e398 100644 --- a/code/datums/gods/patrons.dm +++ b/code/datums/gods/patrons/divine_pantheon.dm @@ -1,113 +1,97 @@ -GLOBAL_LIST_EMPTY(patronlist) - -#define CLERIC_SPELLS "Cleric" -#define PRIEST_SPELLS "Priest" - -/datum/patrongods - var/name - var/domain - var/summary - var/flaws - var/worshippers - var/sins - var/t0 - var/t1 - var/t2 - var/t3 +/datum/patron/divine + name = null + associated_faith = /datum/faith/divine_pantheon + t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal -/datum/patrongods/astrata +/datum/patron/divine/astrata name = "Astrata" domain = "Goddess of Order, the Sun Queen" - summary = "The Firstborn of Psydon, twin of Noc, gifted man the Sun as her divine gift." - flaws= "Tyrannical, Fury, Uncompromising" + desc = "The Firstborn of Psydon, twin of Noc, gifted man the Sun as her divine gift." + flaws = "Tyrannical, Fury, Uncompromising" worshippers = "Nobles, Zealots, Commoners" sins = "Betrayal, Sloth, Witchcraft" - t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal/ + t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal t1 = /obj/effect/proc_holder/spell/invoked/sacred_flame_rogue t2 = /obj/effect/proc_holder/spell/invoked/heal t3 = /obj/effect/proc_holder/spell/invoked/revive -/datum/patrongods/noc +/datum/patron/divine/noc name = "Noc" domain = "God of Knowledge, the Moon Prince" - summary = "The Firstborn of Psydon, twin of Astrala, gifted man divine knowledge." - flaws= "Resentful, Vindictive, Haughty" + desc = "The Firstborn of Psydon, twin of Astrata, gifted man divine knowledge." + flaws = "Resentful, Vindictive, Haughty" worshippers = "Magic Practitioners, Scholars, Scribes" sins = "Ignorance, Burning books, Carnal desire" - // ............ FORCES .................. -/datum/patrongods/abyssor +/datum/patron/divine/dendor + name = "Dendor" + domain = "Force of Nature and Beasts" + desc = "The Primordial Son of Psydon, patron of beasts and the wood. Gone mad with time." + flaws = "Madness, Rebellious, Disorderly" + worshippers = "Druids, Beasts, Madmen" + sins = "Deforestation, Overhunting, Disrespecting nature" + t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal + t1 = /obj/effect/proc_holder/spell/targeted/blesscrop + t2 = /obj/effect/proc_holder/spell/targeted/beasttame + t3 = null + +/datum/patron/divine/abyssor name = "Abyssor" domain = "Force of Seas and Storms" - summary = "The World Whale, one of the three primordial forces." + desc = "The World Whale, one of the three primordial forces." flaws= "Reckless, Stubborn, Destructive" worshippers = "Men of the Sea and Sky, Horrid sea-creechers" sins = "Fear, Hubris, Trying to tame water and storms" -/datum/patrongods/necra /// SUMMARY AND FLASWS AND SINS +/datum/patron/divine/necra name = "Necra" domain = "Force of Death and Decay" - summary = "By some worshipped as the Undermaiden, death cares little for the living." - flaws= "Unchanging, Apathetic, Strict" + desc = "The Veiled Lady, a feared but respected God who leads the dead." + flaws = "Unchanging, Apathetic, Strict" worshippers = " The Dead, Gravekeepers and Mourners" sins = "Undeath" t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal t1 = /obj/effect/proc_holder/spell/targeted/burialrite t2 = /obj/effect/proc_holder/spell/targeted/churn -/datum/patrongods/dendor - name = "Dendor" - domain = "Force of Nature and Beasts" - summary = "The Primordial Son, patron of beasts and the wood. Gone mad with time." - flaws= "Madness, Rebellious, Disorderly" - worshippers = "Druids, Beasts, Madmen" - sins = "Deforestation, Overhunting, Disrespecting nature" - t0 = /obj/effect/proc_holder/spell/invoked/lesser_heal - t1 = /obj/effect/proc_holder/spell/targeted/blesscrop - t2 = /obj/effect/proc_holder/spell/targeted/beasttame - t3 = null - - // ............ SAINTS .................. -/datum/patrongods/ravox +/datum/patron/divine/ravox name = "Ravox" domain = "Saint of Warfare, Struggle and Chivalry" - summary = "The strong-arm of the Pantheon, he watches man from afar." - flaws= "Careless, Confrontational, Proud" + desc = "The strong-arm of the Pantheon, he watches man from afar." + flaws = "Careless, Confrontational, Proud" worshippers = "Warriors, Sellswords & the Ambitious" sins = "Cowardice, Cruelty, Stagnation" -/datum/patrongods/xylix +/datum/patron/divine/xylix name = "Xylix" domain = "Saint of Trickery, Freedom and Inspiration" - summary = "Mortal turned trickster and shadow of the Pantheon." - flaws= "Annoying, Liar, Deceitful" + desc = "Mortal turned trickster and shadow of the Pantheon." + flaws = "Annoying, Liar, Deceitful" worshippers = "Cheats, Artists, the Hopeless" sins = "Boredom, Predictability, Routine" -/datum/patrongods/pestra +/datum/patron/divine/pestra name = "Pestra" domain = "Saint of Disease, Alchemy, and Prophecy" - summary = "A mortal turned saint by her own brew." - flaws= "Disrespectful, Irresponsible, Drunkard" + desc = "A mortal turned saint by her own brew." + flaws = "Disrespectful, Irresponsible, Drunkard" worshippers = "Warlocks, The Sick and Alchemists" sins = "´Curing´ abnormalities, Refusing to help the misfortunates, Groveling" -/datum/patrongods/malum +/datum/patron/divine/malum name = "Malum" domain = "Saint of Toil, Value and Craft" - summary = "Father of the dwarves, master of the craft." - flaws= "Obsessive, Repetetive, Greedy" + desc = "Father of the dwarves, master of the craft." + flaws = "Obsessive, Repetetive, Greedy" worshippers = "Smiths, Miners, Artists." sins = "Cheating, Shoddy work, Suicide" -/datum/patrongods/eora +/datum/patron/divine/eora name = "Eora" domain = "Saint of the Love, Life and Beauty" - summary = "Blind love for all, without a shred of hate in her heart" + desc = "Blind love for all, without a shred of hate in her heart" flaws= "Naive, Compulsive, Ignorant" worshippers = "Lovers, Harlots, Doting Grandparents" - sins = "Sadism, Celibacy, Ruining beauty" - - + sins = "Sadism, Celibacy, Ruining beauty" \ No newline at end of file diff --git a/code/datums/gods/patrons/inhumen_pantheon.dm b/code/datums/gods/patrons/inhumen_pantheon.dm new file mode 100644 index 0000000000..13986a20f0 --- /dev/null +++ b/code/datums/gods/patrons/inhumen_pantheon.dm @@ -0,0 +1,47 @@ +/datum/patron/inhumen + name = null + associated_faith = /datum/faith/inhumen_pantheon + confess_lines = list( + "PSYDON IS THE DEMIURGE!", + "THE NINE ARE WORTHLESS COWARDS!", + "THE NINE ARE DECEIVERS!" + ) + +/datum/patron/inhumen/zizo + name = "Zizo" + domain = "The Eternal Beast of Chaos" + desc = "He who shall not be named, the supreme force and true creator of reality!" + flaws = "ZIZOZIZOZIZO" + worshippers = "Apostates, Anarchists, Psychopaths" + sins = "None; Zizo Embraces All" + confess_lines = list( + "PRAISE ZIZO!", + "LONG LIVE ZIZO!", + "ZIZO WITH TRIUMPH!", + ) + +/datum/patron/inhumen/graggar + name = "Graggar" + domain = "God of Murder, Cruelty & Hate" + desc = "The Dark Sun, Graggar is the father of Orcs & Goblins and demon prince of Zizo." + flaws = "Rage, Hatred, Bloodthirst" + worshippers = "Beasts, Murderers, Sadists" + sins = "Compassion, Frailty, Servility" + confess_lines = list( + "GRAGGAR IS THE BEAST I WORSHIP!", + "GRAGGAR WILL RAVAGE YOU!", + "GRAGGAR BRINGS UNHOLY DESTRUCTION!" + ) + +/datum/patron/inhumen/matthios + name = "Matthios" + domain = "God of Robbery, Mugging and Redistribution of Wealth" + desc = "Man who stole a spark of the divine, becoming a powerful yet shunned Saint. Gifted his lessons of thievery and subversion to his devoted followers." + flaws = "Pride, Greed, Arbitrary" + worshippers = "Outlaws, Robbers and Downtrodden Peasantry" + sins = "Clumsiness, Stupidity, Humility" + confess_lines = list( + "Matthios steal my pain, and take me away from these HEATHENS!", + "Matthios is my true lord, he WILL steal me away from YOU!", + "I am a devoted of Matthios, I will sooner martyr than REPENT!", + ) \ No newline at end of file diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 26ad88b45e..ec8edf7b13 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -31,6 +31,10 @@ if(isliving(mover) && mover.z == z) // var/throwdir = get_dir(src, mover) var/mob/living/L = mover + + if(istype(L.patron, /datum/patron/divine/dendor)) //Dendor kneestinger immunity + return TRUE + if(L.electrocute_act(30, src)) L.consider_ambush() if(L.throwing) @@ -44,9 +48,10 @@ if(isliving(AM)) var/mob/living/L = AM if(L.z == z) - if(L.electrocute_act(30, src)) - L.emote("painscream") - L.consider_ambush() + if(!(istype(L.patron, /datum/patron/divine/dendor))) + if(L.electrocute_act(30, src)) + L.emote("painscream") + L.consider_ambush() . = ..() /obj/structure/glowshroom/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/rogueitems/petard.dm b/code/game/objects/items/rogueitems/petard.dm new file mode 100644 index 0000000000..11e736c77d --- /dev/null +++ b/code/game/objects/items/rogueitems/petard.dm @@ -0,0 +1,156 @@ +/obj/item/grenade/petard + name = "Petard" + desc = "A small metallic cap atop of a wooden box, a fuze running out from the top of the metallic cap." + icon_state = "petard0" + item_state = "petard" + lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' + item_flags = NOBLUDGEON + flags_1 = NONE + det_time = rand(5, 20) + display_timer = FALSE + wlength = WLENGTH_NORMAL + w_class = WEIGHT_CLASS_BULKY + var/atom/target = null + var/mutable_appearance/plastic_overlay + var/directional = FALSE + var/aim_dir = NORTH + var/boom_sizes = list(0, 0, 3) + var/full_damage_on_mobs = FALSE + +/obj/item/grenade/petard/Initialize() + . = ..() + plastic_overlay = mutable_appearance(icon, "[item_state]2", HIGH_OBJ_LAYER) + wires = new /datum/wires/explosive/c4(src) + +/obj/item/grenade/c4/Destroy() + qdel(wires) + wires = null + target = null + ..() + +/obj/item/grenade/c4/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + to_chat(user, "The wire panel can be accessed without a screwdriver.") + else if(is_wire_tool(I)) + wires.interact(user) + else + return ..() + +/obj/item/grenade/c4/prime() + if(QDELETED(src)) + return + var/turf/location + if(target) + if(!QDELETED(target)) + location = get_turf(target) + target.cut_overlay(plastic_overlay, TRUE) + if(!ismob(target) || full_damage_on_mobs) + target.ex_act(EXPLODE_HEAVY, target) + else + location = get_turf(src) + if(location) + if(directional && target && target.density) + var/turf/T = get_step(location, aim_dir) + explosion(get_step(T, aim_dir), boom_sizes[1], boom_sizes[2], boom_sizes[3]) + else + explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3]) + qdel(src) + +//assembly stuff +/obj/item/grenade/c4/receive_signal() + prime() + +/obj/item/grenade/c4/attack_self(mob/user) + var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num|null + + if (isnull(newtime)) + return + + if(user.get_active_held_item() == src) + newtime = CLAMP(newtime, 10, 60000) + det_time = newtime + to_chat(user, "Timer set for [det_time] seconds.") + +/obj/item/grenade/c4/afterattack(atom/movable/AM, mob/user, flag) + . = ..() + aim_dir = get_dir(user,AM) + if(!flag) + return + + to_chat(user, "I start planting [src]. The timer is set to [det_time]...") + + if(do_after(user, 30, target = AM)) + if(!user.temporarilyRemoveItemFromInventory(src)) + return + target = AM + + message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse") + log_game("[key_name(user)] planted [name] on [target.name] at [AREACOORD(user)] with a [det_time] second fuse") + + notify_ghosts("[user] has planted \a [src] on [target] with a [det_time] second fuse!", source = target, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Explosive Planted") + + moveToNullspace() //Yep + + if(istype(AM, /obj/item)) //your crappy throwing star can't fly so good with a giant brick of c4 on it. + var/obj/item/I = AM + I.throw_speed = max(1, (I.throw_speed - 3)) + I.throw_range = max(1, (I.throw_range - 3)) + I.embedding = I.embedding.setRating(embed_chance = 0) + else if(istype(AM, /mob/living)) + plastic_overlay.layer = FLOAT_LAYER + + target.add_overlay(plastic_overlay) + to_chat(user, "I plant the bomb. Timer counting down from [det_time].") + addtimer(CALLBACK(src, PROC_REF(prime)), det_time*10) + +/obj/item/grenade/c4/proc/shout_syndicate_crap(mob/M) + if(!M) + return + var/message_say = "FOR NO RAISIN!" + if(M.mind) + var/datum/mind/UM = M.mind + if(UM.has_antag_datum(/datum/antagonist/nukeop) || UM.has_antag_datum(/datum/antagonist/traitor)) + message_say = "FOR THE SYNDICATE!" + else if(UM.has_antag_datum(/datum/antagonist/changeling)) + message_say = "FOR THE HIVE!" + else if(UM.has_antag_datum(/datum/antagonist/cult)) + message_say = "FOR NAR'SIE!" + else if(UM.has_antag_datum(/datum/antagonist/rev)) + message_say = "VIVA LA REVOLUTION!" + else if(UM.has_antag_datum(/datum/antagonist/brother)) + message_say = "FOR MY BROTHER!" + else if(UM.has_antag_datum(/datum/antagonist/ninja)) + message_say = "FOR THE SPIDER CLAN!" + else if(UM.has_antag_datum(/datum/antagonist/fugitive)) + message_say = "FOR FREEDOM!" + else if(UM.has_antag_datum(/datum/antagonist/ashwalker)) + message_say = "I HAVE NO IDEA WHAT THIS THING DOES!" + else if(UM.has_antag_datum(/datum/antagonist/ert)) + message_say = "FOR NANOTRASEN!" + else if(UM.has_antag_datum(/datum/antagonist/pirate)) + message_say = "FOR ME MATEYS!" + else if(UM.has_antag_datum(/datum/antagonist/wizard)) + message_say = "FOR THE FEDERATION!" + M.say(message_say, forced="C4 suicide") + +/obj/item/grenade/c4/suicide_act(mob/user) + message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_VERBOSEJMP(user)]") + log_game("[key_name(user)] suicided with [src] at [AREACOORD(user)]") + user.visible_message("[user] activates [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") + shout_syndicate_crap(user) + explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes + user.gib(1, 1) + qdel(src) + +// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of. +// C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces. +// Intended to replace C4 for nukeops, and to be a randomdrop in surplus/random traitor purchases. + +/obj/item/grenade/c4/x4 + name = "X-4 charge" + desc = "" + icon_state = "plasticx40" + item_state = "plasticx4" + directional = TRUE + boom_sizes = list(0, 2, 5) \ No newline at end of file diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 1776e51ec9..4b662cbe5f 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -24,6 +24,9 @@ var/font_color = "purple" var/prayer_type = "PRAYER" var/deity + if(ishuman(src)) + var/mob/living/carbon/human/human_user = src + deity = human_user.patron.name if(usr.job == "Chaplain") cross.icon_state = "kingyellow" font_color = "blue" diff --git a/code/modules/antagonists/roguetown/villain/assassin.dm b/code/modules/antagonists/roguetown/villain/assassin.dm index 83669a558f..d9de023169 100644 --- a/code/modules/antagonists/roguetown/villain/assassin.dm +++ b/code/modules/antagonists/roguetown/villain/assassin.dm @@ -7,7 +7,12 @@ antag_hud_type = ANTAG_HUD_TRAITOR antag_hud_name = "villain" var/special_role = ROLE_VILLAIN - confess_lines = list("I gave the lady no time to squeal.", "I am down on whores.", "I shant quit ripping them.") + confess_lines = list( + "I gave them no time to squeal.", + "I shant quit ripping them.", + "They deserve to be put at my blade.", + "Do what thou wilt shall be the whole of the law.", + ) /datum/antagonist/villain/on_gain() owner.special_role = "Maniac" diff --git a/code/modules/antagonists/roguetown/villain/bandit.dm b/code/modules/antagonists/roguetown/villain/bandit.dm index b64c735b1e..2b6eb28b04 100644 --- a/code/modules/antagonists/roguetown/villain/bandit.dm +++ b/code/modules/antagonists/roguetown/villain/bandit.dm @@ -31,6 +31,7 @@ ADD_TRAIT(H, TRAIT_SEEPRICES, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_VILLAIN, TRAIT_GENERIC) + H.patron = GLOB.patronlist[/datum/patron/inhumen/matthios] /datum/antagonist/bandit/greet() to_chat(owner.current, "I am a BANDIT!") diff --git a/code/modules/antagonists/roguetown/villain/peasantrebel.dm b/code/modules/antagonists/roguetown/villain/peasantrebel.dm index bd42b26fe4..18c4fbac43 100644 --- a/code/modules/antagonists/roguetown/villain/peasantrebel.dm +++ b/code/modules/antagonists/roguetown/villain/peasantrebel.dm @@ -8,10 +8,15 @@ job_rank = ROLE_PREBEL antag_hud_type = ANTAG_HUD_REV antag_hud_name = "rev" - var/datum/team/prebels/rev_team show_in_roundend = FALSE - confess_lines = list("VIVA!", "DEATH TO THE NOBLES!") + confess_lines = list( + "VIVA!", + "DEATH TO THE NOBLES!", + "STICK IT TO THE MAN!", + "NO GODS, NO MASTERS!", + ) increase_votepwr = FALSE + var/datum/team/prebels/rev_team /datum/antagonist/prebel/examine_friendorfoe(datum/antagonist/examined_datum,mob/examiner,mob/examined) if(istype(examined_datum, /datum/antagonist/prebel/head)) diff --git a/code/modules/antagonists/roguetown/villain/vampirelord.dm b/code/modules/antagonists/roguetown/villain/vampirelord.dm index c8677467be..7e5edb35e8 100644 --- a/code/modules/antagonists/roguetown/villain/vampirelord.dm +++ b/code/modules/antagonists/roguetown/villain/vampirelord.dm @@ -108,6 +108,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) H.set_species(/datum/species/elf/snow) //setspecies randomizes body H.after_creation() H.equipOutfit(/datum/outfit/job/roguetown/vamplord) + H.patron = GLOB.patronlist[/datum/patron/inhumen/zizo] return TRUE @@ -775,12 +776,12 @@ GLOBAL_LIST_EMPTY(vampire_objects) sunstolen = FALSE priority_announce("The Sun is torn from the sky!", "Terrible Omen", 'sound/misc/astratascream.ogg') addomen("sunsteal") - for(var/mob/living/carbon/human/W in GLOB.human_list) - var/datum/patrongods/patron = W.client.prefs.selected_patron - if(patron.name == "Astrata") - if(!W.mind.antag_datums) - to_chat(W, "You feel the pain of your Patron!") - W.emote_scream() + for(var/mob/living/carbon/human/astrater in GLOB.human_list) + if(!istype(astrater.patron, /datum/patron/divine/astrata) || !length(astrater.mind?.antag_datums)) + continue + to_chat(astrater, "You feel the pain of [astrater.patron.name]!") + astrater.emote_scream() + if(user.mind.special_role == "Vampire Spawn") to_chat(user, "I don't have the power to use this!") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a120c9b55b..31783ee811 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -82,7 +82,8 @@ GLOBAL_LIST_EMPTY(chosen_names) var/voice_color = "a0a0a0" var/detail_color = "000" var/datum/species/pref_species = new /datum/species/human/northern() //Mutant race - var/datum/patrongods/selected_patron = new /datum/patrongods/astrata() + var/datum/patron/selected_patron + var/static/datum/patron/default_patron = /datum/patron/divine/astrata var/list/features = list("mcolor" = "FFF", "ethcolor" = "9c3030", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "moth_wings" = "Plain", "moth_markings" = "None") var/list/randomise = list(RANDOM_UNDERWEAR = TRUE, RANDOM_UNDERWEAR_COLOR = TRUE, RANDOM_UNDERSHIRT = TRUE, RANDOM_SOCKS = TRUE, RANDOM_BACKPACK = TRUE, RANDOM_JUMPSUIT_STYLE = FALSE, RANDOM_HAIRSTYLE = TRUE, RANDOM_HAIR_COLOR = TRUE, RANDOM_FACIAL_HAIRSTYLE = TRUE, RANDOM_FACIAL_HAIR_COLOR = TRUE, RANDOM_SKIN_TONE = TRUE, RANDOM_EYE_COLOR = TRUE) var/list/friendlyGenders = list("Male" = "male", "Female" = "female") @@ -135,7 +136,6 @@ GLOBAL_LIST_EMPTY(chosen_names) var/datum/charflaw/charflaw var/family = FAMILY_NONE - var/faith = FAITH_PSYDON var/crt = FALSE @@ -165,6 +165,8 @@ GLOBAL_LIST_EMPTY(chosen_names) charflaw = pick(GLOB.character_flaws) charflaw = GLOB.character_flaws[charflaw] charflaw = new charflaw() + if(!selected_patron) + selected_patron = GLOB.patronlist[default_patron] key_bindings = deepCopyList(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds and update their movement keys C.update_movement_keys() real_name = pref_species.random_name(gender,1) @@ -322,8 +324,9 @@ GLOBAL_LIST_EMPTY(chosen_names) // dat += "Random Name
" dat += "Flaw: [charflaw]
" - dat += "Faith: The Divine Pantheon
" - dat += "Patron: [selected_patron]
" + var/datum/faith/selected_faith = GLOB.faithlist[selected_patron?.associated_faith] + dat += "Faith: [selected_faith?.name || "FUCK!"]
" + dat += "Patron: [selected_patron?.name || "FUCK!"]
" // dat += "Family: Unknown
" // Disabling until its working dat += "Dominance: [domhand == 1 ? "Left-handed" : "Right-handed"]
" @@ -1035,16 +1038,16 @@ GLOBAL_LIST_EMPTY(chosen_names) if(get_playerquality(user.ckey) < job.min_pq) HTML += "[used_name] (Min PQ: [job.min_pq]) " continue - if(!(user.client.prefs.age in job.allowed_ages)) + if(length(job.allowed_ages) && !(user.client.prefs.age in job.allowed_ages)) HTML += "[used_name] " continue - if(!(user.client.prefs.pref_species.name in job.allowed_races)) + if(length(job.allowed_races) && !(user.client.prefs.pref_species.name in job.allowed_races)) HTML += "[used_name] " continue - if(!(user.client.prefs.selected_patron.name in job.allowed_patrons)) + if(length(job.allowed_patrons) && !(user.client.prefs.selected_patron.type in job.allowed_patrons)) HTML += "[used_name] " continue - if(!(user.client.prefs.gender in job.allowed_sexes)) + if(length(job.allowed_sexes) && !(user.client.prefs.gender in job.allowed_sexes)) HTML += "[used_name] " continue // if((job_preferences[SSjob.overflow_role] == JP_LOW) && (rank != SSjob.overflow_role) && !is_banned_from(user.ckey, SSjob.overflow_role)) @@ -1724,13 +1727,34 @@ Slots: [job.spawn_positions] ResetJobs() to_chat(user, "Classes reset.") + if("faith") + var/list/faiths_named = list() + for(var/path as anything in GLOB.preference_faiths) + var/datum/faith/faith = GLOB.faithlist[path] + if(!faith.name) + continue + faiths_named[faith.name] = faith + var/faith_input = input(user, "Choose your character's faith", "Faith") as null|anything in faiths_named + if(faith_input) + var/datum/faith/faith = faiths_named[faith_input] + to_chat(user, "Faith: [faith.name]") + to_chat(user, "Background: [faith.desc]") + selected_patron = GLOB.patronlist[faith.godhead] || GLOB.patronlist[default_patron] + if("patron") - var/datum/patrongods/god_input = input(user, "Choose your character's patron god", "Patron God") as null|anything in GLOB.patronlist + var/list/patrons_named = list() + for(var/path as anything in GLOB.patrons_by_faith[selected_patron?.associated_faith || initial(default_patron.associated_faith)]) + var/datum/patron/patron = GLOB.patronlist[path] + if(!patron.name) + continue + patrons_named[patron.name] = patron + var/datum/faith/current_faith = GLOB.faithlist[selected_patron?.associated_faith] || GLOB.faithlist[initial(default_patron.associated_faith)] + var/god_input = input(user, "Choose your character's patron god", "[current_faith.name]") as null|anything in patrons_named if(god_input) - selected_patron = god_input - to_chat(user, "Patron: [selected_patron]") + selected_patron = patrons_named[god_input] + to_chat(user, "Patron: [selected_patron]") to_chat(user, "Domain: [selected_patron.domain]") - to_chat(user, "Background: [selected_patron.summary]") + to_chat(user, "Background: [selected_patron.desc]") to_chat(user, "Flawed aspects: [selected_patron.flaws]") to_chat(user, "Likely Worshippers: [selected_patron.worshippers]") to_chat(user, "Considers these to be Sins: [selected_patron.sins]") @@ -2121,9 +2145,6 @@ Slots: [job.spawn_positions] var/list/loly = list("Not yet.","Work in progress.","Don't click me.","Stop clicking this.","Nope.","Be patient.","Sooner or later.") to_chat(user, "[pick(loly)]") return - if("faith") - to_chat(user, "You are a worshipper of the gods of the Divine Pantheon. May the Ten protect us from Zizo!") - return if("alignment") /// to_chat(user, "Alignment is how you communicate to the Game Masters if your character follows a certain set of behavior restrictions. This allows you to ") var/new_alignment = input(user, "Alignment is how you communicate to the Game Masters and other players the intent of your character. Your character will be under less administrative scrutiny for evil actions if you choose evil alignments, but you will experience subtle disadvantages. Alignment is overwritten for antagonists.", "Alignment") as null|anything in ALL_ALIGNMENTS_LIST @@ -2427,7 +2448,7 @@ Slots: [job.spawn_positions] // character.accessory = accessory character.detail = detail character.socks = socks - character.PATRON = selected_patron + character.patron = selected_patron character.backpack = backpack character.jumpsuit_style = jumpsuit_style diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index dbe4f03404..90ad6691e5 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -299,37 +299,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["key_bindings"], key_bindings) return TRUE -/datum/preferences/proc/load_character(slot) - if(!path) - return FALSE - if(!fexists(path)) - return FALSE - var/savefile/S = new /savefile(path) - if(!S) - return FALSE - S.cd = "/" - if(!slot) - slot = default_slot - slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - WRITE_FILE(S["default_slot"] , slot) - - S.cd = "/character[slot]" - var/needs_update = savefile_needs_update(S) - if(needs_update == -2) //fatal, can't load any data - return FALSE - - //Species +/datum/preferences/proc/_load_species(S) var/species_name - S["species"] >> species_name + S["species"] >> species_name if(species_name) var/newtype = GLOB.species_list[species_name] if(newtype) pref_species = new newtype - - +/datum/preferences/proc/_load_flaw(S) var/charflaw_type S["charflaw"] >> charflaw_type if(charflaw_type) @@ -339,13 +317,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car charflaw = GLOB.character_flaws[charflaw] charflaw = new charflaw() - if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") - WRITE_FILE(S["features["mcolor"]"] , "#FFF") - - if(!S["feature_ethcolor"] || S["feature_ethcolor"] == "#000") - WRITE_FILE(S["feature_ethcolor"] , "9c3030") - - //Character +/datum/preferences/proc/_load_appearence(S) S["real_name"] >> real_name S["gender"] >> gender S["domhand"] >> domhand @@ -382,12 +354,47 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] - var/patron_name - S["selected_patron"] >> patron_name - if(patron_name) - var/newtype = GLOB.patronlist[patron_name] - if(newtype) - selected_patron = new newtype +/datum/preferences/proc/load_character(slot) + if(!path) + return FALSE + if(!fexists(path)) + return FALSE + var/savefile/S = new /savefile(path) + if(!S) + return FALSE + S.cd = "/" + if(!slot) + slot = default_slot + slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) + if(slot != default_slot) + default_slot = slot + WRITE_FILE(S["default_slot"] , slot) + + S.cd = "/character[slot]" + var/needs_update = savefile_needs_update(S) + if(needs_update == -2) //fatal, can't load any data + return FALSE + + //Species + _load_species(S) + + _load_flaw(S) + + if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") + WRITE_FILE(S["features["mcolor"]"] , "#FFF") + + if(!S["feature_ethcolor"] || S["feature_ethcolor"] == "#000") + WRITE_FILE(S["feature_ethcolor"] , "9c3030") + + //Character + _load_appearence(S) + + var/patron_typepath + S["selected_patron"] >> patron_typepath + if(patron_typepath) + selected_patron = GLOB.patronlist[patron_typepath] + if(!selected_patron) //failsafe + selected_patron = GLOB.patronlist[default_patron] // S["selected_patron"] >> selected_patron @@ -554,7 +561,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["all_quirks"] , all_quirks) //Patron - WRITE_FILE(S["selected_patron"] , selected_patron.name) + WRITE_FILE(S["selected_patron"] , selected_patron.type) return TRUE diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 91a101e8f5..f6b823044d 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -67,8 +67,8 @@ //allowed sex/race for picking var/list/allowed_sexes = list(MALE,FEMALE) - var/list/allowed_races = ALL_RACES_LIST_NAMES - var/list/allowed_patrons = ALL_PATRON_NAMES_LIST + var/list/allowed_races + var/list/allowed_patrons var/list/allowed_ages = ALL_AGES_LIST /// Innate skill levels unlocked at roundstart. Format is list(/datum/skill/foo = SKILL_EXP_NOVICE) with exp as an integer or as per code/_DEFINES/skills.dm diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/_advclass.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/_advclass.dm index daf48a8525..ecd8b2770b 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/_advclass.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/_advclass.dm @@ -2,7 +2,7 @@ var/name var/outfit var/tutorial = "Choose me!" - var/list/allowed_sexes = list("male","female") + var/list/allowed_sexes var/list/allowed_races = list("Humen", "Humen", "Elf", @@ -11,8 +11,8 @@ "Dwarf", "Dwarf" ) - var/list/allowed_patrons = ALL_PATRON_NAMES_LIST - var/list/allowed_ages = ALL_AGES_LIST + var/list/allowed_patrons + var/list/allowed_ages var/pickprob = 100 var/maximum_possible_slots = 999 var/total_slots_occupied = 0 diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/barbarian.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/barbarian.dm index 4dcd475997..715e2b0eb8 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/barbarian.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/barbarian.dm @@ -8,6 +8,8 @@ outfit = /datum/outfit/job/roguetown/adventurer/barbarian category_tags = list(CTAG_ADVENTURER) +/datum/outfit/job/roguetown/adventurer/barbarian + allowed_patrons = list(/datum/patron/divine/ravox, /datum/patron/inhumen/graggar) /datum/outfit/job/roguetown/adventurer/barbarian/pre_equip(mob/living/carbon/human/H) ..() diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/cleric.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/cleric.dm index 62d84618fb..a6814336e8 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/cleric.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/cleric.dm @@ -16,27 +16,14 @@ category_tags = list(CTAG_ADVENTURER) maximum_possible_slots = 5 +/datum/outfit/job/roguetown/adventurer/cleric + allowed_patrons = ALL_CLERIC_PATRONS + /datum/outfit/job/roguetown/adventurer/cleric/pre_equip(mob/living/carbon/human/H) ..() H.virginity = TRUE - var/allowed_patrons = list("Astrata", "Dendor", "Necra") - - var/datum/patrongods/ourpatron - if(istype(H.PATRON, /datum/patrongods)) - ourpatron = H.PATRON - - if(!ourpatron || !(ourpatron.name in allowed_patrons)) - - var/list/datum/patrongods/possiblegods = list() - for(var/datum/patrongods/P in GLOB.patronlist) - if(P.name in allowed_patrons) - possiblegods |= P - - ourpatron = pick(possiblegods) - H.PATRON = ourpatron - to_chat(H, " My patron had not endorsed my practices in my younger years. I've since grown acustomed to [H.PATRON].") - switch(ourpatron.name) + switch(H.patron?.name) if("Astrata") neck = /obj/item/clothing/neck/roguetown/psicross/astrata if("Dendor") @@ -72,7 +59,7 @@ H.change_stat("endurance", 3) H.change_stat("speed", -1) ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) - var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.PATRON) + var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.patron) C.holder_mob = H C.grant_spells(H) H.verbs += list(/mob/living/carbon/human/proc/devotionreport, /mob/living/carbon/human/proc/clericpray) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/donator/templar.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/donator/templar.dm index 13afae57a1..abacb9ea26 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/donator/templar.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/donator/templar.dm @@ -54,7 +54,7 @@ H.dna.species.soundpack_m = new /datum/voicepack/male/knight() if(H.dna.species.id == "tiefling") cloak = /obj/item/clothing/cloak/tabard/crusader/tief - var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.PATRON) + var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.patron) C.holder_mob = H H.verbs += list(/mob/living/carbon/human/proc/devotionreport, /mob/living/carbon/human/proc/clericpray) H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/lesser_heal/) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm index 3fcf29481d..5de0973f69 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm @@ -15,6 +15,9 @@ category_tags = list(CTAG_ADVENTURER) maximum_possible_slots = 2 +/datum/outfit/job/roguetown/adventurer/mage + allowed_patrons = list(/datum/patron/divine/noc) + /datum/outfit/job/roguetown/adventurer/mage/pre_equip(mob/living/carbon/human/H) ..() head = /obj/item/clothing/head/roguetown/roguehood/mage diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/witchhunter.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/witchhunter.dm index d83fd39fee..4a224a8d7f 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/witchhunter.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/witchhunter.dm @@ -10,6 +10,9 @@ category_tags = list(CTAG_ADVENTURER) min_pq = 2 +/datum/outfit/job/roguetown/adventurer/puritan + allowed_patrons = ALL_CLERIC_PATRONS //Placeholder; decide what Gods they should really be worshiping. + /datum/outfit/job/roguetown/adventurer/puritan/pre_equip(mob/living/carbon/human/H) ..() shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/puritan diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/monk.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/monk.dm index 537a7673b3..f79d46f662 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/monk.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/pilgrim/monk.dm @@ -38,7 +38,6 @@ H.change_stat("intelligence", 1) H.change_stat("endurance", 2) H.change_stat("perception", -1) - ADD_TRAIT(H, TRAIT_DODGEEXPERT, TRAIT_GENERIC) - if(H.PATRON != /datum/patrongods/ravox) - H.PATRON = GLOB.patronlist["Ravox"] - to_chat(H, "My patron had not endorsed my practices in my younger years. I've since grown acustomed to [H.PATRON].") + if(H.patron != /datum/patron/divine/ravox) + H.patron = GLOB.patronlist["Ravox"] + to_chat(H, "My patron had not endorsed my practices in my younger years. I've since grown acustomed to [H.patron].") diff --git a/code/modules/jobs/job_types/roguetown/church/monk.dm b/code/modules/jobs/job_types/roguetown/church/monk.dm index c2f51df7f2..c839fea79b 100644 --- a/code/modules/jobs/job_types/roguetown/church/monk.dm +++ b/code/modules/jobs/job_types/roguetown/church/monk.dm @@ -15,7 +15,7 @@ "Aasimar" ) tutorial = "Chores, some more chores- Even more chores.. Oh how the life of a humble cleric is exhausting… You have faith, but even you know you gave up a life of adventure for that of the security in the Church. Assist the Priest in their daily tasks, maybe today will be the day something interesting happens." - allowed_patrons = list("Astrata", "Dendor", "Necra") + allowed_patrons = ALL_CLERIC_PATRONS outfit = /datum/outfit/job/roguetown/monk display_order = JDO_MONK @@ -28,7 +28,7 @@ /datum/outfit/job/roguetown/monk/pre_equip(mob/living/carbon/human/H) ..() - var/datum/patrongods/A = H.PATRON + var/datum/patron/A = H.patron H.virginity = TRUE switch(A.name) if("Astrata") @@ -69,7 +69,7 @@ H.change_stat("endurance", 1) H.change_stat("perception", -1) - var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.PATRON) + var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.patron) C.holder_mob = H H.verbs += list(/mob/living/carbon/human/proc/devotionreport, /mob/living/carbon/human/proc/clericpray) C.grant_spells(H) diff --git a/code/modules/jobs/job_types/roguetown/church/priest.dm b/code/modules/jobs/job_types/roguetown/church/priest.dm index 1fb35d2c96..5bc0baddf7 100644 --- a/code/modules/jobs/job_types/roguetown/church/priest.dm +++ b/code/modules/jobs/job_types/roguetown/church/priest.dm @@ -15,7 +15,7 @@ "Dwarf", "Aasimar" ) - allowed_patrons = list("Astrata") + allowed_patrons = list(/datum/patron/divine/astrata) tutorial = "The Divine is all that matters in a world of the immoral. The Weeping god left his children to rule over us mortals and you will preach their wisdom to any who still heed their will. The faithless are growing in number, it is up to you to shepard them to a God-Fearing future." whitelist_req = FALSE bypass_lastclass = TRUE @@ -56,7 +56,7 @@ H.change_stat("constitution", -2) H.change_stat("endurance", 1) H.change_stat("speed", -2) - var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.PATRON) // This creates the cleric holder used for devotion spells + var/datum/devotion/cleric_holder/C = new /datum/devotion/cleric_holder(H, H.patron) // This creates the cleric holder used for devotion spells C.holder_mob = H H.verbs += list(/mob/living/carbon/human/proc/devotionreport, /mob/living/carbon/human/proc/clericpray) C.grant_spells_priest(H) diff --git a/code/modules/jobs/job_types/roguetown/church/puritan.dm b/code/modules/jobs/job_types/roguetown/church/puritan.dm index 695a94b654..6a976e0cb8 100644 --- a/code/modules/jobs/job_types/roguetown/church/puritan.dm +++ b/code/modules/jobs/job_types/roguetown/church/puritan.dm @@ -117,18 +117,26 @@ /mob/living/carbon/human/proc/confess_sins(resist) if(!resist) - var/datum/mind/M = mind - if(M) - for(var/datum/antagonist/A in M.antag_datums) - if(A.confess_lines) - say(pick(A.confess_lines), spans = list("torture")) - return - say(pick("I DON'T KNOW!", - "STOP THE PAIN!!", - "I DON'T DESERVE THIS!", - "THE PAIN!", - "I HAVE NOTHING TO SAY...!", - "WHY ME?!"), spans = list("torture")) + var/list/confessions = list() + for(var/datum/antagonist/antag in mind?.antag_datums) + if(length(antag.confess_lines)) + confessions += antag.confess_lines + if(length(patron.confess_lines)) + confessions += patron.confess_lines + if(length(confessions)) + say(pick(confessions), spans = list("torture")) + return + + var/static/list/innocent_lines = list( + "I DON'T KNOW!", + "STOP THE PAIN!!", + "I DON'T DESERVE THIS!", + "THE PAIN!", + "I HAVE NOTHING TO SAY...!", + "WHY ME?!", + ) + say(pick(innocent_lines), spans = list("torture")) + /mob/living/carbon/human/proc/faith_test() set name = "FaithTest" diff --git a/code/modules/jobs/job_types/roguetown/nobility/magician.dm b/code/modules/jobs/job_types/roguetown/nobility/magician.dm index c66f0e3260..26f07e7eec 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/magician.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/magician.dm @@ -13,6 +13,7 @@ "Aasimar", ) allowed_sexes = list(MALE, FEMALE) + allowed_patrons = list(/datum/patron/divine/noc) spells = list(/obj/effect/proc_holder/spell/invoked/projectile/fireball/greater, /obj/effect/proc_holder/spell/invoked/projectile/fireball, /obj/effect/proc_holder/spell/aoe_turf/repulse, /obj/effect/proc_holder/spell/invoked/projectile/lightningbolt, /obj/effect/proc_holder/spell/invoked/projectile/fetch, /obj/effect/proc_holder/spell/targeted/ethereal_jaunt, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile, /obj/effect/proc_holder/spell/aoe_turf/knock) display_order = JDO_MAGICIAN tutorial = "Your creed is one dedicated to the conquering of the arcane arts and the constant thrill of knowledge. \ diff --git a/code/modules/jobs/job_types/roguetown/roguetown.dm b/code/modules/jobs/job_types/roguetown/roguetown.dm index 410924ef11..bbe4636fd1 100644 --- a/code/modules/jobs/job_types/roguetown/roguetown.dm +++ b/code/modules/jobs/job_types/roguetown/roguetown.dm @@ -34,9 +34,22 @@ backpack = null satchel = null duffelbag = null + /// List of patrons we are allowed to use + var/list/allowed_patrons + /// Default patron in case the patron is not allowed + var/datum/patron/default_patron /datum/outfit/job/roguetown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() + . = ..() + var/datum/patron/ourpatron = H.patron + if(!ourpatron || !(ourpatron.type in allowed_patrons)) + var/list/datum/patron/possiblegods = list() + for(var/god in GLOB.patronlist) + if(!(god in allowed_patrons)) + continue + possiblegods |= god + H.patron = GLOB.patronlist[default_patron] || pick(possiblegods) + to_chat(H, "[ourpatron] had not endorsed my practices in my younger years. I've since grown acustomed to [H.patron].") if(H.mind) if(H.gender == FEMALE) H.mind.adjust_skillrank(/datum/skill/craft/cooking, 1, TRUE) @@ -50,7 +63,7 @@ H.update_body() /datum/outfit/job/roguetown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - .=..() + . = ..() if(H.mind) if(H.ckey) if(check_crownlist(H.ckey)) diff --git a/code/modules/jobs/job_types/roguetown/serfs/archivist.dm b/code/modules/jobs/job_types/roguetown/serfs/archivist.dm index 8bb759e152..20d1b89cf7 100644 --- a/code/modules/jobs/job_types/roguetown/serfs/archivist.dm +++ b/code/modules/jobs/job_types/roguetown/serfs/archivist.dm @@ -16,7 +16,7 @@ "Aasimar" ) spells = list(/obj/effect/proc_holder/spell/invoked/projectile/fetch) - allowed_patrons = list("Noc") + allowed_patrons = list(/datum/patron/divine/noc) outfit = /datum/outfit/job/roguetown/archivist display_order = 19 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a427ea9d5d..ae4a82e117 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -522,7 +522,7 @@ stat("CON: \Roman [STACON]") stat("END: \Roman [STAEND]") stat("SPD: \Roman [STASPD]") - stat("PATRON: [PATRON]") + stat("PATRON: [patron]") /mob/living/carbon/Stat() ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 36d6ff7d20..3a32f0dd8b 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -115,8 +115,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) //in __DEFINES/mobs.dm, defaults to NONE, so people actually have to think about it var/changesource_flags = NONE - var/possible_faiths - // value for replacing skin tone/origin term var/alt_origin diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm index bc7d666234..c55d525c3f 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/dwarf/dwarfm.dm @@ -48,7 +48,6 @@ specstats = list("strength" = 1, "perception" = -2, "intelligence" = 0, "constitution" = 2, "endurance" = 2, "speed" = -2, "fortune" = 0) specstats_f = list("strength" = 1, "perception" = -2, "intelligence" = 1, "constitution" = 1, "endurance" = 1, "speed" = -1, "fortune" = 0) enflamed_icon = "widefire" - possible_faiths = list(FAITH_PSYDON, FAITH_DWARF) patreon_req = 0 /datum/species/dwarf/mountain/check_roundstart_eligible() diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfd.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfd.dm index 9bdab100ae..4592263b01 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfd.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfd.dm @@ -46,7 +46,6 @@ specstats = list("strength" = -1, "perception" = -1, "intelligence" = 1, "constitution" = 0, "endurance" = 1, "speed" = 2, "fortune" = 0) specstats_f = list("strength" = 0, "perception" = -1, "intelligence" = 2, "constitution" = 1, "endurance" = 0, "speed" = 1, "fortune" = 0) enflamed_icon = "widefire" - possible_faiths = list(FAITH_PSYDON, FAITH_ELF) patreon_req = 0 /datum/species/elf/dark/get_span_language(datum/language/message_language) diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfs.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfs.dm index 64564e0ecd..4a8a798432 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfs.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/elf/elfs.dm @@ -47,7 +47,6 @@ specstats = list("strength" = -1, "perception" = 1, "intelligence" = 1, "constitution" = 0, "endurance" = 0, "speed" = 2, "fortune" = 0) specstats_f = list("strength" = -1, "perception" = 1, "intelligence" = 2, "constitution" = -1, "endurance" = -1, "speed" = 3, "fortune" = 0) enflamed_icon = "widefire" - possible_faiths = list(FAITH_PSYDON, FAITH_ELF) patreon_req = 0 /datum/species/elf/snow/check_roundstart_eligible() diff --git a/code/modules/mob/living/carbon/human/species_types/roguetown/human/humen.dm b/code/modules/mob/living/carbon/human/species_types/roguetown/human/humen.dm index 042edd1955..758813764e 100644 --- a/code/modules/mob/living/carbon/human/species_types/roguetown/human/humen.dm +++ b/code/modules/mob/living/carbon/human/species_types/roguetown/human/humen.dm @@ -42,7 +42,6 @@ specstats = list("strength" = 0, "perception" = 0, "intelligence" = 0, "constitution" = 1, "endurance" = 1, "speed" = 0, "fortune" = 0) specstats_f = list("strength" = 0, "perception" = 0, "intelligence" = 1, "constitution" = 0, "endurance" = 0, "speed" = 1, "fortune" = 0) enflamed_icon = "widefire" - possible_faiths = list(FAITH_PSYDON) /datum/species/human/northern/check_roundstart_eligible() return TRUE diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index d6793655c0..f17409da24 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -71,7 +71,7 @@ return FALSE else L.mob_timers[MT_PSYPRAY] = world.time - if(!findtext(message2recognize, "[M.PATRON]")) + if(!findtext(message2recognize, "[M.patron]")) return FALSE else L.playsound_local(L, 'sound/misc/notice (2).ogg', 100, FALSE) @@ -100,9 +100,9 @@ L.forceMove(T) return FALSE if(length(message2recognize) > 15) - if(findtext(message2recognize, "[M.PATRON]")) + if(findtext(message2recognize, "[M.patron]")) L.playsound_local(L, 'sound/misc/notice (2).ogg', 100, FALSE) - to_chat(L, "I, [M.PATRON], have heard your prayer and grant you favor.") + to_chat(L, "I, [M.patron], have heard your prayer and yet cannot aid you.") var/obj/item/underworld/coin/C = new L.put_in_active_hand(C) return TRUE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2b49b90e14..ad721e54b8 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -11,6 +11,7 @@ diag_hud.add_to_hud(src) faction += "[REF(src)]" GLOB.mob_living_list += src + init_faith() /mob/living/Destroy() surgeries = null diff --git a/code/modules/mob/living/stats.dm b/code/modules/mob/living/stats.dm index a72eeb768f..060745e957 100644 --- a/code/modules/mob/living/stats.dm +++ b/code/modules/mob/living/stats.dm @@ -17,7 +17,10 @@ var/BUFLUC = 0 var/statbuf = FALSE var/list/statindex = list() - var/PATRON = null + var/datum/patron/patron = /datum/patron/godless + +/mob/living/proc/init_faith() + patron = GLOB.patronlist[/datum/patron/godless] /datum/species var/list/specstats = list("strength" = 0, "perception" = 0, "intelligence" = 0, "constitution" = 0, "endurance" = 0, "speed" = 0, "fortune" = 0) diff --git a/code/modules/underworld/underworld.dm b/code/modules/underworld/underworld.dm index 8ffb04eea3..172f55ca1c 100644 --- a/code/modules/underworld/underworld.dm +++ b/code/modules/underworld/underworld.dm @@ -24,7 +24,7 @@ var/mob/living/carbon/spirit/O = new /mob/living/carbon/spirit(A.loc) O.livingname = mob.name O.ckey = ckey - O.PATRON = prefs.selected_patron + O.patron = prefs.selected_patron SSdroning.area_entered(get_area(O), O.client) verbs -= /client/proc/descend if("No") diff --git a/stonekeep.dme b/stonekeep.dme index 54c86f4e2c..e1d8506735 100644 --- a/stonekeep.dme +++ b/stonekeep.dme @@ -569,7 +569,14 @@ #include "code\datums\elements\earhealing.dm" #include "code\datums\elements\firestacker.dm" #include "code\datums\elements\snail_crawl.dm" -#include "code\datums\gods\patrons.dm" +#include "code\datums\gods\_faith.dm" +#include "code\datums\gods\_patron.dm" +#include "code\datums\gods\faiths\atheism.dm" +#include "code\datums\gods\faiths\divine_pantheon.dm" +#include "code\datums\gods\faiths\inhumen_pantheon.dm" +#include "code\datums\gods\patrons\atheism.dm" +#include "code\datums\gods\patrons\divine_pantheon.dm" +#include "code\datums\gods\patrons\inhumen_pantheon.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm"