@gamepark/skyrift 0.4.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/CustomMoveType.d.ts +3 -1
  2. package/dist/CustomMoveType.js +2 -0
  3. package/dist/Deck.d.ts +2 -0
  4. package/dist/Deck.js +2 -0
  5. package/dist/Memory.d.ts +10 -9
  6. package/dist/Memory.js +10 -9
  7. package/dist/SkyriftRules.d.ts +20 -8
  8. package/dist/SkyriftRules.js +16 -4
  9. package/dist/SkyriftSetup.js +4 -0
  10. package/dist/material/Card.d.ts +32 -0
  11. package/dist/material/Card.js +32 -0
  12. package/dist/material/CardProperties.js +64 -0
  13. package/dist/material/CardRule.d.ts +9 -4
  14. package/dist/material/CardRule.js +70 -22
  15. package/dist/material/Effect.d.ts +2 -0
  16. package/dist/material/EffectTraits.d.ts +7 -2
  17. package/dist/material/OngoingEffect.d.ts +11 -2
  18. package/dist/material/OngoingEffect.js +7 -1
  19. package/dist/material/decks/BlackHive.d.ts +18 -0
  20. package/dist/material/decks/BlackHive.js +19 -0
  21. package/dist/material/decks/MoonDragon.d.ts +18 -0
  22. package/dist/material/decks/MoonDragon.js +19 -0
  23. package/dist/material/decks/blackhive/CarefulExcavation.d.ts +21 -0
  24. package/dist/material/decks/blackhive/CarefulExcavation.js +31 -0
  25. package/dist/material/decks/blackhive/CaveIn.d.ts +14 -0
  26. package/dist/material/decks/blackhive/CaveIn.js +18 -0
  27. package/dist/material/decks/blackhive/CaveInEffectRule.d.ts +10 -0
  28. package/dist/material/decks/blackhive/CaveInEffectRule.js +55 -0
  29. package/dist/material/decks/blackhive/CrystalMining.d.ts +15 -0
  30. package/dist/material/decks/blackhive/CrystalMining.js +22 -0
  31. package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.d.ts +4 -0
  32. package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.js +10 -0
  33. package/dist/material/decks/blackhive/CrystalShaft.d.ts +15 -0
  34. package/dist/material/decks/blackhive/CrystalShaft.js +18 -0
  35. package/dist/material/decks/blackhive/CycleKeeper.d.ts +13 -0
  36. package/dist/material/decks/blackhive/CycleKeeper.js +15 -0
  37. package/dist/material/decks/blackhive/CycleKeeperEffectRule.d.ts +8 -0
  38. package/dist/material/decks/blackhive/CycleKeeperEffectRule.js +21 -0
  39. package/dist/material/decks/blackhive/DariusAstraSmith.d.ts +13 -0
  40. package/dist/material/decks/blackhive/DariusAstraSmith.js +15 -0
  41. package/dist/material/decks/blackhive/DarkSwarm.d.ts +13 -0
  42. package/dist/material/decks/blackhive/DarkSwarm.js +15 -0
  43. package/dist/material/decks/blackhive/DarkSwarmEffectRule.d.ts +6 -0
  44. package/dist/material/decks/blackhive/DarkSwarmEffectRule.js +18 -0
  45. package/dist/material/decks/blackhive/ElevatorOfTheAbyss.d.ts +15 -0
  46. package/dist/material/decks/blackhive/ElevatorOfTheAbyss.js +19 -0
  47. package/dist/material/decks/blackhive/ExplosiveKitty.d.ts +16 -0
  48. package/dist/material/decks/blackhive/ExplosiveKitty.js +19 -0
  49. package/dist/material/decks/blackhive/GromIronspike.d.ts +13 -0
  50. package/dist/material/decks/blackhive/GromIronspike.js +18 -0
  51. package/dist/material/decks/blackhive/GuntarRustypike.d.ts +20 -0
  52. package/dist/material/decks/blackhive/GuntarRustypike.js +28 -0
  53. package/dist/material/decks/blackhive/HiveMother.d.ts +13 -0
  54. package/dist/material/decks/blackhive/HiveMother.js +18 -0
  55. package/dist/material/decks/blackhive/LotharBlackclaw.d.ts +13 -0
  56. package/dist/material/decks/blackhive/LotharBlackclaw.js +22 -0
  57. package/dist/material/decks/blackhive/LotharBlackclawEffectRule.d.ts +4 -0
  58. package/dist/material/decks/blackhive/LotharBlackclawEffectRule.js +20 -0
  59. package/dist/material/decks/blackhive/OlgaStonecrusher.d.ts +13 -0
  60. package/dist/material/decks/blackhive/OlgaStonecrusher.js +15 -0
  61. package/dist/material/decks/blackhive/ShadowDealer.d.ts +15 -0
  62. package/dist/material/decks/blackhive/ShadowDealer.js +22 -0
  63. package/dist/material/decks/blackhive/UndergroundScourge.d.ts +13 -0
  64. package/dist/material/decks/blackhive/UndergroundScourge.js +15 -0
  65. package/dist/material/decks/gravehurt/CavernSkulker.d.ts +4 -1
  66. package/dist/material/decks/gravehurt/CavernSkulker.js +18 -5
  67. package/dist/material/decks/gravehurt/CavernSkulkerEffectRule.js +1 -1
  68. package/dist/material/decks/gravehurt/Doom.d.ts +5 -1
  69. package/dist/material/decks/gravehurt/Doom.js +16 -2
  70. package/dist/material/decks/gravehurt/Nosferatis.d.ts +2 -2
  71. package/dist/material/decks/gravehurt/Nosferatis.js +2 -2
  72. package/dist/material/decks/gravehurt/TheGreatToady.d.ts +2 -2
  73. package/dist/material/decks/gravehurt/TheGreatToady.js +2 -2
  74. package/dist/material/decks/gravehurt/Umbraboros.d.ts +1 -1
  75. package/dist/material/decks/gravehurt/Umbraboros.js +4 -3
  76. package/dist/material/decks/gravehurt/WitchingHour.d.ts +3 -3
  77. package/dist/material/decks/gravehurt/WitchingHour.js +3 -3
  78. package/dist/material/decks/heathblade/Armada.js +1 -1
  79. package/dist/material/decks/heathblade/HedgeKnight.d.ts +1 -1
  80. package/dist/material/decks/heathblade/HedgeKnight.js +3 -4
  81. package/dist/material/decks/heathblade/PrincessLithaEffectRule.d.ts +2 -1
  82. package/dist/material/decks/highwave/EyeOfSky.d.ts +1 -1
  83. package/dist/material/decks/highwave/EyeOfSky.js +2 -2
  84. package/dist/material/decks/moondragon/AkiraClearink.d.ts +13 -0
  85. package/dist/material/decks/moondragon/AkiraClearink.js +15 -0
  86. package/dist/material/decks/moondragon/AzureDragonsPeace.d.ts +13 -0
  87. package/dist/material/decks/moondragon/AzureDragonsPeace.js +18 -0
  88. package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.d.ts +10 -0
  89. package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.js +49 -0
  90. package/dist/material/decks/moondragon/CopyPlayEffectRule.d.ts +6 -0
  91. package/dist/material/decks/moondragon/CopyPlayEffectRule.js +33 -0
  92. package/dist/material/decks/moondragon/DartYusagi.d.ts +14 -0
  93. package/dist/material/decks/moondragon/DartYusagi.js +26 -0
  94. package/dist/material/decks/moondragon/DuelOfHonor.d.ts +19 -0
  95. package/dist/material/decks/moondragon/DuelOfHonor.js +35 -0
  96. package/dist/material/decks/moondragon/Embush.d.ts +17 -0
  97. package/dist/material/decks/moondragon/Embush.js +26 -0
  98. package/dist/material/decks/moondragon/EmbushEffectRule.d.ts +7 -0
  99. package/dist/material/decks/moondragon/EmbushEffectRule.js +26 -0
  100. package/dist/material/decks/moondragon/EmpressSama.d.ts +13 -0
  101. package/dist/material/decks/moondragon/EmpressSama.js +15 -0
  102. package/dist/material/decks/moondragon/EmpressSamaEffectRule.d.ts +7 -0
  103. package/dist/material/decks/moondragon/EmpressSamaEffectRule.js +29 -0
  104. package/dist/material/decks/moondragon/GardenProtector.d.ts +15 -0
  105. package/dist/material/decks/moondragon/GardenProtector.js +18 -0
  106. package/dist/material/decks/moondragon/ImperialBlade.d.ts +16 -0
  107. package/dist/material/decks/moondragon/ImperialBlade.js +19 -0
  108. package/dist/material/decks/moondragon/LotusMuse.d.ts +17 -0
  109. package/dist/material/decks/moondragon/LotusMuse.js +34 -0
  110. package/dist/material/decks/moondragon/LotusMuseEffectRule.d.ts +6 -0
  111. package/dist/material/decks/moondragon/LotusMuseEffectRule.js +24 -0
  112. package/dist/material/decks/moondragon/PortalOfTheAncestors.d.ts +16 -0
  113. package/dist/material/decks/moondragon/PortalOfTheAncestors.js +21 -0
  114. package/dist/material/decks/moondragon/RiteOfTastes.d.ts +15 -0
  115. package/dist/material/decks/moondragon/RiteOfTastes.js +18 -0
  116. package/dist/material/decks/moondragon/RoosterDance.d.ts +16 -0
  117. package/dist/material/decks/moondragon/RoosterDance.js +19 -0
  118. package/dist/material/decks/moondragon/ShardsAlchimist.d.ts +16 -0
  119. package/dist/material/decks/moondragon/ShardsAlchimist.js +22 -0
  120. package/dist/material/decks/moondragon/SpiritOracle.d.ts +16 -0
  121. package/dist/material/decks/moondragon/SpiritOracle.js +27 -0
  122. package/dist/material/decks/moondragon/SteppesColossus.d.ts +13 -0
  123. package/dist/material/decks/moondragon/SteppesColossus.js +15 -0
  124. package/dist/material/decks/moondragon/YoruNightink.d.ts +13 -0
  125. package/dist/material/decks/moondragon/YoruNightink.js +18 -0
  126. package/dist/material/decks/windsands/AbiSnakeCharmer.d.ts +4 -1
  127. package/dist/material/decks/windsands/AbiSnakeCharmer.js +14 -1
  128. package/dist/material/decks/windsands/DeathTrap.d.ts +2 -0
  129. package/dist/material/decks/windsands/DeathTrap.js +4 -0
  130. package/dist/material/decks/windsands/MalikShadowtracker.d.ts +3 -3
  131. package/dist/material/decks/windsands/MalikShadowtracker.js +4 -4
  132. package/dist/material/decks/windsands/OasisShaman.d.ts +3 -1
  133. package/dist/material/decks/windsands/OasisShaman.js +3 -0
  134. package/dist/rules/ChallengeEffectRule.d.ts +2 -1
  135. package/dist/rules/ChallengeResponseRule.d.ts +2 -1
  136. package/dist/rules/DiscardEffectRule.js +1 -1
  137. package/dist/rules/DrawEffectRule.js +1 -1
  138. package/dist/rules/EffectRule.js +7 -1
  139. package/dist/rules/EffectsHelper.d.ts +6 -0
  140. package/dist/rules/EffectsHelper.js +15 -0
  141. package/dist/rules/EndPlayerTurnRule.d.ts +2 -1
  142. package/dist/rules/EndPlayerTurnRule.js +3 -0
  143. package/dist/rules/EndRoundRule.d.ts +1 -1
  144. package/dist/rules/GainCrystalEffectRule.js +1 -1
  145. package/dist/rules/MulliganEffectRule.d.ts +2 -1
  146. package/dist/rules/MulliganEffectRule.js +15 -4
  147. package/dist/rules/PlayCardEffectRule.d.ts +1 -0
  148. package/dist/rules/PlayCardEffectRule.js +9 -2
  149. package/dist/rules/PlayCardRule.d.ts +0 -1
  150. package/dist/rules/PlayCardRule.js +1 -4
  151. package/dist/rules/PlayerHelper.d.ts +2 -1
  152. package/dist/rules/PlayerHelper.js +24 -17
  153. package/dist/rules/PrepareNextRoundRule.d.ts +5 -1
  154. package/dist/rules/PrepareNextRoundRule.js +4 -2
  155. package/dist/rules/RuleId.d.ts +8 -2
  156. package/dist/rules/RuleId.js +8 -2
  157. package/dist/rules/SimultaneousEffectRule.d.ts +5 -0
  158. package/dist/rules/SimultaneousEffectRule.js +14 -0
  159. package/dist/rules/StartPlayerTurnRule.js +20 -2
  160. package/dist/rules/StashPowerTokensEffectRule.js +1 -1
  161. package/dist/rules/StealCrystalEffectRule.js +2 -2
  162. package/dist/rules/SwitchSideEffectRule.d.ts +3 -5
  163. package/dist/rules/SwitchSideEffectRule.js +2 -6
  164. package/package.json +3 -3
