🎮 Game
Memory Quest is a memory-match roguelike: the player flips pairs of themed cards on a grid, and each card type has its own effect (heals, money, shuffles, swaps) alongside relics and status effects bought between levels. Cards, relics and statuses are separate components wired through a central Manager singleton and a shared event pipeline, with a Razor HUD for the board, shop and score panels.
🐞 Possible Bugs
Utils.csQuartInOut is a copy of CubicInOut: both branches use cubes (4*t*t*t and (t-1)*(2t-2)^2), so EasePercent with QuartInOut returns a cubic curve instead of 8t^4 / 1-8(1-t)^4.
cards/CardBalloon.csValidateStartingGridPos dereferences otherCard.CardType without a null check, and GetCardAtGridPos returns null for empty tiles, so the first empty random tile throws a NullReferenceException.
relics/RelicRoboAssistant.csThe while loop only increments count after a successful move, so on a board with no valid non-adjacent same-type pair (every pair adjacent, or a type with only one card left) it spins on GetRandomCard with no await, hanging the game.
ui/BountyTooltip.razorBuildHash only hashes CardType, but the panel renders turn number and turns remaining, so an open tooltip will not refresh its countdown when the turn advances.
ui/MessagePanel.razorBuildHash omits StatusEffect while the root style reads it, so toggling StatusEffect on an existing panel leaves the old background color until some other hashed field changes.
ui/SettingsPanel2.razorSetSfxVolume and SetMusicVolume return early while muted, so mixer volume is never updated when the muted state ends or a value is changed during mute.
BuildHash combines Time.Now, so the panel rebuilds every frame instead of only when settings change.