Commit Graph

31 Commits

Author SHA1 Message Date
Brian Fertig 8b6ccba887 bump mission rewards and add first-clear card logic
- Increased gold rewards for several Imperial missions to improve progression pacing.
- Reformatted `missions.json` for consistency (multi-line arrays).
- Set default starting gold to 300 in `SaveManager`.
- Implemented first-clear-only card rewards in `BattleScene`; subsequent wins grant gold but no duplicate cards.
- Added consolation gold (50% of mission reward) on defeat.
- Fixed `CollectionScene` input priority and improved terminal typing speed and line wrapping.
2026-03-22 12:51:43 -06:00
Brian Fertig 126182aa19 feat: add new Imperial cards and level filter to Collection Scene
- Added 5 new Imperial cards: Imperial Medic, Imperial Legionnaire, Signal Jammer, Valor Knight, and Imperial Warbanner with unique skills (heal, legion, jam, valor, strike).
- Updated CollectionScene to include a level filter (Lv 1–5) allowing users to preview card stats at different levels.
- Modified card rendering and terminal output to reflect the selected level dynamically.
- Adjusted grid padding to accommodate the new level filter buttons.
2026-03-22 12:15:59 -06:00
Brian Fertig 1c202adf1f Updated card order, collection view and card images. 2026-03-22 11:08:11 -06:00
Brian Fertig 9c3f7bd424 feat: add Imperial faction Chapter 5 campaign, cards, and missions
- Adds `campaign_imperial` (Level 5) with 8 missions (mission_030 to mission_037)
- Introduces 4 new Imperial Commander cards:
  - Iron Centurion (imp_cmd_2)
  - Grand Marshal Kyra (imp_cmd_3)
  - Imperator Dravus (imp_cmd_4)
- Adds 4 new Imperial Assault cards:
  - Imperial Dreadnought (imp_dreadnought_1)
  - Centurion Guard (imp_centurion_1)
  - Orbital Striker (imp_orbital_1)
  - Praetorian Elite (imp_praetorian_1)
- Configures mission progression, opponents, rewards, and lore entries
- Sets starter rewards for the campaign including Imperial Trooper, Gunner, and Guardian cards
2026-03-22 09:20:11 -06:00
Brian Fertig 69df7c5793 chore: update Righteous campaign missions and enhance ability animations
- Updated `data/missions.json` to increase difficulty in Chapter 4:
  - Expanded enemy card pools with higher-tier units (Templars, Purifiers, Prophets, Archangels, Seraphs).
  - Increased gold rewards for missions 022 through 028.
  - Updated mission descriptions and lore to reflect the escalation.

- Enhanced `src/scenes/BattleScene.js` animations for Righteous abilities:
  - Refactored `smite` animations to use new sprite frames (38, 39) and split cast/damage logic.
  - Updated `overcharge` to use sprite 40/41 with pulse effects and integrated HP loss/ATK gain animations.
  - Updated `fortify` to use sprite 37 with projectile travel and pulse effects, integrating armor gain animation.
  - Updated `hack` to use sprite 42 with a 3-cycle pulse before executing copied skills.

- Added new audio assets:
  - `fortify.mp3`, `hack.mp3`, `overcharge.mp3`, `smite-cast.mp3`, `smite-damage.mp3`.
- Updated `src/scenes/BootScene.js` to load the new audio files and removed deprecated smite sounds.
- Updated `assets/images/spritesheets/attacks.png` and `.psd` to include new animation frames.
2026-03-21 18:45:15 -06:00
Brian Fertig 77bbef1e5b Campaign 4 2026-03-21 15:07:09 -06:00
Brian Fertig ad4db7f541 feat(combat): implement pre-battle healing with animations and audio
Moves the `heal` skill trigger from `on_attack` to `preBattle`, allowing cards to restore HP before combat begins. Updates `data/cards.json` to reflect new skill configurations (changing `strike`/`armored` to `swipe`/`heal` for specific cards).

