From 0f2fe6de62411cbbc3d87908ed7561115bca9350 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Mon, 17 Aug 2026 18:08:59 +0200 Subject: [PATCH] Work out and build the RetroArch store MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RETROARCH_STORE.md is the design, written from measurements rather than documentation: the format samples, thumbnail layout and core names come from a real RetroArch install on this machine, the core availability from the libretro buildbot index, and the CRC32s from the catalog itself. Three findings shaped it. The playlist folder is not necessarily inside the RetroArch directory — on the machine measured, playlist_directory is under ~/Documents while cores and thumbnails are under ~/Library — so reading retroarch.cfg is a requirement, not a nicety. Thumbnails must be PNG, and one of our covers is a GIF, which no store had cared about before. And a .lpl entry has nowhere to put a description, so desc and author do not survive the trip. Built the same day, in three repositories: engines/warpstore (the shared core, extracted immediately rather than in the second phase the plan proposed), tools/warp-engine-retroarch-store and tools/ttg-retroarch-store. The closing section of the design records what the implementation changed about it. MORE_STORES.md item 4 is closed, its "a minta" section now points at the extracted core, and REPO_REFACT.md carries the three new repos — check-repos.sh is green at 49. Co-Authored-By: Claude Opus 5 (1M context) --- MORE_STORES.md | 12 +- REPO_REFACT.md | 6 +- RETROARCH_STORE.md | 590 +++++++++++++++++++++++++++++++++++++++++++++ WIKI_CONNECTION.md | 3 + scripts/repos.list | 3 + 5 files changed, 612 insertions(+), 2 deletions(-) create mode 100644 RETROARCH_STORE.md diff --git a/MORE_STORES.md b/MORE_STORES.md index ec7b3c4..651f4a0 100644 --- a/MORE_STORES.md +++ b/MORE_STORES.md @@ -92,6 +92,13 @@ A `shortcuts.vdf`-be írva a játékaink megjelennek a Steam könyvtárban borí ### 4. RetroArch playlistek `.lpl` JSON playlist platformonként. A cartridge-eket sokkal nagyobb közönségnek adja, mint a Batocera: Android, asztali gépek, konzolok. Kis formátum, kevés munka. +**Kész (2026-08-17).** Terv és mérések: `RETROARCH_STORE.md`. Három repó: +`engines/warpstore` (a kiemelt közös mag), `tools/warp-engine-retroarch-store` +(motor), `tools/ttg-retroarch-store` (a mi store-unk). A Batocera-motor ugyanabban +a körben átült a közös magra. **Hátra van:** valódi gépen kipróbálni, hogy a +VICE-mag magától indítja-e a `.prg`-t, és hogy az Android `adb push` útvonalai +állnak-e. Ott mérve: mind a két mag (`vice_x64`, `tic80`) elérhető minden célon, Androidon is; a playlist-könyvtár nem feltétlenül a RetroArch alapkönyvtárában van, tehát a `retroarch.cfg` kötelező olvasmány; a borító csak PNG lehet, amin az `impostor` GIF-je ma elhasal; leírást a `.lpl` nem tud. A motor egyetlen valódi új képessége az út-átírás (`stage_root` / `target_prefix`), ami az Androidot és a 2. pont asztali store-ját egyszerre szolgálja. + ### 5. BBS store A `bbs/bbs-server`-be, a saját `rubbs`-unkra épülve. Bármelyik asset-fajtát tudja adni letöltésként, és ez az egyetlen a listán, amit **rajtunk kívül senki nem tudna lemásolni** — márkaérték, nem csak elérés. @@ -117,12 +124,15 @@ Mind ugyanaz a forma: **olvasd a WarpEngine katalógust → írd a gazdaplatform Egy dolog viszont **nem** tartozik az adapterbe, hanem a közös részbe: az **architektúra-illesztés**. A gazdaplatform megmondja, milyen gépen fut (`uname -m`, Windows/macOS esetén a megfelelő megfelelője), és a motornak ehhez kell asset-fajtát választania. Ez a 0., 1. és 2. pontnak egyaránt kell, tehát egyszer, jó helyen érdemes megírni. +**A közös rész 2026-08-17-én kiemelve:** `engines/warpstore`, egyetlen fájl, amit mindkét motor a telepítéskor letölt. Benne a katalógus és gyorsítótára, a kiadásválasztás, a `state.json`, a borító-letöltés, az atomikus írás és a törlés-őr — plusz az architektúra-illesztés, ami a második adapter miatt `resolve_for_host`-tá bővült: nem csak az `arch`, hanem az `os` is kulcs lehet, mert egy libretro mag fájlneve OS-enként más. Egy új store innentől valóban egy adapter plusz egy config. + ## A javasolt sorrend 1. ~~**`linux_arm64` a build-mátrixba**~~ — **kész** (2026-08-16). Az `ebitengine` és a `bevy` gyártja; a `godot`-hoz a játék repójában kell ARM export preset, a LÖVE-hoz nincs upstream ARM AppImage, a TIC-80 `export` parancsának meg nincs ARM célja. A `bevydemo` 1.0.0 már `linux_arm64`-et is ad. 2. ~~**Architektúra-illesztés a motorba**~~ — **kész** (2026-08-17). A `kind` és az `ext` lehet architektúra-leképezés `*` tartalékkal; a felismert arch látszik a `list` és a `config` kimenetében. `aarch64`-en végigpróbálva: az ARM csomagot tölti le, és a benne lévő bináris valóban AArch64. 3. ~~**`linux_*` → Batocera ports**~~ — **kész** (2026-08-17). `install: "port"`; `aarch64`-en végigpróbálva: telepítés, idempotens újraszinkron, eltávolítás a 106 MB-os payloaddal, és a névtér-védés is (idegen `.data` útra mutató bejegyzést elutasít). **Hátra van:** bekapcsolni a `ttg-batocera-store` configjában, és valódi gépen kipróbálni, hogy a natív játékok tényleg elindulnak-e. -4. **ES-családú store-ok** (1.) — a motor itt már majdnem kész. +4. ~~**RetroArch playlistek**~~ — **kész** (2026-08-17), a közös mag kiemelésével együtt. Lásd `RETROARCH_STORE.md`. **Hátra van:** a VICE `.prg`-autostart és az Android-út valódi gépen. +5. **ES-családú store-ok** (1.) — a motor itt már majdnem kész, és a `warpstore` óta az adapter tényleg csak a gazdaplatform írása. ## Amit valódi gépen kell ellenőrizni diff --git a/REPO_REFACT.md b/REPO_REFACT.md index 78c99ba..d01f515 100644 --- a/REPO_REFACT.md +++ b/REPO_REFACT.md @@ -38,7 +38,8 @@ git.teletypegames.org/ │ ├── warp_engine Rails engine: katalógus + API ← ma tools/ │ ├── rubbs Ruby gem: Telnet BBS keretrendszer ← ma tools/ │ ├── inkwell Go: Point'n'Click DSL ← ma games/ -│ └── gorpg Go: Ebitengine RPG motor ← ma games/ +│ ├── gorpg Go: Ebitengine RPG motor ← ma games/ +│ └── warpstore Python: a store-motorok közös magja ← új, 2026-08-17 │ ├── bbs/ BBS szerverek és showcase-ek. A keretrendszerük │ │ (rubbs) az engines/ alatt van. @@ -69,6 +70,8 @@ git.teletypegames.org/ │ │ A név marad, de kap definíciót és 19 helyett 5 repót. │ ├── warp-engine-batocera-store │ ├── ttg-batocera-store +│ ├── warp-engine-retroarch-store ← új, 2026-08-17 +│ ├── ttg-retroarch-store ← új, 2026-08-17 │ ├── ttg-marketplace ← ma internal/ │ ├── devarea │ └── tic80-draw-image (vendorolt, GitHub) @@ -90,6 +93,7 @@ git.teletypegames.org/ - **Gem git-források rendezve** (2026-08-16): `bbs/bbs-server`, `bbs/sermo-bbs` és `bbs/impostor-bbs` — mindhárom a kanonikus hoszton az `engines/rubbs`-ra mutat, a rögzített revíziók változatlanul. - **Builder image-ek átköltöztetve** (2026-08-16): mind a 8 konténer-csomag a `build` org alá került, a `ci_platforms` és a dokumentáció (7 toolchain README + Dockerfile, 2 wiki-oldal) átírva. Az `internal` org ezzel kiüríthető — ez volt az egyetlen, ami visszatartotta. - **Wiki `engines/` névtér** (2026-08-16): a `warp-engine`, `rubbs` és `inkwell` oldal egy közös `/engines` szekcióba került, a régi URL-ek Grav-átirányítással élnek tovább. +- **Három új repó a store-vonalon** (2026-08-17): `engines/warpstore` (a store-motorok kiemelt közös magja — az `engines/` definíciója szerint „könyvtár, amitől más repók függnek"), `tools/warp-engine-retroarch-store` és `tools/ttg-retroarch-store`. A `repos.list` és a `WIKI_CONNECTION.md` táblája követi; a `check-repos.sh` 49 repóval zölden fut. A `tools/` ezzel 5 helyett 7 repó. - **Workspace mappák igazítva** (2026-08-16): a mappa mostantól egy az egyben az org (`bbs/`, `build/`, `demos/`, `engines/`, `games/`, `infra/`, `services/`, `tools/`). Kivétel a `devarea`, ami a gyökérben marad, mert a `clone-repos.sh` a szülőjébe klónoz. ## Nyitott pontok diff --git a/RETROARCH_STORE.md b/RETROARCH_STORE.md new file mode 100644 index 0000000..9aa957f --- /dev/null +++ b/RETROARCH_STORE.md @@ -0,0 +1,590 @@ +# RetroArch store — kidolgozott terv + +Készült 2026-08-17-én, a `MORE_STORES.md` 4. pontjának kifejtéseként. Minden +alább szereplő formátum- és útvonal-állítás **egy valódi RetroArch-telepítésen +mérve** (macOS, `~/Library/Application Support/RetroArch`), a mag-elérhetőség +pedig a libretro buildbot indexéből. + +> **Megvalósítva ugyanaznap.** Három repó: +> [`engines/warpstore`](https://git.teletypegames.org/engines/warpstore) (közös mag), +> [`tools/warp-engine-retroarch-store`](https://git.teletypegames.org/tools/warp-engine-retroarch-store) (motor), +> [`tools/ttg-retroarch-store`](https://git.teletypegames.org/tools/ttg-retroarch-store) (a mi store-unk). +> A 11. pont javaslatával szemben a közös rész **azonnal** kiemelve — lásd az +> „Amit a megvalósítás megváltoztatott" szakaszt a végén. Wiki: +> [warpstore](https://wiki.teletypegames.org/engines/warpstore), +> [motor](https://wiki.teletypegames.org/others/warp-engine-retroarch-store), +> [store](https://wiki.teletypegames.org/others/ttg-retroarch-store). + +--- + +## 1. Mit ad, és mit nem + +Új asset-fajtát **nem** fogyaszt: a RetroArch magok emulátorok, tehát pontosan +azt eszik, amit a Batocera-store is — a `cartridge`-et. A nyereség nem a +katalógus szélessége, hanem a **gazdagépek száma**: asztali Linux/Windows/macOS, +Android, Steam Deck, konzolportok. + +A mai katalógusból (`released` + `archived`, 2026-08-17-i mérés) ez **6 cím, +összesen 233 KB**: + +| Platform | Szoftver | Cím | Fájl | Méret | CRC32 | +|---|---|---|---|---|---| +| c64 | blessingofra | Blessing of Ra | `blessingofra-2.0.0.prg` | 10 561 | `4253CFC6` | +| c64 | rabbitc64 | Rabbit Scooter | `rabbit-1.0.0.prg` | 8 072 | `31BF558B` | +| c64 | c64demo | C64 Demo for Arok Party 2026 | `c64demo-1.0.prg` | 4 641 | `AF681FFC` | +| tic80 | impostor | Definitely not an Impostor | `impostor-1.0.tic` | 163 497 | `8D9A45DA` | +| tic80 | bombexpert | BombExpert | `bombexpert-0.2.tic` | 25 227 | `A67DDF4A` | +| tic80 | mranderson | Mr Anderson's Adventure | `mranderson-0.1.tic` | 21 657 | `E98C7712` | + +Egy egész store negyed megabájt — ez az, ami miatt a szinkron gyakorlatilag +ingyen van, és amiért az Android-célpont zip-ként is elküldhető. + +**A két mag mindenhol van.** A buildbot indexét végigkérdezve: + +| Cél | `vice_x64` | `tic80` | Fájlnév-alak | +|---|---|---|---| +| `apple/osx/arm64`, `apple/osx/x86_64` | ✔ | ✔ | `*_libretro.dylib` | +| `linux/x86_64`, `linux/aarch64`, `linux/armhf`, `linux/armv7-neon-hf` | ✔ | ✔ | `*_libretro.so` | +| `windows/x86_64` | ✔ | ✔ | `*_libretro.dll` | +| `android/arm64-v8a`, `android/armeabi-v7a` | ✔ | ✔ | `*_libretro_android.so` | + +Tehát nincs olyan RetroArch-gazdagép, amin a katalógusunk ne futna — az Androidon +viszont a mag fájlneve más (`_android.so`), és ez a tervben külön kezelendő. + +**Amire nem jó.** A `html` és a natív zipek maradnak kiszolgálatlanul: nincs +böngésző-mag, és a LÖVE-hoz sincs valódi mag (a `lutro` nem LÖVE-kompatibilis). +Batocerán és a többi ES-frontendes gépen szintén nem ez a helyes út — ott a +RetroArch a háttérben fut, a könyvtár az ES-é, tehát a Batocera-store dolgozik. + +--- + +## 2. A gazdaplatform, ahogy valóban kinéz + +Négy dolgot érdemes tudni, mert mind a négy megcáfol egy kézenfekvő feltevést. + +**(a) A `retroarch.cfg` az egyetlen igazságforrás, és a könyvtárak szét vannak +szórva.** A mért gépen: + +``` +libretro_directory = ~/Library/Application Support/RetroArch/cores +thumbnails_directory = ~/Library/Application Support/RetroArch/thumbnails +playlist_directory = ~/Documents/RetroArch/playlists ← más ág! +system_directory = ~/Documents/RetroArch/system +``` + +A playlist-könyvtár tehát nem a RetroArch alapkönyvtárában van. Aki a +`/playlists` mintát égeti bele, az ezen a gépen csendben a semmibe ír. +**A motor kötelezően a `retroarch.cfg`-ből olvassa a négy útvonalat**, és csak +akkor tippel, ha nincs cfg. A `~` feloldandó, ahogy a Windows-os portable +telepítések `:` prefixe is (a RetroArch saját alapkönyvtárát jelenti). + +**(b) A `.lpl` sémája.** Egy valódi playlist a gépről (rövidítve) — ez a +formátum, amit írunk, nem egy dokumentációból vett közelítés: + +```json +{ + "version": "1.5", + "default_core_path": "", + "default_core_name": "", + "label_display_mode": 0, + "right_thumbnail_mode": 0, + "left_thumbnail_mode": 0, + "thumbnail_match_mode": 0, + "sort_mode": 0, + "items": [ + { + "path": "/…/Altered Beast (USA).md", + "entry_slot": -1, + "label": "Altered Beast (USA)", + "core_path": "/…/cores/genesis_plus_gx_libretro.dylib", + "core_name": "Sega - MS/GG/MD/CD (Genesis Plus GX)", + "crc32": "00000000|crc", + "db_name": "Sega - Mega Drive - Genesis.lpl" + } + ] +} +``` + +Két tanulság: a `path` **absztolút út a célgépen** (ez a 7. pont egész +problémája), a `crc32` pedig `"<8 hex>|crc"` alakú — a RetroArch maga gyakran +csak nullákat ír bele, mi a valódit tudjuk beírni (`zlib.crc32`, ingyen). + +**(c) A borítókép útja a playlist nevéből jön.** A mért gépen: + +``` +thumbnails/Sega - Mega Drive - Genesis/Named_Boxarts/*.png + Named_Titles/*.png + Named_Snaps/*.png +``` + +Vagyis `thumbnails//Named_*/