Waving Hands: a duel

Waving Hands

{#if room?.remote?.started && watching}

From the Peanut Gallery you watch {#each room.others as id, i (id)}{#if i > 0}{i === room.others.length - 1 ? ' and ' : ', '}{/if}{room.state.wizards[id].name}{/each} duel. {#if !room.remote.connected}Reconnecting to the duel.{/if}

{:else if room?.remote?.started}

You are {room.you.name}, duelling {#each room.others as id, i (id)}{#if i > 0}{i === room.others.length - 1 ? ' and ' : ', '}{/if}{room.state.wizards[id].name}{/each}. {#if !room.remote.connected}Reconnecting to the duel.{/if}

{:else}

A duel between people, played by turns whenever each of you has a moment.

{/if}
{#if room} {/if} {#if error}

{error}

{/if} {#if phrase}

On the other device, open the hall and claim this phrase within ten minutes: {phrase.phrase}

{/if} {#if room?.remote?.started && room.state.over && !watching} {@const r = room.remote}

{#if r.rematch} {room.speaker(r.rematch.by)} called for a rematch at table {r.rematch.to}. Take your seat {:else} The same company sits down at a new table, with a seat held for everyone here. {/if}

{/if} {#if joining && seatFree}

room {roomId}

Take a seat

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

Just watching? You are in the Peanut Gallery until you sit.

{/if} {#if room && lobby} {@const r = room.remote!} {@const hostName = r.seats.find((s) => s.id === r.host)?.name ?? 'the host'}
{#if watching}

At the table

{#if seatFree}

{hostName} is gathering wizards. Sit down above, or watch from the gallery until the duel begins.

{:else}

The table is full, so you watch from the Peanut Gallery. The duel begins when {hostName} says.

{/if} {:else}

room {roomId}

The table is laid

Send this link, or the code. Whoever opens it takes a seat, up to a dozen, and the duel begins when you say. Anyone who arrives once it has begun watches from the Peanut Gallery.

{/if} {#if r.rematchOf}

This is a rematch of table {r.rematchOf}, with seats held for those not yet back.

{/if} {#if !watching}
{#if r.seats.length < r.size && room.isHost} {/if} {#if room.isHost} {r.seats.length < 2 ? 'once a second wizard is seated' : `with ${r.seats.length} wizards`} {:else} {hostName} will begin the duel when the table is ready. {/if}
{#if room.isHost} {/if} {#if r.keeper && !r.challenge && !r.seats.some((s) => s.name.toLowerCase() === r.keeper.toLowerCase()) && r.seats.length + r.expected.length < r.size}

{r.keeper} keeps this site and answers every call, sometimes within the minute, sometimes after a night's sleep.{#if keeperHour} It is {keeperHour} where {r.keeper} lives.{/if} The seat is held either way.

{:else if r.challenge}

{r.keeper} has been called to the table by {room.speaker(r.challenge.by)}.{#if keeperHour} It is {keeperHour} there.{/if} A seat is held for them. If they can come now, they will take it. If they are asleep or away, they will leave a word below when they can. In the meantime you can seat a bot, invite a friend, or play another duel in a new tab. This table keeps its place in your hall until you come back.

{/if} {/if} {#if r.error}

{r.error}

{/if}
{:else if room} {:else if !error}

{joining ? 'Finding the table.' : 'Finding your seat.'}

{/if}

After Richard Bartle's Waving Hands (1977), also known as Spellbinder and Spellcaster. Read the full rules. A rule read wrong or a bug found: send word.