@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.
- package/dist/CustomMoveType.d.ts +3 -1
- package/dist/CustomMoveType.js +2 -0
- package/dist/Deck.d.ts +2 -0
- package/dist/Deck.js +2 -0
- package/dist/Memory.d.ts +10 -9
- package/dist/Memory.js +10 -9
- package/dist/SkyriftRules.d.ts +20 -8
- package/dist/SkyriftRules.js +16 -4
- package/dist/SkyriftSetup.js +4 -0
- package/dist/material/Card.d.ts +32 -0
- package/dist/material/Card.js +32 -0
- package/dist/material/CardProperties.js +64 -0
- package/dist/material/CardRule.d.ts +9 -4
- package/dist/material/CardRule.js +70 -22
- package/dist/material/Effect.d.ts +2 -0
- package/dist/material/EffectTraits.d.ts +7 -2
- package/dist/material/OngoingEffect.d.ts +11 -2
- package/dist/material/OngoingEffect.js +7 -1
- package/dist/material/decks/BlackHive.d.ts +18 -0
- package/dist/material/decks/BlackHive.js +19 -0
- package/dist/material/decks/MoonDragon.d.ts +18 -0
- package/dist/material/decks/MoonDragon.js +19 -0
- package/dist/material/decks/blackhive/CarefulExcavation.d.ts +21 -0
- package/dist/material/decks/blackhive/CarefulExcavation.js +31 -0
- package/dist/material/decks/blackhive/CaveIn.d.ts +14 -0
- package/dist/material/decks/blackhive/CaveIn.js +18 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.d.ts +10 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.js +55 -0
- package/dist/material/decks/blackhive/CrystalMining.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalMining.js +22 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.js +10 -0
- package/dist/material/decks/blackhive/CrystalShaft.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalShaft.js +18 -0
- package/dist/material/decks/blackhive/CycleKeeper.d.ts +13 -0
- package/dist/material/decks/blackhive/CycleKeeper.js +15 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.d.ts +8 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.js +21 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.d.ts +13 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarm.d.ts +13 -0
- package/dist/material/decks/blackhive/DarkSwarm.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.d.ts +6 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.js +18 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.d.ts +15 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.js +19 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.d.ts +16 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.js +19 -0
- package/dist/material/decks/blackhive/GromIronspike.d.ts +13 -0
- package/dist/material/decks/blackhive/GromIronspike.js +18 -0
- package/dist/material/decks/blackhive/GuntarRustypike.d.ts +20 -0
- package/dist/material/decks/blackhive/GuntarRustypike.js +28 -0
- package/dist/material/decks/blackhive/HiveMother.d.ts +13 -0
- package/dist/material/decks/blackhive/HiveMother.js +18 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.d.ts +13 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.js +22 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.js +20 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.d.ts +13 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.js +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.d.ts +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.js +22 -0
- package/dist/material/decks/blackhive/UndergroundScourge.d.ts +13 -0
- package/dist/material/decks/blackhive/UndergroundScourge.js +15 -0
- package/dist/material/decks/gravehurt/CavernSkulker.d.ts +4 -1
- package/dist/material/decks/gravehurt/CavernSkulker.js +18 -5
- package/dist/material/decks/gravehurt/CavernSkulkerEffectRule.js +1 -1
- package/dist/material/decks/gravehurt/Doom.d.ts +5 -1
- package/dist/material/decks/gravehurt/Doom.js +16 -2
- package/dist/material/decks/gravehurt/Nosferatis.d.ts +2 -2
- package/dist/material/decks/gravehurt/Nosferatis.js +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.d.ts +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.js +2 -2
- package/dist/material/decks/gravehurt/Umbraboros.d.ts +1 -1
- package/dist/material/decks/gravehurt/Umbraboros.js +4 -3
- package/dist/material/decks/gravehurt/WitchingHour.d.ts +3 -3
- package/dist/material/decks/gravehurt/WitchingHour.js +3 -3
- package/dist/material/decks/heathblade/Armada.js +1 -1
- package/dist/material/decks/heathblade/HedgeKnight.d.ts +1 -1
- package/dist/material/decks/heathblade/HedgeKnight.js +3 -4
- package/dist/material/decks/heathblade/PrincessLithaEffectRule.d.ts +2 -1
- package/dist/material/decks/highwave/EyeOfSky.d.ts +1 -1
- package/dist/material/decks/highwave/EyeOfSky.js +2 -2
- package/dist/material/decks/moondragon/AkiraClearink.d.ts +13 -0
- package/dist/material/decks/moondragon/AkiraClearink.js +15 -0
- package/dist/material/decks/moondragon/AzureDragonsPeace.d.ts +13 -0
- package/dist/material/decks/moondragon/AzureDragonsPeace.js +18 -0
- package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.d.ts +10 -0
- package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.js +49 -0
- package/dist/material/decks/moondragon/CopyPlayEffectRule.d.ts +6 -0
- package/dist/material/decks/moondragon/CopyPlayEffectRule.js +33 -0
- package/dist/material/decks/moondragon/DartYusagi.d.ts +14 -0
- package/dist/material/decks/moondragon/DartYusagi.js +26 -0
- package/dist/material/decks/moondragon/DuelOfHonor.d.ts +19 -0
- package/dist/material/decks/moondragon/DuelOfHonor.js +35 -0
- package/dist/material/decks/moondragon/Embush.d.ts +17 -0
- package/dist/material/decks/moondragon/Embush.js +26 -0
- package/dist/material/decks/moondragon/EmbushEffectRule.d.ts +7 -0
- package/dist/material/decks/moondragon/EmbushEffectRule.js +26 -0
- package/dist/material/decks/moondragon/EmpressSama.d.ts +13 -0
- package/dist/material/decks/moondragon/EmpressSama.js +15 -0
- package/dist/material/decks/moondragon/EmpressSamaEffectRule.d.ts +7 -0
- package/dist/material/decks/moondragon/EmpressSamaEffectRule.js +29 -0
- package/dist/material/decks/moondragon/GardenProtector.d.ts +15 -0
- package/dist/material/decks/moondragon/GardenProtector.js +18 -0
- package/dist/material/decks/moondragon/ImperialBlade.d.ts +16 -0
- package/dist/material/decks/moondragon/ImperialBlade.js +19 -0
- package/dist/material/decks/moondragon/LotusMuse.d.ts +17 -0
- package/dist/material/decks/moondragon/LotusMuse.js +34 -0
- package/dist/material/decks/moondragon/LotusMuseEffectRule.d.ts +6 -0
- package/dist/material/decks/moondragon/LotusMuseEffectRule.js +24 -0
- package/dist/material/decks/moondragon/PortalOfTheAncestors.d.ts +16 -0
- package/dist/material/decks/moondragon/PortalOfTheAncestors.js +21 -0
- package/dist/material/decks/moondragon/RiteOfTastes.d.ts +15 -0
- package/dist/material/decks/moondragon/RiteOfTastes.js +18 -0
- package/dist/material/decks/moondragon/RoosterDance.d.ts +16 -0
- package/dist/material/decks/moondragon/RoosterDance.js +19 -0
- package/dist/material/decks/moondragon/ShardsAlchimist.d.ts +16 -0
- package/dist/material/decks/moondragon/ShardsAlchimist.js +22 -0
- package/dist/material/decks/moondragon/SpiritOracle.d.ts +16 -0
- package/dist/material/decks/moondragon/SpiritOracle.js +27 -0
- package/dist/material/decks/moondragon/SteppesColossus.d.ts +13 -0
- package/dist/material/decks/moondragon/SteppesColossus.js +15 -0
- package/dist/material/decks/moondragon/YoruNightink.d.ts +13 -0
- package/dist/material/decks/moondragon/YoruNightink.js +18 -0
- package/dist/material/decks/windsands/AbiSnakeCharmer.d.ts +4 -1
- package/dist/material/decks/windsands/AbiSnakeCharmer.js +14 -1
- package/dist/material/decks/windsands/DeathTrap.d.ts +2 -0
- package/dist/material/decks/windsands/DeathTrap.js +4 -0
- package/dist/material/decks/windsands/MalikShadowtracker.d.ts +3 -3
- package/dist/material/decks/windsands/MalikShadowtracker.js +4 -4
- package/dist/material/decks/windsands/OasisShaman.d.ts +3 -1
- package/dist/material/decks/windsands/OasisShaman.js +3 -0
- package/dist/rules/ChallengeEffectRule.d.ts +2 -1
- package/dist/rules/ChallengeResponseRule.d.ts +2 -1
- package/dist/rules/DiscardEffectRule.js +1 -1
- package/dist/rules/DrawEffectRule.js +1 -1
- package/dist/rules/EffectRule.js +7 -1
- package/dist/rules/EffectsHelper.d.ts +6 -0
- package/dist/rules/EffectsHelper.js +15 -0
- package/dist/rules/EndPlayerTurnRule.d.ts +2 -1
- package/dist/rules/EndPlayerTurnRule.js +3 -0
- package/dist/rules/EndRoundRule.d.ts +1 -1
- package/dist/rules/GainCrystalEffectRule.js +1 -1
- package/dist/rules/MulliganEffectRule.d.ts +2 -1
- package/dist/rules/MulliganEffectRule.js +15 -4
- package/dist/rules/PlayCardEffectRule.d.ts +1 -0
- package/dist/rules/PlayCardEffectRule.js +9 -2
- package/dist/rules/PlayCardRule.d.ts +0 -1
- package/dist/rules/PlayCardRule.js +1 -4
- package/dist/rules/PlayerHelper.d.ts +2 -1
- package/dist/rules/PlayerHelper.js +24 -17
- package/dist/rules/PrepareNextRoundRule.d.ts +5 -1
- package/dist/rules/PrepareNextRoundRule.js +4 -2
- package/dist/rules/RuleId.d.ts +8 -2
- package/dist/rules/RuleId.js +8 -2
- package/dist/rules/SimultaneousEffectRule.d.ts +5 -0
- package/dist/rules/SimultaneousEffectRule.js +14 -0
- package/dist/rules/StartPlayerTurnRule.js +20 -2
- package/dist/rules/StashPowerTokensEffectRule.js +1 -1
- package/dist/rules/StealCrystalEffectRule.js +2 -2
- package/dist/rules/SwitchSideEffectRule.d.ts +3 -5
- package/dist/rules/SwitchSideEffectRule.js +2 -6
- package/package.json +3 -3
package/dist/CustomMoveType.d.ts
CHANGED
package/dist/CustomMoveType.js
CHANGED
|
@@ -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
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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["
|
|
5
|
-
Memory[Memory["
|
|
6
|
-
Memory[Memory["
|
|
7
|
-
Memory[Memory["
|
|
8
|
-
Memory[Memory["
|
|
9
|
-
Memory[Memory["
|
|
10
|
-
Memory[Memory["
|
|
11
|
-
Memory[Memory["
|
|
12
|
-
Memory[Memory["
|
|
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 = {}));
|
package/dist/SkyriftRules.d.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
}
|
package/dist/SkyriftRules.js
CHANGED
|
@@ -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 {
|
|
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.
|
|
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
|
};
|
package/dist/SkyriftSetup.js
CHANGED
|
@@ -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 {
|
package/dist/material/Card.d.ts
CHANGED
|
@@ -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,
|
package/dist/material/Card.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
101
|
-
for (const effect of
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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;
|
|
@@ -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
|
|
47
|
-
|
|
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
|
-
|
|
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
|
};
|