- os.user_data_dir needs ole32.lib on Windows - Build workflow gets a Windows cross-build job with a cached SDK - Drop the backtick from Jua's codepoints (the font lacks it) - Update AGENTS.md and README for decks, controls, scores and layout Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
2.6 KiB
Markdown
61 lines
2.6 KiB
Markdown
# HanjaKanaMun
|
|
|
|
Odin + raylib memory card game for learning Japanese, Korean and Thai scripts.
|
|
|
|
Match each symbol with its reading: hiragana and katakana with romaji, Hangul letters with their
|
|
Revised Romanization, and Thai consonants with their sound and name word. Three difficulties
|
|
(6, 12 or 16 pairs), best scores per deck, and a card deck themed on each country's flag.
|
|
|
|
## Controls
|
|
|
|
| | |
|
|
|---|---|
|
|
| Mouse | Click cards and buttons |
|
|
| Arrows / WASD / hjkl | Move between cards |
|
|
| Enter / Space | Flip the selected card (Enter also plays again) |
|
|
| 1-3 | Pick a language or deck in menus |
|
|
| Left / Right | Change difficulty |
|
|
| Esc | Back (quits from the main menu) |
|
|
|
|
Scores are saved to `profile.json` in the user data folder (`~/Library/Application Support/HanjaKanaMun`
|
|
on macOS, `~/.local/share/HanjaKanaMun` on Linux, `%APPDATA%\HanjaKanaMun` on Windows).
|
|
|
|
## Development
|
|
|
|
Requires [Odin](https://odin-lang.org) (dev-2026-09) and [just](https://just.systems).
|
|
|
|
```sh
|
|
just run # build and play (debug)
|
|
just check # type-check with -vet
|
|
just test # run tests
|
|
just package 1.0 # native release build -> build/HanjaKanaMun_1.0_<os>_<arch>.tar.gz
|
|
just windows-deps # Linux only: fetch Windows SDK/CRT (xwin) and raylib.lib
|
|
just package-windows 1.0 # cross-compiled Windows build -> build/HanjaKanaMun_1.0_windows_x86_64.zip
|
|
```
|
|
|
|
The Windows build needs `lld-link`. On macOS, `brew install lld` and set `LLD_LINK`, and point `XWIN_SDK` and
|
|
`RAYLIB_WINDOWS` at an xwin splat and Odin's Windows `vendor/raylib/windows` folder (the Linux/macOS Odin releases
|
|
don't include `raylib.lib`).
|
|
|
|
### Neovim
|
|
|
|
`ols.json` and `odinfmt.json` configure the [ols](https://github.com/DanielGavin/ols) language server and formatter.
|
|
Install ols (e.g. `:MasonInstall ols`) and enable it with nvim-lspconfig: `vim.lsp.enable('ols')`.
|
|
Formatting goes through ols (`vim.lsp.buf.format()`), or `just fmt` if `odinfmt` is on your PATH.
|
|
|
|
## CI
|
|
|
|
- `.gitea/workflows/gitea-build.yaml`: check, test and build on pushes and PRs to `main` and `develop`, plus a
|
|
Windows cross-build so link problems show up before a release.
|
|
- `.gitea/workflows/gitea-release.yaml`: on a version tag like `v1.0`, builds Linux and Windows packages, uploads them
|
|
to the Gitea generic package registry (`HanjaKanaMun/1.0`) and creates a Gitea release with both attached.
|
|
Needs a `TOKEN` secret with package write access.
|
|
- `.gitea/actions/setup`: shared toolchain setup (apt packages, Odin, just).
|
|
|
|
Release: `git tag v1.0 && git push origin v1.0`
|
|
|
|
## Credits
|
|
|
|
Fonts, all under the SIL Open Font License (license files in `assets/`):
|
|
M PLUS Rounded 1c (UI and kana), Jua (Hangul), Mali (Thai).
|