# Buff System Migration Guide ## Overview This guide walks you through migrating from per-generator buffs to the new global buff system. ## Prerequisites - Backup your existing save file: `user://idle_save.json` - Note: This is a **breaking change** - old saves (v1) will be rejected ## Migration Steps ### Step 1: Update Buff Resources Open each buff in `res://sandbox/buffs/` and set the `target_ids` field: **For buffs that should apply to all generators:** - Set `target_ids = ["*"]` **For buffs that target specific generators:** - Set `target_ids = ["generator_id_1", "generator_id_2"]` - Use the same IDs as defined in your generator data files **Example:** ```gdscript # farm_flux.tres target_ids = ["farm", "forestry"] # Multi-target buff # global_boost.tres target_ids = ["*"] # Wildcard - all current and future generators ``` ### Step 2: Update Generator Resources Open each generator in `res://sandbox/generators/` and: 1. **Remove** the `buffs` array field (or clear it) 2. **(Optional)** Add `expected_buff_ids` for documentation purposes This is safe because generators now query `GameState.get_buffs_for_generator()` at runtime. ### Step 3: Delete Old Save Files Delete `user://idle_save.json` to start fresh with the new v2 format. **Note:** There is no automatic migration from v1 to v2. Players will need to start new games. ### Step 4: Verify Auto-Discovery The `BuffDatabase` autoload will automatically load all `.tres` files from `res://sandbox/buffs/` at runtime. Verify in the output log: ``` BuffDatabase initialized with N buffs ``` ### Step 5: Test Key Scenarios Run through these test cases: 1. **Single-target buff**: Buy a buff that targets only one generator - Verify only that generator's production increases 2. **Multi-target buff**: Buy a buff targeting multiple generators - Verify all targeted generators' production increases 3. **Wildcard buff**: Buy a buff with `target_ids = ["*"]` - Verify ALL generators (current and future) get the bonus 4. **Goal unlock**: Meet a buff unlock goal - Verify the buff automatically unlocks and activates 5. **Save/Load**: Save the game, close, and reopen - Verify buff levels and unlock states persist 6. **Prestige**: Perform a prestige - Verify all buff levels reset to 0 - Verify buff unlock states reset to false ## Rollback (If Needed) If issues arise: 1. Revert all code changes using git 2. Restore old save file from backup 3. Restore buff/generator `.tres` files to original state 4. Remove `BuffDatabase` from `project.godot` autoloads ## Checking Your Work After migration, verify: - [ ] All buffs load automatically at startup - [ ] Buff UI displays correctly for each generator - [ ] Buying a buff level increases the GLOBAL level (not per-generator) - [ ] Multi-target buffs affect all specified generators - [ ] Wildcard buffs affect all generators - [ ] Save files include buff state (version 2) - [ ] Prestige resets all buff levels ## Common Issues ### Issue: Buff not appearing in UI **Solution**: Check that the buff's `target_ids` includes the generator's ID or uses `["*"]` ### Issue: Wildcard buffs not applying to new generators **Solution**: Ensure new generators call `GameState.register_buff()` for each buff they should inherit ### Issue: Old save won't load **Solution**: This is expected - v1 saves are incompatible. Delete `user://idle_save.json` and start fresh. ### Issue: Buff multipliers not stacking **Solution**: Verify `get_effective_multiplier()` is being called and that buff levels > 0 ## Success Criteria Migration is complete when: - ✅ All generators produce correct amounts with active buffs - ✅ Buff levels are shared globally across all targets - ✅ Wildcard buffs automatically apply to new generators - ✅ Save/load preserves buff state correctly - ✅ Prestige resets all buff levels to 0 - ✅ New buffs can be added by dropping `.tres` files in `res://sandbox/buffs/`