← Back to ObjectStore

📖 API Documentation

Complete reference for the Grudge Studio ObjectStore API - access game data for Grudge Warlords including weapons, materials, armor, consumables, and more.

Overview

The ObjectStore API provides read-only access to all static game data for Grudge Warlords. This includes:

💡 Perfect for AI Agents

This API requires no authentication and returns JSON data. Ideal for building game companions, crafting calculators, or AI-powered assistants.

Base URL

https://molochdagod.github.io/ObjectStore

All endpoints are relative to this base URL. For example:

GET https://molochdagod.github.io/ObjectStore/api/v1/weapons.json

Authentication

No Auth Required

The ObjectStore API is completely public. No API keys, tokens, or authentication headers are needed. Simply make HTTP GET requests to any endpoint.

⚠️ Player Data

This API only serves static game definitions. For player-specific data (inventory, characters, progress), you'll need authenticated access to our Supabase database. See Database Schema for details.

Weapons Endpoint

GET /api/v1/weapons.json

Returns all weapon definitions organized by category. Each weapon includes stats, abilities, lore, and crafting requirements.

Response Structure

{
  "version": "1.0.0",
  "generated": "2026-02-12T00:00:00Z",
  "categories": {
    "swords": {
      "craftedBy": "Miner",
      "category": "1h",
      "items": [
        {
          "id": "sword-bloodfeud",
          "name": "Bloodfeud Blade",
          "type": "Sword",
          "lore": "Forged in endless clan blood feuds",
          "stats": {
            "damageBase": 50,
            "damagePerTier": 12,
            "speedBase": 100,
            "critBase": 3
          },
          "basicAbility": "Vengeful Slash",
          "abilities": ["Blood Rush", "Iron Grudge", "Clan Charge"],
          "signatureAbility": "Crimson Reprisal",
          "passives": ["Bloodlust", "Swift Vengeance", "Deep Cuts"]
        }
      ]
    },
    "axes": { ... },
    "daggers": { ... },
    "spears": { ... },
    "maces": { ... },
    "hammers1h": { ... },
    "hammers2h": { ... },
    "greatswords": { ... },
    "greataxes": { ... },
    "bows": { ... },
    "crossbows": { ... },
    "guns": { ... },
    "fireStaves": { ... },
    "frostStaves": { ... },
    "holyStaves": { ... },
    "lightningStaves": { ... },
    "arcaneStaves": { ... },
    "tomes": { ... }
  }
}

Weapon Categories

CategoryTypeCrafted ByCount
Swords1-HandMiner6
Axes1-HandMiner6
Daggers1-HandMiner6
Spears2-HandMiner6
Maces1-HandMiner6
Hammers (1H)1-HandMiner6
Hammers (2H)2-HandMiner6
Greatswords2-HandMiner6
Greataxes2-HandMiner6
BowsRanged 2HForester6
CrossbowsRanged 2HEngineer6
GunsRanged 2HEngineer6
Fire StavesRanged 2HMystic6
Frost StavesRanged 2HMystic6
Holy StavesRanged 2HMystic6
Lightning StavesRanged 2HMystic6
Arcane StavesRanged 2HMystic6
TomesOff-handMystic12

Equipment Endpoint

GET /api/v1/armor.json

Returns 150 armor items (6 sets × 8 slots × 3 material types + gems) with stats, procs, and set bonuses.

Materials Endpoint

GET /api/v1/materials.json

Returns all crafting materials including ores, wood, cloth, leather, gems, and magical essences.

Material Categories

CategoryGathered ByTiers
OreMinerT1-T8
IngotsRefinedT1-T8
WoodForesterT1-T8
PlanksRefinedT1-T8
ClothMysticT1-T8
LeatherForesterT1-T8
EssenceMysticT1-T8
GemsMinerT1-T8
InfusionsVariousT1-T5

Armor Endpoint

GET /api/v1/armor.json

Returns armor sets organized by profession and type.

Armor Sets

ProfessionTypeSets
MinerMetal PlateGuardian, Berserker
ForesterLeatherStalker, Brawler
MysticClothScholar, Archmage
EngineerMechMechanist, Inventor

Each set contains 6 pieces: Head, Chest, Legs, Hands, Feet, Shoulders.

Consumables Endpoint

GET /api/v1/consumables.json

Returns all consumable items including foods, potions, and engineer utilities.

Consumable Types

TypeProfessionCountEffect
Red FoodsChef30Attack/Damage buffs
Green FoodsChef30Regen/Healing buffs
Blue FoodsChef30Mana/Magic buffs
PotionsChef/Mystic30Combat effects
Engineer ItemsEngineer12Utility/Explosives

