@gamepark/skyrift 0.4.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CustomMoveType.d.ts +3 -1
- package/dist/CustomMoveType.js +2 -0
- package/dist/Deck.d.ts +2 -0
- package/dist/Deck.js +2 -0
- package/dist/Memory.d.ts +10 -9
- package/dist/Memory.js +10 -9
- package/dist/SkyriftRules.d.ts +20 -8
- package/dist/SkyriftRules.js +16 -4
- package/dist/SkyriftSetup.js +4 -0
- package/dist/material/Card.d.ts +32 -0
- package/dist/material/Card.js +32 -0
- package/dist/material/CardProperties.js +64 -0
- package/dist/material/CardRule.d.ts +9 -4
- package/dist/material/CardRule.js +70 -22
- package/dist/material/Effect.d.ts +2 -0
- package/dist/material/EffectTraits.d.ts +7 -2
- package/dist/material/OngoingEffect.d.ts +11 -2
- package/dist/material/OngoingEffect.js +7 -1
- package/dist/material/decks/BlackHive.d.ts +18 -0
- package/dist/material/decks/BlackHive.js +19 -0
- package/dist/material/decks/MoonDragon.d.ts +18 -0
- package/dist/material/decks/MoonDragon.js +19 -0
- package/dist/material/decks/blackhive/CarefulExcavation.d.ts +21 -0
- package/dist/material/decks/blackhive/CarefulExcavation.js +31 -0
- package/dist/material/decks/blackhive/CaveIn.d.ts +14 -0
- package/dist/material/decks/blackhive/CaveIn.js +18 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.d.ts +10 -0
- package/dist/material/decks/blackhive/CaveInEffectRule.js +55 -0
- package/dist/material/decks/blackhive/CrystalMining.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalMining.js +22 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/CrystalMiningBonusEffectRule.js +10 -0
- package/dist/material/decks/blackhive/CrystalShaft.d.ts +15 -0
- package/dist/material/decks/blackhive/CrystalShaft.js +18 -0
- package/dist/material/decks/blackhive/CycleKeeper.d.ts +13 -0
- package/dist/material/decks/blackhive/CycleKeeper.js +15 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.d.ts +8 -0
- package/dist/material/decks/blackhive/CycleKeeperEffectRule.js +21 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.d.ts +13 -0
- package/dist/material/decks/blackhive/DariusAstraSmith.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarm.d.ts +13 -0
- package/dist/material/decks/blackhive/DarkSwarm.js +15 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.d.ts +6 -0
- package/dist/material/decks/blackhive/DarkSwarmEffectRule.js +18 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.d.ts +15 -0
- package/dist/material/decks/blackhive/ElevatorOfTheAbyss.js +19 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.d.ts +16 -0
- package/dist/material/decks/blackhive/ExplosiveKitty.js +19 -0
- package/dist/material/decks/blackhive/GromIronspike.d.ts +13 -0
- package/dist/material/decks/blackhive/GromIronspike.js +18 -0
- package/dist/material/decks/blackhive/GuntarRustypike.d.ts +20 -0
- package/dist/material/decks/blackhive/GuntarRustypike.js +28 -0
- package/dist/material/decks/blackhive/HiveMother.d.ts +13 -0
- package/dist/material/decks/blackhive/HiveMother.js +18 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.d.ts +13 -0
- package/dist/material/decks/blackhive/LotharBlackclaw.js +22 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.d.ts +4 -0
- package/dist/material/decks/blackhive/LotharBlackclawEffectRule.js +20 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.d.ts +13 -0
- package/dist/material/decks/blackhive/OlgaStonecrusher.js +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.d.ts +15 -0
- package/dist/material/decks/blackhive/ShadowDealer.js +22 -0
- package/dist/material/decks/blackhive/UndergroundScourge.d.ts +13 -0
- package/dist/material/decks/blackhive/UndergroundScourge.js +15 -0
- package/dist/material/decks/gravehurt/CavernSkulker.d.ts +4 -1
- package/dist/material/decks/gravehurt/CavernSkulker.js +18 -5
- package/dist/material/decks/gravehurt/CavernSkulkerEffectRule.js +1 -1
- package/dist/material/decks/gravehurt/Doom.d.ts +5 -1
- package/dist/material/decks/gravehurt/Doom.js +16 -2
- package/dist/material/decks/gravehurt/Nosferatis.d.ts +2 -2
- package/dist/material/decks/gravehurt/Nosferatis.js +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.d.ts +2 -2
- package/dist/material/decks/gravehurt/TheGreatToady.js +2 -2
- package/dist/material/decks/gravehurt/Umbraboros.d.ts +1 -1
- package/dist/material/decks/gravehurt/Umbraboros.js +4 -3
- package/dist/material/decks/gravehurt/WitchingHour.d.ts +3 -3
- package/dist/material/decks/gravehurt/WitchingHour.js +3 -3
- package/dist/material/decks/heathblade/Armada.js +1 -1
- package/dist/material/decks/heathblade/HedgeKnight.d.ts +1 -1
- package/dist/material/decks/heathblade/HedgeKnight.js +3 -4
- package/dist/material/decks/heathblade/PrincessLithaEffectRule.d.ts +2 -1
- package/dist/material/decks/highwave/EyeOfSky.d.ts +1 -1
- package/dist/material/decks/highwave/EyeOfSky.js +2 -2
- package/dist/material/decks/moondragon/AkiraClearink.d.ts +13 -0
- package/dist/material/decks/moondragon/AkiraClearink.js +15 -0
- package/dist/material/decks/moondragon/AzureDragonsPeace.d.ts +13 -0
- package/dist/material/decks/moondragon/AzureDragonsPeace.js +18 -0
- package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.d.ts +10 -0
- package/dist/material/decks/moondragon/AzureDragonsPeaceEffectRule.js +49 -0
- package/dist/material/decks/moondragon/CopyPlayEffectRule.d.ts +6 -0
- package/dist/material/decks/moondragon/CopyPlayEffectRule.js +33 -0
- package/dist/material/decks/moondragon/DartYusagi.d.ts +14 -0
- package/dist/material/decks/moondragon/DartYusagi.js +26 -0
- package/dist/material/decks/moondragon/DuelOfHonor.d.ts +19 -0
- package/dist/material/decks/moondragon/DuelOfHonor.js +35 -0
- package/dist/material/decks/moondragon/Embush.d.ts +17 -0
- package/dist/material/decks/moondragon/Embush.js +26 -0
- package/dist/material/decks/moondragon/EmbushEffectRule.d.ts +7 -0
- package/dist/material/decks/moondragon/EmbushEffectRule.js +26 -0
- package/dist/material/decks/moondragon/EmpressSama.d.ts +13 -0
- package/dist/material/decks/moondragon/EmpressSama.js +15 -0
- package/dist/material/decks/moondragon/EmpressSamaEffectRule.d.ts +7 -0
- package/dist/material/decks/moondragon/EmpressSamaEffectRule.js +29 -0
- package/dist/material/decks/moondragon/GardenProtector.d.ts +15 -0
- package/dist/material/decks/moondragon/GardenProtector.js +18 -0
- package/dist/material/decks/moondragon/ImperialBlade.d.ts +16 -0
- package/dist/material/decks/moondragon/ImperialBlade.js +19 -0
- package/dist/material/decks/moondragon/LotusMuse.d.ts +17 -0
- package/dist/material/decks/moondragon/LotusMuse.js +34 -0
- package/dist/material/decks/moondragon/LotusMuseEffectRule.d.ts +6 -0
- package/dist/material/decks/moondragon/LotusMuseEffectRule.js +24 -0
- package/dist/material/decks/moondragon/PortalOfTheAncestors.d.ts +16 -0
- package/dist/material/decks/moondragon/PortalOfTheAncestors.js +21 -0
- package/dist/material/decks/moondragon/RiteOfTastes.d.ts +15 -0
- package/dist/material/decks/moondragon/RiteOfTastes.js +18 -0
- package/dist/material/decks/moondragon/RoosterDance.d.ts +16 -0
- package/dist/material/decks/moondragon/RoosterDance.js +19 -0
- package/dist/material/decks/moondragon/ShardsAlchimist.d.ts +16 -0
- package/dist/material/decks/moondragon/ShardsAlchimist.js +22 -0
- package/dist/material/decks/moondragon/SpiritOracle.d.ts +16 -0
- package/dist/material/decks/moondragon/SpiritOracle.js +27 -0
- package/dist/material/decks/moondragon/SteppesColossus.d.ts +13 -0
- package/dist/material/decks/moondragon/SteppesColossus.js +15 -0
- package/dist/material/decks/moondragon/YoruNightink.d.ts +13 -0
- package/dist/material/decks/moondragon/YoruNightink.js +18 -0
- package/dist/material/decks/windsands/AbiSnakeCharmer.d.ts +4 -1
- package/dist/material/decks/windsands/AbiSnakeCharmer.js +14 -1
- package/dist/material/decks/windsands/DeathTrap.d.ts +2 -0
- package/dist/material/decks/windsands/DeathTrap.js +4 -0
- package/dist/material/decks/windsands/MalikShadowtracker.d.ts +3 -3
- package/dist/material/decks/windsands/MalikShadowtracker.js +4 -4
- package/dist/material/decks/windsands/OasisShaman.d.ts +3 -1
- package/dist/material/decks/windsands/OasisShaman.js +3 -0
- package/dist/rules/ChallengeEffectRule.d.ts +2 -1
- package/dist/rules/ChallengeResponseRule.d.ts +2 -1
- package/dist/rules/DiscardEffectRule.js +1 -1
- package/dist/rules/DrawEffectRule.js +1 -1
- package/dist/rules/EffectRule.js +7 -1
- package/dist/rules/EffectsHelper.d.ts +6 -0
- package/dist/rules/EffectsHelper.js +15 -0
- package/dist/rules/EndPlayerTurnRule.d.ts +2 -1
- package/dist/rules/EndPlayerTurnRule.js +3 -0
- package/dist/rules/EndRoundRule.d.ts +1 -1
- package/dist/rules/GainCrystalEffectRule.js +1 -1
- package/dist/rules/MulliganEffectRule.d.ts +2 -1
- package/dist/rules/MulliganEffectRule.js +15 -4
- package/dist/rules/PlayCardEffectRule.d.ts +1 -0
- package/dist/rules/PlayCardEffectRule.js +9 -2
- package/dist/rules/PlayCardRule.d.ts +0 -1
- package/dist/rules/PlayCardRule.js +1 -4
- package/dist/rules/PlayerHelper.d.ts +2 -1
- package/dist/rules/PlayerHelper.js +24 -17
- package/dist/rules/PrepareNextRoundRule.d.ts +5 -1
- package/dist/rules/PrepareNextRoundRule.js +4 -2
- package/dist/rules/RuleId.d.ts +8 -2
- package/dist/rules/RuleId.js +8 -2
- package/dist/rules/SimultaneousEffectRule.d.ts +5 -0
- package/dist/rules/SimultaneousEffectRule.js +14 -0
- package/dist/rules/StartPlayerTurnRule.js +20 -2
- package/dist/rules/StashPowerTokensEffectRule.js +1 -1
- package/dist/rules/StealCrystalEffectRule.js +2 -2
- package/dist/rules/SwitchSideEffectRule.d.ts +3 -5
- package/dist/rules/SwitchSideEffectRule.js +2 -6
- package/package.json +3 -3
|
@@ -3,7 +3,9 @@ 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';
|
|
8
|
+
import { EffectsHelper } from './EffectsHelper';
|
|
7
9
|
import { PlayerHelper } from './PlayerHelper';
|
|
8
10
|
import { RuleId } from './RuleId';
|
|
9
11
|
export class StartPlayerTurnRule extends PlayerTurnRule {
|
|
@@ -12,18 +14,34 @@ export class StartPlayerTurnRule extends PlayerTurnRule {
|
|
|
12
14
|
this.memorize(Memory.CurrentPlayer, this.player);
|
|
13
15
|
this.memorize(Memory.CardsPlayed, [], this.player);
|
|
14
16
|
this.memorize(Memory.ActivatedCards, []);
|
|
15
|
-
this.
|
|
17
|
+
const effectsHelper = new EffectsHelper(this.game);
|
|
18
|
+
if (effectsHelper.getActiveOngoingEffects(OngoingEffectType.LockSuit).length === 0) {
|
|
19
|
+
this.forget(Memory.Suit);
|
|
20
|
+
}
|
|
21
|
+
const keepActionCardEffect = effectsHelper.getActiveOngoingEffects(OngoingEffectType.KeepActionCard).find((e) => this.material(MaterialType.Card).getItem(e.cardIndex).location.player === this.player);
|
|
16
22
|
const actionCards = this.material(MaterialType.Card)
|
|
17
23
|
.location(LocationType.PlayArea)
|
|
18
24
|
.player(this.player)
|
|
19
25
|
.filter((card) => cardProperties[card.id.front].type === CardType.Action);
|
|
20
|
-
|
|
26
|
+
if (keepActionCardEffect && !keepActionCardEffect.targets && actionCards.length > 0) {
|
|
27
|
+
return [this.startPlayerTurn(RuleId.EmpressSamaEffect, this.player)];
|
|
28
|
+
}
|
|
29
|
+
const keptCard = keepActionCardEffect?.targets?.[0];
|
|
30
|
+
const toDiscard = keptCard !== undefined ? actionCards.index((index) => index !== keptCard) : actionCards;
|
|
31
|
+
moves.push(...toDiscard.moveItems((item) => ({ type: LocationType.PlayerDiscard, player: item.id.back })));
|
|
32
|
+
if (keepActionCardEffect?.targets) {
|
|
33
|
+
this.memorize(Memory.OngoingEffects, (effects) => effects.map((e) => e.type === OngoingEffectType.KeepActionCard && e.cardIndex === keepActionCardEffect.cardIndex
|
|
34
|
+
? { ...e, targets: undefined } : e));
|
|
35
|
+
}
|
|
21
36
|
for (const cardRule of new PlayerHelper(this.game, this.player).cardRules) {
|
|
22
37
|
cardRule.onPlayerTurnStart?.();
|
|
23
38
|
}
|
|
24
39
|
for (const cardRule of new PlayerHelper(this.game, this.nextPlayer).cardRules) {
|
|
25
40
|
cardRule.onFoeTurnStart?.();
|
|
26
41
|
}
|
|
42
|
+
this.memorize(Memory.OngoingEffects, (effects) => effects
|
|
43
|
+
.map((e) => e.turnsLeft !== undefined ? { ...e, turnsLeft: e.turnsLeft - 1 } : e)
|
|
44
|
+
.filter((e) => e.turnsLeft === undefined || e.turnsLeft > 0));
|
|
27
45
|
const stunTokens = this.material(MaterialType.StunToken).location(LocationType.CardStunTokens);
|
|
28
46
|
moves.push(...stunTokens.deleteItems(1));
|
|
29
47
|
const pendingEffects = this.remind(Memory.PendingEffects);
|
|
@@ -6,7 +6,7 @@ export class StashPowerTokensEffectRule extends EffectRule {
|
|
|
6
6
|
const count = this.cardRule.getStashPowerTokenCount?.() ?? 1;
|
|
7
7
|
return [
|
|
8
8
|
this.material(MaterialType.PowerToken).createItem({
|
|
9
|
-
location: { type: LocationType.PlayerStash, player: this.player },
|
|
9
|
+
location: { type: LocationType.PlayerStash, player: this.cardRule.player },
|
|
10
10
|
quantity: count
|
|
11
11
|
}),
|
|
12
12
|
...this.endEffect()
|
|
@@ -4,9 +4,9 @@ import { EffectRule } from './EffectRule';
|
|
|
4
4
|
export class StealCrystalEffectRule extends EffectRule {
|
|
5
5
|
onRuleStart() {
|
|
6
6
|
const moves = this.endEffect();
|
|
7
|
-
const foeCrystals = this.material(MaterialType.Crystal).location(LocationType.PlayerCrystals).player(this.
|
|
7
|
+
const foeCrystals = this.material(MaterialType.Crystal).location(LocationType.PlayerCrystals).player(this.cardRule.foe);
|
|
8
8
|
if (foeCrystals.length > 0) {
|
|
9
|
-
moves.unshift(foeCrystals.moveItem({ type: LocationType.PlayerCrystals, player: this.player }));
|
|
9
|
+
moves.unshift(foeCrystals.moveItem({ type: LocationType.PlayerCrystals, player: this.cardRule.player }));
|
|
10
10
|
}
|
|
11
11
|
return moves;
|
|
12
12
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { ItemMove,
|
|
2
|
-
import { CardRule } from '../material/CardRule';
|
|
1
|
+
import { ItemMove, MaterialMove } from '@gamepark/rules-api';
|
|
3
2
|
import { SwitchSideEffect } from '../material/EffectTraits';
|
|
4
3
|
import { EffectRule } from './EffectRule';
|
|
5
|
-
export declare class SwitchSideEffectRule extends EffectRule {
|
|
6
|
-
get cardRule(): CardRule & SwitchSideEffect;
|
|
4
|
+
export declare class SwitchSideEffectRule extends EffectRule<SwitchSideEffect> {
|
|
7
5
|
onRuleStart(): MaterialMove[];
|
|
8
6
|
getPlayerMoves(): MaterialMove[];
|
|
9
|
-
getTargets(): Material
|
|
7
|
+
getTargets(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
10
8
|
afterItemMove(move: ItemMove): MaterialMove[];
|
|
11
9
|
}
|
|
@@ -4,12 +4,8 @@ import { LocationType } from '../material/LocationType';
|
|
|
4
4
|
import { MaterialType } from '../material/MaterialType';
|
|
5
5
|
import { EffectRule } from './EffectRule';
|
|
6
6
|
export class SwitchSideEffectRule extends EffectRule {
|
|
7
|
-
get cardRule() {
|
|
8
|
-
return super.cardRule;
|
|
9
|
-
}
|
|
10
7
|
onRuleStart() {
|
|
11
|
-
|
|
12
|
-
if (!targets.length) {
|
|
8
|
+
if (!this.getTargets().length) {
|
|
13
9
|
return this.endEffect();
|
|
14
10
|
}
|
|
15
11
|
return [];
|
|
@@ -22,7 +18,7 @@ export class SwitchSideEffectRule extends EffectRule {
|
|
|
22
18
|
}));
|
|
23
19
|
}
|
|
24
20
|
getTargets() {
|
|
25
|
-
return this.cardRule.getSwitchSideTargets();
|
|
21
|
+
return this.cardRule.getSwitchSideTargets?.() ?? this.material(MaterialType.Card).location(LocationType.PlayArea);
|
|
26
22
|
}
|
|
27
23
|
afterItemMove(move) {
|
|
28
24
|
if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayArea) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/skyrift",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "The rules of SkyRift adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"es-toolkit": "^1.39.10"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@gamepark/rules-api": "~7.5.
|
|
29
|
+
"@gamepark/rules-api": "~7.5.1",
|
|
30
30
|
"es-toolkit": "^1.43.0",
|
|
31
31
|
"vitest": "^4.0.15"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "ae6f1204deb145c936b165e0968ce50f79fe8645"
|
|
34
34
|
}
|