feat(box3): touch gamebook (tap to choose) #43

Merged
electron merged 1 commits from feat/box3-touch-gamebook into main 2026-06-19 22:37:38 +00:00
Owner

Touchscreen CYOA on the BOX-3: reads the same SD JSON pack, shows title+text+tappable choice buttons (LVGL). Hardware-validated: boots into a 6-story touch library.

Touchscreen CYOA on the BOX-3: reads the same SD JSON pack, shows title+text+tappable choice buttons (LVGL). Hardware-validated: boots into a 6-story touch library.
electron added 1 commit 2026-06-19 22:37:33 +00:00
feat(box3): touch gamebook (tap to choose)
CI / platformio (pull_request) Failing after 9m57s
CI / platformio (push) Failing after 14m8s
5519ed2f72
Context:
The Freenove gamebook is screen+buttons, the PLIP is audio+dial. The
ESP32-S3-BOX-3 has a 320x240 touchscreen, so its natural format is a
tap-to-choose "livre dont tu es le heros": read the passage on screen,
tap a choice button to navigate.

Approach:
A new gamebook module reuses the same SD pack as the master (the JSON
passages already carry screen/text/choices[label,goto]) and builds the
UI on the already-running LVGL stack: a scrollable column with the
title, the wrapped passage text, and one tappable button per choice.

Changes:
- New gamebook.c/.h: mounts the SD (bsp_sdcard_mount), reads
  /sdcard/gamebook/{library.json, <id>.json}, shows a story list, then
  per passage renders title + text + choice buttons; tapping a choice
  goes to its target, an ending offers "back to menu". cJSON runs on
  PSRAM hooks (the expanded books are ~80 KB JSON); LVGL calls are
  wrapped in bsp_display_lock at init (button callbacks already run in
  the LVGL task).
- main.c: call gamebook_init() after the scenario server is up; it
  takes over the screen when a pack is on the SD, else no-op (the phone
  UI stays).
- CMakeLists: build gamebook.c.

Impact:
With a JSON pack on its SD, the BOX-3 is a touch gamebook: tap a story,
tap your choices. Text-only (no audio needed). Hardware-validated:
boots into a 6-story touch library.
electron merged commit 5519ed2f72 into main 2026-06-19 22:37:38 +00:00
Sign in to join this conversation.