UNPKG

arx-convert

Version:

Converts various Arx Fatalis formats to JSON or YAML and back

414 lines 9.86 kB
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://arx-tools.github.io/schemas/fts.schema.json", "title": "FTS", "description": "FTS (FasT Scene) format of Arx Fatalis interpreted as JSON by arx-convert", "$defs": { "uint8": { "type": "integer", "minimum": 0, "maximum": 255 }, "vector3": { "type": "object", "properties": { "x": { "type": "number" }, "y": { "type": "number" }, "z": { "type": "number" } }, "required": [ "x", "y", "z" ] }, "positiveInt16": { "type": "integer", "minimum": 0, "maximum": 32767 }, "positiveInt32": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, "vertex": { "type": "object", "properties": { "x": { "type": "number" }, "y": { "type": "number" }, "z": { "type": "number" }, "u": { "type": "number" }, "v": { "type": "number" }, "llfColorIdx": { "$ref": "#/$defs/positiveInt32" } }, "required": [ "x", "y", "z", "u", "v" ] }, "int16": { "type": "integer", "minimum": -32768, "maximum": 32767 } }, "type": "object", "properties": { "header": { "type": "object", "properties": { "levelIdx": { "type": "integer", "minimum": 0 }, "mScenePosition": { "$ref": "#/$defs/vector3" } }, "required": [ "levelIdx", "mScenePosition" ] }, "uniqueHeaders": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string", "maxLength": 256 }, "check": { "type": "array", "items": { "$ref": "#/$defs/uint8" }, "minLength": 512, "maxLength": 512 } }, "required": [ "path", "check" ] } }, "textureContainers": { "type": "array", "items": { "type": "object", "properties": { "id": { "$ref": "#/$defs/positiveInt32" }, "filename": { "description": "Filename of an image within graph/obj3d/textures, like \"[stone]_human_castle_wall1.bmp\"", "type": "string", "maxLength": 256 } }, "required": [ "id", "filename" ] } }, "cells": { "type": "array", "items": { "type": "object", "properties": { "anchors": { "type": "array", "items": { "$ref": "#/$defs/positiveInt32" } } } } }, "polygons": { "type": "array", "items": { "type": "object", "properties": { "vertices": { "type": "array", "items": { "$ref": "#/$defs/vertex" }, "minItems": 4, "maxItems": 4 }, "textureContainerId": { "$ref": "#/$defs/positiveInt32" }, "norm": { "$ref": "#/$defs/vector3" }, "norm2": { "$ref": "#/$defs/vector3" }, "normals": { "type": "array", "items": { "$ref": "#/$defs/vector3" }, "minItems": 4, "maxItems": 4 }, "transval": { "description": "Opacity type and amount when ArxPolygon.flags & ArxPolygonFlags.Transparent: 2 or more = multiplicative; 1 = additive; 0 = normal; -1 or less = subtractive", "type": "integer" }, "area": { "type": "number" }, "flags": { "description": "ArxPolygonFlags", "$ref": "#/$defs/positiveInt32" }, "room": { "$ref": "#/$defs/positiveInt16" } }, "required": [ "vertices", "textureContainerId", "norm", "norm2", "transval", "area", "flags", "room" ] } }, "anchors": { "type": "array", "items": { "type": "object", "properties": { "data": { "type": "object", "properties": { "position": { "$ref": "#/$defs/vector3" }, "radius": { "type": "number", "minimum": 0 }, "height": { "type": "number", "minimum": 0 }, "isBlocked": { "type": "boolean" } }, "required": [ "position", "radius", "height", "isBlocked" ] }, "linkedAnchors": { "type": "array", "items": { "$ref": "#/$defs/positiveInt32" } } }, "required": [ "data", "linkedAnchors" ] } }, "portals": { "type": "array", "items": { "type": "object", "properties": { "polygon": { "type": "object", "properties": { "min": { "$ref": "#/$defs/vector3" }, "max": { "$ref": "#/$defs/vector3" }, "norm": { "$ref": "#/$defs/vector3" }, "norm2": { "$ref": "#/$defs/vector3" }, "vertices": { "type": "array", "items": { "description": "D3DTLVERTEX with hardcoded color, specular, tu and tv values - see https://learn.microsoft.com/en-us/previous-versions/ms896915(v=msdn.10)", "type": "object", "properties": { "position": { "description": "sx, sy and sz of D3DTLVERTEX (screen coordinates)", "$ref": "#/$defs/vector3" }, "rhw": { "description": "portal bounds radius - used by ARX_PORTALS_Frustrum_ComputeRoom; [r]eciprocal of [h]omogeneous [w] from homogeneous coordinates (x, y, z, w) - see https://learn.microsoft.com/en-us/previous-versions/ms896915(v=msdn.10)#members", "type": "number" } }, "required": [ "position", "rhw" ] }, "minLength": 4, "maxLength": 4 }, "center": { "$ref": "#/$defs/vector3" } }, "required": [ "min", "max", "norm", "norm2", "vertices", "center" ] }, "room1": { "$ref": "#/$defs/positiveInt32" }, "room2": { "$ref": "#/$defs/positiveInt32" }, "usePortal": { "$ref": "#/$defs/int16" } }, "required": [ "polygon", "room1", "room2", "usePortal" ] } }, "rooms": { "type": "array", "items": { "type": "object", "properties": { "portals": { "type": "array", "items": { "$ref": "#/$defs/positiveInt32" } }, "polygons": { "type": "array", "items": { "type": "object", "properties": { "cellX": { "type": "integer", "minimum": 0, "maximum": 160 }, "cellY": { "type": "integer", "minimum": 0, "maximum": 160 }, "polygonIdx": { "description": "This number is a counter for polygons in the cell, it has no relation to the order of polygons globally", "$ref": "#/$defs/positiveInt16" } }, "required": [ "cellX", "cellY", "polygonIdx" ] } } }, "required": [ "portals", "polygons" ] } }, "roomDistances": { "type": "array", "items": { "type": "object", "properties": { "distance": { "anyOf": [ { "const": -1, "description": "-1 means use truedist" }, { "type": "number", "minimum": 0 } ] }, "startPosition": { "$ref": "#/$defs/vector3" }, "endPosition": { "$ref": "#/$defs/vector3" } }, "required": [ "distance", "startPosition", "endPosition" ] } } }, "required": [ "header", "textureContainers", "cells", "polygons", "anchors", "portals", "rooms", "roomDistances" ] }