A fully data‑driven, Twitch‑integrated RPG engine built on JSON definitions and modular JavaScript systems.
The project is designed so that almost everything — enemies, loot, professions, races, subraces, abilities, regions, merchants — is defined in data files, with resolvers and engines reading from those definitions.
players.jsonplayer-registry.js, player-storage.jscharacter.html, inventory.html, levelup.html, player-inspector.htmlenemies.jsonenemy-variants.jsonenemy-subrace.jsonenemy-tags.jsonenemy-abilities.jsonenemy-ultimates.jsonenemy-families.jsonenemy-regions.jsonenemy-database.jsenemy-registry.jsresolveEnemy.jsrace-definitions.jsonrace-tier-index.jsonsubrace-race-index.jsonsubrace-stat-profiles.jsonsubrace-ability-definitions.jsonprofession-definitions.jsonprofession-talent-trees.jsonprofession-synergies.jsonprofession-biome-bonuses.jsonprofession-weather-synergies.jsonprofession-starter-kits.jsonability-definitions.jsonsubrace-ability-definitions.jsonenemy-abilities.jsonability-resolver.jscombat-engine.jscombat-flow.jsdamage-helpers.jsstatus-effects.jsstatus-engine.jsdot-hot-engine.jsshield-engine.jscleanse-engine.jsregions.jsonregion-to-biome.jsregion-biomes.jsregion-encounter-tables.jsonregion-loot-tables.jsonregion-tier-bands.jsonregion-race-pools.jsonregion-modifiers.jsworld-data.jsbiomes.json and biome-presets.jsweatherTable.jsworld-admin.html, world-map-admin.html, region-controls.htmlitems.jsonitem-registry.jsloot-tables.jsonboss-loot-tables.jsonregion-loot-tables.jsonrarity-weights.jsonshop-pool.jsonshop-engine.js, shop.js, shop-ui.jsmerchant-types.jsonmerchant-personalities.jsonmerchant-instances.jsonmerchant-inventory.jsonmerchant-resolver.jsglobal-shop.html, daily-shop.html, shop-pool-editor.htmlapi.jslogin.html, index.html, landing.htmlaction-cases.html, enemy.html, encounter.html, fight-interactive.html, etc.Races are defined in race-definitions.json and indexed in race-tier-index.json.
The canonical race list (67 total):
Part 1
humanoid, elf, dwarf, orc, goblinoid, beastkin, draconian, undead, demonborn, voidborn,
celestialborn, spiritborn, elementalborn, titanborn, giantkin, colossus, fae, chimera, construct, plantfolk
Part 2
slimeborn, insectoids, arachnids, supernatural, astralborn, chaosborn, dragonkin, aberration, eldritch, lich,
mimic, beast, amorphous, techborn, machina, dragon, wyrm, spirit, mythic_beast, divinity
Part 3
celestial, fiend, primordial, ethereal, titan, outer_god, planar_entity, anomaly, legendary_boss_template, paragon,
hybrid, forgotten_race, cosmic_construct, metaphysical_phenomenon, parasite, cosmic_fauna, mythic_undead, hivemind, living_location, artificial_life
Part 4
temporal_entity, divine_beast, meta_entity, narrative_construct, emotional, paradox_god, multiversal_paragon
Subraces are mapped in subrace-race-index.json and their stat/ability profiles live in:
subrace-stat-profiles.jsonsubrace-ability-definitions.jsonenemies.json with:
keynameracesubraceprofession (if applicable)enemy-variants.json if this enemy has multiple difficulty tiers or flavors.subrace exists in subrace-race-index.json and subrace-stat-profiles.json.enemy-tags.json (e.g. ["undead", "elite", "fire"]).enemy-regions.json and/or region-encounter-tables.json.enemy-abilities.json and enemy-ultimates.json (if it has an ultimate).ability-definitions.json or enemy-abilities.json.enemy-database.js / enemy-registry.js / resolveEnemy.js will pull the data together.encounter.html / fight-interactive.html.items.json with:
idnametype (weapon, armor, consumable, etc.)rarityitem-registry.js can resolve it by id.loot-tables.jsonregion-loot-tables.jsonboss-loot-tables.jsonmerchant-inventory.json, merchant-tables.jsonrarity-weights.json if you introduce a new rarity or want to rebalance drop chances.profession-definitions.json:
profession-starter-kits.json:
items.json)ability-definitions.json under the profession key.key, namebasePower, scalingPerLevelmanaCost, cooldowncombatTagsstatusEffects (if any)descriptionprofession-talent-trees.json:
talent-modifiers.js if you want talents to affect damage or other combat behavior.profession-synergies.jsonprofession-biome-bonuses.jsonprofession-weather-synergies.jsonrace-definitions.json:
keynamerace-tier-index.json with its tier (e.g. common, rare, mythic, cosmic).subrace-race-index.json.subrace-stat-profiles.json.subrace-ability-definitions.json.region-race-pools.json.subrace-race-index.json, add:
"wolfkin": "beastkin"
subrace-stat-profiles.json, add:
"wolfkin": {
"hpMult": 1.1,
"atkMult": 1.1,
"defMult": 1.0,
"speedMult": 1.1
}
subrace-ability-definitions.json, add:
"beastkin": {
"wolfkin": {
"howl_of_the_pack": { ... ability object ... }
}
}
enemies.json, set subrace: "wolfkin" for any enemy that uses it.ability-definitions.jsonsubrace-ability-definitions.jsonenemy-abilities.jsonDefine the ability object
Example (profession ability):
```json “acolyte”: { “minor_heal”: { “key”: “minor_heal”, “name”: “Minor Heal”, “basePower”: 0.0, “scalingPerLevel”: 0.05, “manaCost”: 10, “cooldown”: 1, “combatTags”: [“holy”, “heal”, “support”], “statusEffects”: [ { “type”: “heal_flat”, “power”: 12, “duration”: 0, “stack”: “add” } ], “description”: “A simple prayer restores a small amount of health.” } }
These hooks are intended to be wired through:
This project is fully data‑driven. Almost everything is defined in JSON and resolved by modular JS engines.