Skills Endpoint

GET /api/v1/skills.json

Returns weapon combat skills with tooltips, cooldowns, and damage formulas.

{
  "skills": [
    {
      "id": "vengeful-slash",
      "name": "Vengeful Slash",
      "weaponType": "Sword",
      "slot": "basic",
      "tooltip": "A fierce slash that builds Grudge Mark stacks...",
      "cooldown": 0,
      "manaCost": 0,
      "damage": "100% weapon damage",
      "effect": "Applies Grudge Mark (5% damage amp, max 3)"
    }
  ]
}

Weapon Skills Endpoint

GET /api/v1/weaponSkills.json

Returns 473 weapon skills across 24 weapon types sourced from the Warlord Crafting Suite. Each skill includes an icon path, cooldown, mana cost, effects, and slot assignment.

Response Structure

{
  "version": "1.0.0",
  "totalSkills": 473,
  "weaponTypes": [
    {
      "weaponType": "Sword",
      "skillCount": 18,
      "skills": [
        {
          "id": "sword_vengeful_slash",
          "name": "Vengeful Slash",
          "slot": "Attack",
          "cooldown": 0,
          "manaCost": 0,
          "description": "A fierce slash dealing 100% weapon damage...",
          "effect": "Applies Grudge Mark (5% damage amp, max 3)",
          "icon": "/icons/wcs/weapons/Sword_01.png"
        }
      ]
    }
  ]
}

Slot Types

SlotDescriptionColor
AttackPrimary damage abilitiesGreen
CoreCore rotation skillsBlue
DefenseDefensive/utility skillsYellow
SpecialSituational abilitiesPurple
UltimateHigh-impact ultimate abilitiesRed

Weapon Types (24)

Sword, Axe (1H), Greatsword, Greataxe, Bow, Crossbow, Gun, Fire Staff, Frost Staff, Holy Staff, Lightning Staff, Nature Staff, Dagger, Arcane Staff, Spear, Hammer, Scythe, Tool, Fire Tome, Frost Tome, Holy Tome, Shadow Tome, Nature Tome, Arcane Tome

Professions Endpoint

GET /api/v1/professions.json

Returns all 5 professions with their skill trees, recipes, and specializations.

Professions

ProfessionRoleSkill NodesCrafts
⛏️ MinerWeaponsmith & Armorsmith42Metal weapons, plate armor
🌲 ForesterBowyer & Leatherworker28Bows, leather armor
🔮 MysticEnchanter & Clothier37Staves, cloth armor, enchants
🍲 ChefCook & Alchemist28Foods, potions
🔧 EngineerMechanist & Siege Master28Guns, crossbows, mech armor

Classes & Races Endpoints

GET /api/v1/classes.json

4 classes — Warrior, Mage Priest, Worge, Ranger — with starting attributes, abilities, and weapon restrictions.

GET /api/v1/races.json

6 races — Human, Orc, Elf, Undead, Barbarian, Dwarf — with attribute bonuses and faction alignment.

GET /api/v1/attributes.json

8 attributes with stat formulas — STR, INT, VIT, DEX, END, WIS, AGI, TAC.

Enemies & Bosses

GET /api/v1/enemies.json

38 enemies across 8 tiers with abilities, drops, and 3D asset paths.

GET /api/v1/bosses.json

12 bosses with multi-phase mechanics, drops, and Gouldstone chances.

Factions

GET /api/v1/factions.json

3 factions — Crusade, Legion, Fabled — with lore, race mappings, and faction-specific bonuses.

VFX Effect Sprites

GET /api/v1/effectSprites.json

147 VFX sprite sheets sourced from GRUDA-Wars. Includes frame dimensions, frame counts, categories, blend modes, and source image URLs.

Response Structure

{
  "version": "1.0.0",
  "totalEffects": 147,
  "categories": ["fire", "ice", "lightning", "nature", "dark", ...],
  "effects": [
    {
      "key": "fireSpin",
      "name": "Fire Spin",
      "category": "fire",
      "frameWidth": 100,
      "frameHeight": 100,
      "cols": 8,
      "rows": 8,
      "totalFrames": 64,
      "blendMode": "screen",
      "src": "/effects/fire_spin.png"
    }
  ]
}
💡 Live Preview

See all effects animated in real-time at VFX Effects Browser

Battle Ability Effects

GET /api/v1/abilityEffects.json

209 abilities mapping class skills, weapon abilities, and enemy attacks to their VFX effect chains with follow-up effects.

