Commit Graph

88 Commits

Author SHA1 Message Date
Brian Fertig 0a76d7352b feat: implement smite skill, rework enfeeble to hive_link/wound, update card skills and flavor texts
- Add 'smite' damage-over-time skill with single/all-target support and animation
- Rename 'enfeeble' to 'hive_link' on xeno cards; add persistent ATK gain on death
- Replace some enfeeble instances with new 'wound' skill (applied on_attack)
- Adjust cleanse trigger from preBattle to postBattle, reduce values
- Rebalance overcharge/fortify/heal/smite skill distributions across factions
- Update all card flavor texts for thematic consistency and personality
- Fix wound badge positioning and origin in CardObject display
- Speed up strike/smite animations (2000→500ms, 500→250ms, etc.)
- Add smiteFires to pre-battle event flow with restore/reapply logic
2026-04-04 09:26:01 -06:00
Brian Fertig d98070915f refactor: replace enfeeble with wound/skill rebalancing and add venom/burrow/hive_link support
- Replace enfeeble skill with wound (value adjusted per card) across multiple enemy cards in data/cards.json
- Add venom preBattle skill to several enemy cards (3/6/12 stacks)
- Add burrow all: true skill to multiple enemy cards (1–3 turns)
- Add cleanse and hive_link skills to hive-related enemies with postBattle trigger
- In CombatEngine.js: implement _applyCommanderBurrowBonus for deploying/spawned cards
- Implement commander hive_link all: boost surviving allies' ATK when any card dies
- In SkillProcessor.js: update all all-targeting skills (strike, pierce, mortar, jam, weaken) to skip targets with burrowTurns > 0
- Add venom skill support with stack handling and prevStacks tracking for display restoration
- In BattleScene.js: extend preBattle event handling to include venomFires; fix hive_link deadCardId resolution
2026-04-03 22:02:28 -06:00
Brian Fertig e6049b6985 feat: add 'cleanse' skill to elite enemies and adjust deck panel layout
- Add post-battle 'cleanse' skills (value 4/8/13) to three elite enemy cards
- Remove 'enfeeble' pre-battle skill from two elite enemies, increase their drain values
- Reorganize SkirmishDraftScene UI: expand vertical spacing for commander slots and remove rarity pick counters to reduce clutter and improve layout consistency
2026-04-03 20:21:25 -06:00
Brian Fertig d4d9b25c72 feat(draft): implement alternating rarity-phase draft system
- Replace budget-based drafting with structured rarity-phase progression (legendary→epic→rare→common)
- Add phase tracking (`currentPhaseRarity`, `playerRemainingPicks`, `aiRemainingPicks`)
- Update card pool generation to respect target counts per rarity
- Refactor UI to show per-rarity pick progress instead of budget bars
- Adjust AI draft logic to prioritize current phase rarity and fallback safely
- Rename "Difficulty" selector to "Deck Strength" with clearer labels (Beginner/Medium/Advanced/Legendary)
2026-04-03 16:38:11 -06:00
Brian Fertig fd78f75c83 feat(combat): Standardize wound stacking logic to respect skill value limits
- Apply consistent wound stacking calculation across all targets (including commander)
- Enforce skill.value as upper bound for wounds applied, accounting for existing wound stacks
- Prevent negative or zero wound applications by early-returning when toApply <= 0
2026-04-03 10:18:27 -06:00
Brian Fertig d5a30da9aa feat: track pre/post HP in wound/venom/smite events and improve stat refresh logic
- Add hpBefore/hpAfter fields to woundTick/venomTick/smiteTick events for accurate damage tracking
- Introduce CardObject.refreshStatsOnly() to update ATK/ARM/DLY/skills without touching HP or badges
- Refactor BattleScene._refreshCardAfterAttack() and related methods to use refreshStatsOnly()
  instead of full refresh, preserving HP animations and badge timing
- Update animateHPLoss calls to pass hpBefore/hpAfter for precise progress tracking
- Fix berserk animation to correctly rewind before animating ATK gain
- Remove redundant commander HP bar updates during attacks (handled by preAttack skills)
- Add _restoreSiegeFiresForDisplay/_reapplySiegeFires to temporarily undo siege damage for display

