@gamepark/mythologies 0.1.0 → 0.2.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 (51) hide show
  1. package/dist/CustomMoveType.d.ts +2 -1
  2. package/dist/CustomMoveType.js +1 -0
  3. package/dist/Memory.d.ts +3 -1
  4. package/dist/Memory.js +2 -0
  5. package/dist/MythologiesRules.d.ts +18 -3
  6. package/dist/MythologiesRules.js +40 -13
  7. package/dist/material/Destiny.d.ts +1 -0
  8. package/dist/material/Destiny.js +17 -0
  9. package/dist/material/Mythology.js +1 -1
  10. package/dist/material/Pantheon.d.ts +3 -1
  11. package/dist/material/Pantheon.js +32 -5
  12. package/dist/material/entity/Effect.d.ts +13 -7
  13. package/dist/material/entity/Effect.js +8 -3
  14. package/dist/material/entity/MoveEffectRule.d.ts +2 -2
  15. package/dist/material/entity/MoveEffectRule.js +3 -7
  16. package/dist/material/entity/SacrificeEffectRule.d.ts +1 -0
  17. package/dist/material/entity/SacrificeEffectRule.js +3 -0
  18. package/dist/material/entity/SimultaneousMoveEffectRule.d.ts +2 -2
  19. package/dist/material/entity/SimultaneousMoveEffectRule.js +15 -18
  20. package/dist/material/entity/greek/Cyclops.js +5 -7
  21. package/dist/material/entity/inca/Amaru.js +32 -1
  22. package/dist/material/entity/inca/Caiman.js +7 -1
  23. package/dist/material/entity/inca/Condor.js +7 -1
  24. package/dist/material/entity/inca/Illapa.js +7 -1
  25. package/dist/material/entity/inca/Inti.js +33 -1
  26. package/dist/material/entity/inca/MamaQucha.js +37 -1
  27. package/dist/material/entity/inca/Pumapunku.js +31 -1
  28. package/dist/material/entity/inca/Supay.js +7 -1
  29. package/dist/material/entity/inca/Ukuku.js +13 -1
  30. package/dist/material/entity/inca/Viracocha.js +7 -1
  31. package/dist/rules/RuleId.d.ts +9 -1
  32. package/dist/rules/RuleId.js +8 -0
  33. package/dist/rules/effects/AthenaEffectRule.js +1 -1
  34. package/dist/rules/effects/CaimanEffectRule.d.ts +8 -0
  35. package/dist/rules/effects/CaimanEffectRule.js +76 -0
  36. package/dist/rules/effects/CentaurEffectRule.js +1 -1
  37. package/dist/rules/effects/ChimeraEffectRule.js +2 -13
  38. package/dist/rules/effects/CondorEffectRule.d.ts +8 -0
  39. package/dist/rules/effects/CondorEffectRule.js +45 -0
  40. package/dist/rules/effects/CyclopsEffectRule.js +2 -2
  41. package/dist/rules/effects/GorgonEffectRule.d.ts +0 -4
  42. package/dist/rules/effects/GorgonEffectRule.js +1 -15
  43. package/dist/rules/effects/IllapaEffectRule.d.ts +14 -0
  44. package/dist/rules/effects/IllapaEffectRule.js +71 -0
  45. package/dist/rules/effects/SupayEffectRule.d.ts +19 -0
  46. package/dist/rules/effects/SupayEffectRule.js +78 -0
  47. package/dist/rules/effects/UkukuEffectRule.d.ts +13 -0
  48. package/dist/rules/effects/UkukuEffectRule.js +60 -0
  49. package/dist/rules/effects/ViracochaEffectRule.d.ts +7 -0
  50. package/dist/rules/effects/ViracochaEffectRule.js +64 -0
  51. package/package.json +2 -2
@@ -5,7 +5,8 @@ export declare enum CustomMoveType {
5
5
  PlayEffect = 4,
6
6
  EndEffect = 5,
7
7
  ChoosePlayer = 6,
8
- ChooseMythology = 7
8
+ ChooseMythology = 7,
9
+ ChooseLine = 8
9
10
  }
10
11
  export type TrialSuccessData = {
11
12
  trial: number;
@@ -10,4 +10,5 @@ var CustomMoveType;
10
10
  CustomMoveType[CustomMoveType["EndEffect"] = 5] = "EndEffect";
11
11
  CustomMoveType[CustomMoveType["ChoosePlayer"] = 6] = "ChoosePlayer";
12
12
  CustomMoveType[CustomMoveType["ChooseMythology"] = 7] = "ChooseMythology";
13
+ CustomMoveType[CustomMoveType["ChooseLine"] = 8] = "ChooseLine";
13
14
  })(CustomMoveType = exports.CustomMoveType || (exports.CustomMoveType = {}));
package/dist/Memory.d.ts CHANGED
@@ -5,9 +5,11 @@ export declare enum Memory {
5
5
  PendingRule = 4,
6
6
  OngoingEffect = 5,
7
7
  OncePerTurn = 6,
8
+ PlayerGrid = 7,
8
9
  OdinTargetMythology = 10,
9
10
  FenrirPaid1 = 11,
10
11
  AnubisInvoke1 = 12,
11
12
  GarudaSacrificeCount = 13,
12
- VetalaCount = 14
13
+ VetalaCount = 14,
14
+ IllapaLine = 15
13
15
  }
package/dist/Memory.js CHANGED
@@ -9,9 +9,11 @@ var Memory;
9
9
  Memory[Memory["PendingRule"] = 4] = "PendingRule";