Ability Sources

SourceDescription
Class AbilitiesWarrior, Mage, Ranger, Worge class skills
Weapon AbilitiesSkills tied to specific weapon types
Enemy AbilitiesBoss and mob attack effects

Sprite Database

GET /api/v1/sprites.json

Full sprite database — 500+ icon paths organized by category (weapons, armor, skills, items).

GET /api/v1/spriteMaps.json

246 sprite path mappings for weapons and armor icons — maps item IDs to their sprite sheet locations.

GET /api/v1/sprites2d.json

5,485 2D sprites organized into 13 categories — characters, enemies, bosses, monsters, effects, icons, backgrounds, and more. Sources include RPG-MODULAR, betta-warlords, grudge-angeler, and grudawars.

💡 Live Preview

Browse all sprites visually at 2D Models Browser

Faction Units (RTS)

GET /api/v1/factionUnits.json

19 RTS faction units across 3 factions with stats, animations, and sprite paths.

GET /api/v1/nodeUpgrades.json

Node upgrade system — unit tiers, costs, spawn rates, vision radius.

Maps & Terrain

GET /api/v1/tileMaps.json

2 tile-based RTS maps with nodes, terrain objects, roads, and collision data.

GET /api/v1/terrain.json

Procedural terrain — 5 biome presets (plains, mountains, islands, desert, arena).

GET /api/v1/rendering.json

Materials, 7 skybox presets, 10 particle effects, 5 spell effects.

Animations

GET /api/v1/animations.json

Animation system v2.0 — 18 common anims, transition rules, blend config.

GET /api/v1/controllers.json

5 RTS camera presets, 4 chase camera presets, FPS, mouse controller config.

AI Systems

GET /api/v1/ai.json

AI behavior trees — 7 node types, entity states, blackboard, scoring.

GET /api/v1/ecs.json

ECS components — 8 component types, 2 systems, spatial hash config.

Tier System

All equipment in Grudge Warlords uses an 8-tier system:

TierNameLevel ReqMaterial Example
T1Common1Copper, Pine
T2Uncommon10Iron, Oak
T3Rare20Steel, Maple
T4Epic30Mithril, Ash
T5Legendary40Adamantine, Ironwood
T6Mythic50Orichalcum, Ebony
T7Ancient60Starmetal, Wyrmwood
T8Divine70Divine Ore, Worldtree

Stats scale with tier using base + (perTier × (tier - 1))

Items Database

GET /api/v1/items-database.json

Unified item database with 3,425 items across 8 categories: weapons, armor, consumables, materials, accessories, relics, capes, and shields. Each item includes an icon URL, stats, tier, tooltip, and category metadata.

Response Structure

{
  "version": "1.0.0",
  "totalItems": 3425,
  "categories": ["weapons", "armor", "consumables", "materials", "accessories", "relics", "capes", "shields"],
  "items": [
    {
      "id": "sword-bloodfeud-t5",
      "name": "Bloodfeud Blade",
      "category": "weapons",
      "type": "Sword",
      "tier": 5,
      "icon": "/icons/weapons/Sword_01.png",
      "tooltip": "Forged in endless clan blood feuds",
      "stats": { "damage": 98, "speed": 100 }
    }
  ]
}
💡 Live Browser

Browse all items visually at Item Database

Sprite Characters

GET /api/v1/sprite-characters.json

275 animated 2D characters with full animation manifests. Supports grid-based sprite sheets and frame-sequence formats. Sources include RPG-MODULAR, betta-warlords, grudge-angeler, and grudawars.

Response Structure

{
  "version": "2.0.0",
  "totalCharacters": 275,
  "characters": [
    {
      "id": "warrior_male",
      "name": "Warrior Male",
      "source": "RPG-MODULAR",
      "animations": {
        "idle":   { "src": "/sprites/Warrior/Idle.png",   "cols": 8, "rows": 1 },
        "walk":   { "src": "/sprites/Warrior/Walk.png",   "cols": 8, "rows": 1 },
        "attack": { "src": "/sprites/Warrior/Attack.png", "cols": 6, "rows": 1 }
      }
    }
  ]
}
💡 Live Preview

Browse all sprites at 2D Models Browser

GDevelop Assets

GET /api/v1/gdevelop-assets.json

GDevelop game asset manifest — sprite objects, animations, and resource paths for use in GDevelop events and scenes.

GET /api/v1/gdevelop-hero-aliases.json

25 hero class → sprite mappings for GDevelop Assistant. Maps class/race combinations to their corresponding sprite character IDs.

