From 6637b8cdc4d268e2ed3e96c52a2832b12b439af2 Mon Sep 17 00:00:00 2001 From: Forien Date: Sat, 30 Dec 2023 16:21:10 +0100 Subject: [PATCH] first draft at runebound species overhaul --- dist/modules/ForienArmoury.mjs | 2 + dist/modules/features/Species.mjs | 174 ++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 dist/modules/features/Species.mjs diff --git a/dist/modules/ForienArmoury.mjs b/dist/modules/ForienArmoury.mjs index 9d6a12d..f11fa98 100644 --- a/dist/modules/ForienArmoury.mjs +++ b/dist/modules/ForienArmoury.mjs @@ -7,6 +7,7 @@ import Integrations from "./Integrations.mjs"; import ItemProperties from "./features/ItemProperties.mjs"; import ItemRepair from "./features/ItemRepair.mjs"; import SettingsApp from "./apps/SettingsApp.mjs"; +import Species from "./features/Species.mjs"; import TemporaryRunes from "./features/Runes.mjs"; import Utility from "./utility/Utility.mjs"; import WorldTimeObserver from "./utility/WorldTimeObserver.mjs"; @@ -28,6 +29,7 @@ export default class ForienArmoury { Integrations, ItemProperties, ItemRepair, + Species, TemporaryRunes, WorldTimeObserver, ] diff --git a/dist/modules/features/Species.mjs b/dist/modules/features/Species.mjs new file mode 100644 index 0000000..cd55058 --- /dev/null +++ b/dist/modules/features/Species.mjs @@ -0,0 +1,174 @@ +import ForienBaseModule from "../utility/ForienBaseModule.mjs"; + +export default class Species extends ForienBaseModule { + + applyWfrp4eConfig() { + let config = {}; + + config = foundry.utils.mergeObject(config, this.#species()); + config = foundry.utils.mergeObject(config, this.#subspecies()); + + this.#mergeCareerReplacements(); + + return config; + } + + #species() { + const config = { + species: {}, + speciesCharacteristics: {}, + speciesSkills: {}, + speciesTalents: {}, + speciesFate: {}, + speciesRes: {}, + speciesExtra: {}, + speciesMovement: {}, + speciesAge: {}, + speciesHeight: {}, + speciesRandomTalents: {}, + }; + + /**#region Runebound */ + + config.species["runebound"] = "Runebound"; + config.speciesCharacteristics["runebound"] = { + "ws": "2d10+25", + "bs": "2d10+25", + "s": "2d10+25", + "t": "2d10+25", + "i": "2d10+25", + "ag": "2d10+25", + "dex": "2d10+25", + "int": "2d10+15", + "wp": "2d10+25", + "fel": "2d10+15" + }; + config.speciesSkills["runebound"] = [ + "Animal Care", + "Charm", + "Cool", + "Consume Alcohol", + "Evaluate", + "Gossip", + "Haggle", + "Language (Wastelander)", + "Leadership", + "Lore (local)", + "Melee (Basic)", + "Ranged (Bow)" + ]; + config.speciesTalents["runebound"] = [ + "Doomed", + "Runebound Mutation", + "Savvy, Suave", + ]; + config.speciesRandomTalents["runebound"] = { + 'runebound-talents': 4 + }; + config.speciesFate["runebound"] = 1; + config.speciesRes["runebound"] = 2; + config.speciesExtra["runebound"] = 1; + config.speciesMovement["runebound"] = 4; + config.speciesAge["runebound"] = "2d6 + 10"; + config.speciesHeight["runebound"] = { + feet: 4, + inches: 10, + die: "2d10" + }; + + /**#endregion Runebound */ + + return config; + } + + #subspecies() { + let config = { + subspecies: { + runebound: {} + } + } + + /**#region Runebound */ + + config.subspecies.runebound['reiklander'] = { + name: "Reiklander", + skills: [ + "Animal Care", + "Charm", + "Cool", + "Evaluate", + "Gossip", + "Haggle", + "Language (Bretonnian)", + "Language (Wastelander)", + "Leadership", + "Lore (Reikland)", + "Melee (Basic)", + "Ranged (Bow)" + ], + talents: [ + "Doomed", + "Runebound Mutation", + "Savvy, Suave", + ], + randomTalents: { + talents: 2, + 'runebound-talents': 3 + } + } + + config.subspecies.runebound['orphaned'] = { + name: "Orphaned", + skills: [ + "Animal Care", + "Bribery", + "Charm", + "Climb", + "Cool", + "Evaluate", + "Gossip", + "Haggle", + "Melee (Basic)", + "Melee (Brawling)", + "Ranged (Sling)", + "Stealth (Urban)" + ], + talents: [ + "Doomed", + "Flee!, Stone Soup", + "Small, random[1][runebound-talents]" + ], + randomTalents: { + 'runebound-talents': 3 + } + } + + /**#endregion Runebound */ + + return config; + } + + #mergeCareerReplacements() { + game.wfrp4e.utility.mergeCareerReplacements({ + runebound: { + "Cavalryman": ["Monster Hunter"], + "Engineer": ["Runebound Ranger"], + "Guard": ["Monster Hunter"], + "Hedge Witch": ["Runebound Ranger"], + "Hunter": ["Runebound Ranger"], + "Knight": ["Monster Hunter"], + "Mystic": ["Runebound Ranger"], + "Nun": ["Runebound Ranger"], + "Priest": ["Runebound Ranger"], + "Protagonist": ["Monster Hunter"], + "Road Warden": ["Monster Hunter", "Runebound Ranger"], + "Scout": ["Runebound Ranger"], + "Soldier": ["Monster Hunter", "Runebound Ranger"], + "Warrior Priest": ["Runebound Ranger"], + "Watchman": ["Runebound Ranger"], + "Witch": ["Runebound Ranger"], + "Wizard": ["Runebound Ranger"], + }, + }); + } +} \ No newline at end of file