diff --git a/src/lib/components/Board.svelte b/src/lib/components/Board.svelte index add8844..63497dc 100644 --- a/src/lib/components/Board.svelte +++ b/src/lib/components/Board.svelte @@ -238,7 +238,7 @@ {#if duel.surrendering}

Both palms at once is surrender. You will lose the duel.

{:else if duel.loneClap && !duel.moved} -

A clap needs both hands; one hand clapping does nothing. Clap with both, or rest the other hand.

+

A clap needs both hands, and one hand clapping does nothing. Clap with both, or rest the other hand.

{/if} {#if duel.conflict}

Those two spells share a gesture, and a gesture can finish only one spell. Let one of them pass.

diff --git a/src/lib/components/Hall.svelte b/src/lib/components/Hall.svelte index 4722154..96ef00f 100644 --- a/src/lib/components/Hall.svelte +++ b/src/lib/components/Hall.svelte @@ -211,9 +211,9 @@

Waving Hands

-

Duelling wizards. Two hands each. The right run of gestures is a spell.

-

Richard Bartle's 1977 pencil-and-paper duel, free in your browser. Each turn every wizard chooses a gesture per hand and all reveal together; a Fireball is F-S-S-D-D on one hand, a Shield is a single palm. Play the bot, or open a table for up to a dozen wizards and play by turns.

- +

Wizards duel with their hands, and the right run of gestures is a spell.

+

Richard Bartle's 1977 pencil-and-paper duel, free in your browser. Each turn every wizard chooses a gesture for each hand, and all are shown together. A Fireball is F-S-S-D-D on one hand, and a Shield is a single palm. Play the bot, or open a table for up to a dozen wizards and play by turns.

+
@@ -237,7 +237,7 @@
-

A code opens the door either way: take a seat if one is free, or watch from the Peanut Gallery.

+

With a code you can take a seat if one is free, or watch from the Peanut Gallery.

or bring a seat from another device @@ -325,8 +325,8 @@ {#snippet aboutGame()}

Waving Hands is Richard Bartle's game from 1977, played with pencil, paper and two hands. It was later known as Spellbinder and Spellcaster, and Andrew Plotkin's Spellcast brought it to university X terminals in 1993, which is where the maker of this page first met it.

-

This version keeps the game as written: all forty spells, the same simultaneous resolution, the same ledger of letters. The rules text it follows is the fanzine transcription, kept in full on the rules page. The bot reads your gestures as you would read its; the hand silhouettes on the buttons are adapted from Plotkin's bitmaps, with his notice retained.

-

It is free and keeps no accounts. A duel against the bot lives in your own browser. A duel between people lives on a small server as an append-only ledger of moves, so it can be replayed from its first gesture, and each wizard is shown only what the rules let them see.

+

This version keeps the game as written, with all forty spells, the same simultaneous turns and the same ledger of letters. The rules text it follows is the fanzine transcription, kept in full on the rules page. The bot reads your gestures as you would read its. The hand silhouettes on the buttons are adapted from Plotkin's bitmaps, with his notice retained.

+

It is free and keeps no accounts. An offline duel stays in your own browser. Every other duel, against the bot or between people, lives on a small server as an append-only ledger of moves, so it can be replayed from its first gesture, and each wizard is shown only what the rules let them see.

{/snippet} {#snippet aboutTally()} @@ -346,15 +346,15 @@ {/if}

- The games of Kestrel's Hall are free and will stay free. They run on small servers that cost a few dollars a month; anyone who wants to chip in toward the hosting can at - ko-fi.com/kestrelsnest. Nothing is unlocked by it and nothing is withheld without it. + The games of Kestrel's Hall are free and will stay free. They run on small servers that cost a few dollars a month, and anyone who wants to chip in toward the hosting can do so at + ko-fi.com/kestrelsnest. Every game stays whole either way.

Waving Hands is Richard Bartle's, 1977.

{/snippet} {#snippet aboutWord()}
-

A rule read wrong, a bug, a duel you would like to tell of: write to eric@ericwagoner.com, @kestrelsnest.social on Bluesky, or @eric@toots.kestrelsnest.social on Mastodon. The keeper of this hall roosts at kestrelsnest.social.

+

If a rule reads wrong, something breaks, or you have a duel to tell of, write to eric@ericwagoner.com, @kestrelsnest.social on Bluesky, or @eric@toots.kestrelsnest.social on Mastodon. The keeper of this hall roosts at kestrelsnest.social.

{/snippet} diff --git a/src/lib/components/ReportSlip.svelte b/src/lib/components/ReportSlip.svelte index 9f134c3..9933747 100644 --- a/src/lib/components/ReportSlip.svelte +++ b/src/lib/components/ReportSlip.svelte @@ -61,7 +61,7 @@

Something amiss?

{#if sent} -

Recorded beside the room's ledger, with the turn. Thank you; the keeper will study the moment.{#if error} {error}{/if}

+

Recorded beside the room's ledger, with the turn. Thank you. The keeper will look into it.{#if error} {error}{/if}

{:else} -

The room code and the turn ride along; the keeper can replay the duel to this moment.

+

The room code and the turn are sent with it, so the keeper can replay the duel to this moment.

{#if error}

{error}

{/if}
diff --git a/src/lib/components/SpellSheet.svelte b/src/lib/components/SpellSheet.svelte index ee59ad1..cdf76c2 100644 --- a/src/lib/components/SpellSheet.svelte +++ b/src/lib/components/SpellSheet.svelte @@ -16,7 +16,7 @@
Spell sheet -

Gestures you have already made light up; select a spell to read what it does. A bracketed lower-case letter, such as (w, is that gesture made with both hands at once; C, the clap, is always two-handed. Surrender is both palms at once: never a spell. Full rules.

+

Gestures you have already made light up. Select a spell to read what it does. A bracketed lower-case letter, such as (w, is that gesture made with both hands at once; C, the clap, is always two-handed. Surrender is both palms at once: never a spell. Full rules.

{#each groups as g (g.category)}

{g.title}

    diff --git a/src/lib/components/TableTalk.svelte b/src/lib/components/TableTalk.svelte index 733f53b..6d38e96 100644 --- a/src/lib/components/TableTalk.svelte +++ b/src/lib/components/TableTalk.svelte @@ -59,7 +59,7 @@ {:else if remote.spectating} -

    The gallery listens; the host has not let it talk.

    +

    The host has not let the gallery talk at this table.

    {:else}
    diff --git a/src/lib/game/resolve.ts b/src/lib/game/resolve.ts index fb272f2..b44acb0 100644 --- a/src/lib/game/resolve.ts +++ b/src/lib/game/resolve.ts @@ -1028,7 +1028,7 @@ export function resolveTurn(previous: GameState, inputs: Record 0) { - lessons.push({ key: 'lone-clap', text: `A clap needs both hands at once. ${facts.loneClap[0]}'s single-handed clap counts as nothing, and that hand's spells start from scratch.` }); + lessons.push({ key: 'lone-clap', text: `A clap needs both hands at once, so ${facts.loneClap[0]}'s one-handed clap counted as nothing, and that hand's spells start from scratch.` }); } if (facts.overlaps.length > 0) { const o = facts.overlaps[0]; - lessons.push({ key: 'overlap', text: `A gesture can serve more than one spell as long as each run is unbroken: ${o.name}'s ${o.spell} reused gestures from the earlier ${o.earlier}.` }); + lessons.push({ key: 'overlap', text: `${o.name}'s ${o.spell} reused gestures from the earlier ${o.earlier}. A gesture can serve more than one spell as long as each run is unbroken.` }); } if (facts.broken.length > 0) { const b = facts.broken[0]; @@ -1049,10 +1049,10 @@ export function resolveTurn(previous: GameState, inputs: Record 0) { const c = facts.curedAndHurt[0]; - lessons.push({ key: 'cure-timing', text: `Cures land in the same turn as the damage: ${c.name} lost ${c.hurt} and regained ${c.healed} at once.` }); + lessons.push({ key: 'cure-timing', text: `${c.name} lost ${c.hurt} and regained ${c.healed} in the same turn. Cures land together with the damage.` }); } if (facts.newMonsterAttacked) { - lessons.push({ key: 'monster-same-turn', text: `A creature attacks on the very turn it is summoned: ${facts.newMonsterAttacked} struck at once. A shield that turn is the only defence.` }); + lessons.push({ key: 'monster-same-turn', text: `${facts.newMonsterAttacked} struck on the very turn it was summoned. Only a shield, a counter-spell or protection from evil cast that same turn would have stopped it.` }); } for (const l of lessons) { if (state.lessonsShown.includes(l.key) || summary.lessons.length >= 2) continue; diff --git a/src/routes/guide/+page.svelte b/src/routes/guide/+page.svelte index 1fc1652..e881ac9 100644 --- a/src/routes/guide/+page.svelte +++ b/src/routes/guide/+page.svelte @@ -6,7 +6,7 @@
    Back to the hall

    How to play

    -

    You are a wizard with two hands and a rival across the table. Every turn each of you writes down a gesture for each hand, and all are revealed at once. The right run of gestures on one hand is a spell. This page walks the room.

    +

    You are a wizard with two hands and a rival across the table. Every turn each of you chooses a gesture for each hand, and all of them are shown at once. The right run of gestures on one hand is a spell. This guide goes through the screen from the hall to your first duel.

@@ -35,8 +35,8 @@
A table being laid: the invite link, a roster of seated wizards, an empty-seat count, and the host's button to begin.
-

A table fills as wizards open the link. Whoever laid it is the host: they may seat a bot in any empty chair or send one away, and they begin the duel when the company suits them, from two wizards to twelve; a full table waits for them too. Once begun, the seats are closed and the ledger opens.

-

A duel between people is played by turns, whenever each of you has a moment. The page keeps watch and fills itself in when the others have moved; the masthead's room button copies the invite for latecomers who wish to watch.

+

A table fills as wizards open the link. Whoever laid it is the host. The host may seat a bot in any empty chair or send one away, and begins the duel when the company suits them, with anywhere from two wizards to twelve. Even a full table waits for the host. Once the duel begins, the seats are closed and the ledger opens.

+

A duel between people is played by turns, whenever each of you has a moment. When the others move, their turns appear without a reload. The room button at the top copies the invite link for anyone who arrives late and wants to watch.

@@ -44,8 +44,8 @@
The ledger: a table with a turn number down the left, two letter columns for each wizard, and spells named in ember beneath the gesture that finished them.
-

This is the game, as Bartle drew it: one row a turn, two columns a wizard, one letter a hand. F wriggled fingers, P proffered palm, S snap, W wave, D pointed digit, C clap. A dagger is a stab; a dash, a hand that rested. A gesture written in ember finished a spell, and the spell is named beneath it.

-

The bottom row is the turn being written. Your letters appear as you choose them; your rivals' show as ? until the reveal. A question mark in an older row means a gesture you were not allowed to see: you were blind, or they were invisible. With many wizards the ledger runs sideways; the turn and your own two columns stay pinned while you slide across to the rest, and a row of names above it turns the ledger toward any wizard. Pressing a warning or choosing a target does the same. Each wizard keeps one colour in the ledger, the warnings and the rail, so a name met in one place is known in the next.

+

The ledger is the game as Bartle drew it on paper. Each row is a turn, each wizard has two columns, and each letter is one hand's gesture. F is wriggled fingers, P a proffered palm, S a snap, W a wave, D a pointed digit and C a clap. A dagger is a stab, and a dash is a hand that rested. A gesture written in ember finished a spell, and the spell is named beneath it.

+

The bottom row is the turn being written. Your letters appear as you choose them, and your rivals' show as ? until every hand is shown. A question mark in an older row is a gesture you were not allowed to see, because you were blind or they were invisible. With many wizards the ledger runs sideways. The turn number and your own two columns stay put while you slide across to the rest, and the row of names above the ledger jumps to any wizard. Pressing a warning or choosing a target jumps there too. Each wizard has one colour, used in the ledger, the warnings and the list of wizards alike.

@@ -53,9 +53,10 @@
Two panels of gesture buttons, left hand and right, each with a list beneath of spells under way and the gesture that continues them.
-

Press a gesture for each hand, or type them: the first letter you type goes to your left hand and the second to your right, with K for a stab, a dash to rest, Backspace to take one back and Enter to seal the turn. The two letters wait in a row at the foot of the hands, beside the button, however far the page has scrolled. Beneath each hand is what that hand is part-way through: D → F-W, Cure light wounds means the digit you made last turn is the first gesture of that spell, and F then W would finish it. Press a line to make its next gesture; the diamond pins a spell so it stays at the top while you work toward it.

-

When a gesture finishes a spell, Finishes appears with the spell chosen and at naming the likeliest subject. Change either. A gesture can belong to more than one spell so long as each run is unbroken, which is how F-F-F followed by S-S-D-D casts a Paralysis and then a Fireball; but one gesture may finish only one spell, and the page will tell you when two of your choices would share one.

-

Some hands are not yours to move. A hand paralysed or charmed by a rival, or a turn under amnesia, shows its forced gesture locked. Both palms at once is surrender, and the page warns before you do it.

+

Press a gesture for each hand, or type them. The first letter you type goes to your left hand and the second to your right. K is a stab and a dash rests the hand. Backspace takes the last letter back, and Enter seals the turn. Your two letters wait beside the button in a row that stays in view however far you scroll.

+

Under each hand is a list of the spells that hand is part of the way through. D → F-W, Cure light wounds means the digit you made last turn starts that spell, and F then W would finish it. Press a line to make its next gesture. The diamond pins a spell to the top of the list while you work toward it.

+

When a gesture finishes a spell, Finishes shows which spell, and at shows the likeliest target. You can change either. A gesture can belong to more than one spell as long as each run is unbroken, which is how F-F-F followed by S-S-D-D casts a Paralysis and then a Fireball. But one gesture can finish only one spell, and you will be warned if two of your choices would share one.

+

Some hands are not yours to move. A hand paralysed or charmed by a rival, or a turn under amnesia, shows its forced gesture locked. Both palms at once is surrender, and you are warned before you commit to it.

@@ -63,8 +64,8 @@
Warnings above the hands: a rival's hand, the gestures already made, an arrow, and the gesture that would finish a hostile spell.
-

Above the hands the page reads your rivals' ledgers for you. Lucan, left: S → D, Missile means Lucan's left hand snapped last turn, and one pointed digit would send a missile this turn. Two gestures away lists what could land the turn after. Press a warning to light those gestures in the ledger.

-

This is the whole art. A shield, a single palm, stops missiles, creatures and knives this turn. A counter-spell on yourself, W-W-S or W-P-P, stops every other spell aimed at you this turn and shields you besides. Neither stops a wound spell or a lightning bolt, and nothing but dispel magic stops the finger of death; against those, break their run with an anti-spell before it ends.

+

Above your hands is a list of what your rivals could cast soon, read from their gestures so far. Lucan, left, S → D, Missile means Lucan's left hand snapped last turn, and one pointed digit would send a missile this turn. Two gestures away lists what could land the turn after. Press a warning to light those gestures in the ledger.

+

Answering these warnings is most of the skill. A shield, a single palm, stops missiles, creatures and knives this turn, but not wound spells, lightning or fire. A counter-spell on yourself, W-W-S or W-P-P, stops every other spell cast at you this turn and shields you as well. Only finger of death and dispel magic get past it. Finger of death is stopped only by dispel magic, so the better answer is to break its run with an anti-spell before it ends.

@@ -72,8 +73,8 @@
The result strip: each wizard's health before and after the turn, then the events of the turn in a line each.
-

Seal the turn commits your two gestures; nobody else sees them until every wizard has sealed theirs, and then all hands are shown at once. Against the bot the turn resolves at once; at a table it resolves when the last wizard has moved, and until then the button reads Waiting. Everything happens together: a shield made this turn stops a missile made this turn, a creature summoned this turn strikes this turn, and a cure lands in the same breath as the wound.

-

The strip above the hands says what changed: each wizard's health, then the events worth knowing, and the first time a rule surprises you, a line explaining it. The chronicle in the rail keeps the whole story.

+

Seal the turn commits your two gestures. Nobody sees them until every wizard has sealed theirs, and then all the hands are shown at once. Against the bot this happens straight away. At a table it happens when the last wizard moves, and until then your button reads Waiting. Everything in a turn happens together. A shield made this turn stops a missile made this turn, a creature summoned this turn strikes this turn, and a cure lands in the same breath as the wound.

+

The strip above your hands sums up the turn. It gives each wizard's health and the events worth knowing, and the first time a rule comes up it adds a line explaining it. The chronicle at the side keeps the whole story, turn by turn.

@@ -86,7 +87,7 @@ The spell sheet, open at Fireball: its gestures, what it does, and buttons to plan it with the left or right hand. -

The rail shows every wizard: fifteen marks of health, the enchantments on them and for how long, and the creatures that serve them with hits left and damage dealt. Past three wizards the rail lists the others on a line each, with their health, what matters about their condition, and whether they have written their turn; press a line to open it out. Your own creatures take orders beneath your hands each turn and keep attacking what they last attacked until told otherwise.

+

The column at the side shows every wizard's fifteen marks of health, the enchantments on them and for how long, and the creatures that serve them. At a table of more than three, the other wizards get one line each, showing their health, anything important about their condition, and whether they have moved yet. Press a line to see the rest. Your own creatures take orders beneath your hands each turn and keep attacking what they last attacked until told otherwise.

The spell sheet lists all forty spells. Gestures you have already made light up along each sequence. Open a spell to read it, then Plan with left hand or right hand to pin it and make its next gesture, which is how a duel begins when nothing is yet under way.

@@ -95,21 +96,22 @@
The duel on a phone: the ledger, the result, the hands, and a bar fixed at the foot with every wizard's health, the chosen gestures and the button that seals the turn.
-

Everything is here, in one column. The bar at the foot keeps every wizard's health, your two chosen gestures and the button that seals the turn in reach; after each turn the page brings the ledger's last rows and the result into view. Lists are shorter, and More spells opens the rest.

+

On a phone everything sits in one column. A bar at the bottom of the screen keeps the wizards' health, your two gestures and the button that seals the turn within reach. After each turn the screen scrolls back to the ledger's last rows and the result. Lists are shorter, and More spells opens the rest.

A first duel

-

Open with a wave on each hand. From W-W you may turn either hand into a counter-spell (W-W-S), a protection from evil (W-W-P) or resist heat (W-W-F-P), and nobody can hurt you on the first turn. Watch the warnings: when a missile is one gesture away, a palm costs you one hand for one turn; when a fireball is one gesture away, only a counter-spell, a resistance, or a counter of your own will do.

-

Then choose a spell from the sheet and pin it to a hand, and keep the other hand for answering. Cause light wounds is three gestures, a fireball five, and summoning a goblin three; a goblin that lives for four turns has done a fireball's work. Read the rival's ledger every turn as they read yours. Both of you are bluffing, and the whole page is the paper.

-

The full rules are on the rules page, with Bartle's text. If a rule here reads wrong to you, or the page misbehaves, send word; the hall's about this game has the other ways to reach the keeper.

+

Open with a wave on each hand. From W-W either hand can go on to a counter-spell (W-W-S), protection from evil (W-W-P) or resist heat (W-W-F-P). On the first turn only a knife can hurt you. Then watch the warnings. When a missile is one gesture away, a palm on one hand stops it. When a fireball is one gesture away, a palm will not help, but a counter-spell on yourself or resist heat will.

+

Next, choose a spell from the sheet and pin it to one hand, and keep the other hand free for answering. Cause light wounds takes three gestures, a fireball five, and summoning a goblin three. A goblin left alone strikes every turn, so in five turns it does a fireball's damage. Read your rival's ledger every turn, because they are reading yours, and both of you can feint.

+

The full rules are on the rules page, with Bartle's text. If a rule here reads wrong to you, or something misbehaves, send word. The hall's about this game lists the other ways to reach the keeper.

diff --git a/src/routes/join/[code]/+page.svelte b/src/routes/join/[code]/+page.svelte index d4396bb..304ac9b 100644 --- a/src/routes/join/[code]/+page.svelte +++ b/src/routes/join/[code]/+page.svelte @@ -199,7 +199,7 @@ Take your seat {:else} - the same company, at a new table; seats are held for everyone here. + The same company sits down at a new table, with a seat held for everyone here. {/if}

{/if} @@ -208,7 +208,7 @@

room {roomId}

Take a seat

-

A wizard has opened this table and is gathering opponents. Choose a name and sit; the duel begins when the host says.

+

A wizard has opened this table and is gathering opponents. Choose a name and sit down. The duel begins when the host says.