@gamepark/mythologies 0.4.1 → 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.
Files changed (61) hide show
  1. package/dist/Memory.d.ts +9 -7
  2. package/dist/Memory.js +9 -7
  3. package/dist/MythologiesRules.d.ts +41 -33
  4. package/dist/MythologiesRules.js +8 -0
  5. package/dist/MythologiesSetup.js +1 -1
  6. package/dist/material/Mythology.d.ts +0 -1
  7. package/dist/material/Mythology.js +1 -3
  8. package/dist/material/Pantheon.d.ts +1 -0
  9. package/dist/material/Pantheon.js +5 -0
  10. package/dist/material/entity/Effect.d.ts +2 -2
  11. package/dist/material/entity/Effect.js +1 -4
  12. package/dist/material/entity/MoveEffectRule.d.ts +4 -1
  13. package/dist/material/entity/MoveEffectRule.js +24 -5
  14. package/dist/material/entity/PlaceCardEffectRule.js +4 -27
  15. package/dist/material/entity/SacrificeEffectRule.d.ts +1 -1
  16. package/dist/material/entity/SacrificeEffectRule.js +2 -1
  17. package/dist/material/entity/SimultaneousMoveEffectRule.d.ts +8 -2
  18. package/dist/material/entity/SimultaneousMoveEffectRule.js +34 -6
  19. package/dist/material/entity/celtic/Dullahan.js +7 -1
  20. package/dist/material/entity/celtic/Leprechaun.js +7 -1
  21. package/dist/material/entity/celtic/Selkie.js +12 -1
  22. package/dist/rules/RuleId.d.ts +37 -33
  23. package/dist/rules/RuleId.js +37 -33
  24. package/dist/rules/effects/CentaurEffectRule.d.ts +5 -3
  25. package/dist/rules/effects/CentaurEffectRule.js +64 -16
  26. package/dist/rules/effects/CondorEffectRule.d.ts +1 -1
  27. package/dist/rules/effects/CondorEffectRule.js +5 -1
  28. package/dist/rules/effects/DullahanEffectRule.d.ts +11 -0
  29. package/dist/rules/effects/DullahanEffectRule.js +73 -0
  30. package/dist/rules/effects/FenrirEffectRule.js +2 -1
  31. package/dist/rules/effects/GarudaEffectRule.d.ts +1 -1
  32. package/dist/rules/effects/GarudaEffectRule.js +3 -2
  33. package/dist/rules/effects/GorgonEffectRule.d.ts +1 -1
  34. package/dist/rules/effects/GorgonEffectRule.js +2 -26
  35. package/dist/rules/effects/HadesEffectRule.d.ts +8 -4
  36. package/dist/rules/effects/HadesEffectRule.js +12 -50
  37. package/dist/rules/effects/IdloziEffectRule.d.ts +2 -2
  38. package/dist/rules/effects/IdloziEffectRule.js +4 -1
  39. package/dist/rules/effects/IllapaEffectRule.d.ts +1 -1
  40. package/dist/rules/effects/IllapaEffectRule.js +1 -1
  41. package/dist/rules/effects/JiangshiEffectRule.d.ts +1 -1
  42. package/dist/rules/effects/JiangshiEffectRule.js +2 -26
  43. package/dist/rules/effects/LeprechaunEffectRule.d.ts +9 -0
  44. package/dist/rules/effects/LeprechaunEffectRule.js +49 -0
  45. package/dist/rules/effects/MultipleSimultaneousMoveEffectRule.d.ts +13 -0
  46. package/dist/rules/effects/MultipleSimultaneousMoveEffectRule.js +160 -0
  47. package/dist/rules/effects/RaEffectRule.d.ts +8 -4
  48. package/dist/rules/effects/RaEffectRule.js +12 -50
  49. package/dist/rules/effects/SelkieEffectRule.d.ts +8 -0
  50. package/dist/rules/effects/SelkieEffectRule.js +44 -0
  51. package/dist/rules/effects/ShivaEffectRule.d.ts +2 -2
  52. package/dist/rules/effects/ShivaEffectRule.js +8 -32
  53. package/dist/rules/effects/SphinxEffectRule.d.ts +2 -2
  54. package/dist/rules/effects/SphinxEffectRule.js +4 -1
  55. package/dist/rules/effects/TianlongEffectRule.d.ts +2 -3
  56. package/dist/rules/effects/TianlongEffectRule.js +33 -39
  57. package/dist/rules/effects/VetalaEffectRule.d.ts +3 -2
  58. package/dist/rules/effects/VetalaEffectRule.js +10 -5
  59. package/dist/rules/effects/ViracochaEffectRule.d.ts +1 -1
  60. package/dist/rules/effects/ViracochaEffectRule.js +2 -26
  61. package/package.json +2 -2