This change separates stat updates from HP management, ensuring animations and UI remain
consistent with the combat engine's state transitions.
2026-04-03 09:59:50 -06:00
Brian Fertig 1ca1b5bf80 feat(draft): implement alternating draft mode with dual-deck UI
- Add alternating draft where player and AI take turns picking commander then cards
- Implement shared card pool tracking with "taken" state overlays in card grid
- Introduce dual-deck panel showing both sides' budgets, commanders, and card lists
- Refactor AI draft logic into state machine with `_playerPick`, `_aiPickCommander`, and `_aiPickOneCard`
- Add status banner indicating whose turn it is, with pulsing animation on AI turns
- Adjust card skill values in `cards.json` (e.g., rally: 3→4, heal upgrades, strike boosts)
2026-04-02 21:04:25 -06:00
Brian Fertig 762dc77556 refactor: Add optional refresh control to _buildPanel in SkirmishDeckSelectScene
- Pass `refresh` flag (default `true`) to `_buildPanel` calls for both player and opponent panels
- Skip `_refreshPanelHighlights()` call within `_buildPanel` when `refresh=false`
- Call `_refreshPanelHighlights()` once after building both panels to avoid redundant updates
2026-04-01 20:34:19 -06:00
Brian Fertig a5598bfcd0 feat: add skirmish deck selection and drafting system
- Added `skirmish_decks.json` with 8 premade decks across difficulty levels (Easy to Legendary)
- Implemented `SkirmishDeckSelectScene` for choosing player/opponent decks (draft or premade)
- Implemented `SkirmishDraftScene` with interactive card drafting, budget system, and AI opponent deck generation
- Updated `BattleScene` to support skirmish mode with custom decks and gold rewards (200/400)
- Updated `BattleResultScene` to return players to SkirmishSetup for quick replay
- Integrated new scenes into game flow via config and BootScene data loading
2026-04-01 20:04:06 -06:00
Brian Fertig 7513cb2bf5 Updated Store Tutorial Gold Qualifier 2026-04-01 10:23:46 -06:00
Brian Fertig 307704b90d feat: implement Deck Builder and Collection tutorial phases
- Added DECK_BUILDER_INTRO (7) and COLLECTION_INTRO (8) stages to TutorialManager.STAGES
- Implemented 3-phase Deck Builder tutorial in DeckBuilderScene with dimming overlays, pulsing arrows, and step-by-step guidance for deck management
- Added full-screen tutorial flow in MainMenuScene for both Deck Builder intro (with interactive button override) and Collection intro (highlighting save/restore buttons)
- Integrated tutorial progression logic to advance users through remaining stages after Fusion Intro
2026-03-31 23:24:13 -06:00
Brian Fertig 0ea053dc44 feat: add tutorial stages for Store intro (5) and Fusion intro (6)
- Extended TutorialManager to support new stages 5–6 and added hasFusibleCards() helper
- Integrated Store tutorial in MainMenuScene (triggered when gold > 400, redirects to Store)
- Added full interactive tutorial overlay in StoreScene highlighting imperial pack purchase flow
- Implemented Fusion Scene’s two-phase tutorial: phase 1 highlights fusible stacks with pulsing borders/arrows; phase 2 exposes forge video, preview, and Fuse button with instructions
- Updated BattleResultScene to redirect to Main Menu if gold > 400 and store tutorial incomplete, allowing Store scene to show its own tutorial next
- Completed stage 6 when player clicks Fuse button in FusionScene
2026-03-31 23:01:32 -06:00
Brian Fertig 5b206fda33 feat: implement BattleResultScene with full post-battle flow
- Add new BattleResultScene to handle post-battle victory/defeat sequence
- Include animated terminal-style debrief with stats, rating, and card/commander unlocks
- Support dynamic commander videos (victory/defeated) with fallback placeholders
- Implement gold counter animation and card reveal system with rarity effects
- Add victory/defeat music assets and integrate into result flow