@@ -5,5 +5,7 @@ export declare enum CustomMoveType {
5
5
  EndEffect = 4,
6
6
  Pass = 5,
7
7
  Challenge = 6,
8
- ActivateCard = 7
8
+ ActivateCard = 7,
9
+ ChooseSuit = 8,
10
+ ChooseCard = 9
9
11
  }
@@ -7,4 +7,6 @@ export var CustomMoveType;
7
7
  CustomMoveType[CustomMoveType["Pass"] = 5] = "Pass";
8
8
  CustomMoveType[CustomMoveType["Challenge"] = 6] = "Challenge";
9
9
  CustomMoveType[CustomMoveType["ActivateCard"] = 7] = "ActivateCard";
10
+ CustomMoveType[CustomMoveType["ChooseSuit"] = 8] = "ChooseSuit";
11
+ CustomMoveType[CustomMoveType["ChooseCard"] = 9] = "ChooseCard";
10
12
  })(CustomMoveType || (CustomMoveType = {}));
package/dist/Deck.d.ts CHANGED
@@ -2,5 +2,7 @@ export declare enum Deck {
2
2
  HearthBlade = 1,
3
3
  WindSands = 2,
4
4
  GraveHurt = 3,
5
+ BlackHive = 4,
6
+ MoonDragon = 5,
5
7
  HighWave = 6
6
8
  }
