first commit
This commit is contained in:
@@ -0,0 +1,84 @@
|
|||||||
|
# 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`.
|
||||||
|
|
||||||
|
## 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`
|
||||||
|
|
||||||
|
Copy the repository into the app directory, then deploy `compose.yaml`. The old
|
||||||
|
app's `db:init` step is intentionally omitted because this game has no database.
|
||||||
|
The existing reverse proxy can keep forwarding the public hostname to port
|
||||||
|
`4173`.
|
||||||
|
|
||||||
|
## Publish updates to Gitea
|
||||||
|
|
||||||
|
The repository target is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
https://git.whoagland.com/phenom/i-want-to-heal-mmo.git
|
||||||
|
```
|
||||||
|
|
||||||
|
Publish a checked update from the `main` branch:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm publish:gitea -- --message "Describe the update"
|
||||||
|
```
|
||||||
|
|
||||||
|
The script installs locked dependencies, builds, runs tests, commits all project
|
||||||
|
changes, and pushes `main`. If the TrueNAS app directory is mounted locally, it
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm publish:gitea -- --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
Gitea credentials must come from Git's credential manager or an SSH remote. Do
|
||||||
|
not store access tokens in this 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 build is browser-based for fast iteration. Shipping to separate physical Thor displays needs an Android host that presents the game viewport and tactical React surface on distinct display contexts.
|
||||||
Reference in New Issue
Block a user