BattleScene changes:
- Track all battle events across turns for detailed post-battle stats
- Transition to BattleResultScene instead of showing inline results
- Preserve save logic (gold, cards, unlocks) in result scene transition

BootScene changes:
- Load victory/defeat music assets for result scene playback
2026-03-31 17:54:00 -06:00
Brian Fertig 22b4b51883 feat: fix delay activation for freshly deployed AI cards and optimize pre-battle strike handling
- Skip delay tick for AI cards just deployed in opponent-first turns to prevent unfair free activation
- Group consecutive "strike all" pre-battle fires to execute them in parallel, matching player card behavior
2026-03-31 13:37:04 -06:00
Brian Fertig e8c6ff6c96 feat: update mission 030-037 content and balance adjustments
- Add new mission briefing videos (mission_030 through mission_037)
- Balance card stats: reduce fortify values, increase strike damage and armor values across multiple cards
- Adjust heal values for support units
- Significantly reduce gold rewards for missions 030–036 (from ~2800–3400 to 800), with mission 037 reward set to 1600
- Extend video preload loop in CampaignScene.js to include new mission videos
2026-03-31 11:49:08 -06:00
Brian Fertig b60fc16bb4 feat(combat): support commander wound skill triggers in preBattle phase
- Update applyWound/applyVenom/applySmite to include commanders in target lists
- Add 'wound' skill support for commanders with 'on_attack' trigger during preBattle
- Implement wound stack capping for commanders (max = skill.value)
- Extend preBattle event structure with woundFires array
- Add animation and state restoration logic for preBattle wound applications

This enables commander cards to apply wound stacks before combat begins, with proper
stack limits and UI feedback.
2026-03-30 20:22:18 -06:00
Brian Fertig 2cfba2a893 refactor: rename "rupture" to "wound" and "sanctify" to "cleanse"
- Renamed skill name from rupture → wound throughout data/skills.json and data/cards.json (120+ occurrences)
- Updated all related logic in CombatEngine.js and SkillProcessor.js:
  * Phase renamed _rupturePhase → _woundPhase, event types updated
  * Tracker renamed ruptureTracker → woundTracker
  * Card property ruptureStacks → woundStacks
- Renamed skill name from sanctify → cleanse, changed trigger to postBattle and removed all-target support (now always cleanses all allies)
- Updated visual assets: badge text, sound keys (sfx_rupture → sfx_wound, sfx_sanctify → sfx_cleanse), status messages
- Adjusted strike skill values in cards.json (5→8, 7→14, 10→20, 15→30)
2026-03-28 09:41:49 -06:00
Brian Fertig 2ea8857f91 Added videos to missions 2026-03-27 22:28:29 -06:00
Brian Fertig fe229d7462 feat: implement compound molt armor mechanics and update balance
- Add permanent +1 baseArmor bonus on each molt to enable compound armor growth across multiple molts
- Track molt activation with _moltZeroed flag to ensure armor restoration only occurs after a molt event
- Extend protect/fortify skills to also boost baseArmor when applied after a molt (to preserve interim boosts)
- Update card venom values for progressive difficulty curve
- Adjust mission rewards and replace bt_hemomancer_1 with bt_hemorrhage_1 in reward pool
- Add 23 new mission briefing videos (mission_001 through mission_023)

This refines the molt mechanic to support long-term armor progression while maintaining balance across campaigns.
2026-03-27 20:30:56 -06:00
Brian Fertig ab4225bd42 Add mission briefing videos for all 5 missions
- Add binary assets: `assets/video/mission_001.mp4` through `mission_005.mp4`
- Update `CampaignScene.preload()` to dynamically load all mission videos
- Modify briefing display logic to show the loaded video when available, hiding offline/file placeholders
2026-03-26 23:34:45 -06:00
Brian Fertig 3da9d5c527 feat: overhaul campaign UI with CRT terminal aesthetic and balance skills
- **UI Overhaul**: Replaced static backgrounds with animated video loops and scanline overlays in `CampaignScene` and `CampaignSelectScene`.
- **Terminal Interface**: Implemented a "Tactical Operations Terminal" in the campaign mission view featuring amber CRT styling, typing text effects, vignettes, and flicker animations.
- **Mission Briefing**: Added interactive mission selection that renders detailed briefings, lore, and reward manifests within the terminal interface.
- **Balance Changes**: Doubled the values for `siege`, `mortar`, `venom`, and `smite` skills in `data/cards.json` across all tiers.
- **Tutorial Updates**: Adjusted tutorial overlays and positioning to match the new layout and UI elements.
2026-03-26 21:31:51 -06:00
Brian Fertig 5a67484240 feat: implement comprehensive battle and campaign tutorial system
Adds a multi-stage tutorial system to guide new players through the core game mechanics:

