@gamepark/skyrift 0.2.8 → 0.3.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/Deck.d.ts +1 -0
- package/dist/Deck.js +1 -0
- package/dist/Memory.d.ts +2 -1
- package/dist/Memory.js +1 -0
- package/dist/SkyriftRules.d.ts +35 -14
- package/dist/SkyriftRules.js +42 -15
- package/dist/SkyriftSetup.js +3 -0
- package/dist/material/Card.d.ts +26 -10
- package/dist/material/Card.js +26 -10
- package/dist/material/CardProperties.js +52 -20
- package/dist/material/CardRule.d.ts +3 -2
- package/dist/material/CardRule.js +14 -0
- package/dist/material/OngoingEffect.d.ts +8 -0
- package/dist/material/OngoingEffect.js +5 -0
- package/dist/material/decks/HearthBlade.js +4 -4
- package/dist/material/decks/HighWave.js +10 -10
- package/dist/material/decks/WinSands.d.ts +18 -0
- package/dist/material/decks/WinSands.js +19 -0
- package/dist/material/decks/heathblade/Confluence.js +1 -1
- package/dist/material/decks/heathblade/Harvest.js +1 -1
- package/dist/material/decks/heathblade/OzmaTheMageEffectRule.js +1 -3
- package/dist/material/decks/heathblade/RobbinsMasterOfArmsEffectRule.js +1 -3
- package/dist/material/decks/highwave/BonnyTheGunner.d.ts +14 -0
- package/dist/material/decks/highwave/BonnyTheGunner.js +13 -0
- package/dist/material/decks/highwave/CannonCardRule.js +5 -3
- package/dist/material/decks/highwave/DarkArmageddon.d.ts +15 -0
- package/dist/material/decks/highwave/DarkArmageddon.js +14 -0
- package/dist/material/decks/highwave/DarkArmageddonEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/DarkArmageddonEffectRule.js +4 -0
- package/dist/material/decks/highwave/EyeOfSky.d.ts +16 -0
- package/dist/material/decks/highwave/EyeOfSky.js +20 -0
- package/dist/material/decks/highwave/EyeOfSkyEffectRule.d.ts +7 -0
- package/dist/material/decks/highwave/EyeOfSkyEffectRule.js +21 -0
- package/dist/material/decks/highwave/FortunesCourse.d.ts +14 -0
- package/dist/material/decks/highwave/FortunesCourse.js +15 -0
- package/dist/material/decks/highwave/GoldenApocalypse.d.ts +15 -0
- package/dist/material/decks/highwave/GoldenApocalypse.js +14 -0
- package/dist/material/decks/highwave/OscarScullion.d.ts +13 -0
- package/dist/material/decks/highwave/OscarScullion.js +12 -0
- package/dist/material/decks/highwave/OscarScullionEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/OscarScullionEffectRule.js +12 -0
- package/dist/material/decks/highwave/OttoFactotum.d.ts +13 -0
- package/dist/material/decks/highwave/OttoFactotum.js +12 -0
- package/dist/material/decks/highwave/OttoFactotumEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/OttoFactotumEffectRule.js +9 -0
- package/dist/material/decks/highwave/RiggingRaiders.d.ts +13 -0
- package/dist/material/decks/highwave/RiggingRaiders.js +12 -0
- package/dist/material/decks/highwave/RiggingRaidersEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/RiggingRaidersEffectRule.js +17 -0
- package/dist/material/decks/highwave/SeaScorcher.d.ts +16 -0
- package/dist/material/decks/highwave/SeaScorcher.js +19 -0
- package/dist/material/decks/highwave/SeaScorcherEffectRule.d.ts +5 -0
- package/dist/material/decks/highwave/SeaScorcherEffectRule.js +13 -0
- package/dist/material/decks/highwave/TideRover.d.ts +13 -0
- package/dist/material/decks/highwave/TideRover.js +12 -0
- package/dist/material/decks/highwave/TideRoverEffectRule.d.ts +4 -0
- package/dist/material/decks/highwave/TideRoverEffectRule.js +26 -0
- package/dist/material/decks/highwave/TropicalRuffian.js +1 -1
- package/dist/material/decks/winsands/AbiSnakeCharmer.d.ts +13 -0
- package/dist/material/decks/winsands/AbiSnakeCharmer.js +12 -0
- package/dist/material/decks/winsands/AbiSnakeCharmerEffectRule.d.ts +7 -0
- package/dist/material/decks/winsands/AbiSnakeCharmerEffectRule.js +33 -0
- package/dist/material/decks/winsands/AncientCurse.d.ts +16 -0
- package/dist/material/decks/winsands/AncientCurse.js +23 -0
- package/dist/material/decks/winsands/Catadjinn.d.ts +14 -0
- package/dist/material/decks/winsands/Catadjinn.js +24 -0
- package/dist/material/decks/winsands/CreatureBonusCardRule.d.ts +4 -0
- package/dist/material/decks/winsands/CreatureBonusCardRule.js +14 -0
- package/dist/material/decks/winsands/DeathTrap.d.ts +14 -0
- package/dist/material/decks/winsands/DeathTrap.js +16 -0
- package/dist/material/decks/winsands/DeathTrapEffectRule.d.ts +4 -0
- package/dist/material/decks/winsands/DeathTrapEffectRule.js +18 -0
- package/dist/material/decks/winsands/DesertRaider.d.ts +13 -0
- package/dist/material/decks/winsands/DesertRaider.js +12 -0
- package/dist/material/decks/winsands/DesertRaiderEffectRule.d.ts +4 -0
- package/dist/material/decks/winsands/DesertRaiderEffectRule.js +17 -0
- package/dist/material/decks/winsands/DuneWardrums.d.ts +12 -0
- package/dist/material/decks/winsands/DuneWardrums.js +22 -0
- package/dist/material/decks/winsands/ErgDeathslayer.d.ts +13 -0
- package/dist/material/decks/winsands/ErgDeathslayer.js +19 -0
- package/dist/material/decks/winsands/MalikShadowtracker.d.ts +14 -0
- package/dist/material/decks/winsands/MalikShadowtracker.js +16 -0
- package/dist/material/decks/winsands/MalikShadowtrackerEffectRule.d.ts +4 -0
- package/dist/material/decks/winsands/MalikShadowtrackerEffectRule.js +13 -0
- package/dist/material/decks/winsands/Metamorph.d.ts +14 -0
- package/dist/material/decks/winsands/Metamorph.js +15 -0
- package/dist/material/decks/winsands/MushaFakir.d.ts +15 -0
- package/dist/material/decks/winsands/MushaFakir.js +16 -0
- package/dist/material/decks/winsands/OasisShaman.d.ts +13 -0
- package/dist/material/decks/winsands/OasisShaman.js +12 -0
- package/dist/material/decks/winsands/OasisShamanEffectRule.d.ts +8 -0
- package/dist/material/decks/winsands/OasisShamanEffectRule.js +33 -0
- package/dist/material/decks/winsands/SandWalkers.d.ts +17 -0
- package/dist/material/decks/winsands/SandWalkers.js +26 -0
- package/dist/material/decks/winsands/SandWalkersEffectRule.d.ts +5 -0
- package/dist/material/decks/winsands/SandWalkersEffectRule.js +25 -0
- package/dist/material/decks/winsands/StarlightBazaar.d.ts +13 -0
- package/dist/material/decks/winsands/StarlightBazaar.js +12 -0
- package/dist/material/decks/winsands/StarlightBazaarEffectRule.d.ts +4 -0
- package/dist/material/decks/winsands/StarlightBazaarEffectRule.js +6 -0
- package/dist/material/decks/winsands/Vandals.d.ts +13 -0
- package/dist/material/decks/winsands/Vandals.js +12 -0
- package/dist/material/decks/winsands/VandalsEffectRule.d.ts +4 -0
- package/dist/material/decks/winsands/VandalsEffectRule.js +14 -0
- package/dist/material/decks/winsands/WindWrath.d.ts +13 -0
- package/dist/material/decks/winsands/WindWrath.js +12 -0
- package/dist/material/decks/winsands/WindWrathEffectRule.d.ts +5 -0
- package/dist/material/decks/winsands/WindWrathEffectRule.js +20 -0
- package/dist/material/decks/winsands/WishLamp.d.ts +13 -0
- package/dist/material/decks/winsands/WishLamp.js +12 -0
- package/dist/material/decks/winsands/WishLampEffectRule.d.ts +10 -0
- package/dist/material/decks/winsands/WishLampEffectRule.js +46 -0
- package/dist/rules/EffectRule.d.ts +1 -0
- package/dist/rules/EffectRule.js +4 -2
- package/dist/rules/PlayCardRule.js +4 -19
- package/dist/rules/PlayerHelper.d.ts +2 -1
- package/dist/rules/PlayerHelper.js +32 -0
- package/dist/rules/PrepareNextRoundRule.js +1 -0
- package/dist/rules/RuleId.d.ts +20 -8
- package/dist/rules/RuleId.js +20 -8
- package/package.json +2 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardTag } from '../../CardTag';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
declare class BonnyTheGunnerRule extends CardRule {
|
|
6
|
+
permanentEffectTag: CardTag;
|
|
7
|
+
}
|
|
8
|
+
export declare const BonnyTheGunner: {
|
|
9
|
+
power: number;
|
|
10
|
+
type: CardType;
|
|
11
|
+
suit: CardSuit;
|
|
12
|
+
rule: typeof BonnyTheGunnerRule;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardTag } from '../../CardTag';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
class BonnyTheGunnerRule extends CardRule {
|
|
6
|
+
permanentEffectTag = CardTag.Cannon;
|
|
7
|
+
}
|
|
8
|
+
export const BonnyTheGunner = {
|
|
9
|
+
power: 2,
|
|
10
|
+
type: CardType.Creature,
|
|
11
|
+
suit: CardSuit.Day,
|
|
12
|
+
rule: BonnyTheGunnerRule
|
|
13
|
+
};
|
|
@@ -2,13 +2,15 @@ import { Memory } from '../../../Memory';
|
|
|
2
2
|
import { PlayerHelper } from '../../../rules/PlayerHelper';
|
|
3
3
|
import { cardProperties } from '../../CardProperties';
|
|
4
4
|
import { CardRule } from '../../CardRule';
|
|
5
|
+
import { CardSuit } from '../../CardSuit';
|
|
5
6
|
import { CardTag } from '../../CardTag';
|
|
6
7
|
import { MaterialType } from '../../MaterialType';
|
|
7
8
|
export class CannonCardRule extends CardRule {
|
|
8
9
|
canBePlayed() {
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
11
|
-
|
|
10
|
+
const hasBonnyTheGunner = new PlayerHelper(this.game, this.player).cardRules.some((rule) => rule.hasPermanentEffectOnTag(CardTag.Cannon));
|
|
11
|
+
if (hasBonnyTheGunner) {
|
|
12
|
+
const currentSuit = this.remind(Memory.Suit);
|
|
13
|
+
return this.properties.suit !== CardSuit.Day || currentSuit !== CardSuit.Night;
|
|
12
14
|
}
|
|
13
15
|
const hasPlayedCannon = this.remind(Memory.CardsPlayed, this.player).some((cardIndex) => cardProperties[this.material(MaterialType.Card).getItem(cardIndex).id.front].tag === CardTag.Cannon);
|
|
14
16
|
if (hasPlayedCannon) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CardSuit } from '../../CardSuit';
|
|
2
|
+
import { CardTag } from '../../CardTag';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { CannonCardRule } from './CannonCardRule';
|
|
5
|
+
declare class DarkArmageddonRule extends CannonCardRule {
|
|
6
|
+
entersEffect: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const DarkArmageddon: {
|
|
9
|
+
power: number;
|
|
10
|
+
type: CardType;
|
|
11
|
+
tag: CardTag;
|
|
12
|
+
suit: CardSuit;
|
|
13
|
+
rule: typeof DarkArmageddonRule;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CardSuit } from '../../CardSuit';
|
|
2
|
+
import { CardTag } from '../../CardTag';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { CannonCardRule } from './CannonCardRule';
|
|
5
|
+
class DarkArmageddonRule extends CannonCardRule {
|
|
6
|
+
entersEffect = true;
|
|
7
|
+
}
|
|
8
|
+
export const DarkArmageddon = {
|
|
9
|
+
power: 2,
|
|
10
|
+
type: CardType.Action,
|
|
11
|
+
tag: CardTag.Cannon,
|
|
12
|
+
suit: CardSuit.Night,
|
|
13
|
+
rule: DarkArmageddonRule
|
|
14
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { Deck } from '../../../Deck';
|
|
3
|
+
import { CardRule } from '../../CardRule';
|
|
4
|
+
import { CardSuit } from '../../CardSuit';
|
|
5
|
+
import { CardType } from '../../CardType';
|
|
6
|
+
declare class EyeOfSkyRule extends CardRule {
|
|
7
|
+
onPlayerTurnStart(player: Deck): MaterialMove[];
|
|
8
|
+
startEffect(): import("@gamepark/rules-api").StartPlayerTurn<number, import("../../Card").Card>[];
|
|
9
|
+
}
|
|
10
|
+
export declare const EyeOfSky: {
|
|
11
|
+
power: number;
|
|
12
|
+
type: CardType;
|
|
13
|
+
suit: CardSuit;
|
|
14
|
+
rule: typeof EyeOfSkyRule;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class EyeOfSkyRule extends CardRule {
|
|
5
|
+
onPlayerTurnStart(player) {
|
|
6
|
+
if (player !== this.player) {
|
|
7
|
+
this.addPendingEffect();
|
|
8
|
+
}
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
startEffect() {
|
|
12
|
+
return [this.startPlayerTurn(this.card, this.opponent)];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const EyeOfSky = {
|
|
16
|
+
power: 2,
|
|
17
|
+
type: CardType.Creature,
|
|
18
|
+
suit: CardSuit.Day,
|
|
19
|
+
rule: EyeOfSkyRule
|
|
20
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CustomMove, MaterialMove, MoveItem } from '@gamepark/rules-api';
|
|
2
|
+
import { DiscardEffectRule } from '../../../rules/DiscardEffectRule';
|
|
3
|
+
export declare class EyeOfSkyEffectRule extends DiscardEffectRule {
|
|
4
|
+
getPlayerMoves(): MaterialMove[];
|
|
5
|
+
onDiscard(move: MoveItem): MaterialMove[];
|
|
6
|
+
onCustomMove(move: CustomMove): MaterialMove[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CustomMoveType } from '../../../CustomMoveType';
|
|
2
|
+
import { Memory } from '../../../Memory';
|
|
3
|
+
import { DiscardEffectRule } from '../../../rules/DiscardEffectRule';
|
|
4
|
+
import { RuleId } from '../../../rules/RuleId';
|
|
5
|
+
export class EyeOfSkyEffectRule extends DiscardEffectRule {
|
|
6
|
+
getPlayerMoves() {
|
|
7
|
+
return [...super.getPlayerMoves(), this.customMove(CustomMoveType.ConcedeRound)];
|
|
8
|
+
}
|
|
9
|
+
onDiscard(move) {
|
|
10
|
+
this.memorize(Memory.CardsPlayed, (cards) => [...cards, move.itemIndex], this.player);
|
|
11
|
+
return [this.customMove(CustomMoveType.Draw, { player: this.player, quantity: 1 }), ...this.endEffect()];
|
|
12
|
+
}
|
|
13
|
+
onCustomMove(move) {
|
|
14
|
+
if (move.type === CustomMoveType.ConcedeRound) {
|
|
15
|
+
return [this.customMove(CustomMoveType.EndEffect), this.startRule(RuleId.EndRound)];
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
return super.onCustomMove(move);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
declare class FortunesCourseRule extends CardRule {
|
|
6
|
+
onWinRound(): MaterialMove[];
|
|
7
|
+
}
|
|
8
|
+
export declare const FortunesCourse: {
|
|
9
|
+
power: number;
|
|
10
|
+
type: CardType;
|
|
11
|
+
suit: CardSuit;
|
|
12
|
+
rule: typeof FortunesCourseRule;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class FortunesCourseRule extends CardRule {
|
|
5
|
+
onWinRound() {
|
|
6
|
+
this.addPendingEffect();
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export const FortunesCourse = {
|
|
11
|
+
power: 3,
|
|
12
|
+
type: CardType.Action,
|
|
13
|
+
suit: CardSuit.Day,
|
|
14
|
+
rule: FortunesCourseRule
|
|
15
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CardSuit } from '../../CardSuit';
|
|
2
|
+
import { CardTag } from '../../CardTag';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { CannonCardRule } from './CannonCardRule';
|
|
5
|
+
declare class GoldenApocalypseRule extends CannonCardRule {
|
|
6
|
+
challenge: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const GoldenApocalypse: {
|
|
9
|
+
power: number;
|
|
10
|
+
type: CardType;
|
|
11
|
+
tag: CardTag;
|
|
12
|
+
suit: CardSuit;
|
|
13
|
+
rule: typeof GoldenApocalypseRule;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CardSuit } from '../../CardSuit';
|
|
2
|
+
import { CardTag } from '../../CardTag';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { CannonCardRule } from './CannonCardRule';
|
|
5
|
+
class GoldenApocalypseRule extends CannonCardRule {
|
|
6
|
+
challenge = true;
|
|
7
|
+
}
|
|
8
|
+
export const GoldenApocalypse = {
|
|
9
|
+
power: 5,
|
|
10
|
+
type: CardType.Action,
|
|
11
|
+
tag: CardTag.Cannon,
|
|
12
|
+
suit: CardSuit.Day,
|
|
13
|
+
rule: GoldenApocalypseRule
|
|
14
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class OscarScullionRule extends CardRule {
|
|
5
|
+
oncePerTurnEffect: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const OscarScullion: {
|
|
8
|
+
power: number;
|
|
9
|
+
type: CardType;
|
|
10
|
+
suit: CardSuit;
|
|
11
|
+
rule: typeof OscarScullionRule;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class OscarScullionRule extends CardRule {
|
|
5
|
+
oncePerTurnEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const OscarScullion = {
|
|
8
|
+
power: 2,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Night,
|
|
11
|
+
rule: OscarScullionRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PutPowerTokenEffectRule } from '../../../rules/PutPowerTokenEffectRule';
|
|
2
|
+
import { cardProperties } from '../../CardProperties';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
import { LocationType } from '../../LocationType';
|
|
5
|
+
import { MaterialType } from '../../MaterialType';
|
|
6
|
+
export class OscarScullionEffectRule extends PutPowerTokenEffectRule {
|
|
7
|
+
getTargets() {
|
|
8
|
+
return this.material(MaterialType.Card)
|
|
9
|
+
.location(LocationType.PlayArea)
|
|
10
|
+
.id((id) => cardProperties[id.front].type === CardType.Creature);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class OttoFactotumRule extends CardRule {
|
|
5
|
+
entersEffect: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const OttoFactotum: {
|
|
8
|
+
power: number;
|
|
9
|
+
type: CardType;
|
|
10
|
+
suit: CardSuit;
|
|
11
|
+
rule: typeof OttoFactotumRule;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class OttoFactotumRule extends CardRule {
|
|
5
|
+
entersEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const OttoFactotum = {
|
|
8
|
+
power: 2,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Night,
|
|
11
|
+
rule: OttoFactotumRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DrawEffectRule } from '../../../rules/DrawEffectRule';
|
|
2
|
+
import { LocationType } from '../../LocationType';
|
|
3
|
+
import { MaterialType } from '../../MaterialType';
|
|
4
|
+
export class OttoFactotumEffectRule extends DrawEffectRule {
|
|
5
|
+
getDrawCount() {
|
|
6
|
+
const cardsInHands = this.material(MaterialType.Card).location(LocationType.PlayerHand);
|
|
7
|
+
return cardsInHands.player(this.nextPlayer).length - cardsInHands.player(this.player).length;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class RiggingRaidersRule extends CardRule {
|
|
5
|
+
oncePerTurnEffect: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const RiggingRaiders: {
|
|
8
|
+
power: number;
|
|
9
|
+
type: CardType;
|
|
10
|
+
suit: CardSuit;
|
|
11
|
+
rule: typeof RiggingRaidersRule;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class RiggingRaidersRule extends CardRule {
|
|
5
|
+
oncePerTurnEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const RiggingRaiders = {
|
|
8
|
+
power: 2,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Night,
|
|
11
|
+
rule: RiggingRaidersRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DestroyEffectRule } from '../../../rules/DestroyEffectRule';
|
|
2
|
+
import { PlayerHelper } from '../../../rules/PlayerHelper';
|
|
3
|
+
import { cardProperties } from '../../CardProperties';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
import { LocationType } from '../../LocationType';
|
|
6
|
+
import { MaterialType } from '../../MaterialType';
|
|
7
|
+
export class RiggingRaidersEffectRule extends DestroyEffectRule {
|
|
8
|
+
getTargets() {
|
|
9
|
+
const helper = new PlayerHelper(this.game);
|
|
10
|
+
const scallywagPower = this.cardRule.getPower();
|
|
11
|
+
return this.material(MaterialType.Card)
|
|
12
|
+
.location(LocationType.PlayArea)
|
|
13
|
+
.player(helper.foe)
|
|
14
|
+
.id((id) => cardProperties[id.front].type === CardType.Creature)
|
|
15
|
+
.index((index) => helper.getCardRule(index).getPower() < scallywagPower);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { Deck } from '../../../Deck';
|
|
3
|
+
import { Card } from '../../Card';
|
|
4
|
+
import { CardRule } from '../../CardRule';
|
|
5
|
+
import { CardSuit } from '../../CardSuit';
|
|
6
|
+
import { CardType } from '../../CardType';
|
|
7
|
+
declare class SeaScorcherRule extends CardRule {
|
|
8
|
+
onCardEnters(card: Card, side: Deck): MaterialMove[];
|
|
9
|
+
}
|
|
10
|
+
export declare const SeaScorcher: {
|
|
11
|
+
power: number;
|
|
12
|
+
type: CardType;
|
|
13
|
+
suit: CardSuit;
|
|
14
|
+
rule: typeof SeaScorcherRule;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cardProperties } from '../../CardProperties';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardTag } from '../../CardTag';
|
|
5
|
+
import { CardType } from '../../CardType';
|
|
6
|
+
class SeaScorcherRule extends CardRule {
|
|
7
|
+
onCardEnters(card, side) {
|
|
8
|
+
if (side === this.player && cardProperties[card].tag === CardTag.Cannon) {
|
|
9
|
+
this.addPendingEffect();
|
|
10
|
+
}
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export const SeaScorcher = {
|
|
15
|
+
power: 1,
|
|
16
|
+
type: CardType.Creature,
|
|
17
|
+
suit: CardSuit.Day,
|
|
18
|
+
rule: SeaScorcherRule
|
|
19
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReturnCardRule } from '../../../rules/ReturnCardRule';
|
|
2
|
+
import { cardProperties } from '../../CardProperties';
|
|
3
|
+
import { CardTag } from '../../CardTag';
|
|
4
|
+
import { LocationType } from '../../LocationType';
|
|
5
|
+
import { MaterialType } from '../../MaterialType';
|
|
6
|
+
export class SeaScorcherEffectRule extends ReturnCardRule {
|
|
7
|
+
getTargets() {
|
|
8
|
+
return this.material(MaterialType.Card)
|
|
9
|
+
.location(LocationType.PlayerDiscard)
|
|
10
|
+
.player(this.player)
|
|
11
|
+
.id((id) => cardProperties[id.front].tag === CardTag.Cannon);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class TideRoverRule extends CardRule {
|
|
5
|
+
entersEffect: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const TideRover: {
|
|
8
|
+
power: number;
|
|
9
|
+
type: CardType;
|
|
10
|
+
suit: CardSuit;
|
|
11
|
+
rule: typeof TideRoverRule;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class TideRoverRule extends CardRule {
|
|
5
|
+
entersEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const TideRover = {
|
|
8
|
+
power: 2,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Twilight,
|
|
11
|
+
rule: TideRoverRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Memory } from '../../../Memory';
|
|
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 TideRoverEffectRule extends EffectRule {
|
|
8
|
+
onRuleStart() {
|
|
9
|
+
const moves = this.endEffect();
|
|
10
|
+
const cardsPlayed = this.remind(Memory.CardsPlayed, this.nextPlayer);
|
|
11
|
+
if (cardsPlayed.length > 0) {
|
|
12
|
+
const cardIndex = cardsPlayed[cardsPlayed.length - 1];
|
|
13
|
+
const card = this.material(MaterialType.Card).getItem(cardIndex);
|
|
14
|
+
if (card.location.type === LocationType.PlayArea && cardProperties[card.id.front].type === CardType.Creature) {
|
|
15
|
+
moves.unshift(this.material(MaterialType.StunToken).createItem({
|
|
16
|
+
location: {
|
|
17
|
+
type: LocationType.CardStunTokens,
|
|
18
|
+
parent: cardIndex
|
|
19
|
+
},
|
|
20
|
+
quantity: 2
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return moves;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class AbiSnakeCharmerRule extends CardRule {
|
|
5
|
+
entersEffect: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const AbiSnakeCharmer: {
|
|
8
|
+
power: number;
|
|
9
|
+
type: CardType;
|
|
10
|
+
suit: CardSuit;
|
|
11
|
+
rule: typeof AbiSnakeCharmerRule;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
class AbiSnakeCharmerRule extends CardRule {
|
|
5
|
+
entersEffect = true;
|
|
6
|
+
}
|
|
7
|
+
export const AbiSnakeCharmer = {
|
|
8
|
+
power: 1,
|
|
9
|
+
type: CardType.Creature,
|
|
10
|
+
suit: CardSuit.Day,
|
|
11
|
+
rule: AbiSnakeCharmerRule
|
|
12
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ItemMove, MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from '../../../rules/EffectRule';
|
|
3
|
+
export declare class AbiSnakeCharmerEffectRule extends EffectRule {
|
|
4
|
+
onRuleStart(): MaterialMove[];
|
|
5
|
+
getPlayerMoves(): MaterialMove[];
|
|
6
|
+
afterItemMove(move: ItemMove): MaterialMove[];
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { isMoveItemType } from '@gamepark/rules-api';
|
|
2
|
+
import { EffectRule } from '../../../rules/EffectRule';
|
|
3
|
+
import { PlayerHelper } from '../../../rules/PlayerHelper';
|
|
4
|
+
import { cardProperties } from '../../CardProperties';
|
|
5
|
+
import { CardType } from '../../CardType';
|
|
6
|
+
import { LocationType } from '../../LocationType';
|
|
7
|
+
import { MaterialType } from '../../MaterialType';
|
|
8
|
+
export class AbiSnakeCharmerEffectRule extends EffectRule {
|
|
9
|
+
onRuleStart() {
|
|
10
|
+
const playerHelper = new PlayerHelper(this.game, this.player);
|
|
11
|
+
const foeHelper = new PlayerHelper(this.game, this.nextPlayer);
|
|
12
|
+
if (foeHelper.getPower() < playerHelper.getPower() + 7) {
|
|
13
|
+
return this.endEffect();
|
|
14
|
+
}
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
getPlayerMoves() {
|
|
18
|
+
return this.material(MaterialType.Card)
|
|
19
|
+
.location(LocationType.PlayArea)
|
|
20
|
+
.id((id) => cardProperties[id.front].type === CardType.Creature)
|
|
21
|
+
.moveItems((item) => ({
|
|
22
|
+
type: LocationType.PlayArea,
|
|
23
|
+
player: item.location.player === this.player ? this.nextPlayer : this.player,
|
|
24
|
+
id: cardProperties[item.id.front].type
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
afterItemMove(move) {
|
|
28
|
+
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayArea) {
|
|
29
|
+
return this.endEffect();
|
|
30
|
+
}
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MaterialMove } from '@gamepark/rules-api';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
declare class AncientCurseRule extends CardRule {
|
|
6
|
+
challenge: boolean;
|
|
7
|
+
onChallengeAccepted(): import("@gamepark/rules-api").CustomMove[];
|
|
8
|
+
onChallengeDeclined(): MaterialMove[];
|
|
9
|
+
}
|
|
10
|
+
export declare const AncientCurse: {
|
|
11
|
+
power: number;
|
|
12
|
+
type: CardType;
|
|
13
|
+
suit: CardSuit;
|
|
14
|
+
rule: typeof AncientCurseRule;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CustomMoveType } from '../../../CustomMoveType';
|
|
2
|
+
import { CardRule } from '../../CardRule';
|
|
3
|
+
import { CardSuit } from '../../CardSuit';
|
|
4
|
+
import { CardType } from '../../CardType';
|
|
5
|
+
class AncientCurseRule extends CardRule {
|
|
6
|
+
challenge = true;
|
|
7
|
+
onChallengeAccepted() {
|
|
8
|
+
this.addPendingEffect();
|
|
9
|
+
return super.onChallengeAccepted();
|
|
10
|
+
}
|
|
11
|
+
onChallengeDeclined() {
|
|
12
|
+
return [
|
|
13
|
+
this.customMove(CustomMoveType.Draw, { player: this.opponent, quantity: 1 }),
|
|
14
|
+
...super.onChallengeDeclined()
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const AncientCurse = {
|
|
19
|
+
power: 3,
|
|
20
|
+
type: CardType.Action,
|
|
21
|
+
suit: CardSuit.Night,
|
|
22
|
+
rule: AncientCurseRule
|
|
23
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CardRule } from '../../CardRule';
|
|
2
|
+
import { CardSuit } from '../../CardSuit';
|
|
3
|
+
import { CardType } from '../../CardType';
|
|
4
|
+
declare class CatadjinnRule extends CardRule {
|
|
5
|
+
challenge: boolean;
|
|
6
|
+
getPowerIfNotStunned(): number;
|
|
7
|
+
}
|
|
8
|
+
export declare const Catadjinn: {
|
|
9
|
+
power: number;
|
|
10
|
+
type: CardType;
|
|
11
|
+
suit: CardSuit;
|
|
12
|
+
rule: typeof CatadjinnRule;
|
|
13
|
+
};
|
|
14
|
+
export {};
|