package/dist/Deck.js CHANGED
@@ -3,5 +3,7 @@ export var Deck;
3
3
  Deck[Deck["HearthBlade"] = 1] = "HearthBlade";
4
4
  Deck[Deck["WindSands"] = 2] = "WindSands";
5
5
  Deck[Deck["GraveHurt"] = 3] = "GraveHurt";
6
+ Deck[Deck["BlackHive"] = 4] = "BlackHive";
7
+ Deck[Deck["MoonDragon"] = 5] = "MoonDragon";
6
8
  Deck[Deck["HighWave"] = 6] = "HighWave";
7
9
  })(Deck || (Deck = {}));
package/dist/Memory.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  export declare enum Memory {
2
2
  CrystalsToWin = 1,
3
- CardsPlayed = 2,
4
- Suit = 3,
5
- PendingEffects = 4,
6
- ActivatedCards = 5,
7
- CurrentPlayer = 6,
8
- NextRoundStartPlayer = 7,
9
- EffectCount = 8,
10
- ChallengeConceded = 9,
11
- OngoingEffects = 10
3
+ CurrentPlayer = 2,
4
+ CardsPlayed = 3,
5
+ Suit = 4,
6
+ PendingEffects = 5,
7
+ OngoingEffects = 6,
8
+ ActivatedCards = 7,
9
+ ChallengeConceded = 8,
10
+ EffectCount = 9,
11
+ EffectTargets = 10,
12
+ NextRoundStartPlayer = 11
12
13
  }
package/dist/Memory.js CHANGED
@@ -1,13 +1,14 @@
1
1
  export var Memory;
2
2
  (function (Memory) {
3
3
  Memory[Memory["CrystalsToWin"] = 1] = "CrystalsToWin";
4
- Memory[Memory["CardsPlayed"] = 2] = "CardsPlayed";
5
- Memory[Memory["Suit"] = 3] = "Suit";
6
- Memory[Memory["PendingEffects"] = 4] = "PendingEffects";
7
- Memory[Memory["ActivatedCards"] = 5] = "ActivatedCards";
8
- Memory[Memory["CurrentPlayer"] = 6] = "CurrentPlayer";
9
- Memory[Memory["NextRoundStartPlayer"] = 7] = "NextRoundStartPlayer";
10
- Memory[Memory["EffectCount"] = 8] = "EffectCount";
11
- Memory[Memory["ChallengeConceded"] = 9] = "ChallengeConceded";
12
- Memory[Memory["OngoingEffects"] = 10] = "OngoingEffects";
4
+ Memory[Memory["CurrentPlayer"] = 2] = "CurrentPlayer";
5
+ Memory[Memory["CardsPlayed"] = 3] = "CardsPlayed";
6
+ Memory[Memory["Suit"] = 4] = "Suit";
7
+ Memory[Memory["PendingEffects"] = 5] = "PendingEffects";
8
+ Memory[Memory["OngoingEffects"] = 6] = "OngoingEffects";
9
+ Memory[Memory["ActivatedCards"] = 7] = "ActivatedCards";
10
+ Memory[Memory["ChallengeConceded"] = 8] = "ChallengeConceded";
11
+ Memory[Memory["EffectCount"] = 9] = "EffectCount";
12
+ Memory[Memory["EffectTargets"] = 10] = "EffectTargets";
13
+ Memory[Memory["NextRoundStartPlayer"] = 11] = "NextRoundStartPlayer";
13
14
  })(Memory || (Memory = {}));