Changes include:
- **Data**: Updated `skills.json` descriptions and triggers. Modified `cards.json` to use the new `heal` skill with `preBattle` trigger.
- **Engine**: Refactored `CombatEngine` to collect `healFires` during pre-battle processing and removed legacy `healAll` event logic from the attack phase.
- **Logic**: Updated `SkillProcessor` to track heal targets and amounts in the context for animation purposes.
- **Visuals**: Added `sfx_heal` audio asset and implemented new animation sequences in `BattleScene` (`_processHealFires`, `_animateHealFire`, `_doHealSpriteAndHP`) featuring flying sprites, HP text pulses, and floating damage numbers.
- **State Management**: Added `_restoreHealForDisplay` and `_reapplyHeal` to handle state snapshots correctly during the pre-battle render phase.
2026-03-21 12:32:21 -06:00
Brian Fertig bb61298038 feat: increase strike damage values and implement hive_link passive for Swarm
- Updated `strike` damage values in `data/cards.json` to 10, 20, 30, and 40 respectively.
- Added `hive_link` passive skill to Swarm cards with scaling values (1, 2, 4, 8).
- Modified `CombatEngine.js` to process `hive_link` skills during the `_processOnDeath` phase, ensuring the passive effect triggers when Swarm units die.
2026-03-21 11:55:46 -06:00
Brian Fertig 776eb9c4bd bump: adjust card stats and fix drain death event handling
- Updated `data/cards.json`:
  - Increased `strike` values for several cards (6→9, 12→16, 24→25, 3→4, 5→12, 7→20, 10→28).
  - Increased `swipe` values (5→7, 7→10, 10→15).
  - Boosted `armor` for specific cards (7→10, 10→15, 15→20).

- Fixed `src/combat/CombatEngine.js`:
  - Corrected drain death event logic to properly identify the dead side and allies.
  - Added calls to `_processOnDeath` when a card or splash target is destroyed by drain effects.

- Enhanced `src/objects/CardObject.js`:
  - Updated `animateBerserkGain` to accept an optional `finalValue` parameter, ensuring the ATK text displays the correct value after the animation completes.

- Refined `src/scenes/BattleScene.js`:
  - Fixed ATK display logic for Swarm effects to correctly show the buffed value during the attack animation.
  - Integrated Hive Link animations into the death sequence for both standard attacks and pre-battle deaths, ensuring effects play before the next round proceeds.
2026-03-21 11:18:15 -06:00
Brian Fertig 35e995aff1 feat(xeno): add faction assets, skills, and combat mechanics
Introduces the Xeno faction with new commanders, units, and mechanics.
- Adds audio SFX for skills: `bloodpact`, `burrow`, `carapace`, `hive_link`,
  `molt-stage1`, `molt-stage2`, `swarm`, `venom-apply`, `venom-effect`.
- Adds Xeno card data to `cards.json` (commanders, assault, token units).
- Updates `skills.json`: changes `swarm` trigger from `preBattle` to `preAttack`.
- Implements combat logic in `CombatEngine.js`:
  - New `_burrowPhase` to decrement burrow stacks post-battle.
  - Burrowed units now take half damage from direct attacks.
  - Venom kills now trigger `on_death` and `hive_link` events.
  - `swarm` buff now applies in `preAttack` and reverts in `postAttack`.
- Updates `CardObject.js`: replaces burrow overlay with a stack-count badge.
- Updates `BattleScene.js`:
  - Animations for `swarm` surge/revert, `hive_link` pulses, `venom` ticks,
    `carapace`, `molt`, and `burrow` ticks.
  - Chains `hive_link` animations immediately after death explosions.
  - Adds SFX playback for all new skill effects.
2026-03-21 10:12:10 -06:00
Brian Fertig 87e6b8f28b refactor(combat): restructure pre-battle phases and implement Xeno mechanics
Reorganize the combat turn sequence to handle Venom, Carapace, and Molt effects within the `_preBattlePhase`. This ensures damage and stat changes occur before buffs and attacks, allowing for accurate pre-attack animations and logic.

Key changes:
- **CombatEngine.js**:
  - Extracted `_moltPhase` and `_tryCarapace` to handle armor gain and HP conversion separately from the main attack loop.
  - Moved Venom and Molt execution to `_preBattlePhase` to run before `_commanderSkillPhase` and `_attackPhase`.
  - Updated pre-attack logic to capture `carapaceGain` for animation purposes without emitting duplicate events.
  - Added `moltRestore` logic to regenerate a fresh shell for attackers before they strike.
