@gamepark/skyrift 0.2.9 → 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.
Files changed (81) hide show
  1. package/dist/Deck.d.ts +1 -0
  2. package/dist/Deck.js +1 -0
  3. package/dist/Memory.d.ts +2 -1
  4. package/dist/Memory.js +1 -0
  5. package/dist/SkyriftRules.d.ts +21 -0
  6. package/dist/SkyriftRules.js +27 -0
  7. package/dist/SkyriftSetup.js +3 -0
  8. package/dist/material/Card.d.ts +16 -0
  9. package/dist/material/Card.js +16 -0
  10. package/dist/material/CardProperties.js +32 -0
  11. package/dist/material/CardRule.d.ts +3 -2
  12. package/dist/material/CardRule.js +14 -0
  13. package/dist/material/OngoingEffect.d.ts +8 -0
  14. package/dist/material/OngoingEffect.js +5 -0
  15. package/dist/material/decks/WinSands.d.ts +18 -0
  16. package/dist/material/decks/WinSands.js +19 -0
  17. package/dist/material/decks/heathblade/OzmaTheMageEffectRule.js +1 -3
  18. package/dist/material/decks/heathblade/RobbinsMasterOfArmsEffectRule.js +1 -3
  19. package/dist/material/decks/winsands/AbiSnakeCharmer.d.ts +13 -0
  20. package/dist/material/decks/winsands/AbiSnakeCharmer.js +12 -0
  21. package/dist/material/decks/winsands/AbiSnakeCharmerEffectRule.d.ts +7 -0
  22. package/dist/material/decks/winsands/AbiSnakeCharmerEffectRule.js +33 -0
  23. package/dist/material/decks/winsands/AncientCurse.d.ts +16 -0
  24. package/dist/material/decks/winsands/AncientCurse.js +23 -0
  25. package/dist/material/decks/winsands/Catadjinn.d.ts +14 -0
  26. package/dist/material/decks/winsands/Catadjinn.js +24 -0
  27. package/dist/material/decks/winsands/CreatureBonusCardRule.d.ts +4 -0
  28. package/dist/material/decks/winsands/CreatureBonusCardRule.js +14 -0
  29. package/dist/material/decks/winsands/DeathTrap.d.ts +14 -0
  30. package/dist/material/decks/winsands/DeathTrap.js +16 -0
  31. package/dist/material/decks/winsands/DeathTrapEffectRule.d.ts +4 -0
  32. package/dist/material/decks/winsands/DeathTrapEffectRule.js +18 -0
  33. package/dist/material/decks/winsands/DesertRaider.d.ts +13 -0
  34. package/dist/material/decks/winsands/DesertRaider.js +12 -0
  35. package/dist/material/decks/winsands/DesertRaiderEffectRule.d.ts +4 -0
  36. package/dist/material/decks/winsands/DesertRaiderEffectRule.js +17 -0
  37. package/dist/material/decks/winsands/DuneWardrums.d.ts +12 -0
  38. package/dist/material/decks/winsands/DuneWardrums.js +22 -0
  39. package/dist/material/decks/winsands/ErgDeathslayer.d.ts +13 -0
  40. package/dist/material/decks/winsands/ErgDeathslayer.js +19 -0
  41. package/dist/material/decks/winsands/MalikShadowtracker.d.ts +14 -0
  42. package/dist/material/decks/winsands/MalikShadowtracker.js +16 -0
  43. package/dist/material/decks/winsands/MalikShadowtrackerEffectRule.d.ts +4 -0
  44. package/dist/material/decks/winsands/MalikShadowtrackerEffectRule.js +13 -0
  45. package/dist/material/decks/winsands/Metamorph.d.ts +14 -0
  46. package/dist/material/decks/winsands/Metamorph.js +15 -0
  47. package/dist/material/decks/winsands/MushaFakir.d.ts +15 -0
  48. package/dist/material/decks/winsands/MushaFakir.js +16 -0
  49. package/dist/material/decks/winsands/OasisShaman.d.ts +13 -0
  50. package/dist/material/decks/winsands/OasisShaman.js +12 -0
  51. package/dist/material/decks/winsands/OasisShamanEffectRule.d.ts +8 -0
  52. package/dist/material/decks/winsands/OasisShamanEffectRule.js +33 -0
  53. package/dist/material/decks/winsands/SandWalkers.d.ts +17 -0
  54. package/dist/material/decks/winsands/SandWalkers.js +26 -0
  55. package/dist/material/decks/winsands/SandWalkersEffectRule.d.ts +5 -0
  56. package/dist/material/decks/winsands/SandWalkersEffectRule.js +25 -0
  57. package/dist/material/decks/winsands/StarlightBazaar.d.ts +13 -0
  58. package/dist/material/decks/winsands/StarlightBazaar.js +12 -0
  59. package/dist/material/decks/winsands/StarlightBazaarEffectRule.d.ts +4 -0
  60. package/dist/material/decks/winsands/StarlightBazaarEffectRule.js +6 -0
  61. package/dist/material/decks/winsands/Vandals.d.ts +13 -0
  62. package/dist/material/decks/winsands/Vandals.js +12 -0
  63. package/dist/material/decks/winsands/VandalsEffectRule.d.ts +4 -0
  64. package/dist/material/decks/winsands/VandalsEffectRule.js +14 -0
  65. package/dist/material/decks/winsands/WindWrath.d.ts +13 -0
  66. package/dist/material/decks/winsands/WindWrath.js +12 -0
  67. package/dist/material/decks/winsands/WindWrathEffectRule.d.ts +5 -0
  68. package/dist/material/decks/winsands/WindWrathEffectRule.js +20 -0
  69. package/dist/material/decks/winsands/WishLamp.d.ts +13 -0
  70. package/dist/material/decks/winsands/WishLamp.js +12 -0
  71. package/dist/material/decks/winsands/WishLampEffectRule.d.ts +10 -0
  72. package/dist/material/decks/winsands/WishLampEffectRule.js +46 -0
  73. package/dist/rules/EffectRule.d.ts +1 -0
  74. package/dist/rules/EffectRule.js +4 -2
  75. package/dist/rules/PlayCardRule.js +4 -19
  76. package/dist/rules/PlayerHelper.d.ts +2 -1
  77. package/dist/rules/PlayerHelper.js +32 -0
  78. package/dist/rules/PrepareNextRoundRule.js +1 -0
  79. package/dist/rules/RuleId.d.ts +12 -0
  80. package/dist/rules/RuleId.js +12 -0
  81. package/package.json +2 -2