@@ -2,11 +2,15 @@ import { CustomMove, ItemMove, MaterialGame, MaterialMove, MaterialMoveRandomize
2
2
  import { Deck } from './Deck';
3
3
  import { CavernSkulkerEffectRule } from './material/decks/gravehurt/CavernSkulkerEffectRule';
4
4
  import { DoomEffectRule } from './material/decks/gravehurt/DoomEffectRule';
5
- import { ArmadaEffectRule } from './material/decks/heathblade/ArmadaEffectRule';
6
5
  import { PrincessLithaEffectRule } from './material/decks/heathblade/PrincessLithaEffectRule';
7
6
  import { BoardingPartyEffectRule } from './material/decks/highwave/BoardingPartyEffectRule';
8
7
  import { EyeOfSkyEffectRule } from './material/decks/highwave/EyeOfSkyEffectRule';
9
- import { AbiSnakeCharmerEffectRule } from './material/decks/windsands/AbiSnakeCharmerEffectRule';
8
+ import { CaveInEffectRule } from './material/decks/blackhive/CaveInEffectRule';
9
+ import { CycleKeeperEffectRule } from './material/decks/blackhive/CycleKeeperEffectRule';
10
+ import { CopyPlayEffectRule } from './material/decks/moondragon/CopyPlayEffectRule';
11
+ import { EmpressSamaEffectRule } from './material/decks/moondragon/EmpressSamaEffectRule';
12
+ import { LotusMuseEffectRule } from './material/decks/moondragon/LotusMuseEffectRule';
13
+ import { AzureDragonsPeaceEffectRule } from './material/decks/moondragon/AzureDragonsPeaceEffectRule';
10
14
  import { WindWrathEffectRule } from './material/decks/windsands/WindWrathEffectRule';
11
15
  import { LocationType } from './material/LocationType';
12
16
  import { MaterialType } from './material/MaterialType';
@@ -27,7 +31,9 @@ import { StartPlayerTurnRule } from './rules/StartPlayerTurnRule';
27
31
  import { StartRoundRule } from './rules/StartRoundRule';
28
32
  import { StashPowerTokensEffectRule } from './rules/StashPowerTokensEffectRule';
29
33
  import { StealCrystalEffectRule } from './rules/StealCrystalEffectRule';
34
+ import { MulliganEffectRule } from './rules/MulliganEffectRule';
30
35
  import { StunEffectRule } from './rules/StunEffectRule';
36
+ import { SwitchSideEffectRule } from './rules/SwitchSideEffectRule';
31
37
  export declare class SkyriftRules extends SecretMaterialRules<Deck, MaterialType, LocationType> implements TimeLimit<MaterialGame<Deck, MaterialType, LocationType>, MaterialMove<Deck, MaterialType, LocationType>, Deck> {
32
38
  rules: {
33
39
  1: typeof StartRoundRule;
@@ -47,13 +53,19 @@ export declare class SkyriftRules extends SecretMaterialRules<Deck, MaterialType
47
53
  28: typeof StashPowerTokensEffectRule;
48
54
  29: typeof GainCrystalEffectRule;
49
55
  30: typeof StealCrystalEffectRule;
50
- 204: typeof AbiSnakeCharmerEffectRule;
51
56
  31: typeof PlayCardEffectRule;
52
- 110: typeof ArmadaEffectRule;
57
+ 32: typeof MulliganEffectRule;
58
+ 33: typeof SwitchSideEffectRule;
53
59
  103: typeof PrincessLithaEffectRule;
54
60
  215: typeof WindWrathEffectRule;
55
61
  302: typeof CavernSkulkerEffectRule;
56
62
  315: typeof DoomEffectRule;
63
+ 409: typeof CycleKeeperEffectRule;
64
+ 413: typeof CaveInEffectRule;
65
+ 503: typeof CopyPlayEffectRule;
66
+ 509: typeof EmpressSamaEffectRule;
67
+ 510: typeof LotusMuseEffectRule;
68
+ 513: typeof AzureDragonsPeaceEffectRule;
57
69
  603: typeof EyeOfSkyEffectRule;
58
70
  614: typeof BoardingPartyEffectRule;
59
71
  };
@@ -73,10 +85,10 @@ export declare class SkyriftRules extends SecretMaterialRules<Deck, MaterialType
73
85
  14: import("@gamepark/rules-api").HidingStrategy<number, number>;
74
86
  };
75
87
  };
