Mobile-first HALO built out as a roguelike card crawler with gacha, paid VIP boost, and an optional WebSocket relay for multiplayer sync and chat.
- Phone sideload: run
npm run buildand senddist/index.htmlto your device (AirDrop, email, cloud drive, or a local file server). The build inlineshalo.jsso it runs offline without extra assets. - Home screen: open
index.htmlin mobile Safari/Chrome and add it to your home screen for a lightweight PWA shell. State is on-device (localStorage), with an in-memory fallback if storage is blocked.
- Run
npm run buildto refreshdist/index.html. - Sync the HTML into the Android project:
./scripts/sync_android_assets.sh. - Open the
android-appfolder in Android Studio (Giraffe+), let it download the Android Gradle Plugin, and build app → assembleDebug. - Install
app-debug.apkon your device. The shell runs offline and keeps relay/WebSocket support when you point it at your server.
- Define pilot, quest, seed, difficulty, and mode. Seeds are deterministic—share them so squads can mirror the same Labyrinth.
- Build a 12-card Adventure Deck from your owned collection.
- Enter a run, draw encounters, play cards from your hand, then tap Resolve Beat. Momentum/Aegis/Depth/Doom drive survival; rewards convert to Credits.
- Cash out to bank rewards or crash when Doom/Aegis fail. Credits buy Pulse packs; Embers buy Radiant pulls and the VIP Blessing (rarity boost). Purchases are simulated for testing only.
An optional, ultra-light relay server lets multiple pilots sync depth/seed metadata and chat while playing the same run.
- Start the relay locally:
npm installthennpm run server(defaults tows://localhost:8787). - In the client, toggle Enable relay, set the relay URL and room (use your seed or a custom code), and hit Start / Resume Run. Sync + chat messages flow automatically once connected.
index.html– mobile UI shell.halo.js– HALO oracle, roguelike loop, gacha/deck logic, and relay client.scripts/build.js– inlineshalo.jsintodist/index.html.scripts/server.js– minimal WebSocket relay for multiplayer metadata/chat.
All content stays in this repo for easy sideloading. No external CDNs or assets are required.
The Lambda handler in halo_lambda/index.js now auto-corrects placeholder or
malformed regions (e.g., MY_AWS_REGION, LOCAL, blank) to us-east-1 so
builds do not fail when a default value is left unchanged. For production, set
AWS_REGION or AWS_DEFAULT_REGION to a valid AWS region pattern (for
example, us-west-2, us-gov-west-1, or cn-north-1) before deploying the
function.