Files
i-want-to-heal-mmo/README.md
T
2026-07-10 22:03:51 -04:00

4.8 KiB
Raw Permalink Blame History

I Want To Heal — Thor healer roguelike

Playable low-poly third-person combat vertical slice for AYN Thor's dual displays.

Offline-first frontend includes three timestamped save slots, optional account sync, local/online overwrite controls, Hunter Profile statistics, boss collection logs, Settings, and PvE/PvP mode entry points.

Run

pnpm install
pnpm dev

The development server listens on 0.0.0.0:4173.

Android / AYN Thor test APK

The Android host uses Capacitor, locks to landscape, requests immersive mode and 60 Hz, and sends controller input directly to the game WebView. Build an installable debug APK:

pnpm android:apk

Output is written under android/app/build/outputs/apk/debug/. With Android platform tools and a connected Thor, build and install it with:

pnpm android:install

The first Android milestone uses the complete single-display fallback. Press Select (or Tab with a keyboard) to switch between the main game surface and the 620 × 540 tactical surface. Native routing to both physical Thor displays is the next milestone; it needs two Android display contexts backed by one shared game state rather than two independent WebViews.

TrueNAS deployment

The production preview server uses the existing deployment address and port:

  • Public URL: https://iwanttoheal.phenomrom.com
  • Host/container port: 4173
  • App directory: /mnt/usbssds/apps/iwanttoheal/app

Clone the repository into the app directory, then deploy compose.yaml. Compared with the old game configuration:

  • use corepack pnpm install --frozen-lockfile, not npm ci;
  • remove npm run db:init because this game has no server database;
  • remove COOKIE_SECURE, CORS_ORIGINS, and TRUST_PROXY; the static Vite preview server does not consume them;
  • remove /app/data; offline saves live in each player's browser/Android WebView storage, not on TrueNAS.

The existing reverse proxy can keep forwarding the public hostname to port 4173. Add server data and authentication environment variables only when an actual sync API is introduced.

Publish updates to Gitea

The repository target is:

https://git.whoagland.com/phenom/i-want-to-heal-mmo.git

Create a Gitea access token with repository write permission, expose it only for the publishing process, then publish from main:

export GITEA_TOKEN="..."
pnpm publish:gitea -- --message "Describe the update"

The script installs locked dependencies, builds the web app, runs web and Android checks, builds a debug APK, commits all project changes, pushes main, creates a version tag and Gitea prerelease, and uploads the APK plus its SHA-256 file. It uses package.json version unless that version is already tagged, then advances the patch number. Pass --version 0.2.0 to choose an explicit version.

If the TrueNAS app directory is mounted locally, publishing also performs a fast-forward-only pull. Otherwise it prints the clone/pull command to run on TrueNAS before restarting the app. The pull refuses to run when the TrueNAS checkout still points at the old game's repository; move or archive that checkout and clone the new repository first.

Preview checks without changing Git or TrueNAS:

pnpm publish:gitea -- --dry-run

Git push credentials still come from Git's credential manager. Gitea release API credentials come from GITEA_TOKEN. Never store access tokens or Android signing keys in this repository.

Controls

  • WASD / left stick: move
  • Q and E / D-pad: cycle party target
  • 16: cast Smite, Renew, Shield, Purify, Radiance, Flash Heal
  • Gamepad: X, Y, B, A, LB, RB map to those abilities
  • M: tactical map
  • I: inventory and item tooltip
  • Enter / Start: begin or reset encounter

Touch controls on lower display support party targeting, ability casting, map, and inventory.

Prototype scope

  • Five-member AI party with Disc Priest healer
  • Animated Druid healer, Knight tank, Ranger, Rogue, and Mage party models
  • One animated boss: Bulldrome, using the Bull model at 180% of its original prototype scale
  • Telegraph, charge, 0.75-second knockdown, and return-to-tank behavior
  • Three-charge cycle into a five-second stack marker and 300-damage shared pounce
  • Tank pressure, party-wide Cinder Nova, dispellable Ember Brand
  • Full cooldown, mana, healing-over-time, shield absorption, and victory/defeat simulation
  • True display ratios: 1920×1080 top and 1240×1080 bottom
  • Android layout targets: approximately 960×540 CSS pixels top and 620×540 CSS pixels bottom
  • Lower-screen typography scales against its own container, never the main page viewport

Current Android build is an installable single-display test host. Shipping to both physical Thor displays still needs distinct Android display contexts that project one authoritative game state.