- **Save System**: Bumps save version to 3 and adds `tutorialProgress` tracking with migration logic for existing saves.
- **MainMenuScene**: Introduces Stage 1 (Campaign Intro) overlay directing users to start the campaign.
- **CampaignSelectScene**: Adds Stage 2 overlay highlighting the "Raider Uprising" campaign selection.
- **CampaignScene**: Adds Stage 3 overlay explaining mission selection within a campaign.
- **BattleScene**: Implements Stages 4 & 5:
  - **Battle Intro**: Step-by-step walkthrough of Commander cards, explaining ATK, ARM, HP, DLY, and Skills.
  - **Battlefield Guide**: Visual explanation of the 4-lane system, card combat mechanics, unblocked attacks, and the "Next Turn" flow.

All tutorial overlays include interactive "Continue" or direct-action buttons, animated indicators, and depth management to prevent interaction with the underlying game state until the tutorial step is complete.
2026-03-25 22:06:04 -06:00
Brian Fertig 4eb4d7f278 Add IntroScene with video playback and skip functionality
- Introduce `IntroScene` to play `assets/video/intro.mp4` before the main menu
- Implement dynamic video scaling to fit screen dimensions
- Add skip prompt (Space/Click) that appears after first interaction
- Move main menu music initialization to `MainMenuScene` for proper lifecycle management
- Update scene flow: `BootScene` → `IntroScene` → `MainMenuScene`
- Include fallback handling for video errors and metadata loading
2026-03-25 20:47:18 -06:00
Brian Fertig 662147cdfb bump mission gold rewards and hive_link values; unlock all faction commanders on first campaign clear; enhance Fusion Lab UI 2026-03-25 19:32:50 -06:00
Brian Fertig e731b87e9d Changes to combat and cards 2026-03-24 20:55:08 -06:00
Brian Fertig d17379ca57 feat(deckbuilder): add unsaved changes warning and rebalance vampire cards
- **DeckBuilderScene**:
  - Introduced `hasUnsavedChanges` state to track modifications.
  - Added visual indicators: an "Unsaved Changes" badge in the deck panel and dynamic styling for the Save button.
  - Implemented a confirmation modal when attempting to leave the scene with unsaved changes.
  - Fixed scroll position restoration after re-rendering the card grid.

- **Data (cards.json)**:
  - Rebalanced Vampire cards by swapping `drain` and `rupture` values (reduced drain, increased rupture).
  - Increased `rupture` values across higher-tier vampire cards (3, 6, 10, 15) to enhance their late-game scaling.
