(added content) |
m |
||
(2 intermediate revisions by one user not shown) | |||
Line 185: | Line 185: | ||
== English Explanation == | == English Explanation == | ||
− | <span style="color:orange;">Alan said: "Card effects take precedence over the game rules | + | <span style="color:orange;">Alan said: "Card effects take precedence over the game rules".<br /><br /> |
* This concept Alan said in english is the C# function<br /> `AttachCard(ShadowEraCard card, bool doCallbacks = true):`<div style="height: 10px;"></div> | * This concept Alan said in english is the C# function<br /> `AttachCard(ShadowEraCard card, bool doCallbacks = true):`<div style="height: 10px;"></div> | ||
Line 203: | Line 203: | ||
*# Traps have specific mechanics that are fundamental to their function: they are played facedown and ''only revealed when triggered''. There is no exception; if a Trap is revealed faceup in the graveyard it is because cards are placed faceup in the graveyard process; if a trap is returned to hand, nothing says in the returned to hand process that it should be revealed. | *# Traps have specific mechanics that are fundamental to their function: they are played facedown and ''only revealed when triggered''. There is no exception; if a Trap is revealed faceup in the graveyard it is because cards are placed faceup in the graveyard process; if a trap is returned to hand, nothing says in the returned to hand process that it should be revealed. | ||
*# The fact that Traps aren’t revealed during a '''Seek''' mechanism follows the logic of the game. The code appears to be structured to ensure this rule is confirmed by preventing the `ShowCardForPlayer()` function from being triggered for Traps. | *# The fact that Traps aren’t revealed during a '''Seek''' mechanism follows the logic of the game. The code appears to be structured to ensure this rule is confirmed by preventing the `ShowCardForPlayer()` function from being triggered for Traps. | ||
− | *# Functions like `PlayFaceDown()` and specific conditions in the code show that the developers have built these special rules for Traps, and they take effect before the standard rules apply. | + | *# Functions like `PlayFaceDown()` and specific conditions in the code show that the developers have built these special rules for Traps, and they take effect before the standard rules and the standard rules modified by other effects apply. |
*# Now, the following example code would essentially stop `PlayFaceDown()` from bypassing the reveal process for '''Seek'''ed cards. | *# Now, the following example code would essentially stop `PlayFaceDown()` from bypassing the reveal process for '''Seek'''ed cards. | ||
− | *# So, if the | + | *# So, if the developpers of the game wanted to modify the `PlayFaceDown()` behavior as not that explicitly stated in the rulebook, but as the players would like it to be, they would likely handle the situation easily. It would only require a global phase test. |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- |
|
|
---|---|
|
|
| |
| |
| |
This code is a collection of all the functions involved in the Seek mechanic, though it doesn't exist as a single block in any one file. | |
public override void OnUseAbility() { if (!isPartTwo) { if (!parent.IsDead()) { MoveToCastPosition(); GameModel.QueuePart2(parent); isPartTwo = true; } } else { isPartTwo = false; DoSeek(usedShadowEnergy: true); } // Handles the activation of the seek ability } public override bool CanUseAbility() { if (GameModel.isSimulating) { return false; } if (GameModel.DeckCount() == 0) { return false; } if (GameModel.HandCount() == GameModel.MaxHandSize()) { return false; } return true; // Checks if the seek ability can be used } public void StartTargetingForSeek() { ClearTargets(); MoveToCastPosition(); GameModel.UnhighlightCards(); GameModel.SetGameState(GameState.GameStateType.target); List<ShadowEraCard> abilityTargets = GetAbilityTargets(); for (int i = 0; i < GameModel.DeckCount(); i++) { ShadowEraCard deck = GameModel.GetDeck(i); if (abilityTargets.Contains(deck)) { GameModel.RemoveDeck(deck); i--; } } for (int j = 0; j < abilityTargets.Count; j++) { GameModel.AddDeck(abilityTargets[j]); } GameModel.HighlightCards(GetAbilityTargets()); DeckListDisplay.abilityCard = parent; DeckListDisplay.ShowDeck(GameModel.CurSide()); // Initiates the targeting process for the seek } public override List<ShadowEraCard> GetAbilityTargets() { List<ShadowEraCard> list = new List<ShadowEraCard>(); for (int i = 0; i < GameModel.DeckCount(); i++) { ShadowEraCard deck = GameModel.GetDeck(i); if (IsValidAbilityTarget(deck)) { list.Add(deck); } } return list; // Retrieves valid targets for the seek. } private static bool IsValidAbilityTarget(ShadowEraCard check) { return check.cardType == CardTypeEnum.Ally && check.cardSubType == CardSubTypeEnum.Aldmor; // Check valid targets for ll041's ability example. } public void DoSeek(bool usedShadowEnergy) { DeckListDisplay.CloseDeck(); if (targets.Count > 0 && GameModel.HandCount() < GameModel.MaxHandSize()) { GameModel.RemoveDeck(targets[0]); GameModel.ShowCardForPlayer(targets[0]); GameModel.AddHand(targets[0]); GameModel.OnSeek(targets[0]); } else { GameModel.OnSeek(null); } ShuffleOurDeck(); targets.Clear(); // Executes the seek action } public static void RemoveDeck(ShadowEraCard card) { // Code that handles removing a card from the deck } public static void ShowCardForPlayer(ShadowEraCard card) { if (!isSimulating && Gameplay.Instance != null) { Gameplay.Instance.UpdateHand(forceUpdate: true); Gameplay.Instance.ShowCard(card); Gameplay.Instance.BlockInput(2f); if (card.gameObject != null) { CoroutineManager.Start(_ShowCardForPlayer(card)); } } } public static void AddHand(ShadowEraCard card) { // Code that handles adding a card to the player's hand } public static void OnSeek(ShadowEraCard card) { // Handles additional effects or actions after the card is added to the hand } public void ShuffleOurDeck() { GameModel.ShuffleDeck(); // Shuffles the deck after the seek is completed } |
Alan said: "Card effects take precedence over the game rules".
|void PlayFaceDown(ShadowEraCard card, bool isSeeked) { if (isSeeked) { // Allow ShowCardForPlayer() to be invoked for Seeked cards ShowCardForPlayer(card); } else { // Keep the card face-down as usual (normal Trap behavior) KeepCardFaceDown(card); } } |