- **SkillProcessor.js**:
  - Adjusted `venom` skill logic to update stacks only if the target is below the new value, preventing redundant updates.
- **BattleScene.js**:
  - Updated event filtering and animation pipelines to handle `venomTick`, `carapace`, and `molt` events during the pre-battle sequence.
  - Added visual effects (sprites 27-31) and tween animations for Venom application, Carapace hardening, and Molt shedding/restoration.
  - Implemented `_restoreMoltForDisplay` and `_reapplyMolt` to ensure the UI renders pre-combat states correctly before animating changes.
- **CardManager.js**:
  - Added `baseArmor` tracking to support Carapace cap calculations.
- **Data**:
  - Updated `missions.json` to refine Xeno enemy lineups for missions 014 through 020.
  - Updated Xeno card assets and UI images.
2026-03-20 21:52:34 -06:00
Brian Fertig 0f1db0884c Campaign 3 2026-03-17 14:22:15 -06:00
Brian Fertig c3e56fd6aa Balance adjustments: buff armor/delay on artillery units; rework rally to include caster when `all` is true and scale strike values; nerf flurry damage; simplify counter and bloodpact damage calculations. 2026-03-16 21:33:31 -06:00
Brian Fertig 14aaf03b33 refactor: adjust drain skill values, fix delay tick timing, and update buff display logic
- Reduced `drain` skill values in `cards.json` to balance the new damage distribution (50% primary, 25% neighbors).
- Updated `drain` description in `skills.json` to reflect the split damage calculation.
- Fixed `_activationPhase()` in `CombatEngine.js` to only tick cards currently on the field, excluding hand cards. Hand card delays now decrement during the deploy phase (`beginCommit`) to prevent newly deployed cards from losing a delay turn immediately upon entry.
- Modified `bloodpact` in `SkillProcessor.js` to permanently reduce max HP, not just current HP.
- Added temporary buff tracking for `bloodrage` in `SkillProcessor.js`.
- Updated `BattleScene.js` to temporarily restore pre-buff stats (ATK/ARM) before rendering the state, ensuring visual animations correctly display stat gains rather than showing already-modified values. Added `_restoreBuffsForDisplay` and `_reapplyBuffs` helpers.
2026-03-16 19:33:45 -06:00
Brian Fertig fc5babf5a3 refactor(combat): move Bloodrage and Legion to preBattle phase with animations
- Updated `data/cards.json` to change triggers for Bloodrage from `passive` to `preBattle`, and renamed Strike skills to Legion with `preBattle` trigger.
- Refactored `CombatEngine.js` and `SkillProcessor.js`:
  - Removed ad-hoc event pushing for Bloodrage during the attack phase.
  - Moved Legion and Bloodrage processing into the `_preBattlePhase` to generate buff events that are animated before combat resolves.
  - Added logic to track temporary buffs in `_tempBuffs` for Legion.
- Enhanced `BattleScene.js`:
  - Implemented new animations for Legion (cycling flexing arm sprite) and Bloodrage (pulsing red sprite).
  - Added support for restoring and re-applying Drain effects during the pre-battle display phase to ensure correct visual state before animation.
  - Updated sound loading in `BootScene.js` for new `legion` and `bloodrage` effects.
