game/prompt/68_bleeding_and_selling_fix.md

3.5 KiB

Bleeding Logic and Item Selling Fixes

1. Magic Item Prefix Chance

  • Issue: Users felt that magic items often lacked prefixes, making them indistinguishable from normal items in terms of stats.
  • Fix: Increased ItemConfig.magicPrefixChance from 0.5 (50%) to 1.0 (100%). Now, all items generated with ItemRarity.magic will guaranteed have a prefix (and associated stat boost).

2. Enemy Bleed Damage Bug

  • Issue: Enemies were applying bleed to players, but when enemies themselves were bleeding, they took no damage at the start of their turn.
  • Fix: Updated BattleProvider._startEnemyTurn to properly call _processStartTurnEffects(enemy). This ensures that bleed damage is calculated and applied to the enemy's HP, and stun status is checked correctly.

3. Item Selling Price UI

  • Issue: The "Sell Item" confirmation dialog displayed the item's base price instead of the actual selling price (which is 60% of base). This confused players into thinking they were getting full price, or that the system was broken when they received less gold.
  • Fix: Updated InventoryGridWidget (_showItemActionDialog and _showSellConfirmationDialog) to calculate and display the final sell price: floor(item.price * GameConfig.sellPriceMultiplier).

4. Bleed Application Logic

  • Issue: Bleed status was being applied even when an attack was fully blocked by armor (0 HP damage).
  • Change: Modified BattleProvider._tryApplyStatusEffects and its call site in _processAttackImpact.
  • New Logic: Bleed status is now only applied if damageToHp > 0. If an attack is fully absorbed by armor, bleed will not be applied.
  • Note: Once applied, bleed damage (at start of turn) continues to ignore armor and directly reduces HP, regardless of how much armor the target gains afterwards.

5. Dynamic Attack Animation Images

  • Feature: Added support for changing character images during attack animation phases (Start, Middle, End).
  • Implementation:
    • Modified BattleAnimationWidget to accept callbacks for onAnimationStart, onAnimationMiddle, and onAnimationEnd.
    • Updated BattleScreen to manage animation phase state and pass override images to CharacterStatusCard.
    • Configured phase logic:
      • Risky: Start -> ScaleUp -> Middle -> Dash -> End -> Impact.
      • Safe/Normal: Start -> Middle -> Impact (No End phase).
  • Assets: Applied warrior_attack_1.png for Start and warrior_attack_2.png for End phases.

6. Story Screen & Navigation

  • Feature: Added a StoryScreen sequence after character selection and before the main game.
  • Details: 3-page PageView with "Next" and "Skip" buttons. Uses ResponsiveContainer and consistent styling.
  • Navigation: CharacterSelectionScreen -> StoryScreen -> MainWrapper.

7. Player Image & UI Fixes

  • Fix: Corrected PlayerTemplate.createCharacter to pass the image path properly.
  • Fix: Added logic in BattleProvider.loadFromSave to force update the player's image path from the latest data, fixing issues with old save files.
  • Refactor: Extracted hardcoded UI constants in CharacterStatusCard to ThemeConfig.

Files Changed

  • lib/game/config/item_config.dart
  • lib/providers/battle_provider.dart
  • lib/widgets/inventory/inventory_grid_widget.dart
  • lib/screens/battle_screen.dart
  • lib/widgets/battle/battle_animation_widget.dart
  • lib/widgets/battle/character_status_card.dart
  • lib/screens/story_screen.dart
  • lib/game/data/player_table.dart
  • lib/game/config/theme_config.dart