10
10
  Memory[Memory["OngoingEffect"] = 5] = "OngoingEffect";
11
11
  Memory[Memory["OncePerTurn"] = 6] = "OncePerTurn";
12
+ Memory[Memory["PlayerGrid"] = 7] = "PlayerGrid";
12
13
  Memory[Memory["OdinTargetMythology"] = 10] = "OdinTargetMythology";
13
14
  Memory[Memory["FenrirPaid1"] = 11] = "FenrirPaid1";
14
15
  Memory[Memory["AnubisInvoke1"] = 12] = "AnubisInvoke1";
15
16
  Memory[Memory["GarudaSacrificeCount"] = 13] = "GarudaSacrificeCount";
16
17
  Memory[Memory["VetalaCount"] = 14] = "VetalaCount";
18
+ Memory[Memory["IllapaLine"] = 15] = "IllapaLine";
17
19
  })(Memory = exports.Memory || (exports.Memory = {}));
@@ -1,4 +1,4 @@
1
- import { CustomMove, FillGapStrategy, ItemMove, Material, MaterialGame, MaterialItem, MaterialMove, PositiveSequenceStrategy, SecretMaterialRules, StackingStrategy, TimeLimit } from '@gamepark/rules-api';
1
+ import { CompetitiveScore, CustomMove, FillGapStrategy, ItemMove, MaterialGame, MaterialItem, MaterialMove, PositiveSequenceStrategy, SecretMaterialRules, StackingStrategy, TimeLimit } from '@gamepark/rules-api';
2
2
  import { LocationType } from './material/LocationType';
3
3
  import { MaterialType } from './material/MaterialType';
4
4
  import { PlayerColor } from './PlayerColor';
@@ -9,9 +9,11 @@ import { AnubisEffectRule } from './rules/effects/AnubisEffectRule';
9
9
  import { AthenaEffectRule } from './rules/effects/AthenaEffectRule';
10
10
  import { BabaiEffectRule } from './rules/effects/BabaiEffectRule';
11
11
  import { BennuEffectRule } from './rules/effects/BennuEffectRule';
12
+ import { CaimanEffectRule } from './rules/effects/CaimanEffectRule';
12
13
  import { CentaurEffectRule, CentaurEffectSacrificeRule } from './rules/effects/CentaurEffectRule';
13
14
  import { ChimeraEffectRule } from './rules/effects/ChimeraEffectRule';
14
15
  import { CobraEffectRule, CobraInvokeEffect } from './rules/effects/CobraEffectRule';
16
+ import { CondorEffectRule } from './rules/effects/CondorEffectRule';
15
17
  import { CyclopsEffectRule } from './rules/effects/CyclopsEffectRule';
16
18
  import { DraugrEffectRule } from './rules/effects/DraugrEffectRule';
17
19
  import { FenrirChoiceRule, FenrirEffectRule } from './rules/effects/FenrirEffectRule';
@@ -19,6 +21,7 @@ import { GarudaEffectRule } from './rules/effects/GarudaEffectRule';
19
21
  import { GorgonEffectRule } from './rules/effects/GorgonEffectRule';
20
22
  import { GriffinEffectRule } from './rules/effects/GriffinEffectRule';
21
23
  import { HadesEffectRule } from './rules/effects/HadesEffectRule';
24
+ import { IllapaEffectRule, IllapaSacrificeRule } from './rules/effects/IllapaEffectRule';
22
25
  import { KinnaraEffectRule, KinnaraPlaceEffectRule } from './rules/effects/KinnaraEffectRule';
23
26
  import { MinotaurEffectRule } from './rules/effects/MinotaurEffectRule';
24
27
  import { OdinEffectRule } from './rules/effects/OdinEffectRule';
@@ -26,14 +29,17 @@ import { RakshasaEffectRule } from './rules/effects/RakshasaEffectRule';
26
29
  import { ResolveEffectsRule } from './rules/effects/ResolveEffectsRule';
27
30
  import { ShivaEffectRule } from './rules/effects/ShivaEffectRule';
28
31
  import { SphinxEffectRule } from './rules/effects/SphinxEffectRule';
32
+ import { SupayEffectRule } from './rules/effects/SupayEffectRule';
29
33
  import { ThorEffectRule } from './rules/effects/ThorEffectRule';
34
+ import { UkukuEffectRule, UkukuPlaceEffectRule } from './rules/effects/UkukuEffectRule';
30
35
  import { VetalaEffectRule } from './rules/effects/VetalaEffectRule';
36
+ import { ViracochaEffectRule } from './rules/effects/ViracochaEffectRule';
31
37
  import { EndGameRule } from './rules/EndGameRule';
32
38
  import { PlaceCardsRule } from './rules/PlaceCardsRule';
33
39
  import { PlaceTokenRule } from './rules/PlaceTokenRule';
34
40
  import { RuleId } from './rules/RuleId';
35
41
  import { UpkeepRule } from './rules/UpkeepRule';
36
- export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, MaterialType, LocationType> implements TimeLimit<MaterialGame<PlayerColor, MaterialType, LocationType>, MaterialMove<PlayerColor, MaterialType, LocationType>, PlayerColor> {
42
+ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, MaterialType, LocationType> implements TimeLimit<MaterialGame<PlayerColor, MaterialType, LocationType>, MaterialMove<PlayerColor, MaterialType, LocationType>, PlayerColor>, CompetitiveScore {
37
43
  rules: {
38
44
  1: typeof DrawDestinyCardRule;
39
45
  2: typeof ChooseDraftTokenRule;
@@ -69,6 +75,14 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
69
75
  35: typeof VetalaEffectRule;
70
76
  36: typeof KinnaraEffectRule;
71
77
  37: typeof KinnaraPlaceEffectRule;
78
+ 38: typeof ViracochaEffectRule;
79
+ 39: typeof IllapaEffectRule;
80
+ 40: typeof IllapaSacrificeRule;
81
+ 41: typeof CaimanEffectRule;
82
+ 42: typeof CondorEffectRule;
83
+ 43: typeof SupayEffectRule;
84
+ 44: typeof UkukuEffectRule;
85
+ 45: typeof UkukuPlaceEffectRule;
72
86
  };
73
87
  locationsStrategies: {
74
88
  2: {
@@ -103,9 +117,10 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
103
117
  };
104
118
  keepMoveSecret(move: MaterialMove): boolean;
105
119
  beforeItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
106
- onEntitySacrificed(card: Material): void;
107
120
  protected onCustomMove(move: CustomMove): import("@gamepark/rules-api").EndGame[] | import("@gamepark/rules-api").StartPlayerTurn<PlayerColor, RuleId.ResolveEffects>[] | (import("@gamepark/rules-api").StartPlayerTurn<number, RuleId.PlaceCards> | import("@gamepark/rules-api").StartRule<RuleId.PlaceCards>)[];
108
121
  getAutomaticMoves(): import("@gamepark/rules-api").StartPlayerTurn<PlayerColor, RuleId.ResolveEffects>[];
109
122
  startEffectsResolution(): import("@gamepark/rules-api").StartPlayerTurn<PlayerColor, RuleId.ResolveEffects>[];
110
123
  giveTime(): number;
124
+ getScore(player: PlayerColor): number;
125
+ getTieBreaker(tieBreaker: number, player: PlayerColor): number | undefined;
111
126
  }
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.MythologiesRules = void 0;
19
19
  var rules_api_1 = require("@gamepark/rules-api");
20
20
  var CustomMoveType_1 = require("./CustomMoveType");
21
+ var Entity_1 = require("./material/Entity");
21
22
  var Effect_1 = require("./material/entity/Effect");
22
23
  var LocationType_1 = require("./material/LocationType");
23
24
  var MaterialType_1 = require("./material/MaterialType");
@@ -30,9 +31,11 @@ var AnubisEffectRule_1 = require("./rules/effects/AnubisEffectRule");
30
31
  var AthenaEffectRule_1 = require("./rules/effects/AthenaEffectRule");
31
32
  var BabaiEffectRule_1 = require("./rules/effects/BabaiEffectRule");
32
33
  var BennuEffectRule_1 = require("./rules/effects/BennuEffectRule");
34
+ var CaimanEffectRule_1 = require("./rules/effects/CaimanEffectRule");
33
35
  var CentaurEffectRule_1 = require("./rules/effects/CentaurEffectRule");
34
36
  var ChimeraEffectRule_1 = require("./rules/effects/ChimeraEffectRule");
35
37
  var CobraEffectRule_1 = require("./rules/effects/CobraEffectRule");
38
+ var CondorEffectRule_1 = require("./rules/effects/CondorEffectRule");
36
39
  var CyclopsEffectRule_1 = require("./rules/effects/CyclopsEffectRule");
37
40
  var DraugrEffectRule_1 = require("./rules/effects/DraugrEffectRule");
38
41
  var FenrirEffectRule_1 = require("./rules/effects/FenrirEffectRule");
@@ -40,6 +43,7 @@ var GarudaEffectRule_1 = require("./rules/effects/GarudaEffectRule");
40
43
  var GorgonEffectRule_1 = require("./rules/effects/GorgonEffectRule");
41
44
  var GriffinEffectRule_1 = require("./rules/effects/GriffinEffectRule");
42
45
  var HadesEffectRule_1 = require("./rules/effects/HadesEffectRule");
46
+ var IllapaEffectRule_1 = require("./rules/effects/IllapaEffectRule");
43
47
  var KinnaraEffectRule_1 = require("./rules/effects/KinnaraEffectRule");
44
48
  var MinotaurEffectRule_1 = require("./rules/effects/MinotaurEffectRule");
45
49
  var OdinEffectRule_1 = require("./rules/effects/OdinEffectRule");
@@ -47,9 +51,12 @@ var RakshasaEffectRule_1 = require("./rules/effects/RakshasaEffectRule");
47
51
  var ResolveEffectsRule_1 = require("./rules/effects/ResolveEffectsRule");
48
52
  var ShivaEffectRule_1 = require("./rules/effects/ShivaEffectRule");
49
53
  var SphinxEffectRule_1 = require("./rules/effects/SphinxEffectRule");
54
+ var SupayEffectRule_1 = require("./rules/effects/SupayEffectRule");
50
55
  var ThorEffectRule_1 = require("./rules/effects/ThorEffectRule");
51
56
  var TriggerEffectsRule_1 = require("./rules/effects/TriggerEffectsRule");
57
+ var UkukuEffectRule_1 = require("./rules/effects/UkukuEffectRule");
52
58
  var VetalaEffectRule_1 = require("./rules/effects/VetalaEffectRule");
59
+ var ViracochaEffectRule_1 = require("./rules/effects/ViracochaEffectRule");
53
60
  var EndGameRule_1 = require("./rules/EndGameRule");
54
61
  var PlaceCardsRule_1 = require("./rules/PlaceCardsRule");
55
62
  var PlaceTokenRule_1 = require("./rules/PlaceTokenRule");
@@ -95,6 +102,14 @@ var MythologiesRules = (function (_super) {
95
102
  _a[RuleId_1.RuleId.VetalaEffect] = VetalaEffectRule_1.VetalaEffectRule,
96
103
  _a[RuleId_1.RuleId.KinnaraEffect] = KinnaraEffectRule_1.KinnaraEffectRule,
97
104
  _a[RuleId_1.RuleId.KinnaraPlaceEffect] = KinnaraEffectRule_1.KinnaraPlaceEffectRule,
105
+ _a[RuleId_1.RuleId.ViracochaEffect] = ViracochaEffectRule_1.ViracochaEffectRule,
106
+ _a[RuleId_1.RuleId.IllapaEffect] = IllapaEffectRule_1.IllapaEffectRule,
107
+ _a[RuleId_1.RuleId.IllapaSacrifice] = IllapaEffectRule_1.IllapaSacrificeRule,
108
+ _a[RuleId_1.RuleId.CaimanEffect] = CaimanEffectRule_1.CaimanEffectRule,
109
+ _a[RuleId_1.RuleId.CondorEffect] = CondorEffectRule_1.CondorEffectRule,
110
+ _a[RuleId_1.RuleId.SupayEffect] = SupayEffectRule_1.SupayEffectRule,
111
+ _a[RuleId_1.RuleId.UkukuEffect] = UkukuEffectRule_1.UkukuEffectRule,
112
+ _a[RuleId_1.RuleId.UkukuPlaceEffect] = UkukuEffectRule_1.UkukuPlaceEffectRule,
98
113
  _a);
99
114
  _this.locationsStrategies = (_b = {},
100
115
  _b[MaterialType_1.MaterialType.EntityCard] = (_c = {},
@@ -146,7 +161,7 @@ var MythologiesRules = (function (_super) {
146
161
  var card = this.material(MaterialType_1.MaterialType.EntityCard).index(move.itemIndex);
147
162
  var location = card.getItem().location;
148
163
  if (location.type === LocationType_1.LocationType.Pantheon) {
149
- this.onEntitySacrificed(card);
164
+ return new Pantheon_1.Pantheon(this.game, location.player).onEntitySacrificed(card);
150
165
  }
151
166
  }
152
167
  }
@@ -155,29 +170,26 @@ var MythologiesRules = (function (_super) {
155
170
  var pile = this.material(MaterialType_1.MaterialType.EntityCard).index(move.indexes);
156
171
  if (((_a = pile.getItem()) === null || _a === void 0 ? void 0 : _a.location.type) === LocationType_1.LocationType.Pantheon) {
157
172
  var topCard = pile.maxBy(function (item) { return item.location.z; });
158
- this.onEntitySacrificed(topCard);
173
+ return new Pantheon_1.Pantheon(this.game, topCard.getItem().location.player).onEntitySacrificed(topCard);
159
174
  }
160
175
  }
161
176
  }
162
177
  if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.GemToken)(move) && move.location.type === LocationType_1.LocationType.PlayerGems) {
163
- var gem = this.material(MaterialType_1.MaterialType.GemToken).getItem(move.itemIndex);
164
- var player = gem.location.player;
165
- if (gem.location.type === LocationType_1.LocationType.PantheonLineBonus && player === move.location.player) {
166
- new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.LineBonusGain, player: player, y: gem.location.y });
178
+ var gem = this.material(MaterialType_1.MaterialType.GemToken).getItem(move.itemIndex).location;
179
+ var player = gem.player;
180
+ if (gem.type === LocationType_1.LocationType.PantheonLineBonus && player === move.location.player) {
181
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.LineEvent, eventType: Effect_1.LineEventType.BonusGain, player: player, y: gem.y });
167
182
  }
168
183
  }