package/dist/Memory.d.ts CHANGED
@@ -5,15 +5,17 @@ export declare enum Memory {
5
5
  OngoingEffect = 4,
6
6
  OncePerTurn = 5,
7
7
  PlayerGrid = 6,
8
+ TargetEntities = 7,
9
+ EffectCount = 8,
10
+ EntityMoved = 9,
8
11
  OdinTargetMythology = 10,
9
12
  FenrirPaid1 = 11,
10
13
  AnubisInvoke1 = 12,
11
14
  GarudaSacrificeCount = 13,
12
- VetalaCount = 14,
13
- IllapaLine = 15,
14
- YanluoWangCount = 16,
15
- NuwaPlayerCreatures = 17,
16
- TianlongVector = 18,
17
- InkosazanaInvoke1 = 19,
18
- FairyTargets = 20
15
+ IllapaLine = 14,
16
+ YanluoWangCount = 15,
17
+ NuwaPlayerCreatures = 16,
18
+ TianlongVector = 17,
19
+ InkosazanaInvoke1 = 18,
20
+ FairyTargets = 19
19
21
  }
package/dist/Memory.js CHANGED
@@ -9,15 +9,17 @@ var Memory;
9
9
  Memory[Memory["OngoingEffect"] = 4] = "OngoingEffect";
10
10
  Memory[Memory["OncePerTurn"] = 5] = "OncePerTurn";
11
11
  Memory[Memory["PlayerGrid"] = 6] = "PlayerGrid";
12
+ Memory[Memory["TargetEntities"] = 7] = "TargetEntities";
13
+ Memory[Memory["EffectCount"] = 8] = "EffectCount";
14
+ Memory[Memory["EntityMoved"] = 9] = "EntityMoved";
12
15
  Memory[Memory["OdinTargetMythology"] = 10] = "OdinTargetMythology";
13
16
  Memory[Memory["FenrirPaid1"] = 11] = "FenrirPaid1";
14
17
  Memory[Memory["AnubisInvoke1"] = 12] = "AnubisInvoke1";
15
18
  Memory[Memory["GarudaSacrificeCount"] = 13] = "GarudaSacrificeCount";
16
- Memory[Memory["VetalaCount"] = 14] = "VetalaCount";
17
- Memory[Memory["IllapaLine"] = 15] = "IllapaLine";
18
- Memory[Memory["YanluoWangCount"] = 16] = "YanluoWangCount";
19
- Memory[Memory["NuwaPlayerCreatures"] = 17] = "NuwaPlayerCreatures";
20
- Memory[Memory["TianlongVector"] = 18] = "TianlongVector";
21
- Memory[Memory["InkosazanaInvoke1"] = 19] = "InkosazanaInvoke1";
22
- Memory[Memory["FairyTargets"] = 20] = "FairyTargets";
19
+ Memory[Memory["IllapaLine"] = 14] = "IllapaLine";
20
+ Memory[Memory["YanluoWangCount"] = 15] = "YanluoWangCount";
21
+ Memory[Memory["NuwaPlayerCreatures"] = 16] = "NuwaPlayerCreatures";
22
+ Memory[Memory["TianlongVector"] = 17] = "TianlongVector";
23
+ Memory[Memory["InkosazanaInvoke1"] = 18] = "InkosazanaInvoke1";
24
+ Memory[Memory["FairyTargets"] = 19] = "FairyTargets";
23
25
  })(Memory = exports.Memory || (exports.Memory = {}));
@@ -16,6 +16,7 @@ import { CobraEffectRule, CobraInvokeEffect } from './rules/effects/CobraEffectR
16
16
  import { CondorEffectRule } from './rules/effects/CondorEffectRule';
17
17
  import { CyclopsEffectRule } from './rules/effects/CyclopsEffectRule';
18
18
  import { DraugrEffectRule } from './rules/effects/DraugrEffectRule';
19
+ import { DullahanEffectRule } from './rules/effects/DullahanEffectRule';
19
20
  import { FairyEffectRule } from './rules/effects/FairyEffectRule';
20
21
  import { FenghuangEffectRule } from './rules/effects/FenghuangEffectRule';
21
22
  import { FenrirChoiceRule, FenrirEffectRule } from './rules/effects/FenrirEffectRule';
@@ -29,12 +30,15 @@ import { ImpunduluEffectRule } from './rules/effects/ImpunduluEffectRule';
29
30
  import { InkosazanaEffectRule } from './rules/effects/InkosazanaEffectRule';
30
31
  import { JiangshiEffectRule } from './rules/effects/JiangshiEffectRule';
31
32
  import { KinnaraEffectRule, KinnaraPlaceEffectRule } from './rules/effects/KinnaraEffectRule';
33
+ import { LeprechaunEffectRule } from './rules/effects/LeprechaunEffectRule';
32
34
  import { MinotaurEffectRule } from './rules/effects/MinotaurEffectRule';
33
35
  import { NuwaEffectRule } from './rules/effects/NuwaEffectRule';
34
36
  import { OdinEffectRule } from './rules/effects/OdinEffectRule';
35
37
  import { QilinEffectRule } from './rules/effects/QilinEffectRule';
38
+ import { RaEffectRule } from './rules/effects/RaEffectRule';
36
39
  import { RakshasaEffectRule } from './rules/effects/RakshasaEffectRule';
37
40
  import { ResolveEffectsRule } from './rules/effects/ResolveEffectsRule';
41
+ import { SelkieEffectRule } from './rules/effects/SelkieEffectRule';
38
42
  import { ShivaEffectRule } from './rules/effects/ShivaEffectRule';
39
43
  import { SphinxEffectRule } from './rules/effects/SphinxEffectRule';
