Rework backend #1

Merged
robert merged 86 commits from rework-backend into main 2026-07-01 19:29:34 -04:00
Showing only changes of commit af165f4491 - Show all commits
+14 -14
View File
@@ -310,25 +310,25 @@ async function main() {
lastPaused = true;
}
// 10. reorderParticipants: every 8 turns, drag one past next (DM reorder).
// 10. reorderParticipants: every 8 turns, drag one past another (DM reorder).
// Pick two ADJACENT UPCOMING actors (both strictly after current pointer)
// and swap them. Avoids crossing current pointer — crossing it creates
// ambiguous "who acted this round" semantics (skip/double). Swapping two
// upcoming actors is always safe and still exercises reorder.
if (totalTurns % 8 === 0 && lastReorder !== totalTurns) {
const living = enc.participants.filter(p => p.currentHp > 0 && p.isActive !== false);
if (living.length >= 3) {
// drag first past second (same-or-cross init, exercises reorder).
const dragged = living[0];
const target = living[1];
const curIdx = enc.turnOrderIds.indexOf(enc.currentTurnParticipantId);
// upcoming = everyone after current in turn order (rest of this round)
const upcomingIds = enc.turnOrderIds.slice(curIdx + 1)
.filter(id => { const p = enc.participants.find(x => x.id === id); return p && p.currentHp > 0 && p.isActive !== false; });
// swap first adjacent upcoming pair (drag index1 before index0)
if (upcomingIds.length >= 2) {
const target = enc.participants.find(p => p.id === upcomingIds[0]);
const dragged = enc.participants.find(p => p.id === upcomingIds[1]);
try {
const r = reorderParticipants(enc, dragged.id, target.id);
enc = await patch(encounterPath, enc, r, `reorder ${dragged.name}→before ${target.name}`);
lastReorder = totalTurns;
} catch (e) { /* same-init only — try same-init pair */
const sameInit = living.find(p => p !== dragged && p.initiative === dragged.initiative);
if (sameInit) {
const r = reorderParticipants(enc, dragged.id, sameInit.id);
enc = await patch(encounterPath, enc, r, `reorder ${dragged.name}→before ${sameInit.name}`);
lastReorder = totalTurns;
}
}
} catch (e) { /* swap not allowed — skip this round */ }
}
}