@gamepark/skyrift 0.4.3 → 0.5.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 (85) hide show
  1. package/dist/CustomMoveType.d.ts +2 -1
  2. package/dist/CustomMoveType.js +1 -0
  3. package/dist/Deck.d.ts +1 -0
  4. package/dist/Deck.js +1 -0
  5. package/dist/Memory.d.ts +10 -9
  6. package/dist/Memory.js +10 -9
  7. package/dist/SkyriftRules.d.ts +6 -2
  8. package/dist/SkyriftRules.js +6 -2
  9. package/dist/SkyriftSetup.js +2 -0
  10. package/dist/material/Card.d.ts +16 -0
  11. package/dist/material/Card.js +16 -0
  12. package/dist/material/CardProperties.js +32 -0
  13. package/dist/material/CardRule.d.ts +2 -1
  14. package/dist/material/CardRule.js +10 -3
  15. package/dist/material/OngoingEffect.d.ts +3 -1
  16. package/dist/material/OngoingEffect.js +2 -0
  17. package/dist/material/decks/BlackHive.d.ts +18 -0
  18. package/dist/material/decks/BlackHive.js +19 -0
  19. package/dist/material/decks/blackhive/CarefulExcavation.d.ts +20 -0
  20. package/dist/material/decks/blackhive/CarefulExcavation.js +31 -0
  21. package/dist/material/decks/blackhive/CaveIn.d.ts +14 -0
  22. package/dist/material/decks/blackhive/CaveIn.js +18 -0
  23. package/dist/material/decks/blackhive/CaveInEffectRule.d.ts +10 -0
  24. package/dist/material/decks/blackhive/CaveInEffectRule.js +55 -0
  25. package/dist/material/decks/blackhive/CrystalMining.d.ts +15 -0
  26. package/dist/material/decks/blackhive/CrystalMining.js +22 -0
  27. package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.d.ts +4 -0
  28. package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.js +10 -0
  29. package/dist/material/decks/blackhive/CrystalShaft.d.ts +15 -0
  30. package/dist/material/decks/blackhive/CrystalShaft.js +18 -0
  31. package/dist/material/decks/blackhive/CycleKeeper.d.ts +13 -0
  32. package/dist/material/decks/blackhive/CycleKeeper.js +15 -0
  33. package/dist/material/decks/blackhive/CycleKeeperEffectRule.d.ts +6 -0
  34. package/dist/material/decks/blackhive/CycleKeeperEffectRule.js +21 -0
  35. package/dist/material/decks/blackhive/DariusAstraSmith.d.ts +13 -0
  36. package/dist/material/decks/blackhive/DariusAstraSmith.js +15 -0
  37. package/dist/material/decks/blackhive/DarkSwarm.d.ts +13 -0
  38. package/dist/material/decks/blackhive/DarkSwarm.js +15 -0
  39. package/dist/material/decks/blackhive/DarkSwarmEffectRule.d.ts +6 -0
  40. package/dist/material/decks/blackhive/DarkSwarmEffectRule.js +18 -0
  41. package/dist/material/decks/blackhive/ElevatorOfTheAbyss.d.ts +15 -0
  42. package/dist/material/decks/blackhive/ElevatorOfTheAbyss.js +19 -0
  43. package/dist/material/decks/blackhive/ExplosiveKitty.d.ts +16 -0
  44. package/dist/material/decks/blackhive/ExplosiveKitty.js +19 -0
  45. package/dist/material/decks/blackhive/GromIronspike.d.ts +13 -0
  46. package/dist/material/decks/blackhive/GromIronspike.js +18 -0
  47. package/dist/material/decks/blackhive/GuntarRustypike.d.ts +20 -0
  48. package/dist/material/decks/blackhive/GuntarRustypike.js +28 -0
  49. package/dist/material/decks/blackhive/HiveMother.d.ts +13 -0
  50. package/dist/material/decks/blackhive/HiveMother.js +18 -0
  51. package/dist/material/decks/blackhive/LotharBlackclaw.d.ts +13 -0
  52. package/dist/material/decks/blackhive/LotharBlackclaw.js +22 -0
  53. package/dist/material/decks/blackhive/LotharBlackclawEffectRule.d.ts +4 -0
  54. package/dist/material/decks/blackhive/LotharBlackclawEffectRule.js +20 -0
  55. package/dist/material/decks/blackhive/OlgaStonecrusher.d.ts +13 -0
  56. package/dist/material/decks/blackhive/OlgaStonecrusher.js +15 -0
  57. package/dist/material/decks/blackhive/ShadowDealer.d.ts +15 -0
  58. package/dist/material/decks/blackhive/ShadowDealer.js +22 -0
  59. package/dist/material/decks/blackhive/UndergroundScourge.d.ts +13 -0
  60. package/dist/material/decks/blackhive/UndergroundScourge.js +15 -0
  61. package/dist/material/decks/gravehurt/CavernSkulker.d.ts +4 -1
  62. package/dist/material/decks/gravehurt/CavernSkulker.js +18 -5
  63. package/dist/material/decks/gravehurt/Doom.d.ts +5 -1
  64. package/dist/material/decks/gravehurt/Doom.js +16 -2
  65. package/dist/material/decks/gravehurt/Nosferatis.d.ts +2 -2
  66. package/dist/material/decks/gravehurt/Nosferatis.js +2 -2
  67. package/dist/material/decks/gravehurt/TheGreatToady.d.ts +2 -2
  68. package/dist/material/decks/gravehurt/TheGreatToady.js +2 -2
  69. package/dist/material/decks/heathblade/Armada.js +1 -1
  70. package/dist/material/decks/highwave/EyeOfSky.d.ts +1 -1
  71. package/dist/material/decks/highwave/EyeOfSky.js +2 -2
  72. package/dist/rules/EffectRule.js +1 -1
  73. package/dist/rules/EndPlayerTurnRule.js +3 -0
  74. package/dist/rules/MulliganEffectRule.d.ts +2 -1
  75. package/dist/rules/MulliganEffectRule.js +15 -4
  76. package/dist/rules/PlayCardRule.d.ts +0 -1
  77. package/dist/rules/PlayCardRule.js +1 -4
  78. package/dist/rules/PlayerHelper.d.ts +1 -0
  79. package/dist/rules/PlayerHelper.js +6 -1
  80. package/dist/rules/RuleId.d.ts +3 -1
  81. package/dist/rules/RuleId.js +3 -1
  82. package/dist/rules/SimultaneousEffectRule.d.ts +5 -0
  83. package/dist/rules/SimultaneousEffectRule.js +14 -0
  84. package/dist/rules/StartPlayerTurnRule.js +4 -1
  85. package/package.json +2 -2
