A
ttg-batocera-storefelteszi a katalógusunkat a Batocerára. A https://teletypegames.org WarpEngine-katalógusából lehúzza a játékokat a dobozra, kiírja az EmulationStation-metaadatokat és a borítóképeket, és saját menübejegyzést ad az áruháznak — Teletype Games —, ahonnan újra futtatható az új kiadásokért.
Ez a repó csak az áruházdefiníció: egy config.json és két indítószkript. A logika a közös motorban van, a warp-engine-batocera-store repóban — ez annak a Teletype Games-konfigurációja.
Ha nem Batocera-dobozon, hanem RetroArchon szeretnéd — asztali gépen, Androidon, Steam Decken, kézikonzolon —, használd a TTG RetroArch Store áruházat.
list, sync, remove, config, szárazon futtatással, címenkénti szinkronnal és felülbírálásokkal./userdata/roms/teletypegames/ alatt élnek, nem a doboz saját rendszereiben, így a szinkron vagy a takarítás semmihez nem érhet hozzá, ami a tiéd. A mi játékainkon a kedvencek és a játékszámlálók túlélik az újraírást.gamelist.xml fájlba, így a játékok úgy néznek ki, mintha be lettek volna szkennelve./api/download végponton mennek, így beleszámítanak a statisztikába.Teletype Games ▸ "Update Teletype Games"
│
├─ GET /api/software a teljes katalógus
├─ a doboz által futtatható platformok c64 → c64, tic80 → tic80
├─ a legfrissebb nem dev kiadás amely a megfelelő assetet hordozza
├─ GET /api/download?path=<asset> .prg / .tic az áruház mappájába
├─ GET <software.imageUrl> borítókép
├─ gamelist.xml kiírása cím, leírás, szerző, kép
└─ es_systems_ttg.cfg kiírása a menübejegyzés
Repó: https://git.teletypegames.org/stores/ttg-batocera-store
Motor: warp-engine-batocera-store
RetroArch-megfelelője: TTG RetroArch Store
Batocera: https://batocera.org
Katalógusoldal: WarpEngine (libs/ruby/warp_engine a teletypegames repóban)
SSH-n a Batocera-dobozon:
curl -fsSL https://git.teletypegames.org/stores/ttg-batocera-store/raw/branch/master/install.sh | sh
Vagy egy checkoutból:
scp -r ttg-batocera-store root@batocera:/tmp/
ssh root@batocera /tmp/ttg-batocera-store/install.sh
A telepítő lehúzza a motort, azt és ezt a konfigurációt a /userdata/system/batocera-store/ttg/ könyvtárba teszi, kiírja a ttg-store indítót, és lefuttatja az első szinkront — amely letölti a játékokat és kiírja a menübejegyzést. Indítsd újra az EmulationStationt, hogy lásd:
batocera-es-swissknife --restart
A telepítő újrafuttatása a frissítési út: felfrissíti a motort és a konfigurációt (a régit config.json.bak néven megtartva), a state.json fájlhoz pedig nem nyúl.
Ha 4.0 előtti telepítésről jössz, az első szinkron a szerkezetet is átalakítja: a játékok kikerülnek a c64/teletypegames/, tic80/teletypegames/ és ports/teletypegames/ mappákból a /userdata/roms/teletypegames/ alá, a régi Ports ▸ Teletype Games Store bejegyzés pedig eltűnik — a frissítő már a menübejegyzésen belül van. A költözés nem fájlmozgatás, hanem eltávolítás plusz friss letöltés, ami a mai katalógussal percek kérdése. A gamelistjeidet a mi csomópontjaink nélkül újraírja, nem törli, a gamelist.xml.ttg-backup másolatokat pedig kilistázza, de érintetlenül hagyja. A -n sync előre megmutatja az egészet; a config.json emulationstation.menu.mode: "merge" beállítása megtartja a régi elrendezést.
Az eszközön. Teletype Games ▸ „Update Teletype Games". Letölt mindent, ami új, majd újraindítja az EmulationStationt. Az ES által indított szkriptnek nincs konzolja, így a kimenet a /userdata/system/batocera-store/ttg/store.log fájlba megy.
fő körhinta: … ▸ Teletype Games ▸ ┌ Commodore 64
├ TIC-80
├ Ports a natív buildek
└ Update Teletype Games a szinkron
A bejegyzés a saját TTG-logónkat viseli, amely az áruházrepóban van (logo.png, plusz egy vektoros logo.svg azoknak a témáknak, amelyek csak SVG-t keresnek), és amelyet a motor a doboz minden témájának logómappájába telepít. Ahová nem ér el, ott a téma szövegként mutatja: TELETYPE GAMES. A Batocera-image-hez adott témák a csak olvasható rendszeren élnek, így a másolatuk a RAM-overlayben van, és újraindításkor eltűnik — a következő frissítés visszateszi, a batocera-save-overlay pedig véglegesíti.
Csak azok a platformok jelennek meg, amelyekre van telepített tartalom, és a játékok pontosan úgy indulnak, ahogy a doboz indítaná őket: a motor a doboz saját c64, tic80 és ports rendszereiről másolja át az indítóparancsot és az emulátorlistát, így amit a C64-hez beállítottál, az a mi C64-es játékainkra is érvényes. Hogy ez hogyan áll össze, azt a motor oldala írja le.
SSH-n, az indítón keresztül:
S=/userdata/system/batocera-store/ttg-store
$S list # kompatibilis katalógusbejegyzések; * telepítve, ^ van frissítés
$S sync # minden újdonság letöltése, a gamelistek és a menü frissítése
$S sync blessingofra # csak egy cím (soha nem takarít)
$S -n sync # szárazon futtatás
$S remove c64demo # eltávolítás (a c64:c64demo is jó)
$S config # az érvényes konfiguráció, és hogy hol van a menübejegyzés
A globális kapcsolók az alparancs elé jönnek: $S --roms-root /tmp/roms sync.
| Kapcsoló | Jelentés |
|---|---|
--config <path> |
az áruház konfigurációs fájlja (alapérték /userdata/system/batocera-store/ttg/config.json) |
--base-url <url> |
a katalógus alap-URL-jének felülbírálása |
--roms-root <path> |
a ROM-gyökér felülbírálása |
-n, --dry-run |
jelenti a műveleteket, de semmit nem változtat |
-v, --verbose |
bőbeszédű naplózás |
--version |
verzió kiírása |
Két alparancs a gépnek szól, nem a felhasználónak: a sync-from-es az, amit a menübejegyzés hív, az apply-gamelists --wait-pid <pid> pedig az általa indított leválasztott gyerekfolyamat.
/userdata/system/batocera-store/
├── ttg-store indító
└── ttg/
├── store.py, warpstore.py a motor és a közös magja
├── config.json az áruház, amely kiválasztotta
└── state.json, catalog.json, store.log
/userdata/system/configs/emulationstation/es_systems_ttg.cfg a menübejegyzés
/userdata/roms/teletypegames/ az áruház saját ROM-mappája
├── c64/
│ ├── blessingofra-2.0.0.prg, rabbit-1.0.0.prg, …
│ ├── images/blessingofra.png, …
│ └── gamelist.xml
├── tic80/ …
├── ports/
│ ├── rabbitroller.sh, images/rabbitroller.png
│ ├── .data/rabbitroller/ a kicsomagolt program
│ └── gamelist.xml
└── store/ maga a menübejegyzés
├── update.sh a szinkron, ahogy a menü indítja
└── gamelist.xml
A doboz saját rendszermappáihoz egyáltalán nem nyúl: a takarítás nem érheti el a ROM-jaidat, mert azok nincsenek ugyanabban a fában, a mi mappánkon belül pedig csak az törlődik, amit a state.json nyilvántart — egy oda bemásolt saját ROM megtartja a fájlját és a gamelist-bejegyzését.
/userdata/system/batocera-store/ttg/config.json, ebből a repóból:
{
"store": {
"id": "ttg",
"name": "Teletype Games",
"base_url": "https://teletypegames.org",
"api": { "catalog": "/api/software", "download": "/api/download" }
},
"paths": { "roms_root": "/userdata/roms", "subfolder": "teletypegames" },
"emulationstation": { "menu": { "mode": "system", "theme": "ports", "updater": true }, "restart": true },
"catalog": { "statuses": ["released", "archived"], "owner_id": null, "only": [], "exclude": [] },
"platforms": {
"c64": { "system": "c64", "kind": "cartridge", "ext": ".prg", "enabled": true },
"tic80": { "system": "tic80", "kind": "cartridge", "ext": ".tic", "enabled": true }
},
"behavior": { "prune": true, "timeout": 30, "insecure": false }
}
A teljes kulcsreferencia a motor oldalán van. A dobozon végzett szerkesztések a következő telepítésig maradnak meg, amely a régi fájlt config.json.bak néven megtartja. Ami tartós, az a repóba való.
Egy platform akkor telepíthető, ha a kiadási assetje olyan fájl, amelyet a dobozon meglévő valamelyik rendszer közvetlenül el tud indítani — a „meglévő" itt azt jelenti, hogy szerepel a doboz saját es_systems.cfg fájljában, tehát ebbe az image-be beleépült az emulátor:
| Katalógusplatform | Asset típusa | Batocera-rendszer | Kiterjesztés |
|---|---|---|---|
c64 |
cartridge |
c64 (VICE) |
.prg |
tic80 |
cartridge |
tic80 |
.tic |
Az ebitengine, bevy, godot és love natív Linux-buildet szállít, és úgy települ, ahogy a Batocera Ports rendszere csinálja — egy .sh indító a kicsomagolt program mellett, a Teletype Games ▸ Ports alatt. A phaser csak webes buildet szállít, így nincs leképezve. Egy leképezés hozzáadása konfigurációs szerkesztés:
"platforms": { "godot": { "system": "godot", "kind": "linux_x64", "ext": ".zip", "enabled": true } }
Egy platformot kihagy, ha a doboznak nincs meg a rendszere; a list ezt jelenti: skipped <name>: this box has no '<system>' system.
curl -fsSL https://git.teletypegames.org/stores/ttg-batocera-store/raw/branch/master/uninstall.sh | sh
Eltávolítja a játékokat (a kicsomagolt port-tartalmat is), a mi gamelistjeinket, a menübejegyzést, az indítót és az áruház könyvtárát, majd újraindítja az EmulationStationt. A DRY_RUN=1 megmutatja, mi tűnne el; a KEEP_HOME=1 megtartja a state.json fájlt és a naplót az újratelepítéshez.
A tiédből semmi nem megy vele: minden, amit az áruház telepített, egyetlen saját mappában van, így az eltávolítás pontosan úgy hagyja a dobozt, ahogy volt. Olyan dobozon, amely még a régi elrendezést használja, a gamelistjeidet a mi csomópontjaink nélkül újraírja, nem törli, így a játékszámlálók és a kedvencek megmaradnak, a gamelist.xml.ttg-backup másolatokat pedig kilistázza, de érintetlenül hagyja.
| Tünet | Mit ellenőrizz |
|---|---|
| Frissítés után nem jelenik meg semmi | /userdata/system/batocera-store/ttg/store.log, majd batocera-es-swissknife --restart |
skipped <name>: this box has no '<system>' system |
az az emulátor nincs benne ebben a Batocera-image-ben |
| Hiányzik a Teletype Games bejegyzés | a szinkron írja a /userdata/system/configs/emulationstation/es_systems_ttg.cfg fájlt; nézd meg a naplót, majd indítsd újra az ES-t |
| TLS-hibák egy tesztpéldány felé | állítsd a behavior.insecure értéket true-ra a config.json fájlban |
| Egy címet soha ne telepítsen | vedd fel a katalógusnevét a config.json catalog.exclude listájába |
| A gamelist hibásnak tűnik | a miénk a /userdata/roms/teletypegames/<system>/gamelist.xml; a 4.0 előtti eredeti a <system>/gamelist.xml.ttg-backup |
| A játékok eltűntek egy szinkron után | egy hiányzó ROM-felcsatolás szándékosan megszakítja a szinkront; ellenőrizd, hogy a /userdata/roms fel van-e csatolva |