Wiz-War sixth edition {#if local.active} hotseat {:else if net.roomId} room {net.roomId} {/if} {net.status === "connected" ? "" : "reconnecting…"}
{#if showHelp} (showHelp = false)} /> {/if} {#if net.error} {/if} {#if net.transferCode}
Speak this phrase into your other device (good for 10 minutes, one use): {net.transferCode.code}
{/if} {#if local.handoffTo}
local.takeSeat()} onkeydown={(e) => e.key === "Enter" && local.takeSeat()}>
pass the device to
{local.handoffTo}
tap when only they can see the screen
{/if} {#if !net.roomId && !local.active}
Wiz-War
A game of magical combat in a stone labyrinth
or join one
{#if local.hasSave()} {/if}
{#if net.seats.length > 0}
your games {#if !net.notificationsEnabled} {/if}
{#each net.seats as seat (seat.roomId + seat.name)} {@const g = net.games.find((x) => x.roomId === seat.roomId && x.name === seat.name)}
{/each}
{/if}
{:else if !local.active && !net.started}
Room {net.roomId}
Share the code. Two to six wizards enter the maze.
    {#each net.players as p (p)}
  • {p}{p === net.hostId ? " — host" : ""}
  • {/each}
{#if net.you === net.hostId} {:else}

Waiting for {net.hostId} to flip the boards…

{/if}
{:else if view}
{#if selectedDef || youMustDiscard || discardMode || discardSelection.size > 0}
{#if youMustDiscard} Hand over the limit — mark cards and discard. {:else if discardMode && discardSelection.size === 0} Mark the cards to throw away, then confirm. {/if} {#if discardSelection.size > 0} {/if} {#if discardMode || (discardSelection.size > 0 && !youMustDiscard)} {/if} {#if selectedDef} {selectedDef.name} {#if edgeSelectMode}— click a wall line{/if} {#if selectedDef.cardType === "attack" && !edgeSelectMode && !cellSelectMode} — click a target{attachedNumber ? ` (powered by a ${numberTotal})` : " (tap a number card to power it)"} {/if} {#if attachedMods.length > 0} [+ {attachedMods.map((m) => cardDef(m.cardId).name).join(", ")}] {/if} {#if selectedCard?.cardId === "boobytrap"} — place 4 tokens ({trapCells.length}/4; the first is real) {/if} {#if selectedCard && TWO_CELL_CARDS.has(selectedCard.cardId)} {tradeFrom ? "— now the second square" : "— click the first square"} {/if} {#if selectedCard?.cardId === "rotate-sector"} — click the sector {/if} {#if selectedCard?.cardId === "relocate-sector"} {pendingSectorFrom ? "— now the destination area" : "— click the sector to move"} {/if} {#if selectedCard && NAMED_CARDS.has(selectedCard.cardId)} {#if selectedCard.cardId === "deja-vu"} {:else} — then click the target {/if} {/if} {#if selectedCard?.cardId === "waterbolt"} (knockback {numberTotal - wbDamage}) {/if} {#if selectedCard?.cardId === "power-run"} {/if} {#if selectedCard && CONFIRM_CAST.has(selectedCard.cardId)} {/if} {#if selectedCard && isNumberCard(selectedCard.cardId)} {/if} {/if}
{/if}
{#if isYourTurn && onWarpToken} {/if} {#if isYourTurn} {/if}
{#each view.yourHand as card (card.instanceId)} m.instanceId === card.instanceId)} marked={discardSelection.has(card.instanceId)} displayed={view.players.find((p) => p.id === view.you)?.displayed.some((c) => c.instanceId === card.instanceId) ?? false} charges={view.wandCharges[card.instanceId] ?? null} onclick={() => selectCard(card)} /> {/each}
{/if}