Commit Graph

179 Commits

Author SHA1 Message Date
MpakobecEx 5199e11d2d Add match history and replay viewer
CI / test (push) Successful in 7m1s Details
2026-10-21 18:26:02 +05:00
MpakobecEx e0ee7cdaa7 Fix stale player-state subscriptions after scene changes
CI / test (push) Has been cancelled Details
2026-10-21 18:22:13 +05:00
MpakobecEx 797e45a527 Show detailed login connection errors
CI / test (push) Has been cancelled Details
2026-10-21 18:19:18 +05:00
MpakobecEx 2fca766ba1 Add store with booster and trial deck purchases
CI / test (push) Has been cancelled Details
2026-10-21 18:14:47 +05:00
MpakobecEx 42445eb075 Redesign login scene with neon 3D card table
CI / test (push) Has been cancelled Details
2026-10-21 18:07:39 +05:00
MpakobecEx 53ceb0255c Record communication and dialogue rules
CI / test (push) Has been cancelled Details
2026-10-21 18:02:23 +05:00
MpakobecEx 8975b2de44 Add compact session state handoff
CI / test (push) Has been cancelled Details
2026-10-21 18:01:18 +05:00
MpakobecEx 6ed0998078 Move client to 3D scenes with SceneFlow
CI / test (push) Successful in 2m33s Details
2026-10-21 17:49:41 +05:00
MpakobecEx f618b69ae4 Record 3D scene-based client visual direction
CI / test (push) Successful in 1m22s Details
2026-10-21 17:35:35 +05:00
MpakobecEx 887aa9d1a5 Harden battle connection and add client metas
CI / test (push) Successful in 1m22s Details
2026-10-21 17:31:43 +05:00
MpakobecEx faf7127e14 Add matchmaking queue, WebSocket connection and gray-box battle
CI / test (push) Successful in 1m21s Details
2026-10-21 17:28:15 +05:00
MpakobecEx 1aca632958 Add onboarding, collection and deck screens to the Unity client
CI / test (push) Successful in 1m20s Details
2026-10-21 17:07:33 +05:00
MpakobecEx 32d9c31f4a Allow dev HTTP in the Unity client settings
CI / test (push) Successful in 1m25s Details
2026-10-21 16:43:55 +05:00
MpakobecEx d9a090dfde Add Unity playmode bootstrap smoke test
CI / test (push) Successful in 1m28s Details
2026-10-21 16:41:44 +05:00
MpakobecEx 33d62a34e2 Add Unity client skeleton with login and profile
CI / test (push) Has been cancelled Details
2026-10-21 16:40:40 +05:00
MpakobecEx 82fb1027f3 Rely on ticker and TTL instead of KeepAlive
CI / test (push) Successful in 1m32s Details
2026-10-21 16:25:31 +05:00
MpakobecEx 67d48b11d3 Document Orleans ports and cover grain deactivation
CI / test (push) Successful in 1m27s Details
2026-10-21 16:21:37 +05:00
MpakobecEx f60805d27c Deactivate completed Orleans grains after TTL
CI / test (push) Successful in 1m27s Details
2026-10-21 16:18:18 +05:00
MpakobecEx f8f10dea35 Give Orleans test silos distinct ports
CI / test (push) Successful in 1m31s Details
2026-10-21 16:14:35 +05:00
MpakobecEx 7d2cda67f0 Clean up Orleans E2E usings; update test counts
CI / test (push) Successful in 1m25s Details
2026-10-21 16:11:41 +05:00
MpakobecEx 5dfa5fc419 Use host setting for Orleans E2E
CI / test (push) Has been cancelled Details
2026-10-21 16:10:50 +05:00
MpakobecEx 0b662d3413 Configure Orleans via host configuration in E2E test
CI / test (push) Has been cancelled Details
2026-10-21 16:10:21 +05:00
MpakobecEx b33b7292d1 Add Orleans-enabled HTTP/WebSocket E2E
CI / test (push) Failing after 1m9s Details
2026-10-21 16:08:28 +05:00
MpakobecEx 37ebee407d Use GitHub setup-dotnet action in CI
CI / test (push) Successful in 1m41s Details
2026-10-21 16:04:01 +05:00
MpakobecEx 4888983816 Document Orleans hosting and enable Actions for the repo
CI / test (push) Failing after 3s Details
2026-10-21 16:03:09 +05:00
MpakobecEx 6c0a6be872 Use system time in Orleans test silo 2026-10-21 16:00:01 +05:00
MpakobecEx d7aa3fcbb9 Add logging usings to Orleans test 2026-10-21 15:59:14 +05:00
MpakobecEx 7d87447741 Close replaced test connection; add Orleans test logging 2026-10-21 15:58:47 +05:00
MpakobecEx edd3dfe0de Fix Orleans test cluster API usage 2026-10-21 15:57:13 +05:00
MpakobecEx b3e4c868bc Drop nonexistent Orleans localhost clustering package 2026-10-21 15:54:30 +05:00
MpakobecEx c1367d6383 Add Orleans match hosting behind a config flag 2026-10-21 15:53:30 +05:00
MpakobecEx f702d11ae4 Add EF migrations for the game and meta schema 2026-10-21 15:47:47 +05:00
MpakobecEx 6241225785 Document CI runner as pending 2026-10-21 15:41:41 +05:00
MpakobecEx ea04839d44 Count concede, leave and absence as a loss; add CI 2026-10-21 15:39:05 +05:00
MpakobecEx 4d5d7f0423 Add meta API, match history and replays 2026-10-21 15:27:19 +05:00
MpakobecEx 083cebf978 Finish server persistence with PostgreSQL, Redis and Docker 2026-10-21 14:53:28 +05:00
MpakobecEx 99d5b95000 Add a playable WebSocket match server with matchmaking and reconnect 2026-10-21 14:31:17 +05:00
MpakobecEx d4e6e9d8c0 Add match protocol spec and shared network contracts 2026-10-21 14:14:52 +05:00
MpakobecEx 9e1ed87d5d Add session handoff with current state and next steps
docs/HANDOFF.md records the completed engine, card coverage, replay, stress results, key files, decisions, remaining server/meta/client work and the pitfalls found during development. README links to it.
2026-10-21 14:06:10 +05:00
MpakobecEx 99532b6e8f Stress-test 1000 bot games and fix the guard-step deadlock
GameInvariants checks card counts, unique instance ids and damage. The CLI stress command runs random legal bot games and fails on the first violation. It exposed a real bug: an optional OnGuard ability that could not be paid (or was declined) reset the step from Guard to None while the battle was still open. OfferAbility now reports Skipped/Paused/Resolved and callers continue only when needed. 1000/1000 games finish with no errors.
2026-10-21 14:03:14 +05:00
MpakobecEx 66d52169fc Finish the card set: Tejas, Yaksha, back-row attacks and replay
Normal units can no longer attack the back row; Wyvern Strike, Tejas attacks the back row of its own column. Demonic Dragon Berserker, Yaksha rides itself from hand when an opponent's rear-guard is retired during the main phase. Match replay: CommandCodec, MatchRecord, MatchRecorder, ReplayRunner and an FNV event hash; a JSON round-trip replays a full bot game bit-for-bit. Three tests; 116 total.
2026-10-21 14:00:16 +05:00
MpakobecEx 4524c0f19f Legal intents and a 50-game bot invariant test
GameEngine.LegalCommands returns every meaningful command for the current phase, pending trigger, ability, order or choice. A random bot plays 50 deterministic games and checks that each player always has 50 cards across zones, instance ids stay unique and damage never exceeds six. Fixes found by the bot: search-to-call no longer loses a card when there is no empty circle (InTransit), a stand trigger with no rear-guards can resolve, unpayable optional abilities no longer stall the order, and legal intents skip impossible retire-self and repeated intercept commands.
2026-10-21 13:56:24 +05:00
MpakobecEx d30be8cec2 Finish TD01/TD02 scripts and the last BT01 effects
New triggers: OnBoostedHit, OnRetireFromRC, OnOpponentRetire, OnGuard; activated abilities from hand and drop zone; superior ride from drop. Cards: Voidmaster, Hagakure, Dreadmaster, Monster Frank, Blightops, Llew, Dragon Knight Aleph, Gancelot hand effect, Deathrex second effect, Brigitte, Bors, Tristan, Starlight Unicorn, Goku, Berserk Dragon, Aermo, Joka, Rakshasa. Four tests; 111 total.
2026-10-21 13:51:45 +05:00
MpakobecEx 7ca53975d7 Drive-check and guardian triggers, return-to-deck effects, 8 more cards
Asura Kaiser reacts to grade 3 Nova Grappler drive checks; Rock the Wall and Redshoe Milly move from the guardian circle to soul; Juggernaut and Brakki return to deck after battle; Lozenge and Battleraizer return at end of turn; Guiding Zombie puts itself into soul and mills three. Four tests; 102 total.
2026-10-21 13:47:00 +05:00
MpakobecEx 80095da51f Script 21 more BT01 cards
New scripts: Mocha, Randolf, Chigasumi, Queen of Heart, Jarran, Milk, Nightmare Baby, Hungry Dumpty, Clay Doll Mechanic, Blue Dust, Karma Queen, Hell Spider, Dragonic Overlord, Gancelot, Aleph, Apollon, Lohengrin, Vortex Dragon, Amaterasu, Mr. Invincible, Brutal Jack. Engine additions: OnBoosted trigger, reusable effect helpers (soul charge, retire all, flip damage, return hand card to deck, opponent discard), boost-trigger chaining so attack-declared waits for boost resolution. Four new tests; 98 total.
2026-10-21 13:44:39 +05:00
MpakobecEx 1965816808 Restore Cyrillic comments corrupted by PowerShell re-encoding
Two files were rewritten with Get-Content/Set-Content and lost their UTF-8 encoding. Restored the clean versions and re-applied the changes with an encoding-safe editor.
2026-10-21 13:39:44 +05:00
MpakobecEx ff7774b236 Multi-target choices, action restrictions and rear-guard hit triggers
AskUnitMultiChoice asks one target at a time, offers Done once the minimum is met and resolves automatically at the maximum. CardRestriction models cannot-stand/attack/boost/intercept with source, effect id and duration, including UntilOwnerNextStand. Restraint can be overridden by effects. OnAttackHit now fires when the attack hits a rear-guard. Five tests.
2026-10-21 13:38:21 +05:00
MpakobecEx 1fcb3b80df Structured stat modifiers and grantable abilities
StatModifier stores value, source card, effect id and duration (battle / turn / permanent), so a specific effect can be removed without touching others. GrantedAbility lets effects add abilities that are not printed on the card; the engine merges printed and granted abilities. Boost and trigger bonuses now use modifiers. Three tests.
2026-10-21 13:33:50 +05:00
MpakobecEx 6f5bd4e287 Card choice from hand as an effect cost
AskHandCardChoice pauses on the hand and returns the chosen card, so abilities can pay discard costs interactively. Knight of Rose, Morgana implemented: on attack, optionally discard a card for +4000 until end of turn. Test covers the full pause chain and the return to the guard step.
2026-10-21 13:29:16 +05:00
MpakobecEx 6538a470da Hit effects resolve after damage; effects never nest
OnAttackHit now fires after the damage check and after the card enters the damage zone, with a continuation when damage triggers pause. Added a resolution queue: triggers raised while an effect is resolving are stored and played back strictly one after another (depth counter on ResolveAbility and Choose). New test asserts damage exists before the hit effect is offered.
2026-10-21 13:26:59 +05:00