@gamepark/skyrift 0.3.0 → 0.4.1
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/Deck.d.ts +2 -1
- package/dist/Deck.js +2 -1
- package/dist/Memory.d.ts +1 -1
- package/dist/Memory.js +1 -1
- package/dist/SkyriftRules.d.ts +32 -63
- package/dist/SkyriftRules.js +40 -71
- package/dist/SkyriftSetup.js +4 -2
- package/dist/material/Card.d.ts +16 -0
- package/dist/material/Card.js +16 -0
- package/dist/material/CardProperties.js +48 -16
- package/dist/material/CardRule.d.ts +24 -20
- package/dist/material/CardRule.js +48 -65
- package/dist/material/CardTag.d.ts +2 -1
- package/dist/material/CardTag.js +2 -1
- package/dist/material/Effect.d.ts +1 -1
- package/dist/material/EffectTraits.d.ts +51 -0
- package/dist/material/EffectTraits.js +1 -0
- package/dist/material/LocationType.d.ts +3 -1
- package/dist/material/LocationType.js +2 -0
- package/dist/material/MaterialType.d.ts +2 -1
- package/dist/material/MaterialType.js +1 -0
- package/dist/material/OngoingEffect.d.ts +2 -2
- package/dist/material/OngoingEffect.js +2 -2
- package/dist/material/SpecialTokenType.d.ts +3 -0
- package/dist/material/SpecialTokenType.js +4 -0
- package/dist/material/createCardRule.d.ts +3 -0
- package/dist/material/createCardRule.js +7 -0
- package/dist/material/decks/GraveHurt.d.ts +18 -0
- package/dist/material/decks/GraveHurt.js +19 -0
- package/dist/material/decks/WindSands.d.ts +18 -0
- package/dist/material/decks/WindSands.js +19 -0
- package/dist/material/decks/gravehurt/AstralHammer.d.ts +18 -0
- package/dist/material/decks/gravehurt/AstralHammer.js +25 -0
- package/dist/material/decks/gravehurt/AstralHammerEffectRule.d.ts +4 -0
- package/dist/material/decks/gravehurt/AstralHammerEffectRule.js +26 -0
- package/dist/material/decks/gravehurt/CallOfTheEclipse.d.ts +17 -0
- package/dist/material/decks/gravehurt/CallOfTheEclipse.js +28 -0
- package/dist/material/decks/gravehurt/CallOfTheEclipseEffectRule.d.ts +5 -0
- package/dist/material/decks/gravehurt/CallOfTheEclipseEffectRule.js +11 -0
- package/dist/material/decks/gravehurt/CavernSkulker.d.ts +16 -0
- package/dist/material/decks/gravehurt/CavernSkulker.js +26 -0
- package/dist/material/decks/gravehurt/CavernSkulkerEffectRule.d.ts +4 -0
- package/dist/material/decks/gravehurt/CavernSkulkerEffectRule.js +15 -0
- package/dist/material/decks/gravehurt/Doom.d.ts +18 -0
- package/dist/material/decks/gravehurt/Doom.js +29 -0
- package/dist/material/decks/gravehurt/DoomEffectRule.d.ts +8 -0
- package/dist/material/decks/gravehurt/DoomEffectRule.js +32 -0
- package/dist/material/decks/gravehurt/InsatiableUmbraphage.d.ts +19 -0
- package/dist/material/decks/gravehurt/InsatiableUmbraphage.js +28 -0
- package/dist/material/decks/gravehurt/InsatiableUmbraphageEffectRule.d.ts +5 -0
- package/dist/material/decks/gravehurt/InsatiableUmbraphageEffectRule.js +21 -0
- package/dist/material/decks/gravehurt/MacabreLegion.d.ts +17 -0
- package/dist/material/decks/gravehurt/MacabreLegion.js +20 -0
- package/dist/material/decks/gravehurt/MoonFang.d.ts +17 -0
- package/dist/material/decks/gravehurt/MoonFang.js +20 -0
- package/dist/material/decks/gravehurt/Nosferatis.d.ts +20 -0
- package/dist/material/decks/gravehurt/Nosferatis.js +29 -0
- package/dist/material/decks/gravehurt/OstraVoiceOfTheSoul.d.ts +12 -0
- package/dist/material/decks/gravehurt/OstraVoiceOfTheSoul.js +11 -0
- package/dist/material/decks/gravehurt/ReturnInTime.d.ts +15 -0
- package/dist/material/decks/gravehurt/ReturnInTime.js +18 -0
- package/dist/material/decks/gravehurt/ScrabDoombird.d.ts +18 -0
- package/dist/material/decks/gravehurt/ScrabDoombird.js +21 -0
- package/dist/material/decks/gravehurt/TerrifyingSummoning.d.ts +18 -0
- package/dist/material/decks/gravehurt/TerrifyingSummoning.js +26 -0
- package/dist/material/decks/gravehurt/TerrifyingSummoningEffectRule.d.ts +5 -0
- package/dist/material/decks/gravehurt/TerrifyingSummoningEffectRule.js +11 -0
- package/dist/material/decks/gravehurt/TheGreatToady.d.ts +19 -0
- package/dist/material/decks/gravehurt/TheGreatToady.js +42 -0
- package/dist/material/decks/gravehurt/Umbraboros.d.ts +22 -0
- package/dist/material/decks/gravehurt/Umbraboros.js +30 -0
- package/dist/material/decks/gravehurt/UndeadRule.d.ts +5 -0
- package/dist/material/decks/gravehurt/UndeadRule.js +11 -0
- package/dist/material/decks/gravehurt/Whisperers.d.ts +13 -0
- package/dist/material/decks/gravehurt/Whisperers.js +17 -0
- package/dist/material/decks/gravehurt/WitchingHour.d.ts +16 -0
- package/dist/material/decks/gravehurt/WitchingHour.js +19 -0
- package/dist/material/decks/heathblade/ArcherRule.js +2 -2
- package/dist/material/decks/heathblade/Armada.d.ts +4 -3
- package/dist/material/decks/heathblade/Armada.js +5 -3
- package/dist/material/decks/heathblade/ArmadaEffectRule.d.ts +2 -1
- package/dist/material/decks/heathblade/ArmadaEffectRule.js +8 -1
- package/dist/material/decks/heathblade/Confluence.d.ts +2 -3
- package/dist/material/decks/heathblade/Confluence.js +5 -3
- package/dist/material/decks/heathblade/CoverOfNight.d.ts +4 -2
- package/dist/material/decks/heathblade/CoverOfNight.js +7 -1
- package/dist/material/decks/heathblade/Harvest.d.ts +4 -2
- package/dist/material/decks/heathblade/Harvest.js +7 -1
- package/dist/material/decks/heathblade/LoyalSquire.d.ts +6 -3
- package/dist/material/decks/heathblade/LoyalSquire.js +11 -4
- package/dist/material/decks/heathblade/Nightguard.js +3 -9
- package/dist/material/decks/heathblade/OzmaTheMage.d.ts +6 -4
- package/dist/material/decks/heathblade/OzmaTheMage.js +9 -3
- package/dist/material/decks/heathblade/PrincessLitha.d.ts +1 -2
- package/dist/material/decks/heathblade/PrincessLitha.js +4 -11
- package/dist/material/decks/heathblade/RobbinsMasterOfArms.d.ts +6 -2
- package/dist/material/decks/heathblade/RobbinsMasterOfArms.js +10 -1
- package/dist/material/decks/heathblade/Sacrifice.d.ts +7 -2
- package/dist/material/decks/heathblade/Sacrifice.js +19 -1
- package/dist/material/decks/heathblade/SoulBlade.d.ts +5 -2
- package/dist/material/decks/heathblade/SoulBlade.js +8 -1
- package/dist/material/decks/heathblade/WatchTower.d.ts +5 -3
- package/dist/material/decks/heathblade/WatchTower.js +10 -3
- package/dist/material/decks/highwave/AeliaSteadyHand.d.ts +1 -1
- package/dist/material/decks/highwave/AeliaSteadyHand.js +4 -1
- package/dist/material/decks/highwave/BoardingParty.d.ts +1 -1
- package/dist/material/decks/highwave/BoardingParty.js +4 -1
- package/dist/material/decks/highwave/BoardingPartyEffectRule.d.ts +4 -3
- package/dist/material/decks/highwave/BoardingPartyEffectRule.js +18 -23
- package/dist/material/decks/highwave/BonnyTheGunner.d.ts +0 -2
- package/dist/material/decks/highwave/BonnyTheGunner.js +0 -2
- package/dist/material/decks/highwave/CannonCardRule.d.ts +3 -0
- package/dist/material/decks/highwave/CannonCardRule.js +11 -10
- package/dist/material/decks/highwave/DarkArmageddon.d.ts +4 -2
- package/dist/material/decks/highwave/DarkArmageddon.js +7 -1
- package/dist/material/decks/highwave/DawnsDoom.d.ts +4 -2
- package/dist/material/decks/highwave/DawnsDoom.js +9 -1
- package/dist/material/decks/highwave/EyeOfSky.d.ts +2 -4
- package/dist/material/decks/highwave/EyeOfSky.js +5 -7
- package/dist/material/decks/highwave/EyeOfSkyEffectRule.d.ts +4 -4
- package/dist/material/decks/highwave/EyeOfSkyEffectRule.js +1 -3
- package/dist/material/decks/highwave/FortunesCourse.d.ts +1 -2
- package/dist/material/decks/highwave/FortunesCourse.js +3 -3
- package/dist/material/decks/highwave/GoldenApocalypse.d.ts +1 -1
- package/dist/material/decks/highwave/GoldenApocalypse.js +4 -1
- package/dist/material/decks/highwave/LongJawsSilver.d.ts +2 -3
- package/dist/material/decks/highwave/LongJawsSilver.js +7 -5
- package/dist/material/decks/highwave/OscarScullion.d.ts +4 -2
- package/dist/material/decks/highwave/OscarScullion.js +7 -1
- package/dist/material/decks/highwave/OttoFactotum.d.ts +4 -2
- package/dist/material/decks/highwave/OttoFactotum.js +10 -1
- package/dist/material/decks/highwave/RiggingRaiders.d.ts +5 -2
- package/dist/material/decks/highwave/RiggingRaiders.js +9 -1
- package/dist/material/decks/highwave/SeaScorcher.d.ts +6 -3
- package/dist/material/decks/highwave/SeaScorcher.js +13 -2
- package/dist/material/decks/highwave/SurpriseLoot.d.ts +4 -2
- package/dist/material/decks/highwave/SurpriseLoot.js +7 -1
- package/dist/material/decks/highwave/TideRover.d.ts +6 -2
- package/dist/material/decks/highwave/TideRover.js +15 -1
- package/dist/material/decks/highwave/TropicalRuffian.d.ts +1 -1
- package/dist/material/decks/highwave/TropicalRuffian.js +4 -1
- package/dist/material/decks/windsands/AbiSnakeCharmer.d.ts +13 -0
- package/dist/material/decks/windsands/AbiSnakeCharmer.js +15 -0
- package/dist/material/decks/windsands/AbiSnakeCharmerEffectRule.d.ts +8 -0
- package/dist/material/decks/windsands/AbiSnakeCharmerEffectRule.js +35 -0
- package/dist/material/decks/windsands/AncientCurse.d.ts +17 -0
- package/dist/material/decks/windsands/AncientCurse.js +25 -0
- package/dist/material/decks/windsands/Catadjinn.d.ts +14 -0
- package/dist/material/decks/windsands/Catadjinn.js +20 -0
- package/dist/material/decks/windsands/DeathTrap.d.ts +20 -0
- package/dist/material/decks/windsands/DeathTrap.js +38 -0
- package/dist/material/decks/windsands/DesertRaider.d.ts +17 -0
- package/dist/material/decks/windsands/DesertRaider.js +21 -0
- package/dist/material/decks/windsands/DuneWardrums.d.ts +12 -0
- package/dist/material/decks/windsands/DuneWardrums.js +14 -0
- package/dist/material/decks/windsands/ErgDeathslayer.d.ts +13 -0
- package/dist/material/decks/windsands/ErgDeathslayer.js +15 -0
- package/dist/material/decks/windsands/MalikShadowtracker.d.ts +18 -0
- package/dist/material/decks/windsands/MalikShadowtracker.js +24 -0
- package/dist/material/decks/windsands/Metamorph.d.ts +14 -0
- package/dist/material/decks/windsands/Metamorph.js +18 -0
- package/dist/material/decks/windsands/MushaFakir.d.ts +14 -0
- package/dist/material/decks/windsands/MushaFakir.js +18 -0
- package/dist/material/decks/windsands/OasisShaman.d.ts +13 -0
- package/dist/material/decks/windsands/OasisShaman.js +15 -0
- package/dist/material/decks/windsands/SandWalkers.d.ts +21 -0
- package/dist/material/decks/windsands/SandWalkers.js +30 -0
- package/dist/material/decks/windsands/StarlightBazaar.d.ts +15 -0
- package/dist/material/decks/windsands/StarlightBazaar.js +18 -0
- package/dist/material/decks/windsands/Vandals.d.ts +18 -0
- package/dist/material/decks/windsands/Vandals.js +25 -0
- package/dist/material/decks/windsands/WindWrath.d.ts +13 -0
- package/dist/material/decks/windsands/WindWrath.js +15 -0
- package/dist/material/decks/windsands/WindWrathEffectRule.d.ts +5 -0
- package/dist/material/decks/windsands/WindWrathEffectRule.js +17 -0
- package/dist/material/decks/windsands/WishLamp.d.ts +16 -0
- package/dist/material/decks/windsands/WishLamp.js +22 -0
- package/dist/rules/ChallengeEffectRule.d.ts +6 -0
- package/dist/rules/ChallengeEffectRule.js +17 -0
- package/dist/rules/ChallengeResponseRule.d.ts +8 -0
- package/dist/rules/ChallengeResponseRule.js +31 -0
- package/dist/rules/ChooseStartPlayerEffectRule.d.ts +6 -0
- package/dist/rules/ChooseStartPlayerEffectRule.js +15 -0
- package/dist/rules/DestroyEffectRule.d.ts +5 -2
- package/dist/rules/DestroyEffectRule.js +26 -3
- package/dist/rules/DiscardEffectRule.d.ts +5 -3
- package/dist/rules/DiscardEffectRule.js +17 -4
- package/dist/rules/DrawEffectRule.d.ts +4 -2
- package/dist/rules/DrawEffectRule.js +9 -6
- package/dist/rules/EffectRule.d.ts +3 -2
- package/dist/rules/EffectRule.js +9 -3
- package/dist/rules/EndRoundRule.js +11 -17
- package/dist/rules/GainPowerTokensEffectRule.d.ts +8 -0
- package/dist/rules/GainPowerTokensEffectRule.js +25 -0
- package/dist/rules/MulliganEffectRule.d.ts +7 -0
- package/dist/rules/MulliganEffectRule.js +19 -0
- package/dist/rules/PlayCardEffectRule.d.ts +9 -0
- package/dist/rules/PlayCardEffectRule.js +37 -0
- package/dist/rules/PlayCardRule.js +12 -12
- package/dist/rules/PlayerHelper.d.ts +9 -5
- package/dist/rules/PlayerHelper.js +25 -23
- package/dist/rules/PrepareNextRoundRule.js +6 -3
- package/dist/rules/PutCardUnderEffectRule.d.ts +7 -0
- package/dist/rules/PutCardUnderEffectRule.js +22 -0
- package/dist/rules/PutPowerTokenEffectRule.d.ts +4 -2
- package/dist/rules/PutPowerTokenEffectRule.js +24 -4
- package/dist/rules/ReturnCardEffectRule.d.ts +9 -0
- package/dist/rules/ReturnCardEffectRule.js +36 -0
- package/dist/rules/ReturnCardRule.d.ts +5 -3
- package/dist/rules/ReturnCardRule.js +18 -8
- package/dist/rules/RuleId.d.ts +15 -34
- package/dist/rules/RuleId.js +14 -33
- package/dist/rules/StartPlayerTurnRule.js +5 -5
- package/dist/rules/StashPowerTokensEffectRule.d.ts +5 -0
- package/dist/rules/StashPowerTokensEffectRule.js +15 -0
- package/dist/rules/StealCrystalEffectRule.js +3 -3
- package/dist/rules/StunCardRule.d.ts +4 -2
- package/dist/rules/StunCardRule.js +24 -19
- package/dist/rules/StunEffectRule.d.ts +11 -0
- package/dist/rules/StunEffectRule.js +45 -0
- package/dist/rules/SwitchSideEffectRule.d.ts +11 -0
- package/dist/rules/SwitchSideEffectRule.js +33 -0
- package/package.json +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
-
import { CustomMoveType } from '../CustomMoveType';
|
|
3
2
|
import { Memory } from '../Memory';
|
|
4
|
-
import { RuleId } from '../rules/RuleId';
|
|
5
3
|
import { cardProperties } from './CardProperties';
|
|
6
4
|
import { CardSuit } from './CardSuit';
|
|
5
|
+
import { CardType } from './CardType';
|
|
6
|
+
import { createCardRule } from './createCardRule';
|
|
7
7
|
import { LocationType } from './LocationType';
|
|
8
8
|
import { MaterialType } from './MaterialType';
|
|
9
9
|
import { OngoingEffectType } from './OngoingEffect';
|
|
@@ -13,40 +13,16 @@ export class CardRule extends MaterialRulesPart {
|
|
|
13
13
|
super(game);
|
|
14
14
|
this.index = index;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
if (this.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
onRoundEnd(win) {
|
|
26
|
-
return win ? this.onWinRound() : this.onLoseRound();
|
|
27
|
-
}
|
|
28
|
-
onWinRound() {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
onLoseRound() {
|
|
32
|
-
return [];
|
|
33
|
-
}
|
|
34
|
-
onCardEnters(_card, _side) {
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
oncePerTurnEffect = false;
|
|
38
|
-
entersEffect = false;
|
|
39
|
-
challenge = false;
|
|
40
|
-
onChallengeAccepted() {
|
|
41
|
-
return [this.customMove(CustomMoveType.EndEffect)];
|
|
16
|
+
canActivate() {
|
|
17
|
+
if (!this.activate)
|
|
18
|
+
return false;
|
|
19
|
+
if (this.isStunned())
|
|
20
|
+
return false;
|
|
21
|
+
const activatedCards = this.remind(Memory.ActivatedCards);
|
|
22
|
+
return !activatedCards.includes(this.index);
|
|
42
23
|
}
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
this.memorize(Memory.ChallengeConceded, true);
|
|
46
|
-
return [this.startPlayerTurn(RuleId.EndRound, this.opponent)];
|
|
47
|
-
}
|
|
48
|
-
onLeave() {
|
|
49
|
-
return [...this.removePowerTokens(), ...this.removeStunTokens()];
|
|
24
|
+
onLeaves() {
|
|
25
|
+
return [...this.removePowerTokens(), ...this.removeStunTokens(), ...this.removeSpecialTokens()];
|
|
50
26
|
}
|
|
51
27
|
removePowerTokens() {
|
|
52
28
|
const tokens = this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index);
|
|
@@ -56,6 +32,10 @@ export class CardRule extends MaterialRulesPart {
|
|
|
56
32
|
const tokens = this.material(MaterialType.StunToken).location(LocationType.CardStunTokens).parent(this.index);
|
|
57
33
|
return tokens.getQuantity() > 0 ? [tokens.deleteItem(tokens.getQuantity())] : [];
|
|
58
34
|
}
|
|
35
|
+
removeSpecialTokens() {
|
|
36
|
+
const tokens = this.material(MaterialType.SpecialToken).location(LocationType.CardSpecialTokens).parent(this.index);
|
|
37
|
+
return tokens.getQuantity() > 0 ? [tokens.deleteItem(tokens.getQuantity())] : [];
|
|
38
|
+
}
|
|
59
39
|
get item() {
|
|
60
40
|
return this.material(MaterialType.Card).getItem(this.index);
|
|
61
41
|
}
|
|
@@ -65,6 +45,12 @@ export class CardRule extends MaterialRulesPart {
|
|
|
65
45
|
get properties() {
|
|
66
46
|
return cardProperties[this.card];
|
|
67
47
|
}
|
|
48
|
+
get playArea() {
|
|
49
|
+
return this.material(MaterialType.Card).location(LocationType.PlayArea);
|
|
50
|
+
}
|
|
51
|
+
get creatures() {
|
|
52
|
+
return this.playArea.id((id) => cardProperties[id.front].type === CardType.Creature);
|
|
53
|
+
}
|
|
68
54
|
isStunned() {
|
|
69
55
|
return this.material(MaterialType.StunToken).location(LocationType.CardStunTokens).parent(this.index).getQuantity() > 0;
|
|
70
56
|
}
|
|
@@ -73,7 +59,7 @@ export class CardRule extends MaterialRulesPart {
|
|
|
73
59
|
return 0;
|
|
74
60
|
}
|
|
75
61
|
else {
|
|
76
|
-
return this.getPowerIfNotStunned();
|
|
62
|
+
return Math.max(this.getPowerIfNotStunned(), 0);
|
|
77
63
|
}
|
|
78
64
|
}
|
|
79
65
|
getPowerIfNotStunned() {
|
|
@@ -81,48 +67,45 @@ export class CardRule extends MaterialRulesPart {
|
|
|
81
67
|
const powerTokensCount = this.material(MaterialType.PowerToken).location(LocationType.CardPowerTokens).parent(this.index).getQuantity();
|
|
82
68
|
return basePower + powerTokensCount;
|
|
83
69
|
}
|
|
84
|
-
addPendingEffect() {
|
|
85
|
-
this.memorize(Memory.PendingEffects, (effects) => [...effects, { cardIndex: this.index }]);
|
|
70
|
+
addPendingEffect(ruleId) {
|
|
71
|
+
this.memorize(Memory.PendingEffects, (effects) => [...effects, { cardIndex: this.index, ruleId }]);
|
|
86
72
|
}
|
|
87
73
|
addOngoingEffect(type) {
|
|
88
74
|
this.memorize(Memory.OngoingEffects, (effects) => [...effects, { type, cardIndex: this.index }]);
|
|
89
75
|
}
|
|
76
|
+
removeOngoingEffect(type) {
|
|
77
|
+
this.memorize(Memory.OngoingEffects, (effects) => effects.filter((e) => !(e.type === type && e.cardIndex === this.index)));
|
|
78
|
+
}
|
|
90
79
|
get player() {
|
|
91
80
|
return this.item.location.player;
|
|
92
81
|
}
|
|
93
|
-
get
|
|
82
|
+
get foe() {
|
|
94
83
|
return this.game.players.find((p) => p !== this.player);
|
|
95
84
|
}
|
|
96
|
-
startEffect() {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const effect = pendingEffects[0];
|
|
102
|
-
if (effect.challenge) {
|
|
103
|
-
return [this.startPlayerTurn(RuleId.MayChallenge, this.player)];
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
return [this.startPlayerTurn(this.card, this.player)];
|
|
107
|
-
}
|
|
85
|
+
startEffect(effect) {
|
|
86
|
+
return [this.startPlayerTurn(effect.ruleId, this.getEffectPlayer(effect))];
|
|
87
|
+
}
|
|
88
|
+
getEffectPlayer(_effect) {
|
|
89
|
+
return this.player;
|
|
108
90
|
}
|
|
109
91
|
canBePlayed() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const sourceCard = this.material(MaterialType.Card).getItem(forcedSuit.cardIndex);
|
|
114
|
-
if (sourceCard.location.player !== this.player) {
|
|
115
|
-
const forcedSuitValue = cardProperties[sourceCard.id.front].suit;
|
|
116
|
-
if (this.properties.suit !== forcedSuitValue)
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
92
|
+
return this.canSuitBePlayed() && !this.ongoingEffectPreventsPlayCard();
|
|
93
|
+
}
|
|
94
|
+
canSuitBePlayed() {
|
|
120
95
|
const currentSuit = this.remind(Memory.Suit);
|
|
121
96
|
const cardSuit = this.properties.suit;
|
|
122
|
-
return !
|
|
97
|
+
return !currentSuit || cardSuit === CardSuit.Twilight || cardSuit === currentSuit;
|
|
123
98
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
99
|
+
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
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
127
110
|
}
|
|
128
111
|
}
|
package/dist/material/CardTag.js
CHANGED
|
@@ -2,5 +2,6 @@ export var CardTag;
|
|
|
2
2
|
(function (CardTag) {
|
|
3
3
|
CardTag[CardTag["Knight"] = 1] = "Knight";
|
|
4
4
|
CardTag[CardTag["Archer"] = 2] = "Archer";
|
|
5
|
-
CardTag[CardTag["
|
|
5
|
+
CardTag[CardTag["Undead"] = 3] = "Undead";
|
|
6
|
+
CardTag[CardTag["Cannon"] = 4] = "Cannon";
|
|
6
7
|
})(CardTag || (CardTag = {}));
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Material } from '@gamepark/rules-api';
|
|
2
|
+
import { Card } from './Card';
|
|
3
|
+
import { Deck } from '../Deck';
|
|
4
|
+
export interface DrawEffect {
|
|
5
|
+
getDrawCount?(): number;
|
|
6
|
+
getDrawPlayer?(): Deck;
|
|
7
|
+
}
|
|
8
|
+
export interface DiscardEffect {
|
|
9
|
+
getDiscardCount?(): number;
|
|
10
|
+
getDiscardTargets?(): Material;
|
|
11
|
+
isAutoDiscard?(): boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ReturnCardEffect {
|
|
14
|
+
getReturnTargets?(): Material;
|
|
15
|
+
isAutoReturn?(): boolean;
|
|
16
|
+
isReturnOptional?(): boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface DestroyEffect {
|
|
19
|
+
getDestroyTargets(): Material;
|
|
20
|
+
getDestroyCount?(): number;
|
|
21
|
+
isDestroyOptional?(): boolean;
|
|
22
|
+
isAutoDestroy?(): boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface PutPowerTokenEffect {
|
|
25
|
+
getPutPowerTokenTargets?(): Material;
|
|
26
|
+
getPutPowerTokenCount?(): number;
|
|
27
|
+
isAutoPutPowerToken?(): boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface StashPowerTokenEffect {
|
|
30
|
+
getStashPowerTokenCount?(): number;
|
|
31
|
+
}
|
|
32
|
+
export interface PlayCardEffect {
|
|
33
|
+
getPlayCardTargets?(): Material;
|
|
34
|
+
isPlayCardOptional?(): boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface ChallengeEffect {
|
|
37
|
+
onChallengeAccepted?(): void;
|
|
38
|
+
onChallengeDeclined?(): void;
|
|
39
|
+
}
|
|
40
|
+
export interface StunEffect {
|
|
41
|
+
getStunTargets?(): Material;
|
|
42
|
+
getStunCount?(): number;
|
|
43
|
+
getStunTargetsCount?(): number;
|
|
44
|
+
isAutoStun?(): boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface PreventPlayCardEffect {
|
|
47
|
+
preventPlayCard(card: Card, player: Deck): boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface PreventEffectsEffect {
|
|
50
|
+
preventEnterEffects(cardIndex: number): boolean;
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,4 +12,6 @@ export var LocationType;
|
|
|
12
12
|
LocationType[LocationType["CardPowerTokens"] = 10] = "CardPowerTokens";
|
|
13
13
|
LocationType[LocationType["CardStunTokens"] = 11] = "CardStunTokens";
|
|
14
14
|
LocationType[LocationType["PlayerStash"] = 12] = "PlayerStash";
|
|
15
|
+
LocationType[LocationType["CardSpecialTokens"] = 13] = "CardSpecialTokens";
|
|
16
|
+
LocationType[LocationType["UnderCard"] = 14] = "UnderCard";
|
|
15
17
|
})(LocationType || (LocationType = {}));
|
|
@@ -4,4 +4,5 @@ export var MaterialType;
|
|
|
4
4
|
MaterialType[MaterialType["Crystal"] = 2] = "Crystal";
|
|
5
5
|
MaterialType[MaterialType["PowerToken"] = 3] = "PowerToken";
|
|
6
6
|
MaterialType[MaterialType["StunToken"] = 4] = "StunToken";
|
|
7
|
+
MaterialType[MaterialType["SpecialToken"] = 5] = "SpecialToken";
|
|
7
8
|
})(MaterialType || (MaterialType = {}));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export var OngoingEffectType;
|
|
2
2
|
(function (OngoingEffectType) {
|
|
3
|
-
OngoingEffectType[OngoingEffectType["
|
|
4
|
-
OngoingEffectType[OngoingEffectType["
|
|
3
|
+
OngoingEffectType[OngoingEffectType["PreventPlayCard"] = 1] = "PreventPlayCard";
|
|
4
|
+
OngoingEffectType[OngoingEffectType["PreventEffects"] = 2] = "PreventEffects";
|
|
5
5
|
})(OngoingEffectType || (OngoingEffectType = {}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { cardProperties } from './CardProperties';
|
|
2
|
+
import { MaterialType } from './MaterialType';
|
|
3
|
+
export function createCardRule(game, cardIndex) {
|
|
4
|
+
const card = game.items[MaterialType.Card][cardIndex].id.front;
|
|
5
|
+
const Rule = cardProperties[card].rule;
|
|
6
|
+
return new Rule(game, cardIndex);
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const GraveHurt: {
|
|
2
|
+
301: number;
|
|
3
|
+
302: number;
|
|
4
|
+
303: number;
|
|
5
|
+
304: number;
|
|
6
|
+
305: number;
|
|
7
|
+
306: number;
|
|
8
|
+
307: number;
|
|
9
|
+
308: number;
|
|
10
|
+
309: number;
|
|
11
|
+
310: number;
|
|
12
|
+
311: number;
|
|
13
|
+
312: number;
|
|
14
|
+
313: number;
|
|
15
|
+
314: number;
|
|
16
|
+
315: number;
|
|
17
|
+
316: number;
|
|
18
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Card } from '../Card';
|
|
2
|
+
export const GraveHurt = {
|
|
3
|
+
[Card.MacabreLegion]: 2,
|
|
4
|
+
[Card.CavernSkulker]: 2,
|
|
5
|
+
[Card.TheGreatToady]: 1,
|
|
6
|
+
[Card.Umbraboros]: 1,
|
|
7
|
+
[Card.Nosferatis]: 2,
|
|
8
|
+
[Card.InsatiableUmbraphage]: 2,
|
|
9
|
+
[Card.ScrabDoombird]: 1,
|
|
10
|
+
[Card.MoonFang]: 2,
|
|
11
|
+
[Card.Whisperers]: 2,
|
|
12
|
+
[Card.OstraVoiceOfTheSoul]: 1,
|
|
13
|
+
[Card.TerrifyingSummoning]: 2,
|
|
14
|
+
[Card.ReturnInTime]: 1,
|
|
15
|
+
[Card.CallOfTheEclipse]: 1,
|
|
16
|
+
[Card.WitchingHour]: 2,
|
|
17
|
+
[Card.Doom]: 1,
|
|
18
|
+
[Card.AstralHammer]: 1
|
|
19
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const WindSands: {
|
|
2
|
+
201: number;
|
|
3
|
+
202: number;
|
|
4
|
+
203: number;
|
|
5
|
+
204: number;
|
|
6
|
+
205: number;
|
|
7
|
+
206: number;
|
|
8
|
+
207: number;
|
|
9
|
+
208: number;
|
|
10
|
+
209: number;
|
|
11
|
+
210: number;
|
|
12
|
+
211: number;
|
|
13
|
+
212: number;
|
|
14
|
+
213: number;
|
|
15
|
+
214: number;
|
|
16
|
+
215: number;
|
|
17
|
+
216: number;
|
|
18
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Card } from '../Card';
|
|
2
|
+
export const WindSands = {
|
|
3
|
+
[Card.DesertRaider]: 2,
|
|
4
|
+
[Card.Metamorph]: 2,
|
|
5
|
+
[Card.ErgDeathslayer]: 1,
|
|
6
|
+
[Card.AbiSnakeCharmer]: 1,
|
|
7
|
+
[Card.Catadjinn]: 2,
|
|
8
|
+
[Card.Vandals]: 2,
|
|
9
|
+
[Card.MushaFakir]: 1,
|
|
10
|
+
[Card.OasisShaman]: 2,
|
|
11
|
+
[Card.MalikShadowtracker]: 1,
|
|
12
|
+
[Card.DuneWardrums]: 2,
|
|
13
|
+
[Card.SandWalkers]: 1,
|
|
14
|
+
[Card.WishLamp]: 2,
|
|
15
|
+
[Card.StarlightBazaar]: 1,
|
|
16
|
+
[Card.AncientCurse]: 1,
|
|
17
|
+
[Card.WindWrath]: 1,
|
|
18
|
+
[Card.DeathTrap]: 2
|
|
19
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Material } from '@gamepark/rules-api';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
import { StunEffect } from '../../EffectTraits';
|
|
6
|
+
declare class AstralHammerRule extends CardRule implements StunEffect {
|
|
7
|
+
onEnters(): void;
|
|
8
|
+
getStunTargets(): Material;
|
|
9
|
+
getStunCount(): number;
|
|
10
|
+
isAutoStun(): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const AstralHammer: {
|
|
13
|
+
power: number;
|
|
14
|
+
type: CardType;
|
|
15
|
+
suit: CardSuit;
|
|
16
|
+
rule: typeof AstralHammerRule;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RuleId } from '../../../rules/RuleId';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { createCardRule } from '../../createCardRule';
|
|
4
|
+
import { CardSuit } from '../../CardSuit';
|
|
5
|
+
import { CardType } from '../../CardType';
|
|
6
|
+
class AstralHammerRule extends CardRule {
|
|
7
|
+
onEnters() {
|
|
8
|
+
this.addPendingEffect(RuleId.StunEffect);
|
|
9
|
+
}
|
|
10
|
+
getStunTargets() {
|
|
11
|
+
return this.creatures.player(this.foe).index((index) => createCardRule(this.game, index).getPower() <= 3);
|
|
12
|
+
}
|
|
13
|
+
getStunCount() {
|
|
14
|
+
return 2;
|
|
15
|
+
}
|
|
16
|
+
isAutoStun() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const AstralHammer = {
|
|
21
|
+
power: 2,
|
|
22
|
+
type: CardType.Action,
|
|
23
|
+
suit: CardSuit.Twilight,
|
|
24
|
+
rule: AstralHammerRule
|
|
25
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { PlayerHelper } from '../../../rules/PlayerHelper';
|
|
2
|
+
import { EffectRule } from '../../../rules/EffectRule';
|
|
3
|
+
import { cardProperties } from '../../CardProperties';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
import { LocationType } from '../../LocationType';
|
|
6
|
+
import { MaterialType } from '../../MaterialType';
|
|
7
|
+
export class AstralHammerEffectRule extends EffectRule {
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
const targets = this.material(MaterialType.Card)
|
|
10
|
+
.location(LocationType.PlayArea)
|
|
11
|
+
.player(this.nextPlayer)
|
|
12
|
+
.id((id) => cardProperties[id.front].type === CardType.Creature)
|
|
13
|
+
.index((index) => new PlayerHelper(this.game).getCardRule(index).getPower() <= 3);
|
|
14
|
+
const moves = [];
|
|
15
|
+
for (const index of targets.getIndexes()) {
|
|
16
|
+
moves.push(this.material(MaterialType.StunToken).createItem({
|
|
17
|
+
location: {
|
|
18
|
+
type: LocationType.CardStunTokens,
|
|
19
|
+
parent: index
|
|
20
|
+
},
|
|
21
|
+
quantity: 2
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
return [...moves, ...this.endEffect()];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Material } from '@gamepark/rules-api';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
import { PlayCardEffect } from '../../EffectTraits';
|
|
6
|
+
declare class CallOfTheEclipseRule extends CardRule implements PlayCardEffect {
|
|
7
|
+
onEnters(): void;
|
|
8
|
+
getPlayCardTargets(): Material;
|
|
9
|
+
isPlayCardOptional(): boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const CallOfTheEclipse: {
|
|
12
|
+
power: number;
|
|
13
|
+
type: CardType;
|
|
14
|
+
suit: CardSuit;
|
|
15
|
+
rule: typeof CallOfTheEclipseRule;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RuleId } from '../../../rules/RuleId';
|
|
2
|
+
import { cardProperties } from '../../CardProperties';
|
|
3
|
+
import { CardRule } from '../../CardRule';
|
|
4
|
+
import { CardSuit } from '../../CardSuit';
|
|
5
|
+
import { CardType } from '../../CardType';
|
|
6
|
+
import { LocationType } from '../../LocationType';
|
|
7
|
+
import { MaterialType } from '../../MaterialType';
|
|
8
|
+
class CallOfTheEclipseRule extends CardRule {
|
|
9
|
+
onEnters() {
|
|
10
|
+
this.addPendingEffect(RuleId.PlayCardEffect);
|
|
11
|
+
this.addPendingEffect(RuleId.ChallengeEffect);
|
|
12
|
+
}
|
|
13
|
+
getPlayCardTargets() {
|
|
14
|
+
return this.material(MaterialType.Card)
|
|
15
|
+
.location(LocationType.PlayerHand)
|
|
16
|
+
.player(this.player)
|
|
17
|
+
.id((id) => id.front !== undefined && cardProperties[id.front].suit === CardSuit.Night);
|
|
18
|
+
}
|
|
19
|
+
isPlayCardOptional() {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export const CallOfTheEclipse = {
|
|
24
|
+
power: 1,
|
|
25
|
+
type: CardType.Action,
|
|
26
|
+
suit: CardSuit.Day,
|
|
27
|
+
rule: CallOfTheEclipseRule
|
|
28
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CustomMoveType } from '../../../CustomMoveType';
|
|
2
|
+
import { EffectRule } from '../../../rules/EffectRule';
|
|
3
|
+
import { EffectType } from '../../Effect';
|
|
4
|
+
export class CallOfTheEclipseEffectRule extends EffectRule {
|
|
5
|
+
onRuleStart() {
|
|
6
|
+
this.cardRule.addPendingEffect(EffectType.ChallengeAccepted);
|
|
7
|
+
const moves = this.endEffect();
|
|
8
|
+
moves.unshift(this.customMove(CustomMoveType.Draw, { player: this.player, quantity: 1 }));
|
|
9
|
+
return moves;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CardSuit } from '../../CardSuit';
|
|
2
|
+
import { CardTag } from '../../CardTag';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { UndeadRule } from './UndeadRule';
|
|
5
|
+
declare class CavernSkulkerRule extends UndeadRule {
|
|
6
|
+
onEnters(): void;
|
|
7
|
+
onLeaves(): import("@gamepark/rules-api").MaterialMove[];
|
|
8
|
+
}
|
|
9
|
+
export declare const CavernSkulker: {
|
|
10
|
+
power: number;
|
|
11
|
+
type: CardType;
|
|
12
|
+
suit: CardSuit;
|
|
13
|
+
tag: CardTag;
|
|
14
|
+
rule: typeof CavernSkulkerRule;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleId } from '../../../rules/RuleId';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardTag } from '../../CardTag';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
import { LocationType } from '../../LocationType';
|
|
6
|
+
import { MaterialType } from '../../MaterialType';
|
|
7
|
+
import { UndeadRule } from './UndeadRule';
|
|
8
|
+
class CavernSkulkerRule extends UndeadRule {
|
|
9
|
+
onEnters() {
|
|
10
|
+
this.addPendingEffect(RuleId.CavernSkulkerEffect);
|
|
11
|
+
}
|
|
12
|
+
onLeaves() {
|
|
13
|
+
const underCards = this.material(MaterialType.Card).location(LocationType.UnderCard).parent(this.index);
|
|
14
|
+
return [
|
|
15
|
+
...underCards.moveItems((item) => ({ type: LocationType.PlayerHand, player: item.id.back })),
|
|
16
|
+
...super.onLeaves()
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const CavernSkulker = {
|
|
21
|
+
power: 2,
|
|
22
|
+
type: CardType.Creature,
|
|
23
|
+
suit: CardSuit.Day,
|
|
24
|
+
tag: CardTag.Undead,
|
|
25
|
+
rule: CavernSkulkerRule
|
|
26
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { sample } from 'es-toolkit';
|
|
2
|
+
import { EffectRule } from '../../../rules/EffectRule';
|
|
3
|
+
import { LocationType } from '../../LocationType';
|
|
4
|
+
import { MaterialType } from '../../MaterialType';
|
|
5
|
+
export class CavernSkulkerEffectRule extends EffectRule {
|
|
6
|
+
onRuleStart() {
|
|
7
|
+
const moves = this.endEffect();
|
|
8
|
+
const foeHand = this.material(MaterialType.Card).location(LocationType.PlayerHand).player(this.nextPlayer);
|
|
9
|
+
if (foeHand.length > 0) {
|
|
10
|
+
const randomIndex = sample(foeHand.getIndexes());
|
|
11
|
+
moves.unshift(foeHand.index(randomIndex).moveItem({ type: LocationType.UnderCard, parent: this.effectCardIndex }));
|
|
12
|
+
}
|
|
13
|
+
return moves;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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 } from '../../EffectTraits';
|
|
6
|
+
declare class DoomRule extends CardRule implements DestroyEffect {
|
|
7
|
+
onEnters(): void;
|
|
8
|
+
onLeaves(): import("@gamepark/rules-api").MaterialMove[];
|
|
9
|
+
getDestroyTargets(): Material;
|
|
10
|
+
isAutoDestroy(): boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const Doom: {
|
|
13
|
+
power: number;
|
|
14
|
+
type: CardType;
|
|
15
|
+
suit: CardSuit;
|
|
16
|
+
rule: typeof DoomRule;
|
|
17
|
+
};
|
|
18
|
+
export {};
|