{
  "version": "1.0.0",
  "totalAliases": 25,
  "aliases": [
    { "heroClass": "warrior", "race": "human", "spriteId": "warrior_male", "src": "/sprites/Warrior/Idle.png" }
  ]
}

Voxel Assets

GET /api/v1/voxelAssets.json

Voxel model asset registry — .vox and converted GLB/GLTF models for characters, props, and terrain elements.

Asset Registries

GET /api/v1/asset-registry.json

Master asset registry — aggregated index of all assets served by ObjectStore across all categories.

GET /api/v1/backgrounds-registry.json

167 battle and scene background image paths organized by zone/theme.

GET /api/v1/effects-registry.json

VFX effects registry — indexed list of all particle and spell effects across the codebase.

GET /api/v1/3dfx-registry.json

3D shader and FX registry — GLSL shaders (fire, lightning, magic, shockwave) with metadata for the 3DFX viewer.

GET /api/v1/ui-packs.json

UI asset packs — buttons, frames, icons, and HUD elements for use in game interfaces.

RTS Models

GET /api/v1/rtsModels.json

RTS-specific 3D model registry — buildings, units, and terrain objects for the real-time strategy game mode.

Worlds

GET /api/v1/worlds.json

World definitions for multi-world game modes — island maps, spawn configurations, and biome data.

GET /api/v1/studio.json

Grudge Studio configuration — service registry, feature flags, and app metadata used by the GDevelop assistant and launcher.

AI Sprite Editor

The 2D Models Browser includes a built-in AI sprite editing assistant powered by Puter.js.

Features

  • Chat Interface — Slide-out panel with streaming AI responses. Supports GPT-4o (vision), GPT-5.4 Nano, Gemini 2.5 Flash, Claude Sonnet 4.
  • Vision Analysis — When a sprite is open in the modal, the AI sees the current canvas frame and can describe it, identify issues, and suggest fixes.
  • Auto-Apply Commands — AI returns JSON commands ({"action":"hue","value":45}) that instantly apply to the editor controls.
  • Sprite Generation — Generate new sprites via GPT Image 1.5 directly in the chat.
  • Quick Actions — One-click buttons for Analyze, Find Issues, Color Suggest, Generate Idle.
  • Persistent Chat — History saved to Puter KV storage across sessions.

Available AI Commands

CommandParametersDescription
huevalue: -180 to 180Shift hue of sprite
saturationvalue: 0 to 200Adjust saturation %
brightnessvalue: 50 to 200Adjust brightness %
flipFlip horizontally
trimAuto-trim transparency
exportExport current frame
exportAllExport all frames
generateprompt: stringGenerate new sprite

Sprite Uploader & Parser

Upload and parse sprite sheets, GIFs, individual PNGs, and Aseprite atlas exports. Available via the 📤 Upload Sprites button in the 2D Models Browser toolbar.

Supported Formats

FormatDetectionNotes
PNG/WEBP Sprite SheetAuto-detect frame grid via transparent column/row analysisOverride cols, rows, frameW, frameH manually
Animated GIFWebCodecs ImageDecoder API (with fallback)Extracts all frames as individual canvases
Multiple PNGsSorted by filename, treated as frame sequenceBatch drag-and-drop supported
Aseprite JSON + PNGParses .json atlas for frame rects (array or object format)Drop both files together

AI-Assisted Detection

Click 🤖 AI Detect Layout to send a thumbnail to GPT-4o vision. The AI identifies the frame grid, character type, and animation type, then pre-fills all parse settings automatically.

Save Options

  • Save to Browser — Stores in localStorage with sprite-characters.json compatible format. Shows in gallery after refresh.
  • Save to Puter Cloud — Uploads PNG + metadata JSON to Puter cloud storage (grudge-sprites/{category}/).

Puter.js Integration

The ObjectStore uses Puter.js v2 for free, serverless AI and cloud storage — no API keys or backend needed.

APIs Used

APIPurpose
puter.ai.chat()Vision analysis, sprite editing chat, streaming responses
puter.ai.txt2img()Sprite generation with GPT Image 1.5
puter.fs.write()Save sprites to Puter cloud storage
puter.kv.set()/get()Persist chat history and user preferences
💡 Free for Users

Puter.js uses a user-pays model — each user's Puter account covers their own AI usage. Developers pay nothing regardless of scale.

JavaScript SDK v5.0

Single import for all backend services + static game data:

// CDN
import { GrudgeSDK } from 'https://molochdagod.github.io/ObjectStore/sdk/grudge-sdk.js';