2026-03-15 21:55:36 -06:00
Brian Fertig 217bf1148e ```
Refactor pack system to faction-specific packs with slot-based drops

- Split standard pack into 5 faction-specific packs (imperial, raider, bloodthirsty, xeno, righteous)
- Each pack has 3 guaranteed common slots + 1 special slot with tiered rarity distribution
- Packs unlock by completing their respective campaign missions
- Updated StoreScene to display faction colors, unlock status, and support pack opening animations

Fix bloodpact skill trigger timing and mechanics

- Changed bloodpact from preBattle to preAttack trigger (now fires per attack instead of once per turn)
- Reduced HP cost to 50% of value (was 100%), maintaining same ATK gain
- Moved bloodpact processing from _collectPreBattleFires to _buildPendingAttacks
- Added death check for self-killed cards during preAttack phase

Update drain skill description and trigger

- Changed drain from preBattle to preAttack trigger
- Updated description to clarify it targets the opposing card and its neighbors

Add fusion activation video and enhanced reveal effects

- Added forge2.mp4 for fusion animation (swaps with idle forge during activation)
- Implemented 3-phase energy vortex effect: particle streams, lightning bolts, convergence flash
- Faction-colored effects based on selected stack's faction

Update attack spritesheet and card data

- Updated attacks.png/psd with new bloodpact visual (frame 24)
- Changed all bloodpact skill triggers in cards.json from preBattle to preAttack
```
2026-03-15 18:28:33 -06:00
Brian Fertig b03f7f9f5e Refactored Leveling System 2026-03-15 16:05:24 -06:00
Brian Fertig d3f9facb4a feat: Update card skills, mission rosters, and enhance DeckBuilder UI
- **Data Updates**:
  - `cards.json`: Changed a skill from `rally` (preBattle) to `strike` (preAttack) with global effect.
  - `missions.json`: Swapped opponent cards in the raider mission roster (`raider_berserker_1` -> `raider_grunt_1`, `raider_reaver_1` -> `raider_scout_1`).

- **DeckBuilderScene.js Enhancements**:
  - **Visual Feedback**: Distinguishes between "unavailable" (greyed out) and "deck full" states. Cards remain visible when the deck is full, but the Add button turns red.
  - **Fusion Lab Integration**: Adds a pulsing "Fusion Available" overlay on assault cards where the player has 3+ spare copies, linking directly to the `FusionScene`.
  - **Button States**: Refined Add button logic to display specific messages for available, deck-full, and unavailable states with corresponding colors.
2026-03-15 15:23:25 -06:00
Brian Fertig e012cda336 feat: enhance card armor values and add retro VHS menu effects
- Updated `data/cards.json` to significantly increase armor values across all card tiers and types for better survivability balance.
- Refined skill descriptions in `data/skills.json` (Pierce, Berserk, Protect, Jam, Enfeeble) to clarify mechanics like "this turn" vs "permanent" effects and added flavor text.
- Added video background support to `MainMenuScene.js` using the new `tyrants-edge-menu.mp4` asset.
- Implemented retro VHS visual overlays on the menu: scanlines, stepped vignette, rolling tracking bar, and random screen flickers for atmospheric effect.
2026-03-15 10:32:27 -06:00
Brian Fertig e9b7a51b32 Refactor combat: move `drain` to pre-battle phase and rebalance card stats
- Change `drain` skill trigger from `preAttack` to `preBattle`, resolving it against the opposing lane/commander before attacks begin.
- Update combat engine to collect and emit `drainFires` in the pre-battle sequence, including death events for drained targets.
- Rebalance card stats across all factions with higher attack/health/armor values and scaled skill magnitudes to match new combat pacing.
- Improve UI label positioning for ATK/ARM/HP on CardObject to handle dynamic text widths.
2026-03-15 09:18:24 -06:00
Brian Fertig b81aa03db6 Refactored Campaign 2 missions 2026-03-15 08:30:02 -06:00
Brian Fertig d6682baa66 feat: Add Bloodthirsty faction campaign with new cards, skills, and animations
- Added 13 new Bloodthirsty cards (common to legendary) including Countess Vireska commander
- Implemented 4 new skills: siphon, drain, bloodpact, and bloodrage with full combat engine support
- Created Chapter 2 campaign (8 missions) with progressive difficulty and unique lore entries
- Added corresponding audio effects (bloodrage.mp3, drain.mp3, siphon.mp3) and card art assets
- Implemented visual animations for all new skills:
  - Drain: projectile to primary target + splash damage to neighbors + green heal return particles
  - Siphon: blood-red projectile with glow effect that heals attacker
  - Bloodpact: red flash for HP loss followed by ATK gain animation (handles self-destruction)
  - Bloodrage: red pulse and ATK boost display when below 50% HP
