@gamepark/mythologies 0.1.0 → 0.2.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 (56) hide show
  1. package/dist/CustomMoveType.d.ts +2 -1
  2. package/dist/CustomMoveType.js +1 -0
  3. package/dist/Memory.d.ts +4 -1
  4. package/dist/Memory.js +3 -0
  5. package/dist/MythologiesRules.d.ts +20 -3
  6. package/dist/MythologiesRules.js +42 -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 +34 -6
  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/chinese/YanluoWang.js +7 -1
  21. package/dist/material/entity/greek/Cyclops.js +5 -7
  22. package/dist/material/entity/inca/Amaru.js +32 -1
  23. package/dist/material/entity/inca/Caiman.js +7 -1
  24. package/dist/material/entity/inca/Condor.js +7 -1
  25. package/dist/material/entity/inca/Illapa.js +7 -1
  26. package/dist/material/entity/inca/Inti.js +33 -1
  27. package/dist/material/entity/inca/MamaQucha.js +37 -1
  28. package/dist/material/entity/inca/Pumapunku.js +31 -1
  29. package/dist/material/entity/inca/Supay.js +7 -1
  30. package/dist/material/entity/inca/Ukuku.js +13 -1
  31. package/dist/material/entity/inca/Viracocha.js +7 -1
  32. package/dist/rules/RuleId.d.ts +10 -1
  33. package/dist/rules/RuleId.js +9 -0
  34. package/dist/rules/effects/AthenaEffectRule.js +1 -1
  35. package/dist/rules/effects/CaimanEffectRule.d.ts +8 -0
  36. package/dist/rules/effects/CaimanEffectRule.js +76 -0
  37. package/dist/rules/effects/CentaurEffectRule.js +1 -1
  38. package/dist/rules/effects/ChimeraEffectRule.js +2 -13
  39. package/dist/rules/effects/CondorEffectRule.d.ts +8 -0
  40. package/dist/rules/effects/CondorEffectRule.js +45 -0
  41. package/dist/rules/effects/CyclopsEffectRule.js +2 -2
  42. package/dist/rules/effects/GorgonEffectRule.d.ts +0 -4
  43. package/dist/rules/effects/GorgonEffectRule.js +1 -15
  44. package/dist/rules/effects/HadesEffectRule.js +2 -12
  45. package/dist/rules/effects/IllapaEffectRule.d.ts +14 -0
  46. package/dist/rules/effects/IllapaEffectRule.js +71 -0
  47. package/dist/rules/effects/RaEffectRule.js +2 -12
  48. package/dist/rules/effects/SupayEffectRule.d.ts +19 -0
  49. package/dist/rules/effects/SupayEffectRule.js +78 -0
  50. package/dist/rules/effects/UkukuEffectRule.d.ts +13 -0
  51. package/dist/rules/effects/UkukuEffectRule.js +60 -0
  52. package/dist/rules/effects/ViracochaEffectRule.d.ts +7 -0
  53. package/dist/rules/effects/ViracochaEffectRule.js +64 -0
  54. package/dist/rules/effects/YanluoWangEffectRule.d.ts +9 -0
  55. package/dist/rules/effects/YanluoWangEffectRule.js +104 -0
  56. 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,12 @@ 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,
15
+ YanluoWangCount = 16
13
16
  }