@@ -5,5 +5,6 @@ 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
9
10
  }
@@ -7,4 +7,5 @@ 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";
10
11
  })(CustomMoveType || (CustomMoveType = {}));
package/dist/Deck.d.ts CHANGED
@@ -2,5 +2,6 @@ export declare enum Deck {
2
2
  HearthBlade = 1,
3
3
  WindSands = 2,
4
4
  GraveHurt = 3,
5
+ BlackHive = 4,
5
6
  HighWave = 6
6
7
  }
package/dist/Deck.js CHANGED
@@ -3,5 +3,6 @@ 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";
6
7
  Deck[Deck["HighWave"] = 6] = "HighWave";
7
8
  })(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,10 +2,11 @@ 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';
8
+ import { CaveInEffectRule } from './material/decks/blackhive/CaveInEffectRule';
9
+ import { CycleKeeperEffectRule } from './material/decks/blackhive/CycleKeeperEffectRule';
9
10
  import { AbiSnakeCharmerEffectRule } from './material/decks/windsands/AbiSnakeCharmerEffectRule';
10
11
  import { WindWrathEffectRule } from './material/decks/windsands/WindWrathEffectRule';
11
12
  import { LocationType } from './material/LocationType';
@@ -27,6 +28,7 @@ import { StartPlayerTurnRule } from './rules/StartPlayerTurnRule';
27
28
  import { StartRoundRule } from './rules/StartRoundRule';
28
29
  import { StashPowerTokensEffectRule } from './rules/StashPowerTokensEffectRule';
29
30
  import { StealCrystalEffectRule } from './rules/StealCrystalEffectRule';
31
+ import { MulliganEffectRule } from './rules/MulliganEffectRule';
30
32
  import { StunEffectRule } from './rules/StunEffectRule';
31
33
  export declare class SkyriftRules extends SecretMaterialRules<Deck, MaterialType, LocationType> implements TimeLimit<MaterialGame<Deck, MaterialType, LocationType>, MaterialMove<Deck, MaterialType, LocationType>, Deck> {
32
34
  rules: {
@@ -49,11 +51,13 @@ export declare class SkyriftRules extends SecretMaterialRules<Deck, MaterialType
49
51
  30: typeof StealCrystalEffectRule;
50
52
  204: typeof AbiSnakeCharmerEffectRule;
51
53
  31: typeof PlayCardEffectRule;
52
- 110: typeof ArmadaEffectRule;
54
+ 32: typeof MulliganEffectRule;
53
55
  103: typeof PrincessLithaEffectRule;
54
56
  215: typeof WindWrathEffectRule;
55
57
  302: typeof CavernSkulkerEffectRule;
56
58
  315: typeof DoomEffectRule;
59
+ 409: typeof CycleKeeperEffectRule;
60
+ 413: typeof CaveInEffectRule;
57
61
  603: typeof EyeOfSkyEffectRule;
58
62
  614: typeof BoardingPartyEffectRule;
59
63
  };
@@ -3,10 +3,11 @@ 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';
9
+ import { CaveInEffectRule } from './material/decks/blackhive/CaveInEffectRule';
10
+ import { CycleKeeperEffectRule } from './material/decks/blackhive/CycleKeeperEffectRule';
10
11
  import { AbiSnakeCharmerEffectRule } from './material/decks/windsands/AbiSnakeCharmerEffectRule';
11
12
  import { WindWrathEffectRule } from './material/decks/windsands/WindWrathEffectRule';
12
13
  import { LocationType } from './material/LocationType';
@@ -30,6 +31,7 @@ import { StartPlayerTurnRule } from './rules/StartPlayerTurnRule';
30
31
  import { StartRoundRule } from './rules/StartRoundRule';
31
32
  import { StashPowerTokensEffectRule } from './rules/StashPowerTokensEffectRule';
32
33
  import { StealCrystalEffectRule } from './rules/StealCrystalEffectRule';
34
+ import { MulliganEffectRule } from './rules/MulliganEffectRule';
33
35
  import { StunEffectRule } from './rules/StunEffectRule';
34
36
  export class SkyriftRules extends SecretMaterialRules {
35
37
  rules = {
@@ -52,11 +54,13 @@ export class SkyriftRules extends SecretMaterialRules {
52
54
  [RuleId.StealCrystalEffect]: StealCrystalEffectRule,
53
55
  [RuleId.AbiSnakeCharmerEffect]: AbiSnakeCharmerEffectRule,
54
56
  [RuleId.PlayCardEffect]: PlayCardEffectRule,
55
- [RuleId.ArmadaEffect]: ArmadaEffectRule,
57
+ [RuleId.MulliganEffect]: MulliganEffectRule,
56
58
  [RuleId.PrincessLithaEffect]: PrincessLithaEffectRule,
57
59
  [RuleId.WindWrathEffect]: WindWrathEffectRule,
58
60
  [RuleId.CavernSkulkerEffect]: CavernSkulkerEffectRule,
59
61
  [RuleId.DoomEffect]: DoomEffectRule,
62
+ [RuleId.CycleKeeperEffect]: CycleKeeperEffectRule,
63
+ [RuleId.CaveInEffect]: CaveInEffectRule,
60
64
  [RuleId.EyeOfSkyEffect]: EyeOfSkyEffectRule,
61
65
  [RuleId.BoardingPartyEffect]: BoardingPartyEffectRule
62
66
  };
@@ -1,6 +1,7 @@
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';
6
7
  import { HighWave } from './material/decks/HighWave';
@@ -14,6 +15,7 @@ const deckConfigurations = {
14
15
  [Deck.HearthBlade]: HearthBlade,
15
16
  [Deck.WindSands]: WindSands,
16
17
  [Deck.GraveHurt]: GraveHurt,
18
+ [Deck.BlackHive]: BlackHive,
17
19
  [Deck.HighWave]: HighWave
18
20
  };
19
21
  export class SkyriftSetup extends MaterialGameSetup {
@@ -48,6 +48,22 @@ 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,
51
67
  SeaScorcher = 601,
52
68
  AeliaSteadyHand = 602,
53
69
  EyeOfSky = 603,
@@ -48,6 +48,22 @@ 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";
51
67
  Card[Card["SeaScorcher"] = 601] = "SeaScorcher";
52
68
  Card[Card["AeliaSteadyHand"] = 602] = "AeliaSteadyHand";
53
69
  Card[Card["EyeOfSky"] = 603] = "EyeOfSky";
@@ -63,6 +63,22 @@ 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 { UndergroundScourge } from './decks/blackhive/UndergroundScourge';
67
+ import { ShadowDealer } from './decks/blackhive/ShadowDealer';
68
+ import { DariusAstraSmith } from './decks/blackhive/DariusAstraSmith';
69
+ import { GuntarRustypike } from './decks/blackhive/GuntarRustypike';
70
+ import { DarkSwarm } from './decks/blackhive/DarkSwarm';
71
+ import { HiveMother } from './decks/blackhive/HiveMother';
72
+ import { GromIronspike } from './decks/blackhive/GromIronspike';
73
+ import { OlgaStonecrusher } from './decks/blackhive/OlgaStonecrusher';
74
+ import { CycleKeeper } from './decks/blackhive/CycleKeeper';
75
+ import { LotharBlackclaw } from './decks/blackhive/LotharBlackclaw';
76
+ import { ElevatorOfTheAbyss } from './decks/blackhive/ElevatorOfTheAbyss';
77
+ import { CrystalMining } from './decks/blackhive/CrystalMining';
78
+ import { CaveIn } from './decks/blackhive/CaveIn';
79
+ import { CrystalShaft } from './decks/blackhive/CrystalShaft';
80
+ import { ExplosiveKitty } from './decks/blackhive/ExplosiveKitty';
81
+ import { CarefulExcavation } from './decks/blackhive/CarefulExcavation';
66
82
  export const cardProperties = {
67
83
  [Card.HedgeKnight]: HedgeKnight,
68
84
  [Card.LoyalSquire]: LoyalSquire,
@@ -112,6 +128,22 @@ export const cardProperties = {
112
128
  [Card.WitchingHour]: WitchingHour,
113
129
  [Card.Doom]: Doom,
114
130
  [Card.AstralHammer]: AstralHammer,
131
+ [Card.UndergroundScourge]: UndergroundScourge,
132
+ [Card.ShadowDealer]: ShadowDealer,
133
+ [Card.DariusAstraSmith]: DariusAstraSmith,
134
+ [Card.GuntarRustypike]: GuntarRustypike,
135
+ [Card.DarkSwarm]: DarkSwarm,
136
+ [Card.HiveMother]: HiveMother,
137
+ [Card.GromIronspike]: GromIronspike,
138
+ [Card.OlgaStonecrusher]: OlgaStonecrusher,
139
+ [Card.CycleKeeper]: CycleKeeper,
140
+ [Card.LotharBlackclaw]: LotharBlackclaw,
141
+ [Card.ElevatorOfTheAbyss]: ElevatorOfTheAbyss,
142
+ [Card.CrystalMining]: CrystalMining,
143
+ [Card.CaveIn]: CaveIn,
144
+ [Card.CrystalShaft]: CrystalShaft,
145
+ [Card.ExplosiveKitty]: ExplosiveKitty,
146
+ [Card.CarefulExcavation]: CarefulExcavation,
115
147
  [Card.SeaScorcher]: SeaScorcher,
116
148
  [Card.AeliaSteadyHand]: AeliaSteadyHand,
117
149
  [Card.EyeOfSky]: EyeOfSky,
@@ -28,13 +28,14 @@ export declare class CardRule extends MaterialRulesPart {
28
28
  isStunned(): boolean;
29
29
  getPower(): number;
30
30
  getPowerIfNotStunned(): number;
31
+ getFoePowerModifier(): number;
31
32
  addPendingEffect(ruleId: number): void;
32
33
  addOngoingEffect(type: OngoingEffectType): void;
33
34
  removeOngoingEffect(type: OngoingEffectType): void;
34
35
  get player(): number;
35
36
  get foe(): number;
36
37
  startEffect(effect: Effect): MaterialMove[];
37
- getEffectPlayer(_effect: Effect): number;
38
+ getEffectPlayers(_effect: Effect): number[];
38
39
  canBePlayed(): boolean;
39
40
  canSuitBePlayed(): boolean;
40
41
  ongoingEffectPreventsPlayCard(): boolean;
@@ -67,6 +67,9 @@ export class CardRule extends MaterialRulesPart {
67
67
  const powerTokensCount = this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index).getQuantity();
68
68
  return basePower + powerTokensCount;
69
69
  }
70
+ getFoePowerModifier() {
71
+ return 0;
72
+ }
70
73
  addPendingEffect(ruleId) {
71
74
  this.memorize(Memory.PendingEffects, (effects) => [...effects, { cardIndex: this.index, ruleId }]);
72
75
  }
@@ -83,10 +86,14 @@ export class CardRule extends MaterialRulesPart {
83
86
  return this.game.players.find((p) => p !== this.player);
84
87
  }
85
88
  startEffect(effect) {
86
- return [this.startPlayerTurn(effect.ruleId, this.getEffectPlayer(effect))];
89
+ const players = this.getEffectPlayers(effect);
90
+ if (players.length > 1) {
91
+ return [this.startSimultaneousRule(effect.ruleId, players)];
92
+ }
93
+ return [this.startPlayerTurn(effect.ruleId, players[0])];
87
94
  }
88
- getEffectPlayer(_effect) {
89
- return this.player;
95
+ getEffectPlayers(_effect) {
96
+ return [this.player];
90
97
  }
91
98
  canBePlayed() {
92
99
  return this.canSuitBePlayed() && !this.ongoingEffectPreventsPlayCard();
@@ -1,6 +1,8 @@
1
1
  export declare enum OngoingEffectType {
2
2
  PreventPlayCard = 1,
3
- PreventEffects = 2
3
+ PreventEffects = 2,
4
+ LockSuit = 3,
5
+ PassTurn = 4
4
6
  }
5
7
  export type OngoingEffect = {
6
8
  type: OngoingEffectType;
@@ -2,4 +2,6 @@ export var OngoingEffectType;
2
2
  (function (OngoingEffectType) {
3
3
  OngoingEffectType[OngoingEffectType["PreventPlayCard"] = 1] = "PreventPlayCard";
4
4
  OngoingEffectType[OngoingEffectType["PreventEffects"] = 2] = "PreventEffects";
5
+ OngoingEffectType[OngoingEffectType["LockSuit"] = 3] = "LockSuit";
6
+ OngoingEffectType[OngoingEffectType["PassTurn"] = 4] = "PassTurn";
5
7
  })(OngoingEffectType || (OngoingEffectType = {}));
@@ -0,0 +1,18 @@
1
+ export declare const BlackHive: {
2
+ 401: number;
3
+ 402: number;
4
+ 403: number;
5
+ 404: number;
6
+ 405: number;
7
+ 406: number;
8
+ 407: number;
9
+ 408: number;
10
+ 409: number;
11
+ 410: number;
12
+ 411: number;
13
+ 412: number;
14
+ 413: number;
15
+ 414: number;
16
+ 415: number;
17
+ 416: number;
18
+ };
@@ -0,0 +1,19 @@
1
+ import { Card } from '../Card';
2
+ export const BlackHive = {
3
+ [Card.UndergroundScourge]: 2,
4
+ [Card.ShadowDealer]: 2,
5
+ [Card.DariusAstraSmith]: 1,
6
+ [Card.GuntarRustypike]: 1,
7
+ [Card.DarkSwarm]: 2,
8
+ [Card.HiveMother]: 2,
9
+ [Card.GromIronspike]: 1,
10
+ [Card.OlgaStonecrusher]: 1,
11
+ [Card.CycleKeeper]: 2,
12
+ [Card.LotharBlackclaw]: 1,
13
+ [Card.ElevatorOfTheAbyss]: 2,
14
+ [Card.CrystalMining]: 1,
15
+ [Card.CaveIn]: 2,
16
+ [Card.CrystalShaft]: 1,
17
+ [Card.ExplosiveKitty]: 2,
18
+ [Card.CarefulExcavation]: 1
19
+ };
@@ -0,0 +1,20 @@
1
+ import { Material } from '@gamepark/rules-api';
2
+ import { CardRule } from '../../CardRule';
3
+ import { CardSuit } from '../../CardSuit';
4
+ import { CardType } from '../../CardType';
5
+ import { DestroyEffect, DrawEffect } from '../../EffectTraits';
6
+ declare class CarefulExcavationRule extends CardRule implements DrawEffect, DestroyEffect {
7
+ onEnters(): void;
8
+ getDrawCount(): number;
9
+ getFoePowerModifier(): number;
10
+ onFoeTurnStart(): void;
11
+ getDestroyTargets(): Material;
12
+ isAutoDestroy(): boolean;
13
+ }
14
+ export declare const CarefulExcavation: {
15
+ power: number;
16
+ type: CardType;
17
+ suit: CardSuit;
18
+ rule: typeof CarefulExcavationRule;
19
+ };
20
+ export {};
@@ -0,0 +1,31 @@
1
+ import { RuleId } from '../../../rules/RuleId';
2
+ import { CardRule } from '../../CardRule';
3
+ import { CardSuit } from '../../CardSuit';
4
+ import { CardType } from '../../CardType';
5
+ import { MaterialType } from '../../MaterialType';
6
+ class CarefulExcavationRule extends CardRule {
7
+ onEnters() {
8
+ this.addPendingEffect(RuleId.DrawEffect);
9
+ }
10
+ getDrawCount() {
11
+ return 2;
12
+ }
13
+ getFoePowerModifier() {
14
+ return 4;
15
+ }
16
+ onFoeTurnStart() {
17
+ this.addPendingEffect(RuleId.DestroyEffect);
18
+ }
19
+ getDestroyTargets() {
20
+ return this.material(MaterialType.Card).index(this.index);
21
+ }
22
+ isAutoDestroy() {
23
+ return true;
24
+ }
25
+ }
26
+ export const CarefulExcavation = {
27
+ power: 0,
28
+ type: CardType.Action,
29
+ suit: CardSuit.Twilight,
30
+ rule: CarefulExcavationRule
31
+ };
@@ -0,0 +1,14 @@
1
+ import { CardRule } from '../../CardRule';
2
+ import { CardSuit } from '../../CardSuit';
3
+ import { CardType } from '../../CardType';
4
+ declare class CaveInRule extends CardRule {
5
+ onEnters(): void;
6
+ getEffectPlayers(): number[];
7
+ }
8
+ export declare const CaveIn: {
9
+ power: number;
10
+ type: CardType;
11
+ suit: CardSuit;
12
+ rule: typeof CaveInRule;
13
+ };
14
+ export {};
@@ -0,0 +1,18 @@
1
+ import { CardRule } from '../../CardRule';
2
+ import { CardSuit } from '../../CardSuit';
3
+ import { CardType } from '../../CardType';
4
+ import { RuleId } from '../../../rules/RuleId';
5
+ class CaveInRule extends CardRule {
6
+ onEnters() {
7
+ this.addPendingEffect(RuleId.CaveInEffect);
8
+ }
9
+ getEffectPlayers() {
10
+ return [this.player, this.foe];
11
+ }
12
+ }
13
+ export const CaveIn = {
14
+ power: 1,
15
+ type: CardType.Action,
16
+ suit: CardSuit.Night,
17
+ rule: CaveInRule
18
+ };
@@ -0,0 +1,10 @@
1
+ import { ItemMove, MaterialMove } from '@gamepark/rules-api';
2
+ import { Deck } from '../../../Deck';
3
+ import { SimultaneousEffectRule } from '../../../rules/SimultaneousEffectRule';
4
+ export declare class CaveInEffectRule extends SimultaneousEffectRule {
5
+ onRuleStart(): MaterialMove[];
6
+ getTargets(player: Deck): import("@gamepark/rules-api").Material<number, number, number>;
7
+ getActivePlayerLegalMoves(player: Deck): MaterialMove[];
8
+ beforeItemMove(move: ItemMove): import("@gamepark/rules-api").EndPlayerTurn<Deck>[];
9
+ getMovesAfterPlayersDone(): MaterialMove[];
10
+ }
@@ -0,0 +1,55 @@
1
+ import { isMoveItemType } from '@gamepark/rules-api';
2
+ import { Memory } from '../../../Memory';
3
+ import { SimultaneousEffectRule } from '../../../rules/SimultaneousEffectRule';
4
+ import { cardProperties } from '../../CardProperties';
5
+ import { CardType } from '../../CardType';
6
+ import { createCardRule } from '../../createCardRule';
7
+ import { LocationType } from '../../LocationType';
8
+ import { MaterialType } from '../../MaterialType';
9
+ export class CaveInEffectRule extends SimultaneousEffectRule {
10
+ onRuleStart() {
11
+ const moves = [];
12
+ for (const player of this.game.players) {
13
+ const targets = this.material(MaterialType.Card)
14
+ .location(LocationType.PlayArea)
15
+ .player(player)
16
+ .id((id) => cardProperties[id.front].type === CardType.Creature)
17
+ .index((index) => createCardRule(this.game, index).getPower() <= 3)
18
+ .getIndexes();
19
+ if (!targets.length) {
20
+ moves.push(this.endPlayerTurn(player));
21
+ }
22
+ else {
23
+ this.memorize(Memory.EffectTargets, targets, player);
24
+ this.memorize(Memory.EffectCount, Math.min(2, targets.length), player);
25
+ }
26
+ }
27
+ return moves;
28
+ }
29
+ getTargets(player) {
30
+ const indexes = this.remind(Memory.EffectTargets, player);
31
+ return this.material(MaterialType.Card).index((index) => indexes.includes(index));
32
+ }
33
+ getActivePlayerLegalMoves(player) {
34
+ return this.getTargets(player).moveItems((item) => ({
35
+ type: LocationType.PlayerDiscard,
36
+ player: item.id.back
37
+ }));
38
+ }
39
+ beforeItemMove(move) {
40
+ if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayerDiscard) {
41
+ const player = this.material(MaterialType.Card).getItem(move.itemIndex).location.player;
42
+ this.memorize(Memory.EffectTargets, (targets) => targets.filter((i) => i !== move.itemIndex), player);
43
+ const remaining = this.memorize(Memory.EffectCount, (c) => c - 1, player);
44
+ if (remaining <= 0 || !this.getTargets(player).length) {
45
+ return [this.endPlayerTurn(player)];
46
+ }
47
+ }
48
+ return [];
49
+ }
50
+ getMovesAfterPlayersDone() {
51
+ this.forget(Memory.EffectTargets);
52
+ this.forget(Memory.EffectCount);
53
+ return super.getMovesAfterPlayersDone();
54
+ }
55
+ }
@@ -0,0 +1,15 @@
1
+ import { CardRule } from '../../CardRule';
2
+ import { CardSuit } from '../../CardSuit';
3
+ import { CardType } from '../../CardType';
4
+ import { DrawEffect } from '../../EffectTraits';
5
+ declare class CrystalMiningRule extends CardRule implements DrawEffect {
6
+ onEnters(): void;
7
+ getDrawCount(): 1 | 2;
8
+ }
9
+ export declare const CrystalMining: {
10
+ power: number;
11
+ type: CardType;
12
+ suit: CardSuit;
13
+ rule: typeof CrystalMiningRule;
14
+ };
15
+ export {};
@@ -0,0 +1,22 @@
1
+ import { RuleId } from '../../../rules/RuleId';
2
+ import { CardRule } from '../../CardRule';
3
+ import { CardSuit } from '../../CardSuit';
4
+ import { CardType } from '../../CardType';
5
+ import { LocationType } from '../../LocationType';
6
+ import { MaterialType } from '../../MaterialType';
7
+ class CrystalMiningRule extends CardRule {
8
+ onEnters() {
9
+ this.addPendingEffect(RuleId.DrawEffect);
10
+ }
11
+ getDrawCount() {
12
+ const myHand = this.material(MaterialType.Card).location(LocationType.PlayerHand).player(this.player).length;
13
+ const foeHand = this.material(MaterialType.Card).location(LocationType.PlayerHand).player(this.foe).length;
14
+ return myHand + 1 < foeHand ? 2 : 1;
15
+ }
16
+ }
17
+ export const CrystalMining = {
18
+ power: 3,
19
+ type: CardType.Action,
20
+ suit: CardSuit.Day,
21
+ rule: CrystalMiningRule
22
+ };
@@ -0,0 +1,4 @@
1
+ import { DrawEffectRule } from '../../../rules/DrawEffectRule';
2
+ export declare class CrystalMiningBonusEffectRule extends DrawEffectRule {
3
+ get drawCount(): 1 | 0;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { LocationType } from '../../LocationType';
2
+ import { MaterialType } from '../../MaterialType';
3
+ import { DrawEffectRule } from '../../../rules/DrawEffectRule';
4
+ export class CrystalMiningBonusEffectRule extends DrawEffectRule {
5
+ get drawCount() {
6
+ const myHand = this.material(MaterialType.Card).location(LocationType.PlayerHand).player(this.player).length;
7
+ const foeHand = this.material(MaterialType.Card).location(LocationType.PlayerHand).player(this.nextPlayer).length;
8
+ return myHand < foeHand ? 1 : 0;
9
+ }
10
+ }
@@ -0,0 +1,15 @@
1
+ import { CardRule } from '../../CardRule';
2
+ import { CardSuit } from '../../CardSuit';
3
+ import { CardType } from '../../CardType';
4
+ import { DrawEffect } from '../../EffectTraits';
5
+ declare class CrystalShaftRule extends CardRule implements DrawEffect {
6
+ onSkirmishWin(): void;
7
+ getDrawCount(): number;
8
+ }
9
+ export declare const CrystalShaft: {
10
+ power: number;
11
+ type: CardType;
12
+ suit: CardSuit;
13
+ rule: typeof CrystalShaftRule;
14
+ };
15
+ export {};
@@ -0,0 +1,18 @@
1
+ import { RuleId } from '../../../rules/RuleId';
2
+ import { CardRule } from '../../CardRule';
3
+ import { CardSuit } from '../../CardSuit';
4
+ import { CardType } from '../../CardType';
5
+ class CrystalShaftRule extends CardRule {
6
+ onSkirmishWin() {
7
+ this.addPendingEffect(RuleId.DrawEffect);
8
+ }
9
+ getDrawCount() {
10
+ return 3;
11
+ }
12
+ }
13
+ export const CrystalShaft = {
14
+ power: 4,
15
+ type: CardType.Action,
16
+ suit: CardSuit.Night,
17
+ rule: CrystalShaftRule
18
+ };
@@ -0,0 +1,13 @@
1
+ import { CardRule } from '../../CardRule';
2
+ import { CardSuit } from '../../CardSuit';
3
+ import { CardType } from '../../CardType';
4
+ declare class CycleKeeperRule extends CardRule {
5
+ onEnters(): void;
6
+ }
7
+ export declare const CycleKeeper: {
8
+ power: number;
9
+ type: CardType;
10
+ suit: CardSuit;
11
+ rule: typeof CycleKeeperRule;
12
+ };
13
+ export {};
@@ -0,0 +1,15 @@
1
+ import { RuleId } from '../../../rules/RuleId';
2
+ import { CardRule } from '../../CardRule';
3
+ import { CardSuit } from '../../CardSuit';
4
+ import { CardType } from '../../CardType';
5
+ class CycleKeeperRule extends CardRule {
6
+ onEnters() {
7
+ this.addPendingEffect(RuleId.CycleKeeperEffect);
8
+ }
9
+ }
10
+ export const CycleKeeper = {
11
+ power: 1,
12
+ type: CardType.Creature,
13
+ suit: CardSuit.Twilight,
14
+ rule: CycleKeeperRule
15
+ };