# HAREM QUEST: Stake Engine submit checklist (release mwbrbii4, math v3, 2026-11-11)

Legend: **[x]** done here · **[ ] JACOB** needs Jacob (Studio account, decisions, outside services).

Generated by `game/tools/release.py` (edit the template there, not this file). The release folder is
`armorbreak/game/release/`, also at https://games.bet-llm.com/haremquest/release/

| File | What |
|---|---|
| `haremquest_front_mwbrbii4.zip` | Front end: `index.html` at the zip root, all URLs relative, 14.5 MB, 456 files. sha256 `31bd1eecd3806c0ec620362f762134c23f8f00ebf4f0025d9092158477ff4e88` |
| `haremquest_math_v3_20261029.zip` | Math: `index.json` + 8 LUTs + 8 `books_*.jsonl.zst` at the zip root, stored (284.8 MB). sha256 `9bbd4dcc14495360ebbec8b070f27fcdef4df62ab351556a98084f8bc82a2405` |
| `verify_publish.txt` | `verify_publish.py` output on the extracted math zip |
| `ASSET_LICENCES.md` / `ASSET_LICENCES_AUDIO.md` | Asset sources and licences |

| mode | name | cost | RTP | hit rate | max win | odds of max |
|---|---|---|---|---|---|---|
| `base` | BASE | 1× | 96.50% | 34.63% | 25,000× | 1 in 7,648,184 |
| `lure` | LURE | 1.25× | 96.50% | 30.36% | 25,000× | 1 in 3,824,091 |
| `synergy` | SYNERGY SPIN | 20× | 96.50% | 100% | 5,238× | 1 in 180,318 |
| `act1` | ACT I: DUNGEON | 100× | 96.50% | 100% | 25,000× | 1 in 40,000 |
| `portal` | MYSTERY PORTAL | 150× | 96.50% | 100% | 25,000× | 1 in 19,512 |
| `act2` | ACT II: SPIRE | 250× | 96.50% | 100% | 25,000× | 1 in 10,000 |
| `pact` | DARK PACT | 400× | 96.50% | 100% | 25,000× | 1 in 3,000 |
| `act3` | ACT III: DEMON CASTLE | 500× | 96.50% | 100% | 25,000× | 1 in 4,000 |

## Verified here
- [x] **Math:** the math zip was extracted into a fresh folder and `verify_publish.py` run on it: ALL CRITICAL CHECKS PASS.
  All 8 modes at 96.50%, max win 25,000× (synergy capped lower by design), positional LUT↔book match, RTP band, SD, file limits.
- [x] **Books:** `math/check_books.py` replayed every publish book: ALL BOOKS PASS (see `math/V3_PUBLISH_READY.md`; not rerun by release.py).
- [x] **Front-end zip hygiene:** no source maps, screenshots, gallery, launcher or paper-RGS files; `version.txt` == `mwbrbii4`; every URL relative; every packed asset present; rules-screen stats match `math/modestats.json`.
- [x] **Test hooks** (`?force/?showcase`, `?timescale`, `?beats`, `__hq.force/foe/audioUnlock/_dbg`) are compiled off (`__HQ_DEV__` = false) and only switch on when the RGS answers `meta.paper` (our paper RGS) or in gallery mode on games.bet-llm.com / felizarta.info, so they are inert on Stake's RGS.
- [ ] **Front end compliance** on the exact zip unzipped into `/haremquest/release_test/`: PENDING: run compliance against release_test/play.html, then rerun tools/release.py --note "..."

## Stake review feedback 2026-11-06
Stake flagged two things on STACKED (2026-11-06). HAREM QUEST had both, so they are fixed in this front end; the math zip is unchanged.
- [x] **Balance shows the currency's decimals only.** It is floored, so it can't read `$997.009` (USD 2, JPY 0, KWD 3). Wins can still show up to 4 decimals. Fixed in `platform.js` `money(v, {balance:true})` and `hud.js`.
- [x] **Replay card.** It used to be a strip ("REPLAY · mode · BET · REAL COST") plus a PLAY/AGAIN spin button. Now a replay opens on Stake's "Bet Replay" card: Mode / Base Bet / Cost Multiplier / **Total Bet Cost** / Payout Multiplier / **Total Win**, a ▶ Start Replay button, and the "No bets will be placed" footer.
  - After the round the button reads ▶ Replay Again. The strip stays visible during playback.
  - Social wording: Base Play / Feature Multiplier / Total Play Worth / Final Multiplier.
  - The card fits popout S (400×225) up to 4K.
  - New `src/replay_card.js`, called from `main.js`. Gallery mode keeps its tap-to-replay.
- [x] Tests: see the release notes.

## A. Decisions only Jacob can make
- [ ] **JACOB: licences.** Before going live, check the terms for real-money gambling use for:
  - **Mai studio art:** symbols, frame, backgrounds, emblem.
  - **WAI-Illustrious characters:** FAIPL-1.0-SD. Outputs are unclaimed, but SD prohibited-use rules apply.
  - **MiniMax voices:** no gambling clause found, not verified.
  - **Stable Audio music** and **Stable Audio Open SFX** (Community License: commercial use only under $1M a year in revenue).
- [ ] **JACOB: content risk.** Adult original characters, lingerie / bikini-armour ceiling, no nudity; the tile and loader use the text-free emblem. The "HAREM" title and the fanservice are above the PG-13 pin-up level Stake has approved before; reviewers can mark "explicit / poor taste" at their discretion.
- [ ] **JACOB: name check.** engineplayers.com Name check / Game DNA for "HAREM QUEST". Mechanics are inspired by Twentyside's *Party Wipe*; every character and enemy design is original.
- [ ] **JACOB: animation.** Motion is code-driven (fly-ins, springs, particles); frame animation is deferred to productionizing.
- [ ] **JACOB: tile + profile art** (not made yet), and a launch plan (Stake Challenge request, streamers, X posts).

## B. Studio steps
1. [ ] **Files → Import files.** Upload the `haremquest_front_mwbrbii4.zip` contents as the front end and the `haremquest_math_v3_20261029.zip` contents as the math. Both zips are flat. Folder upload needs Chrome or Edge.
2. [ ] **Publish new version.** Math and front end publish separately (a math change means re-uploading both).
3. [ ] **Play Game against the real RGS:**
   - a base spin and a tumble win;
   - the LURE toggle (1.25×);
   - BUY → a campaign (ACT I 100×) with the confirm screen, played to the end;
   - a replay from bet history;
   - a phone check, both portrait and landscape.
4. [ ] **Media → Create tile:** text-free emblem / heroine art (Stake adds the title).
5. [ ] **Game details:** name, description, per-mode Game Info (table above), then submit.