package/dist/Memory.js CHANGED
@@ -9,9 +9,12 @@ 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";
19
+ Memory[Memory["YanluoWangCount"] = 16] = "YanluoWangCount";
17
20
  })(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,18 @@ 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';
37
+ import { YanluoWangEffectRule } from './rules/effects/YanluoWangEffectRule';
31
38
  import { EndGameRule } from './rules/EndGameRule';
32
39
  import { PlaceCardsRule } from './rules/PlaceCardsRule';
33
40
  import { PlaceTokenRule } from './rules/PlaceTokenRule';
34
41
  import { RuleId } from './rules/RuleId';
35
42
  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> {
43
+ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, MaterialType, LocationType> implements TimeLimit<MaterialGame<PlayerColor, MaterialType, LocationType>, MaterialMove<PlayerColor, MaterialType, LocationType>, PlayerColor>, CompetitiveScore {
37
44
  rules: {
38
45
  1: typeof DrawDestinyCardRule;
39
46
  2: typeof ChooseDraftTokenRule;
@@ -69,6 +76,15 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
69
76
  35: typeof VetalaEffectRule;
70
77
  36: typeof KinnaraEffectRule;
71
78
  37: typeof KinnaraPlaceEffectRule;
79
+ 38: typeof ViracochaEffectRule;
80
+ 39: typeof IllapaEffectRule;
81
+ 40: typeof IllapaSacrificeRule;
82
+ 41: typeof CaimanEffectRule;
83
+ 42: typeof CondorEffectRule;
84
+ 43: typeof SupayEffectRule;
85
+ 44: typeof UkukuEffectRule;
86
+ 45: typeof UkukuPlaceEffectRule;
87
+ 46: typeof YanluoWangEffectRule;
72
88
  };
73
89
  locationsStrategies: {
74
90
  2: {
@@ -103,9 +119,10 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
103
119
  };
104
120
  keepMoveSecret(move: MaterialMove): boolean;
105
121
  beforeItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
106
- onEntitySacrificed(card: Material): void;
107
122
  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
123
  getAutomaticMoves(): import("@gamepark/rules-api").StartPlayerTurn<PlayerColor, RuleId.ResolveEffects>[];
109
124
  startEffectsResolution(): import("@gamepark/rules-api").StartPlayerTurn<PlayerColor, RuleId.ResolveEffects>[];
110
125
  giveTime(): number;
126
+ getScore(player: PlayerColor): number;
127
+ getTieBreaker(tieBreaker: number, player: PlayerColor): number | undefined;
111
128
  }
@@ -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,13 @@ 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");
60
+ var YanluoWangEffectRule_1 = require("./rules/effects/YanluoWangEffectRule");
53
61
  var EndGameRule_1 = require("./rules/EndGameRule");
54
62
  var PlaceCardsRule_1 = require("./rules/PlaceCardsRule");
55
63
  var PlaceTokenRule_1 = require("./rules/PlaceTokenRule");
@@ -95,6 +103,15 @@ var MythologiesRules = (function (_super) {
95
103
  _a[RuleId_1.RuleId.VetalaEffect] = VetalaEffectRule_1.VetalaEffectRule,
96
104
  _a[RuleId_1.RuleId.KinnaraEffect] = KinnaraEffectRule_1.KinnaraEffectRule,
97
105
  _a[RuleId_1.RuleId.KinnaraPlaceEffect] = KinnaraEffectRule_1.KinnaraPlaceEffectRule,
106
+ _a[RuleId_1.RuleId.ViracochaEffect] = ViracochaEffectRule_1.ViracochaEffectRule,
107
+ _a[RuleId_1.RuleId.IllapaEffect] = IllapaEffectRule_1.IllapaEffectRule,
108
+ _a[RuleId_1.RuleId.IllapaSacrifice] = IllapaEffectRule_1.IllapaSacrificeRule,
109
+ _a[RuleId_1.RuleId.CaimanEffect] = CaimanEffectRule_1.CaimanEffectRule,
110
+ _a[RuleId_1.RuleId.CondorEffect] = CondorEffectRule_1.CondorEffectRule,
111
+ _a[RuleId_1.RuleId.SupayEffect] = SupayEffectRule_1.SupayEffectRule,
112
+ _a[RuleId_1.RuleId.UkukuEffect] = UkukuEffectRule_1.UkukuEffectRule,
113
+ _a[RuleId_1.RuleId.UkukuPlaceEffect] = UkukuEffectRule_1.UkukuPlaceEffectRule,
114
+ _a[RuleId_1.RuleId.YanluoWangEffect] = YanluoWangEffectRule_1.YanluoWangEffectRule,
98
115
  _a);
99
116
  _this.locationsStrategies = (_b = {},
100
117
  _b[MaterialType_1.MaterialType.EntityCard] = (_c = {},
@@ -146,7 +163,7 @@ var MythologiesRules = (function (_super) {
146
163
  var card = this.material(MaterialType_1.MaterialType.EntityCard).index(move.itemIndex);
147
164
  var location = card.getItem().location;
148
165
  if (location.type === LocationType_1.LocationType.Pantheon) {
149
- this.onEntitySacrificed(card);
166
+ return new Pantheon_1.Pantheon(this.game, location.player).onEntitySacrificed(card);
150
167
  }
151
168
  }
152
169
  }
@@ -155,29 +172,26 @@ var MythologiesRules = (function (_super) {
155
172
  var pile = this.material(MaterialType_1.MaterialType.EntityCard).index(move.indexes);
156
173
  if (((_a = pile.getItem()) === null || _a === void 0 ? void 0 : _a.location.type) === LocationType_1.LocationType.Pantheon) {
157
174
  var topCard = pile.maxBy(function (item) { return item.location.z; });
158
- this.onEntitySacrificed(topCard);
175
+ return new Pantheon_1.Pantheon(this.game, topCard.getItem().location.player).onEntitySacrificed(topCard);
159
176
  }
160
177
  }
161
178
  }
162
179
  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 });
180
+ var gem = this.material(MaterialType_1.MaterialType.GemToken).getItem(move.itemIndex).location;
181
+ var player = gem.player;
182
+ if (gem.type === LocationType_1.LocationType.PantheonLineBonus && player === move.location.player) {
183
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.LineEvent, eventType: Effect_1.LineEventType.BonusGain, player: player, y: gem.y });
167
184
  }
168
185
  }
169
186
  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 });