40
44
  import { SupayEffectRule } from './rules/effects/SupayEffectRule';
@@ -73,39 +77,43 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
73
77
  23: typeof FenrirChoiceRule;
74
78
  24: typeof FenrirEffectRule;
75
79
  25: typeof AlfEffectRule;
76
- 26: typeof AnubisEffectRule;
77
- 27: typeof SphinxEffectRule;
78
- 28: typeof CobraEffectRule;
79
- 29: typeof CobraInvokeEffect;
80
- 30: typeof BabaiEffectRule;
81
- 31: typeof BennuEffectRule;
82
- 32: typeof ShivaEffectRule;
83
- 33: typeof RakshasaEffectRule;
84
- 34: typeof GarudaEffectRule;
85
- 35: typeof VetalaEffectRule;
86
- 36: typeof KinnaraEffectRule;
87
- 37: typeof KinnaraPlaceEffectRule;
88
- 38: typeof ViracochaEffectRule;
89
- 39: typeof IllapaEffectRule;
90
- 40: typeof IllapaSacrificeRule;
91
- 41: typeof CaimanEffectRule;
92
- 42: typeof CondorEffectRule;
93
- 43: typeof SupayEffectRule;
94
- 44: typeof UkukuEffectRule;
95
- 45: typeof UkukuPlaceEffectRule;
96
- 46: typeof YanluoWangEffectRule;
97
- 47: typeof NuwaEffectRule;
98
- 48: typeof TianlongEffectRule;
99
- 49: typeof TianlongOpponentsEffectRule;
100
- 50: typeof QilinEffectRule;
101
- 51: typeof FenghuangEffectRule;
102
- 52: typeof JiangshiEffectRule;
103
- 53: typeof InkosazanaEffectRule;
104
- 54: typeof ImpunduluEffectRule;
105
- 55: typeof WerehyenaEffectRule;
106
- 56: typeof WerehyenaCallEffectRule;
107
- 57: typeof IdloziEffectRule;
108
- 58: typeof FairyEffectRule;
80
+ 26: typeof RaEffectRule;
81
+ 27: typeof AnubisEffectRule;
82
+ 28: typeof SphinxEffectRule;
83
+ 29: typeof CobraEffectRule;
84
+ 30: typeof CobraInvokeEffect;
85
+ 31: typeof BabaiEffectRule;
86
+ 32: typeof BennuEffectRule;
87
+ 33: typeof ShivaEffectRule;
88
+ 34: typeof RakshasaEffectRule;
89
+ 35: typeof GarudaEffectRule;
90
+ 36: typeof VetalaEffectRule;
91
+ 37: typeof KinnaraEffectRule;
92
+ 38: typeof KinnaraPlaceEffectRule;
93
+ 39: typeof ViracochaEffectRule;
94
+ 40: typeof IllapaEffectRule;
95
+ 41: typeof IllapaSacrificeRule;
96
+ 42: typeof CaimanEffectRule;
97
+ 43: typeof CondorEffectRule;
98
+ 44: typeof SupayEffectRule;
99
+ 45: typeof UkukuEffectRule;
100
+ 46: typeof UkukuPlaceEffectRule;
101
+ 47: typeof YanluoWangEffectRule;
102
+ 48: typeof NuwaEffectRule;
103
+ 49: typeof TianlongEffectRule;
104
+ 50: typeof TianlongOpponentsEffectRule;
105
+ 51: typeof QilinEffectRule;
106
+ 52: typeof FenghuangEffectRule;
107
+ 53: typeof JiangshiEffectRule;
108
+ 54: typeof InkosazanaEffectRule;
109
+ 55: typeof ImpunduluEffectRule;
110
+ 56: typeof WerehyenaEffectRule;
111
+ 57: typeof WerehyenaCallEffectRule;
112
+ 58: typeof IdloziEffectRule;
113
+ 59: typeof FairyEffectRule;
114
+ 60: typeof LeprechaunEffectRule;
115
+ 61: typeof SelkieEffectRule;
116
+ 62: typeof DullahanEffectRule;
109
117
  };
