@gamepark/mythologies 0.7.1 → 0.7.2

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 (50) hide show
  1. package/dist/CustomMoveType.d.ts +3 -4
  2. package/dist/CustomMoveType.js +3 -4
  3. package/dist/MythologiesRules.d.ts +1 -1
  4. package/dist/MythologiesRules.js +33 -9
  5. package/dist/material/Entity.d.ts +2 -2
  6. package/dist/material/Entity.js +2 -2
  7. package/dist/material/LocationType.d.ts +2 -1
  8. package/dist/material/LocationType.js +1 -0
  9. package/dist/material/Pantheon.d.ts +1 -0
  10. package/dist/material/Pantheon.js +16 -12
  11. package/dist/material/entity/Effect.d.ts +10 -6
  12. package/dist/material/entity/Effect.js +48 -9
  13. package/dist/material/entity/SimultaneousMoveEffectRule.d.ts +0 -1
  14. package/dist/material/entity/SimultaneousMoveEffectRule.js +0 -4
  15. package/dist/material/entity/SimultaneousSacrificeEffectRule.d.ts +0 -1
  16. package/dist/material/entity/SimultaneousSacrificeEffectRule.js +0 -4
  17. package/dist/material/entity/celtic/Banshee.js +2 -2
  18. package/dist/material/entity/celtic/Dagda.js +3 -2
  19. package/dist/material/entity/chinese/ChangE.js +3 -5
  20. package/dist/material/entity/chinese/Fenghuang.js +3 -1
  21. package/dist/material/entity/chinese/Mogwai.js +4 -4
  22. package/dist/material/entity/chinese/SunWukong.js +3 -2
  23. package/dist/material/entity/egyptian/Isis.js +3 -2
  24. package/dist/material/entity/greek/Cyclops.js +7 -12
  25. package/dist/material/entity/greek/Poseidon.js +3 -2
  26. package/dist/material/entity/inca/Puma.js +4 -1
  27. package/dist/material/entity/inca/Ukuku.js +4 -4
  28. package/dist/material/entity/zulu/Inkanyamba.js +4 -1
  29. package/dist/rules/PlaceCardsRule.d.ts +0 -2
  30. package/dist/rules/PlaceCardsRule.js +3 -15
  31. package/dist/rules/PlaceTokenRule.js +5 -3
  32. package/dist/rules/effects/CentaurEffectRule.d.ts +1 -0
  33. package/dist/rules/effects/CentaurEffectRule.js +8 -44
  34. package/dist/rules/effects/CyclopsEffectRule.d.ts +5 -4
  35. package/dist/rules/effects/CyclopsEffectRule.js +58 -49
  36. package/dist/rules/effects/DraugrEffectRule.d.ts +1 -1
  37. package/dist/rules/effects/DraugrEffectRule.js +1 -1
  38. package/dist/rules/effects/FenrirEffectRule.js +6 -1
  39. package/dist/rules/effects/IllapaEffectRule.d.ts +4 -2
  40. package/dist/rules/effects/IllapaEffectRule.js +17 -12
  41. package/dist/rules/effects/MinotaurEffectRule.d.ts +2 -0
  42. package/dist/rules/effects/MinotaurEffectRule.js +11 -1
  43. package/dist/rules/effects/NuwaEffectRule.d.ts +3 -1
  44. package/dist/rules/effects/NuwaEffectRule.js +20 -12
  45. package/dist/rules/effects/ThorEffectRule.js +1 -1
  46. package/dist/rules/effects/TianlongEffectRule.d.ts +1 -0
  47. package/dist/rules/effects/TianlongEffectRule.js +19 -48
  48. package/dist/rules/effects/TriggerEffectsRule.d.ts +3 -3
  49. package/dist/rules/effects/TriggerEffectsRule.js +22 -18
  50. package/package.json +4 -4
@@ -4,10 +4,9 @@ export declare enum CustomMoveType {
4
4
  TrialFailure = 3,
5
5
  PlayEffect = 4,
6
6
  EndEffect = 5,
7
- ChoosePlayer = 6,
8
- ChooseMythology = 7,
9
- ChooseLine = 8,
10
- ChooseEntityCard = 9
7
+ ChooseMythology = 6,
8
+ ChooseLine = 7,
9
+ ChooseEntityCard = 8
11
10
  }
