actor.rpg.generator
Schema Diff
+274 -106
Compatibility Analysis
Breaking Changes Detected
44 breaking changes, 101 non-breaking changes.
Breaking Changes (44)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator#fallback", src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.blob", kind: "prop", name: Some("blob") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator#fallback", src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.assetName", kind: "prop", name: Some("assetName") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.eyes", kind: "prop", name: Some("eyes") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.skin", kind: "prop", name: Some("skin") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator#layer", src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "actor.rpg.generator#layer", src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.blob", kind: "prop", name: Some("blob") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body.layers:items", src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.blob", kind: "prop", name: Some("blob") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body.layers:items", src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.id", kind: "prop", name: Some("id") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.version", kind: "prop", name: Some("version") }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.hex" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.mode" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.tone" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.assetName" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.blob" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.main" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub1" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub2" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub3" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.id" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.title" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.hex" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.mode" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.tone" }
- RemovedVertex RemovedVertex { vertex_id: "actor.rpg.generator:body.version" }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.hex", kind: "prop", name: Some("hex") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.mode", kind: "prop", name: Some("mode") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.tone", kind: "prop", name: Some("tone") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.assetName", kind: "prop", name: Some("assetName") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.colors", kind: "prop", name: Some("colors") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.title", kind: "prop", name: Some("title") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.main", kind: "prop", name: Some("main") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub1", kind: "prop", name: Some("sub1") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub2", kind: "prop", name: Some("sub2") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub3", kind: "prop", name: Some("sub3") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.hex", kind: "prop", name: Some("hex") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.mode", kind: "prop", name: Some("mode") }
- RemovedEdge RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.tone", kind: "prop", name: Some("tone") }
- KindChanged KindChanged { vertex_id: "actor.rpg.generator:body.eyes", old_kind: "object", new_kind: "ref" }
- KindChanged KindChanged { vertex_id: "actor.rpg.generator:body.layers:items", old_kind: "object", new_kind: "ref" }
- KindChanged KindChanged { vertex_id: "actor.rpg.generator:body.skin", old_kind: "object", new_kind: "ref" }
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.eyes", sort: "ref", value: "#eyes" }
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.skin", sort: "ref", value: "#skin" }
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.layers:items", sort: "ref", value: "#layer" }
Non-Breaking Changes (101)
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#colors" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#colors.main" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#colors.sub1" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#colors.sub2" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#colors.sub3" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#eyes" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#eyes.hex" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#eyes.mode" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#eyes.tone" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.assetName" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.behindRows" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.behindRows:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.blob" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.colors" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.subtractMask" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.title" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.zSlot" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#fallback.zSlotByDir" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.assetName" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.behindRows" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.behindRows:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.blob" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.colors" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.disabled" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.id" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.layerClass" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.submaskExclusions" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.submaskRule" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.subtractMask" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.suppress" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.suppressAs" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.suppressSpecific" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.title" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.zSlot" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#layer.zSlotByDir" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#skin" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#skin.hex" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#skin.mode" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#skin.tone" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.classes" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.classes:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.layers" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.layers:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.classes" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.classes:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.layers" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.layers:items" }
- AddedVertex AddedVertex { vertex_id: "actor.rpg.generator:body.faceMode" }
- AddedEdge AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.main", kind: "prop", name: Some("main") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub1", kind: "prop", name: Some("sub1") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub2", kind: "prop", name: Some("sub2") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub3", kind: "prop", name: Some("sub3") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.hex", kind: "prop", name: Some("hex") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.mode", kind: "prop", name: Some("mode") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.tone", kind: "prop", name: Some("tone") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.behindRows", kind: "prop", name: Some("behindRows") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.colors", kind: "prop", name: Some("colors") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.subtractMask", kind: "prop", name: Some("subtractMask") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.title", kind: "prop", name: Some("title") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.zSlot", kind: "prop", name: Some("zSlot") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.zSlotByDir", kind: "prop", name: Some("zSlotByDir") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback.behindRows", tgt: "actor.rpg.generator#fallback.behindRows:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#fallback.colors", tgt: "actor.rpg.generator#colors", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.assetName", kind: "prop", name: Some("assetName") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.behindRows", kind: "prop", name: Some("behindRows") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.colors", kind: "prop", name: Some("colors") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.disabled", kind: "prop", name: Some("disabled") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.layerClass", kind: "prop", name: Some("layerClass") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.submaskExclusions", kind: "prop", name: Some("submaskExclusions") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.submaskRule", kind: "prop", name: Some("submaskRule") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.subtractMask", kind: "prop", name: Some("subtractMask") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppress", kind: "prop", name: Some("suppress") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppressAs", kind: "prop", name: Some("suppressAs") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppressSpecific", kind: "prop", name: Some("suppressSpecific") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.title", kind: "prop", name: Some("title") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.zSlot", kind: "prop", name: Some("zSlot") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.zSlotByDir", kind: "prop", name: Some("zSlotByDir") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer.behindRows", tgt: "actor.rpg.generator#layer.behindRows:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer.colors", tgt: "actor.rpg.generator#colors", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer.submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer.suppress", tgt: "actor.rpg.generator#suppressionRules", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#layer.suppressAs", tgt: "actor.rpg.generator#fallback", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.hex", kind: "prop", name: Some("hex") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.mode", kind: "prop", name: Some("mode") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.tone", kind: "prop", name: Some("tone") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions.classes", kind: "prop", name: Some("classes") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions.layers", kind: "prop", name: Some("layers") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#submaskExclusions.classes", tgt: "actor.rpg.generator#submaskExclusions.classes:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#submaskExclusions.layers", tgt: "actor.rpg.generator#submaskExclusions.layers:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#suppressionRules", tgt: "actor.rpg.generator#suppressionRules.classes", kind: "prop", name: Some("classes") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#suppressionRules", tgt: "actor.rpg.generator#suppressionRules.layers", kind: "prop", name: Some("layers") }
- AddedEdge AddedEdge { src: "actor.rpg.generator#suppressionRules.classes", tgt: "actor.rpg.generator#suppressionRules.classes:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator#suppressionRules.layers", tgt: "actor.rpg.generator#suppressionRules.layers:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.faceMode", kind: "prop", name: Some("faceMode") }
- AddedEdge AddedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator#eyes", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator#layer", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator#skin", kind: "ref", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.hex" }RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.mode" }RemovedVertex { vertex_id: "actor.rpg.generator:body.eyes.tone" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.assetName" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.blob" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.main" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub1" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub2" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.colors.sub3" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.id" }RemovedVertex { vertex_id: "actor.rpg.generator:body.layers:items.title" }RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.hex" }RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.mode" }RemovedVertex { vertex_id: "actor.rpg.generator:body.skin.tone" }RemovedVertex { vertex_id: "actor.rpg.generator:body.version" }
Added Elements
AddedVertex { vertex_id: "actor.rpg.generator#colors" }AddedVertex { vertex_id: "actor.rpg.generator#colors.main" }AddedVertex { vertex_id: "actor.rpg.generator#colors.sub1" }AddedVertex { vertex_id: "actor.rpg.generator#colors.sub2" }AddedVertex { vertex_id: "actor.rpg.generator#colors.sub3" }AddedVertex { vertex_id: "actor.rpg.generator#eyes" }AddedVertex { vertex_id: "actor.rpg.generator#eyes.hex" }AddedVertex { vertex_id: "actor.rpg.generator#eyes.mode" }AddedVertex { vertex_id: "actor.rpg.generator#eyes.tone" }AddedVertex { vertex_id: "actor.rpg.generator#fallback" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.assetName" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.behindRows" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.behindRows:items" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.blob" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.colors" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.subtractMask" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.title" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.zSlot" }AddedVertex { vertex_id: "actor.rpg.generator#fallback.zSlotByDir" }AddedVertex { vertex_id: "actor.rpg.generator#layer" }AddedVertex { vertex_id: "actor.rpg.generator#layer.assetName" }AddedVertex { vertex_id: "actor.rpg.generator#layer.behindRows" }AddedVertex { vertex_id: "actor.rpg.generator#layer.behindRows:items" }AddedVertex { vertex_id: "actor.rpg.generator#layer.blob" }AddedVertex { vertex_id: "actor.rpg.generator#layer.colors" }AddedVertex { vertex_id: "actor.rpg.generator#layer.disabled" }AddedVertex { vertex_id: "actor.rpg.generator#layer.id" }AddedVertex { vertex_id: "actor.rpg.generator#layer.layerClass" }AddedVertex { vertex_id: "actor.rpg.generator#layer.submaskExclusions" }AddedVertex { vertex_id: "actor.rpg.generator#layer.submaskRule" }AddedVertex { vertex_id: "actor.rpg.generator#layer.subtractMask" }AddedVertex { vertex_id: "actor.rpg.generator#layer.suppress" }AddedVertex { vertex_id: "actor.rpg.generator#layer.suppressAs" }AddedVertex { vertex_id: "actor.rpg.generator#layer.suppressSpecific" }AddedVertex { vertex_id: "actor.rpg.generator#layer.title" }AddedVertex { vertex_id: "actor.rpg.generator#layer.zSlot" }AddedVertex { vertex_id: "actor.rpg.generator#layer.zSlotByDir" }AddedVertex { vertex_id: "actor.rpg.generator#skin" }AddedVertex { vertex_id: "actor.rpg.generator#skin.hex" }AddedVertex { vertex_id: "actor.rpg.generator#skin.mode" }AddedVertex { vertex_id: "actor.rpg.generator#skin.tone" }AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions" }AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.classes" }AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.classes:items" }AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.layers" }AddedVertex { vertex_id: "actor.rpg.generator#submaskExclusions.layers:items" }AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules" }AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.classes" }AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.classes:items" }AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.layers" }AddedVertex { vertex_id: "actor.rpg.generator#suppressionRules.layers:items" }AddedVertex { vertex_id: "actor.rpg.generator:body.faceMode" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.eyes", sort: "ref", value: "#eyes" }
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.layers:items", sort: "ref", value: "#layer" }
- ConstraintAdded ConstraintAdded { vertex_id: "actor.rpg.generator:body.skin", sort: "ref", value: "#skin" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.eyes", kind: "prop", name: Some("eyes") }
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.skin", kind: "prop", name: Some("skin") }
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator#layer", src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator#layer", src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.blob", kind: "prop", name: Some("blob") }
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator#fallback", src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.blob", kind: "prop", name: Some("blob") }
- Breaking: RequiredEdgeAdded { vertex_id: "actor.rpg.generator#fallback", src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.assetName", kind: "prop", name: Some("assetName") }
- Breaking: RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body.layers:items", src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.blob", kind: "prop", name: Some("blob") }
- Breaking: RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body.layers:items", src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeRemoved { vertex_id: "actor.rpg.generator:body", src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.version", kind: "prop", name: Some("version") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.hex", kind: "prop", name: Some("hex") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.mode", kind: "prop", name: Some("mode") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator:body.eyes.tone", kind: "prop", name: Some("tone") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.assetName", kind: "prop", name: Some("assetName") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.colors", kind: "prop", name: Some("colors") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator:body.layers:items.title", kind: "prop", name: Some("title") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.main", kind: "prop", name: Some("main") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub1", kind: "prop", name: Some("sub1") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub2", kind: "prop", name: Some("sub2") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.layers:items.colors", tgt: "actor.rpg.generator:body.layers:items.colors.sub3", kind: "prop", name: Some("sub3") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.hex", kind: "prop", name: Some("hex") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.mode", kind: "prop", name: Some("mode") }
- Breaking: RemovedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator:body.skin.tone", kind: "prop", name: Some("tone") }
- Breaking: KindChanged { vertex_id: "actor.rpg.generator:body.eyes", old_kind: "object", new_kind: "ref" }
- Breaking: KindChanged { vertex_id: "actor.rpg.generator:body.layers:items", old_kind: "object", new_kind: "ref" }
- Breaking: KindChanged { vertex_id: "actor.rpg.generator:body.skin", old_kind: "object", new_kind: "ref" }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.main", kind: "prop", name: Some("main") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub1", kind: "prop", name: Some("sub1") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub2", kind: "prop", name: Some("sub2") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#colors", tgt: "actor.rpg.generator#colors.sub3", kind: "prop", name: Some("sub3") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.hex", kind: "prop", name: Some("hex") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.mode", kind: "prop", name: Some("mode") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#eyes", tgt: "actor.rpg.generator#eyes.tone", kind: "prop", name: Some("tone") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.behindRows", kind: "prop", name: Some("behindRows") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.colors", kind: "prop", name: Some("colors") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.subtractMask", kind: "prop", name: Some("subtractMask") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.title", kind: "prop", name: Some("title") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.zSlot", kind: "prop", name: Some("zSlot") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback", tgt: "actor.rpg.generator#fallback.zSlotByDir", kind: "prop", name: Some("zSlotByDir") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback.behindRows", tgt: "actor.rpg.generator#fallback.behindRows:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#fallback.colors", tgt: "actor.rpg.generator#colors", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.assetName", kind: "prop", name: Some("assetName") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.behindRows", kind: "prop", name: Some("behindRows") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.colors", kind: "prop", name: Some("colors") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.disabled", kind: "prop", name: Some("disabled") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.layerClass", kind: "prop", name: Some("layerClass") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.submaskExclusions", kind: "prop", name: Some("submaskExclusions") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.submaskRule", kind: "prop", name: Some("submaskRule") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.subtractMask", kind: "prop", name: Some("subtractMask") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppress", kind: "prop", name: Some("suppress") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppressAs", kind: "prop", name: Some("suppressAs") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.suppressSpecific", kind: "prop", name: Some("suppressSpecific") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.title", kind: "prop", name: Some("title") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.zSlot", kind: "prop", name: Some("zSlot") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer", tgt: "actor.rpg.generator#layer.zSlotByDir", kind: "prop", name: Some("zSlotByDir") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer.behindRows", tgt: "actor.rpg.generator#layer.behindRows:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer.colors", tgt: "actor.rpg.generator#colors", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer.submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer.suppress", tgt: "actor.rpg.generator#suppressionRules", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#layer.suppressAs", tgt: "actor.rpg.generator#fallback", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.hex", kind: "prop", name: Some("hex") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.mode", kind: "prop", name: Some("mode") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#skin", tgt: "actor.rpg.generator#skin.tone", kind: "prop", name: Some("tone") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions.classes", kind: "prop", name: Some("classes") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#submaskExclusions", tgt: "actor.rpg.generator#submaskExclusions.layers", kind: "prop", name: Some("layers") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#submaskExclusions.classes", tgt: "actor.rpg.generator#submaskExclusions.classes:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#submaskExclusions.layers", tgt: "actor.rpg.generator#submaskExclusions.layers:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#suppressionRules", tgt: "actor.rpg.generator#suppressionRules.classes", kind: "prop", name: Some("classes") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#suppressionRules", tgt: "actor.rpg.generator#suppressionRules.layers", kind: "prop", name: Some("layers") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#suppressionRules.classes", tgt: "actor.rpg.generator#suppressionRules.classes:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator#suppressionRules.layers", tgt: "actor.rpg.generator#suppressionRules.layers:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator:body", tgt: "actor.rpg.generator:body.faceMode", kind: "prop", name: Some("faceMode") }
- Non-breaking: AddedEdge { src: "actor.rpg.generator:body.eyes", tgt: "actor.rpg.generator#eyes", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator:body.layers:items", tgt: "actor.rpg.generator#layer", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "actor.rpg.generator:body.skin", tgt: "actor.rpg.generator#skin", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"colors": {
5
+
"description": "Selected recolor channels.",
6
+
"properties": {
7
+
"main": {
8
+
"maxLength": 7,
9
+
"type": "string"
10
+
},
11
+
"sub1": {
12
+
"maxLength": 7,
13
+
"type": "string"
14
+
},
15
+
"sub2": {
16
+
"maxLength": 7,
17
+
"type": "string"
18
+
},
19
+
"sub3": {
20
+
"maxLength": 7,
21
+
"type": "string"
22
+
}
23
+
},
24
+
"type": "object"
25
+
},
26
+
"eyes": {
27
+
"description": "Eye color configuration.",
28
+
"properties": {
29
+
"hex": {
30
+
"maxLength": 7,
31
+
"type": "string"
32
+
},
33
+
"mode": {
34
+
"maxLength": 10,
35
+
"type": "string"
36
+
},
37
+
"tone": {
38
+
"maximum": 100,
39
+
"minimum": 0,
40
+
"type": "integer"
41
+
}
42
+
},
43
+
"type": "object"
44
+
},
45
+
"fallback": {
46
+
"description": "Rendered replacement used when a layer is class-suppressed.",
47
+
"properties": {
48
+
"assetName": {
49
+
"maxLength": 100,
50
+
"type": "string"
51
+
},
52
+
"behindRows": {
53
+
"items": {
54
+
"maximum": 3,
55
+
"minimum": 0,
56
+
"type": "integer"
57
+
},
58
+
"maxLength": 4,
59
+
"type": "array"
60
+
},
61
+
"blob": {
62
+
"accept": [
63
+
"image/png"
64
+
],
65
+
"maxSize": 1000000,
66
+
"type": "blob"
67
+
},
68
+
"colors": {
69
+
"ref": "#colors",
70
+
"type": "ref"
71
+
},
72
+
"subtractMask": {
73
+
"accept": [
74
+
"image/png"
75
+
],
76
+
"maxSize": 50000,
77
+
"type": "blob"
78
+
},
79
+
"title": {
80
+
"maxLength": 100,
81
+
"type": "string"
82
+
},
83
+
"zSlot": {
84
+
"maximum": 30,
85
+
"minimum": 0,
86
+
"type": "integer"
87
+
},
88
+
"zSlotByDir": {
89
+
"type": "unknown"
90
+
}
91
+
},
92
+
"required": [
93
+
"assetName",
94
+
"blob"
95
+
],
96
+
"type": "object"
97
+
},
98
+
"layer": {
99
+
"description": "A rendered generator layer and its recomposition metadata.",
100
+
"properties": {
101
+
"assetName": {
102
+
"maxLength": 100,
103
+
"type": "string"
104
+
},
105
+
"behindRows": {
106
+
"description": "Rows rendered behind the body. Empty explicitly means all rows render in front.",
107
+
"items": {
108
+
"maximum": 3,
109
+
"minimum": 0,
110
+
"type": "integer"
111
+
},
112
+
"maxLength": 4,
113
+
"type": "array"
114
+
},
115
+
"blob": {
116
+
"accept": [
117
+
"image/png"
118
+
],
119
+
"maxSize": 1000000,
120
+
"type": "blob"
121
+
},
122
+
"colors": {
123
+
"ref": "#colors",
124
+
"type": "ref"
125
+
},
126
+
"disabled": {
127
+
"type": "boolean"
128
+
},
129
+
"id": {
130
+
"maxLength": 30,
131
+
"type": "string"
132
+
},
133
+
"layerClass": {
134
+
"description": "Class assigned to this layer, such as hind.cloak.",
135
+
"maxLength": 90,
136
+
"type": "string"
137
+
},
138
+
"submaskExclusions": {
139
+
"description": "Target-side exceptions to submaskRule. The layers array contains exact canonical source layer IDs and the classes array contains exact source layerClass or fitClass values; matching source masks are skipped before submaskRule is evaluated. Omission or empty arrays means no source-specific exclusions.",
140
+
"ref": "#submaskExclusions",
141
+
"type": "ref"
142
+
},
143
+
"submaskRule": {
144
+
"description": "Controls which external subtractive masks may affect this layer. Omission means respect-all.",
145
+
"knownValues": [
146
+
"respect-all",
147
+
"ignore-all",
148
+
"ignore-layers-above",
149
+
"ignore-layers-below"
150
+
],
151
+
"maxLength": 24,
152
+
"type": "string"
153
+
},
154
+
"subtractMask": {
155
+
"accept": [
156
+
"image/png"
157
+
],
158
+
"maxSize": 50000,
159
+
"type": "blob"
160
+
},
161
+
"suppress": {
162
+
"ref": "#suppressionRules",
163
+
"type": "ref"
164
+
},
165
+
"suppressAs": {
166
+
"ref": "#fallback",
167
+
"type": "ref"
168
+
},
169
+
"suppressSpecific": {
170
+
"description": "Map from suppressor layerClass to either a structured fallback matching #fallback or a rule with default and bodyTypeAlt fallbacks. The active body-specific value takes priority over the class default, then suppressAs.",
171
+
"type": "unknown"
172
+
},
173
+
"title": {
174
+
"maxLength": 100,
175
+
"type": "string"
176
+
},
177
+
"zSlot": {
178
+
"description": "Legacy all-direction draw-order slot. zSlotByDir takes precedence.",
179
+
"maximum": 30,
180
+
"minimum": 0,
181
+
"type": "integer"
182
+
},
183
+
"zSlotByDir": {
184
+
"description": "Per-direction draw-order slots [down, left, right, up]. Entries are non-negative integers or null when the category default applies.",
185
+
"type": "unknown"
186
+
}
187
+
},
188
+
"required": [
189
+
"id",
190
+
"blob"
191
+
],
192
+
"type": "object"
193
+
},
4
194
"main": {
5
-
"description": "Stores the individual recolored layers and configuration used to build a sprite via the generator. Enables recomposition by third-party tools (e.g. adding items/overlays) without the full generator pipeline. One record per user (rkey: self).",
195
+
"description": "Stores the recolored layers and configuration used to rebuild a generated sprite.",
6
196
"key": "literal:self",
7
197
"record": {
8
198
"properties": {
9
199
"bodyType": {
10
-
"description": "Body type used (e.g. 'male', 'female').",
11
200
"maxLength": 20,
12
201
"type": "string"
13
202
},
14
203
"createdAt": {
15
-
"description": "When this record was first created.",
16
204
"format": "datetime",
17
205
"type": "string"
18
206
},
19
207
"eyes": {
20
-
"description": "Eye color configuration.",
21
-
"properties": {
22
-
"hex": {
23
-
"description": "Custom eye hex color.",
24
-
"maxLength": 7,
25
-
"type": "string"
26
-
},
27
-
"mode": {
28
-
"description": "'gradient' or 'custom'.",
29
-
"maxLength": 10,
30
-
"type": "string"
31
-
},
32
-
"tone": {
33
-
"description": "Gradient eye tone index.",
34
-
"maximum": 100,
35
-
"minimum": 0,
36
-
"type": "integer"
37
-
}
38
-
},
39
-
"type": "object"
208
+
"ref": "#eyes",
209
+
"type": "ref"
210
+
},
211
+
"faceMode": {
212
+
"description": "Whether face layers are selected intentionally. Omission is reserved for legacy records pending migration.",
213
+
"knownValues": [
214
+
"standard",
215
+
"faceless"
216
+
],
217
+
"type": "string"
40
218
},
41
219
"items": {
42
-
"description": "Freeform item identifiers applied on top of the sprite (e.g. 'popcorn').",
43
220
"items": {
44
221
"maxLength": 50,
45
222
"type": "string"
46
223
},
47
224
"maxLength": 20,
48
225
"type": "array"
49
226
},
50
227
"layers": {
51
-
"description": "Ordered array of recolored layer images, back-to-front. Body is always index 0.",
228
+
"description": "Ordered recolored layers, back-to-front.",
52
229
"items": {
53
-
"properties": {
54
-
"assetName": {
55
-
"description": "Generator asset filename (e.g. '001_basic_short').",
56
-
"maxLength": 100,
57
-
"type": "string"
58
-
},
59
-
"blob": {
60
-
"accept": [
61
-
"image/png"
62
-
],
63
-
"description": "The recolored layer PNG.",
64
-
"maxSize": 1000000,
65
-
"type": "blob"
66
-
},
67
-
"colors": {
68
-
"description": "Color selections applied to this layer.",
69
-
"properties": {
70
-
"main": {
71
-
"maxLength": 7,
72
-
"type": "string"
73
-
},
74
-
"sub1": {
75
-
"maxLength": 7,
76
-
"type": "string"
77
-
},
78
-
"sub2": {
79
-
"maxLength": 7,
80
-
"type": "string"
81
-
},
82
-
"sub3": {
83
-
"maxLength": 7,
84
-
"type": "string"
85
-
}
86
-
},
87
-
"type": "object"
88
-
},
89
-
"id": {
90
-
"description": "Layer category identifier (e.g. 'body', 'tops', 'hair', 'bangs').",
91
-
"maxLength": 30,
92
-
"type": "string"
93
-
},
94
-
"title": {
95
-
"description": "Human-readable name derived from the asset filename.",
96
-
"maxLength": 100,
97
-
"type": "string"
98
-
}
99
-
},
100
-
"required": [
101
-
"id",
102
-
"blob"
103
-
],
104
-
"type": "object"
230
+
"ref": "#layer",
231
+
"type": "ref"
105
232
},
106
-
"maxLength": 20,
233
+
"maxLength": 32,
107
234
"type": "array"
108
235
},
109
236
"skin": {
110
-
"description": "Skin configuration.",
111
-
"properties": {
112
-
"hex": {
113
-
"description": "Custom skin hex color (if mode is custom).",
114
-
"maxLength": 7,
115
-
"type": "string"
116
-
},
117
-
"mode": {
118
-
"description": "'gradient' or 'custom'.",
119
-
"maxLength": 10,
120
-
"type": "string"
121
-
},
122
-
"tone": {
123
-
"description": "Gradient skin tone index.",
124
-
"maximum": 100,
125
-
"minimum": 0,
126
-
"type": "integer"
127
-
}
128
-
},
129
-
"type": "object"
237
+
"ref": "#skin",
238
+
"type": "ref"
130
239
},
131
240
"updatedAt": {
132
-
"description": "When this record was last modified.",
133
241
"format": "datetime",
134
242
"type": "string"
135
-
},
136
-
"version": {
137
-
"description": "Generator version that produced this record.",
138
-
"maximum": 100,
139
-
"minimum": 1,
140
-
"type": "integer"
141
243
}
142
244
},
143
245
"required": [
144
-
"version",
145
246
"bodyType",
247
+
"skin",
248
+
"eyes",
146
249
"layers",
147
250
"createdAt"
148
251
],
149
252
"type": "object"
150
253
},
151
254
"type": "record"
255
+
},
256
+
"skin": {
257
+
"description": "Skin color configuration.",
258
+
"properties": {
259
+
"hex": {
260
+
"maxLength": 7,
261
+
"type": "string"
262
+
},
263
+
"mode": {
264
+
"maxLength": 10,
265
+
"type": "string"
266
+
},
267
+
"tone": {
268
+
"maximum": 100,
269
+
"minimum": 0,
270
+
"type": "integer"
271
+
}
272
+
},
273
+
"type": "object"
274
+
},
275
+
"submaskExclusions": {
276
+
"description": "Target-side exceptions for subtractive masks. List exact canonical source layer IDs in layers, or exact source layerClass or fitClass values in classes; matching source masks must not erase the target layer. Omission or empty arrays means no source-specific exclusions.",
277
+
"properties": {
278
+
"classes": {
279
+
"description": "Exact source layerClass or fitClass values whose subtractive masks must be skipped.",
280
+
"items": {
281
+
"maxLength": 90,
282
+
"type": "string"
283
+
},
284
+
"maxLength": 64,
285
+
"type": "array"
286
+
},
287
+
"layers": {
288
+
"description": "Exact canonical source layer IDs whose subtractive masks must be skipped.",
289
+
"items": {
290
+
"maxLength": 30,
291
+
"type": "string"
292
+
},
293
+
"maxLength": 32,
294
+
"type": "array"
295
+
}
296
+
},
297
+
"type": "object"
298
+
},
299
+
"suppressionRules": {
300
+
"description": "Layer IDs and classes hidden while this layer is active.",
301
+
"properties": {
302
+
"classes": {
303
+
"items": {
304
+
"maxLength": 90,
305
+
"type": "string"
306
+
},
307
+
"maxLength": 20,
308
+
"type": "array"
309
+
},
310
+
"layers": {
311
+
"items": {
312
+
"maxLength": 30,
313
+
"type": "string"
314
+
},
315
+
"maxLength": 20,
316
+
"type": "array"
317
+
}
318
+
},
319
+
"type": "object"
152
320
}
153
321
},
154
322
"description": "Generator metadata and decomposed layers for a sprite built with the rpg.actor sprite generator.",
155
323
"id": "actor.rpg.generator",
156
324
"lexicon": 1
157
325
}