Skip to content

Commit

Permalink
Extract action sample tasks as separate data field (#12611)
Browse files Browse the repository at this point in the history
Include refactored data for all the actions currently existing in the system as action objects.
  • Loading branch information
nikolaj-a committed Dec 30, 2023
1 parent 14fac77 commit c8ac267
Show file tree
Hide file tree
Showing 17 changed files with 218 additions and 14 deletions.
17 changes: 17 additions & 0 deletions src/module/actor/actions/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {
ActionVariant,
ActionVariantUseOptions,
} from "./types.ts";
import type { ProficiencyRank } from "@item/base/data/index.ts";
import { PROFICIENCY_RANKS } from "@module/data.ts";

interface BaseActionVariantData {
cost?: ActionCost;
Expand All @@ -23,12 +25,23 @@ interface BaseActionData<ActionVariantDataType extends BaseActionVariantData = B
description: string;
img?: string;
name: string;
sampleTasks?: Partial<Record<ProficiencyRank, string>>;
section?: ActionSection;
slug?: string | null;
traits?: string[];
variants?: ActionVariantDataType | ActionVariantDataType[];
}

function labelSampleTasks(sampleTasks: Partial<Record<ProficiencyRank, string>>): { label: string; text: string }[] {
const unlabeled: { rank: ProficiencyRank; text: string }[] = [];
let rank: keyof typeof sampleTasks;
for (rank in sampleTasks) {
unlabeled.push({ rank, text: sampleTasks[rank]! });
}
unlabeled.sort((t1, t2) => PROFICIENCY_RANKS.indexOf(t1.rank) - PROFICIENCY_RANKS.indexOf(t2.rank));
return unlabeled.map((task) => ({ label: CONFIG.PF2E.proficiencyRanks[task.rank], text: task.text }));
}

abstract class BaseActionVariant implements ActionVariant {
readonly #action: BaseAction<BaseActionVariantData, BaseActionVariant>;
readonly #cost?: ActionCost;
Expand Down Expand Up @@ -73,6 +86,7 @@ abstract class BaseActionVariant implements ActionVariant {
const name = this.name
? `${game.i18n.localize(this.#action.name)} - ${game.i18n.localize(this.name)}`
: game.i18n.localize(this.#action.name);
const sampleTasks = this.#action.sampleTasks ? labelSampleTasks(this.#action.sampleTasks) : undefined;
const traitLabels: Record<string, string | undefined> = CONFIG.PF2E.actionTraits;
const traitDescriptions: Record<string, string | undefined> = CONFIG.PF2E.traitsDescriptions;
const traits = this.traits.map((trait) => ({
Expand All @@ -84,6 +98,7 @@ abstract class BaseActionVariant implements ActionVariant {
description,
glyph: this.glyph,
name,
sampleTasks,
traits,
});
return ChatMessagePF2e.create({
Expand All @@ -101,6 +116,7 @@ abstract class BaseAction<TData extends BaseActionVariantData, TAction extends B
readonly description?: string;
readonly img?: string;
readonly name: string;
readonly sampleTasks?: Partial<Record<ProficiencyRank, string>>;
readonly section?: ActionSection;
readonly slug: string;
readonly traits: string[];
Expand All @@ -111,6 +127,7 @@ abstract class BaseAction<TData extends BaseActionVariantData, TAction extends B
this.description = data.description;
this.img = data.img;
this.name = data.name.trim();
this.sampleTasks = data.sampleTasks;
this.section = data.section;
this.slug = data.slug?.trim() || sluggify(this.name);
this.traits = data.traits ?? [];
Expand Down
2 changes: 2 additions & 0 deletions src/module/actor/actions/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { ActorPF2e } from "@actor";
import type { ChatMessagePF2e } from "@module/chat-message/document.ts";
import { ProficiencyRank } from "@item/base/data/index.ts";

const ACTION_COSTS = ["free", "reaction", 1, 2, 3] as const;
type ActionCost = (typeof ACTION_COSTS)[number];
Expand Down Expand Up @@ -40,6 +41,7 @@ interface Action {
glyph?: string;
img?: string;
name: string;
sampleTasks?: Partial<Record<ProficiencyRank, string>>;
section?: ActionSection;
slug: string;
traits: string[];
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/acrobatics/balance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:balance"],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "balance",
statistic: "acrobatics",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:maneuver-in-flight"],
sampleTasks: {
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "maneuver-in-flight",
statistic: "acrobatics",
Expand Down
4 changes: 4 additions & 0 deletions src/module/system/action-macros/acrobatics/squeeze.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:squeeze"],
sampleTasks: {
trained: `${PREFIX}.SampleTasks.Trained`,
master: `${PREFIX}.SampleTasks.Master`,
},
section: "skill",
slug: "squeeze",
statistic: "acrobatics",
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/athletics/climb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:climb"],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "climb",
statistic: "athletics",
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/athletics/force-open.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:force-open"],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "force-open",
statistic: "athletics",
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/athletics/swim.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:swim"],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "swim",
statistic: "athletics",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
rollOptions: ["action:gather-information"],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "gather-information",
statistic: "diplomacy",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ const action = new SingleCheckAction({
{ outcome: ["success"], text: "PF2E.Actions.SenseDirection.Notes.success" },
],
rollOptions: ["action:sense-direction"],
sampleTasks: {
untrained: "PF2E.Actions.SenseDirection.SampleTasks.Untrained",
trained: "PF2E.Actions.SenseDirection.SampleTasks.Trained",
expert: "PF2E.Actions.SenseDirection.SampleTasks.Expert",
master: "PF2E.Actions.SenseDirection.SampleTasks.Master",
legendary: "PF2E.Actions.SenseDirection.SampleTasks.Legendary",
},
slug: "sense-direction",
statistic: "survival",
traits: ["exploration", "secret"],
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/exploration/track.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ const action = new SingleCheckAction({
{ outcome: ["criticalFailure"], text: "PF2E.Actions.Track.Notes.criticalFailure" },
],
rollOptions: ["action:track"],
sampleTasks: {
untrained: "PF2E.Actions.Track.SampleTasks.Untrained",
trained: "PF2E.Actions.Track.SampleTasks.Trained",
expert: "PF2E.Actions.Track.SampleTasks.Expert",
master: "PF2E.Actions.Track.SampleTasks.Master",
legendary: "PF2E.Actions.Track.SampleTasks.Legendary",
},
slug: "track",
statistic: "survival",
traits: ["concentrate", "exploration", "move"],
Expand Down
6 changes: 6 additions & 0 deletions src/module/system/action-macros/general/decipher-writing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ class DecipherWritingAction extends SingleCheckAction {
{ outcome: ["criticalFailure"], text: "PF2E.Actions.DecipherWriting.Notes.criticalFailure" },
],
rollOptions: ["action:decipher-writing"],
sampleTasks: {
trained: "PF2E.Actions.DecipherWriting.SampleTasks.Trained",
expert: "PF2E.Actions.DecipherWriting.SampleTasks.Expert",
master: "PF2E.Actions.DecipherWriting.SampleTasks.Master",
legendary: "PF2E.Actions.DecipherWriting.SampleTasks.Legendary",
},
section: "skill",
slug: "decipher-writing",
statistic: "",
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/general/subsist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,13 @@ class SubsistAction extends SingleCheckAction {
{ outcome: ["criticalFailure"], text: "PF2E.Actions.Subsist.Notes.criticalFailure" },
],
rollOptions: ["action:subsist"],
sampleTasks: {
untrained: "PF2E.Actions.Subsist.SampleTasks.Untrained",
trained: "PF2E.Actions.Subsist.SampleTasks.Trained",
expert: "PF2E.Actions.Subsist.SampleTasks.Expert",
master: "PF2E.Actions.Subsist.SampleTasks.Master",
legendary: "PF2E.Actions.Subsist.SampleTasks.Legendary",
},
section: "skill",
slug: "subsist",
statistic: "",
Expand Down
7 changes: 7 additions & 0 deletions src/module/system/action-macros/performance/perform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ const action = new SingleCheckAction({
{ outcome: ["failure"], text: `${PREFIX}.Notes.failure` },
{ outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` },
],
sampleTasks: {
untrained: `${PREFIX}.SampleTasks.Untrained`,
trained: `${PREFIX}.SampleTasks.Trained`,
expert: `${PREFIX}.SampleTasks.Expert`,
master: `${PREFIX}.SampleTasks.Master`,
legendary: `${PREFIX}.SampleTasks.Legendary`,
},
section: "skill",
slug: "perform",
statistic: "performance",
Expand Down
8 changes: 8 additions & 0 deletions src/scripts/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,14 @@ export const PF2ECONFIG = {
"PF2E.ProficiencyLevel4", // legendary
] as const,

proficiencyRanks: {
untrained: "PF2E.ProficiencyLevel0",
trained: "PF2E.ProficiencyLevel1",
expert: "PF2E.ProficiencyLevel2",
master: "PF2E.ProficiencyLevel3",
legendary: "PF2E.ProficiencyLevel4",
} as const,

actorSizes: sizeTypes,

actorTypes,
Expand Down
Loading

0 comments on commit c8ac267

Please sign in to comment.