Conversation
…e deck list to dandan
… can be enforced when creating a new deck
…y and graveyard states can be observed
…o .dck attributions
… updates to deck comments for 2 dandan decks
… updates to deck comments for 2 dandan decks
|
Ambitious project. The concept of shared zones seems useful to a few other variant formats (e.g. Shared Planar deck option, Bounty deck), though it looks like your implementation results in a lot of DanDan-specific checks and branches dotted throughout the code. I wonder if the concept can be generalized. Have you tested the shared zones with more obscure mechanics, such as subgames and Karn's game restart effect? I feel some things like your deck comment support and game simulation changes could stand alone as separate PRs. |
|
Helps a bit by slimming down what needs reviewing here, but also it'd probably get those parts merged faster. I suspect reviewing this will have to wait a bit for most of the team, now that we're in the middle of reveal season.
Might extract things like |
Shahrazad does appear to be working in DanDan mode.
Playtesting through the UI, I think I got to 4 sub-games deep, including resolving a sub-game, returning to the spawning game and then launching another sub-game. Update: Karn Liberated also works. |
Moved comment on mouse hover to PR #10263 and removed the extra simulation mode changes from this commit. The only simulation mode changes are not related to having the new game type of DanDan |
.m2repo/org/apache/maven/wagon/wagon-ftp/3.5.3/wagon-ftp-3.5.3.pom.lastUpdated
Outdated
Show resolved
Hide resolved
In CardProperty and SpellAbilityRestricion, the if statement check includes a call to GameRules.relaxesControllerOwnershipForCardProperties(cardZone). While this gets the ownership/control check in one place, it still leaves the giant IF statement in CardProperty. One thought is refactoring the IF statement to separate out the control/owernship properties with an enumset, so for that set, the check can just happen once. But that would break up the simplicity of having all the checks in one long IF. If other properties need to be grouped together that might make sense? |
You could keep the Eventually it'd be nice to break down that giant if-tree into something more performant, but that'll be a bigger refactoring someday. |
Summary
Implements Dandan as a game mode creating shared zones and match rules in the engine, plus Dandan-specific layout and zone/hand presentation in the desktop client.
Gameplay / rules engine
Library/Graveyardwiring; sideboarding is disabled for this mode where applicable (forge-game, e.g.Match,GameRules).forge-game, e.g.Player,GameAction).forge-game, e.g.CardProperty,SpellAbilityRestrictionrelated to card ownership and card controller rules).DanDanViewZonesexposes a single consistent card sequence for library/graveyard for UIs and tooling that consumeGameView(forge-game).UI / client
CMatchUI,ForgeConstants/MATCH_DANDAN_LAYOUT_FILE).Out of scope