Skip to content

Add Lexicube, a word-dice party game with a post-game dictionary - #57

Open
abcd-ca wants to merge 14 commits into
BandarLabs:mainfrom
abcd-ca:app-lexicube
Open

Add Lexicube, a word-dice party game with a post-game dictionary#57
abcd-ca wants to merge 14 commits into
BandarLabs:mainfrom
abcd-ca:app-lexicube

Conversation

@abcd-ca

@abcd-ca abcd-ca commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

A tabletop word-dice game for the panel: sixteen dice land shaken and rotated, a three-minute clock runs, and everyone writes the words they find on their own paper, as at a physical tray. When the pens go down the app settles the arguments — validity from an embedded SOWPODS list (267,750 words, answered offline), near-miss suggestions for misspellings, and definitions through the runtime's offline dictionary service.

Some choices worth a reviewer's glance:

  • The board is one published picture rather than text cells, because the dice lie rotated the way they landed and text cells only draw upright. Letters are rasterized from an embedded DejaVu Serif Bold (Bitstream Vera licence included) and turned in quarter turns; the platform face is the fallback. Pausing swaps in a letterless twin drawn by the same renderer at the same size, so stopping the clock hides the letters without moving the layout.
  • No capabilities. The panel and the embedded list are the whole game.
  • Licences: the word list is the pf-sowpods packaging (MIT); the underlying SOWPODS compilation's provenance is what it is, so flagging it plainly — happy to swap word lists if you'd rather.
  • Layout tests hold every screen to four panels (Clara BW, Libra Colour, Nia, Sage), pin the button bar to one position across all game phases, and the keyboard screen is held to the panels the SDK keyboard itself fits on, which excludes the Nia's 758-pixel width.

cargo test --workspace, clippy pedantic with --all-features, and cargo fmt --check are all clean. Developed and played daily on a Libra Colour (see #49); the app itself is device-independent.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@abhishek-anand

Copy link
Copy Markdown
Contributor

@abcd-ca Great app, would love to play this post merge. Some licensing issues I am concerned about. The DejaVu font licensing looks fine, but the embedded SOWPODS corpus as far as I can see has no authoritative redistribution chain: pf-sowpods  only labels the package MIT and provides no license/provenance for the underlying data. If we canreplace it with a clearly licensed word list, or document explicit permission and ship the required notices and dependencies clearly.

Also, please raise  minimum_cobalt_version  to  0.2.4 , since dictionary lookup is unavailable in earlier advertised versions.

@abcd-ca

abcd-ca commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for catching this. You're right that the MIT label on pf-sowpods only covers the packaging, and the underlying SOWPODS data traces back to Collins, so there was no clean chain to document. I've replaced it with ENABLE (172,820 words), the public-domain list compiled for word games by Alan Beale and M. Cooper, and noted the provenance in the app's README. It leans North American and predates a few newer Scrabble additions like QI, but since Lexicube only scores words of three letters or more, the practical difference at the table is small.

I've also raised minimum_cobalt_version to 0.2.4 as suggested.

abcd-ca added 14 commits August 31, 2026 17:10
Sixteen letter dice on a 4x4 board, a three-minute clock, and pause that
actually hides the letters. Players find words by eye and write them on
paper, as at a physical tray; when the pens go down the app settles the
arguments: validity from an embedded SOWPODS list (267,750 words,
answered offline), near-miss suggestions for misspellings, and
definitions through the runtime's offline dictionary service when the
owner has installed dictionaries.

No capabilities. Layout tests hold every screen to four panels (Clara
BW, Libra Colour, Nia, Sage); the keyboard screen is held to the panels
the SDK keyboard itself fits on, which excludes the Nia's 758-pixel
width. The word list is the pf-sowpods packaging (MIT) of the SOWPODS
list; the dice faces are the tabletop set's letter distribution.
The board is now drawn as one published picture so each die lies
rotated the way it landed, letters rasterized from the platform's
Atkinson Hyperlegible display face and turned in quarter turns; pausing
still hides the board, and a missing typeface falls back to the upright
text cells. The mid-game clock is set as display type, and a large
spacer keeps a hurried tap at the tray's edge off New game. House
scoring in the instructions: letters minus two, Qu counts as two,
plurals are their own words.
An app presented on its own had no way off the panel short of the
session's idle limit. Exit hands control back to whatever launched the
app: the launcher, or the session's end when presented alone.
The launcher's splash carries the summary, but an app this quick to
start flashes it past before anybody can read it. The ready screen is
the one screen with nothing else to do, so the words live there.
Pausing now shows a letterless twin of the board picture, drawn by the
same renderer at the same size, so covering the board never changes its
shape and never leaks a letter. The picture's height allowance clears
every panel's width, so the board fills the content area. The controls
sit at the foot of the panel behind a fill, with a strip of paper under
them.
The dice letters are set in DejaVu Serif Bold, embedded with its
Bitstream Vera licence, as the plastic dice are printed; the platform
face stays as the fallback. The mid-game clock drops from display type
to title size, which reads lighter at the same glance. A tappable line
under the clock fast-forwards the round to its last two seconds; strip
or gate it before the store submission.
The renderer never scales a picture past its own pixels, so the board
bitmap grows to 1200 to reach the Libra Colour's panel edge to edge; the
grey rides the protocol's chunked path. The covered board's outlines
drop to half strength so a glance says out of play, and Paused. is
drawn as a picture at the clock's size in a lighter grey, because the
text nodes offer no size and tone control together.
The letter-count table said in five rows what the rule says in one
sentence, so the rows become examples instead: cat, bird, birds, and
quiz, which also show the plural and Qu rules being applied. A new
layout test pins the button bar to one position across every phase at
the Libra Colour's metrics, which the fill already guaranteed and
nothing proved.
Ending early is a real move at the table: everyone is out of words, so
why sit out the clock. Same mechanism, a player-facing name, and no
longer anything to strip before the store submission.
What the game is, how a table plays it, and where every borrowed piece
came from, licences included.
The mid-game board and a checked word with its offline definitions,
captured from a Kobo Libra Colour with 'kobo shot --device'.
Rebased onto main, which brought three CI requirements the branch
predates, all found by the failing PR runs:

- The store manifest now requires a floor no older than the protocol
  the app is built to speak. The workspace is protocol 11, first
  supported by Cobalt 0.3.1, so the dictionary-lookup floor of 0.2.4
  rises to 0.3.1 (and the lock file catches the crate up to the 0.3.1
  workspace version it inherits).

- The generated app pages refuse an app with no screenshot metadata,
  and the home page must shelve every app. Lexicube's board shot from
  the real panel joins media/site/apps at the site's 1072x1448 (resized
  from the Libra Colour's 1264x1680), the generator's screenshot map
  and docs/index.html gain their entries, and the generated page and
  sitemap line are committed as the check demands.

- Adding a workspace member changes Cargo.toml and Cargo.lock, which
  are release inputs to every app package, so every published app takes
  a patch bump exactly as the auto-update PR (BandarLabs#80) did for the same
  reason.
@abhishek-anand

abhishek-anand commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Thanks for the updates. One licensing issue remains: the embedded DejaVu Serif font is distributed without its required license notice. Could you include the notice in the app bundle or use another font?

Edit: On rechecking it seems DejaVu is in public domain. Just need to confirm from an official source since a sister font is already present on Kobo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants