@gamepark/mythologies 0.4.1 → 0.5.1

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 (71) hide show
  1. package/dist/Memory.d.ts +6 -11
  2. package/dist/Memory.js +6 -11
  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 +8 -2
  10. package/dist/material/entity/Effect.d.ts +9 -8
  11. package/dist/material/entity/Effect.js +5 -8
  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/material/entity/chinese/ChangE.js +5 -4
  23. package/dist/material/entity/greek/Poseidon.js +2 -2
  24. package/dist/rules/PlaceTokenRule.js +1 -1
  25. package/dist/rules/RuleId.d.ts +37 -33
  26. package/dist/rules/RuleId.js +37 -33
  27. package/dist/rules/effects/AnubisEffectRule.js +3 -3
  28. package/dist/rules/effects/CentaurEffectRule.d.ts +5 -3
  29. package/dist/rules/effects/CentaurEffectRule.js +64 -16
  30. package/dist/rules/effects/CondorEffectRule.d.ts +1 -1
  31. package/dist/rules/effects/CondorEffectRule.js +5 -1
  32. package/dist/rules/effects/DullahanEffectRule.d.ts +11 -0
  33. package/dist/rules/effects/DullahanEffectRule.js +73 -0
  34. package/dist/rules/effects/FairyEffectRule.js +4 -4
  35. package/dist/rules/effects/FenrirEffectRule.js +5 -4
  36. package/dist/rules/effects/GarudaEffectRule.d.ts +1 -1
  37. package/dist/rules/effects/GarudaEffectRule.js +6 -5
  38. package/dist/rules/effects/GorgonEffectRule.d.ts +1 -1
  39. package/dist/rules/effects/GorgonEffectRule.js +2 -26
  40. package/dist/rules/effects/HadesEffectRule.d.ts +8 -4
  41. package/dist/rules/effects/HadesEffectRule.js +12 -50
  42. package/dist/rules/effects/IdloziEffectRule.d.ts +2 -2
  43. package/dist/rules/effects/IdloziEffectRule.js +4 -1
  44. package/dist/rules/effects/IllapaEffectRule.d.ts +1 -1
  45. package/dist/rules/effects/IllapaEffectRule.js +3 -3
  46. package/dist/rules/effects/InkosazanaEffectRule.js +3 -3
  47. package/dist/rules/effects/JiangshiEffectRule.d.ts +1 -1
  48. package/dist/rules/effects/JiangshiEffectRule.js +2 -26
  49. package/dist/rules/effects/LeprechaunEffectRule.d.ts +9 -0
  50. package/dist/rules/effects/LeprechaunEffectRule.js +49 -0
  51. package/dist/rules/effects/MultipleSimultaneousMoveEffectRule.d.ts +13 -0
  52. package/dist/rules/effects/MultipleSimultaneousMoveEffectRule.js +160 -0
  53. package/dist/rules/effects/NuwaEffectRule.js +4 -4
  54. package/dist/rules/effects/OdinEffectRule.js +2 -2
  55. package/dist/rules/effects/RaEffectRule.d.ts +8 -4
  56. package/dist/rules/effects/RaEffectRule.js +12 -50
  57. package/dist/rules/effects/SelkieEffectRule.d.ts +8 -0
  58. package/dist/rules/effects/SelkieEffectRule.js +44 -0
  59. package/dist/rules/effects/ShivaEffectRule.d.ts +2 -2
  60. package/dist/rules/effects/ShivaEffectRule.js +8 -32
  61. package/dist/rules/effects/SphinxEffectRule.d.ts +2 -2
  62. package/dist/rules/effects/SphinxEffectRule.js +4 -1
  63. package/dist/rules/effects/TianlongEffectRule.d.ts +2 -3
  64. package/dist/rules/effects/TianlongEffectRule.js +36 -42
  65. package/dist/rules/effects/TriggerEffectsRule.js +3 -0
  66. package/dist/rules/effects/VetalaEffectRule.d.ts +3 -2
  67. package/dist/rules/effects/VetalaEffectRule.js +10 -5
  68. package/dist/rules/effects/ViracochaEffectRule.d.ts +1 -1
  69. package/dist/rules/effects/ViracochaEffectRule.js +2 -26
  70. package/dist/rules/effects/YanluoWangEffectRule.js +3 -3
  71. package/package.json +2 -2
package/dist/Memory.d.ts CHANGED
@@ -5,15 +5,10 @@ export declare enum Memory {
5
5
  OngoingEffect = 4,
6
6
  OncePerTurn = 5,
7
7
  PlayerGrid = 6,
8
- OdinTargetMythology = 10,
9
- FenrirPaid1 = 11,
10
- AnubisInvoke1 = 12,
11
- GarudaSacrificeCount = 13,
12
- VetalaCount = 14,
13
- IllapaLine = 15,
14
- YanluoWangCount = 16,
15
- NuwaPlayerCreatures = 17,
16
- TianlongVector = 18,
17
- InkosazanaInvoke1 = 19,
18
- FairyTargets = 20
8
+ TargetEntities = 7,
9
+ EffectCount = 8,
10
+ EntityMoved = 9,
11
+ TargetMythology = 10,
12
+ TargetLine = 11,
13
+ TargetLocations = 12
19
14
  }
package/dist/Memory.js CHANGED
@@ -9,15 +9,10 @@ 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["OdinTargetMythology"] = 10] = "OdinTargetMythology";
13
- Memory[Memory["FenrirPaid1"] = 11] = "FenrirPaid1";
14
- Memory[Memory["AnubisInvoke1"] = 12] = "AnubisInvoke1";
15
- 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";
12
+ Memory[Memory["TargetEntities"] = 7] = "TargetEntities";
13
+ Memory[Memory["EffectCount"] = 8] = "EffectCount";
14
+ Memory[Memory["EntityMoved"] = 9] = "EntityMoved";
15
+ Memory[Memory["TargetMythology"] = 10] = "TargetMythology";
16
+ Memory[Memory["TargetLine"] = 11] = "TargetLine";
17
+ Memory[Memory["TargetLocations"] = 12] = "TargetLocations";
23
18
  })(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
  }
@@ -210,10 +210,11 @@ var Pantheon = (function (_super) {
210
210
  var triggerEffectsRule = new TriggerEffectsRule_1.TriggerEffectsRule(this.game);
211
211
  triggerEffectsRule.triggerCardEffect(card, { type: Effect_1.TriggerEventType.SelfPlaced, location: location });
212
212
  var triggerEvents = this.updateGrid(grid);
213
- if (this.isInvoke) {
213
+ var invoked = this.isInvoke;
214
+ if (invoked) {
214
215
  moves.push.apply(moves, __spreadArray([], __read(this.onInvoke(move)), false));
215
- triggerEvents.push({ type: Effect_1.TriggerEventType.EntityInvoked, cardIndex: move.itemIndex, entity: entity, cardLocation: location });
216
216
  }
217
+ triggerEvents.push({ type: Effect_1.TriggerEventType.EntityPlaced, cardIndex: move.itemIndex, entity: entity, location: location, invoked: invoked });
217
218
  if (triggerEvents.length) {
218
219
  triggerEffectsRule.triggerEffects.apply(triggerEffectsRule, __spreadArray([], __read(triggerEvents), false));
219
220
  }
@@ -459,6 +460,11 @@ var Pantheon = (function (_super) {
459
460
  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
461
  });
461
462
  };
463
+ Pantheon.prototype.sacrificeToPreventMove = function () {
464
+ return this.visibleEntities
465
+ .filter(function (item) { return (0, EntityDescription_1.getEffects)(item.id.front).some(function (effect) { return !(0, Effect_1.isTriggeredEffect)(effect) && effect.sacrificeInsteadOfMove; }); })
466
+ .moveItems({ type: LocationType_1.LocationType.PlayerDiscard, player: this.player });
467
+ };
462
468
  return Pantheon;
463
469
  }(rules_api_1.MaterialRulesPart));
464
470
  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;
@@ -49,7 +49,7 @@ export declare abstract class AutoEffectRule extends MaterialRulesPart implement
49
49
  export declare enum TriggerEventType {
50
50
  EndOfGame = 1,
51
51
  SelfPlaced = 2,
52
- EntityInvoked = 3,
52
+ EntityPlaced = 3,
53
53
  LineEvent = 4,
54
54
  ColumnEvent = 5,
55
55
  Infinite = 6,
@@ -62,17 +62,18 @@ export type SelfPlaced = {
62
62
  type: TriggerEventType.SelfPlaced;
63
63
  location: Location;
64
64
  };
65
- export declare const isPlaced: (event: TriggerEvent) => event is SelfPlaced;
66
65
  export type EndOfGameEvent = {
67
66
  type: TriggerEventType.EndOfGame;
68
67
  };
69
68
  export declare const isEndOfGame: (event: TriggerEvent) => event is EndOfGameEvent;
70
- export type EntityInvoked = {
71
- type: TriggerEventType.EntityInvoked;
69
+ export type EntityPlaced = {
70
+ type: TriggerEventType.EntityPlaced;
72
71
  cardIndex: number;
73
72
  entity: Entity;
74
- cardLocation: Location;
73
+ location: Location;
74
+ invoked: boolean;
75
75
  };
76
+ export declare const isPlaced: (event: TriggerEvent) => event is SelfPlaced;
76
77
  export declare enum LineEventType {
77
78
  BonusGain = 1,
78
79
  Completed = 2
@@ -115,7 +116,7 @@ export type EndOfTurn = {
115
116
  player: PlayerColor;
116
117
  };
117
118
  export declare const isEndOfMyTurn: (event: TriggerEvent, card: Material) => event is EndOfTurn;
118
- export type TriggerEvent = EndOfGameEvent | SelfPlaced | EntityInvoked | LineEvent | ColumnEvent | Infinite | EntityCrushed | EntitySacrificed | EntitiesMoved | EndOfTurn;
119
+ export type TriggerEvent = EndOfGameEvent | SelfPlaced | EntityPlaced | LineEvent | ColumnEvent | Infinite | EntityCrushed | EntitySacrificed | EntitiesMoved | EndOfTurn;
119
120
  export type PendingEffect<Event extends TriggerEvent = TriggerEvent> = {
120
121
  cardIndex: number;
121
122
  effectIndex: number;
@@ -15,7 +15,7 @@ var __extends = (this && this.__extends) || (function () {
15
15
  };
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.isEndOfMyTurn = exports.isSacrificed = exports.isCrushed = exports.oncePerTurn = exports.LineEventType = exports.isEndOfGame = exports.isPlaced = exports.TriggerEventType = exports.AutoEffectRule = exports.SimultaneousEffectRule = exports.PlayerEffectRule = exports.isTriggeredEffect = void 0;
18
+ exports.isEndOfMyTurn = exports.isSacrificed = exports.isCrushed = exports.oncePerTurn = exports.LineEventType = exports.isPlaced = exports.isEndOfGame = exports.TriggerEventType = exports.AutoEffectRule = exports.SimultaneousEffectRule = exports.PlayerEffectRule = exports.isTriggeredEffect = void 0;
19
19
  var rules_api_1 = require("@gamepark/rules-api");
20
20
  var CustomMoveType_1 = require("../../CustomMoveType");
21
21
  var Memory_1 = require("../../Memory");
@@ -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;
@@ -124,7 +121,7 @@ var TriggerEventType;
124
121
  (function (TriggerEventType) {
125
122
  TriggerEventType[TriggerEventType["EndOfGame"] = 1] = "EndOfGame";
126
123
  TriggerEventType[TriggerEventType["SelfPlaced"] = 2] = "SelfPlaced";
127
- TriggerEventType[TriggerEventType["EntityInvoked"] = 3] = "EntityInvoked";
124
+ TriggerEventType[TriggerEventType["EntityPlaced"] = 3] = "EntityPlaced";
128
125
  TriggerEventType[TriggerEventType["LineEvent"] = 4] = "LineEvent";
129
126
  TriggerEventType[TriggerEventType["ColumnEvent"] = 5] = "ColumnEvent";
130
127
  TriggerEventType[TriggerEventType["Infinite"] = 6] = "Infinite";
@@ -133,10 +130,10 @@ var TriggerEventType;
133
130
  TriggerEventType[TriggerEventType["EntitiesMoved"] = 9] = "EntitiesMoved";
134
131
  TriggerEventType[TriggerEventType["EndOfTurn"] = 10] = "EndOfTurn";
135
132
  })(TriggerEventType = exports.TriggerEventType || (exports.TriggerEventType = {}));
136
- var isPlaced = function (event) { return event.type === TriggerEventType.SelfPlaced; };
137
- exports.isPlaced = isPlaced;
138
133
  var isEndOfGame = function (event) { return event.type === TriggerEventType.EndOfGame; };
139
134
  exports.isEndOfGame = isEndOfGame;
135
+ var isPlaced = function (event) { return event.type === TriggerEventType.SelfPlaced; };
136
+ exports.isPlaced = isPlaced;
140
137
  var LineEventType;
141
138
  (function (LineEventType) {
142
139
  LineEventType[LineEventType["BonusGain"] = 1] = "BonusGain";
@@ -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;