@@ -1,7 +1,6 @@
1
1
  import { isMoveItemType, PlayerTurnRule } from '@gamepark/rules-api';
2
2
  import { CustomMoveType } from '../CustomMoveType';
3
3
  import { cardProperties } from '../material/CardProperties';
4
- import { CardSuit } from '../material/CardSuit';
5
4
  import { LocationType } from '../material/LocationType';
6
5
  import { MaterialType } from '../material/MaterialType';
7
6
  import { Memory } from '../Memory';
@@ -44,26 +43,11 @@ export class PlayCardRule extends PlayerTurnRule {
44
43
  afterItemMove(move) {
45
44
  const moves = [];
46
45
  if (isMoveItemType(MaterialType.Card)(move) && move.location.type === LocationType.PlayArea) {
47
- this.memorize(Memory.CardsPlayed, (cards) => [...cards, move.itemIndex], this.player);
48
- const cardRule = new PlayerHelper(this.game, this.player).getCardRule(move.itemIndex);
49
- if (!this.remind(Memory.Suit)) {
50
- const card = this.material(MaterialType.Card).getItem(move.itemIndex);
51
- const suit = cardProperties[card.id.front].suit;
52
- if (suit === CardSuit.Day || suit === CardSuit.Night) {
53
- this.memorize(Memory.Suit, suit);
54
- }
55
- }
56
- const cardsInPlay = this.material(MaterialType.Card).location(LocationType.PlayArea);
57
- for (const cardIndex of cardsInPlay.getIndexes()) {
58
- if (cardIndex !== move.itemIndex) {
59
- const otherCardRule = new PlayerHelper(this.game, this.player).getCardRule(cardIndex);
60
- moves.push(...otherCardRule.onCardEnters(cardRule.card, move.location.player));
61
- }
62
- }
63
- moves.push(...cardRule.onEnters());
46
+ const playerHelper = new PlayerHelper(this.game, this.player);
47
+ moves.push(...playerHelper.onCardPlayed(move.itemIndex));
64
48
  const pendingEffects = this.remind(Memory.PendingEffects);
65
49
  if (pendingEffects.length > 0) {
66
- return new PlayerHelper(this.game, this.player).getCardRule(pendingEffects[0].cardIndex).startEffect();
50
+ return [...moves, ...playerHelper.getCardRule(pendingEffects[0].cardIndex).startEffect()];
67
51
  }
68
52
  }
69
53
  if (isMoveItemType(MaterialType.Card)(move) || isMoveItemType(MaterialType.PowerToken)(move)) {
@@ -75,6 +59,7 @@ export class PlayCardRule extends PlayerTurnRule {
75
59
  }
76
60
  onCustomMove(move) {
77
61
  if (move.type === CustomMoveType.ConcedeRound) {
62
+ this.memorize(Memory.OngoingEffects, []);
78
63
  return [this.startRule(RuleId.EndRound)];
79
64
  }
80
65
  else if (move.type === CustomMoveType.ActivateCard) {
@@ -1,4 +1,4 @@
1
- import { MaterialGame, MaterialRulesPart } from '@gamepark/rules-api';
1
+ import { MaterialGame, MaterialMove, MaterialRulesPart } from '@gamepark/rules-api';
2
2
  import { Deck } from '../Deck';
3
3
  export declare class PlayerHelper extends MaterialRulesPart {
4
4
  private player;
@@ -10,4 +10,5 @@ export declare class PlayerHelper extends MaterialRulesPart {
10
10
  getPower(): number;
11
11
  get foe(): number;
12
12
  hasMorePower(): boolean;
13
+ onCardPlayed(cardIndex: number): MaterialMove[];
13
14
  }
@@ -1,8 +1,11 @@
1
1
  import { MaterialRulesPart } from '@gamepark/rules-api';
2
2
  import { sumBy } from 'es-toolkit';
3
3
  import { cardProperties } from '../material/CardProperties';
4
+ import { CardSuit } from '../material/CardSuit';
5
+ import { CardType } from '../material/CardType';
4
6
  import { LocationType } from '../material/LocationType';
5
7
  import { MaterialType } from '../material/MaterialType';
8
+ import { OngoingEffectType } from '../material/OngoingEffect';
6
9
  import { Memory } from '../Memory';
7
10
  export class PlayerHelper extends MaterialRulesPart {
8
11
  player;
@@ -33,4 +36,33 @@ export class PlayerHelper extends MaterialRulesPart {
33
36
  hasMorePower() {
34
37
  return this.getPower() > new PlayerHelper(this.game, this.foe).getPower();
35
38
  }
39
+ onCardPlayed(cardIndex) {
40
+ this.memorize(Memory.CardsPlayed, (cards) => [...cards, cardIndex], this.player);
41
+ this.memorize(Memory.OngoingEffects, (effects) => effects.filter((e) => !(e.type === OngoingEffectType.ForcedSuit &&
42
+ this.material(MaterialType.Card).getItem(e.cardIndex).location.player !== this.player)));
43
+ const cardRule = this.getCardRule(cardIndex);
44
+ if (!this.remind(Memory.Suit)) {
45
+ const suit = cardProperties[cardRule.card].suit;
46
+ if (suit === CardSuit.Day || suit === CardSuit.Night) {
47
+ this.memorize(Memory.Suit, suit);
48
+ }
49
+ }
50
+ const ongoingEffects = this.remind(Memory.OngoingEffects);
51
+ const deathTrap = ongoingEffects.find((e) => e.type === OngoingEffectType.DeathTrap);
52
+ if (deathTrap && cardProperties[cardRule.card].type === CardType.Creature) {
53
+ this.memorize(Memory.OngoingEffects, (effects) => effects.filter((e) => e.type !== OngoingEffectType.DeathTrap));
54
+ this.memorize(Memory.PendingEffects, (effects) => [...effects, { cardIndex: deathTrap.cardIndex }]);
55
+ return [];
56
+ }
57
+ const moves = [];
58
+ const cardsInPlay = this.material(MaterialType.Card).location(LocationType.PlayArea);
59
+ for (const index of cardsInPlay.getIndexes()) {
60
+ if (index !== cardIndex) {
61
+ const otherCardRule = this.getCardRule(index);
62
+ moves.push(...otherCardRule.onCardEnters(cardRule.card, this.player));
63
+ }
64
+ }
65
+ moves.push(...cardRule.onEnters());
66
+ return moves;
67
+ }
36
68
  }
@@ -22,6 +22,7 @@ export class PrepareNextRoundRule extends MaterialRulesPart {
22
22
  }
23
23
  onRuleEnd() {
24
24
  this.forget(Memory.NextRoundStartPlayer);
25
+ this.memorize(Memory.OngoingEffects, []);
25
26
  return [];
26
27
  }
27
28
  }
@@ -18,6 +18,18 @@ export declare enum RuleId {
18
18
  WatchTowerEffect = 114,
19
19
  ConfluenceEffect = 115,
20
20
  HarvestEffect = 116,
21
+ DesertRaiderEffect = 201,
22
+ MetamorphEffect = 202,
23
+ AbiSnakeCharmerEffect = 204,
24
+ VandalsEffect = 206,
25
+ MushaFakirEffect = 207,
26
+ OasisShamanEffect = 208,
27
+ SandWalkersEffect = 211,
28
+ WishLampEffect = 212,
29
+ StarlightBazaarEffect = 213,
30
+ AncientCurseEffect = 214,
31
+ WindWrathEffect = 215,
32
+ DeathTrapEffect = 216,
21
33
  SeaScorcherEffect = 601,
22
34
  AeliaSteadyHandEffect = 602,
23
35
  EyeOfSkyEffect = 603,
@@ -20,6 +20,18 @@ export var RuleId;
20
20
  RuleId[RuleId["WatchTowerEffect"] = 114] = "WatchTowerEffect";
21
21
  RuleId[RuleId["ConfluenceEffect"] = 115] = "ConfluenceEffect";
22
22
  RuleId[RuleId["HarvestEffect"] = 116] = "HarvestEffect";
23
+ RuleId[RuleId["DesertRaiderEffect"] = 201] = "DesertRaiderEffect";
24
+ RuleId[RuleId["MetamorphEffect"] = 202] = "MetamorphEffect";
25
+ RuleId[RuleId["AbiSnakeCharmerEffect"] = 204] = "AbiSnakeCharmerEffect";
26
+ RuleId[RuleId["VandalsEffect"] = 206] = "VandalsEffect";
27
+ RuleId[RuleId["MushaFakirEffect"] = 207] = "MushaFakirEffect";
28
+ RuleId[RuleId["OasisShamanEffect"] = 208] = "OasisShamanEffect";
29
+ RuleId[RuleId["SandWalkersEffect"] = 211] = "SandWalkersEffect";
30
+ RuleId[RuleId["WishLampEffect"] = 212] = "WishLampEffect";
31
+ RuleId[RuleId["StarlightBazaarEffect"] = 213] = "StarlightBazaarEffect";
32
+ RuleId[RuleId["AncientCurseEffect"] = 214] = "AncientCurseEffect";
33
+ RuleId[RuleId["WindWrathEffect"] = 215] = "WindWrathEffect";
34
+ RuleId[RuleId["DeathTrapEffect"] = 216] = "DeathTrapEffect";
23
35
  RuleId[RuleId["SeaScorcherEffect"] = 601] = "SeaScorcherEffect";
24
36
  RuleId[RuleId["AeliaSteadyHandEffect"] = 602] = "AeliaSteadyHandEffect";
25
37
  RuleId[RuleId["EyeOfSkyEffect"] = 603] = "EyeOfSkyEffect";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gamepark/skyrift",
3
- "version": "0.2.9",
3
+ "version": "0.3.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": "3eecc32048afbafd221b143f55a2b4e8cfb3a154"
33
+ "gitHead": "f50ba0de0d312d2424e9bb27f567966975c5e72d"
34
34
  }