2026-03-24 19:30:35 -06:00
Brian Fertig 52808806a8 feat(combat): rename "valor" to "legion" and add parallel "all" weaken animation
- Updated `data/cards.json` to rename the `valor` skill to `legion`, change its trigger to `preBattle`, and adjust `strike` values across multiple card tiers.
- Reduced the `enfeeble` skill value from 3 to 1 in `data/cards.json`.
- Enhanced `weaken` skill tracking in `CombatEngine.js` and `SkillProcessor.js` by adding an `isAll` flag to distinguish area-of-effect weaken effects.
- Refactored `BattleScene.js` to group consecutive "all" weaken fires and animate them in parallel via a new `_animateWeakenFireAll` method, improving visual feedback and performance for multi-target weaken effects.
2026-03-24 18:46:16 -06:00
Brian Fertig b2c55d903a chore(battle): initialize result state flag in BattleScene
Adds `_resultShown` property to `BattleScene` constructor, initializing it to `false`. This flag tracks whether the battle result has been displayed and is reset when a new mission begins.
2026-03-24 18:05:53 -06:00
Brian Fertig 547196f709 feat(combat): Add pre-battle strike resolution for commanders
- Extend `CombatEngine._resolvePreBattleSkills` to capture `strike` and `strike-all` skills from commanders during the `preBattle` phase.
- Introduce `strikeFires` to track strike hits, including damage, targets, and commander status.
- Update `BattleScene._processPreBattleSequence` to handle and animate `strikeFires` alongside other pre-battle effects.
- Ensure death events are correctly processed for non-commander targets destroyed by pre-battle strikes.
2026-03-23 22:54:39 -06:00
Brian Fertig 313f14b956 Changes 2026-03-23 22:31:50 -06:00
Brian Fertig eabf10ca4a feat: add store audio effects and rebalance card stats
- Added new audio files for store interactions: `buy.mp3`, `card.mp3`, and `card-bonus.mp3`.
- Updated `BootScene` to preload the new sound effects.
- Implemented sound triggers in `StoreScene`:
  - Plays `sfx_store_buy` upon purchasing cards.
  - Plays `sfx_store_card` when revealing a card.
  - Plays `sfx_store_card_bonus` for rare, epic, and legendary cards.
- Rebalanced `data/cards.json` to adjust game mechanics:
  - Set `attack` to `0` for all legendary card levels.
  - Reduced `health` values across all card tiers.
  - Standardized `delay` values to `0` or `1` for most cards, removing high delay values.
2026-03-23 18:50:22 -06:00
Brian Fertig 480f1ce354 feat: add new Raider commanders, units, and Rupture/Weaken skill systems
- Added two new legendary Raider commanders: Warboss Kragath (Weaken + Strike) and Scar-Queen Vex (Enfeeble + Rupture).
- Introduced new Raider units across all rarities: Brute, Cutpurse, Berserker, Cutthroat, Marauder, Scavenger, Defiler, Warlord, Reaver, Warband Breaker, Carnage, Overlord, Ravager, Iron Destroyer, and Skulltaker.
- Implemented full Rupture mechanics:
  - Added `ruptureStacks` tracking and pre-battle damage phase that can kill units.
  - New `rupture` skill logic with single-target and `all` variants, including burrow immunity.
  - Visuals: rupture stack badge on cards, knife throw animations for application, and pulsing heart effect for tick damage.
  - Audio: new SFX for rupture cast and damage.
- Implemented Weaken mechanics:
  - Reduces target Armor and Attack (split 50/50) with clamping to non-negative values.
  - Added `weakenFires` event tracking and pre-battle animation with stat reduction visuals.
  - Audio: new SFX for weaken cast.
- Updated missions to feature new commanders and units, and increased gold rewards.
- Updated `attacks.png` and `attacks.psd` spritesheets with new effect frames (knife, heart).
- Updated `data/cards.json` and `data/missions.json` with new entries and rebalanced values.
2026-03-22 17:51:06 -06:00
Brian Fertig 739cf18603 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 14:54:40 -06:00
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 b2981cd389 chore: update combat engine formatting and battle scene animations
- Normalize whitespace and alignment in `src/combat/CombatEngine.js` (variable assignments and filter calls).
- Extend projectile tween duration in `src/scenes/BattleScene.js` from 350ms to 2000ms for smoother visual effect.
- Adjust sprite pulse animation scale range from 0.8–1.5 to 0.5–1.0 for a more subtle effect.
- Update binary assets: new `smite2.mp3`, modified `fortify.mp3` and `smite-cast.mp3`, updated `attacks.png` and `attacks.psd`, removed duplicate `attacks (1).png`.
2026-03-22 08:29:22 -06:00
Brian Fertig 1c99dc233d feat(combat): expand skill copying and fix drain animation signature
- Updated `SkillProcessor` to allow copying of `preBattle` and `on_attack` triggered skills in addition to `preAttack`, broadening the scope of the `hack` skill.
- Fixed the `_animateDrainFire` call in `BattleScene` to pass the `fire.source` (attacker) as the first argument, ensuring the animation has access to the correct source entity.
2026-03-21 20:29:38 -06:00
Brian Fertig 440662df72 adjusted hacked strike damage 2026-03-21 20:12:55 -06:00
Brian Fertig ff4a7eebf0 Implement hacked Berserk and Flurry skills with animations
- CombatEngine:
  - Handle hacked `berserk` by adding `hackSkill.value` to attacker's current attack and logging the event.
  - Handle hacked `flurry` by injecting a temporary passive skill (+1 extra attack) that is removed after the attack resolves.
