@gamepark/skyrift 0.1.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 +9 -0
- package/dist/CustomMoveType.js +10 -0
- package/dist/Deck.d.ts +4 -0
- package/dist/Deck.js +5 -0
- package/dist/Memory.d.ts +10 -0
- package/dist/Memory.js +11 -0
- package/dist/SkyriftOptions.d.ts +10 -0
- package/dist/SkyriftOptions.js +11 -0
- package/dist/SkyriftRules.d.ts +90 -0
- package/dist/SkyriftRules.js +140 -0
- package/dist/SkyriftSetup.d.ts +12 -0
- package/dist/SkyriftSetup.js +40 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/material/Card.d.ts +39 -0
- package/dist/material/Card.js +35 -0
- package/dist/material/CardProperties.d.ts +14 -0
- package/dist/material/CardProperties.js +67 -0
- package/dist/material/CardRule.d.ts +36 -0
- package/dist/material/CardRule.js +113 -0
- package/dist/material/CardSuit.d.ts +5 -0
- package/dist/material/CardSuit.js +6 -0
- package/dist/material/CardTag.d.ts +5 -0
- package/dist/material/CardTag.js +6 -0
- package/dist/material/CardType.d.ts +4 -0
- package/dist/material/CardType.js +5 -0
- package/dist/material/Effect.d.ts +4 -0
- package/dist/material/Effect.js +1 -0
- package/dist/material/LocationType.d.ts +14 -0
- package/dist/material/LocationType.js +15 -0
- package/dist/material/MaterialType.d.ts +6 -0
- package/dist/material/MaterialType.js +7 -0
- package/dist/material/decks/HearthBlade.d.ts +18 -0
- package/dist/material/decks/HearthBlade.js +19 -0
- package/dist/material/decks/HighWave.d.ts +18 -0
- package/dist/material/decks/HighWave.js +19 -0
- package/dist/material/decks/heathblade/ArcherRule.d.ts +6 -0
- package/dist/material/decks/heathblade/ArcherRule.js +15 -0
- package/dist/material/decks/heathblade/Armada.d.ts +14 -0
- package/dist/material/decks/heathblade/Armada.js +16 -0
- package/dist/material/decks/heathblade/ArmadaEffectRule.d.ts +7 -0
- package/dist/material/decks/heathblade/ArmadaEffectRule.js +17 -0
- package/dist/material/decks/heathblade/Confluence.d.ts +17 -0
- package/dist/material/decks/heathblade/Confluence.js +19 -0
- package/dist/material/decks/heathblade/CoverOfNight.d.ts +13 -0
- package/dist/material/decks/heathblade/CoverOfNight.js +12 -0
- package/dist/material/decks/heathblade/CoverOfNightEffectRule.d.ts +4 -0
- package/dist/material/decks/heathblade/CoverOfNightEffectRule.js +4 -0
- package/dist/material/decks/heathblade/ElaraBlazingArrow.d.ts +14 -0
- package/dist/material/decks/heathblade/ElaraBlazingArrow.js +13 -0
- package/dist/material/decks/heathblade/Harvest.d.ts +13 -0
- package/dist/material/decks/heathblade/Harvest.js +12 -0
- package/dist/material/decks/heathblade/HarvestEffectRule.d.ts +4 -0
- package/dist/material/decks/heathblade/HarvestEffectRule.js +6 -0
- package/dist/material/decks/heathblade/HedgeKnight.d.ts +15 -0
- package/dist/material/decks/heathblade/HedgeKnight.js +18 -0
- package/dist/material/decks/heathblade/LoyalSquire.d.ts +14 -0
- package/dist/material/decks/heathblade/LoyalSquire.js +16 -0
- package/dist/material/decks/heathblade/LoyalSquireEffectRule.d.ts +6 -0
- package/dist/material/decks/heathblade/LoyalSquireEffectRule.js +14 -0
- package/dist/material/decks/heathblade/Nightguard.d.ts +13 -0
- package/dist/material/decks/heathblade/Nightguard.js +22 -0
- package/dist/material/decks/heathblade/OzmaTheMage.d.ts +17 -0
- package/dist/material/decks/heathblade/OzmaTheMage.js +28 -0
- package/dist/material/decks/heathblade/OzmaTheMageEffectRule.d.ts +4 -0
- package/dist/material/decks/heathblade/OzmaTheMageEffectRule.js +20 -0
- package/dist/material/decks/heathblade/PrincessLitha.d.ts +17 -0
- package/dist/material/decks/heathblade/PrincessLitha.js +28 -0
- package/dist/material/decks/heathblade/PrincessLithaEffectRule.d.ts +6 -0
- package/dist/material/decks/heathblade/PrincessLithaEffectRule.js +15 -0
- package/dist/material/decks/heathblade/RobbinsMasterOfArms.d.ts +15 -0
- package/dist/material/decks/heathblade/RobbinsMasterOfArms.js +14 -0
- package/dist/material/decks/heathblade/RobbinsMasterOfArmsEffectRule.d.ts +5 -0
- package/dist/material/decks/heathblade/RobbinsMasterOfArmsEffectRule.js +29 -0
- package/dist/material/decks/heathblade/Sacrifice.d.ts +13 -0
- package/dist/material/decks/heathblade/Sacrifice.js +12 -0
- package/dist/material/decks/heathblade/SacrificeEffectRule.d.ts +10 -0
- package/dist/material/decks/heathblade/SacrificeEffectRule.js +48 -0
- package/dist/material/decks/heathblade/Shadowbolt.d.ts +15 -0
- package/dist/material/decks/heathblade/Shadowbolt.js +14 -0
- package/dist/material/decks/heathblade/SoulBlade.d.ts +13 -0
- package/dist/material/decks/heathblade/SoulBlade.js +12 -0
- package/dist/material/decks/heathblade/SoulBladeEffectRule.d.ts +5 -0
- package/dist/material/decks/heathblade/SoulBladeEffectRule.js +15 -0
- package/dist/material/decks/heathblade/WatchTower.d.ts +14 -0
- package/dist/material/decks/heathblade/WatchTower.js +16 -0
- package/dist/material/decks/heathblade/WatchTowerEffectRule.d.ts +4 -0
- package/dist/material/decks/heathblade/WatchTowerEffectRule.js +13 -0
- package/dist/material/decks/heathblade/WoodSlinger.d.ts +15 -0
- package/dist/material/decks/heathblade/WoodSlinger.js +14 -0
- package/dist/material/decks/highwave/AeliaSteadyHand.d.ts +13 -0
- package/dist/material/decks/highwave/AeliaSteadyHand.js +12 -0
- package/dist/material/decks/highwave/BoardingParty.d.ts +13 -0
- package/dist/material/decks/highwave/BoardingParty.js +12 -0
- package/dist/material/decks/highwave/BoardingPartyEffectRule.d.ts +10 -0
- package/dist/material/decks/highwave/BoardingPartyEffectRule.js +59 -0
- package/dist/material/decks/highwave/BrassDragon.d.ts +15 -0
- package/dist/material/decks/highwave/BrassDragon.js +14 -0
- package/dist/material/decks/highwave/CannonCardRule.d.ts +4 -0
- package/dist/material/decks/highwave/CannonCardRule.js +19 -0
- package/dist/material/decks/highwave/DarkBlazer.d.ts +15 -0
- package/dist/material/decks/highwave/DarkBlazer.js +14 -0
- package/dist/material/decks/highwave/DarkBlazerEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/DarkBlazerEffectRule.js +4 -0
- package/dist/material/decks/highwave/DawnsDoom.d.ts +15 -0
- package/dist/material/decks/highwave/DawnsDoom.js +14 -0
- package/dist/material/decks/highwave/DawnsDoomEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/DawnsDoomEffectRule.js +14 -0
- package/dist/material/decks/highwave/LongJawsSilver.d.ts +15 -0
- package/dist/material/decks/highwave/LongJawsSilver.js +19 -0
- package/dist/material/decks/highwave/MistyGunner.d.ts +14 -0
- package/dist/material/decks/highwave/MistyGunner.js +13 -0
- package/dist/material/decks/highwave/OttoPouchy.d.ts +13 -0
- package/dist/material/decks/highwave/OttoPouchy.js +12 -0
- package/dist/material/decks/highwave/OttoPouchyEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/OttoPouchyEffectRule.js +9 -0
- package/dist/material/decks/highwave/PowderMonkey.d.ts +16 -0
- package/dist/material/decks/highwave/PowderMonkey.js +19 -0
- package/dist/material/decks/highwave/PowderMonkeyEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/PowderMonkeyEffectRule.js +13 -0
- package/dist/material/decks/highwave/RicoSkeye.d.ts +16 -0
- package/dist/material/decks/highwave/RicoSkeye.js +20 -0
- package/dist/material/decks/highwave/RicoSkeyeEffectRule.d.ts +7 -0
- package/dist/material/decks/highwave/RicoSkeyeEffectRule.js +21 -0
- package/dist/material/decks/highwave/SaltyDog.d.ts +13 -0
- package/dist/material/decks/highwave/SaltyDog.js +12 -0
- package/dist/material/decks/highwave/SaltyDogEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/SaltyDogEffectRule.js +26 -0
- package/dist/material/decks/highwave/Scallywag.d.ts +13 -0
- package/dist/material/decks/highwave/Scallywag.js +12 -0
- package/dist/material/decks/highwave/ScallywagEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/ScallywagEffectRule.js +13 -0
- package/dist/material/decks/highwave/Skupper.d.ts +13 -0
- package/dist/material/decks/highwave/Skupper.js +12 -0
- package/dist/material/decks/highwave/SkupperEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/SkupperEffectRule.js +12 -0
- package/dist/material/decks/highwave/SurpriseLoot.d.ts +13 -0
- package/dist/material/decks/highwave/SurpriseLoot.js +12 -0
- package/dist/material/decks/highwave/SurpriseLootEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/SurpriseLootEffectRule.js +13 -0
- package/dist/material/decks/highwave/TreasureMap.d.ts +14 -0
- package/dist/material/decks/highwave/TreasureMap.js +15 -0
- package/dist/material/decks/highwave/TropicalRuffian.d.ts +13 -0
- package/dist/material/decks/highwave/TropicalRuffian.js +12 -0
- package/dist/rules/ChallengeRule.d.ts +7 -0
- package/dist/rules/ChallengeRule.js +23 -0
- package/dist/rules/DestroyEffectRule.d.ts +8 -0
- package/dist/rules/DestroyEffectRule.js +21 -0
- package/dist/rules/DiscardEffectRule.d.ts +10 -0
- package/dist/rules/DiscardEffectRule.js +35 -0
- package/dist/rules/DrawEffectRule.d.ts +6 -0
- package/dist/rules/DrawEffectRule.js +15 -0
- package/dist/rules/EffectRule.d.ts +7 -0
- package/dist/rules/EffectRule.js +41 -0
- package/dist/rules/EndRoundRule.d.ts +4 -0
- package/dist/rules/EndRoundRule.js +47 -0
- package/dist/rules/GainCrystalEffectRule.d.ts +5 -0
- package/dist/rules/GainCrystalEffectRule.js +8 -0
- package/dist/rules/MayChallengeRule.d.ts +6 -0
- package/dist/rules/MayChallengeRule.js +17 -0
- package/dist/rules/PlayCardRule.d.ts +9 -0
- package/dist/rules/PlayCardRule.js +92 -0
- package/dist/rules/PlayerHelper.d.ts +13 -0
- package/dist/rules/PlayerHelper.js +36 -0
- package/dist/rules/PrepareNextRoundRule.d.ts +7 -0
- package/dist/rules/PrepareNextRoundRule.js +24 -0
- package/dist/rules/PutPowerTokenEffectRule.d.ts +8 -0
- package/dist/rules/PutPowerTokenEffectRule.js +24 -0
- package/dist/rules/ReturnCardRule.d.ts +9 -0
- package/dist/rules/ReturnCardRule.js +27 -0
- package/dist/rules/RuleId.d.ts +34 -0
- package/dist/rules/RuleId.js +36 -0
- package/dist/rules/StartPlayerTurnRule.d.ts +4 -0
- package/dist/rules/StartPlayerTurnRule.js +42 -0
- package/dist/rules/StartRoundRule.d.ts +5 -0
- package/dist/rules/StartRoundRule.js +12 -0
- package/dist/rules/StashPowerTokenEffectRule.d.ts +6 -0
- package/dist/rules/StashPowerTokenEffectRule.js +20 -0
- package/dist/rules/StealCrystalEffectRule.d.ts +5 -0
- package/dist/rules/StealCrystalEffectRule.js +13 -0
- package/dist/rules/StunCardRule.d.ts +9 -0
- package/dist/rules/StunCardRule.js +40 -0
- package/package.json +33 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class TropicalRuffianRule extends CardRule {
|
|
5
|
+
entersEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const TropicalRuffian = {
|
|
8
|
+
power: 5,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Night,
|
|
11
|
+
rule: TropicalRuffianRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CustomMove, ItemMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare class ChallengeRule extends EffectRule {
|
|
4
|
+
getPlayerMoves(): (CustomMove | import("@gamepark/rules-api").CreateItem<number, number, number>)[];
|
|
5
|
+
afterItemMove(move: ItemMove): CustomMove[];
|
|
6
|
+
onCustomMove(move: CustomMove): import("@gamepark/rules-api").MaterialMove[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { isCreateItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { LocationType } from '../material/LocationType';
|
|
4
|
+
import { MaterialType } from '../material/MaterialType';
|
|
5
|
+
import { EffectRule } from './EffectRule';
|
|
6
|
+
import { PlayerHelper } from './PlayerHelper';
|
|
7
|
+
export class ChallengeRule extends EffectRule {
|
|
8
|
+
getPlayerMoves() {
|
|
9
|
+
return [this.material(MaterialType.Crystal).createItem({ location: { type: LocationType.Stake } }), this.customMove(CustomMoveType.ConcedeRound)];
|
|
10
|
+
}
|
|
11
|
+
afterItemMove(move) {
|
|
12
|
+
if (isCreateItemType(MaterialType.Crystal)(move) && move.item.location.type === LocationType.Stake) {
|
|
13
|
+
return new PlayerHelper(this.game).getPendingEffectCardRule().onChallengeAccepted();
|
|
14
|
+
}
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
onCustomMove(move) {
|
|
18
|
+
if (move.type === CustomMoveType.ConcedeRound) {
|
|
19
|
+
return new PlayerHelper(this.game).getPendingEffectCardRule().onChallengeDeclined();
|
|
20
|
+
}
|
|
21
|
+
return super.onCustomMove(move);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ItemMove, Material, MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare abstract class DestroyEffectRule extends EffectRule {
|
|
4
|
+
onRuleStart(): MaterialMove[];
|
|
5
|
+
getPlayerMoves(): MaterialMove[];
|
|
6
|
+
abstract getTargets(): Material;
|
|
7
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isMoveItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { LocationType } from '../material/LocationType';
|
|
3
|
+
import { MaterialType } from '../material/MaterialType';
|
|
4
|
+
import { EffectRule } from './EffectRule';
|
|
5
|
+
export class DestroyEffectRule extends EffectRule {
|
|
6
|
+
onRuleStart() {
|
|
7
|
+
if (!this.getTargets().length) {
|
|
8
|
+
return this.endEffect();
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
getPlayerMoves() {
|
|
13
|
+
return this.getTargets().moveItems((item) => ({ type: LocationType.PlayerDiscard, player: item.location.player }));
|
|
14
|
+
}
|
|
15
|
+
afterItemMove(move) {
|
|
16
|
+
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayerDiscard) {
|
|
17
|
+
return this.endEffect();
|
|
18
|
+
}
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ItemMove, MaterialMove, MoveItem } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare class DiscardEffectRule extends EffectRule {
|
|
4
|
+
discardCount: number;
|
|
5
|
+
onRuleStart(): never[];
|
|
6
|
+
getPlayerMoves(): MaterialMove[];
|
|
7
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
8
|
+
onDiscard(_move: MoveItem): MaterialMove[];
|
|
9
|
+
onRuleEnd(): never[];
|
|
10
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { isMoveItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { LocationType } from '../material/LocationType';
|
|
3
|
+
import { MaterialType } from '../material/MaterialType';
|
|
4
|
+
import { Memory } from '../Memory';
|
|
5
|
+
import { EffectRule } from './EffectRule';
|
|
6
|
+
export class DiscardEffectRule extends EffectRule {
|
|
7
|
+
discardCount = 1;
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
this.memorize(Memory.EffectCount, 0);
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
getPlayerMoves() {
|
|
13
|
+
return this.material(MaterialType.Card)
|
|
14
|
+
.location(LocationType.PlayerHand)
|
|
15
|
+
.player(this.player)
|
|
16
|
+
.moveItems({ type: LocationType.PlayerDiscard, player: this.player });
|
|
17
|
+
}
|
|
18
|
+
afterItemMove(move) {
|
|
19
|
+
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayerDiscard) {
|
|
20
|
+
return this.onDiscard(move);
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
onDiscard(_move) {
|
|
25
|
+
const count = this.memorize(Memory.EffectCount, (count) => count + 1);
|
|
26
|
+
if (count >= this.discardCount) {
|
|
27
|
+
return this.endEffect();
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
onRuleEnd() {
|
|
32
|
+
this.forget(Memory.EffectCount);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export class DrawEffectRule extends EffectRule {
|
|
4
|
+
onRuleStart() {
|
|
5
|
+
const moves = this.endEffect();
|
|
6
|
+
const drawCount = this.getDrawCount();
|
|
7
|
+
if (drawCount > 0) {
|
|
8
|
+
moves.unshift(this.customMove(CustomMoveType.Draw, { player: this.player, quantity: drawCount }));
|
|
9
|
+
}
|
|
10
|
+
return moves;
|
|
11
|
+
}
|
|
12
|
+
getDrawCount() {
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CustomMove, MaterialMove, PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
export declare class EffectRule extends PlayerTurnRule {
|
|
3
|
+
get cardRule(): import("../material/CardRule").CardRule;
|
|
4
|
+
endEffect(): MaterialMove[];
|
|
5
|
+
onCustomMove(move: CustomMove): MaterialMove[];
|
|
6
|
+
onEndEffect(): MaterialMove[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { LocationType } from '../material/LocationType';
|
|
4
|
+
import { MaterialType } from '../material/MaterialType';
|
|
5
|
+
import { Memory } from '../Memory';
|
|
6
|
+
import { PlayerHelper } from './PlayerHelper';
|
|
7
|
+
import { RuleId } from './RuleId';
|
|
8
|
+
export class EffectRule extends PlayerTurnRule {
|
|
9
|
+
get cardRule() {
|
|
10
|
+
const pendingEffects = this.remind(Memory.PendingEffects);
|
|
11
|
+
return new PlayerHelper(this.game, this.player).getCardRule(pendingEffects[0].cardIndex);
|
|
12
|
+
}
|
|
13
|
+
endEffect() {
|
|
14
|
+
return [this.customMove(CustomMoveType.EndEffect)];
|
|
15
|
+
}
|
|
16
|
+
onCustomMove(move) {
|
|
17
|
+
if (move.type === CustomMoveType.EndEffect) {
|
|
18
|
+
return this.onEndEffect();
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
onEndEffect() {
|
|
23
|
+
this.memorize(Memory.PendingEffects, (effects) => effects.slice(1));
|
|
24
|
+
const pendingEffects = this.remind(Memory.PendingEffects);
|
|
25
|
+
if (pendingEffects.length > 0) {
|
|
26
|
+
return new PlayerHelper(this.game, this.player).getCardRule(pendingEffects[0].cardIndex).startEffect();
|
|
27
|
+
}
|
|
28
|
+
const crystalsInStake = this.material(MaterialType.Crystal).location(LocationType.Stake).getQuantity();
|
|
29
|
+
if (crystalsInStake === 0) {
|
|
30
|
+
return [this.startRule(RuleId.PrepareNextRound)];
|
|
31
|
+
}
|
|
32
|
+
const currentPlayer = this.remind(Memory.CurrentPlayer);
|
|
33
|
+
const playerHelper = new PlayerHelper(this.game, currentPlayer);
|
|
34
|
+
if (this.remind(Memory.CardsPlayed, currentPlayer).length && playerHelper.hasMorePower()) {
|
|
35
|
+
return [this.startPlayerTurn(RuleId.StartPlayerTurn, playerHelper.foe)];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return [this.startPlayerTurn(RuleId.PlayCard, this.remind(Memory.CurrentPlayer))];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
export declare class EndRoundRule extends PlayerTurnRule {
|
|
3
|
+
onRuleStart(): (import("@gamepark/rules-api").EndGame | import("@gamepark/rules-api").CustomMove | import("@gamepark/rules-api").SetTutorialStep | import("@gamepark/rules-api").CloseTutorialPopup | import("@gamepark/rules-api").ChangeView<number> | import("@gamepark/rules-api").CreateItem<number, number, number> | import("@gamepark/rules-api").CreateItemsAtOnce<number, number, number> | import("@gamepark/rules-api").DeleteItem<number> | import("@gamepark/rules-api").DeleteItemsAtOnce<number> | import("@gamepark/rules-api").MoveItem<number, number, number> | import("@gamepark/rules-api").MoveItemsAtOnce<number, number, number> | import("@gamepark/rules-api").Shuffle<number> | import("@gamepark/rules-api").RollItem<number, number, number> | import("@gamepark/rules-api").SelectItem<number> | import("@gamepark/rules-api").StartPlayerTurn<number, number> | import("@gamepark/rules-api").StartSimultaneousRule<number, number> | import("@gamepark/rules-api").StartRule<number> | import("@gamepark/rules-api").EndPlayerTurn<number> | import("@gamepark/rules-api").DisplayHelp<number, number, number, number> | import("@gamepark/rules-api").DropItem<number>)[];
|
|
4
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
import { LocationType } from '../material/LocationType';
|
|
3
|
+
import { MaterialType } from '../material/MaterialType';
|
|
4
|
+
import { Memory } from '../Memory';
|
|
5
|
+
import { PlayerHelper } from './PlayerHelper';
|
|
6
|
+
import { RuleId } from './RuleId';
|
|
7
|
+
export class EndRoundRule extends PlayerTurnRule {
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
const winner = this.nextPlayer;
|
|
10
|
+
const loser = this.player;
|
|
11
|
+
const moves = [];
|
|
12
|
+
this.memorize(Memory.NextRoundStartPlayer, loser);
|
|
13
|
+
const stake = this.material(MaterialType.Crystal).location(LocationType.Stake);
|
|
14
|
+
if (stake.getQuantity())
|
|
15
|
+
moves.push(stake.moveItem({ type: LocationType.PlayerCrystals, player: winner }, stake.getQuantity()));
|
|
16
|
+
const loserCards = this.material(MaterialType.Card)
|
|
17
|
+
.location(LocationType.PlayArea)
|
|
18
|
+
.player(loser)
|
|
19
|
+
.sort((item) => item.location.x)
|
|
20
|
+
.getIndexes();
|
|
21
|
+
const winnerCards = this.material(MaterialType.Card)
|
|
22
|
+
.location(LocationType.PlayArea)
|
|
23
|
+
.player(winner)
|
|
24
|
+
.sort((item) => item.location.x)
|
|
25
|
+
.getIndexes();
|
|
26
|
+
for (const cardIndex of loserCards) {
|
|
27
|
+
const cardRule = new PlayerHelper(this.game, loser).getCardRule(cardIndex);
|
|
28
|
+
if (!cardRule.isStunned()) {
|
|
29
|
+
moves.push(...cardRule.onRoundEnd(false));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const cardIndex of winnerCards) {
|
|
33
|
+
const cardRule = new PlayerHelper(this.game, winner).getCardRule(cardIndex);
|
|
34
|
+
if (!cardRule.isStunned()) {
|
|
35
|
+
moves.push(...cardRule.onRoundEnd(true));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const pendingEffects = this.remind(Memory.PendingEffects);
|
|
39
|
+
if (pendingEffects.length === 0) {
|
|
40
|
+
moves.push(this.startRule(RuleId.PrepareNextRound));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
moves.push(...new PlayerHelper(this.game, this.player).getCardRule(pendingEffects[0].cardIndex).startEffect());
|
|
44
|
+
}
|
|
45
|
+
return moves;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { LocationType } from '../material/LocationType';
|
|
2
|
+
import { MaterialType } from '../material/MaterialType';
|
|
3
|
+
import { EffectRule } from './EffectRule';
|
|
4
|
+
export class GainCrystalEffectRule extends EffectRule {
|
|
5
|
+
onRuleStart() {
|
|
6
|
+
return [this.material(MaterialType.Crystal).createItem({ location: { type: LocationType.PlayerCrystals, player: this.player } }), ...this.endEffect()];
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CustomMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare class MayChallengeRule extends EffectRule {
|
|
4
|
+
getPlayerMoves(): CustomMove[];
|
|
5
|
+
onCustomMove(move: CustomMove): import("@gamepark/rules-api").MaterialMove[];
|
|
6
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
import { RuleId } from './RuleId';
|
|
4
|
+
export class MayChallengeRule extends EffectRule {
|
|
5
|
+
getPlayerMoves() {
|
|
6
|
+
return [this.customMove(CustomMoveType.Challenge), this.customMove(CustomMoveType.Pass)];
|
|
7
|
+
}
|
|
8
|
+
onCustomMove(move) {
|
|
9
|
+
if (move.type === CustomMoveType.Challenge) {
|
|
10
|
+
return [this.startPlayerTurn(RuleId.Challenge, this.nextPlayer)];
|
|
11
|
+
}
|
|
12
|
+
else if (move.type === CustomMoveType.Pass) {
|
|
13
|
+
return this.endEffect();
|
|
14
|
+
}
|
|
15
|
+
return super.onCustomMove(move);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CustomMove, ItemMove, MaterialMove, PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
export declare class PlayCardRule extends PlayerTurnRule {
|
|
3
|
+
onRuleStart(): never[];
|
|
4
|
+
getPlayerMoves(): MaterialMove[];
|
|
5
|
+
get cardsICanPlay(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
6
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
7
|
+
onCustomMove(move: CustomMove): MaterialMove[];
|
|
8
|
+
private hasMorePower;
|
|
9
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { isMoveItemType, PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { cardProperties } from '../material/CardProperties';
|
|
4
|
+
import { CardSuit } from '../material/CardSuit';
|
|
5
|
+
import { LocationType } from '../material/LocationType';
|
|
6
|
+
import { MaterialType } from '../material/MaterialType';
|
|
7
|
+
import { Memory } from '../Memory';
|
|
8
|
+
import { PlayerHelper } from './PlayerHelper';
|
|
9
|
+
import { RuleId } from './RuleId';
|
|
10
|
+
export class PlayCardRule extends PlayerTurnRule {
|
|
11
|
+
onRuleStart() {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
getPlayerMoves() {
|
|
15
|
+
const moves = this.cardsICanPlay.moveItems((item) => ({
|
|
16
|
+
type: LocationType.PlayArea,
|
|
17
|
+
player: this.player,
|
|
18
|
+
id: cardProperties[item.id.front].type
|
|
19
|
+
}));
|
|
20
|
+
moves.push(this.customMove(CustomMoveType.ConcedeRound));
|
|
21
|
+
const playerHelper = new PlayerHelper(this.game);
|
|
22
|
+
const powerTokensStash = this.material(MaterialType.PowerToken).location(LocationType.PlayerStash).player(this.player);
|
|
23
|
+
if (powerTokensStash.getQuantity()) {
|
|
24
|
+
for (const index of playerHelper.cardsInPlay.getIndexes()) {
|
|
25
|
+
moves.push(powerTokensStash.moveItem({ type: LocationType.CardPowerTokens, parent: index }, 1));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const usedEffects = this.remind(Memory.OncePerTurnEffects);
|
|
29
|
+
for (const cardRule of playerHelper.cardRules) {
|
|
30
|
+
if (cardRule.oncePerTurnEffect && !cardRule.isStunned() && !usedEffects.some((effect) => effect.cardIndex === cardRule.index)) {
|
|
31
|
+
moves.push(this.customMove(CustomMoveType.ActivateCard, cardRule.index));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return moves;
|
|
35
|
+
}
|
|
36
|
+
get cardsICanPlay() {
|
|
37
|
+
const playerHelper = new PlayerHelper(this.game);
|
|
38
|
+
return this.material(MaterialType.Card)
|
|
39
|
+
.location(LocationType.PlayerHand)
|
|
40
|
+
.player(this.player)
|
|
41
|
+
.index((index) => playerHelper.getCardRule(index).canBePlayed());
|
|
42
|
+
}
|
|
43
|
+
afterItemMove(move) {
|
|
44
|
+
const moves = [];
|
|
45
|
+
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayArea) {
|
|
46
|
+
this.memorize(Memory.CardsPlayed, (cards) => [...cards, move.itemIndex], this.player);
|
|
47
|
+
const cardRule = new PlayerHelper(this.game, this.player).getCardRule(move.itemIndex);
|
|
48
|
+
if (!this.remind(Memory.Suit)) {
|
|
49
|
+
const card = this.material(MaterialType.Card).getItem(move.itemIndex);
|
|
50
|
+
const suit = cardProperties[card.id.front].suit;
|
|
51
|
+
if (suit === CardSuit.Day || suit === CardSuit.Night) {
|
|
52
|
+
this.memorize(Memory.Suit, suit);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const cardsInPlay = this.material(MaterialType.Card).location(LocationType.PlayArea);
|
|
56
|
+
for (const cardIndex of cardsInPlay.getIndexes()) {
|
|
57
|
+
if (cardIndex !== move.itemIndex) {
|
|
58
|
+
const otherCardRule = new PlayerHelper(this.game, this.player).getCardRule(cardIndex);
|
|
59
|
+
if (!otherCardRule.isStunned()) {
|
|
60
|
+
moves.push(...otherCardRule.onCardEnters(cardRule.card, move.location.player));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
moves.push(...cardRule.onEnters());
|
|
65
|
+
const pendingEffects = this.remind(Memory.PendingEffects);
|
|
66
|
+
if (pendingEffects.length > 0) {
|
|
67
|
+
return new PlayerHelper(this.game, this.player).getCardRule(pendingEffects[0].cardIndex).startEffect();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (isMoveItemType(MaterialType.Card)(move) || isMoveItemType(MaterialType.PowerToken)(move)) {
|
|
71
|
+
if (this.remind(Memory.CardsPlayed, this.player).length > 0 && this.hasMorePower()) {
|
|
72
|
+
moves.push(this.startPlayerTurn(RuleId.StartPlayerTurn, this.nextPlayer));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return moves;
|
|
76
|
+
}
|
|
77
|
+
onCustomMove(move) {
|
|
78
|
+
if (move.type === CustomMoveType.ConcedeRound) {
|
|
79
|
+
return [this.startRule(RuleId.EndRound)];
|
|
80
|
+
}
|
|
81
|
+
else if (move.type === CustomMoveType.ActivateCard) {
|
|
82
|
+
const cardIndex = move.data;
|
|
83
|
+
const cardRule = new PlayerHelper(this.game, this.player).getCardRule(cardIndex);
|
|
84
|
+
this.memorize(Memory.OncePerTurnEffects, (effects) => [...effects, { cardIndex }]);
|
|
85
|
+
return cardRule.startEffect();
|
|
86
|
+
}
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
hasMorePower() {
|
|
90
|
+
return new PlayerHelper(this.game, this.player).getPower() > new PlayerHelper(this.game, this.nextPlayer).getPower();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MaterialGame, MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { Deck } from '../Deck';
|
|
3
|
+
export declare class PlayerHelper extends MaterialRulesPart {
|
|
4
|
+
private player;
|
|
5
|
+
constructor(game: MaterialGame, player?: Deck);
|
|
6
|
+
getCardRule(cardIndex: number, card?: import("../material/Card").Card): import("../material/CardRule").CardRule;
|
|
7
|
+
getPendingEffectCardRule(): import("../material/CardRule").CardRule;
|
|
8
|
+
get cardsInPlay(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
9
|
+
get cardRules(): import("../material/CardRule").CardRule[];
|
|
10
|
+
getPower(): number;
|
|
11
|
+
get foe(): number;
|
|
12
|
+
hasMorePower(): boolean;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { sumBy } from 'es-toolkit';
|
|
3
|
+
import { cardProperties } from '../material/CardProperties';
|
|
4
|
+
import { LocationType } from '../material/LocationType';
|
|
5
|
+
import { MaterialType } from '../material/MaterialType';
|
|
6
|
+
import { Memory } from '../Memory';
|
|
7
|
+
export class PlayerHelper extends MaterialRulesPart {
|
|
8
|
+
player;
|
|
9
|
+
constructor(game, player = game.rule.player) {
|
|
10
|
+
super(game);
|
|
11
|
+
this.player = player;
|
|
12
|
+
}
|
|
13
|
+
getCardRule(cardIndex, card = this.material(MaterialType.Card).getItem(cardIndex).id.front) {
|
|
14
|
+
const Rule = cardProperties[card].rule;
|
|
15
|
+
return new Rule(this.game, cardIndex);
|
|
16
|
+
}
|
|
17
|
+
getPendingEffectCardRule() {
|
|
18
|
+
const cardIndex = this.remind(Memory.PendingEffects)[0].cardIndex;
|
|
19
|
+
return this.getCardRule(cardIndex);
|
|
20
|
+
}
|
|
21
|
+
get cardsInPlay() {
|
|
22
|
+
return this.material(MaterialType.Card).location(LocationType.PlayArea).player(this.player);
|
|
23
|
+
}
|
|
24
|
+
get cardRules() {
|
|
25
|
+
return this.cardsInPlay.getIndexes().map((index) => this.getCardRule(index));
|
|
26
|
+
}
|
|
27
|
+
getPower() {
|
|
28
|
+
return sumBy(this.cardRules, (rule) => rule.getPower());
|
|
29
|
+
}
|
|
30
|
+
get foe() {
|
|
31
|
+
return this.game.players.find((p) => p !== this.player);
|
|
32
|
+
}
|
|
33
|
+
hasMorePower() {
|
|
34
|
+
return this.getPower() > new PlayerHelper(this.game, this.foe).getPower();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { Deck } from '../Deck';
|
|
3
|
+
import { RuleId } from './RuleId';
|
|
4
|
+
export declare class PrepareNextRoundRule extends MaterialRulesPart {
|
|
5
|
+
onRuleStart(): (import("@gamepark/rules-api").CustomMove | import("@gamepark/rules-api").MoveItem<number, number, number> | import("@gamepark/rules-api").StartPlayerTurn<Deck, RuleId.StartRound>)[];
|
|
6
|
+
onRuleEnd(): never[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { LocationType } from '../material/LocationType';
|
|
4
|
+
import { MaterialType } from '../material/MaterialType';
|
|
5
|
+
import { Memory } from '../Memory';
|
|
6
|
+
import { RuleId } from './RuleId';
|
|
7
|
+
export class PrepareNextRoundRule extends MaterialRulesPart {
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
const nextRoundStartPlayer = this.remind(Memory.NextRoundStartPlayer);
|
|
10
|
+
const moves = [];
|
|
11
|
+
moves.push(...this.material(MaterialType.Card)
|
|
12
|
+
.location(LocationType.PlayArea)
|
|
13
|
+
.moveItems((item) => ({ type: LocationType.PlayerDiscard, player: item.location.player })));
|
|
14
|
+
moves.push(this.customMove(CustomMoveType.Draw, { player: nextRoundStartPlayer, quantity: 3 }));
|
|
15
|
+
const otherPlayer = this.game.players.find((p) => p !== nextRoundStartPlayer);
|
|
16
|
+
moves.push(this.customMove(CustomMoveType.Draw, { player: otherPlayer, quantity: 3 }));
|
|
17
|
+
moves.push(this.startPlayerTurn(RuleId.StartRound, nextRoundStartPlayer));
|
|
18
|
+
return moves;
|
|
19
|
+
}
|
|
20
|
+
onRuleEnd() {
|
|
21
|
+
this.forget(Memory.NextRoundStartPlayer);
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ItemMove, Material, MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare abstract class PutPowerTokenEffectRule extends EffectRule {
|
|
4
|
+
onRuleStart(): MaterialMove[];
|
|
5
|
+
getPlayerMoves(): MaterialMove[];
|
|
6
|
+
abstract getTargets(): Material;
|
|
7
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isCreateItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { LocationType } from '../material/LocationType';
|
|
3
|
+
import { MaterialType } from '../material/MaterialType';
|
|
4
|
+
import { EffectRule } from './EffectRule';
|
|
5
|
+
export class PutPowerTokenEffectRule extends EffectRule {
|
|
6
|
+
onRuleStart() {
|
|
7
|
+
if (!this.getTargets().length) {
|
|
8
|
+
return this.endEffect();
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
getPlayerMoves() {
|
|
13
|
+
const powerTokens = this.material(MaterialType.PowerToken);
|
|
14
|
+
return this.getTargets()
|
|
15
|
+
.getIndexes()
|
|
16
|
+
.map((index) => powerTokens.createItem({ location: { type: LocationType.CardPowerTokens, parent: index } }));
|
|
17
|
+
}
|
|
18
|
+
afterItemMove(move) {
|
|
19
|
+
if (isCreateItemType(MaterialType.PowerToken)(move) && move.item.location.type === LocationType.CardPowerTokens) {
|
|
20
|
+
return this.endEffect();
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ItemMove, Material, MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from './EffectRule';
|
|
3
|
+
export declare abstract class ReturnCardRule extends EffectRule {
|
|
4
|
+
isOptional: boolean;
|
|
5
|
+
onRuleStart(): MaterialMove[];
|
|
6
|
+
getPlayerMoves(): MaterialMove[];
|
|
7
|
+
abstract getTargets(): Material;
|
|
8
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isMoveItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { LocationType } from '../material/LocationType';
|
|
4
|
+
import { MaterialType } from '../material/MaterialType';
|
|
5
|
+
import { EffectRule } from './EffectRule';
|
|
6
|
+
export class ReturnCardRule extends EffectRule {
|
|
7
|
+
isOptional = true;
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
if (!this.getTargets().length) {
|
|
10
|
+
return this.endEffect();
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
getPlayerMoves() {
|
|
15
|
+
const moves = this.getTargets().moveItems({ type: LocationType.PlayerHand, player: this.player });
|
|
16
|
+
if (this.isOptional) {
|
|
17
|
+
moves.push(this.customMove(CustomMoveType.EndEffect));
|
|
18
|
+
}
|
|
19
|
+
return moves;
|
|
20
|
+
}
|
|
21
|
+
afterItemMove(move) {
|
|
22
|
+
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayerHand) {
|
|
23
|
+
return this.endEffect();
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare enum RuleId {
|
|
2
|
+
StartRound = 1,
|
|
3
|
+
StartPlayerTurn = 2,
|
|
4
|
+
PlayCard = 3,
|
|
5
|
+
EndRound = 4,
|
|
6
|
+
PrepareNextRound = 5,
|
|
7
|
+
MayChallenge = 6,
|
|
8
|
+
Challenge = 7,
|
|
9
|
+
LoyalSquireEffect = 102,
|
|
10
|
+
PrincessLithaEffect = 103,
|
|
11
|
+
RobbinsMasterOfArmsEffect = 104,
|
|
12
|
+
OzmaTheMageEffect = 109,
|
|
13
|
+
ArmadaEffect = 110,
|
|
14
|
+
SoulBladeEffect = 111,
|
|
15
|
+
CoverOfNightEffect = 112,
|
|
16
|
+
SacrificeEffect = 113,
|
|
17
|
+
WatchTowerEffect = 114,
|
|
18
|
+
ConfluenceEffect = 115,
|
|
19
|
+
HarvestEffect = 116,
|
|
20
|
+
PowderMonkeyEffect = 601,
|
|
21
|
+
AeliaSteadyHandEffect = 602,
|
|
22
|
+
RicoSkeyeEffect = 603,
|
|
23
|
+
TropicalRuffianEffect = 605,
|
|
24
|
+
ScallywagEffect = 606,
|
|
25
|
+
OttoPouchyEffect = 607,
|
|
26
|
+
SkupperEffect = 608,
|
|
27
|
+
SaltyDogEffect = 609,
|
|
28
|
+
LongJawsSilverEffect = 610,
|
|
29
|
+
TreasureMapEffect = 612,
|
|
30
|
+
DarkBlazerEffect = 613,
|
|
31
|
+
BoardingPartyEffect = 614,
|
|
32
|
+
DawnsDoomEffect = 615,
|
|
33
|
+
SurpriseLootEffect = 616
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Card } from '../material/Card';
|
|
2
|
+
export var RuleId;
|
|
3
|
+
(function (RuleId) {
|
|
4
|
+
RuleId[RuleId["StartRound"] = 1] = "StartRound";
|
|
5
|
+
RuleId[RuleId["StartPlayerTurn"] = 2] = "StartPlayerTurn";
|
|
6
|
+
RuleId[RuleId["PlayCard"] = 3] = "PlayCard";
|
|
7
|
+
RuleId[RuleId["EndRound"] = 4] = "EndRound";
|
|
8
|
+
RuleId[RuleId["PrepareNextRound"] = 5] = "PrepareNextRound";
|
|
9
|
+
RuleId[RuleId["MayChallenge"] = 6] = "MayChallenge";
|
|
10
|
+
RuleId[RuleId["Challenge"] = 7] = "Challenge";
|
|
11
|
+
RuleId[RuleId["LoyalSquireEffect"] = 102] = "LoyalSquireEffect";
|
|
12
|
+
RuleId[RuleId["PrincessLithaEffect"] = 103] = "PrincessLithaEffect";
|
|
13
|
+
RuleId[RuleId["RobbinsMasterOfArmsEffect"] = 104] = "RobbinsMasterOfArmsEffect";
|
|
14
|
+
RuleId[RuleId["OzmaTheMageEffect"] = 109] = "OzmaTheMageEffect";
|
|
15
|
+
RuleId[RuleId["ArmadaEffect"] = 110] = "ArmadaEffect";
|
|
16
|
+
RuleId[RuleId["SoulBladeEffect"] = 111] = "SoulBladeEffect";
|
|
17
|
+
RuleId[RuleId["CoverOfNightEffect"] = 112] = "CoverOfNightEffect";
|
|
18
|
+
RuleId[RuleId["SacrificeEffect"] = 113] = "SacrificeEffect";
|
|
19
|
+
RuleId[RuleId["WatchTowerEffect"] = 114] = "WatchTowerEffect";
|
|
20
|
+
RuleId[RuleId["ConfluenceEffect"] = 115] = "ConfluenceEffect";
|
|
21
|
+
RuleId[RuleId["HarvestEffect"] = 116] = "HarvestEffect";
|
|
22
|
+
RuleId[RuleId["PowderMonkeyEffect"] = 601] = "PowderMonkeyEffect";
|
|
23
|
+
RuleId[RuleId["AeliaSteadyHandEffect"] = 602] = "AeliaSteadyHandEffect";
|
|
24
|
+
RuleId[RuleId["RicoSkeyeEffect"] = 603] = "RicoSkeyeEffect";
|
|
25
|
+
RuleId[RuleId["TropicalRuffianEffect"] = 605] = "TropicalRuffianEffect";
|
|
26
|
+
RuleId[RuleId["ScallywagEffect"] = 606] = "ScallywagEffect";
|
|
27
|
+
RuleId[RuleId["OttoPouchyEffect"] = 607] = "OttoPouchyEffect";
|
|
28
|
+
RuleId[RuleId["SkupperEffect"] = 608] = "SkupperEffect";
|
|
29
|
+
RuleId[RuleId["SaltyDogEffect"] = 609] = "SaltyDogEffect";
|
|
30
|
+
RuleId[RuleId["LongJawsSilverEffect"] = 610] = "LongJawsSilverEffect";
|
|
31
|
+
RuleId[RuleId["TreasureMapEffect"] = 612] = "TreasureMapEffect";
|
|
32
|
+
RuleId[RuleId["DarkBlazerEffect"] = 613] = "DarkBlazerEffect";
|
|
33
|
+
RuleId[RuleId["BoardingPartyEffect"] = 614] = "BoardingPartyEffect";
|
|
34
|
+
RuleId[RuleId["DawnsDoomEffect"] = 615] = "DawnsDoomEffect";
|
|
35
|
+
RuleId[RuleId["SurpriseLootEffect"] = 616] = "SurpriseLootEffect";
|
|
36
|
+
})(RuleId || (RuleId = {}));
|