Update game 1.0.27
This commit is contained in:
+105
-138
@@ -1,172 +1,139 @@
|
||||
# Gearing System
|
||||
|
||||
## Goal
|
||||
## Current Rule
|
||||
|
||||
Gearing should move from boss-specific multi-item drop tables to one clear currency loop:
|
||||
The game uses fewer playable content tiers and more gear upgrade steps.
|
||||
|
||||
1. Kill bosses.
|
||||
2. Earn boss coins.
|
||||
3. Craft gear with those coins.
|
||||
4. Upgrade that boss gear into the next item-level tier with higher-rarity coins.
|
||||
Content tiers:
|
||||
|
||||
This keeps boss loot readable, removes low-percentage frustration, and makes every boss kill progress a targeted gear goal.
|
||||
| Content Tier | Unlock Level | Purpose |
|
||||
| --- | ---: | --- |
|
||||
| iLvl 1 | 1 | First real gear set |
|
||||
| iLvl 10 | 10 | Midgame jump |
|
||||
| iLvl 20 | 20 | Endgame jump |
|
||||
| iLvl 25 | 25 | Hard endgame |
|
||||
|
||||
Gear tiers:
|
||||
|
||||
| Gear Tier | How It Is Used |
|
||||
| ---: | --- |
|
||||
| 1 | Crafted from iLvl 1 content |
|
||||
| 5 | Upgrade tier from iLvl 1 content coins |
|
||||
| 10 | Crafted/upgraded from iLvl 10 content coins |
|
||||
| 15 | Gear-only upgrade tier from iLvl 10 content coins |
|
||||
| 20 | Crafted/upgraded from iLvl 20 content coins |
|
||||
| 25 | Crafted/upgraded from iLvl 25 content coins |
|
||||
|
||||
This keeps the dungeon/raid picker simple while still giving players steady gear goals.
|
||||
|
||||
## New Characters
|
||||
|
||||
New characters start with no gear equipped.
|
||||
|
||||
The first goal is to clear iLvl 1 content, earn raw boss coins, and craft the first iLvl 1 set. Starter gear exists as craftable gear, not automatic inventory.
|
||||
|
||||
## Coin Tiers
|
||||
|
||||
Coins are component items. Each coin is tied to a boss source and an item-level tier.
|
||||
Coins are component items. Each coin is tied to a boss and a content tier.
|
||||
|
||||
| Item Level | Display Color | Rarity Key | Example |
|
||||
| --- | --- | --- | --- |
|
||||
| 5 | White | common | Bulldrome Coin |
|
||||
| Content Tier | Coin Prefix | Rarity Key | Example |
|
||||
| ---: | --- | --- | --- |
|
||||
| 1 | Raw | common | Raw Bulldrome Coin |
|
||||
| 10 | Green | uncommon | Green Bulldrome Coin |
|
||||
| 15 | Blue | rare | Blue Bulldrome Coin |
|
||||
| 20 | Purple | epic | Purple Bulldrome Coin |
|
||||
| 25 | Orange | legendary | Orange Bulldrome Coin |
|
||||
|
||||
Implementation note: the current TypeScript rarity union supports `common`, `uncommon`, `rare`, and `epic`. Orange needs a new rarity key, recommended as `legendary`, plus UI color styling.
|
||||
iLvl 5 and iLvl 15 gear do not have their own playable content tier. They use coins from the previous playable tier:
|
||||
|
||||
| Gear Tier | Coin Tier Used |
|
||||
| ---: | ---: |
|
||||
| 1 | 1 |
|
||||
| 5 | 1 |
|
||||
| 10 | 10 |
|
||||
| 15 | 10 |
|
||||
| 20 | 20 |
|
||||
| 25 | 25 |
|
||||
|
||||
## Boss Loot
|
||||
|
||||
Each boss has one loot roll.
|
||||
|
||||
For now, each successful boss loot roll awards 1 to 3 coins:
|
||||
|
||||
| Roll Result | Coins Awarded |
|
||||
| --- | --- |
|
||||
| Low roll | 1 coin |
|
||||
| Normal roll | 2 coins |
|
||||
| High roll | 3 coins |
|
||||
|
||||
Recommended weighting:
|
||||
|
||||
| Coins | Chance |
|
||||
| --- | --- |
|
||||
| 1 | 50% |
|
||||
| 2 | 35% |
|
||||
| 3 | 15% |
|
||||
|
||||
The coin source comes from the defeated boss. Bulldrome drops Bulldrome coins, Rathian drops Rathian coins, and so on.
|
||||
|
||||
The coin tier comes from content difficulty or roguelike depth:
|
||||
|
||||
| Source | Coin Tier |
|
||||
| --- | --- |
|
||||
| Item level 5 content | White level 5 coins |
|
||||
| Item level 10 content | Green level 10 coins |
|
||||
| Item level 15 content | Blue level 15 coins |
|
||||
| Item level 20 content | Purple level 20 coins |
|
||||
| Item level 25 content | Orange level 25 coins |
|
||||
|
||||
## Crafting Costs
|
||||
|
||||
Gear is crafted with boss coins from the same boss and item-level tier.
|
||||
|
||||
| Gear Item Level | Cost |
|
||||
| --- | --- |
|
||||
| 5 | 5 white boss coins |
|
||||
| 10 | 10 green boss coins |
|
||||
| 15 | 15 blue boss coins |
|
||||
| 20 | 20 purple boss coins |
|
||||
| 25 | 25 orange boss coins |
|
||||
|
||||
Example:
|
||||
|
||||
- Bulldrome item-level 5 helmet costs 5 white Bulldrome coins.
|
||||
- Bulldrome item-level 10 helmet costs 10 green Bulldrome coins.
|
||||
- Rathian item-level 20 gloves cost 20 purple Rathian coins.
|
||||
|
||||
## Gear Upgrades
|
||||
|
||||
Crafting can create gear directly, but upgrades should become the preferred long-term path.
|
||||
|
||||
Upgrade rule:
|
||||
|
||||
- Existing boss gear upgrades into the next item-level version of the same boss gear.
|
||||
- Upgrade cost uses coins from the next tier.
|
||||
- Required coin quantity equals the target item level.
|
||||
Each boss drops one boss coin for the selected content tier.
|
||||
|
||||
Examples:
|
||||
|
||||
| Upgrade | Cost |
|
||||
| --- | --- |
|
||||
| Bulldrome item level 5 gear -> Bulldrome item level 10 gear | 10 green Bulldrome coins |
|
||||
| Bulldrome item level 10 gear -> Bulldrome item level 15 gear | 15 blue Bulldrome coins |
|
||||
| Bulldrome item level 15 gear -> Bulldrome item level 20 gear | 20 purple Bulldrome coins |
|
||||
| Bulldrome item level 20 gear -> Bulldrome item level 25 gear | 25 orange Bulldrome coins |
|
||||
- Bulldrome at iLvl 1 drops Raw Bulldrome Coins.
|
||||
- Tigrex at iLvl 10 drops Green Tigrex Coins.
|
||||
- Barroth at iLvl 20 drops Purple Barroth Coins.
|
||||
- Anjanath at iLvl 25 drops Orange Anjanath Coins.
|
||||
|
||||
Upgrade should consume the old item and award the upgraded item. This avoids duplicate clutter and keeps equipment identity clear.
|
||||
## Crafting And Upgrades
|
||||
|
||||
The first gear item in a boss/item line can be crafted directly. Higher versions should be reached through Upgrade.
|
||||
|
||||
Current rule:
|
||||
|
||||
- Craft iLvl 1 boss gear directly.
|
||||
- Upgrade iLvl 1 -> 5 with iLvl 1 coins.
|
||||
- Craft or upgrade iLvl 10 gear from iLvl 10 content.
|
||||
- Upgrade iLvl 10 -> 15 with iLvl 10 coins.
|
||||
- Craft or upgrade iLvl 20 gear from iLvl 20 content.
|
||||
- Craft or upgrade iLvl 25 gear from iLvl 25 content.
|
||||
|
||||
Upgrade consumes the old item and awards the upgraded item. This avoids duplicate clutter and keeps item identity clear.
|
||||
|
||||
Examples:
|
||||
|
||||
| Upgrade | Cost Source |
|
||||
| --- | --- |
|
||||
| Raw Bulldrome Helmet iLvl 1 -> Honed Bulldrome Helmet iLvl 5 | Raw Bulldrome Coins |
|
||||
| Green Tigrex Helmet iLvl 10 -> Blue Tigrex Helmet iLvl 15 | Green Tigrex Coins |
|
||||
| Purple Bulldrome Helmet iLvl 20 -> Orange Bulldrome Helmet iLvl 25 | Orange Bulldrome Coins |
|
||||
|
||||
## UI Behavior
|
||||
|
||||
The dungeon and raid picker only shows playable content tiers:
|
||||
|
||||
```text
|
||||
iLvl 1 -> iLvl 10 -> iLvl 20 -> iLvl 25
|
||||
```
|
||||
|
||||
The equipment screen still shows gear recipes for:
|
||||
|
||||
```text
|
||||
iLvl 1 -> iLvl 5 -> iLvl 10 -> iLvl 15 -> iLvl 20 -> iLvl 25
|
||||
```
|
||||
|
||||
Direct crafting is blocked for recipes that have a lower item-level version in the same boss/item line. Use the selected item's Upgrade button for those.
|
||||
|
||||
## Roguelike Loot
|
||||
|
||||
Roguelike bosses should award coins when defeated, using the same 1 to 3 coin roll.
|
||||
Roguelike gear should follow the same tier brackets.
|
||||
|
||||
Roguelike coin tier should scale by wave band:
|
||||
Recommended mapping:
|
||||
|
||||
| Waves | Coin Tier |
|
||||
| --- | --- |
|
||||
| 1-4 | Level 5 white coins |
|
||||
| 5-9 | Level 10 green coins |
|
||||
| 10-14 | Level 15 blue coins |
|
||||
| 15-19 | Level 20 purple coins |
|
||||
| 20+ | Level 25 orange coins |
|
||||
|
||||
Boss identity can be handled two ways:
|
||||
|
||||
1. Boss-based coins: use the actual boss template selected for that roguelike boss.
|
||||
2. Roguelike coins: use a generic roguelike coin per tier.
|
||||
|
||||
Recommended first pass: boss-based coins. It reuses the same crafting economy as dungeons and makes roguelike runs feel connected to the main gear chase.
|
||||
|
||||
## Roguelike Checkpoints
|
||||
|
||||
Checkpoints should unlock every 5 waves.
|
||||
|
||||
| Highest Cleared Wave | Future Start Wave |
|
||||
| --- | --- |
|
||||
| 0-4 | 1 |
|
||||
| 5-9 | 5 |
|
||||
| Stage Band | Coin Tier |
|
||||
| --- | ---: |
|
||||
| 1-4 | 1 |
|
||||
| 5-9 | 10 |
|
||||
| 10-14 | 10 |
|
||||
| 15-19 | 15 |
|
||||
| 20+ | Highest unlocked 5-wave checkpoint |
|
||||
| 15-19 | 20 |
|
||||
| 20+ | 25 |
|
||||
|
||||
Checkpoint rule:
|
||||
Boss-based coins are still preferred. A roguelike boss should award coins for its actual boss template when possible.
|
||||
|
||||
- Unlock a checkpoint after clearing its boss band.
|
||||
- Starting from a checkpoint begins at that wave band with matching coin tier.
|
||||
- Runs should still record leaderboard progress from the selected start wave so full runs and checkpoint runs can be ranked separately later.
|
||||
## Data Notes
|
||||
|
||||
Current implementation note: the roguelike screen always starts at stage 1 and only awards XP per boss. Checkpoints need saved character progress and a start-wave selector.
|
||||
Authoritative gearing data lives in SQLite seed data:
|
||||
|
||||
## Current Code Fit
|
||||
- `db/seed.sql`
|
||||
- `src/offline-starter-profile.json`
|
||||
|
||||
The existing system already has most of the required foundation:
|
||||
Run this after changing seed data:
|
||||
|
||||
- `items.slot = 'component'` can represent coins.
|
||||
- `character_inventory.quantity` already stacks components.
|
||||
- `crafting_recipes` and `crafting_recipe_components` already support coin costs.
|
||||
- `encounter_loot_rolls` and `encounter_loot_roll_items` already persist retry-safe loot awards.
|
||||
- `completeRoguelike` is already called after each roguelike boss kill for XP, so coin awards can attach to that same flow.
|
||||
```sh
|
||||
npm run db:init
|
||||
npm run offline:export
|
||||
```
|
||||
|
||||
Needed changes:
|
||||
`npm run build` already runs `offline:export`, so a production build also refreshes the offline starter profile.
|
||||
|
||||
- Replace current 4-component boss drop tables with one boss coin per boss per tier.
|
||||
- Change boss loot roll count from multiple chance slots to one 1-3 coin roll.
|
||||
- Add orange/legendary rarity support.
|
||||
- Add upgrade recipes or a dedicated upgrade endpoint.
|
||||
- Add roguelike boss coin awards.
|
||||
- Add roguelike checkpoint persistence and start-wave selection.
|
||||
- Export updated offline starter data after seed changes.
|
||||
|
||||
## Suggestions
|
||||
|
||||
Use guaranteed coin drops for now. One to three coins per boss gives steady progress and makes craft timing easy to understand.
|
||||
|
||||
Keep coins boss-specific, not slot-specific. Slot-specific components add complexity without much decision value.
|
||||
|
||||
Use upgrade-first UI. Show the next upgrade for equipped gear before showing the full crafting catalog.
|
||||
|
||||
Keep direct crafting and upgrading at the same coin cost for the target tier. Direct crafting helps new slots catch up; upgrading preserves boss gear identity.
|
||||
|
||||
Add a pity floor only if needed later. If boss kills always award coins, the system already has deterministic progress.
|
||||
|
||||
Use one orange rarity key: `legendary`. Avoid storing display color names as rarity values; colors can change without data migration.
|
||||
TrueNAS keeps its own persistent `data/game.db`. Pushing code does not merge or replace that database. The TrueNAS app applies seed/schema changes when the container starts and runs `npm run db:init`.
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
# Push Updates
|
||||
|
||||
Use this when pushing code from the Mac to `git.whoagland.com`, then updating the TrueNAS-hosted server.
|
||||
|
||||
## Rules
|
||||
|
||||
- Git deploys code only.
|
||||
- TrueNAS save data lives in `/mnt/usbssds/apps/iwanttoheal/data/game.db`.
|
||||
- Do not commit, copy, or replace `data/game.db`.
|
||||
- Do not run character reset commands unless you intentionally want a wipe.
|
||||
- Restarting the TrueNAS app runs `npm ci`, `npm run db:init`, `npm run build`, and `npm start`.
|
||||
|
||||
## Step 1: Build Web Locally
|
||||
|
||||
```sh
|
||||
cd /Users/warren/Documents/testgame/testgame
|
||||
npm run build
|
||||
```
|
||||
|
||||
This validates TypeScript, builds the browser app, and refreshes `src/offline-starter-profile.json`.
|
||||
|
||||
## Step 2: Optional Android APK
|
||||
|
||||
Only run this when building a new APK.
|
||||
|
||||
```sh
|
||||
set -e
|
||||
|
||||
cd /Users/warren/Documents/testgame/testgame
|
||||
|
||||
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
|
||||
export PATH="$JAVA_HOME/bin:$PATH"
|
||||
|
||||
VERSION="1.0.27"
|
||||
|
||||
CURRENT_CODE=$(grep -E 'versionCode [0-9]+' android/app/build.gradle | awk '{print $2}')
|
||||
NEXT_CODE=$((CURRENT_CODE + 1))
|
||||
|
||||
perl -0pi -e "s/versionCode\s+\d+/versionCode $NEXT_CODE/" android/app/build.gradle
|
||||
perl -0pi -e "s/versionName\s+\"[^\"]+\"/versionName \"$VERSION\"/" android/app/build.gradle
|
||||
|
||||
VITE_API_BASE_URL="https://iwanttoheal.phenomrom.com" npm run android:sync
|
||||
|
||||
cd android
|
||||
./gradlew clean assembleDebug
|
||||
cd ..
|
||||
|
||||
cp android/app/build/outputs/apk/debug/app-debug.apk "IWantToHeal-Thor-v$VERSION.apk"
|
||||
ls -lh "IWantToHeal-Thor-v$VERSION.apk"
|
||||
```
|
||||
|
||||
## Step 3: Commit And Push Code
|
||||
|
||||
```sh
|
||||
cd /Users/warren/Documents/testgame/testgame
|
||||
|
||||
git add .
|
||||
git commit -m "Update game 1.0.27"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
Check before committing:
|
||||
|
||||
```sh
|
||||
git status --short
|
||||
```
|
||||
|
||||
Expected: source/doc/build-output changes only. Do not stage `data/game.db`.
|
||||
|
||||
## Step 4: Optional Gitea Release For APK
|
||||
|
||||
Only run this when Step 2 created a new APK.
|
||||
|
||||
```sh
|
||||
set -e
|
||||
|
||||
cd /Users/warren/Documents/testgame/testgame
|
||||
|
||||
export GITEA_URL="https://git.whoagland.com"
|
||||
export GITEA_OWNER="phenom"
|
||||
export GITEA_REPO="i-want-to-heal"
|
||||
export GITEA_TOKEN="PASTE_TOKEN_HERE"
|
||||
|
||||
VERSION="1.0.26"
|
||||
APK="IWantToHeal-Thor-v$VERSION.apk"
|
||||
|
||||
RELEASE_JSON=$(curl -sS -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"v$VERSION\",\"target_commitish\":\"main\",\"name\":\"v$VERSION\",\"body\":\"I Want to Heal Android build v$VERSION\",\"draft\":false,\"prerelease\":false}")
|
||||
|
||||
RELEASE_ID=$(python3 -c 'import sys,json; data=json.load(sys.stdin); print(data.get("id") or data)' <<< "$RELEASE_JSON")
|
||||
|
||||
curl -sS -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases/$RELEASE_ID/assets?name=$APK" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-F "attachment=@$APK"
|
||||
```
|
||||
|
||||
## Step 5: Update TrueNAS
|
||||
|
||||
```sh
|
||||
cd /mnt/usbssds/apps/iwanttoheal/app
|
||||
git pull
|
||||
```
|
||||
|
||||
Before restarting, make a DB backup:
|
||||
|
||||
```sh
|
||||
cp /mnt/usbssds/apps/iwanttoheal/data/game.db \
|
||||
"/mnt/usbssds/apps/iwanttoheal/data/game-before-update-$(date +%Y%m%d-%H%M%S).db"
|
||||
```
|
||||
|
||||
Then restart the `iwanttoheal` app in the TrueNAS Apps UI.
|
||||
|
||||
## What Happens On Restart
|
||||
|
||||
The app command runs:
|
||||
|
||||
```sh
|
||||
npm ci && npm run db:init && npm run build && npm start
|
||||
```
|
||||
|
||||
That means:
|
||||
|
||||
- dependency changes apply
|
||||
- schema changes apply
|
||||
- seed/static-content updates apply
|
||||
- browser files rebuild
|
||||
- existing accounts and characters stay in `data/game.db`
|
||||
|
||||
`npm run db:init` should not wipe saves. Character wipes are separate manual reset operations.
|
||||
|
||||
## Resetting TrueNAS Characters
|
||||
|
||||
Only run a reset when intentionally starting everyone over.
|
||||
|
||||
Resetting the Mac database does not reset TrueNAS. TrueNAS has its own persistent DB at:
|
||||
|
||||
```text
|
||||
/mnt/usbssds/apps/iwanttoheal/data/game.db
|
||||
```
|
||||
|
||||
Back it up first, then run the reset command or reset SQL on TrueNAS.
|
||||
|
||||
## If Something Looks Wrong
|
||||
|
||||
Check the mounted DB path:
|
||||
|
||||
```sh
|
||||
ls -lh /mnt/usbssds/apps/iwanttoheal/data/game.db
|
||||
```
|
||||
|
||||
Check the latest code:
|
||||
|
||||
```sh
|
||||
cd /mnt/usbssds/apps/iwanttoheal/app
|
||||
git log --oneline -5
|
||||
```
|
||||
|
||||
Check the app API:
|
||||
|
||||
```sh
|
||||
curl http://127.0.0.1:4173/api/auth/session
|
||||
```
|
||||
@@ -0,0 +1,60 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
||||
<rect width="1280" height="720" fill="#111218"/>
|
||||
<rect x="48" y="36" width="1184" height="648" fill="#1b1c24" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="78" y="78" fill="#8f90a0" font-family="monospace" font-size="18">ADVENTURE</text>
|
||||
<text x="78" y="114" fill="#f2f0dc" font-family="monospace" font-size="34" font-weight="700">Dungeons</text>
|
||||
<text x="1075" y="88" fill="#e5b95f" font-family="monospace" font-size="18">B Back</text>
|
||||
|
||||
<text x="78" y="158" fill="#e5b95f" font-family="monospace" font-size="18">Pick Dungeon</text>
|
||||
<g>
|
||||
<rect x="78" y="178" width="335" height="128" fill="#24262f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<rect x="94" y="194" width="72" height="72" fill="#481e29" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="116" y="241" fill="#ef6574" font-family="monospace" font-size="28" font-weight="700">AH</text>
|
||||
<text x="184" y="216" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Ashen Halls</text>
|
||||
<text x="184" y="246" fill="#aaa9b7" font-family="monospace" font-size="16">Level 1 • 6 Players</text>
|
||||
<text x="184" y="276" fill="#e5b95f" font-family="monospace" font-size="16">Selected</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="436" y="178" width="335" height="128" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="452" y="194" width="72" height="72" fill="#2a263f" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="474" y="241" fill="#8ca9ff" font-family="monospace" font-size="28" font-weight="700">SC</text>
|
||||
<text x="542" y="216" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Sunken Crypt</text>
|
||||
<text x="542" y="246" fill="#aaa9b7" font-family="monospace" font-size="16">Level 5 • 6 Players</text>
|
||||
</g>
|
||||
<g opacity="0.65">
|
||||
<rect x="794" y="178" width="335" height="128" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="810" y="194" width="72" height="72" fill="#223226" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="832" y="241" fill="#70d990" font-family="monospace" font-size="28" font-weight="700">GM</text>
|
||||
<text x="900" y="216" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Grove Maw</text>
|
||||
<text x="900" y="246" fill="#aaa9b7" font-family="monospace" font-size="16">Level 10 • 6 Players</text>
|
||||
</g>
|
||||
|
||||
<text x="78" y="356" fill="#e5b95f" font-family="monospace" font-size="18">Pick Part</text>
|
||||
<g>
|
||||
<rect x="78" y="376" width="282" height="82" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="112" y="426" fill="#f2f0dc" font-family="monospace" font-size="24" font-weight="700">Part 1</text>
|
||||
<text x="250" y="426" fill="#8f90a0" font-family="monospace" font-size="16">3 fights</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="382" y="376" width="282" height="82" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="416" y="426" fill="#f2f0dc" font-family="monospace" font-size="24" font-weight="700">Part 2</text>
|
||||
<text x="554" y="426" fill="#8f90a0" font-family="monospace" font-size="16">Locked</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="686" y="376" width="282" height="82" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="720" y="426" fill="#f2f0dc" font-family="monospace" font-size="24" font-weight="700">Part 3</text>
|
||||
<text x="858" y="426" fill="#8f90a0" font-family="monospace" font-size="16">Locked</text>
|
||||
</g>
|
||||
|
||||
<text x="78" y="508" fill="#e5b95f" font-family="monospace" font-size="18">Pick Difficulty</text>
|
||||
<rect x="78" y="528" width="240" height="64" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="116" y="568" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Normal</text>
|
||||
<rect x="342" y="528" width="240" height="64" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="380" y="568" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Heroic</text>
|
||||
<rect x="606" y="528" width="240" height="64" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="644" y="568" fill="#777988" font-family="monospace" font-size="20" font-weight="700">Mythic L10</text>
|
||||
|
||||
<rect x="914" y="508" width="238" height="86" fill="#3a2618" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="982" y="559" fill="#f2f0dc" font-family="monospace" font-size="24" font-weight="700">Start</text>
|
||||
<text x="78" y="638" fill="#aaa9b7" font-family="monospace" font-size="17">Idea A: All choices are button grids. D-pad works everywhere. No native dropdown.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1,44 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
||||
<rect width="1280" height="720" fill="#111218"/>
|
||||
<rect x="48" y="36" width="1184" height="648" fill="#1b1c24" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="78" y="78" fill="#8f90a0" font-family="monospace" font-size="18">ADVENTURE</text>
|
||||
<text x="78" y="114" fill="#f2f0dc" font-family="monospace" font-size="34" font-weight="700">Dungeons</text>
|
||||
<text x="1014" y="88" fill="#e5b95f" font-family="monospace" font-size="18">LB/RB Change</text>
|
||||
|
||||
<rect x="78" y="150" width="760" height="398" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="112" y="184" width="164" height="164" fill="#481e29" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="151" y="280" fill="#ef6574" font-family="monospace" font-size="48" font-weight="700">AH</text>
|
||||
<text x="306" y="202" fill="#8f90a0" font-family="monospace" font-size="18">CURRENT DUNGEON</text>
|
||||
<text x="306" y="248" fill="#f2f0dc" font-family="monospace" font-size="34" font-weight="700">Ashen Halls</text>
|
||||
<text x="306" y="286" fill="#aaa9b7" font-family="monospace" font-size="18">Guide a six-player party through burning halls.</text>
|
||||
<text x="306" y="324" fill="#e5b95f" font-family="monospace" font-size="18">Level 1 • 6 Players • 100 XP</text>
|
||||
<rect x="112" y="384" width="690" height="104" fill="#15161c" stroke="#33343d" stroke-width="3"/>
|
||||
<text x="138" y="425" fill="#f2f0dc" font-family="monospace" font-size="19">Ashen Halls</text>
|
||||
<text x="356" y="425" fill="#8f90a0" font-family="monospace" font-size="19">Sunken Crypt</text>
|
||||
<text x="608" y="425" fill="#8f90a0" font-family="monospace" font-size="19">Grove Maw</text>
|
||||
<rect x="128" y="448" width="146" height="8" fill="#e5b95f"/>
|
||||
|
||||
<rect x="874" y="150" width="278" height="398" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="906" y="194" fill="#e5b95f" font-family="monospace" font-size="18">Setup</text>
|
||||
<text x="906" y="232" fill="#f2f0dc" font-family="monospace" font-size="22" font-weight="700">Part</text>
|
||||
<rect x="906" y="252" width="68" height="54" fill="#29291f" stroke="#e5b95f" stroke-width="4"/>
|
||||
<text x="932" y="286" fill="#f2f0dc" font-family="monospace" font-size="20">1</text>
|
||||
<rect x="990" y="252" width="68" height="54" fill="#20222a" stroke="#41404a" stroke-width="3"/>
|
||||
<text x="1016" y="286" fill="#8f90a0" font-family="monospace" font-size="20">2</text>
|
||||
<rect x="1074" y="252" width="68" height="54" fill="#20222a" stroke="#41404a" stroke-width="3"/>
|
||||
<text x="1100" y="286" fill="#8f90a0" font-family="monospace" font-size="20">3</text>
|
||||
|
||||
<text x="906" y="350" fill="#f2f0dc" font-family="monospace" font-size="22" font-weight="700">Difficulty</text>
|
||||
<rect x="906" y="372" width="236" height="52" fill="#29291f" stroke="#e5b95f" stroke-width="4"/>
|
||||
<text x="938" y="405" fill="#f2f0dc" font-family="monospace" font-size="18">Normal</text>
|
||||
<rect x="906" y="436" width="236" height="52" fill="#20222a" stroke="#41404a" stroke-width="3"/>
|
||||
<text x="938" y="469" fill="#aaa9b7" font-family="monospace" font-size="18">Heroic</text>
|
||||
|
||||
<rect x="78" y="580" width="238" height="70" fill="#15161c" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="120" y="624" fill="#e5b95f" font-family="monospace" font-size="22">Prev</text>
|
||||
<rect x="342" y="580" width="238" height="70" fill="#15161c" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="392" y="624" fill="#e5b95f" font-family="monospace" font-size="22">Next</text>
|
||||
<rect x="874" y="580" width="278" height="70" fill="#3a2618" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="963" y="624" fill="#f2f0dc" font-family="monospace" font-size="24" font-weight="700">Start</text>
|
||||
<text x="78" y="684" fill="#aaa9b7" font-family="monospace" font-size="17">Idea B: One big focused dungeon. Shoulder buttons or side buttons cycle dungeon.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,48 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
||||
<rect width="1280" height="720" fill="#111218"/>
|
||||
<rect x="48" y="36" width="1184" height="648" fill="#1b1c24" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="78" y="78" fill="#8f90a0" font-family="monospace" font-size="18">ADVENTURE</text>
|
||||
<text x="78" y="114" fill="#f2f0dc" font-family="monospace" font-size="34" font-weight="700">Mission Board</text>
|
||||
<text x="1046" y="88" fill="#e5b95f" font-family="monospace" font-size="18">A Start</text>
|
||||
|
||||
<rect x="78" y="150" width="500" height="474" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="112" y="194" fill="#e5b95f" font-family="monospace" font-size="18">Available Runs</text>
|
||||
<g>
|
||||
<rect x="112" y="222" width="432" height="82" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="136" y="255" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Ashen Halls • Part 1</text>
|
||||
<text x="136" y="283" fill="#aaa9b7" font-family="monospace" font-size="16">Normal • iLvl 1 • 100 XP</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="112" y="318" width="432" height="82" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="136" y="351" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Ashen Halls • Part 1</text>
|
||||
<text x="136" y="379" fill="#aaa9b7" font-family="monospace" font-size="16">Heroic • iLvl 5 • 140 XP</text>
|
||||
</g>
|
||||
<g opacity="0.65">
|
||||
<rect x="112" y="414" width="432" height="82" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="136" y="447" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Sunken Crypt • Part 1</text>
|
||||
<text x="136" y="475" fill="#aaa9b7" font-family="monospace" font-size="16">Normal • Locked Level 5</text>
|
||||
</g>
|
||||
<g opacity="0.65">
|
||||
<rect x="112" y="510" width="432" height="82" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="136" y="543" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Ashen Halls • Part 2</text>
|
||||
<text x="136" y="571" fill="#aaa9b7" font-family="monospace" font-size="16">Normal • Locked until Part 1 clear</text>
|
||||
</g>
|
||||
|
||||
<rect x="616" y="150" width="536" height="474" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="650" y="184" width="130" height="130" fill="#481e29" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="684" y="262" fill="#ef6574" font-family="monospace" font-size="42" font-weight="700">AH</text>
|
||||
<text x="812" y="194" fill="#8f90a0" font-family="monospace" font-size="18">SELECTED RUN</text>
|
||||
<text x="812" y="238" fill="#f2f0dc" font-family="monospace" font-size="30" font-weight="700">Ashen Halls</text>
|
||||
<text x="812" y="278" fill="#e5b95f" font-family="monospace" font-size="20">Part 1 • Normal</text>
|
||||
<text x="650" y="358" fill="#aaa9b7" font-family="monospace" font-size="17">Fastest path for controller play. One list item is the exact run.</text>
|
||||
<text x="650" y="394" fill="#aaa9b7" font-family="monospace" font-size="17">No separate dungeon, phase, or difficulty controls.</text>
|
||||
|
||||
<rect x="650" y="440" width="470" height="64" fill="#15161c" stroke="#33343d" stroke-width="3"/>
|
||||
<text x="680" y="480" fill="#f2f0dc" font-family="monospace" font-size="18">Health 1.00x Damage 1.00x XP 1.0x</text>
|
||||
<rect x="650" y="532" width="220" height="62" fill="#3a2618" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="716" y="570" fill="#f2f0dc" font-family="monospace" font-size="22" font-weight="700">Start</text>
|
||||
<rect x="900" y="532" width="220" height="62" fill="#15161c" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="955" y="570" fill="#e5b95f" font-family="monospace" font-size="22">Loot</text>
|
||||
|
||||
<text x="78" y="684" fill="#aaa9b7" font-family="monospace" font-size="17">Idea C: Flat mission list. Most controller-friendly, least setup flexibility on one screen.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,72 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720">
|
||||
<rect width="1280" height="720" fill="#111218"/>
|
||||
<rect x="48" y="36" width="1184" height="648" fill="#1b1c24" stroke="#090a0d" stroke-width="4"/>
|
||||
<text x="78" y="78" fill="#8f90a0" font-family="monospace" font-size="18">ADVENTURE</text>
|
||||
<text x="78" y="114" fill="#f2f0dc" font-family="monospace" font-size="34" font-weight="700">Dungeons</text>
|
||||
<text x="958" y="88" fill="#e5b95f" font-family="monospace" font-size="18">B Back • A Select</text>
|
||||
|
||||
<text x="78" y="158" fill="#e5b95f" font-family="monospace" font-size="18">1. Pick Item Level</text>
|
||||
<g>
|
||||
<rect x="78" y="178" width="170" height="72" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="125" y="222" fill="#f2f0dc" font-family="monospace" font-size="22">5</text>
|
||||
<text x="108" y="240" fill="#8f90a0" font-family="monospace" font-size="12">Initiate</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="268" y="178" width="170" height="72" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="310" y="222" fill="#f2f0dc" font-family="monospace" font-size="22">10</text>
|
||||
<text x="300" y="240" fill="#8f90a0" font-family="monospace" font-size="12">Veteran</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="458" y="178" width="170" height="72" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="500" y="222" fill="#f2f0dc" font-family="monospace" font-size="22">15</text>
|
||||
<text x="488" y="240" fill="#8f90a0" font-family="monospace" font-size="12">Champion</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="648" y="178" width="170" height="72" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="690" y="222" fill="#f2f0dc" font-family="monospace" font-size="22" font-weight="700">20</text>
|
||||
<text x="690" y="240" fill="#e5b95f" font-family="monospace" font-size="12">Mythic</text>
|
||||
</g>
|
||||
<g opacity="0.65">
|
||||
<rect x="838" y="178" width="170" height="72" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="880" y="222" fill="#777988" font-family="monospace" font-size="22">25</text>
|
||||
<text x="864" y="240" fill="#777988" font-family="monospace" font-size="12">Level 20</text>
|
||||
</g>
|
||||
|
||||
<text x="78" y="304" fill="#e5b95f" font-family="monospace" font-size="18">2. Pick Run</text>
|
||||
<g>
|
||||
<rect x="78" y="324" width="335" height="154" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<rect x="96" y="346" width="64" height="64" fill="#481e29" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="114" y="387" fill="#ef6574" font-family="monospace" font-size="24" font-weight="700">AH</text>
|
||||
<text x="178" y="360" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Ashen Halls</text>
|
||||
<text x="178" y="389" fill="#aaa9b7" font-family="monospace" font-size="15">Mythic • iLvl 20</text>
|
||||
<text x="96" y="446" fill="#e5b95f" font-family="monospace" font-size="16">Part 1 unlocked</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="436" y="324" width="335" height="154" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="454" y="346" width="64" height="64" fill="#2a263f" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="472" y="387" fill="#8ca9ff" font-family="monospace" font-size="24" font-weight="700">SC</text>
|
||||
<text x="536" y="360" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Sunken Crypt</text>
|
||||
<text x="536" y="389" fill="#aaa9b7" font-family="monospace" font-size="15">Mythic • iLvl 20</text>
|
||||
<text x="454" y="446" fill="#aaa9b7" font-family="monospace" font-size="16">Part 1 unlocked</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="794" y="324" width="335" height="154" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<rect x="812" y="346" width="64" height="64" fill="#223226" stroke="#090a0d" stroke-width="3"/>
|
||||
<text x="830" y="387" fill="#70d990" font-family="monospace" font-size="24" font-weight="700">GM</text>
|
||||
<text x="894" y="360" fill="#f2f0dc" font-family="monospace" font-size="20" font-weight="700">Grove Maw</text>
|
||||
<text x="894" y="389" fill="#aaa9b7" font-family="monospace" font-size="15">Mythic • iLvl 20</text>
|
||||
<text x="812" y="446" fill="#777988" font-family="monospace" font-size="16">Locked dungeon</text>
|
||||
</g>
|
||||
|
||||
<text x="78" y="532" fill="#e5b95f" font-family="monospace" font-size="18">3. Pick Part</text>
|
||||
<rect x="78" y="552" width="250" height="64" fill="#29291f" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="124" y="592" fill="#f2f0dc" font-family="monospace" font-size="20">Part 1</text>
|
||||
<rect x="352" y="552" width="250" height="64" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="398" y="592" fill="#aaa9b7" font-family="monospace" font-size="20">Part 2</text>
|
||||
<rect x="626" y="552" width="250" height="64" fill="#20222a" stroke="#41404a" stroke-width="4"/>
|
||||
<text x="672" y="592" fill="#aaa9b7" font-family="monospace" font-size="20">Part 3</text>
|
||||
<rect x="926" y="552" width="226" height="64" fill="#3a2618" stroke="#e5b95f" stroke-width="5"/>
|
||||
<text x="991" y="592" fill="#f2f0dc" font-family="monospace" font-size="22" font-weight="700">Start</text>
|
||||
|
||||
<text x="78" y="662" fill="#aaa9b7" font-family="monospace" font-size="17">Idea D: submenu flow. Pick item level first, then only compatible dungeon cards appear.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
Reference in New Issue
Block a user