12
11
  export type TrialSuccessData = {
13
12
  trial: number;
@@ -8,8 +8,7 @@ var CustomMoveType;
8
8
  CustomMoveType[CustomMoveType["TrialFailure"] = 3] = "TrialFailure";
9
9
  CustomMoveType[CustomMoveType["PlayEffect"] = 4] = "PlayEffect";
10
10
  CustomMoveType[CustomMoveType["EndEffect"] = 5] = "EndEffect";
11
- CustomMoveType[CustomMoveType["ChoosePlayer"] = 6] = "ChoosePlayer";
12
- CustomMoveType[CustomMoveType["ChooseMythology"] = 7] = "ChooseMythology";
13
- CustomMoveType[CustomMoveType["ChooseLine"] = 8] = "ChooseLine";
14
- CustomMoveType[CustomMoveType["ChooseEntityCard"] = 9] = "ChooseEntityCard";
11
+ CustomMoveType[CustomMoveType["ChooseMythology"] = 6] = "ChooseMythology";
12
+ CustomMoveType[CustomMoveType["ChooseLine"] = 7] = "ChooseLine";
13
+ CustomMoveType[CustomMoveType["ChooseEntityCard"] = 8] = "ChooseEntityCard";
15
14
  })(CustomMoveType = exports.CustomMoveType || (exports.CustomMoveType = {}));
@@ -148,7 +148,7 @@ export declare class MythologiesRules extends SecretMaterialRules<PlayerColor, M
148
148
  keepMoveSecret(move: MaterialMove): boolean;
149
149
  isPlayerDestiny(move: MoveItem): boolean;
150
150
  beforeItemMove(move: ItemMove): MaterialMove<PlayerColor, MaterialType, LocationType, number>[];
151
- protected onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
151
+ protected onCustomMove(move: CustomMove): MaterialMove<PlayerColor, MaterialType, LocationType, number>[];
152
152
  getAutomaticMoves(): MaterialMove<number, number, number, number>[];
153
153
  startEffectsResolution(): MaterialMove<number, number, number, number>[];
154
154
  giveTime(): number;
@@ -14,6 +14,31 @@ 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
+ };
17
42
  Object.defineProperty(exports, "__esModule", { value: true });
18
43
  exports.MythologiesRules = void 0;
19
44
  var rules_api_1 = require("@gamepark/rules-api");
