systems rework: buffs, prestige graph, research, modular architecture

Decouples core systems from centralized globals in favor of catalogue-based architecture and data-driven content.

   Key changes:
   - Prestige: node-based buff tech tree, graph panel, progress bar
   - Research: multi-worker system, per-generator research, xp generation
   - Ascension: meta-currency layer via multi-currency prestige resets
   - Buffs: refactored as generator-independent via catalogues
   - UI: currency panel, edge-scrolling camera + zoom, current-goal panel
   - Alchemy Tower: crafting building with recipe/cost system
   - Testing: 7 test suites (ascension, prestige, research, goals)
   - Content: migrated from hardcoded idles/ to gym format (tiny_sword)
This commit was merged in pull request #1.
This commit is contained in:
2026-05-07 20:36:21 +00:00
parent 2743fd314a
commit 81a4058b04
242 changed files with 11226 additions and 2242 deletions

View File

@@ -0,0 +1,55 @@
# Alchemy Tower
The Alchemy Tower is a building that passively produces **magic gold** and allows **crafting** other currencies through alchemical recipes.
## Passive Production
The tower runs a continuous production cycle. Once a cycle completes, magic gold is added to your balance and the next cycle begins with a slightly longer duration.
| Data field | Default | Description |
|---|---|---|
| `base_production_time_seconds` | 5.0 | Duration of the first cycle (seconds) |
| `production_time_growth_multiplier` | 1.2 | Each completed cycle multiplies the next cycle's duration by this amount |
| `magic_gold_per_cycle` | 1.0 | Base magic gold produced per cycle |
Production is only active when at least one worker is assigned and the tower is available in the game state.
## Workers
Workers are assigned by spending 1 **worker** currency per worker. Each assigned worker provides a **+10% speed bonus** to production (configurable via `base_worker_speed_bonus`).
- Max workers: `max_workers` (default 10)
- The speed multiplier formula: `1.0 + (worker_count * base_worker_speed_bonus)`
- This multiplier affects both the rate time advances and the final cycle output
The UI panel includes a worker counter and an "Assign Worker" button. The button is disabled when you have no workers available or have reached the max.
## Crafting
The crafting panel shows recipes from an `AlchemyCraftCatalogue` resource. Each recipe (`AlchemyCraftRecipe`) defines:
- `id` — unique recipe identifier
- `output_currency` / `output_amount` — what you get
- `cost_entries` — array of `CurrencyCostEntry` resources, each specifying a currency and an amount
To craft, click the recipe's button. The tower deducts all costs from your balance via `game_state.spend_currency()`. If any cost can't be covered, the craft fails silently and nothing is deducted. On success, the output currency is added to your balance.
## Signals
| Signal | Emitted when |
|---|---|
| `production_progress_updated(progress: float)` | Every frame during production; 0.01.0 |
| `production_completed(amount: BigNumber)` | A production cycle finishes |
| `magic_gold_balance_updated(amount: BigNumber)` | Magic gold balance changes |
## Key Files
| File | Purpose |
|---|---|
| `alchemy_tower.gd` | Main tower logic: production loop, worker management, crafting |
| `alchemy_tower_data.gd` | Configuration resource (`AlchemyTowerData`) |
| `alchemy_craftable_panel.gd` | UI panel (`AlchemyCurrenciesPanel`) for progress bar, balance, workers, and recipe list |
| `alchemy_craftable_panel_tile.gd` | Individual recipe tile in the crafting list |
| `recipes/alchemy_craft_catalogue.gd` | Catalogue resource holding all available recipes |
| `recipes/alchemy_craft_recipe.gd` | Single recipe resource |
| `recipes/currency_cost_entry.gd` | Cost entry for a single currency in a recipe |