Created by Racalvin The Pirate King.
Cloudflare Worker + R2 + D1 serving as the canonical game asset API and static data host.
- R2 bucket
grudge-assets: stores all binary assets (sprites, audio, 3D models, icons) - D1 database
objectstore-meta: asset metadata (id, filename, category, tags, mime) - GitHub Pages: static JSON game data at
/api/v1/*.json
ObjectStore owns every canonical Grudge item, icon, recipe, material, and UUID. This initiative unifies three previously parallel sources (this repo's master-items.json, grudge-game-data-hub/data/master-items.json, and the legacy items-database.json) into a single authoritative dataset consumed by every Grudge Studio game.
Locked decisions:
- D1: ObjectStore is the master/backend. Each Grudge game (grudge-game-data-hub, GrudgeBuilder, future games) keeps its own UI but consumes ObjectStore JSON — no forked data.
- D2: Legacy items (old Unity/Steam source +
items-legacy.json) fold into the new system group-by-group via consolidation sessions indocs/consolidation/. No auto defaults — every session is user-signed-off. - D3: End-game magic weapons are the Artifact category (
type: 'artifact',classification: 'artifact',discovery.hiddenUntilFound: true). Arcane is the first sub-type; the namespace is reserved for more. Player-facing UIs must filter out undiscovered artifacts. - D4: Tomes are tier-less off-hand utility items (
type: 'offhand-tome',skillGrants: [...]). Equipping a tome grants the 1h main-hand new spell options. No stat block, no tier expansion. - D5: Tier labels — T5 = Heroic, T8 = Legendary (old "Legendary Artifact" retired). The word "Legendary" is reserved for the T8 tier label only. "Artifact" is the weapon category (D3).
- D6:
grudge-game-data-hubuses build-time prefetch + runtime revalidate — it fetches from ObjectStore at deploy and re-fetches at runtime. No staticdata/*.jsonin that repo once migration completes. Working tree: scripts/audit-items.mjs— enumerates every item + icon source; writesapi/v1/_audit/items-audit.jsonanddocs/ITEMS_AUDIT.md.scripts/defs/— per-category authoritative source modules (weapons.mjs,armor.mjs,consumables.mjs,materials.mjs,offhand-tomes.mjs,artifacts.mjs). Filled one category at a time during consolidation sessions.docs/consolidation/session-*.md— per-session proposal + user sign-off record.api/v1/items-legacy.json— frozen copy of the olditems-database.json; source for legacy-item triage during consolidation sessions. Tier system (D5 applied): | Tier | Color | Label | | --- | --- | --- | | T1 | Bronze | Common | | T2 | Silver | Uncommon | | T3 | Blue | Rare | | T4 | Purple | Epic | | T5 | Red | Heroic | | T6 | Orange | Mythic | | T7 | Gold | Ancient | | T8 | Shimmer | Legendary |
objectstore.grudge-studio.com— Cloudflare Worker (R2 + D1 CRUD)grudgeassets.grudge.workers.dev— same worker, workers.dev fallbackassets.grudge-studio.com— R2 CDN (direct file serving)molochdagod.github.io/ObjectStore— GitHub Pages (served fromgh-pagesbranch)
GET /health— health checkGET /v1/assets— list/search assetsGET /v1/assets/:id/file— download assetPOST /v1/assets— upload (API key required)GET /v1/models— list 3D models (glb/gltf/fbx/obj)GET /v1/models/:id/file— download 3D modelPOST /v1/convert— 3D model conversion pipeline (Durable Object)
Published via GitHub Pages. These are the CANONICAL definitions:
races.json,classes.json,attributes.json,factions.jsonweapons.json,armor.json,materials.json,consumables.jsonweaponSkills.json,enemies.json,bosses.jsoneffectSprites.json,abilityEffects.json,sprites2d.json,spriteMaps.jsonprofessions.json,skillTrees.json,items-database.jsonmaster-items.json— 818 items with GRUDGE UUIDs, tier expansion (T1-T8), recipe linksmaster-recipes.json— 118 recipes with GRUDGE UUIDs, material referencesmaster-materials.json— 93 materials with GRUDGE UUIDs
Regenerate master files: npm run generate:master (runs scripts/generate-master-database.mjs).
Previously in grudge-game-data-hub (now archived) — merged into this repo.
Every Grudge app reads from ObjectStore:
grudge-builder→objectStoreApi.ts(cached fetch),objectStoreModels.ts(3D)grudge-engine-web→asset-catalog.ts(model paths)grudgedot-launcher→ direct fetch via VITE_OBJECTSTORE_URLgrudge-studio-backend→ R2 via OBJECT_STORAGE_* env vars
- NEVER duplicate game data in frontend code. Always fetch from ObjectStore — no hardcoded fallbacks.
- GrudgeBuilder loads all items from
master-items.jsonat runtime viasyncItemsFromObjectStore(). - Upload assets with category, tags, and metadata for discoverability.
- API key for writes:
X-API-Keyheader. Reads are public (no auth). - 3D models: upload with category
3d-modelsormodels, or use .glb/.gltf/.fbx/.obj extension. - CORS:
wrangler.tomlALLOWED_ORIGINS must include all Grudge deployment URLs. - Deploy worker:
npx wrangler deploy --config wrangler.toml - Regenerate master data:
npm run generate:master - Deploy to GitHub Pages:
npm run deploy:pages(pushes lightweight files togh-pagesbranch) - GitHub Actions is DISABLED at account level — always use
deploy:pagesfor Pages deployments.