169
184
  if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.FavorToken)(move) && move.location.type === LocationType_1.LocationType.PlayerFavor) {
170
- var favor = this.material(MaterialType_1.MaterialType.FavorToken).getItem(move.itemIndex);
171
- var player = favor.location.player;
172
- if (favor.location.type === LocationType_1.LocationType.PantheonColumnBonus && player === move.location.player) {
173
- new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.ColumnBonusGain, player: player, x: favor.location.x });
185
+ var favor = this.material(MaterialType_1.MaterialType.FavorToken).getItem(move.itemIndex).location;
186
+ var player = favor.player;
187
+ if (favor.type === LocationType_1.LocationType.PantheonColumnBonus && player === move.location.player) {
188
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.ColumnEvent, eventType: Effect_1.LineEventType.BonusGain, player: player, x: favor.x });
174
189
  }
175
190
  }
176
191
  return [];
177
192
  };
178
- MythologiesRules.prototype.onEntitySacrificed = function (card) {
179
- new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
180
- };
181
193
  MythologiesRules.prototype.onCustomMove = function (move) {
182
194
  var _a;
183
195
  if (move.type === CustomMoveType_1.CustomMoveType.EndEffect) {
@@ -213,6 +225,21 @@ var MythologiesRules = (function (_super) {
213
225
  MythologiesRules.prototype.giveTime = function () {
214
226
  return 60;
215
227
  };
228
+ MythologiesRules.prototype.getScore = function (player) {
229
+ var pantheon = new Pantheon_1.Pantheon(this.game, player);
230
+ return pantheon.favor + Math.floor(pantheon.gems / 3);
231
+ };
232
+ MythologiesRules.prototype.getTieBreaker = function (tieBreaker, player) {
233
+ switch (tieBreaker) {
234
+ case 1:
235
+ return new Pantheon_1.Pantheon(this.game, player).gems % 3;
236
+ case 2:
237
+ return new Pantheon_1.Pantheon(this.game, player).visibleEntities.id(function (id) { return (0, Entity_1.isGod)(id.front); }).length;
238
+ case 3:
239
+ return new Pantheon_1.Pantheon(this.game, player).visibleEntities.length;
240
+ }
241
+ return undefined;
242
+ };
216
243
  return MythologiesRules;
217
244
  }(rules_api_1.SecretMaterialRules));
218
245
  exports.MythologiesRules = MythologiesRules;
@@ -6,4 +6,5 @@ export declare class Destiny extends MaterialRulesPart {
6
6
  getDestinyMap(destiny: number): PlayerColor[][];
7
7
  getAvailableEntities(player: PlayerColor): import("@gamepark/rules-api").Material<number, number, number>;
8
8
  getBoardsWithoutPlayer(): import("@gamepark/rules-api").Material<number, number, number>;
9
+ get creaturesOnTopOfDecks(): import("@gamepark/rules-api").Material<number, number, number>;
9
10
  }
@@ -82,6 +82,23 @@ var Destiny = (function (_super) {
82
82
  var map = this.getDestinyMap(destiny);
83
83
  return this.material(MaterialType_1.MaterialType.MythologyBoard).location(function (l) { return !_this.game.players.includes(map[l.y][l.x]); });
84
84
  };
85
+ Object.defineProperty(Destiny.prototype, "creaturesOnTopOfDecks", {
86
+ get: function () {
87
+ var mythologies = this.material(MaterialType_1.MaterialType.MythologyBoard)
88
+ .getItems()
89
+ .map(function (item) { return item.id.mythology; });
90
+ var creaturesInDecks = this.material(MaterialType_1.MaterialType.EntityCard).location(LocationType_1.LocationType.CreaturesDeck);
91
+ var creaturesIndexes = mythologies.map(function (mythology) {
92
+ return creaturesInDecks
93
+ .locationId(mythology)
94
+ .maxBy(function (item) { return item.location.x; })
95
+ .getIndex();
96
+ });
97
+ return this.material(MaterialType_1.MaterialType.EntityCard).index(creaturesIndexes);
98
+ },
99
+ enumerable: false,
100
+ configurable: true
101
+ });
85
102
  return Destiny;
86
103
  }(rules_api_1.MaterialRulesPart));
87
104
  exports.Destiny = Destiny;
@@ -13,7 +13,7 @@ var Mythology;
13
13
  Mythology[Mythology["Zulu"] = 6] = "Zulu";
14
14
  Mythology[Mythology["Celtic"] = 7] = "Celtic";
15
15
  })(Mythology = exports.Mythology || (exports.Mythology = {}));
