diff --git a/webapp/README.md b/webapp/README.md index 5ad1377..f3cc5d1 100644 --- a/webapp/README.md +++ b/webapp/README.md @@ -1,58 +1,169 @@ -

Laravel Logo

+# OPHI-118 webapp -

-Build Status -Total Downloads -Latest Stable Version -License -

+Laravel app that renders every on-stream overlay for the OPHI-118 Twitch rig and +hosts the streamer's control surfaces. Runs under supervisord on `http://127.0.0.1:1118/`. -## About Laravel +> Looking for the rig-wide picture (OBS, MPD, twitch-bot, deployment)? +> See [`../README.md`](../README.md). This file is just the webapp. -Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: +## What's in here -- [Simple, fast routing engine](https://laravel.com/docs/routing). -- [Powerful dependency injection container](https://laravel.com/docs/container). -- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. -- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). -- Database agnostic [schema migrations](https://laravel.com/docs/migrations). -- [Robust background job processing](https://laravel.com/docs/queues). -- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). +### Control panel — `/` -Laravel is accessible, powerful, and provides tools required for large, robust applications. +Tile-based dashboard. Entry point from a browser bookmark; not used by OBS itself. -## Learning Laravel +![Control panel](resources/img/screenshots/home.webp) -Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. +- **ONBOARD** — opens the project-loading wizard. +- **SCENES** — opens the full route index. +- **ophi118.com** — public channel landing page. +- **gamez.ciemnosc.com** — self-hosted game-server roster. -In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. +### Onboard wizard — `/onboard` -You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. +Web equivalent of `php artisan rig:loading`. Compiles the Project Loading manifest +(game, subtitle, countdown, camera/mic state) and optionally pushes the channel +title + category to Twitch via Helix. -## Agentic Development +![Onboard form](resources/img/screenshots/onboard1.webp) -Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: +- **Type-ahead game search** against the Twitch Helix `search/categories` + endpoint, debounced. ↑/↓/Enter/Esc keys to pick a match; locks the `gameId`. +- **Live preview** mirrors what the `/loading` overlay will render — every edit + re-renders the terminal-style output immediately. +- **Stepper** for the countdown, **ENABLED/DISABLED toggles** for camera/mic, + **push-to-Twitch** checkbox to commit the channel update via Helix. +- **Graceful fallback**: with `TWITCH_CLIENT_ID` / `TWITCH_ACCESS_TOKEN` unset, + the search disables and the manifest still saves locally. + +![Onboard preview](resources/img/screenshots/onboard2.webp) + +### Scenes index — `/scenes` + +All overlay URLs the OBS browser-sources point at, plus the data endpoints. + +![Scenes](resources/img/screenshots/scenes-page.webp) + +### Overlay routes + +Browser sources in `basic/scenes/Default_Stream_HUD.json` consume these. Edits +to the Blade views are picked up on the next OBS **Refresh cache** — no server +restart needed. + +| Route | Purpose | +|---|---| +| `/landing` | Fallout-style "PLEASE STAND BY" + telemetry rotator | +| `/loading` | Terminal-style Project Loading + countdown | +| `/game` | Game HUD (camera-frame OBS-WS sync, status bar) | +| `/desktop` | Desktop HUD (camera + screen-capture frames) | +| `/goodbye` | Sign-off terminal + "OFFLINE FOR" counter | +| `/music-box` | Full-screen music box terminal | +| `/music-box/widget` | Compact 549×880 widget | +| `/music-box/cover` | Album-art widget (`?bars=0` for compact mode) | +| `/music-box/nc` | ncurses-styled 2-pane variant | +| `/music-daemon` | Passive WebSocket listener (diagnostic) | + +### Data + control endpoints + +| Route | Notes | +|---|---| +| `GET /data/playlist.js` | Returns `window.__PLAYLIST = {...};` with ETag | +| `GET /cover.jpg` | Streams `bridges/cover.jpg` (kept fresh by `mpd-state.py`) | +| `GET /track?p=` | Audio stream — path-traversal-guarded | +| `POST /cmd/{skip\|prev\|pause\|resume}` | Broadcasts `mpd:cmd` over OBS WebSocket | + +## Artisan commands + +Each lives at `app/Console/Commands/Rig*Command.php`. Run from the `webapp/` +directory. ```bash -composer require laravel/boost --dev - -php artisan boost:install +php artisan rig:setup # gen public/js/obs-config.js + OBS_WS_* in .env +php artisan rig:telemetry # refresh storage/data/telemetry.json +php artisan rig:telemetry --collect # re-prompt every field interactively +php artisan rig:loading # interactive Project Loading manifest (CLI mirror of /onboard) +php artisan rig:playlist # reindex audio dirs → storage/data/playlist.json +php artisan rig:cmd skip # CLI mirror of POST /cmd/skip ``` -Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. +## Running it -## Contributing +The supervisord program file lives at [`../scripts/obs-webapp.supervisord.conf`](../scripts/obs-webapp.supervisord.conf) +and is installed (root-owned) to `/etc/supervisor.d/obs-webapp.conf` by +`scripts/deploy-rig.sh`. -Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). +```bash +sudo supervisorctl status obs-webapp # → RUNNING +sudo supervisorctl restart obs-webapp # after route / controller / .env changes +tail -F storage/logs/supervisord.{out,err}.log +``` -## Code of Conduct +For local hacking without supervisord: -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). +```bash +php artisan serve --host=127.0.0.1 --port=1118 +``` -## Security Vulnerabilities +## When to restart -If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. +| Change | Action | +|---|---| +| Blade view (`resources/views/`) | OBS → right-click source → **Refresh cache** | +| Static CSS / JS (`public/`) | Same — Refresh cache | +| Route / controller / service / config / `.env` | `sudo supervisorctl restart obs-webapp` | -## License +## Layout -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +``` +webapp/ +├── app/ +│ ├── Console/Commands/ rig:setup, rig:telemetry, rig:loading, +│ │ rig:playlist, rig:cmd +│ ├── Http/Controllers/ Overlays/{Landing,Loading,Game,Desktop, +│ │ Goodbye,MusicBox,MusicDaemon}, Data, +│ │ MusicCommand, Audio, Onboard +│ ├── Services/ ObsWsClient (Pawl), TwitchHelix, +│ │ HardwareSnapshot +│ └── Support/RigData.php +├── resources/ +│ ├── views/ +│ │ ├── home.blade.php / +│ │ ├── scenes.blade.php /scenes +│ │ ├── onboard.blade.php /onboard +│ │ ├── overlays/ per-scene overlays +│ │ ├── partials/ topbar, hud-strip, crt-overlays, … +│ │ └── layouts/ overlay base layout +│ └── img/ favicon + screenshots (this README) +├── public/ +│ ├── css/hud.css shared HUD chrome, scanlines, terminal styling +│ ├── js/ hud, crt-static, obs-ws-bootstrap, obs-ws-mini +│ ├── audio/static-hum.wav ffmpeg_source (not browser-served) +│ └── favicon.ico → symlink to ../resources/img/favicon.ico +├── routes/web.php +├── config/rig.php storage paths, OBS WS creds, Twitch keys +└── storage/data/ rig:* commands write JSON here + ├── loading.json + ├── playlist.json + └── telemetry.json +``` + +## Config + +`.env` keys the webapp cares about: + +``` +APP_URL=http://127.0.0.1:1118 + +OBS_WS_URL=ws://localhost:4455 +OBS_WS_PASSWORD=… # written by `php artisan rig:setup` + +TWITCH_CLIENT_ID=… +TWITCH_ACCESS_TOKEN=… # legacy TWITCH_TOKEN is also accepted +TWITCH_BROADCASTER_ID=… + +RIG_NAME=… +OBS_PROFILE=ophi118 +MUSIC_DIR_1=… +``` + +See [`.env.example`](.env.example) for the full set. diff --git a/webapp/app/Http/Controllers/OnboardController.php b/webapp/app/Http/Controllers/OnboardController.php index b097f41..2a72f54 100644 --- a/webapp/app/Http/Controllers/OnboardController.php +++ b/webapp/app/Http/Controllers/OnboardController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Services\TwitchHelix; +use App\Support\OldenEra; use App\Support\RigData; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -18,13 +19,19 @@ use Throwable; */ class OnboardController extends Controller { - public function show(RigData $rig, TwitchHelix $twitch) + public function show(RigData $rig, TwitchHelix $twitch, OldenEra $olden) { return view('onboard', [ 'manifest' => $rig->loading(), 'telemetry' => $rig->telemetry(), 'trackCount' => $rig->playlistCount(), 'twitchEnabled' => $twitch->enabled(), + 'oldenEra' => [ + 'gameId' => OldenEra::GAME_ID, + 'assetBase' => OldenEra::URL, + 'catalog' => $olden->catalog(), + 'manifest' => $olden->manifest(), + ], ]); } @@ -47,7 +54,7 @@ class OnboardController extends Controller return response()->json(['matches' => $hits]); } - public function submit(Request $request, RigData $rig, TwitchHelix $twitch): JsonResponse + public function submit(Request $request, RigData $rig, TwitchHelix $twitch, OldenEra $olden): JsonResponse { $data = $request->validate([ 'game' => 'required|string|max:200', @@ -76,6 +83,28 @@ class OnboardController extends Controller json_encode($manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n" ); + $oldenPath = null; + if (($manifest['gameId'] ?? null) === OldenEra::GAME_ID) { + $factions = array_keys($olden->catalog()); + $extra = $request->validate([ + 'olden.color' => 'required|in:red,blue', + 'olden.my.faction' => 'required|string|in:' . implode(',', $factions), + 'olden.my.hero' => 'required|string|max:120', + 'olden.enemy.faction' => 'required|string|in:' . implode(',', $factions), + 'olden.enemy.hero' => 'required|string|max:120', + 'olden.map' => 'nullable|string|max:200', + ])['olden']; + + $oldenPath = $olden->writeManifest([ + 'compiledAt' => gmdate('Y-m-d\TH:i:s\Z'), + 'gameId' => OldenEra::GAME_ID, + 'color' => $extra['color'], + 'my' => $extra['my'], + 'enemy' => $extra['enemy'], + 'map' => isset($extra['map']) && $extra['map'] !== '' ? $extra['map'] : null, + ]); + } + $twitchStatus = null; if (!empty($data['pushTwitch']) && $twitch->enabled() && !empty($manifest['gameId'])) { try { @@ -88,10 +117,11 @@ class OnboardController extends Controller } return response()->json([ - 'ok' => true, - 'manifest' => $manifest, - 'twitch' => $twitchStatus, - 'path' => str_replace(base_path() . '/', '', $path), + 'ok' => true, + 'manifest' => $manifest, + 'twitch' => $twitchStatus, + 'path' => str_replace(base_path() . '/', '', $path), + 'oldenPath' => $oldenPath ? str_replace(base_path() . '/', '', $oldenPath) : null, ]); } diff --git a/webapp/app/Http/Controllers/Overlays/GameController.php b/webapp/app/Http/Controllers/Overlays/GameController.php index 5acfeea..0e01760 100644 --- a/webapp/app/Http/Controllers/Overlays/GameController.php +++ b/webapp/app/Http/Controllers/Overlays/GameController.php @@ -3,14 +3,22 @@ namespace App\Http\Controllers\Overlays; use App\Http\Controllers\Controller; +use App\Support\OldenEra; use App\Support\RigData; class GameController extends Controller { - public function show(RigData $rig) + public function show(RigData $rig, OldenEra $olden) { + $manifest = $rig->loading(); + $isOlden = ($manifest['gameId'] ?? null) === OldenEra::GAME_ID; + $oldenManifest = $isOlden ? $olden->manifest() : []; + return view('overlays.game', [ - 'manifest' => $rig->loading(), + 'manifest' => $manifest, + 'olden' => !empty($oldenManifest) ? $oldenManifest : null, + 'oldenAssetBase' => OldenEra::URL, + 'rigName' => (string) (config('rig.streamer_nick') ?: 'OPHI118'), ]); } } diff --git a/webapp/app/Services/TwitchHelix.php b/webapp/app/Services/TwitchHelix.php index b7211a8..96f064d 100644 --- a/webapp/app/Services/TwitchHelix.php +++ b/webapp/app/Services/TwitchHelix.php @@ -10,8 +10,9 @@ use RuntimeException; * Thin Twitch Helix client. Replaces twitch-bot/search-game.py + set-channel.py * for use from `php artisan rig:loading`. * - * Requires TWITCH_CLIENT_ID + TWITCH_TOKEN (user OAuth token with the + * Requires TWITCH_CLIENT_ID + TWITCH_ACCESS_TOKEN (user OAuth token with the * channel:manage:broadcast scope) and TWITCH_BROADCASTER_ID in .env. + * Legacy TWITCH_TOKEN is still accepted as a fallback (see config/rig.php). */ class TwitchHelix { diff --git a/webapp/app/Support/OldenEra.php b/webapp/app/Support/OldenEra.php new file mode 100644 index 0000000..0a83237 --- /dev/null +++ b/webapp/app/Support/OldenEra.php @@ -0,0 +1,78 @@ +}/*.png. + */ + public function catalog(): array + { + if ($this->catalogCache !== null) return $this->catalogCache; + + $root = resource_path('games/olden-era'); + $out = []; + + foreach (glob($root . '/factions/*.png') ?: [] as $factionPng) { + $faction = pathinfo($factionPng, PATHINFO_FILENAME); + $heroes = []; + foreach (glob($root . '/heroes/' . $faction . '/*.png') ?: [] as $heroPng) { + $name = pathinfo($heroPng, PATHINFO_FILENAME); + $heroes[] = [ + 'name' => $name, + 'portrait' => self::URL . '/heroes/' . rawurlencode($faction) . '/' . rawurlencode($name) . '.png', + ]; + } + usort($heroes, fn($a, $b) => strcasecmp($a['name'], $b['name'])); + $out[$faction] = [ + 'logo' => self::URL . '/factions/' . rawurlencode($faction) . '.png', + 'heroes' => $heroes, + ]; + } + + ksort($out); + return $this->catalogCache = $out; + } + + public function manifest(): array + { + $path = $this->manifestPath(); + if (!is_file($path)) return []; + $parsed = json_decode((string) @file_get_contents($path), true); + return is_array($parsed) ? $parsed : []; + } + + public function writeManifest(array $data): string + { + $path = $this->manifestPath(); + @mkdir(dirname($path), 0775, true); + file_put_contents( + $path, + json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n" + ); + return $path; + } + + public function manifestPath(): string + { + return rtrim(config('rig.storage_data'), '/') . '/olden-era-manifest.json'; + } +} diff --git a/webapp/config/rig.php b/webapp/config/rig.php index 6287eef..0b850c8 100644 --- a/webapp/config/rig.php +++ b/webapp/config/rig.php @@ -31,6 +31,7 @@ return [ |--------------------------------------------------------------------------- */ 'rig_name' => env('RIG_NAME'), + 'streamer_nick' => env('STREAMER_NICK', 'OPHI118'), 'obs_studio_dir' => env('OBS_STUDIO_DIR', base_path('..')), 'obs_profile' => env('OBS_PROFILE', 'ophi118'), @@ -51,8 +52,10 @@ return [ |--------------------------------------------------------------------------- */ 'twitch' => [ - 'client_id' => env('TWITCH_CLIENT_ID'), - 'token' => env('TWITCH_TOKEN'), + 'client_id' => env('TWITCH_CLIENT_ID'), + // Name aligned with twitch-bot/.env (TWITCH_ACCESS_TOKEN); old TWITCH_TOKEN + // kept as a fallback so pre-existing webapp/.env files still work. + 'token' => env('TWITCH_ACCESS_TOKEN', env('TWITCH_TOKEN')), 'broadcaster_id' => env('TWITCH_BROADCASTER_ID'), ], ]; diff --git a/webapp/public/css/hud.css b/webapp/public/css/hud.css index 90857ac..ce2a883 100644 --- a/webapp/public/css/hud.css +++ b/webapp/public/css/hud.css @@ -574,3 +574,116 @@ body.camera-hud-body { } .np-block .title { color: var(--ink); } .np-block .time { color: var(--ink-dim); } + +/* Olden Era matchup — right-aligned on the status-bar's LIVE/game-name line. */ +.matchup { + margin-left: auto; + display: inline-flex; + align-items: center; + gap: 14px; + font-size: 16px; + letter-spacing: 0.16em; +} +.matchup .m-side { + display: inline-flex; + align-items: center; + gap: 10px; +} +.matchup .m-faction { + width: 34px; + height: 34px; + object-fit: contain; + filter: drop-shadow(0 0 6px rgba(7, 8, 13, 0.9)); +} +.matchup .m-hero { + width: 38px; + height: 38px; + object-fit: cover; + border-radius: 50%; + border: 1px solid rgba(232, 232, 224, 0.35); + background: rgba(0, 0, 0, 0.4); +} +.matchup .m-name { + color: var(--ink); + font-weight: 700; + letter-spacing: 0.14em; +} +.matchup .m-vs { + color: var(--hud-dim); + font-weight: 700; + letter-spacing: 0.32em; + font-size: 14px; +} +.matchup .m-on { + color: var(--hud-dim); + font-size: 13px; + letter-spacing: 0.32em; + margin-left: 6px; +} +.matchup .m-map { + color: var(--hud); + font-size: 15px; + letter-spacing: 0.18em; +} +.matchup-red .m-my .m-name { + color: #ff6a5e; + text-shadow: 0 0 6px rgba(230, 58, 46, 0.55); +} +.matchup-blue .m-my .m-name { + color: #6ec5ff; + text-shadow: 0 0 6px rgba(58, 166, 255, 0.55); +} +.matchup-red .m-my .m-hero { border-color: rgba(230, 58, 46, 0.7); } +.matchup-blue .m-my .m-hero { border-color: rgba(58, 166, 255, 0.7); } + +/* ──────────────────────────────────────────────────────────────── + * Webapp navigation breadcrumb (used by /, /scenes, /onboard). + * Distinct from the in-scene .hud strip so overlays stay untouched. + * ──────────────────────────────────────────────────────────────── */ +.crumb-bar { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + align-items: center; + font-family: var(--mono); + font-size: 14px; + font-weight: 700; + color: var(--hud); + letter-spacing: 0.10em; + padding-bottom: 14px; + margin-bottom: 28px; + border-bottom: 1px solid rgba(79, 210, 255, 0.25); +} +.crumb-bar > :nth-child(2) { justify-self: center; } +.crumb-bar > :nth-child(3) { justify-self: end; } + +.crumbs { display: flex; align-items: center; gap: 12px; } +.crumbs .led { + display: inline-block; + width: 9px; height: 9px; + border-radius: 50%; + background: var(--onair); + box-shadow: 0 0 8px var(--onair); + animation: rec-blink 1.6s ease-in-out infinite; +} +.crumb { color: var(--hud); text-decoration: none; transition: color 120ms ease, text-shadow 120ms ease; } +.crumb-root { color: var(--hud-dim); } +.crumb-root:hover{ color: var(--hud); text-shadow: 0 0 8px var(--hud-glow); } +.crumb-here { color: var(--hud); text-shadow: 0 0 8px var(--hud-glow); cursor: default; } +.crumbs .sep { color: var(--hud-dim); opacity: 0.6; } + +.crumb-ctx, .crumb-clock { color: var(--hud); } +.crumb-ctx .dim, .crumb-clock .dim { color: var(--hud-dim); margin-right: 8px; } + +/* ──────────────────────────────────────────────────────────────── + * Webapp page shell — used by every non-overlay browser page + * (/, /scenes, /onboard) so the crumb-bar and content sit at the + * same viewport anchor on every page. + * Overlays keep .overlay-body / .camera-hud-body for OBS sizing. + * ──────────────────────────────────────────────────────────────── */ +body.page-shell { + background: var(--bg); + position: relative; + padding: 32px 56px; + min-height: 100vh; + overflow: auto; +} diff --git a/webapp/public/favicon.ico b/webapp/public/favicon.ico deleted file mode 100644 index e69de29..0000000 diff --git a/webapp/public/favicon.ico b/webapp/public/favicon.ico new file mode 120000 index 0000000..d311daf --- /dev/null +++ b/webapp/public/favicon.ico @@ -0,0 +1 @@ +../resources/img/favicon.ico \ No newline at end of file diff --git a/webapp/public/games b/webapp/public/games new file mode 120000 index 0000000..20b005d --- /dev/null +++ b/webapp/public/games @@ -0,0 +1 @@ +../resources/games \ No newline at end of file diff --git a/webapp/resources/games/olden-era/README.md b/webapp/resources/games/olden-era/README.md new file mode 100644 index 0000000..e73bf34 --- /dev/null +++ b/webapp/resources/games/olden-era/README.md @@ -0,0 +1 @@ +Files here belongs to Unfrozen and are copies from https://wiki.hoodedhorse.com/Heroes_of_Might_and_Magic_Olden_Era - used only for game streaming purposes. diff --git a/webapp/resources/games/olden-era/factions/Dungeon.png b/webapp/resources/games/olden-era/factions/Dungeon.png new file mode 100644 index 0000000..15d16fd Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Dungeon.png differ diff --git a/webapp/resources/games/olden-era/factions/Grove.png b/webapp/resources/games/olden-era/factions/Grove.png new file mode 100644 index 0000000..426cc59 Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Grove.png differ diff --git a/webapp/resources/games/olden-era/factions/Hive.png b/webapp/resources/games/olden-era/factions/Hive.png new file mode 100644 index 0000000..e873e54 Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Hive.png differ diff --git a/webapp/resources/games/olden-era/factions/Necropolis.png b/webapp/resources/games/olden-era/factions/Necropolis.png new file mode 100644 index 0000000..463eb29 Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Necropolis.png differ diff --git a/webapp/resources/games/olden-era/factions/Schism.png b/webapp/resources/games/olden-era/factions/Schism.png new file mode 100644 index 0000000..2e8dfbc Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Schism.png differ diff --git a/webapp/resources/games/olden-era/factions/Temple.png b/webapp/resources/games/olden-era/factions/Temple.png new file mode 100644 index 0000000..82511c9 Binary files /dev/null and b/webapp/resources/games/olden-era/factions/Temple.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Creta, daughter of Navarr.png b/webapp/resources/games/olden-era/heroes/Dungeon/Creta, daughter of Navarr.png new file mode 100644 index 0000000..7c1bc58 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Creta, daughter of Navarr.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Devir, son of Devir.png b/webapp/resources/games/olden-era/heroes/Dungeon/Devir, son of Devir.png new file mode 100644 index 0000000..c058a41 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Devir, son of Devir.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Enatee.png b/webapp/resources/games/olden-era/heroes/Dungeon/Enatee.png new file mode 100644 index 0000000..4816828 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Enatee.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Glastor.png b/webapp/resources/games/olden-era/heroes/Dungeon/Glastor.png new file mode 100644 index 0000000..6431038 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Glastor.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Gleard the Grey.png b/webapp/resources/games/olden-era/heroes/Dungeon/Gleard the Grey.png new file mode 100644 index 0000000..31ca144 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Gleard the Grey.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Kelarr, son of Navarr.png b/webapp/resources/games/olden-era/heroes/Dungeon/Kelarr, son of Navarr.png new file mode 100644 index 0000000..309e3fa Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Kelarr, son of Navarr.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Kieran.png b/webapp/resources/games/olden-era/heroes/Dungeon/Kieran.png new file mode 100644 index 0000000..8f56f34 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Kieran.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Lodos.png b/webapp/resources/games/olden-era/heroes/Dungeon/Lodos.png new file mode 100644 index 0000000..aaeaef4 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Lodos.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Motley.png b/webapp/resources/games/olden-era/heroes/Dungeon/Motley.png new file mode 100644 index 0000000..6e31e14 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Motley.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Mouaren.png b/webapp/resources/games/olden-era/heroes/Dungeon/Mouaren.png new file mode 100644 index 0000000..ea4a68b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Mouaren.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Rhea.png b/webapp/resources/games/olden-era/heroes/Dungeon/Rhea.png new file mode 100644 index 0000000..ae2edee Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Rhea.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Sister Deira.png b/webapp/resources/games/olden-era/heroes/Dungeon/Sister Deira.png new file mode 100644 index 0000000..c6bc85a Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Sister Deira.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Stinger.png b/webapp/resources/games/olden-era/heroes/Dungeon/Stinger.png new file mode 100644 index 0000000..9f627bd Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Stinger.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Sunny Rauktol.png b/webapp/resources/games/olden-era/heroes/Dungeon/Sunny Rauktol.png new file mode 100644 index 0000000..9cbc44f Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Sunny Rauktol.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Tellaris the Betrayed.png b/webapp/resources/games/olden-era/heroes/Dungeon/Tellaris the Betrayed.png new file mode 100644 index 0000000..9237460 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Tellaris the Betrayed.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Typhona.png b/webapp/resources/games/olden-era/heroes/Dungeon/Typhona.png new file mode 100644 index 0000000..5c7a871 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Typhona.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Ylwari.png b/webapp/resources/games/olden-era/heroes/Dungeon/Ylwari.png new file mode 100644 index 0000000..617d019 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Ylwari.png differ diff --git a/webapp/resources/games/olden-era/heroes/Dungeon/Zakron the Great.png b/webapp/resources/games/olden-era/heroes/Dungeon/Zakron the Great.png new file mode 100644 index 0000000..516c1aa Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Dungeon/Zakron the Great.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Aeliniel.png b/webapp/resources/games/olden-era/heroes/Grove/Aeliniel.png new file mode 100644 index 0000000..516183a Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Aeliniel.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Alluring Sh'a.png b/webapp/resources/games/olden-era/heroes/Grove/Alluring Sh'a.png new file mode 100644 index 0000000..4cd0590 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Alluring Sh'a.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Aunt Daliar.png b/webapp/resources/games/olden-era/heroes/Grove/Aunt Daliar.png new file mode 100644 index 0000000..a0905d7 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Aunt Daliar.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Echolily.png b/webapp/resources/games/olden-era/heroes/Grove/Echolily.png new file mode 100644 index 0000000..569e2b7 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Echolily.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Eith.png b/webapp/resources/games/olden-era/heroes/Grove/Eith.png new file mode 100644 index 0000000..76f29e0 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Eith.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Elder Tss'kish.png b/webapp/resources/games/olden-era/heroes/Grove/Elder Tss'kish.png new file mode 100644 index 0000000..51fad92 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Elder Tss'kish.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Faleor.png b/webapp/resources/games/olden-era/heroes/Grove/Faleor.png new file mode 100644 index 0000000..19f1ab7 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Faleor.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Gingertail.png b/webapp/resources/games/olden-era/heroes/Grove/Gingertail.png new file mode 100644 index 0000000..4c42b7c Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Gingertail.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Glacia.png b/webapp/resources/games/olden-era/heroes/Grove/Glacia.png new file mode 100644 index 0000000..0d1aaa5 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Glacia.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Gorel Spearhead.png b/webapp/resources/games/olden-era/heroes/Grove/Gorel Spearhead.png new file mode 100644 index 0000000..e181612 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Gorel Spearhead.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Halon.png b/webapp/resources/games/olden-era/heroes/Grove/Halon.png new file mode 100644 index 0000000..a78a254 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Halon.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Mreowa.png b/webapp/resources/games/olden-era/heroes/Grove/Mreowa.png new file mode 100644 index 0000000..122bfd8 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Mreowa.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Octavia.png b/webapp/resources/games/olden-era/heroes/Grove/Octavia.png new file mode 100644 index 0000000..16aa24d Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Octavia.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Old Pilgrim.png b/webapp/resources/games/olden-era/heroes/Grove/Old Pilgrim.png new file mode 100644 index 0000000..dbe03f0 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Old Pilgrim.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Sullie.png b/webapp/resources/games/olden-era/heroes/Grove/Sullie.png new file mode 100644 index 0000000..19bf172 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Sullie.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/The Minstrel.png b/webapp/resources/games/olden-era/heroes/Grove/The Minstrel.png new file mode 100644 index 0000000..48909b5 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/The Minstrel.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Vatawna.png b/webapp/resources/games/olden-era/heroes/Grove/Vatawna.png new file mode 100644 index 0000000..c9176fb Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Vatawna.png differ diff --git a/webapp/resources/games/olden-era/heroes/Grove/Vim.png b/webapp/resources/games/olden-era/heroes/Grove/Vim.png new file mode 100644 index 0000000..31e8666 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Grove/Vim.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Abigor, Duke of Battle.png b/webapp/resources/games/olden-era/heroes/Hive/Abigor, Duke of Battle.png new file mode 100644 index 0000000..f97e6eb Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Abigor, Duke of Battle.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Bathym, Duke of Jewels.png b/webapp/resources/games/olden-era/heroes/Hive/Bathym, Duke of Jewels.png new file mode 100644 index 0000000..891c7ae Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Bathym, Duke of Jewels.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Curson, Duke of Rage.png b/webapp/resources/games/olden-era/heroes/Hive/Curson, Duke of Rage.png new file mode 100644 index 0000000..45e7c25 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Curson, Duke of Rage.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Fleu.png b/webapp/resources/games/olden-era/heroes/Hive/Fleu.png new file mode 100644 index 0000000..d18a703 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Fleu.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Goldentongue.png b/webapp/resources/games/olden-era/heroes/Hive/Goldentongue.png new file mode 100644 index 0000000..bce29a7 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Goldentongue.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Groo.png b/webapp/resources/games/olden-era/heroes/Hive/Groo.png new file mode 100644 index 0000000..feab7c4 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Groo.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Khariseth.png b/webapp/resources/games/olden-era/heroes/Hive/Khariseth.png new file mode 100644 index 0000000..c334006 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Khariseth.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Leira.png b/webapp/resources/games/olden-era/heroes/Hive/Leira.png new file mode 100644 index 0000000..218fa82 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Leira.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Lo.png b/webapp/resources/games/olden-era/heroes/Hive/Lo.png new file mode 100644 index 0000000..f7e2267 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Lo.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Maelstrom.png b/webapp/resources/games/olden-era/heroes/Hive/Maelstrom.png new file mode 100644 index 0000000..9797a13 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Maelstrom.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Mila.png b/webapp/resources/games/olden-era/heroes/Hive/Mila.png new file mode 100644 index 0000000..b8afd19 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Mila.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Niev.png b/webapp/resources/games/olden-era/heroes/Hive/Niev.png new file mode 100644 index 0000000..7e84ffc Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Niev.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Nor.png b/webapp/resources/games/olden-era/heroes/Hive/Nor.png new file mode 100644 index 0000000..fa3c230 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Nor.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Oriax.png b/webapp/resources/games/olden-era/heroes/Hive/Oriax.png new file mode 100644 index 0000000..85f943b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Oriax.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Pauper.png b/webapp/resources/games/olden-era/heroes/Hive/Pauper.png new file mode 100644 index 0000000..681d1d9 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Pauper.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Tavi.png b/webapp/resources/games/olden-era/heroes/Hive/Tavi.png new file mode 100644 index 0000000..b27e73e Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Tavi.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Xirr.png b/webapp/resources/games/olden-era/heroes/Hive/Xirr.png new file mode 100644 index 0000000..7e26d7b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Xirr.png differ diff --git a/webapp/resources/games/olden-era/heroes/Hive/Zoran, the Self-Founded.png b/webapp/resources/games/olden-era/heroes/Hive/Zoran, the Self-Founded.png new file mode 100644 index 0000000..aa99f00 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Hive/Zoran, the Self-Founded.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Adahn.png b/webapp/resources/games/olden-era/heroes/Necropolis/Adahn.png new file mode 100644 index 0000000..99da150 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Adahn.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Artorius Veritas.png b/webapp/resources/games/olden-era/heroes/Necropolis/Artorius Veritas.png new file mode 100644 index 0000000..a2f6b10 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Artorius Veritas.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Bulwark.png b/webapp/resources/games/olden-era/heroes/Necropolis/Bulwark.png new file mode 100644 index 0000000..aec0fdb Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Bulwark.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Ethric.png b/webapp/resources/games/olden-era/heroes/Necropolis/Ethric.png new file mode 100644 index 0000000..21016bc Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Ethric.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Funerella.png b/webapp/resources/games/olden-era/heroes/Necropolis/Funerella.png new file mode 100644 index 0000000..88f622d Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Funerella.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Guildmaster Klastor.png b/webapp/resources/games/olden-era/heroes/Necropolis/Guildmaster Klastor.png new file mode 100644 index 0000000..88bb28b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Guildmaster Klastor.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Kel'Ghul.png b/webapp/resources/games/olden-era/heroes/Necropolis/Kel'Ghul.png new file mode 100644 index 0000000..3ec1de2 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Kel'Ghul.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/King-of-Kings.png b/webapp/resources/games/olden-era/heroes/Necropolis/King-of-Kings.png new file mode 100644 index 0000000..8b0913e Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/King-of-Kings.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Laura.png b/webapp/resources/games/olden-era/heroes/Necropolis/Laura.png new file mode 100644 index 0000000..33cb941 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Laura.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Lord Rufus.png b/webapp/resources/games/olden-era/heroes/Necropolis/Lord Rufus.png new file mode 100644 index 0000000..830f746 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Lord Rufus.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Mag.png b/webapp/resources/games/olden-era/heroes/Necropolis/Mag.png new file mode 100644 index 0000000..37a2ab9 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Mag.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Marl.png b/webapp/resources/games/olden-era/heroes/Necropolis/Marl.png new file mode 100644 index 0000000..aa59ed6 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Marl.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Milossa The Golden.png b/webapp/resources/games/olden-era/heroes/Necropolis/Milossa The Golden.png new file mode 100644 index 0000000..bff0151 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Milossa The Golden.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Natalida.png b/webapp/resources/games/olden-era/heroes/Necropolis/Natalida.png new file mode 100644 index 0000000..eaff7d2 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Natalida.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Onkos.png b/webapp/resources/games/olden-era/heroes/Necropolis/Onkos.png new file mode 100644 index 0000000..dacb363 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Onkos.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Shadespinner Oona.png b/webapp/resources/games/olden-era/heroes/Necropolis/Shadespinner Oona.png new file mode 100644 index 0000000..1c3a9fa Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Shadespinner Oona.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Tarius.png b/webapp/resources/games/olden-era/heroes/Necropolis/Tarius.png new file mode 100644 index 0000000..48b7324 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Tarius.png differ diff --git a/webapp/resources/games/olden-era/heroes/Necropolis/Zam.png b/webapp/resources/games/olden-era/heroes/Necropolis/Zam.png new file mode 100644 index 0000000..4df3a96 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Necropolis/Zam.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Blackhorn.png b/webapp/resources/games/olden-era/heroes/Schism/Blackhorn.png new file mode 100644 index 0000000..338e461 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Blackhorn.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Changeling Urgo.png b/webapp/resources/games/olden-era/heroes/Schism/Changeling Urgo.png new file mode 100644 index 0000000..ac73ff8 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Changeling Urgo.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Dhüvri.png b/webapp/resources/games/olden-era/heroes/Schism/Dhüvri.png new file mode 100644 index 0000000..774f08f Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Dhüvri.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Grellekh the Betrayer.png b/webapp/resources/games/olden-era/heroes/Schism/Grellekh the Betrayer.png new file mode 100644 index 0000000..8c3c79a Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Grellekh the Betrayer.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Icequeen Hel'Ghat.png b/webapp/resources/games/olden-era/heroes/Schism/Icequeen Hel'Ghat.png new file mode 100644 index 0000000..ce2160a Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Icequeen Hel'Ghat.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Jänhei.png b/webapp/resources/games/olden-era/heroes/Schism/Jänhei.png new file mode 100644 index 0000000..f970f30 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Jänhei.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Kwinri.png b/webapp/resources/games/olden-era/heroes/Schism/Kwinri.png new file mode 100644 index 0000000..bd6cc2d Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Kwinri.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Mara Mat’ha.png b/webapp/resources/games/olden-era/heroes/Schism/Mara Mat’ha.png new file mode 100644 index 0000000..a56a314 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Mara Mat’ha.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Martyr Tho.png b/webapp/resources/games/olden-era/heroes/Schism/Martyr Tho.png new file mode 100644 index 0000000..4e796a4 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Martyr Tho.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Matastala the White.png b/webapp/resources/games/olden-era/heroes/Schism/Matastala the White.png new file mode 100644 index 0000000..0fbe6d8 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Matastala the White.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Nihil.png b/webapp/resources/games/olden-era/heroes/Schism/Nihil.png new file mode 100644 index 0000000..a6c67ee Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Nihil.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Ra'Davok.png b/webapp/resources/games/olden-era/heroes/Schism/Ra'Davok.png new file mode 100644 index 0000000..4078728 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Ra'Davok.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Sister Keiri.png b/webapp/resources/games/olden-era/heroes/Schism/Sister Keiri.png new file mode 100644 index 0000000..092b16b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Sister Keiri.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/The Eye Collective.png b/webapp/resources/games/olden-era/heroes/Schism/The Eye Collective.png new file mode 100644 index 0000000..de92ae2 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/The Eye Collective.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/The Iron Master.png b/webapp/resources/games/olden-era/heroes/Schism/The Iron Master.png new file mode 100644 index 0000000..3555b3d Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/The Iron Master.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Tölketh.png b/webapp/resources/games/olden-era/heroes/Schism/Tölketh.png new file mode 100644 index 0000000..c4ae24b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Tölketh.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Ulkuth.png b/webapp/resources/games/olden-era/heroes/Schism/Ulkuth.png new file mode 100644 index 0000000..de6a329 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Ulkuth.png differ diff --git a/webapp/resources/games/olden-era/heroes/Schism/Wal'kha.png b/webapp/resources/games/olden-era/heroes/Schism/Wal'kha.png new file mode 100644 index 0000000..b73b1de Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Schism/Wal'kha.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Aeos the Exalted.png b/webapp/resources/games/olden-era/heroes/Temple/Aeos the Exalted.png new file mode 100644 index 0000000..8e74297 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Aeos the Exalted.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Anastasia the Meek.png b/webapp/resources/games/olden-era/heroes/Temple/Anastasia the Meek.png new file mode 100644 index 0000000..a007bae Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Anastasia the Meek.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Clarissa.png b/webapp/resources/games/olden-era/heroes/Temple/Clarissa.png new file mode 100644 index 0000000..95b5baf Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Clarissa.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Heretic Avis.png b/webapp/resources/games/olden-era/heroes/Temple/Heretic Avis.png new file mode 100644 index 0000000..f70ece8 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Heretic Avis.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Ister.png b/webapp/resources/games/olden-era/heroes/Temple/Ister.png new file mode 100644 index 0000000..bc4e90b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Ister.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/John Johnson.png b/webapp/resources/games/olden-era/heroes/Temple/John Johnson.png new file mode 100644 index 0000000..a6cfd98 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/John Johnson.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Julius.png b/webapp/resources/games/olden-era/heroes/Temple/Julius.png new file mode 100644 index 0000000..fa464f0 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Julius.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Keandra.png b/webapp/resources/games/olden-era/heroes/Temple/Keandra.png new file mode 100644 index 0000000..c83363e Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Keandra.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Kestrel.png b/webapp/resources/games/olden-era/heroes/Temple/Kestrel.png new file mode 100644 index 0000000..9e4cc08 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Kestrel.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Leon Sticky‑Fingers.png b/webapp/resources/games/olden-era/heroes/Temple/Leon Sticky‑Fingers.png new file mode 100644 index 0000000..bc455cd Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Leon Sticky‑Fingers.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Lia the Untethered One.png b/webapp/resources/games/olden-era/heroes/Temple/Lia the Untethered One.png new file mode 100644 index 0000000..e2e259d Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Lia the Untethered One.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Lord Edgar.png b/webapp/resources/games/olden-era/heroes/Temple/Lord Edgar.png new file mode 100644 index 0000000..e39f8e7 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Lord Edgar.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Merry Elias.png b/webapp/resources/games/olden-era/heroes/Temple/Merry Elias.png new file mode 100644 index 0000000..ace3415 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Merry Elias.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Nadir.png b/webapp/resources/games/olden-era/heroes/Temple/Nadir.png new file mode 100644 index 0000000..72409ba Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Nadir.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Old Lord Mandall.png b/webapp/resources/games/olden-era/heroes/Temple/Old Lord Mandall.png new file mode 100644 index 0000000..f41a364 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Old Lord Mandall.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Pip.png b/webapp/resources/games/olden-era/heroes/Temple/Pip.png new file mode 100644 index 0000000..4743401 Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Pip.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Vesper.png b/webapp/resources/games/olden-era/heroes/Temple/Vesper.png new file mode 100644 index 0000000..0a350bf Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Vesper.png differ diff --git a/webapp/resources/games/olden-era/heroes/Temple/Zenith.png b/webapp/resources/games/olden-era/heroes/Temple/Zenith.png new file mode 100644 index 0000000..97e491b Binary files /dev/null and b/webapp/resources/games/olden-era/heroes/Temple/Zenith.png differ diff --git a/webapp/resources/img/favicon.ico b/webapp/resources/img/favicon.ico new file mode 100644 index 0000000..4768718 Binary files /dev/null and b/webapp/resources/img/favicon.ico differ diff --git a/webapp/resources/img/screenshots/home.webp b/webapp/resources/img/screenshots/home.webp new file mode 100644 index 0000000..4ee51f4 Binary files /dev/null and b/webapp/resources/img/screenshots/home.webp differ diff --git a/webapp/resources/img/screenshots/onboard1.webp b/webapp/resources/img/screenshots/onboard1.webp new file mode 100644 index 0000000..a543c1c Binary files /dev/null and b/webapp/resources/img/screenshots/onboard1.webp differ diff --git a/webapp/resources/img/screenshots/onboard2.webp b/webapp/resources/img/screenshots/onboard2.webp new file mode 100644 index 0000000..027cc72 Binary files /dev/null and b/webapp/resources/img/screenshots/onboard2.webp differ diff --git a/webapp/resources/img/screenshots/scenes-page.webp b/webapp/resources/img/screenshots/scenes-page.webp new file mode 100644 index 0000000..5b0dda0 Binary files /dev/null and b/webapp/resources/img/screenshots/scenes-page.webp differ diff --git a/webapp/resources/views/home.blade.php b/webapp/resources/views/home.blade.php new file mode 100644 index 0000000..c6cb43f --- /dev/null +++ b/webapp/resources/views/home.blade.php @@ -0,0 +1,259 @@ + + + + +OPHI-118 / control panel + + + + + + @include('partials.topbar', ['crumb' => 'CONTROL PANEL']) + + + +
+ +
+ [01]   PRE-FLIGHT + INTERNAL +
+
+
ONBOARD
+
Compile a Project Loading manifest — game, subtitle, countdown, camera/mic state. Pushes the channel title + category to Twitch.
+
+
+ /onboard + +
+
+ + +
+ [02]   ROUTES + INTERNAL +
+
+
SCENES
+
Every overlay URL OBS browser-sources point at, plus the data endpoints (playlist, cover, audio stream).
+
+
+ /scenes + +
+
+ + +
+ [03]   LANDING + EXTERNAL ↗ +
+
+
OPHI118.COM
+
Public landing page for the OPHI-118 broadcast. Bio, schedule, social links.
+
+
+ ophi118.com + +
+
+ + +
+ [04]   SERVERS + EXTERNAL ↗ +
+
+
GAMEZ.CIEMNOSC.COM
+
Roster of the self-hosted game servers currently live — connect strings, mod lists, player counts.
+
+
+ gamez.ciemnosc.com + +
+
+
+ +
+
+
+ + + + diff --git a/webapp/resources/views/index.blade.php b/webapp/resources/views/index.blade.php deleted file mode 100644 index 1f64516..0000000 --- a/webapp/resources/views/index.blade.php +++ /dev/null @@ -1,34 +0,0 @@ - - - - -OPHI-118 / overlays - - - -

OPHI-118 SCENE OVERLAY APP

- - - diff --git a/webapp/resources/views/onboard.blade.php b/webapp/resources/views/onboard.blade.php index 17b1b8f..ca60c11 100644 --- a/webapp/resources/views/onboard.blade.php +++ b/webapp/resources/views/onboard.blade.php @@ -4,30 +4,26 @@ OPHI-118 / onboard + - + -
-
- ONBOARD - OPHI-118 // PROJECT MANIFEST -
-
- RIG - {{ $telemetry['rig'] ?? '—' }} -
-
- UTC - --:--:-- -
-
+@include('partials.topbar', [ + 'crumb' => 'ONBOARD', + 'context' => 'RIG' + . e($telemetry['rig'] ?? '—') . '', +])
@@ -498,6 +538,65 @@ + +
diff --git a/webapp/resources/views/partials/topbar.blade.php b/webapp/resources/views/partials/topbar.blade.php new file mode 100644 index 0000000..0b49761 --- /dev/null +++ b/webapp/resources/views/partials/topbar.blade.php @@ -0,0 +1,19 @@ +{{-- + Shared breadcrumb / nav strip used by every non-overlay webapp page + (/, /scenes, /onboard). Distinct from the in-scene .hud strip so OBS + overlays render identically — only browser-facing pages use this. + + @param string $crumb uppercase label for the current page (e.g. 'ONBOARD') + @param string $context optional raw HTML for the middle slot; + defaults to the node address. +--}} +
+ +
{!! $context ?? 'NODE127.0.0.1:1118' !!}
+
UTC--:--:--
+
diff --git a/webapp/resources/views/scenes.blade.php b/webapp/resources/views/scenes.blade.php new file mode 100644 index 0000000..f5cb145 --- /dev/null +++ b/webapp/resources/views/scenes.blade.php @@ -0,0 +1,107 @@ + + + + +OPHI-118 / scenes + + + + + + @include('partials.topbar', ['crumb' => 'SCENES']) + +

SCENE OVERLAY ROUTES

+
Browser sources in basic/scenes/Default_Stream_HUD.json point at these URLs on 127.0.0.1:1118.
+ +
OVERLAYS
+ + +
MUSIC BOX VARIANTS
+ + +
DATA ENDPOINTS
+ + +
+
+
+ + + + diff --git a/webapp/routes/web.php b/webapp/routes/web.php index bc1b5ff..4cc6b5f 100644 --- a/webapp/routes/web.php +++ b/webapp/routes/web.php @@ -13,7 +13,8 @@ use App\Http\Controllers\Overlays\MusicBoxController; use App\Http\Controllers\Overlays\MusicDaemonController; use Illuminate\Support\Facades\Route; -Route::view('/', 'index'); +Route::view('/', 'home'); +Route::view('/scenes', 'scenes'); Route::get('/landing', [LandingController::class, 'show']); Route::get('/loading', [LoadingController::class, 'show']);