Skip to content

Releases: jiafans/gomoku-rm

v1.0.1 — vellum-ready release

08 May 10:07

Choose a tag to compare

Adds the artifacts vellum needs to package and distribute gomoku-rm:

  • LICENSE (MIT)
  • icon.png (256×256 board fragment with stones, generated by packaging/make_icon.py)
  • packaging/VELBUILD — package recipe ready for vellum-dev/vellum PR

Release assets:

  • gomoku-rm — armv7 ELF, ~2 MB, e_machine=2800
  • icon.png — AppLoad icon
  • external.manifest.json — AppLoad manifest with qtfb-shim env vars

Functional changes vs v1.0.0: none. Same engine, same scenes, same
vendored evdev/libremarkable patches. Bumped to 1.0.1 so the LICENSE
file (and other vellum prerequisites) is present at the tag the
VELBUILD source URLs reference.

v1.0.0 — first verified-working release

08 May 09:59

Choose a tag to compare

First end-to-end working release of gomoku-rm on reMarkable 2.

What works

  • 19×19 board with Go-style coordinate labels and 9 star points
  • Play vs AI (3 difficulties: Easy / Medium / Hard)
  • Local 2-player on the same device
  • Touch-driven move placement
  • Win detection + winner banner + tap-to-restart
  • Save & Quit returns to main menu; auto-saves on every move; "Continue" resumes
  • Undo (single move in PvP, full round in PvAI)
  • Bilingual UI scaffolding (English / 中文 — labels switchable in Settings)

Engine

~1000 lines of Rust covering pattern recognition (five, open/closed four,
open/closed three, two), full-board evaluation summing across rows/cols/
diagonals, and negamax + alpha-beta + iterative deepening with candidate
pruning to empty cells within Chebyshev radius 2 of any stone. 3-second
time budget per move; depth 2 / 4 / 6 by difficulty.

Engine is a trait, so future versions can swap in mintaka or rapfi via
IPC without touching the rest of the codebase.

Vendored upstream patches (~10 lines each, see README §Vendored upstream fixes)

  • evdev 0.12.2 — silences got a key event despite not supporting keys
    panic from rM2's pt_mt BTN_TOUCH events
  • libremarkable 0.7.0 — derives finger.pressed from ABS_MT_TRACKING_ID
    since rM2's pt_mt does not emit ABS_MT_PRESSURE

Build & deploy

brew install zig
cargo install cargo-zigbuild
rustup target add armv7-unknown-linux-gnueabihf
cargo zigbuild --target armv7-unknown-linux-gnueabihf --release
RM_PASS='<device password>' ./packaging/deploy.sh

Known limitations

  • CJK glyphs render as missing-glyph boxes (libremarkable ships a Latin-only
    embedded font; switching language updates label semantics but proper CJK
    rendering is future work)
  • AI ceiling is amateur 1-3 dan (depth 6 with the budget); stronger play
    needs transposition tables / killer moves / mintaka or rapfi via the
    Engine trait