@gamepark/skyrift 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CustomMoveType.d.ts +2 -1
- package/dist/CustomMoveType.js +1 -0
- package/dist/Deck.d.ts +1 -0
- package/dist/Deck.js +1 -0
- package/dist/Memory.d.ts +10 -9
- package/dist/Memory.js +10 -9
- package/dist/SkyriftRules.d.ts +6 -2
- package/dist/SkyriftRules.js +6 -2
- package/dist/SkyriftSetup.js +2 -0
- package/dist/material/Card.d.ts +16 -0
- package/dist/material/Card.js +16 -0
- package/dist/material/CardProperties.js +32 -0
- package/dist/material/CardRule.d.ts +2 -1
- package/dist/material/CardRule.js +10 -3
- package/dist/material/OngoingEffect.d.ts +3 -1
- package/dist/material/OngoingEffect.js +2 -0
- package/dist/material/decks/BlackHive.d.ts +18 -0
- package/dist/material/decks/BlackHive.js +19 -0
- package/dist/material/decks/blackhive/CarefulExcavation.d.ts +20 -0
- package/dist/material/decks/blackhive/CarefulExcavation.js +31 -0
- package/dist/material/decks/blackhive/CaveIn.d.ts +14 -0
- package/dist/material/decks/blackhive/CaveIn.js +18 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.d.ts +10 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.js +55 -0
- package/dist/material/decks/blackhive/CrystalMining.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalMining.js +22 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.js +10 -0
- package/dist/material/decks/blackhive/CrystalShaft.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalShaft.js +18 -0
- package/dist/material/decks/blackhive/CycleKeeper.d.ts +13 -0
- package/dist/material/decks/blackhive/CycleKeeper.js +15 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.d.ts +6 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.js +21 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.d.ts +13 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarm.d.ts +13 -0
- package/dist/material/decks/blackhive/DarkSwarm.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.d.ts +6 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.js +18 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.d.ts +15 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.js +19 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.d.ts +16 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.js +19 -0
- package/dist/material/decks/blackhive/GromIronspike.d.ts +13 -0
- package/dist/material/decks/blackhive/GromIronspike.js +18 -0
- package/dist/material/decks/blackhive/GuntarRustypike.d.ts +20 -0
- package/dist/material/decks/blackhive/GuntarRustypike.js +28 -0
- package/dist/material/decks/blackhive/HiveMother.d.ts +13 -0
- package/dist/material/decks/blackhive/HiveMother.js +18 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.d.ts +13 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.js +22 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.js +20 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.d.ts +13 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.js +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.d.ts +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.js +22 -0
- package/dist/material/decks/blackhive/UndergroundScourge.d.ts +13 -0
- package/dist/material/decks/blackhive/UndergroundScourge.js +15 -0
- package/dist/material/decks/gravehurt/CavernSkulker.d.ts +4 -1
- package/dist/material/decks/gravehurt/CavernSkulker.js +18 -5
- package/dist/material/decks/gravehurt/Doom.d.ts +5 -1
- package/dist/material/decks/gravehurt/Doom.js +16 -2
- package/dist/material/decks/gravehurt/Nosferatis.d.ts +2 -2
- package/dist/material/decks/gravehurt/Nosferatis.js +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.d.ts +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.js +2 -2
- package/dist/material/decks/heathblade/Armada.js +1 -1
- package/dist/material/decks/highwave/BoardingPartyEffectRule.d.ts +0 -1
- package/dist/material/decks/highwave/BoardingPartyEffectRule.js +0 -6
- package/dist/material/decks/highwave/EyeOfSky.d.ts +1 -1
- package/dist/material/decks/highwave/EyeOfSky.js +2 -2
- package/dist/rules/DestroyEffectRule.d.ts +1 -1
- package/dist/rules/DestroyEffectRule.js +8 -3
- package/dist/rules/EffectRule.js +1 -1
- package/dist/rules/EndPlayerTurnRule.js +3 -0
- package/dist/rules/MulliganEffectRule.d.ts +2 -1
- package/dist/rules/MulliganEffectRule.js +15 -4
- package/dist/rules/PlayCardRule.d.ts +0 -1
- package/dist/rules/PlayCardRule.js +1 -4
- package/dist/rules/PlayerHelper.d.ts +1 -0
- package/dist/rules/PlayerHelper.js +6 -1
- package/dist/rules/RuleId.d.ts +3 -1
- package/dist/rules/RuleId.js +3 -1
- package/dist/rules/SimultaneousEffectRule.d.ts +5 -0
- package/dist/rules/SimultaneousEffectRule.js +14 -0
- package/dist/rules/StartPlayerTurnRule.js +4 -1
- package/package.json +2 -2
|
@@ -7,5 +7,4 @@ export declare class BoardingPartyEffectRule extends DestroyEffectRule {
|
|
|
7
7
|
getTargets(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
8
8
|
onCardDestroyed(): import("@gamepark/rules-api").MaterialMove[];
|
|
9
9
|
onCustomMove(move: CustomMove): import("@gamepark/rules-api").MaterialMove[];
|
|
10
|
-
onRuleEnd(): never[];
|
|
11
10
|
}
|
|
@@ -3,7 +3,7 @@ import { CardSuit } from '../../CardSuit';
|
|
|
3
3
|
import { CardType } from '../../CardType';
|
|
4
4
|
declare class EyeOfSkyRule extends CardRule {
|
|
5
5
|
onFoeTurnStart(): void;
|
|
6
|
-
|
|
6
|
+
getEffectPlayers(): number[];
|
|
7
7
|
}
|
|
8
8
|
export declare const EyeOfSky: {
|
|
9
9
|
power: number;
|
|
@@ -35,10 +35,15 @@ export class DestroyEffectRule extends EffectRule {
|
|
|
35
35
|
}
|
|
36
36
|
onCardDestroyed() {
|
|
37
37
|
const remaining = this.memorize(Memory.EffectCount, (c) => c - 1);
|
|
38
|
-
|
|
38
|
+
if (remaining <= 0 || !this.getTargets().length) {
|
|
39
|
+
return this.endEffect();
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
|
-
|
|
45
|
+
onEndEffect() {
|
|
41
46
|
this.forget(Memory.EffectCount);
|
|
42
|
-
return
|
|
47
|
+
return super.onEndEffect();
|
|
43
48
|
}
|
|
44
49
|
}
|
package/dist/rules/EffectRule.js
CHANGED
|
@@ -39,7 +39,7 @@ export class EffectRule extends PlayerTurnRule {
|
|
|
39
39
|
}
|
|
40
40
|
const currentPlayer = this.remind(Memory.CurrentPlayer);
|
|
41
41
|
const playerHelper = new PlayerHelper(this.game, currentPlayer);
|
|
42
|
-
if (
|
|
42
|
+
if (playerHelper.mustPassTurn()) {
|
|
43
43
|
return [this.startPlayerTurn(RuleId.EndPlayerTurn, currentPlayer)];
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
2
|
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { OngoingEffectType } from '../material/OngoingEffect';
|
|
4
|
+
import { Memory } from '../Memory';
|
|
3
5
|
import { RuleId } from './RuleId';
|
|
4
6
|
export class EndPlayerTurnRule extends PlayerTurnRule {
|
|
5
7
|
getPlayerMoves() {
|
|
@@ -7,6 +9,7 @@ export class EndPlayerTurnRule extends PlayerTurnRule {
|
|
|
7
9
|
}
|
|
8
10
|
onCustomMove(move) {
|
|
9
11
|
if (move.type === CustomMoveType.Pass) {
|
|
12
|
+
this.memorize(Memory.OngoingEffects, (effects) => effects.filter((e) => e.type !== OngoingEffectType.PassTurn));
|
|
10
13
|
return [this.startPlayerTurn(RuleId.StartPlayerTurn, this.nextPlayer)];
|
|
11
14
|
}
|
|
12
15
|
return [];
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { CustomMove } from '@gamepark/rules-api';
|
|
2
2
|
import { DiscardEffectRule } from './DiscardEffectRule';
|
|
3
3
|
export declare class MulliganEffectRule extends DiscardEffectRule {
|
|
4
|
-
get discardCount(): number;
|
|
5
4
|
getPlayerMoves(): import("@gamepark/rules-api").MaterialMove[];
|
|
5
|
+
onRuleStart(): never[];
|
|
6
|
+
onDiscard(): never[];
|
|
6
7
|
onCustomMove(move: CustomMove): import("@gamepark/rules-api").MaterialMove[];
|
|
7
8
|
}
|
|
@@ -2,17 +2,28 @@ import { CustomMoveType } from '../CustomMoveType';
|
|
|
2
2
|
import { Memory } from '../Memory';
|
|
3
3
|
import { DiscardEffectRule } from './DiscardEffectRule';
|
|
4
4
|
export class MulliganEffectRule extends DiscardEffectRule {
|
|
5
|
-
get discardCount() {
|
|
6
|
-
return Infinity;
|
|
7
|
-
}
|
|
8
5
|
getPlayerMoves() {
|
|
9
6
|
const moves = super.getPlayerMoves();
|
|
10
7
|
moves.push(this.customMove(CustomMoveType.Pass));
|
|
11
8
|
return moves;
|
|
12
9
|
}
|
|
10
|
+
onRuleStart() {
|
|
11
|
+
this.memorize(Memory.EffectCount, 0);
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
onDiscard() {
|
|
15
|
+
this.memorize(Memory.EffectCount, (count) => count + 1);
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
13
18
|
onCustomMove(move) {
|
|
14
19
|
if (move.type === CustomMoveType.Pass) {
|
|
15
|
-
|
|
20
|
+
const discarded = this.remind(Memory.EffectCount);
|
|
21
|
+
if (discarded > 0) {
|
|
22
|
+
return [this.customMove(CustomMoveType.Draw, { player: this.player, quantity: discarded }), ...this.endEffect()];
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return this.endEffect();
|
|
26
|
+
}
|
|
16
27
|
}
|
|
17
28
|
return super.onCustomMove(move);
|
|
18
29
|
}
|
|
@@ -49,7 +49,7 @@ export class PlayCardRule extends PlayerTurnRule {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
if (isMoveItemType(MaterialType.Card)(move) || isMoveItemType(MaterialType.PowerToken)(move)) {
|
|
52
|
-
if (this.
|
|
52
|
+
if (new PlayerHelper(this.game, this.player).mustPassTurn()) {
|
|
53
53
|
return [this.startRule(RuleId.EndPlayerTurn)];
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -70,7 +70,4 @@ export class PlayCardRule extends PlayerTurnRule {
|
|
|
70
70
|
}
|
|
71
71
|
return [];
|
|
72
72
|
}
|
|
73
|
-
hasMorePower() {
|
|
74
|
-
return new PlayerHelper(this.game, this.player).getPower() > new PlayerHelper(this.game, this.nextPlayer).getPower();
|
|
75
|
-
}
|
|
76
73
|
}
|
|
@@ -30,7 +30,8 @@ export class PlayerHelper extends MaterialRulesPart {
|
|
|
30
30
|
return this.cardsInPlay.id((id) => id.front === card).length > 0;
|
|
31
31
|
}
|
|
32
32
|
getPower() {
|
|
33
|
-
|
|
33
|
+
const foeHelper = new PlayerHelper(this.game, this.foe);
|
|
34
|
+
return sumBy(this.cardRules, (rule) => rule.getPower()) + sumBy(foeHelper.cardRules, (rule) => rule.getFoePowerModifier());
|
|
34
35
|
}
|
|
35
36
|
get foe() {
|
|
36
37
|
return this.game.players.find((p) => p !== this.player);
|
|
@@ -38,6 +39,10 @@ export class PlayerHelper extends MaterialRulesPart {
|
|
|
38
39
|
hasMorePower() {
|
|
39
40
|
return this.getPower() > new PlayerHelper(this.game, this.foe).getPower();
|
|
40
41
|
}
|
|
42
|
+
mustPassTurn() {
|
|
43
|
+
const passTurn = this.remind(Memory.OngoingEffects).some(e => e.type === OngoingEffectType.PassTurn);
|
|
44
|
+
return passTurn || (this.remind(Memory.CardsPlayed, this.player).length > 0 && this.hasMorePower());
|
|
45
|
+
}
|
|
41
46
|
onCardPlayed(cardIndex) {
|
|
42
47
|
this.memorize(Memory.CardsPlayed, (cards) => [...cards, cardIndex], this.player);
|
|
43
48
|
const cardRule = createCardRule(this.game, cardIndex);
|
package/dist/rules/RuleId.d.ts
CHANGED
|
@@ -17,12 +17,14 @@ export declare enum RuleId {
|
|
|
17
17
|
GainCrystalEffect = 29,
|
|
18
18
|
StealCrystalEffect = 30,
|
|
19
19
|
PlayCardEffect = 31,
|
|
20
|
+
MulliganEffect = 32,
|
|
20
21
|
PrincessLithaEffect = 103,
|
|
21
|
-
ArmadaEffect = 110,
|
|
22
22
|
AbiSnakeCharmerEffect = 204,
|
|
23
23
|
WindWrathEffect = 215,
|
|
24
24
|
CavernSkulkerEffect = 302,
|
|
25
25
|
DoomEffect = 315,
|
|
26
|
+
CycleKeeperEffect = 409,
|
|
27
|
+
CaveInEffect = 413,
|
|
26
28
|
EyeOfSkyEffect = 603,
|
|
27
29
|
BoardingPartyEffect = 614
|
|
28
30
|
}
|
package/dist/rules/RuleId.js
CHANGED
|
@@ -19,12 +19,14 @@ export var RuleId;
|
|
|
19
19
|
RuleId[RuleId["GainCrystalEffect"] = 29] = "GainCrystalEffect";
|
|
20
20
|
RuleId[RuleId["StealCrystalEffect"] = 30] = "StealCrystalEffect";
|
|
21
21
|
RuleId[RuleId["PlayCardEffect"] = 31] = "PlayCardEffect";
|
|
22
|
+
RuleId[RuleId["MulliganEffect"] = 32] = "MulliganEffect";
|
|
22
23
|
RuleId[RuleId["PrincessLithaEffect"] = 103] = "PrincessLithaEffect";
|
|
23
|
-
RuleId[RuleId["ArmadaEffect"] = 110] = "ArmadaEffect";
|
|
24
24
|
RuleId[RuleId["AbiSnakeCharmerEffect"] = 204] = "AbiSnakeCharmerEffect";
|
|
25
25
|
RuleId[RuleId["WindWrathEffect"] = 215] = "WindWrathEffect";
|
|
26
26
|
RuleId[RuleId["CavernSkulkerEffect"] = 302] = "CavernSkulkerEffect";
|
|
27
27
|
RuleId[RuleId["DoomEffect"] = 315] = "DoomEffect";
|
|
28
|
+
RuleId[RuleId["CycleKeeperEffect"] = 409] = "CycleKeeperEffect";
|
|
29
|
+
RuleId[RuleId["CaveInEffect"] = 413] = "CaveInEffect";
|
|
28
30
|
RuleId[RuleId["EyeOfSkyEffect"] = 603] = "EyeOfSkyEffect";
|
|
29
31
|
RuleId[RuleId["BoardingPartyEffect"] = 614] = "BoardingPartyEffect";
|
|
30
32
|
})(RuleId || (RuleId = {}));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SimultaneousRule } from '@gamepark/rules-api';
|
|
2
|
+
import { CustomMoveType } from '../CustomMoveType';
|
|
3
|
+
import { EffectRule } from './EffectRule';
|
|
4
|
+
export class SimultaneousEffectRule extends SimultaneousRule {
|
|
5
|
+
getMovesAfterPlayersDone() {
|
|
6
|
+
return [this.customMove(CustomMoveType.EndEffect)];
|
|
7
|
+
}
|
|
8
|
+
onCustomMove(move) {
|
|
9
|
+
if (move.type === CustomMoveType.EndEffect) {
|
|
10
|
+
return new EffectRule(this.game).onEndEffect();
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -3,6 +3,7 @@ import { cardProperties } from '../material/CardProperties';
|
|
|
3
3
|
import { CardType } from '../material/CardType';
|
|
4
4
|
import { LocationType } from '../material/LocationType';
|
|
5
5
|
import { MaterialType } from '../material/MaterialType';
|
|
6
|
+
import { OngoingEffectType } from '../material/OngoingEffect';
|
|
6
7
|
import { Memory } from '../Memory';
|
|
7
8
|
import { PlayerHelper } from './PlayerHelper';
|
|
8
9
|
import { RuleId } from './RuleId';
|
|
@@ -12,7 +13,9 @@ export class StartPlayerTurnRule extends PlayerTurnRule {
|
|
|
12
13
|
this.memorize(Memory.CurrentPlayer, this.player);
|
|
13
14
|
this.memorize(Memory.CardsPlayed, [], this.player);
|
|
14
15
|
this.memorize(Memory.ActivatedCards, []);
|
|
15
|
-
this.
|
|
16
|
+
if (!this.remind(Memory.OngoingEffects).some(e => e.type === OngoingEffectType.LockSuit)) {
|
|
17
|
+
this.forget(Memory.Suit);
|
|
18
|
+
}
|
|
16
19
|
const actionCards = this.material(MaterialType.Card)
|
|
17
20
|
.location(LocationType.PlayArea)
|
|
18
21
|
.player(this.player)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/skyrift",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "The rules of SkyRift adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"es-toolkit": "^1.43.0",
|
|
31
31
|
"vitest": "^4.0.15"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "78e16066c5404fd72217e96816b3d8e9396e9993"
|
|
34
34
|
}
|