- BattleScene:
  - Include `smiteTick` in pre-battle event filtering.
  - Add `smiteApply` and `smiteApplyAll` to on-attack-all event tracking.
  - Increase smite projectile size (sprite 38) from 80x80 to 180x180.
  - Enhance smite damage animation: pulse sprite 39 twice over 1s, synchronize with HP loss, and enforce minimum timing before proceeding or playing death/hive-link animations.
  - Add visual and text feedback for `berserk` (animate attack gain) and `flurry` (status text) in fire animations.
2026-03-21 20:00:46 -06:00
Brian Fertig 82f871abfb feat(combat): add hack support for new skills and fix sound playback
- Extend `CombatEngine` to support hacking `strike`, `jam`, `venom`, `smite`, and `molt` skills, including single and area-of-effect variants.
- Add logic to process deaths and carapace gain for hacked `strikeAll` attacks.
- Update `BattleScene` to handle animation sequences for the new hacked skills (`strikeAll`, `jam`, `venom`, `venomAll`, `smite`, `smiteAll`, `molt`).
- Fix sound effect playback by removing redundant existence checks (`if (this.sound.get(...))`), ensuring sounds play reliably.
2026-03-21 19:31:04 -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 71d291f814 feat: add Righteous faction assets and enhance Sanctify animations
- Add new audio and image assets for the Righteous faction:
  - FX: sanctify.mp3
  - Cards: Archangel, Commander (x3), Inquisitor, Judicator, Prophet, Purifier, Seraph, Templar
  - UI: right_01.png, right_02.png, right_03.png
- Update battle backgrounds to include the 'righteous' theme.
- Fix CombatEngine to pass actual enemy lanes to commander offensive buff collection, ensuring all-targeting skills function correctly.
- Refactor Sanctify animations in BattleScene:
  - Introduce `_doSanctifySpriteTo` to animate a projectile flying from source to target.
  - Animate sprite 35 flying in, shaking on impact, swapping to sprite 36, and fading out.
  - Apply the new animation logic to both single-target and multi-target Sanctify effects.
- Update attack spritesheet to support the new animation frames.
2026-03-21 16:37:39 -06:00
Brian Fertig 77bbef1e5b Campaign 4 2026-03-21 15:07:09 -06:00
Brian Fertig 8a31c2504e feat(combat): persist carapace armor gain to baseArmor
Update `CombatEngine._applyCarapace` to increment `card.baseArmor` alongside `currentArmor` and `card.armor` when carapace effects trigger. This ensures the armor gain is tracked as a permanent base stat increase rather than just a temporary effect. The debug log has also been updated to reflect the new `baseArmor` value.
2026-03-21 13:00:16 -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 7237d23363 Add carapace animation and handle hive_link ATK buff restoration
- Implement `_animateCarapace` handler in the event switch to support the new carapace effect.
- Update `_restoreBuffsForDisplay` to temporarily undo `hive_link` ATK gains, ensuring pre-battle animations display the correct pre-buff values.
- Update `_reapplyBuffs` to re-apply `hive_link` ATK gains after state rendering, ensuring the data model is correct for subsequent animations like `animateBerserkGain`.
- Update comments to reflect that `hive_link` is now included in the list of buffs temporarily undone for display purposes.
2026-03-21 11:35:57 -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