Skip to content

Commit

Permalink
Re-shuffle languages based on 2024 rules. Add Common Sign Language. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Fyorl committed Sep 16, 2024
1 parent 9c29d3f commit 2678923
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 5 deletions.
9 changes: 9 additions & 0 deletions dnd5e.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,15 @@ Hooks.once("init", function() {
delete DND5E.transformationPresets.polymorph.options.addTemp;
delete DND5E.transformationPresets.polymorph.options.keepHP;
delete DND5E.transformationPresets.polymorph.options.keepType;

// Adjust language categories.
delete DND5E.languages.standard.children.sign;
DND5E.languages.exotic.children.draconic = DND5E.languages.standard.children.draconic;
delete DND5E.languages.standard.children.draconic;
DND5E.languages.cant = DND5E.languages.exotic.children.cant;
delete DND5E.languages.exotic.children.cant;
DND5E.languages.druidic = DND5E.languages.exotic.children.druidic;
delete DND5E.languages.exotic.children.druidic;
}

// Register Roll Extensions
Expand Down
1 change: 1 addition & 0 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1865,6 +1865,7 @@
"DND5E.LanguagesAuran": "Auran",
"DND5E.LanguagesCelestial": "Celestial",
"DND5E.LanguagesCommon": "Common",
"DND5E.LanguagesCommonSign": "Common Sign Language",
"DND5E.LanguagesDeepSpeech": "Deep Speech",
"DND5E.LanguagesDraconic": "Draconic",
"DND5E.LanguagesDruidic": "Druidic",
Expand Down
11 changes: 6 additions & 5 deletions module/config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3243,23 +3243,26 @@ DND5E.languages = {
label: "DND5E.LanguagesStandard",
children: {
common: "DND5E.LanguagesCommon",
draconic: "DND5E.LanguagesDraconic",
dwarvish: "DND5E.LanguagesDwarvish",
elvish: "DND5E.LanguagesElvish",
giant: "DND5E.LanguagesGiant",
gnomish: "DND5E.LanguagesGnomish",
goblin: "DND5E.LanguagesGoblin",
halfling: "DND5E.LanguagesHalfling",
orc: "DND5E.LanguagesOrc"
orc: "DND5E.LanguagesOrc",
sign: "DND5E.LanguagesCommonSign"
}
},
exotic: {
label: "DND5E.LanguagesExotic",
children: {
aarakocra: "DND5E.LanguagesAarakocra",
abyssal: "DND5E.LanguagesAbyssal",
cant: "DND5E.LanguagesThievesCant",
celestial: "DND5E.LanguagesCelestial",
deep: "DND5E.LanguagesDeepSpeech",
draconic: "DND5E.LanguagesDraconic",
druidic: "DND5E.LanguagesDruidic",
gith: "DND5E.LanguagesGith",
gnoll: "DND5E.LanguagesGnoll",
infernal: "DND5E.LanguagesInfernal",
Expand All @@ -3275,9 +3278,7 @@ DND5E.languages = {
sylvan: "DND5E.LanguagesSylvan",
undercommon: "DND5E.LanguagesUndercommon"
}
},
druidic: "DND5E.LanguagesDruidic",
cant: "DND5E.LanguagesThievesCant"
}
};
preLocalize("languages", { key: "label" });
preLocalize("languages.standard.children", { key: "label", sort: true });
Expand Down
35 changes: 35 additions & 0 deletions module/data/advancement/trait.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
const { ArrayField, BooleanField, NumberField, SetField, SchemaField, StringField } = foundry.data.fields;

/**
* Map language category changes.
* @type {Record<string, string>}
*/
const _MAP = {
"languages:exotic:draconic": "languages:standard:draconic",
"languages:cant": "languages:exotic:cant",
"languages:druidic": "languages:exotic:druidic"
};

const LANGUAGE_MAP = { modern: _MAP, legacy: foundry.utils.invertObject(_MAP) };

/**
* Configuration for a specific trait choice.
*
Expand Down Expand Up @@ -45,6 +57,18 @@ export class TraitConfigurationData extends foundry.abstract.DataModel {
);
return this.parent.hint ?? "";
}

/* -------------------------------------------- */

/** @inheritDoc */
static migrateData(source) {
super.migrateData(source);
const version = game.settings.get("dnd5e", "rulesVersion");
const languageMap = LANGUAGE_MAP[version] ?? {};
if ( source.grants?.length ) source.grants = source.grants.map(t => languageMap[t] ?? t);
if ( source.choices?.length ) source.choices.forEach(c => c.pool = c.pool.map(t => languageMap[t] ?? t));
return source;
}
}

/**
Expand All @@ -58,4 +82,15 @@ export class TraitValueData extends foundry.abstract.DataModel {
chosen: new SetField(new StringField(), { required: false })
};
}

/* -------------------------------------------- */

/** @inheritDoc */
static migrateData(source) {
super.migrateData(source);
const version = game.settings.get("dnd5e", "rulesVersion");
const languageMap = LANGUAGE_MAP[version] ?? {};
if ( source.chosen?.length ) source.chosen = source.chosen.map(t => languageMap[t] ?? t);
return source;
}
}

0 comments on commit 2678923

Please sign in to comment.