110
118
  locationsStrategies: {
111
119
  2: {
@@ -39,6 +39,7 @@ var CobraEffectRule_1 = require("./rules/effects/CobraEffectRule");
39
39
  var CondorEffectRule_1 = require("./rules/effects/CondorEffectRule");
40
40
  var CyclopsEffectRule_1 = require("./rules/effects/CyclopsEffectRule");
41
41
  var DraugrEffectRule_1 = require("./rules/effects/DraugrEffectRule");
42
+ var DullahanEffectRule_1 = require("./rules/effects/DullahanEffectRule");
42
43
  var FairyEffectRule_1 = require("./rules/effects/FairyEffectRule");
43
44
  var FenghuangEffectRule_1 = require("./rules/effects/FenghuangEffectRule");
44
45
  var FenrirEffectRule_1 = require("./rules/effects/FenrirEffectRule");
@@ -52,12 +53,15 @@ var ImpunduluEffectRule_1 = require("./rules/effects/ImpunduluEffectRule");
52
53
  var InkosazanaEffectRule_1 = require("./rules/effects/InkosazanaEffectRule");
53
54
  var JiangshiEffectRule_1 = require("./rules/effects/JiangshiEffectRule");
54
55
  var KinnaraEffectRule_1 = require("./rules/effects/KinnaraEffectRule");
56
+ var LeprechaunEffectRule_1 = require("./rules/effects/LeprechaunEffectRule");
55
57
  var MinotaurEffectRule_1 = require("./rules/effects/MinotaurEffectRule");
56
58
  var NuwaEffectRule_1 = require("./rules/effects/NuwaEffectRule");
57
59
  var OdinEffectRule_1 = require("./rules/effects/OdinEffectRule");
58
60
  var QilinEffectRule_1 = require("./rules/effects/QilinEffectRule");
61
+ var RaEffectRule_1 = require("./rules/effects/RaEffectRule");
59
62
  var RakshasaEffectRule_1 = require("./rules/effects/RakshasaEffectRule");
60
63
  var ResolveEffectsRule_1 = require("./rules/effects/ResolveEffectsRule");
64
+ var SelkieEffectRule_1 = require("./rules/effects/SelkieEffectRule");
61
65
  var ShivaEffectRule_1 = require("./rules/effects/ShivaEffectRule");
62
66
  var SphinxEffectRule_1 = require("./rules/effects/SphinxEffectRule");
63
67
  var SupayEffectRule_1 = require("./rules/effects/SupayEffectRule");
@@ -102,6 +106,7 @@ var MythologiesRules = (function (_super) {
102
106
  _a[RuleId_1.RuleId.FenrirChoice] = FenrirEffectRule_1.FenrirChoiceRule,
103
107
  _a[RuleId_1.RuleId.FenrirEffect] = FenrirEffectRule_1.FenrirEffectRule,
104
108
  _a[RuleId_1.RuleId.AlfEffect] = AlfEffectRule_1.AlfEffectRule,
109
+ _a[RuleId_1.RuleId.RaEffect] = RaEffectRule_1.RaEffectRule,
105
110
  _a[RuleId_1.RuleId.AnubisEffect] = AnubisEffectRule_1.AnubisEffectRule,
106
111
  _a[RuleId_1.RuleId.SphinxEffect] = SphinxEffectRule_1.SphinxEffectRule,
107
112
  _a[RuleId_1.RuleId.CobraEffect] = CobraEffectRule_1.CobraEffectRule,
@@ -135,6 +140,9 @@ var MythologiesRules = (function (_super) {
135
140
  _a[RuleId_1.RuleId.WerehyenaCallEffect] = WerehyenaEffectRule_1.WerehyenaCallEffectRule,
136
141
  _a[RuleId_1.RuleId.IdloziEffect] = IdloziEffectRule_1.IdloziEffectRule,
137
142
  _a[RuleId_1.RuleId.FairyEffect] = FairyEffectRule_1.FairyEffectRule,
143
+ _a[RuleId_1.RuleId.LeprechaunEffect] = LeprechaunEffectRule_1.LeprechaunEffectRule,
144
+ _a[RuleId_1.RuleId.SelkieEffect] = SelkieEffectRule_1.SelkieEffectRule,
145
+ _a[RuleId_1.RuleId.DullahanEffect] = DullahanEffectRule_1.DullahanEffectRule,
138
146
  _a);
139
147
  _this.locationsStrategies = (_b = {},
140
148
  _b[MaterialType_1.MaterialType.EntityCard] = (_c = {},
@@ -58,7 +58,7 @@ var MythologiesSetup = (function (_super) {
58
58
  return mythologies;
59
59
  }
60
60
  else if (mythologies.length < 4) {
61
- return mythologies.concat((0, lodash_1.sampleSize)((0, lodash_1.difference)(Mythology_1.availableMythologies, mythologies), 4 - mythologies.length));
61
+ return mythologies.concat((0, lodash_1.sampleSize)((0, lodash_1.difference)((0, rules_api_1.getEnumValues)(Mythology_1.Mythology), mythologies), 4 - mythologies.length));
62
62
  }
63
63
  else {
64
64
  return (0, lodash_1.sampleSize)(mythologies, 4);
@@ -8,7 +8,6 @@ export declare enum Mythology {
8
8
  Zulu = 6,
9
9
  Celtic = 7
10
10
  }
11
- export declare const availableMythologies: Mythology[];
12
11
  export declare enum SanctuarySide {
13
12
  Left = 0,
14
13
  Right = 1
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SanctuarySide = exports.availableMythologies = exports.Mythology = void 0;
4
- var rules_api_1 = require("@gamepark/rules-api");
3
+ exports.SanctuarySide = exports.Mythology = void 0;
5
4
  var Mythology;
6
5
  (function (Mythology) {
7
6
  Mythology[Mythology["Greek"] = 0] = "Greek";
@@ -13,7 +12,6 @@ var Mythology;
13
12
  Mythology[Mythology["Zulu"] = 6] = "Zulu";
14
13
  Mythology[Mythology["Celtic"] = 7] = "Celtic";
15
14
  })(Mythology = exports.Mythology || (exports.Mythology = {}));
16
- exports.availableMythologies = (0, rules_api_1.getEnumValues)(Mythology).filter(function (mythology) { return mythology < 7; });
17
15
  var SanctuarySide;
18
16
  (function (SanctuarySide) {
19
17
  SanctuarySide[SanctuarySide["Left"] = 0] = "Left";
@@ -44,4 +44,5 @@ export declare class Pantheon extends MaterialRulesPart {
44
44
  hasCrushed(card: MaterialItem): boolean;
45
45
  isOpponentOngoingEffect(): boolean;
46
46
  replaceSacrifice(cards: EntityItem[]): Material<number, number, number>;
47
+ sacrificeToPreventMove(): MoveItem<number, number, number>[];
47
48
  }
@@ -459,6 +459,11 @@ var Pantheon = (function (_super) {
459
459
  return (0, EntityDescription_1.getEffects)(item.id.front).some(function (effect) { return !(0, Effect_1.isTriggeredEffect)(effect) && cards.some(function (card) { var _a; return (_a = effect.replaceSacrifice) === null || _a === void 0 ? void 0 : _a.call(effect, card, item); }); });
460
460
  });
461
461
  };
462
+ Pantheon.prototype.sacrificeToPreventMove = function () {
463
+ return this.visibleEntities
464
+ .filter(function (item) { return (0, EntityDescription_1.getEffects)(item.id.front).some(function (effect) { return !(0, Effect_1.isTriggeredEffect)(effect) && effect.sacrificeInsteadOfMove; }); })
465
+ .moveItems({ type: LocationType_1.LocationType.PlayerDiscard, player: this.player });
466
+ };
462
467
  return Pantheon;
463
468
  }(rules_api_1.MaterialRulesPart));
464
469
  exports.Pantheon = Pantheon;
@@ -14,6 +14,7 @@ export type PermanentEffect = {
14
14
  preventCrush?: (card: EntityItem, effectCard: EntityItem) => boolean;
15
15
  replaceSacrifice?: (card: EntityItem, effectCard: EntityItem) => boolean;
16
16
  favorTax?: (space: XYCoordinates, card: EntityItem) => number;
17
+ sacrificeInsteadOfMove?: boolean;
17
18
  };
18
19
  export type Effect = TriggeredEffect | PermanentEffect;
19
20
  interface EffectRule {
@@ -24,10 +25,9 @@ export declare abstract class PlayerEffectRule extends PlayerTurnRule implements
24
25
  canPlayEffect(_cardIndex: number): boolean;
25
26
  ruleId?: RuleId;
26
27
  playEffect(): MaterialMove[];
27
- onRuleStart(): MaterialMove<number, number, number, number>[];
28
+ onRuleStart(): MaterialMove[];
28
29
  get card(): import("@gamepark/rules-api").MaterialItem<number, number, EntityId>;
29
30
  getEffect<Event extends TriggerEvent>(): PendingEffect<Event>;
30
- endEffect(): MaterialMove[];
31
31
  }
32
32
  export declare abstract class SimultaneousEffectRule extends SimultaneousRule implements EffectRule {
33
33
  canPlayEffect(_cardIndex: number): boolean;
@@ -35,7 +35,7 @@ var PlayerEffectRule = (function (_super) {
35
35
  };
36
36
  PlayerEffectRule.prototype.onRuleStart = function () {
37
37
  if (!this.getPlayerMoves().length) {
38
- return this.endEffect();
38
+ return [this.customMove(CustomMoveType_1.CustomMoveType.EndEffect)];
39
39
  }
40
40
  return [];
41
41
  };
@@ -50,9 +50,6 @@ var PlayerEffectRule = (function (_super) {
50
50
  PlayerEffectRule.prototype.getEffect = function () {
51
51
  return this.remind(Memory_1.Memory.OngoingEffect);
52
52
  };
53
- PlayerEffectRule.prototype.endEffect = function () {
54
- return [this.customMove(CustomMoveType_1.CustomMoveType.EndEffect)];
55
- };
56
53
  return PlayerEffectRule;
57
54
  }(rules_api_1.PlayerTurnRule));
58
55
  exports.PlayerEffectRule = PlayerEffectRule;
@@ -4,12 +4,15 @@ export declare abstract class MoveEffectRule extends PlayerEffectRule {
4
4
  canPlayEffect(cardIndex: number): boolean;
5
5
  playEffect(): MaterialMove[];
6
6
  getPlayerMoves(): MaterialMove[];
7
+ getSacrificeToPreventMove(): MoveItem<number, number, number>[];
7
8
  getMoveCardsMoves(effectCardIndex?: number): MoveItem<number, number, number>[];
8
9
  getCardsAbleToMove(effectCardIndex: number): Material<number, number, number>;
9
10
  getMovingCards(effectCardIndex: number): Material;
10
11
  getAvailableDestinations(card: MaterialItem, _cardIndex: number): XYCoordinates[];
11
12
  isLegalDestination(_space: XYCoordinates, _cardLocation: Location): boolean;
12
- afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
13
+ beforeItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
13
14
  onCardMoved(_move: MoveItem): MaterialMove[];
15
+ onCardSacrificed(move: MoveItem): MaterialMove[];
14
16
  onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
17
+ onRuleEnd(): never[];
15
18
  }
@@ -43,6 +43,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.MoveEffectRule = void 0;
44
44
  var rules_api_1 = require("@gamepark/rules-api");
45
45
  var CustomMoveType_1 = require("../../CustomMoveType");
46
+ var Memory_1 = require("../../Memory");
46
47
  var TriggerEffectsRule_1 = require("../../rules/effects/TriggerEffectsRule");
47
48
  var LocationType_1 = require("../LocationType");
48
49
  var MaterialType_1 = require("../MaterialType");
@@ -62,7 +63,10 @@ var MoveEffectRule = (function (_super) {
62
63
  return _super.prototype.playEffect.call(this);
63
64
  };
64
65
  MoveEffectRule.prototype.getPlayerMoves = function () {
65
- return this.getMoveCardsMoves();
66
+ return this.getMoveCardsMoves().concat(this.getSacrificeToPreventMove());
67
+ };
68
+ MoveEffectRule.prototype.getSacrificeToPreventMove = function () {
69
+ return this.remind(Memory_1.Memory.EntityMoved, this.player) ? [] : new Pantheon_1.Pantheon(this.game, this.player).sacrificeToPreventMove();
66
70
  };
67
71
  MoveEffectRule.prototype.getMoveCardsMoves = function (effectCardIndex) {
68
72
  var _this = this;
@@ -91,14 +95,25 @@ var MoveEffectRule = (function (_super) {
91
95
  MoveEffectRule.prototype.isLegalDestination = function (_space, _cardLocation) {
92
96
  return true;
93
97
  };
94
- MoveEffectRule.prototype.afterItemMove = function (move) {
95
- if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move) && move.location.type === LocationType_1.LocationType.Pantheon) {
96
- return this.onCardMoved(move);
98
+ MoveEffectRule.prototype.beforeItemMove = function (move) {
99
+ if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move)) {
100
+ if (move.location.type === LocationType_1.LocationType.Pantheon) {
101
+ this.memorize(Memory_1.Memory.EntityMoved, true, this.player);
102
+ return this.onCardMoved(move);
103
+ }
104
+ else if (move.location.type === LocationType_1.LocationType.PlayerDiscard) {
105
+ return this.onCardSacrificed(move);
106
+ }
97
107
  }
98
108
  return [];
99
109
  };
100
110
  MoveEffectRule.prototype.onCardMoved = function (_move) {
101
- return this.endEffect();
111
+ return [this.customMove(CustomMoveType_1.CustomMoveType.EndEffect)];
112
+ };
113
+ MoveEffectRule.prototype.onCardSacrificed = function (move) {
114
+ var card = this.material(MaterialType_1.MaterialType.EntityCard).index(move.itemIndex);
115
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
116
+ return [this.customMove(CustomMoveType_1.CustomMoveType.EndEffect)];
102
117
  };
103
118
  MoveEffectRule.prototype.onCustomMove = function (move) {
104
119
  var _a;
@@ -109,6 +124,10 @@ var MoveEffectRule = (function (_super) {
109
124
  }
110
125
  return [];
111
126
  };
127
+ MoveEffectRule.prototype.onRuleEnd = function () {
128
+ this.forget(Memory_1.Memory.EntityMoved);
129
+ return [];
130
+ };
112
131
  return MoveEffectRule;
113
132
  }(Effect_1.PlayerEffectRule));
114
133
  exports.MoveEffectRule = MoveEffectRule;
@@ -14,34 +14,10 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
- var __read = (this && this.__read) || function (o, n) {
18
- var m = typeof Symbol === "function" && o[Symbol.iterator];
19
- if (!m) return o;
20
- var i = m.call(o), r, ar = [], e;
21
- try {
22
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
23
- }
24
- catch (error) { e = { error: error }; }
25
- finally {
26
- try {
27
- if (r && !r.done && (m = i["return"])) m.call(i);
28
- }
29
- finally { if (e) throw e.error; }
30
- }
31
- return ar;
32
- };
33
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
34
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
35
- if (ar || !(i in from)) {
36
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
37
- ar[i] = from[i];
38
- }
39
- }
40
- return to.concat(ar || Array.prototype.slice.call(from));
41
- };
42
17
  Object.defineProperty(exports, "__esModule", { value: true });
43
18
  exports.InvokeEffectRule = exports.PlaceCardEffectRule = void 0;
44
19
  var rules_api_1 = require("@gamepark/rules-api");
20
+ var CustomMoveType_1 = require("../../CustomMoveType");
45
21
  var Entity_1 = require("../Entity");
46
22
  var LocationType_1 = require("../LocationType");
47
23
  var MaterialType_1 = require("../MaterialType");
@@ -80,8 +56,9 @@ var PlaceCardEffectRule = (function (_super) {
80
56
  return [];
81
57
  };
82
58
  PlaceCardEffectRule.prototype.onCardPlaced = function (move) {
83
- var _a;
84
- return (_a = new Pantheon_1.Pantheon(this.game, this.player).onCardPlaced(move)).concat.apply(_a, __spreadArray([], __read(this.endEffect()), false));
59
+ var moves = new Pantheon_1.Pantheon(this.game, this.player).onCardPlaced(move);
60
+ moves.push(this.customMove(CustomMoveType_1.CustomMoveType.EndEffect));
61
+ return moves;
85
62
  };
86
63
  return PlaceCardEffectRule;
87
64
  }(Effect_1.PlayerEffectRule));
@@ -7,5 +7,5 @@ export declare abstract class SacrificeEffectRule extends PlayerEffectRule {
7
7
  private getCardsAbleToSacrifice;
8
8
  getCardsToSacrifice(): Material;
9
9
  beforeItemMove(move: ItemMove): MaterialMove[];
10
- onSacrifice(_move: MoveItem): MaterialMove<number, number, number, number>[];
10
+ onSacrifice(_move: MoveItem): MaterialMove[];
11
11
  }
@@ -17,6 +17,7 @@ var __extends = (this && this.__extends) || (function () {
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.SacrificeEffectRule = void 0;
19
19
  var rules_api_1 = require("@gamepark/rules-api");
20
+ var CustomMoveType_1 = require("../../CustomMoveType");
20
21
  var PermanentEffectsRule_1 = require("../../rules/effects/PermanentEffectsRule");
21
22
  var LocationType_1 = require("../LocationType");
22
23
  var MaterialType_1 = require("../MaterialType");
@@ -58,7 +59,7 @@ var SacrificeEffectRule = (function (_super) {
58
59
  return [];
59
60
  };
60
61
  SacrificeEffectRule.prototype.onSacrifice = function (_move) {
61
- return this.endEffect();
62
+ return [this.customMove(CustomMoveType_1.CustomMoveType.EndEffect)];
62
63
  };
63
64
  return SacrificeEffectRule;
64
65
  }(Effect_1.PlayerEffectRule));
@@ -2,12 +2,18 @@ import { ItemMove, Location, Material, MaterialItem, MaterialMove, MoveItem, XYC
2
2
  import { PlayerColor } from '../../PlayerColor';
3
3
  import { SimultaneousEffectRule } from './Effect';
4
4
  export declare abstract class SimultaneousMoveEffectRule extends SimultaneousEffectRule {
5
+ getAffectedPlayers(): PlayerColor[];
5
6
  getActivePlayerLegalMoves(player: PlayerColor): MoveItem<number, number, number>[];
7
+ getSacrificeToPreventMove(player: PlayerColor): MoveItem<number, number, number>[];
8
+ getMovementMoves(player: PlayerColor): MoveItem<number, number, number>[];
6
9
  private getCardsAbleToMove;
7
10
  getMovingCards(player: PlayerColor): Material;
8
- getAvailableDestinations(player: PlayerColor, card: MaterialItem, _cardIndex: number): XYCoordinates[];
11
+ getAvailableDestinations(player: PlayerColor, card: MaterialItem): XYCoordinates[];
9
12
  isLegalDestination(_space: XYCoordinates, _cardLocation: Location): boolean;
10
- afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
13
+ beforeItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
11
14
  onCardMoved(move: MoveItem): MaterialMove[];
15
+ onCardSacrificed(move: MoveItem): MaterialMove[];
12
16
  getMovesAfterPlayersDone(): MaterialMove[];
17
+ updatePlayersGrids(): MaterialMove[];
18
+ onRuleEnd(): never[];
13
19
  }
@@ -53,6 +53,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
54
  exports.SimultaneousMoveEffectRule = void 0;
55
55
  var rules_api_1 = require("@gamepark/rules-api");
56
+ var Memory_1 = require("../../Memory");
56
57
  var TriggerEffectsRule_1 = require("../../rules/effects/TriggerEffectsRule");
57
58
  var LocationType_1 = require("../LocationType");
58
59
  var MaterialType_1 = require("../MaterialType");
@@ -63,12 +64,22 @@ var SimultaneousMoveEffectRule = (function (_super) {
63
64
  function SimultaneousMoveEffectRule() {
64
65
  return _super !== null && _super.apply(this, arguments) || this;
65
66
  }
67
+ SimultaneousMoveEffectRule.prototype.getAffectedPlayers = function () {
68
+ var _this = this;
69
+ return this.game.players.filter(function (player) { return _this.getMovementMoves(player).length > 0; });
70
+ };
66
71
  SimultaneousMoveEffectRule.prototype.getActivePlayerLegalMoves = function (player) {
72
+ return this.getMovementMoves(player).concat(this.getSacrificeToPreventMove(player));
73
+ };
74
+ SimultaneousMoveEffectRule.prototype.getSacrificeToPreventMove = function (player) {
75
+ return this.remind(Memory_1.Memory.EntityMoved, player) ? [] : new Pantheon_1.Pantheon(this.game, player).sacrificeToPreventMove();
76
+ };
77
+ SimultaneousMoveEffectRule.prototype.getMovementMoves = function (player) {
67
78
  var _this = this;
68
79
  var cards = this.getCardsAbleToMove(player);
69
80
  return cards.getIndexes().flatMap(function (cardIndex) {
70
81
  var card = cards.index(cardIndex);
71
- return _this.getAvailableDestinations(player, card.getItem(), cardIndex).map(function (_a) {
82
+ return _this.getAvailableDestinations(player, card.getItem()).map(function (_a) {
72
83
  var x = _a.x, y = _a.y;
73
84
  return card.moveItem({ type: LocationType_1.LocationType.Pantheon, player: player, x: x, y: y });
74
85
  });
@@ -81,23 +92,37 @@ var SimultaneousMoveEffectRule = (function (_super) {
81
92
  SimultaneousMoveEffectRule.prototype.getMovingCards = function (player) {
82
93
  return new Pantheon_1.Pantheon(this.game, player).visibleEntities;
83
94
  };
84
- SimultaneousMoveEffectRule.prototype.getAvailableDestinations = function (player, card, _cardIndex) {
95
+ SimultaneousMoveEffectRule.prototype.getAvailableDestinations = function (player, card) {
85
96
  var _this = this;
86
97
  return new Pantheon_1.Pantheon(this.game, player).legalSpaces.filter(function (space) { return (space.y !== card.location.y || space.x !== card.location.x) && _this.isLegalDestination(space, card.location); });
87
98
  };
88
99
  SimultaneousMoveEffectRule.prototype.isLegalDestination = function (_space, _cardLocation) {
89
100
  return true;
90
101
  };
91
- SimultaneousMoveEffectRule.prototype.afterItemMove = function (move) {
92
- if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move) && move.location.type === LocationType_1.LocationType.Pantheon) {
93
- return this.onCardMoved(move);
102
+ SimultaneousMoveEffectRule.prototype.beforeItemMove = function (move) {
103
+ if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move)) {
104
+ if (move.location.type === LocationType_1.LocationType.Pantheon) {
105
+ this.memorize(Memory_1.Memory.EntityMoved, true, move.location.player);
106
+ return this.onCardMoved(move);
107
+ }
108
+ else if (move.location.type === LocationType_1.LocationType.PlayerDiscard) {
109
+ return this.onCardSacrificed(move);
110
+ }
94
111
  }
95
112
  return [];
96
113
  };
97
114
  SimultaneousMoveEffectRule.prototype.onCardMoved = function (move) {
98
115
  return [this.endPlayerTurn(move.location.player)];
99
116
  };
117
+ SimultaneousMoveEffectRule.prototype.onCardSacrificed = function (move) {
118
+ var card = this.material(MaterialType_1.MaterialType.EntityCard).index(move.itemIndex);
119
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
120
+ return [this.endPlayerTurn(move.location.player)];
121
+ };
100
122
  SimultaneousMoveEffectRule.prototype.getMovesAfterPlayersDone = function () {
123
+ return this.updatePlayersGrids().concat(_super.prototype.getMovesAfterPlayersDone.call(this));
124
+ };
125
+ SimultaneousMoveEffectRule.prototype.updatePlayersGrids = function () {
101
126
  var e_1, _a, _b;
102
127
  var moves = [];
103
128
  var events = [];
@@ -117,9 +142,12 @@ var SimultaneousMoveEffectRule = (function (_super) {
117
142
  finally { if (e_1) throw e_1.error; }
118
143
  }
119
144
  (_b = new TriggerEffectsRule_1.TriggerEffectsRule(this.game)).triggerEffects.apply(_b, __spreadArray([], __read(events), false));
120
- moves.push.apply(moves, __spreadArray([], __read(_super.prototype.getMovesAfterPlayersDone.call(this)), false));
121
145
  return moves;
122
146
  };
147
+ SimultaneousMoveEffectRule.prototype.onRuleEnd = function () {
148
+ this.forget(Memory_1.Memory.EntityMoved);
149
+ return [];
150
+ };
123
151
  return SimultaneousMoveEffectRule;
124
152
  }(Effect_1.SimultaneousEffectRule));
125
153
  exports.SimultaneousMoveEffectRule = SimultaneousMoveEffectRule;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Dullahan = void 0;
4
+ var DullahanEffectRule_1 = require("../../../rules/effects/DullahanEffectRule");
5
+ var Effect_1 = require("../Effect");
4
6
  exports.Dullahan = {
5
- invoke: [{ gem: 1 }, {}, { gem: 1, favor: 1 }]
7
+ invoke: [{ gem: 1 }, {}, { gem: 1, favor: 1 }],
8
+ effect: {
9
+ trigger: Effect_1.isPlaced,
10
+ rule: DullahanEffectRule_1.DullahanEffectRule
11
+ }
6
12
  };
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Leprechaun = void 0;
4
+ var LeprechaunEffectRule_1 = require("../../../rules/effects/LeprechaunEffectRule");
5
+ var Effect_1 = require("../Effect");
4
6
  exports.Leprechaun = {
5
- invoke: [{}, { favor: 1 }, {}]
7
+ invoke: [{}, { favor: 1 }, {}],
8
+ effect: {
9
+ trigger: Effect_1.oncePerTurn,
10
+ rule: LeprechaunEffectRule_1.LeprechaunEffectRule
11
+ }
6
12
  };
@@ -1,6 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Selkie = void 0;
4
+ var SelkieEffectRule_1 = require("../../../rules/effects/SelkieEffectRule");
5
+ var Effect_1 = require("../Effect");
4
6
  exports.Selkie = {
5
- invoke: [{}, { gem: 2 }, { gem: 1 }]
7
+ invoke: [{}, { gem: 2 }, { gem: 1 }],
8
+ effects: [
9
+ {
10
+ sacrificeInsteadOfMove: true
11
+ },
12
+ {
13
+ trigger: Effect_1.isSacrificed,
14
+ rule: SelkieEffectRule_1.SelkieEffectRule
15
+ }
16
+ ]
6
17
  };