summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorEllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>2021-10-01 00:54:13 +0100
committerGitHub <noreply@github.com>2021-09-30 19:54:13 -0400
commit26b00a2431a70ff190a2b22ee1faf77afa75a034 (patch)
tree45c9b88c336c08e508050db762f608c282f334be /docs
parentec0c2576a4683dace3f53a6a0ae4b1aa86bf8a96 (diff)
ZAPD XML specification (#194)
* Make XML spec * Clarify some wording
Diffstat (limited to 'docs')
-rw-r--r--docs/zapd_xml_spec.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/docs/zapd_xml_spec.md b/docs/zapd_xml_spec.md
new file mode 100644
index 0000000..e060ec5
--- /dev/null
+++ b/docs/zapd_xml_spec.md
@@ -0,0 +1,52 @@
+# ZAPD XML specification
+
+ZAPD XMLs use a restrictive subset of the XML standard: any ZAPD XML must be a valid XML (All elements starting with `<tag>` ending appropriately with `</tag>`, single "empty-element" tags with `/` at the end, etc.).
+
+Reminder that in
+```xml
+<a>
+ <b1>
+ <c/>
+ </b1>
+ <b2>
+ <d/>
+ </b2>
+ <e/>
+</a>
+```
+`<b1>`, `<b2>`, `<e/>` are *children* of `<a>`, but `<c/>` is not. `<c/>` is a *descendent* of `<a>` and a child of `<b>`.
+
+- Every XML's outermost element start/end tag is a single `<Root>`.
+- The children of a `<Root>` must be `<File>`s.
+- A `<File>` has *resources* as children. A resource is almost always single empty-element tag, and has one of the types
+ - `<Texture>`
+ - `<Background>`
+ - `<Blob>`
+ - `<DList>`
+ - `<TextureAnimation>`
+ - `<Scene>`
+ - `<Room>`
+ - `<AltHeader>`
+ - `<Animation>`
+ - `<PlayerAnimation>`
+ - `<CurveAnimation>`
+ - `<LegacyAnimation>`
+ - `<Skeleton>`
+ - `<LimbTable>`
+ - `<Limb>`
+ - `<Symbol>`
+ - `<Collision>`
+ - `<Scalar>`
+ - `<Vector>`
+ - `<Vtx>`
+ - `<Mtx>`
+ - `<Cutscene>`
+ - `<Array>`
+ - `<Path>`
+
+- A `<File>` cannot descend from a `<File>`.
+- All resources must be children of a `<File>`.
+- `<Array>` is the only paired resource tag enclosing an element; the element must be a single resource tag, one of
+ - `<Scalar>`
+ - `<Vector>`
+ - `<Vtx>`