UNPKG

arx-convert

Version:

Converts various Arx Fatalis formats to JSON or YAML and back

408 lines 10.6 kB
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://arx-tools.github.io/schemas/dlf.schema.json", "title": "DLF", "description": "DLF (Danae Level File) format of Arx Fatalis interpreted as JSON by arx-convert", "$defs": { "positiveInt32": { "type": "integer", "minimum": 0, "maximum": 2147483647 }, "vector3": { "type": "object", "properties": { "x": { "type": "number" }, "y": { "type": "number" }, "z": { "type": "number" } }, "required": [ "x", "y", "z" ] }, "rotation": { "description": "Euler angles in degrees", "type": "object", "properties": { "a": { "description": "Euler angle defined in degrees", "type": "number" }, "b": { "description": "Euler angle defined in degrees", "type": "number" }, "g": { "description": "Euler angle defined in degrees", "type": "number" } }, "required": [ "a", "b", "g" ] }, "uint8": { "type": "integer", "minimum": 0, "maximum": 255 }, "uint32": { "type": "integer", "minimum": 0, "maximum": 4294967295 }, "color": { "type": "object", "properties": { "r": { "$ref": "#/$defs/uint8" }, "g": { "$ref": "#/$defs/uint8" }, "b": { "$ref": "#/$defs/uint8" }, "a": { "description": "0.0 = fully transparent, 1.0 = fully opaque", "type": "number", "minimum": 0, "maximum": 1 } }, "required": [ "r", "g", "b", "a" ] } }, "type": "object", "properties": { "header": { "type": "object", "properties": { "lastModifiedBy": { "type": "string", "maxLength": 256 }, "lastModifiedAt": { "description": "Unix timestamp in seconds", "$ref": "#/$defs/positiveInt32" }, "player": { "type": "object", "properties": { "position": { "description": "Position of the player where it gets teleported to upon entering the level when no entity is specified as teleport target", "$ref": "#/$defs/vector3" }, "orientation": { "description": "The orientation of the player upon entering a level, specified in degrees. Only \"b\" is used which turns the player around its Y axis as all other rotations on other axis gets reset by the player animations.", "$ref": "#/$defs/rotation" } }, "required": [ "position", "orientation" ] }, "numberOfPolygonsInFTS": { "$ref": "#/$defs/positiveInt32" }, "levelIdx": { "type": "integer", "minimum": 0 } }, "required": [ "lastModifiedBy", "lastModifiedAt", "player", "numberOfPolygonsInFTS", "levelIdx" ] }, "interactiveObjects": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 512 }, "position": { "$ref": "#/$defs/vector3" }, "orientation": { "$ref": "#/$defs/rotation" }, "identifier": { "description": "Number at the end of entity ids: like the `56` in `goblin_base_0056`. No info on whether the game can handle identifiers larger than 4 digits.", "type": "integer", "minimum": 0, "maximum": 9999 } }, "required": [ "name", "position", "orientation", "identifier" ] } }, "fogs": { "type": "array", "items": { "type": "object", "properties": { "position": { "$ref": "#/$defs/vector3" }, "color": { "$ref": "#/$defs/color" }, "size": { "type": "number", "minimum": 0 }, "special": { "anyOf": [ { "const": 0 }, { "description": "FOG_DIRECTIONAL", "const": 1 } ] }, "scale": { "type": "number", "minimum": 0 }, "move": { "description": "A normal vector, all axis are between -1 and 1", "type": "object", "properties": { "x": { "type": "number", "minimum": -1, "maximum": 1 }, "y": { "type": "number", "minimum": -1, "maximum": 1 }, "z": { "type": "number", "minimum": -1, "maximum": 1 } }, "required": [ "x", "y", "z" ] }, "orientation": { "$ref": "#/$defs/rotation" }, "speed": { "description": "Movement speed of fog particles: \"move\" * (\"speed\" * 0.1)", "type": "number", "minimum": 0 }, "rotateSpeed": { "description": "Particle rotation between 0 (stationary) and 1 (rotating as fast as the FPS allows)", "type": "number", "minimum": 0, "maximum": 1 }, "toLive": { "description": "How long each particle lives (fade in -> show -> fade out) in milliseconds", "$ref": "#/$defs/positiveInt32" }, "frequency": { "description": "Whether to draw new fog particles is checked by creating a random number between 0 and 2000. If that random number is < frequency then a new particle is drawn. Having the frequency set to 2000 or above means spawning fog particles on every frame.", "$ref": "#/$defs/positiveInt32" } }, "required": [ "position", "color", "size", "special", "scale", "move", "orientation", "speed", "rotateSpeed", "toLive", "frequency" ] } }, "paths": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 64 }, "points": { "type": "array", "items": { "type": "object", "properties": { "position": { "$ref": "#/$defs/vector3" }, "type": { "anyOf": [ { "description": "ArxZoneAndPathPointType.Standard", "const": 0 }, { "description": "ArxZoneAndPathPointType.Bezier", "const": 1 }, { "description": "ArxZoneAndPathPointType.BezierControlPoint", "const": 2 } ] }, "time": { "$ref": "#/$defs/uint32" } }, "required": [ "position", "type", "time" ] } } }, "required": [ "name", "points" ] } }, "zones": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 64 }, "height": { "anyOf": [ { "$ref": "#/$defs/positiveInt32" }, { "description": "The zone has infinite height", "const": -1 } ] }, "backgroundColor": { "$ref": "#/$defs/color" }, "drawDistance": { "type": "number", "minimum": 0 }, "ambienceMaxVolume": { "description": "A floating point number between 0 and 100.", "type": "number", "minimum": 0, "maximum": 100 }, "ambience": { "anyOf": [ { "const": "NONE" }, { "description": "The filename of an amb file in \"sfx/ambiance/\" folder, for example \"ambient_gob_jail_main\".", "type": "string", "maxLength": 128 } ] }, "points": { "type": "array", "items": { "type": "object", "properties": { "position": { "$ref": "#/$defs/vector3" }, "type": { "anyOf": [ { "description": "ArxZoneAndPathPointType.Standard", "const": 0 }, { "description": "ArxZoneAndPathPointType.Bezier", "const": 1 }, { "description": "ArxZoneAndPathPointType.BezierControlPoint", "const": 2 } ] }, "time": { "$ref": "#/$defs/uint32" } }, "required": [ "position", "type", "time" ] } } }, "required": [ "name", "height", "points" ] } } }, "required": [ "header", "interactiveObjects", "fogs", "paths", "zones" ] }