16
- exports.availableMythologies = (0, rules_api_1.getEnumValues)(Mythology).filter(function (mythology) { return mythology < 4; });
16
+ exports.availableMythologies = (0, rules_api_1.getEnumValues)(Mythology).filter(function (mythology) { return mythology < 5; });
17
17
  var SanctuarySide;
18
18
  (function (SanctuarySide) {
19
19
  SanctuarySide[SanctuarySide["Left"] = 0] = "Left";
@@ -23,7 +23,8 @@ export declare class Pantheon extends MaterialRulesPart {
23
23
  loseFavor(quantity?: number): import("@gamepark/rules-api").DeleteItem<number>;
24
24
  onCardPlaced(move: MoveItem): MaterialMove<number, number, number, number>[];
25
25
  get isInvoke(): boolean;
26
- gainBonus(grid?: (Entity | undefined)[][]): MaterialMove<number, number, number, number>[];
26
+ updateGrid(grid?: (Entity | undefined)[][]): MaterialMove<number, number, number, number>[];
27
+ private gainBonus;
27
28
  getBonusGem(y: number): Material<number, number, number>;
28
29
  getBonusFavor(x: number): Material<number, number, number>;
29
30
  onInvoke(move: MoveItem): MaterialMove<number, number, number, number>[];
@@ -33,4 +34,5 @@ export declare class Pantheon extends MaterialRulesPart {
33
34
  isAbleToMove(entity: MaterialItem): boolean;
34
35
  get mythologies(): import("./Mythology").Mythology[];
35
36
  get missingMythologies(): import("./Mythology").Mythology[];
37
+ onEntitySacrificed(card: Material): MaterialMove<number, number, number, number>[];
36
38
  }
@@ -54,6 +54,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
54
54
  exports.Pantheon = void 0;
55
55
  var rules_api_1 = require("@gamepark/rules-api");
56
56
  var lodash_1 = require("lodash");
57
+ var Memory_1 = require("../Memory");
57
58
  var MythologiesRules_1 = require("../MythologiesRules");
58
59
  var TriggerEffectsRule_1 = require("../rules/effects/TriggerEffectsRule");
59
60
  var Entity_1 = require("./Entity");
@@ -191,7 +192,7 @@ var Pantheon = (function (_super) {
191
192
  }
192
193
  var grid = this.grid;
193
194
  grid[move.location.y][move.location.x] = entity;
194
- moves.push.apply(moves, __spreadArray([], __read(this.gainBonus(grid)), false));
195
+ moves.push.apply(moves, __spreadArray([], __read(this.updateGrid(grid)), false));
195
196
  var triggerEffectsRule = new TriggerEffectsRule_1.TriggerEffectsRule(this.game);
196
197
  var crushed = this.allCards.location(function (l) { return l.x === move.location.x && l.y === move.location.y; }).maxBy(function (item) { return item.location.z; });
197
198
  triggerEffectsRule.triggerCardEffect(card, { type: Effect_1.TriggerEventType.SelfPlaced, location: location, crush: crushed.length > 0 });
@@ -218,6 +219,28 @@ var Pantheon = (function (_super) {
218
219
  enumerable: false,
219
220
  configurable: true
220
221
  });
222
+ Pantheon.prototype.updateGrid = function (grid) {
223
+ var _a;
224
+ if (grid === void 0) { grid = this.grid; }
225
+ var gridBefore = (_a = this.remind(Memory_1.Memory.PlayerGrid, this.player)) !== null && _a !== void 0 ? _a : this.grid.map(function (line) { return line.map(function () { return null; }); });
226
+ var gridAfter = grid.map(function (line) { return line.map(function (item) { return item !== null && item !== void 0 ? item : null; }); });
227
+ this.memorize(Memory_1.Memory.PlayerGrid, gridAfter, this.player);
228
+ for (var y = 0; y < 3; y++) {
229
+ if (gridBefore[y].some(function (item) { return item === null; }) && gridAfter[y].every(function (item) { return item !== null; })) {
230
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.LineEvent, eventType: Effect_1.LineEventType.Completed, player: this.player, y: y });
231
+ }
232
+ }
233
+ var _loop_1 = function (x) {
234
+ if (gridBefore.some(function (line) { return line[x] === null; }) && gridAfter.every(function (line) { return line[x] !== null; })) {
235
+ new TriggerEffectsRule_1.TriggerEffectsRule(this_1.game).triggerEffects({ type: Effect_1.TriggerEventType.ColumnEvent, eventType: Effect_1.LineEventType.Completed, player: this_1.player, x: x });
236
+ }
237
+ };
238
+ var this_1 = this;
239
+ for (var x = 0; x < 3; x++) {
240
+ _loop_1(x);
241
+ }
242
+ return this.gainBonus(grid);
243
+ };
221
244
  Pantheon.prototype.gainBonus = function (grid) {
222
245
  var e_1, _a, e_2, _b;
223
246
  if (grid === void 0) { grid = this.grid; }
@@ -314,8 +337,8 @@ var Pantheon = (function (_super) {
314
337
  var piles = [];
315
338
  var myEntities = this.material(MaterialType_1.MaterialType.EntityCard).player(this.player);
316
339
  var fullPantheon = myEntities.location(LocationType_1.LocationType.Pantheon);
317
- var _loop_1 = function (x) {
318
- var _loop_2 = function (y) {
340
+ var _loop_2 = function (x) {
341
+ var _loop_3 = function (y) {
319
342
  if (predicate({ x: x, y: y })) {
320
343
  var pile = fullPantheon.location(function (l) { return l.x === x && l.y === y; }).sort(function (item) { return item.location.z; });
321
344
  if (pile.length > 0) {
@@ -324,11 +347,11 @@ var Pantheon = (function (_super) {
324
347
  }
325
348
  };
326
349
  for (var y = 0; y < 3; y++) {
327
- _loop_2(y);
350
+ _loop_3(y);
328
351
  }
329
352
  };
330
353
  for (var x = 0; x < 3; x++) {
331
- _loop_1(x);
354
+ _loop_2(x);
332
355
  }
333
356
  return piles;
334
357
  };
@@ -352,6 +375,10 @@ var Pantheon = (function (_super) {
352
375
  enumerable: false,
353
376
  configurable: true
354
377
  });
378
+ Pantheon.prototype.onEntitySacrificed = function (card) {
379
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
380
+ return this.updateGrid();
381
+ };
355
382
  return Pantheon;
356
383
  }(rules_api_1.MaterialRulesPart));
357
384
  exports.Pantheon = Pantheon;
@@ -35,8 +35,8 @@ export declare enum TriggerEventType {
35
35
  EndOfGame = 1,
36
36
  SelfPlaced = 2,
37
37
  EntityInvoked = 3,
38
- LineBonusGain = 4,
39
- ColumnBonusGain = 5,
38
+ LineEvent = 4,
39
+ ColumnEvent = 5,
40
40
  Infinite = 6,
41
41
  EntityCrushed = 7,
42
42
  EntitySacrificed = 8
@@ -56,13 +56,19 @@ export type EntityInvoked = {
56
56
  card: MaterialItem<MaterialType, LocationType, EntityId>;
57
57
  cardIndex: number;
58
58
  };
59
- export type LineBonusGained = {
60
- type: TriggerEventType.LineBonusGain;
59
+ export declare enum LineEventType {
60
+ BonusGain = 1,
61
+ Completed = 2
62
+ }
63
+ export type LineEvent = {
64
+ type: TriggerEventType.LineEvent;
65
+ eventType: LineEventType;
61
66
  player: PlayerColor;
62
67
  y: number;
63
68
  };
64
- export type ColumnBonusGained = {
65
- type: TriggerEventType.ColumnBonusGain;
69
+ export type ColumnEvent = {
70
+ type: TriggerEventType.ColumnEvent;
71
+ eventType: LineEventType;
66
72
  player: PlayerColor;
67
73
  x: number;
68
74
  };
@@ -82,7 +88,7 @@ export type EntitySacrificed = {
82
88
  card: MaterialItem<MaterialType, LocationType, EntityId>;
83
89
  cardIndex: number;
84
90
  };
85
- export type TriggerEvent = EndOfGameEvent | SelfPlaced | EntityInvoked | LineBonusGained | ColumnBonusGained | Infinite | EntityCrushed | EntitySacrificed;
91
+ export type TriggerEvent = EndOfGameEvent | SelfPlaced | EntityInvoked | LineEvent | ColumnEvent | Infinite | EntityCrushed | EntitySacrificed;
86
92
  export type PendingEffect<Event extends TriggerEvent = TriggerEvent> = {
87
93
  cardIndex: number;
88
94
  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.isCrushed = exports.isPlacedCrush = exports.oncePerTurn = exports.isEndOfGame = exports.isPlaced = exports.TriggerEventType = exports.SimultaneousEffectRule = exports.PlayerEffectRule = void 0;
18
+ exports.isCrushed = exports.isPlacedCrush = exports.oncePerTurn = exports.LineEventType = exports.isEndOfGame = exports.isPlaced = exports.TriggerEventType = exports.SimultaneousEffectRule = exports.PlayerEffectRule = 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");
@@ -95,8 +95,8 @@ var TriggerEventType;
95
95
  TriggerEventType[TriggerEventType["EndOfGame"] = 1] = "EndOfGame";
96
96
  TriggerEventType[TriggerEventType["SelfPlaced"] = 2] = "SelfPlaced";
97
97
  TriggerEventType[TriggerEventType["EntityInvoked"] = 3] = "EntityInvoked";
98
- TriggerEventType[TriggerEventType["LineBonusGain"] = 4] = "LineBonusGain";
99
- TriggerEventType[TriggerEventType["ColumnBonusGain"] = 5] = "ColumnBonusGain";
98
+ TriggerEventType[TriggerEventType["LineEvent"] = 4] = "LineEvent";
99
+ TriggerEventType[TriggerEventType["ColumnEvent"] = 5] = "ColumnEvent";
100
100
  TriggerEventType[TriggerEventType["Infinite"] = 6] = "Infinite";
101
101
  TriggerEventType[TriggerEventType["EntityCrushed"] = 7] = "EntityCrushed";
102
102
  TriggerEventType[TriggerEventType["EntitySacrificed"] = 8] = "EntitySacrificed";
@@ -105,6 +105,11 @@ var isPlaced = function (event) { return event.type === TriggerEventType.SelfPla
105
105
  exports.isPlaced = isPlaced;
106
106
  var isEndOfGame = function (event) { return event.type === TriggerEventType.EndOfGame; };
107
107
  exports.isEndOfGame = isEndOfGame;
108
+ var LineEventType;
109
+ (function (LineEventType) {
110
+ LineEventType[LineEventType["BonusGain"] = 1] = "BonusGain";
111
+ LineEventType[LineEventType["Completed"] = 2] = "Completed";
112
+ })(LineEventType = exports.LineEventType || (exports.LineEventType = {}));
108
113
  var oncePerTurn = function (event) { return event.type === TriggerEventType.Infinite; };
109
114
  exports.oncePerTurn = oncePerTurn;
110
115
  var isPlacedCrush = function (event) { return (0, exports.isPlaced)(event) && event.crush; };
@@ -1,4 +1,4 @@
1
- import { CustomMove, ItemMove, Location, Material, MaterialItem, MaterialMove, MoveItem, XYCoordinates } from '@gamepark/rules-api';
1
+ import { ItemMove, Location, Material, MaterialItem, MaterialMove, MoveItem, XYCoordinates } from '@gamepark/rules-api';
2
2
  import { PlayerEffectRule } from './Effect';
3
3
  export declare abstract class MoveEffectRule extends PlayerEffectRule {
4
4
  canPlayEffect(cardIndex: number): boolean;
@@ -11,5 +11,5 @@ export declare abstract class MoveEffectRule extends PlayerEffectRule {
11
11
  isLegalDestination(_space: XYCoordinates, _cardLocation: Location): boolean;
12
12
  afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
13
13
  onCardMoved(_move: MoveItem): MaterialMove[];
14
- onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
14
+ endEffect(): MaterialMove[];
15
15
  }
@@ -17,7 +17,6 @@ var __extends = (this && this.__extends) || (function () {
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.MoveEffectRule = void 0;
19
19
  var rules_api_1 = require("@gamepark/rules-api");
20
- var CustomMoveType_1 = require("../../CustomMoveType");
21
20
  var LocationType_1 = require("../LocationType");
22
21
  var MaterialType_1 = require("../MaterialType");
23
22
  var Pantheon_1 = require("../Pantheon");
@@ -74,12 +73,9 @@ var MoveEffectRule = (function (_super) {
74
73
  MoveEffectRule.prototype.onCardMoved = function (_move) {
75
74
  return this.endEffect();
76
75
  };
77
- MoveEffectRule.prototype.onCustomMove = function (move) {
78
- if (move.type === CustomMoveType_1.CustomMoveType.EndEffect) {
79
- var pantheon = new Pantheon_1.Pantheon(this.game, this.player);
80
- return pantheon.gainBonus();
81
- }
82
- return [];
76
+ MoveEffectRule.prototype.endEffect = function () {
77
+ var pantheon = new Pantheon_1.Pantheon(this.game, this.player);
78
+ return pantheon.updateGrid().concat(_super.prototype.endEffect.call(this));
83
79
  };
84
80
  return MoveEffectRule;
85
81
  }(Effect_1.PlayerEffectRule));
@@ -1,6 +1,7 @@
1
1
  import { ItemMove, Material, MaterialMove, MoveItem } from '@gamepark/rules-api';
2
2
  import { PlayerEffectRule } from './Effect';
3
3
  export declare abstract class SacrificeEffectRule extends PlayerEffectRule {
4
+ canPlayEffect(_cardIndex: number): boolean;
4
5
  playEffect(): MaterialMove[];
5
6
  getPlayerMoves(): MoveItem<number, number, number>[];
6
7
  getCardsToSacrifice(): Material;
@@ -27,6 +27,9 @@ var SacrificeEffectRule = (function (_super) {
27
27
  function SacrificeEffectRule() {
28
28
  return _super !== null && _super.apply(this, arguments) || this;
29
29
  }
30
+ SacrificeEffectRule.prototype.canPlayEffect = function (_cardIndex) {
31
+ return this.getCardsToSacrifice().length > 0;
32
+ };
30
33
  SacrificeEffectRule.prototype.playEffect = function () {
31
34
  if (!this.getCardsToSacrifice().length)
32
35
  return [];
@@ -1,4 +1,4 @@
1
- import { CustomMove, ItemMove, Location, Material, MaterialItem, MaterialMove, MoveItem, XYCoordinates } from '@gamepark/rules-api';
1
+ import { ItemMove, Location, Material, MaterialItem, MaterialMove, MoveItem, XYCoordinates } from '@gamepark/rules-api';
2
2
  import { PlayerColor } from '../../PlayerColor';
3
3
  import { SimultaneousEffectRule } from './Effect';
4
4
  export declare abstract class SimultaneousMoveEffectRule extends SimultaneousEffectRule {
@@ -9,5 +9,5 @@ export declare abstract class SimultaneousMoveEffectRule extends SimultaneousEff
9
9
  isLegalDestination(_space: XYCoordinates, _cardLocation: Location): boolean;
10
10
  afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
11
11
  onCardMoved(move: MoveItem): MaterialMove[];
12
- onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
12
+ getMovesAfterPlayersDone(): MaterialMove[];
13
13
  }
@@ -53,7 +53,6 @@ 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 CustomMoveType_1 = require("../../CustomMoveType");
57
56
  var LocationType_1 = require("../LocationType");
58
57
  var MaterialType_1 = require("../MaterialType");
59
58
  var Pantheon_1 = require("../Pantheon");
@@ -97,27 +96,25 @@ var SimultaneousMoveEffectRule = (function (_super) {
97
96
  SimultaneousMoveEffectRule.prototype.onCardMoved = function (move) {
98
97
  return [this.endPlayerTurn(move.location.player)];
99
98
  };
100
- SimultaneousMoveEffectRule.prototype.onCustomMove = function (move) {
99
+ SimultaneousMoveEffectRule.prototype.getMovesAfterPlayersDone = function () {
101
100
  var e_1, _a;
102
- if (move.type === CustomMoveType_1.CustomMoveType.EndEffect) {
103
- var moves = [];
104
- try {
105
- for (var _b = __values(this.game.players), _c = _b.next(); !_c.done; _c = _b.next()) {
106
- var player = _c.value;
107
- var pantheon = new Pantheon_1.Pantheon(this.game, player);
108
- moves.push.apply(moves, __spreadArray([], __read(pantheon.gainBonus()), false));
109
- }
101
+ var moves = [];
102
+ try {
103
+ for (var _b = __values(this.game.players), _c = _b.next(); !_c.done; _c = _b.next()) {
104
+ var player = _c.value;
105
+ var pantheon = new Pantheon_1.Pantheon(this.game, player);
106
+ moves.push.apply(moves, __spreadArray([], __read(pantheon.updateGrid()), false));
110
107
  }
111
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
112
- finally {
113
- try {
114
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
115
- }
116
- finally { if (e_1) throw e_1.error; }
108
+ }
109
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
110
+ finally {
111
+ try {
112
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
117
113
  }
118
- return moves;
114
+ finally { if (e_1) throw e_1.error; }
119
115
  }
120
- return [];
116
+ moves.push.apply(moves, __spreadArray([], __read(_super.prototype.getMovesAfterPlayersDone.call(this)), false));
117
+ return moves;
121
118
  };
122
119
  return SimultaneousMoveEffectRule;
123
120
  }(Effect_1.SimultaneousEffectRule));
@@ -7,14 +7,12 @@ exports.Cyclops = {
7
7
  invoke: [{ favor: 1 }, { gem: 1 }, {}],
8
8
  effect: {
9
9
  trigger: function (event, card) {
10
+ if (event.type !== Effect_1.TriggerEventType.LineEvent && event.type !== Effect_1.TriggerEventType.ColumnEvent)
11
+ return false;
10
12
  var _a = card.getItem().location, x = _a.x, y = _a.y, player = _a.player;
11
- if (event.type === Effect_1.TriggerEventType.LineBonusGain) {
12
- return event.player === player && event.y === y;
13
- }
14
- else if (event.type === Effect_1.TriggerEventType.ColumnBonusGain) {
15
- return event.player === player && event.x === x;
16
- }
17
- return false;
13
+ if (event.eventType !== Effect_1.LineEventType.BonusGain || event.player !== player)
14
+ return false;
15
+ return event.type === Effect_1.TriggerEventType.LineEvent ? event.y === y : event.x === x;
18
16
  },
19
17
  rule: CyclopsEffectRule_1.CyclopsEffectRule
20
18
  }