Skip to content

Commit 684cbc2

Browse files
committed
by-order-of-arguments (BOA) constructors
1 parent 217dcd1 commit 684cbc2

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

src/mechanics/move.ts

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,19 @@ export default async function renderMove(
4343
}
4444
case "roll": {
4545
lastRoll = item;
46+
lastRoll.properties.action = item.properties.action ?? item.values[1];
47+
lastRoll.properties.stat = item.properties.stat ?? item.values[2];
48+
lastRoll.properties.adds = item.properties.adds ?? item.values[3];
49+
lastRoll.properties.vs1 = item.properties.vs1 ?? item.values[4];
50+
lastRoll.properties.vs2 = item.properties.vs2 ?? item.values[5];
4651
renderRoll(moveNode, item);
4752
break;
4853
}
4954
case "progress-roll": {
5055
lastRoll = item;
56+
lastRoll.properties.score = item.properties.score ?? item.values[0];
57+
lastRoll.properties.vs1 = item.properties.vs1 ?? item.values[1];
58+
lastRoll.properties.vs2 = item.properties.vs2 ?? item.values[2];
5159
renderProgress(moveNode, item);
5260
break;
5361
}
@@ -123,8 +131,8 @@ async function renderAdd(
123131

124132
function renderMeter(moveNode: HTMLElement, meter: KdlNode) {
125133
const name = meter.values[0] as string;
126-
const from = meter.properties.from as number;
127-
const to = meter.properties.to as number;
134+
const from = (meter.properties.from ?? meter.values[1]) as number;
135+
const to = (meter.properties.to ?? meter.values[2]) as number;
128136
const delta = to - from;
129137
const neg = delta < 0;
130138
renderDlist(moveNode, "meter", {
@@ -143,9 +151,17 @@ function renderBurn(
143151
burn: KdlNode,
144152
lastRoll: KdlNode | undefined,
145153
) {
154+
const from = Math.max(
155+
-6,
156+
Math.min((burn.properties.from ?? burn.values[0]) as number, 10),
157+
);
158+
const to = Math.max(
159+
-6,
160+
Math.min((burn.properties.to ?? burn.values[1]) as number, 10),
161+
);
146162
const def: DataList = {
147-
From: { cls: "from", value: burn.properties.from },
148-
To: { cls: "to", value: burn.properties.to },
163+
From: { cls: "from", value: from },
164+
To: { cls: "to", value: to },
149165
};
150166
let nodeCls = "burn";
151167
if (lastRoll && lastRoll.name === "progress-roll") {
@@ -155,10 +171,9 @@ function renderBurn(
155171
});
156172
return;
157173
} else if (lastRoll) {
158-
const newScore = Math.min(burn.properties.from as number, 10);
159174
const vs1 = lastRoll.properties.vs1 as number;
160175
const vs2 = lastRoll.properties.vs2 as number;
161-
def["New Score"] = { cls: "score", value: newScore };
176+
def["New Score"] = { cls: "score", value: to };
162177
def["Challenge Die 1"] = {
163178
cls: "challenge-die",
164179
value: vs1,
@@ -167,7 +182,7 @@ function renderBurn(
167182
cls: "challenge-die",
168183
value: vs2,
169184
};
170-
const { cls, text, match } = moveOutcome(newScore, vs1, vs2);
185+
const { cls, text, match } = moveOutcome(to, vs1, vs2);
171186
setMoveHit(moveNode, cls, match);
172187
def["Outcome"] = { cls: "outcome", value: text, dataProp: false };
173188
nodeCls += " " + cls;
@@ -176,13 +191,13 @@ function renderBurn(
176191
}
177192

178193
function renderRoll(moveNode: HTMLElement, roll: KdlNode) {
179-
const action = roll.properties["action"] as number;
180194
const statName = roll.values[0] as string;
181-
const stat = roll.properties.stat as number;
182-
const adds = (roll.properties.adds as number) ?? 0;
195+
const action = (roll.properties.action ?? roll.values[1]) as number;
196+
const stat = (roll.properties.stat ?? roll.values[2]) as number;
197+
const adds = (roll.properties.adds ?? roll.values[3] ?? 0) as number;
183198
const score = Math.min(10, action + stat + adds);
184-
const challenge1 = roll.properties["vs1"] as number;
185-
const challenge2 = roll.properties["vs2"] as number;
199+
const challenge1 = (roll.properties.vs1 ?? roll.values[4]) as number;
200+
const challenge2 = (roll.properties.vs2 ?? roll.values[5]) as number;
186201
const {
187202
cls: outcomeClass,
188203
text: outcome,
@@ -207,9 +222,9 @@ function renderRoll(moveNode: HTMLElement, roll: KdlNode) {
207222
}
208223

209224
function renderProgress(moveNode: HTMLElement, roll: KdlNode) {
210-
const score = roll.properties.score as number;
211-
const challenge1 = roll.properties["vs1"] as number;
212-
const challenge2 = roll.properties["vs2"] as number;
225+
const score = (roll.properties.score ?? roll.values[0]) as number;
226+
const challenge1 = (roll.properties.vs1 ?? roll.values[1]) as number;
227+
const challenge2 = (roll.properties.vs2 ?? roll.values[2]) as number;
213228
const {
214229
cls: outcomeClass,
215230
text: outcome,
@@ -233,9 +248,8 @@ function renderDieRoll(moveNode: HTMLElement, roll: KdlNode) {
233248
}
234249

235250
function renderReroll(moveNode: HTMLElement, roll: KdlNode, lastRoll: KdlNode) {
236-
const action = lastRoll.properties.action as number | undefined;
237251
const newScore = Math.min(
238-
((roll.properties.action ?? action) as number) +
252+
((roll.properties.action ?? lastRoll.properties.action) as number) +
239253
(lastRoll.properties.stat as number) +
240254
((lastRoll.properties.adds as number) ?? 0),
241255
10,
@@ -252,8 +266,9 @@ function renderReroll(moveNode: HTMLElement, roll: KdlNode, lastRoll: KdlNode) {
252266
const def: DataList = {};
253267
if (roll.properties.action != null) {
254268
const newAction = roll.properties.action as number;
269+
const lastAction = lastRoll.properties.action as number;
255270
lastRoll.properties.action = newAction;
256-
def["Old Action Die"] = { cls: "action-die from", value: action ?? 0 };
271+
def["Old Action Die"] = { cls: "action-die from", value: lastAction ?? 0 };
257272
def["New Action Die"] = { cls: "action-die to", value: newAction };
258273
}
259274
if (roll.properties.vs1 != null) {

test-vault/Journals/Chapter 01.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ Suddenly, a trap! Oh no!
99
```mechanics
1010
move id="starforged/moves/adventure/face_danger" {
1111
add 1 "because I'm cool [[Ash Barlowe]]"
12-
roll "shadow" action=1 stat=3 adds=1 vs1=9 vs2=9
12+
roll "shadow" 1 3 1 9 9 // <statname> <action-die> <stat> <adds> <vs1> <vs2>
1313
}
1414
- "Oh nooo. This is gonna hurt. Time to [[Endure Harm]]."
1515
move "Endure Harm" {
1616
meter "health" from=3 to=2
17+
meter "health" 3 2 // <meter> <from> <to>
1718
roll "health" action=3 stat=4 adds=0 vs1=3 vs2=8
1819
meter "momentum" from=7 to=6
1920
meter "health" from=2 to=3
@@ -24,10 +25,12 @@ move "Undertake an Expedition" {
2425
reroll action=1 vs1=6
2526
reroll vs2=7 vs1=8
2627
burn from=10 to=2
28+
burn 10 2 // <from> <to>
2729
unknown "hahahah"
2830
}
2931
move "Finish an Expedition" {
3032
progress-roll score=2 vs1=1 vs2=3
33+
progress-roll 2 1 3 // <score> <vs1> <vs2>
3134
}
3235
move "[[Chapter 02]]" {
3336
- "**bold text** *italic* [[README]]"

0 commit comments

Comments
 (0)