catalogue.json: PlayDrop-Spielmetadaten und Lokalisierung
Referenz für Spieltitel, Beschreibungen, Genre-Tags, Bilder und Videos des Spieleintrags, Übersetzungen und das optionale Feld server im Format von PlayDrop Connector.
PlayDrop Connector sendet die Metadaten aus catalogue.json zusammen mit den Spieldateien; ein Kommandozeilentool ist nicht nötig. PlayDrop Cloud verwaltet diese Metadaten für Studio-Spiele.
Vollständiger privater Upload mit prepare_catalogue_upload
{
"requestId": "my-game-v1-unique-request",
"catalogue": {
"apps": [
{
"name": "my-game",
"displayName": "My Game",
"file": "index.html",
"version": "1.0.0",
"visibility": "PRIVATE",
"authMode": "OPTIONAL",
"surfaceTargets": {
"desktop": true,
"mobileLandscape": false,
"mobilePortrait": false
}
}
]
},
"expectedCurrentVersion": {
"my-game": null
},
"files": [
{
"path": "index.html",
"text": "<!doctype html><html><head><title>My Game</title></head><body><button onclick=\"this.textContent=Number(this.textContent)+1\">0</button></body></html>"
}
]
}Dies ist eine vollständige prepare_catalogue_upload-Anfrage für ein neues privates Spiel. Ersetze das Beispiel-HTML durch dein gebautes Spiel und verwende für jeden beabsichtigten Upload eine eindeutige requestId. Das Objekt catalogue enthält catalogue.json; files und expectedCurrentVersion gehören außerhalb dieses Objekts zur Werkzeuganfrage.
apps[].file muss genau einem files[].path entsprechen. Ohne file lautet der Standardpfad <name>.html, nicht index.html. surfaceTargets ist ein Objekt mit den booleschen Werten desktop, mobileLandscape und mobilePortrait; aktiviere mindestens eine getestete Oberfläche. Gib Version und Sichtbarkeit ausdrücklich an. Das Beispiel verwendet eingebetteten Text; Anhänge oder signierte Datei-Uploads können denselben Pfad nutzen.
Sende nach der Vorbereitung alle angeforderten Dateiinhalte und rufe complete_catalogue_upload mit derselben requestId auf. Öffne die private Version zum Testen. Lies für ein Update list_games, behalte denselben name, liefere eine neue version und den vollständigen Snapshot und setze expectedCurrentVersion[name] auf die vom Server gemeldete aktuelle öffentliche Version oder null, falls keine existiert. Dies prüft Konflikte und ist nicht die hochgeladene Version. Setze unterbrochene Uploads mit ihrer ursprünglichen Anfrage-ID fort. Veröffentliche die gespeicherte, getestete Version bei Bedarf mit publish_game_version.
Kompatibilitätsbeispiel für das ältere Einzelspiel-Format
Das folgende Beispiel zeigt das ältere Einzelspiel-Format. Vollständige Kataloge unterstützen auch mehrere Spiele, Assets, Packs und Spezifikationen; fragen Sie den Connector nach dem aktuellen Schema. Jedes Update enthält einen vollständigen Stand mit expliziter Version und Sichtbarkeit. Ausgelassene Katalogeinträge werden nicht gelöscht.
Lassen Sie den kleingeschriebenen Slug bei Updates unverändert. Ergänzen Sie nach Bedarf einen Anzeigetitel, eine zutreffende Beschreibung, die Steuerung, die Ausgangssprache und bekannte Tags. Das folgende Beispiel verwendet das vorhandene Genre-Tag für Plattformer.
{
"apps": [{
"name": "moon-jump",
"displayName": "Moon Jump",
"description": "Jump between lunar platforms and reach the finish.",
"controls": "Arrow keys to move. Space to jump.",
"sourceLocale": "en",
"tags": ["game-genre/platformer"]
}]
}Unterstützte Felder und Grenzwerte
name: 1–100 Kleinbuchstaben, Ziffern oder Bindestriche, beginnend mit einem Buchstaben oder einer Ziffer. displayName: nicht leerer Titel. subtitle: bis zu 120 Zeichen. description: bis zu 3.000 Zeichen Markdown, ohne H1-Überschriften, eingebettete Medien oder Tabellen. inspirationPrompt: bis zu 400 Zeichen einzeiliger Klartext. Textlimits werden in JavaScript-UTF-16-Codeeinheiten gezählt.
Zu den optionalen Feldern gehören controls, releaseNotes, makingOf, emoji, color, sourceRepository, license, tags, sourceLocale, listingLocalizations, listingMedia und server. Tags verwenden bestehende Referenzen im Format group-slug/tag-slug; zulässig sind höchstens 20 verschiedene Tags. server listet die Colyseus-Rooms einer hochgeladenen server.js auf, zum Beispiel "server": { "rooms": ["game"] }; siehe Server-SDK. Fragen Sie vor der Veröffentlichung beim Connector die aktuell akzeptierten Lizenzwerte und die vollständigen Feldregeln ab. Optionale Hinweise für die nativen Apps: prefetch listet hochgeladene Dateien auf, die die PlayDrop-Apps für iOS, macOS und Android vor dem Spielen herunterladen können, zum Beispiel "prefetch": { "required": ["game.js"], "optional": ["music.mp3"] } (die Einstiegsseite ist immer enthalten), und "offlineSupported": true erlaubt diesen Apps, das Spiel offline anzubieten, sobald seine erforderlichen Dateien gespeichert sind. Ungültige Werte werden ignoriert und blockieren nie einen Upload; Websites laden Spiele wie gewohnt.
Sofort-Spiele: Setze "instant": true, wenn das Spiel innerhalb von 2 Sekunden mit höchstens 10 MB Startdateien spielbar ist (die Einstiegsseite plus prefetch.required oder alle hochgeladenen Dateien, wenn keine aufgeführt sind). Sofort-Spiele tragen das Blitz-Abzeichen und laufen im Sofort-Feed der PlayDrop-Handy-Apps. Lege tiefere Level und Extras in prefetch.optional, schließe Shader-Kompilierung und andere Vorbereitung vor dem Aufruf von ready() ab, lass die Vorschau Gameplay statt eines Titelbildschirms zeigen und erlaube Gäste (authMode OPTIONAL oder NONE), damit alle das Spiel im Feed sehen. PlayDrop prüft die Größe beim Upload und entfernt das Abzeichen bei Versionen, die auf Handys langsam starten; ein Spiel, das die Grenze verfehlt, wird trotzdem veröffentlicht.
Bilder und Videos für den Spieleintrag
Laden Sie die Medien des Spieleintrags als Dateien neben index.html hoch, benannt nach ihrem Pfad: listing/icon.png, listing/hero-landscape.png (16:9) und listing/hero-portrait.png (9:16) mit dem Spieltitel im Bild, Screenshots wie listing/screenshots/landscape/0.png sowie die Videos listing/videos/landscape/0.mp4 (der Trailer) und listing/videos/portrait/0.mp4 (der Mobile-Teaser). Videos laufen stumm auf Spielkarten und der Spielseite, der Trailer auf Computern und Fernsehern, der Teaser auf Smartphones. So zeigen Sie am schnellsten das Gameplay und gewinnen einen ersten Spielstart. Bilder sind PNG-, Videos MP4-Dateien.
Spieleintrag korrekt übersetzen
Veröffentlichen Sie immer Englisch und zusätzlich Ihre eigene Sprache, falls diese abweicht. Setzen Sie sourceLocale auf die Originalsprache. listingLocalizations unterstützt Englisch, Französisch, Deutsch, Spanisch, brasilianisches Portugiesisch, Indonesisch, Japanisch, Koreanisch, traditionelles Chinesisch und vereinfachtes Chinesisch. Jede Übersetzung benötigt locale und displayName; wenn Sie sie zusammen mit ihrer Quelle hochladen, ergänzt PlayDrop sourceHash. Laden Sie übersetzte Bilder unter listing/locales/<locale>/ hoch, zum Beispiel listing/locales/fr/hero-landscape.png mit dem französischen Titel; sie werden automatisch der passenden Übersetzung zugeordnet. Aktualisieren Sie die Übersetzungen nach Änderungen an der Quelle. Die Übersetzung des Spieleintrags übersetzt nicht das Spiel selbst.
Spieler, Gruppen und Controller
Lege mit types, party, controller und roomVoice in jedem Spieleintrag fest, wie dein Spiel gespielt wird:
{
"types": ["solo", "online", "party"],
"party": { "local": [1, 2, 3, 4], "online": [1, 2, 3, 4] },
"controller": { "support": "optional", "type": "simpler" },
"roomVoice": true
}types kombiniert solo (allein spielbar), online (mit anderen über das Netzwerk) und party (eine Gruppe spielt zusammen). party.local nennt die genauen Personenzahlen, die an einem Bildschirm spielen können; party.online nennt die Größen von Freundesgruppen (bis 4), die gemeinsam online einsteigen können, nicht die Raumkapazität. Größen sind exakt: [2, 4] schließt 3 aus. party erfordert den Typ party, party.online erfordert online, und eine 1 in party.local erfordert solo. roomVoice: true aktiviert den Raumsprachchat und erfordert online.
controller.support ist off (Standard, wenn controller fehlt), optional oder required. Ist es nicht off, nennt controller.type die Bedienelemente, die das Spiel mindestens braucht:
any: Richtungen, Bestätigen und Abbrechen; jeder Controller funktioniert, auch Fernbedienungen.simpler: ein Analogstick, vier Aktionstasten und Menü; PlayDrop-Handy-Controller und Standard-Gamepads erfüllen das Profil.standard: Steuerkreuz, zwei drückbare Sticks, vier Aktionstasten, zwei Schultertasten, zwei Trigger und Menü.custom: reserviert für spielspezifische Handy-Steuerungen; noch nicht verfügbar.
Mit Controller-Unterstützung muss jede angegebene lokale Spielerzahl mit Controllern spielbar sein; lies Controller-Eingaben über das SDK. Bestehende Spiele können players und controllerMode behalten, die weiterhin funktionieren, neue Spiele verwenden aber diese Felder, und ein Eintrag darf beides nicht mischen. Der Host wählt lokal oder online, niemals beides. Die Angaben bleiben bei Cloud-, CLI- und MCP-Uploads, gespeicherten privaten Versionen und Veröffentlichung erhalten. Die Verfügbarkeit hängt auch vom Plattform-Rollout und der Host-Version ab.
Liefere für MCP-Serveruploads ein gebautes ESM-Bundle .mjs/.js als SERVER-Deskriptor und verweise mit server.entry darauf. Cloud/CLI-Quellprojekte behalten ihren TypeScript-Einstieg. PlayDrop stellt Colyseus und die Server-SDK-Laufzeit bereit; füge niemals Zugangsdaten eines Sprachanbieters ins Spiel ein.