Files
i-want-to-heal-mmo/README.md
T
2026-07-10 23:47:37 -04:00

135 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```bash
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:
```bash
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:
```bash
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
Complete first-install, local-Gitea clone, YAML, update, and verification steps:
[DEPLOYMENT.md](DEPLOYMENT.md).
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-mmo/app`
Clone from the TrueNAS-local Gitea bare repository into the app directory, then
deploy `compose.yaml`. The expected source path is:
```text
/mnt/.ix-apps/app_mounts/gitea/data/git/repositories/phenom/i-want-to-heal-mmo.git
```
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:
```text
https://git.whoagland.com/phenom/i-want-to-heal-mmo.git
```
The Mac publisher is configured with the Gitea release token. `GITEA_TOKEN` can
optionally override it for one run. Publish from `main`:
```bash
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 publisher runs where TrueNAS paths are visible, it prefers a
fast-forward-only pull directly from TrueNAS-local Gitea storage. Otherwise it
prints the exact local clone/pull commands to run in the TrueNAS shell. The pull
refuses to run when the checkout still points at the old game's repository;
archive that checkout and clone the new repository first.
Preview checks without changing Git or TrueNAS:
```bash
pnpm publish:gitea -- --dry-run
```
Git push credentials still come from Git's credential manager. The configured
Gitea token handles release creation and APK uploads. Android signing keys remain
outside the repository.
## Controls
- `WASD` / left stick: move
- `Q` and `E` / D-pad: cycle party target
- `1``6`: 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.