Ask the automatons: the council of three offers hints from your seat
The owner's idea for teaching novices: a hints button runs all three temperaments' brains against YOUR view — the same cards and board you see, nothing hidden — and each says what it would do in your robes. The Hunter (eyes on the gold), the Berserker (eyes on the blood), the Worrier (eyes on the exits). Available on your turn and while under fire (counter advice included); purely advisory, computed client-side, nothing dispatched. hints.ts translates any Command into plain words. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0138A8CjeQRpvzKxuMfz1Bqc
This commit is contained in:
co-authored by
Claude Fable 5
parent
5ac1c9ed70
commit
b1f03fee81
@@ -949,6 +949,14 @@
|
||||
illusionPrompt = null;
|
||||
}
|
||||
|
||||
// The council of three: what each temperament would do from your seat.
|
||||
let councilHints = $state<import("./hints").TableHint[] | null>(null);
|
||||
async function askCouncil() {
|
||||
if (!view) return;
|
||||
const { tableHints } = await import("./hints");
|
||||
councilHints = tableHints(view);
|
||||
}
|
||||
|
||||
let pickChoice = $state(false);
|
||||
function pickUp() {
|
||||
if (treasuresHere.length > 1) { pickChoice = true; return; }
|
||||
@@ -1630,6 +1638,21 @@
|
||||
<div class="peek-note">{creatureStats(commandedCreature)}</div>
|
||||
</div>
|
||||
{/if}
|
||||
{#if councilHints}
|
||||
<div class="slip council">
|
||||
<div class="council-head">The council considers your position…
|
||||
<button class="hint-cancel" onclick={() => (councilHints = null)}>enough</button>
|
||||
</div>
|
||||
{#each councilHints as h (h.name)}
|
||||
<div class="council-row">
|
||||
<span class="council-name">{h.glyph} {h.name}</span>
|
||||
<span class="council-mood">({h.mood})</span>
|
||||
{h.advice}
|
||||
</div>
|
||||
{/each}
|
||||
<button class="stamp tiny" onclick={askCouncil}>ask again</button>
|
||||
</div>
|
||||
{/if}
|
||||
{#if actionsSpent}
|
||||
{#if view.turn.drawForbidden}
|
||||
<div class="slip urgent">Your own bolt has left you reeling — the rest of this turn is lost, and no cards come with it.</div>
|
||||
@@ -1766,6 +1789,7 @@
|
||||
{/if}
|
||||
</span>
|
||||
<button class="stamp tiny" onclick={pass}>let it resolve</button>
|
||||
<button class="stamp tiny" onclick={askCouncil}>🎓 hints</button>
|
||||
{/if}
|
||||
{#if youMustDiscard}
|
||||
<span class="hint-alert">Hand over the limit — mark cards and discard.</span>
|
||||
@@ -1939,6 +1963,7 @@
|
||||
<button class="stamp" class:primary={punchWallMode} disabled={view.turn.attackUsed && !punchWallMode}
|
||||
onclick={() => (punchWallMode = !punchWallMode)}>
|
||||
{punchWallMode ? "Click the wall to punch — or cancel" : "Punch a wall…"}</button>
|
||||
<button class="stamp" onclick={askCouncil}>🎓 Ask the automatons</button>
|
||||
<button class="stamp" onclick={startDiscardMode}>Discard cards…</button>
|
||||
<label class="inline draw-pick">
|
||||
draw
|
||||
@@ -2354,6 +2379,17 @@
|
||||
.stamp.big { font-size: 0.95rem; padding: 0.6rem 1.3rem; }
|
||||
.stamp.tiny { font-size: 0.62rem; padding: 0.22rem 0.5rem; box-shadow: 1px 1px 0 rgba(0,0,0,0.3); }
|
||||
.stamp.discard-one { background: #8a7a5e; }
|
||||
.slip.council { background: #ece4f1; border-color: #7a6f9a; }
|
||||
.council-head {
|
||||
font-weight: 700;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.council-row { margin: 0.2rem 0; }
|
||||
.council-name { font-weight: 700; }
|
||||
.council-mood { color: #8a7a5e; font-size: 0.72rem; }
|
||||
.stamp:focus-visible { outline: 2px solid #d8b23a; outline-offset: 2px; }
|
||||
|
||||
.game {
|
||||
|
||||
Reference in New Issue
Block a user