EN /HU | Belépés

TTG Batocera Store

A ttg-batocera-store felteszi 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.

Amit kapsz

  • Saját menübejegyzés — Teletype Games a fő körhintában, benne platformonként egy mappával és egy Update Teletype Games bejegyzéssel, amely egy kattintással letölt minden újdonságot.
  • Parancssor SSH-n — list, sync, remove, config, szárazon futtatással, címenkénti szinkronnal és felülbírálásokkal.
  • A könyvtáradhoz nem nyúl — a játékok a /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.
  • Borítókép és metaadat — cím, leírás, szerző és kép beleolvad a gamelist.xml fájlba, így a játékok úgy néznek ki, mintha be lettek volna szkennelve.
  • Nulla függőség — csak a Python 3 szabványkönyvtára.
  • Idempotens szinkronok — a meglévő fájlokhoz nem nyúl, egy kiadásemelés kicseréli a régi assetet. A letöltések az /api/download végponton mennek, de a teletypegames.org szándékosan kihagyja a letöltésszámból az áruház warpstore/* user agentjét, így a dobozra telepítések nem jelennek meg a statisztikában.

Áttekintés

TXT
Teletype Games ▸ "Update Teletype Games"
        │
        ├─ GET /api/software                        a teljes katalógus
        ├─ a doboz által futtatható platformok      c64 → c64, plus4 → cplus4, 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)


Telepítés

SSH-n a Batocera-dobozon:

SH
curl -fsSL https://git.teletypegames.org/stores/ttg-batocera-store/raw/branch/master/install.sh | sh

Vagy egy checkoutból:

SH
scp -r ttg-batocera-store root@batocera:/tmp/
ssh root@batocera /tmp/ttg-batocera-store/install.sh

A telepítő lehúzza a motort — a warp-engine-batocera-store és a warpstore azon commitját, amellyel ezt a konfigurációt kipróbáltuk; ezek az install.sh elején vannak rögzítve, az ENGINE_REF és a WARPSTORE_REF felülírja őket —, 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:

SH
batocera-es-swissknife --restart

A telepítő újrafuttatása a frissítési út: felfrissíti a motort, a konfigurációt (a régit config.json.bak néven megtartva) és a gyorsítótárazott logót, a state.json fájlhoz pedig nem nyúl. Checkoutból futtatva a logót is a checkoutból veszi.

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.


Használat

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.

TXT
fő körhinta:  …  ▸  Teletype Games  ▸  ┌ Commodore 64
                                       ├ Commodore Plus/4
                                       ├ 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űnne; a motor néhány sort tesz a /boot/postshare.sh-ba, amely az EmulationStation indulása előtt visszateszi, az eltávolítás pedig kiveszi ezeket a sorokat.

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, cplus4, 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:

SH
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 c64-demo      # eltávolítás (a c64:c64-demo 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.


Hova kerülnek a dolgok

TXT
/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
<minden téma>/<a logómappája>/ttg.png, ttg.svg                  a bejegyzés logója
/boot/postshare.sh                       jelölt blokk, amely bootkor visszateszi a logót

/userdata/roms/teletypegames/            az áruház saját ROM-mappája
├── c64/
│   ├── blessingofra-2.2.0.prg, rabbit-1.0.0.prg, …
│   ├── images/blessingofra.png, …
│   └── gamelist.xml
├── cplus4/  …
├── 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.


Konfiguráció

/userdata/system/batocera-store/ttg/config.json, ebből a repóból:

JSON
{
  "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",
      "updater": true,
      "logo": [
        "https://git.teletypegames.org/stores/ttg-batocera-store/raw/branch/master/logo.png",
        "https://git.teletypegames.org/stores/ttg-batocera-store/raw/branch/master/logo.svg"
      ]
    },
    "folder_name": "Teletype Games",
    "restart": true
  },

  "catalog": {
    "statuses": ["released", "archived"],
    "owner_id": null,
    "only": [],
    "exclude": []
  },

  "platforms": {
    "c64": { "system": "c64", "kind": "cartridge", "ext": ".prg", "enabled": true },
    "plus4": { "system": "cplus4", "kind": "cartridge", "ext": ".prg", "enabled": true },
    "tic80": { "system": "tic80", "kind": "cartridge", "ext": ".tic", "enabled": true },

    "ebitengine": { "system": "ports", "install": "port",
                    "kind": { "x86_64": "linux_x64", "aarch64": "linux_arm64" },
                    "ext": ".zip", "enabled": true },
    "bevy": { "system": "ports", "install": "port",
              "kind": { "x86_64": "linux_x64", "aarch64": "linux_arm64" },
              "ext": ".zip", "enabled": true },
    "godot": { "system": "ports", "install": "port",
               "kind": { "x86_64": "linux_x64" },
               "ext": ".zip", "enabled": true },
    "love": { "system": "ports", "install": "port",
              "kind": { "x86_64": "linux_x64" },
              "ext": ".zip", "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ó; a repó CI-ja (scripts/ci-check.sh) a rögzített motorral betölti a konfigurációt, és elbukik minden olyan kulcson, amelyet a motor nem ismer — egy elírt kulcsot különben csendben figyelmen kívül hagyna.

Platform-leképezés

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
plus4 cartridge cplus4 (VICE xplus4) .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 doboz architektúrájához választott assettel (linux_x64 vagy linux_arm64; a godot és a love csak x86_64). A phaser csak webes buildet szállít, így nincs leképezve. A natív címek többsége demo státuszú, amit a catalog.statuses kihagy; a felvétele konfigurációs szerkesztés:

JSON
"catalog": { "statuses": ["released", "archived", "demo"] }

Egy platformot kihagy, ha a doboznak nincs meg a rendszere; a list ezt jelenti: skipped <name>: this box has no '<system>' system.


Eltávolítás

SH
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, a témáidba tett logókat és a /boot/postshare.sh blokkját, 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.


Hibakeresés

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
Újraindítás után a bejegyzés szövegként mutatja: TELETYPE GAMES a ttg-store: theme logos blokk a /boot/postshare.sh-ban; ha hiányzik, a napló megmondja, miért (a /boot nem volt írhatóra csatolható) — futtasd újra a telepítőt
skipped <name>: sold on the store's site fizetős cím; az áruház névtelenül tölt le, ezért az oldalon kell megvenni
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