@@ -208,27 +233,26 @@ var MythologiesRules = (function (_super) {
208
233
  return _super.prototype.beforeItemMove.call(this, move);
209
234
  };
210
235
  MythologiesRules.prototype.onCustomMove = function (move) {
211
- var _a;
236
+ var moves = _super.prototype.onCustomMove.call(this, move);
212
237
  if (move.type === CustomMoveType_1.CustomMoveType.EndEffect) {
213
238
  this.forget(Memory_1.Memory.OngoingEffect);
214
239
  if (this.remind(Memory_1.Memory.PendingEffects).length) {
215
- return this.startEffectsResolution();
240
+ moves.push.apply(moves, __spreadArray([], __read(this.startEffectsResolution()), false));
216
241
  }
217
242
  else {
218
243
  var pendingRule = this.remind(Memory_1.Memory.PendingRule);
219
244
  if (pendingRule) {
220
- var id = pendingRule.id, player = pendingRule.player;
221
245
  this.forget(Memory_1.Memory.PendingRule);
222
- switch (id) {
223
- case RuleId_1.RuleId.EndGame:
224
- return [this.endGame()];
225
- default:
226
- return [player === ((_a = this.game.rule) === null || _a === void 0 ? void 0 : _a.player) ? this.startRule(RuleId_1.RuleId.PlaceCards) : this.startPlayerTurn(RuleId_1.RuleId.PlaceCards, player)];
246
+ if (pendingRule.id === RuleId_1.RuleId.EndGame) {
247
+ moves.push(this.endGame());
248
+ }
249
+ else {
250
+ moves.push(this.startPlayerTurn(RuleId_1.RuleId.PlaceCards, pendingRule.player));
227
251
  }
228
252
  }
229
253
  }
230
254
  }
231
- return _super.prototype.onCustomMove.call(this, move);
255
+ return moves;
232
256
  };
233
257
  MythologiesRules.prototype.getAutomaticMoves = function () {
234
258
  var _a;
@@ -44,8 +44,8 @@ export declare enum Entity {
44
44
  Vetala = 39,
45
45
  Kinnara = 40,
46
46
  Viracocha = 41,
47
- MamaQucha = 42,
48
- Illapa = 43,
47
+ Illapa = 42,
48
+ MamaQucha = 43,
49
49
  Inti = 44,
50
50
  Puma = 45,
51
51
  Amaru = 46,
@@ -44,8 +44,8 @@ var Entity;
44
44
  Entity[Entity["Vetala"] = 39] = "Vetala";
45
45
  Entity[Entity["Kinnara"] = 40] = "Kinnara";
46
46
  Entity[Entity["Viracocha"] = 41] = "Viracocha";
47
- Entity[Entity["MamaQucha"] = 42] = "MamaQucha";
48
- Entity[Entity["Illapa"] = 43] = "Illapa";
47
+ Entity[Entity["Illapa"] = 42] = "Illapa";
48
+ Entity[Entity["MamaQucha"] = 43] = "MamaQucha";
49
49
  Entity[Entity["Inti"] = 44] = "Inti";
50
50
  Entity[Entity["Puma"] = 45] = "Puma";
51
51
  Entity[Entity["Amaru"] = 46] = "Amaru";
@@ -22,6 +22,7 @@ export declare enum LocationType {
22
22
  PlayerFavor = 21,
23
23
  PlayerDiscard = 22,
24
24
  PlayerBufferArea = 23,
25
- GameHelpArea = 24
25
+ GameHelpArea = 24,
26
+ CardsCount = 25
26
27
  }
27
28
  export declare const isInSanctuary: (type?: LocationType) => boolean;
@@ -27,6 +27,7 @@ var LocationType;
27
27
  LocationType[LocationType["PlayerDiscard"] = 22] = "PlayerDiscard";
28
28
  LocationType[LocationType["PlayerBufferArea"] = 23] = "PlayerBufferArea";
29
29
  LocationType[LocationType["GameHelpArea"] = 24] = "GameHelpArea";
30
+ LocationType[LocationType["CardsCount"] = 25] = "CardsCount";
30
31
  })(LocationType = exports.LocationType || (exports.LocationType = {}));
31
32
  var isInSanctuary = function (type) { return type === LocationType.SanctuaryCreatureSpot || type === LocationType.SanctuaryGodSpot; };
32
33
  exports.isInSanctuary = isInSanctuary;
@@ -37,6 +37,7 @@ export declare class Pantheon extends MaterialRulesPart {
37
37
  getInvokeGains(entity: Entity, line: number): MaterialMove<number, number, number, number>[];
38
38
  hasEntity(entity: Entity): boolean;
39
39
  getPiles(predicate?: (space: XYCoordinates) => boolean): Material[];
40
+ getPile({ x, y }: XYCoordinates, fullPantheon?: Material<number, number, number>): Material;
40
41
  isAbleToMove(entity: EntityItem): boolean;
41
42
  get mythologies(): import("./Mythology").Mythology[];
42
43
  get missingMythologies(): import("./Mythology").Mythology[];
@@ -209,7 +209,7 @@ var Pantheon = (function (_super) {
209
209
  grid[move.location.y][move.location.x] = move.itemIndex;
210
210
  moves.push.apply(moves, __spreadArray([], __read(this.gainBonus(grid)), false));
211
211
  var triggerEffectsRule = new TriggerEffectsRule_1.TriggerEffectsRule(this.game);
212
- triggerEffectsRule.triggerCardEffect(card, { type: Effect_1.TriggerEventType.SelfPlaced, location: location });
212
+ triggerEffectsRule.triggerCardEffect(move.itemIndex, location, { type: Effect_1.TriggerEventType.SelfPlaced });
213
213
  var triggerEvents = this.updateGrid(grid);
214
214
  var invoked = this.isInvoke;
215
215
  if (invoked) {
@@ -402,24 +402,23 @@ var Pantheon = (function (_super) {
402
402
  var piles = [];
403
403
  var myEntities = this.material(MaterialType_1.MaterialType.EntityCard).player(this.player);
404
404
  var fullPantheon = myEntities.location(LocationType_1.LocationType.Pantheon);
405
- var _loop_4 = function (x) {
406
- var _loop_5 = function (y) {
405
+ for (var x = 0; x < 3; x++) {
406
+ for (var y = 0; y < 3; y++) {
407
407
  if (predicate({ x: x, y: y })) {
408
- var pile = fullPantheon.location(function (l) { return l.x === x && l.y === y; }).sort(function (item) { return item.location.z; });
408
+ var pile = this.getPile({ x: x, y: y }, fullPantheon);
409
409
  if (pile.length > 0) {
410
410
  piles.push(pile);
411
411
  }
412
412
  }
413
- };
414
- for (var y = 0; y < 3; y++) {
415
- _loop_5(y);
416
413
  }
417
- };
418
- for (var x = 0; x < 3; x++) {
419
- _loop_4(x);
420
414
  }
421
415
  return piles;
422
416
  };
417
+ Pantheon.prototype.getPile = function (_a, fullPantheon) {
418
+ var x = _a.x, y = _a.y;
419
+ if (fullPantheon === void 0) { fullPantheon = this.material(MaterialType_1.MaterialType.EntityCard).location(LocationType_1.LocationType.Pantheon).player(this.player); }
420
+ return fullPantheon.location(function (l) { return l.x === x && l.y === y; }).sort(function (item) { return item.location.z; });
421
+ };
423
422
  Pantheon.prototype.isAbleToMove = function (entity) {
424
423
  return new PermanentEffectsRule_1.PermanentEffectsRule(this.game).canMove(entity);
425
424
  };
@@ -439,8 +438,13 @@ var Pantheon = (function (_super) {
439
438
  });
440
439
  Pantheon.prototype.onEntitySacrificed = function (card) {
441
440
  var _a;
442
- var effects = this.updateGrid();
443
- effects.push({ type: Effect_1.TriggerEventType.EntitySacrificed, card: card.getItem(), cardIndex: card.getIndex() });
441
+ var item = card.getItem();
442
+ var _b = item.location, x = _b.x, y = _b.y, z = _b.z;
443
+ var grid = this.indexGrid;
444
+ var cardUnder = this.allCards.location(function (l) { return l.x === x && l.y === y && l.z !== z; }).maxBy(function (item) { return item.location.z; });
445
+ grid[y][x] = cardUnder.length ? cardUnder.getIndex() : null;
446
+ var effects = this.updateGrid(grid);
447
+ effects.push({ type: Effect_1.TriggerEventType.EntitySacrificed, card: item, cardIndex: card.getIndex() });
444
448
  (_a = new TriggerEffectsRule_1.TriggerEffectsRule(this.game)).triggerEffects.apply(_a, __spreadArray([], __read(effects), false));
445
449
  };
446
450
  Pantheon.prototype.hasCrushed = function (card) {
@@ -1,9 +1,14 @@
1
- import { Location, Material, MaterialGame, MaterialMove, MaterialRulesPart, PlayerTurnRule, SimultaneousRule, XYCoordinates } from '@gamepark/rules-api';
1
+ import { Location, MaterialGame, MaterialMove, MaterialRulesPart, PlayerTurnRule, SimultaneousRule, XYCoordinates } from '@gamepark/rules-api';
2
2
  import { PlayerColor } from '../../PlayerColor';
3
3
  import { RuleId } from '../../rules/RuleId';
4
4
  import { Entity, EntityId, EntityItem } from '../Entity';
5
+ export type TriggerEventContext = {
6
+ cardIndex: number;
7
+ cardLocation: Location;
8
+ game: MaterialGame;
9
+ };
5
10
  export type TriggeredEffect = {
6
- trigger: (event: TriggerEvent, card: Material, game: MaterialGame) => boolean;
11
+ trigger: (event: TriggerEvent, context: TriggerEventContext) => boolean;
7
12
  rule: new (game: MaterialGame) => EffectRule;
8
13
  auto?: boolean;
9
14
  };
@@ -60,7 +65,6 @@ export declare enum TriggerEventType {
60
65
  }
61
66
  export type SelfPlaced = {
62
67
  type: TriggerEventType.SelfPlaced;
63
- location: Location;
64
68
  };
65
69
  export type EndOfGameEvent = {
66
70
  type: TriggerEventType.EndOfGame;
@@ -99,13 +103,13 @@ export type EntityCrushed = {
99
103
  card: EntityItem;
100
104
  cardIndex: number;
101
105
  };
102
- export declare const isCrushed: (event: TriggerEvent, card: Material) => event is EntityCrushed;
106
+ export declare const isCrushed: (event: TriggerEvent, { cardIndex }: TriggerEventContext) => event is EntityCrushed;
103
107
  export type EntitySacrificed = {
104
108
  type: TriggerEventType.EntitySacrificed;
105
109
  card: EntityItem;
106
110
  cardIndex: number;
107
111
  };
108
- export declare const isSacrificed: (event: TriggerEvent, card: Material) => event is EntityCrushed;
112
+ export declare const isSacrificed: (event: TriggerEvent, { cardIndex }: TriggerEventContext) => event is EntityCrushed;
109
113
  export type EntitiesMoved = {
110
114
  type: TriggerEventType.EntitiesMoved;
111
115
  player: PlayerColor;
@@ -115,7 +119,7 @@ export type EndOfTurn = {
115
119
  type: TriggerEventType.EndOfTurn;
116
120
  player: PlayerColor;
117
121
  };
118
- export declare const isEndOfMyTurn: (event: TriggerEvent, card: Material) => event is EndOfTurn;
122
+ export declare const isEndOfMyTurn: (event: TriggerEvent, { cardLocation }: TriggerEventContext) => event is EndOfTurn;
119
123
  export type TriggerEvent = EndOfGameEvent | SelfPlaced | EntityPlaced | LineEvent | ColumnEvent | Infinite | EntityCrushed | EntitySacrificed | EntitiesMoved | EndOfTurn;
120
124
  export type PendingEffect<Event extends TriggerEvent = TriggerEvent> = {
121
125
  cardIndex: number;
@@ -14,6 +14,17 @@ 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 __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
17
28
  Object.defineProperty(exports, "__esModule", { value: true });
18
29
  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
30
  var rules_api_1 = require("@gamepark/rules-api");
@@ -62,12 +73,35 @@ var SimultaneousEffectRule = (function (_super) {
62
73
  return true;
63
74
  };
64
75
  SimultaneousEffectRule.prototype.playEffect = function () {
65
- var players = this.getAffectedPlayers();
66
- return players.length && this.ruleId ? [this.startSimultaneousRule(this.ruleId, players)] : [];
76
+ var e_1, _a;
77
+ var moves = [];
78
+ var playersToActivate = [];
79
+ try {
80
+ for (var _b = __values(this.getAffectedPlayers()), _c = _b.next(); !_c.done; _c = _b.next()) {
81
+ var player = _c.value;
82
+ var legalMoves = this.getActivePlayerLegalMoves(player);
83
+ if (legalMoves.length === 1) {
84
+ moves.push(legalMoves[0]);
85
+ }
86
+ else if (legalMoves.length > 1) {
87
+ playersToActivate.push(player);
88
+ }
89
+ }
90
+ }
91
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
92
+ finally {
93
+ try {
94
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
95
+ }
96
+ finally { if (e_1) throw e_1.error; }
97
+ }
98
+ if (playersToActivate.length > 0 && this.ruleId) {
99
+ moves.push(this.startSimultaneousRule(this.ruleId, playersToActivate));
100
+ }
101
+ return moves;
67
102
  };
68
103
  SimultaneousEffectRule.prototype.getAffectedPlayers = function () {
69
- var _this = this;
70
- return this.game.players.filter(function (player) { return _this.getActivePlayerLegalMoves(player).length > 0; });
104
+ return this.game.players;
71
105
  };
72
106
  SimultaneousEffectRule.prototype.isOpponent = function (player) {
73
107
  return player !== this.card.location.player;
@@ -141,13 +175,18 @@ var LineEventType;
141
175
  })(LineEventType = exports.LineEventType || (exports.LineEventType = {}));
142
176
  var oncePerTurn = function (event) { return event.type === TriggerEventType.Infinite; };
143
177
  exports.oncePerTurn = oncePerTurn;
144
- var isCrushed = function (event, card) {
145
- return event.type === TriggerEventType.EntityCrushed && event.cardIndex === card.getIndex();
178
+ var isCrushed = function (event, _a) {
179
+ var cardIndex = _a.cardIndex;
180
+ return event.type === TriggerEventType.EntityCrushed && event.cardIndex === cardIndex;
146
181
  };
147
182
  exports.isCrushed = isCrushed;
148
- var isSacrificed = function (event, card) {
149
- return event.type === TriggerEventType.EntitySacrificed && event.cardIndex === card.getIndex();
183
+ var isSacrificed = function (event, _a) {
184
+ var cardIndex = _a.cardIndex;
185
+ return event.type === TriggerEventType.EntitySacrificed && event.cardIndex === cardIndex;
150
186
  };
151
187
  exports.isSacrificed = isSacrificed;
152
- var isEndOfMyTurn = function (event, card) { var _a; return event.type === TriggerEventType.EndOfTurn && event.player === ((_a = card.getItem()) === null || _a === void 0 ? void 0 : _a.location.player); };
188
+ var isEndOfMyTurn = function (event, _a) {
189
+ var cardLocation = _a.cardLocation;
190
+ return event.type === TriggerEventType.EndOfTurn && event.player === cardLocation.player;
191
+ };
153
192
  exports.isEndOfMyTurn = isEndOfMyTurn;
@@ -2,7 +2,6 @@ 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[];
6
5
  getActivePlayerLegalMoves(player: PlayerColor): MoveItem<number, number, number>[];
7
6
  getSacrificeToPreventMove(player: PlayerColor): MoveItem<number, number, number>[];
8
7
  getMovementMoves(player: PlayerColor): MoveItem<number, number, number>[];
@@ -64,10 +64,6 @@ var SimultaneousMoveEffectRule = (function (_super) {
64
64
  function SimultaneousMoveEffectRule() {
65
65
  return _super !== null && _super.apply(this, arguments) || this;
66
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
- };
71
67
  SimultaneousMoveEffectRule.prototype.getActivePlayerLegalMoves = function (player) {
72
68
  return this.getMovementMoves(player).concat(this.getSacrificeToPreventMove(player));
73
69
  };
@@ -2,7 +2,6 @@ import { ItemMove, Material, MaterialMove, MoveItem } from '@gamepark/rules-api'
2
2
  import { PlayerColor } from '../../PlayerColor';
3
3
  import { SimultaneousEffectRule } from './Effect';
4
4
  export declare abstract class SimultaneousSacrificeEffectRule extends SimultaneousEffectRule {
5
- getAffectedPlayers(): PlayerColor[];
6
5
  getActivePlayerLegalMoves(player: PlayerColor): MaterialMove[];
7
6
  private getCardsAbleToSacrifice;
8
7
  getCardsToSacrifice(player: PlayerColor): Material;
@@ -27,10 +27,6 @@ var SimultaneousSacrificeEffectRule = (function (_super) {
27
27
  function SimultaneousSacrificeEffectRule() {
28
28
  return _super !== null && _super.apply(this, arguments) || this;
29
29
  }
30
- SimultaneousSacrificeEffectRule.prototype.getAffectedPlayers = function () {
31
- var _this = this;
32
- return this.game.players.filter(function (player) { return _this.getCardsToSacrifice(player).length; });
33
- };
34
30
  SimultaneousSacrificeEffectRule.prototype.getActivePlayerLegalMoves = function (player) {
35
31
  var cards = this.getCardsAbleToSacrifice(player);
36
32
  var moves = cards.moveItems({ type: LocationType_1.LocationType.PlayerDiscard, player: player });
@@ -31,10 +31,10 @@ exports.Banshee = {
31
31
  var moves = [];
32
32
  var _a = this.card.location, x = _a.x, y = _a.y, player = _a.player;
33
33
  var pantheon = new Pantheon_1.Pantheon(this.game, player);
34
- if (pantheon.grid[y].every(function (entity, column) { return column !== x || !entity; })) {
34
+ if (pantheon.grid[y].every(function (entity, column) { return column === x || !entity; })) {
35
35
  moves.push(pantheon.gainFavor(1));
36
36
  }
37
- if (pantheon.grid.every(function (line, lineY) { return lineY !== y || !line[x]; })) {
37
+ if (pantheon.grid.every(function (line, lineY) { return lineY === y || !line[x]; })) {
38
38
  moves.push(pantheon.gainGems(1));
39
39
  }
40
40
  return moves;
@@ -21,8 +21,9 @@ var Effect_1 = require("../Effect");
21
21
  exports.Dagda = {
22
22
  invoke: [{ gem: 2, favor: 1 }, { favor: 2 }, {}],
23
23
  effect: {
24
- trigger: function (event, dagda, game) {
25
- var player = dagda.getItem().location.player;
24
+ trigger: function (event, _a) {
25
+ var cardLocation = _a.cardLocation, game = _a.game;
26
+ var player = cardLocation.player;
26
27
  switch (event.type) {
27
28
  case Effect_1.TriggerEventType.EntitySacrificed:
28
29
  case Effect_1.TriggerEventType.EntityCrushed:
@@ -22,11 +22,9 @@ var Effect_1 = require("../Effect");
22
22
  exports.ChangE = {
23
23
  invoke: [{ gem: 1, favor: 2 }, { gem: 2 }, {}],
24
24
  effect: {
25
- trigger: function (event, card) {
26
- return (event.type === Effect_1.TriggerEventType.EntityPlaced &&
27
- event.invoked &&
28
- card.getItem().location.player !== event.location.player &&
29
- card.getItem().location.y === event.location.y);
25
+ trigger: function (event, _a) {
26
+ var cardLocation = _a.cardLocation;
27
+ return event.type === Effect_1.TriggerEventType.EntityPlaced && event.invoked && cardLocation.player !== event.location.player && cardLocation.y === event.location.y;
30
28
  },
31
29
  rule: (function (_super) {
32
30
  __extends(ChangeEEffectRule, _super);
@@ -7,7 +7,9 @@ var Effect_1 = require("../Effect");
7
7
  exports.Fenghuang = {
8
8
  invoke: [{ favor: 1 }, {}, { gem: 1 }],
9
9
  effect: {
10
- trigger: function (event, card, game) { return ((0, Effect_1.isCrushed)(event, card) || (0, Effect_1.isSacrificed)(event, card)) && new PlaceCardsRule_1.PlaceCardsRule(game).isOncePerTurnAvailable(card.getIndex()); },
10
+ trigger: function (event, context) {
11
+ return ((0, Effect_1.isCrushed)(event, context) || (0, Effect_1.isSacrificed)(event, context)) && new PlaceCardsRule_1.PlaceCardsRule(context.game).isOncePerTurnAvailable(context.cardIndex);
12
+ },
11
13
  rule: FenghuangEffectRule_1.FenghuangEffectRule
12
14
  }
13
15
  };
@@ -21,10 +21,10 @@ var Effect_1 = require("../Effect");
21
21
  exports.Mogwai = {
22
22
  invoke: [{}, { favor: 1 }, { gem: 1 }],
23
23
  effect: {
24
- trigger: function (event, card) {
25
- var mogwai = card.getItem();
26
- return ((event.type === Effect_1.TriggerEventType.LineEvent && event.eventType === Effect_1.LineEventType.Completed && mogwai.location.y === event.y) ||
27
- (event.type === Effect_1.TriggerEventType.ColumnEvent && event.eventType === Effect_1.LineEventType.Completed && mogwai.location.x === event.x));
24
+ trigger: function (event, _a) {
25
+ var cardLocation = _a.cardLocation;
26
+ return (event.type === Effect_1.TriggerEventType.LineEvent && event.eventType === Effect_1.LineEventType.Completed && cardLocation.y === event.y) ||
27
+ (event.type === Effect_1.TriggerEventType.ColumnEvent && event.eventType === Effect_1.LineEventType.Completed && cardLocation.x === event.x);
28
28
  },
29
29
  rule: (function (_super) {
30
30
  __extends(MogwaiEffectRule, _super);
@@ -22,8 +22,9 @@ var Effect_1 = require("../Effect");
22
22
  exports.SunWukong = {
23
23
  invoke: [{ gem: 1 }, { favor: 2 }, { gem: 1 }],
24
24
  effect: {
25
- trigger: function (effect, card, game) {
26
- return effect.type === Effect_1.TriggerEventType.EntitiesMoved && (0, rules_api_1.areNeighbors)(effect.player, card.getItem().location.player, game.players);
25
+ trigger: function (effect, _a) {
26
+ var cardLocation = _a.cardLocation, game = _a.game;
27
+ return effect.type === Effect_1.TriggerEventType.EntitiesMoved && (0, rules_api_1.areNeighbors)(effect.player, cardLocation.player, game.players);
27
28
  },
28
29
  rule: (function (_super) {
29
30
  __extends(SunWukongEffectRule, _super);
@@ -22,8 +22,9 @@ var Effect_1 = require("../Effect");
22
22
  exports.Isis = {
23
23
  invoke: [{ gem: 2 }, { gem: 2, favor: 1 }, {}],
24
24
  effect: {
25
- trigger: function (event, card, game) {
26
- return event.type === Effect_1.TriggerEventType.EntityCrushed && (0, rules_api_1.areNeighbors)(card.getItem().location.player, event.card.location.player, game.players);
25
+ trigger: function (event, _a) {
26
+ var cardLocation = _a.cardLocation, game = _a.game;
27
+ return event.type === Effect_1.TriggerEventType.EntityCrushed && (0, rules_api_1.areNeighbors)(cardLocation.player, event.card.location.player, game.players);
27
28
  },
28
29
  rule: (function (_super) {
29
30
  __extends(IsisEffectRule, _super);
@@ -1,23 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Cyclops = void 0;
4
- var Memory_1 = require("../../../Memory");
5
- var MythologiesRules_1 = require("../../../MythologiesRules");
6
4
  var CyclopsEffectRule_1 = require("../../../rules/effects/CyclopsEffectRule");
7
5
  var Effect_1 = require("../Effect");
8
6
  exports.Cyclops = {
9
7
  invoke: [{ favor: 1 }, { gem: 1 }, {}],
10
8
  effect: {
11
- trigger: function (event, card, game) {
12
- var _a;
13
- if (event.type !== Effect_1.TriggerEventType.LineEvent && event.type !== Effect_1.TriggerEventType.ColumnEvent)
14
- return false;
15
- var _b = card.getItem().location, x = _b.x, y = _b.y, player = _b.player;
16
- if (event.eventType !== Effect_1.LineEventType.BonusGain || event.player !== player)
17
- return false;
18
- if ((_a = new MythologiesRules_1.MythologiesRules(game).remind(Memory_1.Memory.OncePerTurn)) === null || _a === void 0 ? void 0 : _a.includes(card.getIndex()))
19
- return false;
20
- return event.type === Effect_1.TriggerEventType.LineEvent ? event.y === y : event.x === x;
9
+ trigger: function (event, _a) {
10
+ var cardLocation = _a.cardLocation, game = _a.game;
11
+ var x = cardLocation.x, y = cardLocation.y, player = cardLocation.player;
12
+ return (((event.type === Effect_1.TriggerEventType.ColumnEvent && event.x === x) || (event.type === Effect_1.TriggerEventType.LineEvent && event.y === y)) &&
13
+ event.eventType === Effect_1.LineEventType.BonusGain &&
14
+ event.player === player &&
15
+ new CyclopsEffectRule_1.CyclopsEffectRule(game).getBonus(event).length > 0);
21
16
  },
22
17
  rule: CyclopsEffectRule_1.CyclopsEffectRule
23
18
  }
@@ -24,8 +24,9 @@ var Effect_1 = require("../Effect");
24
24
  exports.Poseidon = {
25
25
  invoke: [{}, { gem: 2 }, { favor: 1 }],
26
26
  effect: {
27
- trigger: function (event, card) {
28
- return event.type === Effect_1.TriggerEventType.EntityPlaced && event.invoked && (0, Entity_1.isGod)(event.entity) && event.location.player === card.getItem().location.player;
27
+ trigger: function (event, _a) {
28
+ var cardLocation = _a.cardLocation;
29
+ return event.type === Effect_1.TriggerEventType.EntityPlaced && event.invoked && (0, Entity_1.isGod)(event.entity) && event.location.player === cardLocation.player;
29
30
  },
30
31
  rule: (function (_super) {
31
32
  __extends(PoseidonEffectRule, _super);
@@ -21,7 +21,10 @@ var Effect_1 = require("../Effect");
21
21
  exports.Puma = {
22
22
  invoke: [{}, { favor: 1 }, {}],
23
23
  effect: {
24
- trigger: function (event, card) { return event.type === Effect_1.TriggerEventType.EntityCrushed && card.getItem().location.player === event.card.location.player; },
24
+ trigger: function (event, _a) {
25
+ var cardLocation = _a.cardLocation;
26
+ return event.type === Effect_1.TriggerEventType.EntityCrushed && cardLocation.player === event.card.location.player;
27
+ },
25
28
  rule: (function (_super) {
26
29
  __extends(PumaEffectRule, _super);
27
30
  function PumaEffectRule() {
@@ -6,12 +6,12 @@ var Effect_1 = require("../Effect");
6
6
  exports.Ukuku = {
7
7
  invoke: [{ gem: 1 }, { gem: 2 }, {}],
8
8
  effect: {
9
- trigger: function (event, card) {
10
- var ukuku = card.getItem();
9
+ trigger: function (event, _a) {
10
+ var cardLocation = _a.cardLocation;
11
11
  return (event.type === Effect_1.TriggerEventType.LineEvent &&
12
12
  event.eventType === Effect_1.LineEventType.Completed &&
13
- ukuku.location.player === event.player &&
14
- ukuku.location.y === event.y);
13
+ cardLocation.player === event.player &&
14
+ cardLocation.y === event.y);
15
15
  },
16
16
  rule: UkukuEffectRule_1.UkukuEffectRule
17
17
  }
@@ -21,7 +21,10 @@ var Effect_1 = require("../Effect");
21
21
  exports.Inkanyamba = {
22
22
  invoke: [{}, { favor: 1 }, { gem: 1 }],
23
23
  effect: {
24
- trigger: function (effect, card) { return effect.type === Effect_1.TriggerEventType.EntitiesMoved && effect.entities.includes(card.getIndex()); },
24
+ trigger: function (effect, _a) {
25
+ var cardIndex = _a.cardIndex;
26
+ return effect.type === Effect_1.TriggerEventType.EntitiesMoved && effect.entities.includes(cardIndex);
27
+ },
25
28
  rule: (function (_super) {
26
29
  __extends(InkanyambaEffectRule, _super);
27
30
  function InkanyambaEffectRule() {
@@ -2,8 +2,6 @@ import { CustomMove, ItemMove, MaterialMove, PlayerTurnRule } from '@gamepark/ru
2
2
  import { RuleId } from './RuleId';
3
3
  export declare class PlaceCardsRule extends PlayerTurnRule {
4
4
  isInvoke: boolean;
5
- onRuleStart(): import("@gamepark/rules-api").MoveItem<number, number, number>[];
6
- get selectedCards(): import("@gamepark/rules-api").Material<number, number, number>;
7
5
  getPlayerMoves(): MaterialMove<number, number, number, number>[];
8
6
  get infiniteEffects(): import("../material/entity/Effect").PendingEffect<import("../material/entity/Effect").TriggerEvent>[];
9
7
  isOncePerTurnAvailable(cardIndex: number): boolean;
@@ -72,22 +72,12 @@ var PlaceCardsRule = (function (_super) {
72
72
  _this.isInvoke = true;
73
73
  return _this;
74
74
  }
75
- PlaceCardsRule.prototype.onRuleStart = function () {
76
- return this.selectedCards.rotation(function (rotation) { return rotation !== undefined; }).rotateItems(undefined);
77
- };
78
- Object.defineProperty(PlaceCardsRule.prototype, "selectedCards", {
79
- get: function () {
80
- var tokens = this.tokens.getItems();
81
- return this.material(MaterialType_1.MaterialType.EntityCard).index(tokens.map(function (token) { return token.location.parent; }));
82
- },
83
- enumerable: false,
84
- configurable: true
85
- });
86
75
  PlaceCardsRule.prototype.getPlayerMoves = function () {
87
76
  var e_1, _a;
88
77
  var _this = this;
89
78
  var moves = this.infiniteEffects.map(function (effect) { return _this.customMove(CustomMoveType_1.CustomMoveType.PlayEffect, effect); });
90
- var cards = this.selectedCards;
79
+ var tokens = this.tokens.getItems();
80
+ var cards = this.material(MaterialType_1.MaterialType.EntityCard).index(tokens.map(function (token) { return token.location.parent; }));
91
81
  if (cards.length) {
92
82
  var cardsICanInvoke = new Pantheon_1.Pantheon(this.game, this.player).gems < 4 ? cards.id(function (id) { return !(0, Entity_1.isGod)(id.front); }) : cards;
93
83
  try {
@@ -145,9 +135,7 @@ var PlaceCardsRule = (function (_super) {
145
135
  });
146
136
  PlaceCardsRule.prototype.beforeItemMove = function (move) {
147
137
  var moves = [];
148
- if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move) &&
149
- move.location.type !== LocationType_1.LocationType.SanctuaryCreatureSpot &&
150
- move.location.type !== LocationType_1.LocationType.SanctuaryGodSpot) {
138
+ if ((0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.EntityCard)(move)) {
151
139
  var token = this.tokens.parent(move.itemIndex);
152
140
  if (token.length) {
153
141
  moves.push(token.moveItem({ type: LocationType_1.LocationType.PlayerHand, player: this.player }));