changedInput schema / properties / description / description
Previous value: -"What it is, what is weird about it, where it is going (60-4000 chars)"New value: +"What the game is, its audience and what creators can show (60-4000 chars)"
changedInput schema / properties / files / description
Previous value: -"Multi-file build instead of html; must include index.html at the root"New value: +"Optional multi-file playable version instead of html; must include index.html at the root"
changedInput schema / properties / html / description
Previous value: -"The whole game as one self-contained index.html (preferred). Max 8 MB."New value: +"Optional playable version hosted on FanZero, self-contained index.html, max 8 MB. Omit for an online game; list its existing platforms instead"
addedInput schema / properties / media
Added value: +{
+ "description": "Screenshots, gameplay and trailers. At least one when no optional playable version is supplied",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "alt": {
+ "maxLength": 200,
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "image",
+ "video"
+ ],
+ "type": "string"
+ },
+ "url": {
+ "description": "Public HTTPS screenshot, gameplay or trailer URL; validated without fetching it",
+ "maxLength": 1000,
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "url"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "type": "array"
+}
addedInput schema / properties / monetization
Added value: +{
+ "description": "Explain how the game earns revenue across platforms; do not guess an unknown price",
+ "maxLength": 600,
+ "type": "string"
+}
addedInput schema / properties / platforms
Added value: +{
+ "description": "Where to access/buy the actual game, each with its own price/model. At least one without a build",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "currency": {
+ "description": "Uppercase currency code, e.g. EUR or USD; required for a positive price",
+ "pattern": "^[A-Z]{3}$",
+ "type": "string"
+ },
+ "monetization": {
+ "enum": [
+ "paid",
+ "free",
+ "free_to_play",
+ "subscription",
+ "other"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 60,
+ "minLength": 1,
+ "type": "string"
+ },
+ "note": {
+ "description": "Price conditions, subscription period or optional purchase details",
+ "maxLength": 400,
+ "type": "string"
+ },
+ "price": {
+ "description": "This platform's purchase price. Omit an unknown price; zero means explicitly zero, never an assumed free game",
+ "minimum": 0,
+ "type": "number"
+ },
+ "url": {
+ "description": "Public HTTPS game/store URL",
+ "maxLength": 1000,
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "url"
+ ],
+ "type": "object"
+ },
+ "maxItems": 12,
+ "type": "array"
+}
addedInput schema / properties / resubmit
Added value: +{
+ "description": "For a metadata-only listing: rerun review with its current metadata",
+ "type": "boolean"
+}
changedInput schema / properties / stage / description
Previous value: -"Left out: prototype"New value: +"Optional. Omitted means not specified on a metadata-only listing; legacy playable submissions default to prototype"
changedInput schema / properties / stage / enum
Previous value: -[
- "napkin",
- "prototype",
- "vertical-slice",
- "alpha"
-]New value: +[
+ "napkin",
+ "prototype",
+ "vertical-slice",
+ "alpha",
+ "beta",
+ "released"
+]
addedOutput schema / properties / has_playable
Added value: +{
+ "type": "boolean"
+}
addedOutput schema / properties / media
Added value: +{
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "alt": {
+ "maxLength": 200,
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "image",
+ "video"
+ ],
+ "type": "string"
+ },
+ "url": {
+ "description": "Public HTTPS screenshot, gameplay or trailer URL; validated without fetching it",
+ "maxLength": 1000,
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}
addedOutput schema / properties / monetization
Added value: +{
+ "type": "string"
+}
addedOutput schema / properties / platforms
Added value: +{
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "currency": {
+ "description": "Uppercase currency code, e.g. EUR or USD; required for a positive price",
+ "pattern": "^[A-Z]{3}$",
+ "type": "string"
+ },
+ "monetization": {
+ "enum": [
+ "paid",
+ "free",
+ "free_to_play",
+ "subscription",
+ "other"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "maxLength": 60,
+ "minLength": 1,
+ "type": "string"
+ },
+ "note": {
+ "description": "Price conditions, subscription period or optional purchase details",
+ "maxLength": 400,
+ "type": "string"
+ },
+ "price": {
+ "description": "This platform's purchase price. Omit an unknown price; zero means explicitly zero, never an assumed free game",
+ "minimum": 0,
+ "type": "number"
+ },
+ "url": {
+ "description": "Public HTTPS game/store URL",
+ "maxLength": 1000,
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+}
changedOutput schema / properties / preview_url / description
Previous value: -"The current build, playable in a browser"New value: +"Optional playable version; null for a listing without a build"
changedOutput schema / properties / preview_url / type
Previous value: -"string"New value: +[
+ "string",
+ "null"
+]
changedOutput schema / required
Previous value: -[
- "game_id",
- "slug",
- "title",
- "version",
- "status",
- "next_step",
- "genre",
- "stage",
- "store_url",
- "url",
- "preview_url",
- "blocking",
- "notes",
- "critic",
- "curator_note",
- "pacts",
- "warnings",
- "updated_at",
- "pact_changes"
-]New value: +[
+ "game_id",
+ "slug",
+ "title",
+ "version",
+ "status",
+ "next_step",
+ "genre",
+ "stage",
+ "store_url",
+ "url",
+ "preview_url",
+ "has_playable",
+ "media",
+ "platforms",
+ "monetization",
+ "blocking",
+ "notes",
+ "critic",
+ "curator_note",
+ "pacts",
+ "warnings",
+ "updated_at",
+ "pact_changes"
+]