Back to Outbreak: Soycoon City
SOURCE / PINNED RELEASE

Made of little things.

Outbreak: Soycoon City

Release
db7750b1d009…
Author-recorded commit
3ee3f5fd27a6…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-b87c04571a9

Archive hash verified: dbebdc772b142a1c…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

levels/level.schema.json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Soyindent Evil level v1",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "version": {
      "const": 1
    },
    "id": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]{1,64}$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "style": {
      "type": "string",
      "maxLength": 8000
    },
    "rules": {
      "$ref": "#/$defs/rules"
    },
    "assets": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/asset"
      },
      "minItems": 0,
      "maxItems": 96
    },
    "rooms": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/room"
      },
      "minItems": 1,
      "maxItems": 16
    }
  },
  "required": [
    "version",
    "name",
    "style",
    "rooms"
  ],
  "additionalProperties": false,
  "$defs": {
    "point": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        }
      },
      "required": [
        "x",
        "z"
      ],
      "additionalProperties": false
    },
    "rect": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "w": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 40
        },
        "d": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 40
        }
      },
      "required": [
        "x",
        "z",
        "w",
        "d"
      ],
      "additionalProperties": false
    },
    "prop": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "w": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 40
        },
        "d": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 40
        },
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "kind": {
          "enum": [
            "shelf",
            "desk",
            "crate",
            "wall",
            "bench"
          ]
        },
        "h": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 3.2
        }
      },
      "required": [
        "x",
        "z",
        "w",
        "d",
        "id",
        "kind",
        "h"
      ],
      "additionalProperties": false
    },
    "dressing": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "kind": {
          "enum": [
            "pinboard",
            "photo",
            "poster",
            "papers",
            "cleaning",
            "pipes"
          ]
        },
        "side": {
          "enum": [
            "north",
            "south",
            "east",
            "west"
          ]
        }
      },
      "required": [
        "x",
        "z",
        "id",
        "kind"
      ],
      "additionalProperties": false
    },
    "asset": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "path": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "url": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048
        },
        "sha256": {
          "type": "string",
          "pattern": "^[a-f0-9]{64}$"
        },
        "mime": {
          "enum": [
            "image/png",
            "image/jpeg",
            "image/webp"
          ]
        },
        "size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2000000
        }
      },
      "required": [
        "id",
        "sha256",
        "mime",
        "size"
      ],
      "additionalProperties": false
    },
    "camera": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "position": {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": -100,
            "maximum": 100
          },
          "minItems": 3,
          "maxItems": 3
        },
        "target": {
          "type": "array",
          "items": {
            "type": "number",
            "minimum": -100,
            "maximum": 100
          },
          "minItems": 3,
          "maxItems": 3
        },
        "fov": {
          "type": "number",
          "minimum": 25,
          "maximum": 90
        },
        "zone": {
          "$ref": "#/$defs/zone"
        },
        "background": {
          "type": "object",
          "properties": {
            "asset": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "signature": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100000
            }
          },
          "required": [
            "asset",
            "signature"
          ],
          "additionalProperties": false
        },
        "backdrop": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2800000
        },
        "artSignature": {
          "type": "string"
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "door": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "fallback": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "name",
        "position",
        "target",
        "fov",
        "zone"
      ],
      "additionalProperties": false
    },
    "door": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "side": {
          "enum": [
            "north",
            "south",
            "east",
            "west"
          ]
        },
        "to": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "targetDoor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "required": [
        "x",
        "z",
        "id",
        "side",
        "to",
        "targetDoor"
      ],
      "additionalProperties": false
    },
    "room": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "description": {
          "type": "string",
          "maxLength": 4000
        },
        "w": {
          "type": "number",
          "minimum": 3,
          "maximum": 30
        },
        "d": {
          "type": "number",
          "minimum": 3,
          "maximum": 30
        },
        "origin": {
          "$ref": "#/$defs/point"
        },
        "spawn": {
          "$ref": "#/$defs/point"
        },
        "props": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/prop"
          },
          "minItems": 0,
          "maxItems": 80
        },
        "dressing": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/dressing"
          },
          "minItems": 0,
          "maxItems": 80
        },
        "cameras": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/camera"
          },
          "minItems": 1,
          "maxItems": 12
        },
        "zombies": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/point"
          },
          "minItems": 0,
          "maxItems": 20
        },
        "doors": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/door"
          },
          "minItems": 0,
          "maxItems": 16
        },
        "herbs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/herb"
          },
          "maxItems": 20
        }
      },
      "required": [
        "id",
        "name",
        "description",
        "w",
        "d",
        "origin",
        "spawn",
        "props",
        "cameras",
        "zombies",
        "doors"
      ],
      "additionalProperties": false
    },
    "rules": {
      "type": "object",
      "properties": {
        "playerHealth": {
          "type": "number",
          "minimum": 25,
          "maximum": 100
        },
        "reserve": {
          "type": "integer",
          "minimum": 0,
          "maximum": 96
        },
        "zombieHealth": {
          "type": "integer",
          "minimum": 1,
          "maximum": 8
        },
        "zombieSpeed": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 2
        },
        "biteDamage": {
          "type": "number",
          "minimum": 1,
          "maximum": 50
        }
      },
      "required": [
        "playerHealth",
        "reserve",
        "zombieHealth",
        "zombieSpeed",
        "biteDamage"
      ],
      "additionalProperties": false
    },
    "polygon": {
      "type": "object",
      "properties": {
        "points": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/point"
          },
          "minItems": 3,
          "maxItems": 24
        }
      },
      "required": [
        "points"
      ],
      "additionalProperties": false
    },
    "zone": {
      "oneOf": [
        {
          "$ref": "#/$defs/rect"
        },
        {
          "$ref": "#/$defs/polygon"
        }
      ]
    },
    "herb": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "kind": {
          "const": "green"
        },
        "x": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        },
        "z": {
          "type": "number",
          "minimum": -100,
          "maximum": 100
        }
      },
      "required": [
        "id",
        "kind",
        "x",
        "z"
      ],
      "additionalProperties": false
    }
  }
}