terminalCode Example

Storage (UGC)

calendar_today May 3, 2026 schedule ~1 min read person patrickjr verified 50

Manage user-generated content, save games, and player creations.

Creating Entries

CSHARP
// Create a save game entry
var saveEntry = Storage.CreateEntry("save");

// Write data
saveEntry.Files.WriteAllText("player.json", playerJson);
saveEntry.Files.WriteAllBytes("world.dat", worldData);
saveEntry.Files.WriteJson("config.json", gameConfig);

// Set metadata
saveEntry.SetMeta("playerName", playerName);
saveEntry.SetMeta("level", currentLevel);
saveEntry.SetMeta("playtime", totalPlaytime);

// Set thumbnail
saveEntry.SetThumbnail(CreateThumbnail());

Entry Properties

PropertyDescription
IdUnique GUID
TypeCategory (e.g., "save", "dupe")
CreatedCreation timestamp
FilesBaseFileSystem for file operations
ThumbnailPreview image as Texture

Reading Files

CSHARP
// Read data back
string notes = entry.Files.ReadAllText("notes.txt");
byte[] screenshot = entry.Files.ReadAllBytes("screenshot.png");
MyData data = entry.Files.ReadJson<MyData>("data.json");

// Check existence
bool exists = entry.Files.FileExists("save.dat");

// Directory operations
entry.Files.CreateDirectory("levels");
var files = entry.Files.FindFile("/", "*.json", recursive: true);

Listing Entries

CSHARP
// Get all saves
var allSaves = Storage.GetAll("save");

foreach (var save in allSaves)
{
    Log.Info($"Save: {save.Id}, Created: {save.Created}");
    
    var playerName = save.GetMeta("playerName");
    var level = save.GetMeta<int>("level");
}

Deleting Entries

CSHARP
Storage.Delete(entry);

Steam Workshop Integration

Entries can be published to/downloaded from Steam Workshop automatically.

Use Cases

  • Save games — Player progress
  • Player creations — Maps, characters, items
  • Replays — Recorded gameplay
  • Custom content — Mods, configs
Was this helpful?