76
- play(move: MaterialMoveRandomized<Deck, MaterialType, LocationType> | MaterialMoveView<Deck, MaterialType, LocationType>, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number>[];
77
- protected beforeItemMove(move: ItemMove): MaterialMove<Deck, MaterialType, LocationType, number>[];
78
- protected afterItemMove(move: ItemMove, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number>[];
79
- protected onCustomMove(move: CustomMove, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number>[];
88
+ play(move: MaterialMoveRandomized<Deck, MaterialType, LocationType> | MaterialMoveView<Deck, MaterialType, LocationType>, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number, number>[];
89
+ protected beforeItemMove(move: ItemMove): MaterialMove<Deck, MaterialType, LocationType, number, number>[];
90
+ protected afterItemMove(move: ItemMove, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number, number>[];
91
+ protected onCustomMove(move: CustomMove, context?: PlayMoveContext): MaterialMove<Deck, MaterialType, LocationType, number, number>[];
80
92
  isUnpredictableMove(move: MaterialMove<Deck, MaterialType, LocationType>, player: Deck): boolean;
81
93
  giveTime(): number;
82
94
  }
@@ -3,11 +3,15 @@ import { CustomMoveType } from './CustomMoveType';
3
3
  import { createCardRule } from './material/createCardRule';
4
4
  import { CavernSkulkerEffectRule } from './material/decks/gravehurt/CavernSkulkerEffectRule';
5
5
  import { DoomEffectRule } from './material/decks/gravehurt/DoomEffectRule';
6
- import { ArmadaEffectRule } from './material/decks/heathblade/ArmadaEffectRule';
7
6
  import { PrincessLithaEffectRule } from './material/decks/heathblade/PrincessLithaEffectRule';
8
7
  import { BoardingPartyEffectRule } from './material/decks/highwave/BoardingPartyEffectRule';
9
8
  import { EyeOfSkyEffectRule } from './material/decks/highwave/EyeOfSkyEffectRule';
10
- import { AbiSnakeCharmerEffectRule } from './material/decks/windsands/AbiSnakeCharmerEffectRule';
9
+ import { CaveInEffectRule } from './material/decks/blackhive/CaveInEffectRule';
10
+ import { CycleKeeperEffectRule } from './material/decks/blackhive/CycleKeeperEffectRule';
11
+ import { CopyPlayEffectRule } from './material/decks/moondragon/CopyPlayEffectRule';
12
+ import { EmpressSamaEffectRule } from './material/decks/moondragon/EmpressSamaEffectRule';
13
+ import { LotusMuseEffectRule } from './material/decks/moondragon/LotusMuseEffectRule';
14
+ import { AzureDragonsPeaceEffectRule } from './material/decks/moondragon/AzureDragonsPeaceEffectRule';
11
15
  import { WindWrathEffectRule } from './material/decks/windsands/WindWrathEffectRule';
12
16
  import { LocationType } from './material/LocationType';
13
17
  import { MaterialType } from './material/MaterialType';
@@ -30,7 +34,9 @@ import { StartPlayerTurnRule } from './rules/StartPlayerTurnRule';
30
34
  import { StartRoundRule } from './rules/StartRoundRule';
31
35
  import { StashPowerTokensEffectRule } from './rules/StashPowerTokensEffectRule';
32
36
  import { StealCrystalEffectRule } from './rules/StealCrystalEffectRule';
37
+ import { MulliganEffectRule } from './rules/MulliganEffectRule';
33
38
  import { StunEffectRule } from './rules/StunEffectRule';
39
+ import { SwitchSideEffectRule } from './rules/SwitchSideEffectRule';
34
40
  export class SkyriftRules extends SecretMaterialRules {
35
41
  rules = {
36
42
  [RuleId.StartRound]: StartRoundRule,
@@ -50,13 +56,19 @@ export class SkyriftRules extends SecretMaterialRules {
50
56
  [RuleId.StashPowerTokensEffect]: StashPowerTokensEffectRule,
51
57
  [RuleId.GainCrystalEffect]: GainCrystalEffectRule,
52
58
  [RuleId.StealCrystalEffect]: StealCrystalEffectRule,
53
- [RuleId.AbiSnakeCharmerEffect]: AbiSnakeCharmerEffectRule,
54
59
  [RuleId.PlayCardEffect]: PlayCardEffectRule,
55
- [RuleId.ArmadaEffect]: ArmadaEffectRule,
60
+ [RuleId.MulliganEffect]: MulliganEffectRule,
61
+ [RuleId.SwitchSideEffect]: SwitchSideEffectRule,
56
62
  [RuleId.PrincessLithaEffect]: PrincessLithaEffectRule,
57
63
  [RuleId.WindWrathEffect]: WindWrathEffectRule,
58
64
  [RuleId.CavernSkulkerEffect]: CavernSkulkerEffectRule,
59
65
  [RuleId.DoomEffect]: DoomEffectRule,
66
+ [RuleId.CycleKeeperEffect]: CycleKeeperEffectRule,
67
+ [RuleId.CaveInEffect]: CaveInEffectRule,
68
+ [RuleId.CopyPlayEffect]: CopyPlayEffectRule,
69
+ [RuleId.EmpressSamaEffect]: EmpressSamaEffectRule,
70
+ [RuleId.LotusMuseEffect]: LotusMuseEffectRule,
71
+ [RuleId.AzureDragonsPeaceEffect]: AzureDragonsPeaceEffectRule,
60
72
  [RuleId.EyeOfSkyEffect]: EyeOfSkyEffectRule,
61
73
  [RuleId.BoardingPartyEffect]: BoardingPartyEffectRule
62
74
  };
@@ -1,8 +1,10 @@
1
1
  import { listingToList, MaterialGameSetup } from '@gamepark/rules-api';
2
2
  import { shuffle } from 'es-toolkit';
3
3
  import { Deck } from './Deck';
4
+ import { BlackHive } from './material/decks/BlackHive';
4
5
  import { GraveHurt } from './material/decks/GraveHurt';
5
6
  import { HearthBlade } from './material/decks/HearthBlade';
7
+ import { MoonDragon } from './material/decks/MoonDragon';
6
8
  import { HighWave } from './material/decks/HighWave';
7
9
  import { WindSands } from './material/decks/WindSands';
8
10
  import { LocationType } from './material/LocationType';
@@ -14,6 +16,8 @@ const deckConfigurations = {
14
16
  [Deck.HearthBlade]: HearthBlade,
15
17
  [Deck.WindSands]: WindSands,
16
18
  [Deck.GraveHurt]: GraveHurt,
19
+ [Deck.BlackHive]: BlackHive,
20
+ [Deck.MoonDragon]: MoonDragon,
17
21
  [Deck.HighWave]: HighWave
18
22
  };
19
23
  export class SkyriftSetup extends MaterialGameSetup {
@@ -48,6 +48,38 @@ export declare enum Card {
48
48
  WitchingHour = 314,
49
49
  Doom = 315,
50
50
  AstralHammer = 316,
51
+ UndergroundScourge = 401,
52
+ ShadowDealer = 402,
53
+ DariusAstraSmith = 403,
54
+ GuntarRustypike = 404,
55
+ DarkSwarm = 405,
56
+ HiveMother = 406,
57
+ GromIronspike = 407,
58
+ OlgaStonecrusher = 408,
59
+ CycleKeeper = 409,
60
+ LotharBlackclaw = 410,
61
+ ElevatorOfTheAbyss = 411,
62
+ CrystalMining = 412,
63
+ CaveIn = 413,
64
+ CrystalShaft = 414,
65
+ ExplosiveKitty = 415,
66
+ CarefulExcavation = 416,
67
+ GardenProtector = 501,
68
+ ImperialBlade = 502,
69
+ AkiraClearink = 503,
70
+ DartYusagi = 504,
71
+ SteppesColossus = 505,
72
+ ShardsAlchimist = 506,
73
+ SpiritOracle = 507,
74
+ YoruNightink = 508,
75
+ EmpressSama = 509,
76
+ LotusMuse = 510,
77
+ RoosterDance = 511,
78
+ RiteOfTastes = 512,
79
+ AzureDragonsPeace = 513,
80
+ Embush = 514,
81
+ DuelOfHonor = 515,
82
+ PortalOfTheAncestors = 516,
51
83
  SeaScorcher = 601,
52
84
  AeliaSteadyHand = 602,
53
85
  EyeOfSky = 603,
@@ -48,6 +48,38 @@ export var Card;
48
48
  Card[Card["WitchingHour"] = 314] = "WitchingHour";
49
49
  Card[Card["Doom"] = 315] = "Doom";
50
50
  Card[Card["AstralHammer"] = 316] = "AstralHammer";
51
+ Card[Card["UndergroundScourge"] = 401] = "UndergroundScourge";
52
+ Card[Card["ShadowDealer"] = 402] = "ShadowDealer";
53
+ Card[Card["DariusAstraSmith"] = 403] = "DariusAstraSmith";
54
+ Card[Card["GuntarRustypike"] = 404] = "GuntarRustypike";
55
+ Card[Card["DarkSwarm"] = 405] = "DarkSwarm";
56
+ Card[Card["HiveMother"] = 406] = "HiveMother";
57
+ Card[Card["GromIronspike"] = 407] = "GromIronspike";
58
+ Card[Card["OlgaStonecrusher"] = 408] = "OlgaStonecrusher";
59
+ Card[Card["CycleKeeper"] = 409] = "CycleKeeper";
60
+ Card[Card["LotharBlackclaw"] = 410] = "LotharBlackclaw";
61
+ Card[Card["ElevatorOfTheAbyss"] = 411] = "ElevatorOfTheAbyss";
62
+ Card[Card["CrystalMining"] = 412] = "CrystalMining";
63
+ Card[Card["CaveIn"] = 413] = "CaveIn";
64
+ Card[Card["CrystalShaft"] = 414] = "CrystalShaft";
65
+ Card[Card["ExplosiveKitty"] = 415] = "ExplosiveKitty";
66
+ Card[Card["CarefulExcavation"] = 416] = "CarefulExcavation";
67
+ Card[Card["GardenProtector"] = 501] = "GardenProtector";
68
+ Card[Card["ImperialBlade"] = 502] = "ImperialBlade";
69
+ Card[Card["AkiraClearink"] = 503] = "AkiraClearink";
70
+ Card[Card["DartYusagi"] = 504] = "DartYusagi";
71
+ Card[Card["SteppesColossus"] = 505] = "SteppesColossus";
72
+ Card[Card["ShardsAlchimist"] = 506] = "ShardsAlchimist";
73
+ Card[Card["SpiritOracle"] = 507] = "SpiritOracle";
74
+ Card[Card["YoruNightink"] = 508] = "YoruNightink";
75
+ Card[Card["EmpressSama"] = 509] = "EmpressSama";
76
+ Card[Card["LotusMuse"] = 510] = "LotusMuse";
77
+ Card[Card["RoosterDance"] = 511] = "RoosterDance";
78
+ Card[Card["RiteOfTastes"] = 512] = "RiteOfTastes";
79
+ Card[Card["AzureDragonsPeace"] = 513] = "AzureDragonsPeace";
80
+ Card[Card["Embush"] = 514] = "Embush";
81
+ Card[Card["DuelOfHonor"] = 515] = "DuelOfHonor";
82
+ Card[Card["PortalOfTheAncestors"] = 516] = "PortalOfTheAncestors";
51
83
  Card[Card["SeaScorcher"] = 601] = "SeaScorcher";
52
84
  Card[Card["AeliaSteadyHand"] = 602] = "AeliaSteadyHand";
53
85
  Card[Card["EyeOfSky"] = 603] = "EyeOfSky";
@@ -63,6 +63,38 @@ import { Shadowbolt } from './decks/heathblade/Shadowbolt';
63
63
  import { SoulBlade } from './decks/heathblade/SoulBlade';
64
64
  import { WatchTower } from './decks/heathblade/WatchTower';
65
65
  import { WoodSlinger } from './decks/heathblade/WoodSlinger';
66
+ import { GardenProtector } from './decks/moondragon/GardenProtector';
67
+ import { ImperialBlade } from './decks/moondragon/ImperialBlade';
68
+ import { AkiraClearink } from './decks/moondragon/AkiraClearink';
69
+ import { DartYusagi } from './decks/moondragon/DartYusagi';
70
+ import { SteppesColossus } from './decks/moondragon/SteppesColossus';
71
+ import { ShardsAlchimist } from './decks/moondragon/ShardsAlchimist';
72
+ import { SpiritOracle } from './decks/moondragon/SpiritOracle';
73
+ import { YoruNightink } from './decks/moondragon/YoruNightink';
74
+ import { EmpressSama } from './decks/moondragon/EmpressSama';
75
+ import { LotusMuse } from './decks/moondragon/LotusMuse';
76
+ import { RoosterDance } from './decks/moondragon/RoosterDance';
77
+ import { RiteOfTastes } from './decks/moondragon/RiteOfTastes';
78
+ import { AzureDragonsPeace } from './decks/moondragon/AzureDragonsPeace';
79
+ import { Embush } from './decks/moondragon/Embush';
80
+ import { DuelOfHonor } from './decks/moondragon/DuelOfHonor';
81
+ import { PortalOfTheAncestors } from './decks/moondragon/PortalOfTheAncestors';
82
+ import { UndergroundScourge } from './decks/blackhive/UndergroundScourge';
83
+ import { ShadowDealer } from './decks/blackhive/ShadowDealer';
84
+ import { DariusAstraSmith } from './decks/blackhive/DariusAstraSmith';
85
+ import { GuntarRustypike } from './decks/blackhive/GuntarRustypike';
86
+ import { DarkSwarm } from './decks/blackhive/DarkSwarm';
87
+ import { HiveMother } from './decks/blackhive/HiveMother';
88
+ import { GromIronspike } from './decks/blackhive/GromIronspike';
89
+ import { OlgaStonecrusher } from './decks/blackhive/OlgaStonecrusher';
90
+ import { CycleKeeper } from './decks/blackhive/CycleKeeper';
91
+ import { LotharBlackclaw } from './decks/blackhive/LotharBlackclaw';
92
+ import { ElevatorOfTheAbyss } from './decks/blackhive/ElevatorOfTheAbyss';
93
+ import { CrystalMining } from './decks/blackhive/CrystalMining';
94
+ import { CaveIn } from './decks/blackhive/CaveIn';
95
+ import { CrystalShaft } from './decks/blackhive/CrystalShaft';
96
+ import { ExplosiveKitty } from './decks/blackhive/ExplosiveKitty';
97
+ import { CarefulExcavation } from './decks/blackhive/CarefulExcavation';
66
98
  export const cardProperties = {
67
99
  [Card.HedgeKnight]: HedgeKnight,
68
100
  [Card.LoyalSquire]: LoyalSquire,
@@ -112,6 +144,38 @@ export const cardProperties = {
112
144
  [Card.WitchingHour]: WitchingHour,
113
145
  [Card.Doom]: Doom,
114
146
  [Card.AstralHammer]: AstralHammer,
147
+ [Card.UndergroundScourge]: UndergroundScourge,
148
+ [Card.ShadowDealer]: ShadowDealer,
149
+ [Card.DariusAstraSmith]: DariusAstraSmith,
150
+ [Card.GuntarRustypike]: GuntarRustypike,
151
+ [Card.DarkSwarm]: DarkSwarm,
152
+ [Card.HiveMother]: HiveMother,
153
+ [Card.GromIronspike]: GromIronspike,
154
+ [Card.OlgaStonecrusher]: OlgaStonecrusher,
155
+ [Card.CycleKeeper]: CycleKeeper,
156
+ [Card.LotharBlackclaw]: LotharBlackclaw,
157
+ [Card.ElevatorOfTheAbyss]: ElevatorOfTheAbyss,
158
+ [Card.CrystalMining]: CrystalMining,
159
+ [Card.CaveIn]: CaveIn,
160
+ [Card.CrystalShaft]: CrystalShaft,
161
+ [Card.ExplosiveKitty]: ExplosiveKitty,
162
+ [Card.CarefulExcavation]: CarefulExcavation,
163
+ [Card.GardenProtector]: GardenProtector,
164
+ [Card.ImperialBlade]: ImperialBlade,
165
+ [Card.AkiraClearink]: AkiraClearink,
166
+ [Card.DartYusagi]: DartYusagi,
167
+ [Card.SteppesColossus]: SteppesColossus,
168
+ [Card.ShardsAlchimist]: ShardsAlchimist,
169
+ [Card.SpiritOracle]: SpiritOracle,
170
+ [Card.YoruNightink]: YoruNightink,
171
+ [Card.EmpressSama]: EmpressSama,
172
+ [Card.LotusMuse]: LotusMuse,
173
+ [Card.RoosterDance]: RoosterDance,
174
+ [Card.RiteOfTastes]: RiteOfTastes,
175
+ [Card.AzureDragonsPeace]: AzureDragonsPeace,
176
+ [Card.Embush]: Embush,
177
+ [Card.DuelOfHonor]: DuelOfHonor,
178
+ [Card.PortalOfTheAncestors]: PortalOfTheAncestors,
115
179
  [Card.SeaScorcher]: SeaScorcher,
116
180
  [Card.AeliaSteadyHand]: AeliaSteadyHand,
117
181
  [Card.EyeOfSky]: EyeOfSky,
@@ -2,7 +2,7 @@ import { MaterialGame, MaterialMove, MaterialRulesPart } from '@gamepark/rules-a
2
2
  import { Deck } from '../Deck';
3
3
  import { Card, CardId } from './Card';
4
4
  import { Effect } from './Effect';
5
- import { OngoingEffectType } from './OngoingEffect';
5
+ import { OngoingEffect, OngoingEffectType } from './OngoingEffect';
6
6
  export declare class CardRule extends MaterialRulesPart {
7
7
  index: number;
8
8
  constructor(game: MaterialGame, index: number);
@@ -14,7 +14,7 @@ export declare class CardRule extends MaterialRulesPart {
14
14
  onSkirmishEnd?(): void;
15
15
  onSkirmishWin?(): void;
16
16
  onSkirmishLost?(): void;
17
- survivesSkirmish?(): boolean;
17
+ isNeutralized(): boolean;
18
18
  canActivate(): boolean;
19
19
  onLeaves(): MaterialMove[];
20
20
  removePowerTokens(): MaterialMove[];
@@ -23,18 +23,23 @@ export declare class CardRule extends MaterialRulesPart {
23
23
  get item(): import("@gamepark/rules-api").MaterialItem<number, number, CardId>;
24
24
  get card(): Card;
25
25
  get properties(): import("./CardProperties").CardProperties;
26
+ get powerTokens(): import("@gamepark/rules-api").Material<number, number, number>;
27
+ get stunTokens(): import("@gamepark/rules-api").Material<number, number, number>;
28
+ get specialTokens(): import("@gamepark/rules-api").Material<number, number, number>;
26
29
  get playArea(): import("@gamepark/rules-api").Material<number, number, number>;
27
30
  get creatures(): import("@gamepark/rules-api").Material<number, number, number>;
28
31
  isStunned(): boolean;
29
32
  getPower(): number;
30
33
  getPowerIfNotStunned(): number;
34
+ getPlayerPowerModifier(_player: Deck): number;
31
35
  addPendingEffect(ruleId: number): void;
32
- addOngoingEffect(type: OngoingEffectType): void;
36
+ addOngoingEffect(type: OngoingEffectType, options?: Omit<OngoingEffect, 'type' | 'cardIndex'>): void;
33
37
  removeOngoingEffect(type: OngoingEffectType): void;
34
38
  get player(): number;
35
39
  get foe(): number;
36
40
  startEffect(effect: Effect): MaterialMove[];
37
- getEffectPlayer(_effect: Effect): number;
41
+ isAutomaticEffect(effect: Effect): boolean;
42
+ getEffectPlayers(_effect: Effect): number[];
38
43
  canBePlayed(): boolean;
39
44
  canSuitBePlayed(): boolean;
40
45
  ongoingEffectPreventsPlayCard(): boolean;
@@ -1,5 +1,7 @@
1
1
  import { MaterialRulesPart } from '@gamepark/rules-api';
2
2
  import { Memory } from '../Memory';
3
+ import { EffectsHelper } from '../rules/EffectsHelper';
4
+ import { RuleId } from '../rules/RuleId';
3
5
  import { cardProperties } from './CardProperties';
4
6
  import { CardSuit } from './CardSuit';
5
7
  import { CardType } from './CardType';
@@ -13,11 +15,16 @@ export class CardRule extends MaterialRulesPart {
13
15
  super(game);
14
16
  this.index = index;
15
17
  }
18
+ isNeutralized() {
19
+ return this.remind(Memory.OngoingEffects).some((e) => e.type === OngoingEffectType.Neutralized && e.targets?.includes(this.index));
20
+ }
16
21
  canActivate() {
17
22
  if (!this.activate)
18
23
  return false;
19
24
  if (this.isStunned())
20
25
  return false;
26
+ if (this.isNeutralized())
27
+ return false;
21
28
  const activatedCards = this.remind(Memory.ActivatedCards);
22
29
  return !activatedCards.includes(this.index);
23
30
  }
@@ -25,16 +32,13 @@ export class CardRule extends MaterialRulesPart {
25
32
  return [...this.removePowerTokens(), ...this.removeStunTokens(), ...this.removeSpecialTokens()];
26
33
  }
27
34
  removePowerTokens() {
28
- const tokens = this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index);
29
- return tokens.getQuantity() > 0 ? [tokens.deleteItem(tokens.getQuantity())] : [];
35
+ return this.powerTokens.getQuantity() > 0 ? [this.powerTokens.deleteItem(this.powerTokens.getQuantity())] : [];
30
36
  }
31
37
  removeStunTokens() {
32
- const tokens = this.material(MaterialType.StunToken).location(LocationType.CardStunTokens).parent(this.index);
33
- return tokens.getQuantity() > 0 ? [tokens.deleteItem(tokens.getQuantity())] : [];
38
+ return this.stunTokens.getQuantity() > 0 ? [this.stunTokens.deleteItem(this.stunTokens.getQuantity())] : [];
34
39
  }
35
40
  removeSpecialTokens() {
36
- const tokens = this.material(MaterialType.SpecialToken).location(LocationType.CardSpecialTokens).parent(this.index);
37
- return tokens.getQuantity() > 0 ? [tokens.deleteItem(tokens.getQuantity())] : [];
41
+ return this.specialTokens.getQuantity() > 0 ? [this.specialTokens.deleteItem(this.specialTokens.getQuantity())] : [];
38
42
  }
39
43
  get item() {
40
44
  return this.material(MaterialType.Card).getItem(this.index);
@@ -45,6 +49,15 @@ export class CardRule extends MaterialRulesPart {
45
49
  get properties() {
46
50
  return cardProperties[this.card];
47
51
  }
52
+ get powerTokens() {
53
+ return this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index);
54
+ }
55
+ get stunTokens() {
56
+ return this.material(MaterialType.StunToken).location(LocationType.CardStunTokens).parent(this.index);
57
+ }
58
+ get specialTokens() {
59
+ return this.material(MaterialType.SpecialToken).location(LocationType.CardSpecialTokens).parent(this.index);
60
+ }
48
61
  get playArea() {
49
62
  return this.material(MaterialType.Card).location(LocationType.PlayArea);
50
63
  }
@@ -52,10 +65,10 @@ export class CardRule extends MaterialRulesPart {
52
65
  return this.playArea.id((id) => cardProperties[id.front].type === CardType.Creature);
53
66
  }
54
67
  isStunned() {
55
- return this.material(MaterialType.StunToken).location(LocationType.CardStunTokens).parent(this.index).getQuantity() > 0;
68
+ return this.stunTokens.getQuantity() > 0;
56
69
  }
57
70
  getPower() {
58
- if (this.isStunned()) {
71
+ if (this.isStunned() || this.isNeutralized()) {
59
72
  return 0;
60
73
  }
61
74
  else {
@@ -64,14 +77,21 @@ export class CardRule extends MaterialRulesPart {
64
77
  }
65
78
  getPowerIfNotStunned() {
66
79
  const basePower = this.properties.power;
67
- const powerTokensCount = this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index).getQuantity();
68
- return basePower + powerTokensCount;
80
+ const powerModifier = this.remind(Memory.OngoingEffects)
81
+ .filter((e) => e.type === OngoingEffectType.PowerModifier && e.cardIndex === this.index)
82
+ .reduce((sum, e) => sum + (e.value ?? 0), 0);
83
+ return basePower + this.powerTokens.getQuantity() + powerModifier;
84
+ }
85
+ getPlayerPowerModifier(_player) {
86
+ return 0;
69
87
  }
70
88
  addPendingEffect(ruleId) {
89
+ if (this.isNeutralized())
90
+ return;
71
91
  this.memorize(Memory.PendingEffects, (effects) => [...effects, { cardIndex: this.index, ruleId }]);
72
92
  }
73
- addOngoingEffect(type) {
74
- this.memorize(Memory.OngoingEffects, (effects) => [...effects, { type, cardIndex: this.index }]);
93
+ addOngoingEffect(type, options) {
94
+ this.memorize(Memory.OngoingEffects, (effects) => [...effects, { type, cardIndex: this.index, ...options }]);
75
95
  }
76
96
  removeOngoingEffect(type) {
77
97
  this.memorize(Memory.OngoingEffects, (effects) => effects.filter((e) => !(e.type === type && e.cardIndex === this.index)));
@@ -83,10 +103,40 @@ export class CardRule extends MaterialRulesPart {
83
103
  return this.game.players.find((p) => p !== this.player);
84
104
  }
85
105
  startEffect(effect) {
86
- return [this.startPlayerTurn(effect.ruleId, this.getEffectPlayer(effect))];
106
+ if (this.isAutomaticEffect(effect)) {
107
+ return [this.startRule(effect.ruleId)];
108
+ }
109
+ const players = this.getEffectPlayers(effect);
110
+ if (players.length > 1) {
111
+ return [this.startSimultaneousRule(effect.ruleId, players)];
112
+ }
113
+ return [this.startPlayerTurn(effect.ruleId, players[0])];
114
+ }
115
+ isAutomaticEffect(effect) {
116
+ switch (effect.ruleId) {
117
+ case RuleId.DrawEffect:
118
+ case RuleId.GainCrystalEffect:
119
+ case RuleId.StashPowerTokensEffect:
120
+ case RuleId.StealCrystalEffect:
121
+ case RuleId.WindWrathEffect:
122
+ case RuleId.CavernSkulkerEffect:
123
+ return true;
124
+ case RuleId.StunEffect:
125
+ return !!this.isAutoStun?.();
126
+ case RuleId.DestroyEffect:
127
+ return !!this.isAutoDestroy?.();
128
+ case RuleId.DiscardEffect:
129
+ return !!this.isAutoDiscard?.();
130
+ case RuleId.ReturnCardEffect:
131
+ return !!this.isAutoReturn?.();
132
+ case RuleId.PutPowerTokensEffect:
133
+ return !!this.isAutoPutPowerToken?.();
134
+ default:
135
+ return false;
136
+ }
87
137
  }
88
- getEffectPlayer(_effect) {
89
- return this.player;
138
+ getEffectPlayers(_effect) {
139
+ return [this.player];
90
140
  }
91
141
  canBePlayed() {
92
142
  return this.canSuitBePlayed() && !this.ongoingEffectPreventsPlayCard();
@@ -97,13 +147,11 @@ export class CardRule extends MaterialRulesPart {
97
147
  return !currentSuit || cardSuit === CardSuit.Twilight || cardSuit === currentSuit;
98
148
  }
99
149
  ongoingEffectPreventsPlayCard() {
100
- const ongoingEffects = this.remind(Memory.OngoingEffects);
101
- for (const effect of ongoingEffects) {
102
- if (effect.type === OngoingEffectType.PreventPlayCard) {
103
- const sourceCardRule = createCardRule(this.game, effect.cardIndex);
104
- if (sourceCardRule.preventPlayCard(this.card, this.player)) {
105
- return true;
106
- }
150
+ const effectsHelper = new EffectsHelper(this.game);
151
+ for (const effect of effectsHelper.getActiveOngoingEffects(OngoingEffectType.PlayCardCondition)) {
152
+ const sourceCardRule = createCardRule(this.game, effect.cardIndex);
153
+ if (!sourceCardRule.canPlayCard(this.card, this.player)) {
154
+ return true;
107
155
  }
108
156
  }
109
157
  return false;
@@ -1,4 +1,6 @@
1
+ import { Card } from './Card';
1
2
  export type Effect = {
2
3
  cardIndex: number;
3
4
  ruleId: number;
5
+ sourceCard?: Card;
4
6
  };
@@ -32,6 +32,7 @@ export interface StashPowerTokenEffect {
32
32
  export interface PlayCardEffect {
33
33
  getPlayCardTargets?(): Material;
34
34
  isPlayCardOptional?(): boolean;
35
+ ignorePlayCardConditions?(): boolean;
35
36
  }
36
37
  export interface ChallengeEffect {
37
38
  onChallengeAccepted?(): void;
@@ -43,8 +44,12 @@ export interface StunEffect {
43
44
  getStunTargetsCount?(): number;
44
45
  isAutoStun?(): boolean;
45
46
  }
46
- export interface PreventPlayCardEffect {
47
- preventPlayCard(card: Card, player: Deck): boolean;
47
+ export interface PlayCardConditionEffect {
48
+ canPlayCard(card: Card, player: Deck): boolean;
49
+ onPlayCardCondition?(card: Card, player: Deck): void;
50
+ }
51
+ export interface SwitchSideEffect {
52
+ getSwitchSideTargets?(): Material;
48
53
  }
49
54
  export interface PreventEffectsEffect {
50
55
  preventEnterEffects(cardIndex: number): boolean;
@@ -1,8 +1,17 @@
1
1
  export declare enum OngoingEffectType {
2
- PreventPlayCard = 1,
3
- PreventEffects = 2
2
+ PlayCardCondition = 1,
3
+ PreventEffects = 2,
4
+ LockSuit = 3,
5
+ PassTurn = 4,
6
+ SurvivesSkirmish = 5,
7
+ KeepActionCard = 6,
8
+ Neutralized = 7,
9
+ PowerModifier = 8
4
10
  }
5
11
  export type OngoingEffect = {
6
12
  type: OngoingEffectType;
7
13
  cardIndex: number;
14
+ targets?: number[];
15
+ value?: number;
16
+ turnsLeft?: number;
8
17
  };