A small PyQt-based RPG, inspired by old browser-game progression: fight cursed necromancers, get items, build weird stat stacks, complete gear sets, die badly, spend permanent gold, and come back stronger.
Desktop version:
pip install -r requirements.txt
python -B main.pyConsole version:
python -B main.py --consoleYou explore a chain of increasingly dangerous locations: Highcrown Fields → Chapel of Broken Bells → Old Court Road → Ashen Foundries → Veyr’s Black Citadel
After the Citadel, the loop restarts at a harder version of Highcrown Fields.
Each location has:
-
Random fights against normal enemies
-
Occasional post-fight encounters (events, shops, crafting, wishing wells, story moments)
-
A boss after a set number of fights
You level up by gaining XP from fights. At each level-up you choose a permanent stat boost. Bosses and milestones grant powerful perks and relics.
Simple Attack or Flee choices.
Combat is fully automated with a turn-by-turn log so you can watch your build in action.
Enemies have HP, attack power, and special abilities (e.g., “rage”).
You can flee most fights (with consequences based on your relics).
Gear advantage (higher total iLvl than the enemy) gives you big bonuses.
Everything is gear-driven — there are no character classes.
Items have stats (ATK, CR% (crit rate), CD% (crit damage), Luck%, etc.) and belong to item sets.
Partial set bonuses are small; completing a full set gives massive power spikes.
Items have an item level (iLvl) that scales with the location. Higher-iLvl gear is stronger.
Inventory has limited slots (you can buy more permanently from the meta menu).
Two currencies:
Coins – used during a run (shops, upgrades, inventory expansion).
Gold – permanent currency earned on death; spent in the meta menu for lasting power.
Crafting table lets you:
Improve the quality of an item (higher stats).
Fuse three lesser items into one better random item of the same slot.
Shops and scouting events appear via encounters.
Random powerful events (especially wishing wells) give huge buffs… with ugly trade-offs. Post-fight story moments with enemies and bosses often offer permanent enhancement choices.
When you die you don’t lose everything immediately. A four-step curse triggers:
Lose your best piece of gear.
Lose all coins.
Receive stat scars (negative permanent modifiers).
Die and cash out your gold.
You then spend the gold in the permanent upgrade menu (with half-cost refunds available) and start a new run stronger than before.
Accessed between runs. Here you can:
Spend gold on permanent upgrades.
Refund upgrades at half cost.
Expand inventory slots.
View your relic collection and current build power.
- Endless location loop with scaling difficulty
- Gear-defined builds instead of classes
- Automated combat with attack/flee and detailed logs
- Level-up stat choices + milestone/boss perks
- Location-based iLvl ranges + gear advantage bonuses
- Named relic effects (level rewards, fleeing, boss perks, necromancer loot)
- Full item sets with weak partial bonuses and huge complete-set bonuses
- Permanent menu upgrades with half-cost refunds
- Limited (and expandable) inventory slots
- Coins (run-only) vs Gold (permanent)
- Post-fight enhancement choices and story dialogue
- Wishing well events with strong buffs and painful trade-offs
- Crafting table (quality improvement + 3-to-1 fusion)
- Four-step defeat curse progression
Aspyria is fully data-driven and extremely mod-friendly.Base content: content/en/core.json
Mods go in mods/<mod_id>/ with a mod.json manifest + content JSON files.
You can add/replace: stats, item name pools, sets, enemies, bosses, locations, encounters, level rewards, perks, relics, etc.
Encounters support messages, coin/gold rewards, items, stat buffs/debuffs, choice lists, shops, crafting, combat hooks, and more.
See MODDING.md for full examples and JSON format.
Translations are supported via translations/ folders (English is always the fallback).
Ideas, coding, testing: DigitalGarbage
Coding assistance: ChatGPT Codex
Splash art: Generated by Grok Imagine
Music: Generated by Suno AI
Sound effects: Kenney Interface Sounds – CC0 1.0 Universal
Fonts: Tiny5 by Stefan Schmidt & Pixelify Sans by Stefie Justprince
Full asset details and licenses are in ASSETS.md. Source license terms are in LICENSE.md, and commercial-use notes are in COMMERCIAL_USE.md.
Aspyria source code is available under terms of GNU General Public License v3.
Game music is available under terms of Suno Terms of Service, meaning re-distribution of the game on commercial basis with the music included is prohibited.
Pull requests, bug reports, balance suggestions, and new mod ideas are welcome!
Just open an issue or PR on GitHub.
Enjoy the climb, adventurer. May your stat stacks be weird and your set bonuses legendary.