// or NPM
// npm install @grudgstudio/core
import { GrudgeSDK } from '@grudgstudio/core';

const sdk = new GrudgeSDK({ token: '<JWT>' });

// Static game data
const weapons = await sdk.getWeapons();
const swords  = await sdk.getWeaponsByCategory('swords');
const items   = await sdk.getItemsDatabase();   // 3,425 items
const chars   = await sdk.getSpriteCharacters(); // 275 animated chars
const results = await sdk.search('iron');

// Tier colors
const t5 = GrudgeSDK.getTierColor(5); // { name: 'Red', hex: '#ff4d4d', label: 'Legendary' }

Backend Service Clients (SDK v5.0)

The SDK v5.0 includes authenticated clients for all Grudge Studio VPS services:

ClientURLDescription
sdk.authid.grudge-studio.comLogin, register, guest, wallet, Discord, Puter auth
sdk.gameapi.grudge-studio.comCharacters, crafting, combat, lobbies, islands
sdk.accountaccount.grudge-studio.comProfile, friends, inventory management
sdk.launcherlauncher.grudge-studio.comApp manifest, patch notes, update checks
sdk.assetsassets-api.grudge-studio.comR2 asset listing, upload, CDN URL resolution
sdk.wsws.grudge-studio.comReal-time WebSocket for islands, PvP, chat
const sdk = new GrudgeSDK({ token: '<JWT>' });

// Auth
const res  = await sdk.auth.login('username', 'password');
const me   = await sdk.auth.getMe();

// Game API
const chars   = await sdk.game.listCharacters();
const balance = await sdk.game.getBalance(charId);
await sdk.game.startCraft({ char_id: 1, recipe_key: 'iron-sword' });

// Account
const profile = await sdk.account.getProfile(grudgeId);
const friends = await sdk.account.listFriends();

// Asset Service (R2)
const assets = await sdk.assets.listAssets({ prefix: 'models/' });

// WebSocket
const socket = sdk.ws.game();
socket.emit('join-island', { island_key: 'island_1' });

Python Examples

import requests

BASE_URL = "https://molochdagod.github.io/ObjectStore/api/v1"

# Get all weapons
weapons = requests.get(f"{BASE_URL}/weapons.json").json()

# Find all swords
swords = weapons["categories"]["swords"]["items"]
print(f"Found {len(swords)} swords")

# Get materials
materials = requests.get(f"{BASE_URL}/materials.json").json()

# Find T5+ ores
high_tier_ores = [m for m in materials["materials"] 
                  if m["category"] == "ore" and m["tier"] >= 5]

Search API (Serverless)

GET /api/search?q={query}&type={type}&limit={limit}

Serverless search across all ObjectStore data. Searches weapons, armor, materials, consumables, enemies, bosses, skills, and sprites.

Parameters

ParamRequiredDefaultDescription
qYesSearch query string
typeNoallFilter by type: weapons, armor, materials, consumables, enemies, bosses, skills, sprites
limitNo50Max results (1-200)

Example

GET /api/search?q=iron&type=materials&limit=10

{
  "query": "iron",
  "type": "materials",
  "totalResults": 3,
  "results": [
    { "type": "material", "id": "iron-ore", "name": "Iron Ore", "category": "ore", "tier": 2 },
    { "type": "material", "id": "iron-ingot", "name": "Iron Ingot", "category": "ingot", "tier": 2 }
  ]
}
💡 Vercel Only

The /api/search and /api/stats endpoints are serverless functions available only when deployed on Vercel. The static JSON files work on both GitHub Pages and Vercel.

Stats API (Serverless)

GET /api/stats

Returns aggregate statistics for all ObjectStore data — total counts by category, available endpoints, and browser pages.

AI Integration

The ObjectStore API is designed for AI agent consumption:

💡 Recommended: Cache Responses

Game data updates infrequently. Cache API responses for 24 hours to reduce requests and improve performance.

Example: AI Crafting Assistant

// Fetch required data
const [weapons, materials] = await Promise.all([
  fetch(BASE_URL + '/weapons.json').then(r => r.json()),
  fetch(BASE_URL + '/materials.json').then(r => r.json())
]);

// Helper: Get materials needed for a weapon
function getCraftingRequirements(weaponId, tier) {
  const weapon = findWeapon(weapons, weaponId);
  const tierMaterials = materials.materials.filter(m => m.tier === tier);
  
  return {
    weapon: weapon.name,
    tier: tier,
    profession: weapon.craftedBy,
    primaryMaterial: tierMaterials.find(m => 
      m.gatheredBy === weapon.craftedBy
    )
  };
}