Changelog V0.0.3
Powerup System
Added
- Manual powerup system with one stored powerup available at a time
- Recon — reveals the enemy's next card before the round begins
- Reinforcements — moves the player's current top card to the bottom of their deck
- Sabotage — moves the enemy's current top card to the bottom of its deck
- Shield — prevents the enemy from receiving the pot after the player's next loss
- Powerup activation via the E key
- HUD display showing the currently stored powerup
- Protection preventing a new powerup from replacing one already held
- Battle Hardened — awards a random powerup every 10 completed rounds, with delayed rewards if a powerup slot is already occupied
- Last Stand — guarantees a Shield when the player reaches 10 or fewer cards, with delayed activation if a powerup slot is already occupied
- Hot Streak — activates Double Down after three consecutive player victories
- Double Down — pulls additional real cards from the enemy deck into the player's next winning pot
- Tracking for completed rounds, consecutive wins, Battle Hardened milestones, Last Stand activation, Shield status, and Double Down status
- Debug logs and on-screen messages for powerup rewards, activation, waiting conditions, Hot Streak, Double Down, Battle Hardened, Last Stand, and Shield usage
- Dedicated HUD notifications showing the name and effect of newly acquired powerups
- Separate Powerup Hint widget introducing controls at match start, with auto-fade
- Outlined powerup notification text for readability against the game environment
- Separate HUD text blocks for powerup titles and descriptions for independent styling
Changed
- Last Stand now always awards Shield instead of a random powerup
- Shield persists through victories and is only consumed after preventing a loss
- Double Down remains active through losses until the player wins a round
- Double Down removes actual card actors from the enemy deck instead of just adjusting displayed totals
- Recon-revealed enemy cards are no longer re-revealed during the normal round sequence
- Entire War sequences now count as a single completed round
- HUD updates immediately when a powerup is received or consumed
- Battle Hardened milestones advance in increments of 10 only after a successful reward
- Shield-protected pots are destroyed and removed from the match rather than awarded to either deck
- Powerup HUD redesigned from a single status label into a two-line title + description notification
- Powerup descriptions rewritten as concise instructional text
- Powerup HUD resets to "Powerup: None" immediately after activation/consumption
- Initial gameplay hint layout separates the powerup tutorial from main gameplay instructions
- HUD layout adjusted to reduce overlap between gameplay info and powerup notifications
Fixed
- Shield being consumed on a player victory without protecting anything
- Double Down card totals now draw bonus cards directly from the enemy deck
- Double Down no longer remains active after successful use
- Consecutive-win tracking now resets correctly on losses
- Hot Streak counter resets after Double Down activates
- Last Stand no longer repeatedly checks its threshold after the reward was already granted
- Last Stand now correctly grants Shield instead of Recon, Reinforcements, or Sabotage
- Battle Hardened rewards no longer lost when the powerup inventory was occupied
- Stored powerups no longer overwritten by newly awarded powerups
- Recon cards no longer produce repeat reveal behavior in the following round
- Long powerup descriptions no longer overflow the HUD (separate title/description blocks with word wrapping)
- Powerup notification readability improved via text outlines and sizing adjustments
- Deck counts remain correct after normal rounds, Wars, Sabotage, Reinforcements, and Double Down
- Shield correctly reduces cards remaining in circulation when its protected pot is discarded
Removed
- Temporary powerup award used during
BeginPlay()testing - Code that cleared Shield after any completed round
- Random powerup call from Last Stand
- Temporary Last Stand testing threshold (restored from 25 cards back to 10 cards)
Multiplayer Controls
Added
- Multiplayer controls section in the Control Menu
Settings Menu — Unsaved Changes Handling
Added
- Check for unsaved settings changes (currently supports VSync toggle only; other graphics settings not yet covered)
- Apply and Discard logic for unsaved settings changes
Changed
- Multiplayer HUD updated to match new inputs
- Debug messages updated to match new inputs
- Settings slider now plays audio after release
- Pause menu background track changed
- Win/loss audio implemented for both full-game and round-level outcomes in multiplayer mode
War Card Freeze & Visual Fixes
Added/Fixed
CardActor.cpp
RevealCard(): added a modulo-based fallback index so a card always updates its sprite even whenCardIDexceeds theCardSpritesarray bounds, preventing silent no-op reveals- Added clearer error/warning logs distinguishing an empty
CardSpritesarray from an out-of-range index versus a null sprite entry
DeckActor.h
- Changed
DrawTopCardActor()signature to accept an optionalUSceneComponent* SpawnPoint = nullptrparameter
DeckActor.cpp
DrawTopCardActor(): now callsRestackAllCardVisuals(SpawnPoint)after removing the top card (when a spawn point is passed in), so the next card in the stack is repositioned to the correct visible height instead of staying buried at its original spawn offset
WarPigsDefaultGameMode.h
- Added
bool bWarOccurredto track whether the current round escalated into a War, used to control result messaging - Added
void MoveCardToPot(ACardActor* Card, int32 PotStackIndex, bool bIsPlayerCard);declaration for repositioning drawn cards away from the deck stack
WarPigsDefaultGameMode.cpp
PlayBattleRound(): split into iterativePlayRoundStep()/ResolveRoundStep()flow (usingRevealDelayTimer) instead of resolving instantly, so reveals are visibly pacedResolveRoundStep(): passesTable->PlayerDeckSpawnPoint/Table->EnemyDeckSpawnPointintoDrawTopCardActor()calls (including War burn loops) to trigger the deck restack fixResolveRoundStep(): calls newMoveCardToPot()on every drawn/burned card so it's visually offset to its correct side of the table midpoint instead of overlapping the opposing card or the deck stackMoveCardToPot()(new): computes offset direction from actualPlayerDeckSpawnPoint/EnemyDeckSpawnPointpositions (not spawn point rotation) to reliably place player cards toward the player side and enemy cards toward the enemy sideFinishRoundAfterReveal(): addedbWarOccurred = false;reset and aTablenull-check guard to prevent stale War state and null dereference carrying into the next round
Added
- Difficulty increase upon winning an AI game
Unsaved Changes Popup
Added
- New class for Unsaved Changes Popup
ToggleButtonsfunction added to Settings Menu
Auto Play & HUD Animation
Added
- Auto Play controls and gameplay support
- Auto Play HUD notifications using the existing HintText widget
- Auto Play enabled and disabled feedback
- Tick-based HUD fade and pulse animations
- Round result color coding
- Round result pop animation
- War round state tracking
- Special War pot-capture messaging
- Card rank information in reveal debug logs
Changed
- Updated the gameplay hint to show that A toggles Auto Play
- Preserved separate multiplayer HUD instructions
- Replaced timer-based hint animation with tick-based animation
- Updated player round victories to display in green
- Updated enemy round victories to display in red
- Updated War results to display in gold
- Improved War results to show which side claimed the pot
- Updated War messaging to display the total number of captured cards
- Improved card comparison and reveal logging
- Disabled the VisualStudioTools plugin for successful project builds
Fixed
- War results now display the correct total pot size
- War rounds now visually differ from normal round victories
- Fixed unclear feedback after tied card comparisons
- Fixed Auto Play hint fading and pulsing behavior
- Fixed War result formatting so
Pot.Num()supplies the displayed card count
Unsaved Changes Screen Blueprint
Added
- Unsaved Changes Screen Blueprint
Changed
- Controls on Controls Menu
Fixed
- Squished text on Results Screen
Auto Play System Implementation
Added
ToggleAutoPlayandIsAutoPlayEnabledfunctions toAWarPigsDefaultGameModeto allow rounds to be played automatically without manual card clicksAutoPlayTick, a repeating timer callback that checksbRoundInProgressbefore simulating a click on the top player card viaHandlePlayerCardClicked, ensuring auto play never fires mid-roundAutoPlayIntervalSecondsexposed as anEditAnywhereproperty so pacing between automatic clicks can be tuned without recompiling- Exec-marked
AutoPlayfunction added toAWarPigsPlayerController, allowing auto play to be toggled directly through the in-game console - Bound a new
AutoPlayToggleinput action toAutoPlayinsideSetupInputComponent, giving players a dedicated hotkey to enable or disable auto play during gameplay
Verified
- Toggling behavior correctly starts and stops the repeating timer, and on-screen debug messages accurately reflect the current auto play state
Auto Play Auto-Disable on Game End
Fixed
- Fixed a bug where
AutoPlayTimercontinued running after the match ended, causing the game mode to keep attempting to click cards behind the win/lose results screen - Updated
CheckForGameEndto detect when either deck is depleted and immediately clearAutoPlayTimerand setbAutoPlayEnabledto false before triggeringHandleWinorHandleLose - Ensured the auto-disable happens directly rather than through
ToggleAutoPlay, avoiding any risk of the flag being flipped back on if the end-game check runs more than once
Verified
- Enabling auto play, playing through a full match, and reaching the win/lose screen now correctly halts all automatic card clicks with no further on-screen auto play messages appearing
Added
- Audio for win/loss for both full game and per-hand outcomes implemented for play vs. CPU
Quality Options & VSync
Added
- Quality Options and functionality
- VSync check and functionality
HUD Layout Refactor & Texture Asset Consolidation
Fixed
- Refactored HUD anchor and alignment logic to properly center core UI elements within the viewport across varying aspect ratios
- Adjusted widget positioning offsets and pivot points on the HUD canvas to ensure consistent centering behavior at runtime rather than relying on static editor placement
- Audited the texture asset directory to identify and resolve duplicate references, reducing redundant asset loads and cleaning up the content pipeline
- Reorganized texture files into a consistent folder structure to improve asset lookup and reduce future duplication risk
Verified
- HUD centering and texture references confirmed in-editor and in a live play session with no regressions to existing UI or material bindings
Screen Resolution Settings
Added
- Screen resolution graphics settings, applied when save button is clicked
Windowed/Fullscreen Settings
Added
- Windowed/Fullscreen options, with functionality for saving and applying settings
Diner Floor Material
Added
- Floor material representing a diner floor
Cleaned Up
- Duplicate textures removed