- Updated CombatEngine to handle preBattle death checks (bloodpact can kill cards immediately)
- Modified BattleScene to sequence new skill animations within the combat flow
2026-03-14 21:56:19 -06:00
Brian Fertig 19e743c6f9 feat(combat): implement "Swipe" skill with sequential multi-target animation
- **Combat Logic**: Refactored `swipe` to trigger on `preAttack`, dealing damage to all enemy cards and the commander while ignoring armor. Updated `data/skills.json` and card definitions in `data/cards.json` accordingly.
- **Animation**: Added `_animateSwipeSequence` in `BattleScene.js`. The animation spawns a rotating sprite (index 20) that flies sequentially to each target, playing impact sounds (`sfx_swipe_02`) and triggering HP loss/death animations per target.
- **Assets**: Added new audio files (`swipe_01.mp3`, `swipe_02.mp3`) and UI images for factions (`bloodthirsty`, `imperial`, `raider`). Updated the attack spritesheet.
- **Collection Scene**: Overhauled `CollectionScene.js` with a modern UI featuring:
  - Filterable, scrollable card grid with hover tilt effects.
  - Interactive card selection showing a large showcase view.
  - CRT-style terminal that types out detailed card stats and skill descriptions character-by-character.
2026-03-14 17:05:46 -06:00
Brian Fertig f927529555 feat: implement "all" target modifier for skills and battle music playlist
Add a new `all` modifier to skills (`strike`, `pierce`, `mortar`, `rally`, `heal`, `enfeeble`, `weaken`, `rupture`) that targets all valid enemies or allies instead of a single target. This includes:

- **Data Layer**: Updated cards.json with expanded skill definitions and added new cards (Imperial Guardian, Pillager, Marauder). Added `allDescription` and `supportsAll` flags to skills.json.
- **Combat Logic**: Extended SkillProcessor and CombatEngine to handle "all" variants, managing parallel state updates for HP, armor, attack stats, and buffs/debuffs across multiple targets.
- **Visuals**: Implemented new animation sequences in BattleScene for area-of-effect skills (parallel projectiles, shared sound effects) and updated CardTooltip/CardObject to display the "all" modifier.
- **Audio**: Introduced a shuffled battle music playlist that cycles through multiple tracks during combat, resuming main menu music upon exit.
2026-03-14 15:26:21 -06:00
Brian Fertig 313d2548d9 feat: implement card leveling system and campaign progression
Adds a 5-level scaling system to all cards with progressively increasing stats and skill values. Introduces a campaign structure with unlock conditions, level requirements, and completion rewards that grant new cards and player level-ups.

Key changes:
- Refactored `data/cards.json` to use a `levels` array for stat progression
- Added `data/campaigns.json` defining 5 faction campaigns with mission lists and rewards
- Updated `CardManager.createInstance()` to accept a level parameter and resolve stats accordingly
- Implemented save migration (v1→v2) to track player level and unlocked campaigns
- Added `CampaignSelectScene` for browsing unlocked campaigns by faction/level
- Added `SkirmishSetupScene` allowing players to choose card levels for skirmishes
- Enhanced combat engine to pass level data to both player and AI decks
- Implemented visual animations for new skills: `enfeeble` (ATK reduction) and `jam` (skill suppression) with floating text feedback
- Updated UI components (Collection, Deck Builder, Store, Fusion) to display Level 1 stats by default
2026-03-14 13:00:16 -06:00
Brian Fertig 3c92d58055 feat(combat): implement preBattle/attack phases with pierce, protect, siege & counter animations
Refactor combat flow to separate preBattle (buffs/siege/protect) and attack phases. Introduce `preAttack` and `postAttack` events to handle temporary armor modifications (pierce) and restores.

Key changes:
- **Data Updates**: Updated `cards.json` and `skills.json` to reflect new triggers (`preBattle`, `preAttack`) for skills like Pierce, Protect, Siege, and Counter. Adjusted stats for Imperial Assault card.
- **Combat Logic**: Modified `CombatEngine.js` to process preBattle buffs sequentially (rally, siege, protect) and handle pierce armor reduction/restoration logic.
- **Skill Processor**: Updated `SkillProcessor.js` to implement positional logic for Protect (self + neighbors), direct armor reduction for Pierce, and counter damage calculation.
- **Animations**: Added new animation methods in `CardObject.js` (`animateArmorLoss`, `animateArmorGain`) and `BattleScene.js` to visualize:
  - **Pierce**: Projectile flying to target with armor drop animation, restored after attack.
  - **Protect**: Shields rising on source and flying to neighbors with armor gain animation.
  - **Siege**: Launcher overlay, missile arc trajectory, and explosion impact.
  - **Counter**: Spike projectile fired at impact during the attack hold phase.
