Xenocide Uprising

The box score, live and in reach

A descent leaves two records. There is the narration, which the Reader tells as a ladder of fights, and there is now the box score: a table, one row per turn, with the play and its arithmetic, the entity’s Dominion falling, the piles, and every seat’s hand. Where the narration reads like a story, the table reads like a scoresheet, and different questions want different ones.

Built from the descent, not beside it

The box score holds no rules of its own. It steps the saved moves back through the real engine and, after each step, reads the board and the line the engine just wrote. So it cannot drift from the game it describes, and it draws its cards through the same deck the board does, which means it reskins and can never show a card the game would render differently. It lives beside the Reader as a second face, a toggle at the top, so the two are one component and cannot disagree.

For a spectator, while it happens

It works live. A person watching a descent through Gazing can open the box score and watch it fill in, refreshing every few seconds while the descent runs. That took care, because a live descent must not leak a hand: the box score fails closed, showing counts where a finished descent shows cards, and the identities arrive only once the descent is over. The whole thing rides the same watch link the narration does, so a link that lets someone read a descent never lets them claim a seat in it.

The nits

A table of numbers wants to be read cleanly, so a run of small fixes followed: the columns hold their width when you show or hide the hands, so nothing jumps when you click; the numeric columns centre and breathe; on a wide screen the body font steps up, the relief a browser zoom gives, done for you; and the row you hover lights up, while the row you click open holds a bar down its left edge, so it is always clear which one you are reading.