Version: 1.0.0
Category: Modding
Scope: Guild Customization
This protocol defines how AI agents should interact with the cosmetic modding system for Struct Types. Cosmetic mods allow customization of appearance and lore without changing game capabilities.
class field (on-chain/database)For Sets:
cosmetic-set/
├── set-manifest.json # Required: Set metadata (with setHash)
├── skins/ # Required: Individual skins
│ └── {skinHash}/
│ ├── skin-manifest.json
│ ├── struct-type.json
│ └── assets/
└── localizations/ # Optional: Set-level localizations
For Standalone Skins:
cosmetic-skin/
├── skin-manifest.json # Required: Skin metadata (with skinHash)
├── struct-type.json # Required: Struct type cosmetic data
├── animations/ # Optional: Lottie JSON files
├── icons/ # Optional: Icon files
└── graphics/ # Optional: Other graphics
Location: set-manifest.json
Schema: schemas/cosmetic-set.md
Required Fields:
setHash (string): SHA-256 hash (64-character hexadecimal) - generated automaticallyversion (string): Semantic versionauthor (string): Set authorOptional Fields:
name (object): Set name by languageguildId (string): Guild ID for guild-specific setsdescription (object): Set description by languageskins (array): List of skins in the setLocation: skin-manifest.json
Schema: schemas/cosmetic-skin.md
Required Fields:
skinHash (string): SHA-256 hash (64-character hexadecimal) - generated automaticallyclass (string): Struct Type class name (must match struct_type.class)version (string): Semantic versionOptional Fields:
name (object): Skin name by languagesetHash (string): Parent set hash (if part of a set)author (string): Skin authordescription (object): Skin description by languageThe cosmetic system operates separate from the blockchain as a distributed, peer-to-peer network:
Scenario: Player from Guild A visits planet of player from Guild B
{
"action": "requestCosmetics",
"parameters": {
"fromGuildId": "0-2",
"classes": ["Miner", "Reactor"],
"cachedHashes": {
"Miner": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"Reactor": null
}
}
}
Response:
{
"status": "success",
"guildId": "0-2",
"skins": [
{
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"class": "Miner",
"version": "1.0.1",
"needsUpdate": true,
"skin": { /* cosmetic skin data */ }
}
],
"assetUrls": {
"miner-idle.json": "https://guild-b.example.com/cosmetics/assets/miner-idle.json"
},
"cached": false
}
{
"action": "checkCosmeticCache",
"parameters": {
"guildId": "0-2",
"classes": ["Miner", "Reactor"]
}
}
Response:
{
"cached": true,
"guildId": "0-2",
"hashes": {
"Miner": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"Reactor": "e1d2c3b4a56789012345678901234567890abcdef1234567890abcdef1234567"
},
"cachePath": "~/.structs/guilds/0-1/cosmetics/cache/guild-0-2",
"expiresAt": "2025-01-16T10:00:00Z"
}
{
"action": "listCosmeticMods",
"parameters": {}
}
Response:
{
"mods": [
{
"modId": "guild-alpha-miner-v1",
"name": {"en": "Guild Alpha Miner Pack"},
"version": "1.0.0",
"author": "Guild Alpha",
"guildId": "0-1",
"structTypes": ["miner"],
"languages": ["en", "es"]
}
]
}
{
"action": "getCosmeticSet",
"parameters": {
"setHash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"
}
}
Response:
{
"setHash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"set": { /* full set manifest */ },
"skins": [ /* skin references */ ]
}
{
"action": "getCosmeticSkin",
"parameters": {
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456"
}
}
Response:
{
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"skin": { /* full skin manifest */ }
}
{
"action": "getStructTypeCosmetics",
"parameters": {
"class": "Miner",
"language": "en"
}
}
Response:
{
"class": "Miner",
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"name": "Alpha Extractor",
"lore": "Guild Alpha's signature mining unit...",
"weapons": [
{
"weaponType": "primary",
"name": "Plasma Drill",
"description": "High-powered plasma drilling system"
}
],
"abilities": [
{
"abilityId": "mine",
"name": "Deep Extraction",
"description": "Extract resources from planetary deposits"
}
],
"animations": {
"idle": "animations/miner-idle.json",
"active": "animations/miner-mining.json"
},
"icon": "icons/miner-alpha.png"
}
{
"action": "validateCosmeticSet",
"parameters": {
"setPath": "path/to/set"
}
}
Response:
{
"valid": true,
"setHash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"errors": [],
"warnings": [
"Missing fallback language (en) in localizations"
]
}
{
"action": "validateCosmeticSkin",
"parameters": {
"skinPath": "path/to/skin"
}
}
Response:
{
"valid": true,
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"errors": [],
"warnings": []
}
{
"action": "createCosmeticSet",
"parameters": {
"name": {"en": "Guild Alpha Mining Set"},
"version": "1.0.0",
"author": "Guild Alpha",
"guildId": "0-1"
}
}
Response:
{
"status": "success",
"setHash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"setPath": "~/.structs/guilds/0-1/cosmetics/sets/a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"manifestPath": "~/.structs/guilds/0-1/cosmetics/sets/a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456/set-manifest.json"
}
{
"action": "addSkinToSet",
"parameters": {
"setHash": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
"class": "Miner",
"cosmetic": {
"name": {"en": "Alpha Extractor"},
"lore": {"en": "Guild Alpha's signature mining unit..."},
"animations": {
"idle": "miner-idle.json"
}
}
}
}
Response:
{
"status": "success",
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456",
"skinPath": "~/.structs/guilds/0-1/cosmetics/sets/a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456/skins/f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456"
}
Use ISO 639-1 language codes:
en: Englishes: Spanishfr: Frenchde: GermanAlways provide English (en) as fallback language.
{
"en": {
"miner.description": "Mining unit",
"miner.weapon.primary": "Drill"
},
"es": {
"miner.description": "Unidad de minería",
"miner.weapon.primary": "Taladro"
}
}
animations/ directoryicons/ directorygraphics/ directory{
"error": "invalid_hash",
"message": "Hash validation failed",
"details": {
"field": "setHash",
"issue": "Hash mismatch: expected a1b2c3d4..., got f1e2d3c4..."
}
}
{
"error": "invalid_hash_format",
"message": "Hash format validation failed",
"details": {
"field": "skinHash",
"issue": "Invalid format: must be 64-character hexadecimal string"
}
}
{
"error": "struct_type_class_not_found",
"message": "Struct type class not found in game",
"details": {
"class": "InvalidClass"
}
}
{
"error": "asset_not_found",
"message": "Referenced asset file not found",
"details": {
"path": "animations/miner-idle.json",
"skinHash": "f1e2d3c4b5a6789012345678901234567890abcdef1234567890abcdef123456"
}
}
schemas/cosmetic-set.md (Sets)schemas/cosmetic-skin.md (Skins)technical/cosmetic-hash-system.mdusers/modding/cosmetic-mods.mdtechnical/cosmetic-sets-and-skins.mdProtocol Version: 1.0.0