- **Deck Builder**: Overhauled `DeckBuilderScene.js` with a scrollable card grid, faction/rarity filters, and improved deck management UI (owned/used counts).
2026-03-13 20:46:32 -06:00
Brian Fertig 031264bbb9 feat: Implement Siege mechanic and add Fullscreen toggle
- **Combat Logic**: Changed `siege` skill trigger from `on_attack` to `preBattle`.
- **Engine Updates**: Modified `_collectPreBattleBuffs` (renamed to `_collectPreBattleFires`) in `CombatEngine.js` to capture and log siege damage events separately from buffs.
- **Skill Processor**: Updated `SkillProcessor.js` to record `siegeTarget` and `siegeDamage` in the context for event logging.
- **Data Updates**: Adjusted descriptions and triggers in `cards.json` and `skills.json`.
- **UI**: Added a "Toggle Fullscreen" button to the Main Menu with state-aware labeling.
2026-03-13 17:08:30 -06:00
Brian Fertig a17adba1e9 feat(combat): implement pre-battle buffs and pre-attack skill animations
- Updated `cards.json` and `skills.json` to define `preBattle` (Rally) and `preAttack` (Strike, Mortar) triggers with new descriptions.
- Added `_preBattlePhase` in `CombatEngine.js` to process Rally skills before combat, tracking temporary buffs on cards.
- Added `_postBattlePhase` to remove temporary buffs after combat resolves, ensuring stat changes are cleared for the next turn.
- Modified `SkillProcessor.js` to handle `Strike`, `Mortar`, and `Rally` logic with context data for animation targets and damage values.
- Implemented `_onPreAttackStep` in `BattleScene.js` to sequence animations before the main attack:
  - `_animateMortarFire`: Flies a mortar shell in an arc, explodes on impact, and handles HP loss/death.
  - `_animateStrikeFire`: Launches a missile at the opposing lane/commander with similar impact effects.
  - `_animateRallyBuff`: Animates a flag flying between cards to visualize ATK gains.
- Updated `CardObject.js` `animateHPLoss` to accept explicit `fromHP`/`toHP` arguments, ensuring correct display values during multi-step damage sequences.
- Added `_playSkillExplosion` for consistent impact visual effects during skill resolution.
- Adjusted attack flow to pause for pre-attack animations before the standard card clash sequence.
2026-03-13 15:45:57 -06:00
Brian Fertig 73ce826100 refactor(combat): change Berserk trigger to on_attack with animated gain
- Updated `cards.json` and `skills.json` to trigger Berserk on damage dealt (`on_attack`) instead of on kill, adjusting descriptions accordingly.
- Modified `CombatEngine.js` to emit a `berserk` event after successful attacks and removed the previous kill-based logic.
- Enhanced `SkillProcessor.js` to apply Berserk attack power gains only when damage is dealt during an attack.
- Added `animateBerserkGain` in `CardObject.js` to visually display the ATK increase with scaling, a "+N" label, and smooth transitions.
- Overhauled `_animateAttack` in `BattleScene.js`:
  - Cards now slide to the center and scale up during attacks, then return to their original positions.
  - Added a "VS" image that appears between cards during the clash.
  - Synchronized particle bursts, shakes, and damage numbers with the new centered animation timing.
  - Integrated Berserk gain animation into the attack flow, rewinding ATK text before animating the increase.
- Added `vs.png` asset loading in `BootScene.js`.
2026-03-13 09:32:55 -06:00
Brian Fertig d865634a2f refactor(data): rebalance card stats and update starter deck composition
- Significantly increase HP values across all Imperial and Raider cards to extend combat duration and emphasize defense mechanics.
- Adjust armor values on select units (e.g., Raider Berserker, Marauder) to better match their roles.
- Reformat `cards.json` skills into expanded multi-line objects for improved readability and maintainability.
- Update the default starter deck in `DeckManager` to a more focused composition: 4x Trooper, 3x Gunner, 3x Guardian.
- Reduce starting gold in `SaveManager` from 1500 to 400 to better align with the new economic balance.
2026-03-12 20:49:15 -06:00
Brian Fertig 1a28234859 initial commit 2026-03-12 16:36:32 -06:00