187
+ var favor = this.material(MaterialType_1.MaterialType.FavorToken).getItem(move.itemIndex).location;
188
+ var player = favor.player;
189
+ if (favor.type === LocationType_1.LocationType.PantheonColumnBonus && player === move.location.player) {
190
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.ColumnEvent, eventType: Effect_1.LineEventType.BonusGain, player: player, x: favor.x });
174
191
  }
175
192
  }
176
193
  return [];
177
194
  };
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
195
  MythologiesRules.prototype.onCustomMove = function (move) {
182
196
  var _a;
183
197
  if (move.type === CustomMoveType_1.CustomMoveType.EndEffect) {
@@ -213,6 +227,21 @@ var MythologiesRules = (function (_super) {
213
227
  MythologiesRules.prototype.giveTime = function () {
214
228
  return 60;
215
229
  };
230
+ MythologiesRules.prototype.getScore = function (player) {
231
+ var pantheon = new Pantheon_1.Pantheon(this.game, player);
232
+ return pantheon.favor + Math.floor(pantheon.gems / 3);
233
+ };
234
+ MythologiesRules.prototype.getTieBreaker = function (tieBreaker, player) {
235
+ switch (tieBreaker) {
236
+ case 1:
237
+ return new Pantheon_1.Pantheon(this.game, player).gems % 3;
238
+ case 2:
239
+ return new Pantheon_1.Pantheon(this.game, player).visibleEntities.id(function (id) { return (0, Entity_1.isGod)(id.front); }).length;
240
+ case 3:
241
+ return new Pantheon_1.Pantheon(this.game, player).visibleEntities.length;
242
+ }
243
+ return undefined;
244
+ };
216
245
  return MythologiesRules;
217
246
  }(rules_api_1.SecretMaterialRules));
218
247
  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");
@@ -181,17 +182,18 @@ var Pantheon = (function (_super) {
181
182
  return this.material(MaterialType_1.MaterialType.FavorToken).location(LocationType_1.LocationType.PlayerFavor).player(this.player).deleteItem(quantity);
182
183
  };
183
184
  Pantheon.prototype.onCardPlaced = function (move) {
185
+ var _a, _b;
184
186
  var moves = [];
185
187
  var location = move.location;
186
188
  var card = this.material(MaterialType_1.MaterialType.EntityCard).index(move.itemIndex);
187
189
  var cardItem = card.getItem();
188
- var entity = cardItem.id.front;
190
+ var entity = (_a = cardItem.id.front) !== null && _a !== void 0 ? _a : ((_b = move.reveal) === null || _b === void 0 ? void 0 : _b.id).front;
189
191
  if ((0, Entity_1.isGod)(entity)) {
190
192
  moves.push(this.spendGems(4));
191
193
  }
192
194
  var grid = this.grid;
193
195
  grid[move.location.y][move.location.x] = entity;
194
- moves.push.apply(moves, __spreadArray([], __read(this.gainBonus(grid)), false));
196
+ moves.push.apply(moves, __spreadArray([], __read(this.updateGrid(grid)), false));
195
197
  var triggerEffectsRule = new TriggerEffectsRule_1.TriggerEffectsRule(this.game);
196
198
  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
199
  triggerEffectsRule.triggerCardEffect(card, { type: Effect_1.TriggerEventType.SelfPlaced, location: location, crush: crushed.length > 0 });
@@ -218,6 +220,28 @@ var Pantheon = (function (_super) {
218
220
  enumerable: false,
219
221
  configurable: true
220
222
  });
223
+ Pantheon.prototype.updateGrid = function (grid) {
224
+ var _a;
225
+ if (grid === void 0) { grid = this.grid; }
226
+ 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; }); });
227
+ var gridAfter = grid.map(function (line) { return line.map(function (item) { return item !== null && item !== void 0 ? item : null; }); });
228
+ this.memorize(Memory_1.Memory.PlayerGrid, gridAfter, this.player);
229
+ for (var y = 0; y < 3; y++) {
230
+ if (gridBefore[y].some(function (item) { return item === null; }) && gridAfter[y].every(function (item) { return item !== null; })) {
231
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.LineEvent, eventType: Effect_1.LineEventType.Completed, player: this.player, y: y });
232
+ }
233
+ }
234
+ var _loop_1 = function (x) {
235
+ if (gridBefore.some(function (line) { return line[x] === null; }) && gridAfter.every(function (line) { return line[x] !== null; })) {
236
+ new TriggerEffectsRule_1.TriggerEffectsRule(this_1.game).triggerEffects({ type: Effect_1.TriggerEventType.ColumnEvent, eventType: Effect_1.LineEventType.Completed, player: this_1.player, x: x });
237
+ }
238
+ };
239
+ var this_1 = this;
240
+ for (var x = 0; x < 3; x++) {
241
+ _loop_1(x);
242
+ }
243
+ return this.gainBonus(grid);
244
+ };
221
245
  Pantheon.prototype.gainBonus = function (grid) {
222
246
  var e_1, _a, e_2, _b;
223
247
  if (grid === void 0) { grid = this.grid; }
@@ -314,8 +338,8 @@ var Pantheon = (function (_super) {
314
338
  var piles = [];
315
339
  var myEntities = this.material(MaterialType_1.MaterialType.EntityCard).player(this.player);
316
340
  var fullPantheon = myEntities.location(LocationType_1.LocationType.Pantheon);
317
- var _loop_1 = function (x) {
318
- var _loop_2 = function (y) {
341
+ var _loop_2 = function (x) {
342
+ var _loop_3 = function (y) {
319
343
  if (predicate({ x: x, y: y })) {
320
344
  var pile = fullPantheon.location(function (l) { return l.x === x && l.y === y; }).sort(function (item) { return item.location.z; });
321
345
  if (pile.length > 0) {
@@ -324,11 +348,11 @@ var Pantheon = (function (_super) {
324
348
  }
325
349
  };
326
350
  for (var y = 0; y < 3; y++) {
327
- _loop_2(y);
351
+ _loop_3(y);
328
352
  }
329
353
  };
330
354
  for (var x = 0; x < 3; x++) {
331
- _loop_1(x);
355
+ _loop_2(x);
332
356
  }
333
357
  return piles;
334
358
  };
@@ -352,6 +376,10 @@ var Pantheon = (function (_super) {
352
376
  enumerable: false,
353
377
  configurable: true
354
378
  });
379
+ Pantheon.prototype.onEntitySacrificed = function (card) {
380
+ new TriggerEffectsRule_1.TriggerEffectsRule(this.game).triggerEffects({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
381
+ return this.updateGrid();
382
+ };
355
383
  return Pantheon;
356
384
  }(rules_api_1.MaterialRulesPart));
357
385
  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));
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.YanluoWang = void 0;
4
+ var YanluoWangEffectRule_1 = require("../../../rules/effects/YanluoWangEffectRule");
5
+ var Effect_1 = require("../Effect");
4
6
  exports.YanluoWang = {
5
- invoke: [{}, {}, { favor: 2 }]
7
+ invoke: [{}, {}, { favor: 2 }],
8
+ effect: {
9
+ trigger: Effect_1.isEndOfGame,
10
+ rule: YanluoWangEffectRule_1.YanluoWangEffectRule
11
+ }
6
12
  };