@gamepark/greylune 0.1.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 (229) hide show
  1. package/dist/Constants.d.ts +23 -0
  2. package/dist/Constants.d.ts.map +1 -0
  3. package/dist/Constants.js +17 -0
  4. package/dist/Constants.js.map +1 -0
  5. package/dist/GreyluneOptions.d.ts +11 -0
  6. package/dist/GreyluneOptions.d.ts.map +1 -0
  7. package/dist/GreyluneOptions.js +8 -0
  8. package/dist/GreyluneOptions.js.map +1 -0
  9. package/dist/GreyluneRules.d.ts +123 -0
  10. package/dist/GreyluneRules.d.ts.map +1 -0
  11. package/dist/GreyluneRules.js +122 -0
  12. package/dist/GreyluneRules.js.map +1 -0
  13. package/dist/GreyluneSetup.d.ts +18 -0
  14. package/dist/GreyluneSetup.d.ts.map +1 -0
  15. package/dist/GreyluneSetup.js +88 -0
  16. package/dist/GreyluneSetup.js.map +1 -0
  17. package/dist/Memory.d.ts +22 -0
  18. package/dist/Memory.d.ts.map +1 -0
  19. package/dist/Memory.js +23 -0
  20. package/dist/Memory.js.map +1 -0
  21. package/dist/PlayerColor.d.ts +7 -0
  22. package/dist/PlayerColor.d.ts.map +1 -0
  23. package/dist/PlayerColor.js +8 -0
  24. package/dist/PlayerColor.js.map +1 -0
  25. package/dist/Season.d.ts +7 -0
  26. package/dist/Season.d.ts.map +1 -0
  27. package/dist/Season.js +8 -0
  28. package/dist/Season.js.map +1 -0
  29. package/dist/Year.d.ts +8 -0
  30. package/dist/Year.d.ts.map +1 -0
  31. package/dist/Year.js +10 -0
  32. package/dist/Year.js.map +1 -0
  33. package/dist/ai/Evaluation.d.ts +118 -0
  34. package/dist/ai/Evaluation.d.ts.map +1 -0
  35. package/dist/ai/Evaluation.js +1069 -0
  36. package/dist/ai/Evaluation.js.map +1 -0
  37. package/dist/ai/GreyluneAI.d.ts +20 -0
  38. package/dist/ai/GreyluneAI.d.ts.map +1 -0
  39. package/dist/ai/GreyluneAI.js +113 -0
  40. package/dist/ai/GreyluneAI.js.map +1 -0
  41. package/dist/ai/Model.d.ts +38 -0
  42. package/dist/ai/Model.d.ts.map +1 -0
  43. package/dist/ai/Model.js +105 -0
  44. package/dist/ai/Model.js.map +1 -0
  45. package/dist/ai/Simulation.d.ts +13 -0
  46. package/dist/ai/Simulation.d.ts.map +1 -0
  47. package/dist/ai/Simulation.js +20 -0
  48. package/dist/ai/Simulation.js.map +1 -0
  49. package/dist/index.d.ts +5 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +5 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/material/Area.d.ts +9 -0
  54. package/dist/material/Area.d.ts.map +1 -0
  55. package/dist/material/Area.js +10 -0
  56. package/dist/material/Area.js.map +1 -0
  57. package/dist/material/Distance.d.ts +8 -0
  58. package/dist/material/Distance.d.ts.map +1 -0
  59. package/dist/material/Distance.js +9 -0
  60. package/dist/material/Distance.js.map +1 -0
  61. package/dist/material/Effect.d.ts +103 -0
  62. package/dist/material/Effect.d.ts.map +1 -0
  63. package/dist/material/Effect.js +83 -0
  64. package/dist/material/Effect.js.map +1 -0
  65. package/dist/material/EncounterCard.d.ts +61 -0
  66. package/dist/material/EncounterCard.d.ts.map +1 -0
  67. package/dist/material/EncounterCard.js +214 -0
  68. package/dist/material/EncounterCard.js.map +1 -0
  69. package/dist/material/EventTile.d.ts +17 -0
  70. package/dist/material/EventTile.d.ts.map +1 -0
  71. package/dist/material/EventTile.js +52 -0
  72. package/dist/material/EventTile.js.map +1 -0
  73. package/dist/material/LocationType.d.ts +42 -0
  74. package/dist/material/LocationType.d.ts.map +1 -0
  75. package/dist/material/LocationType.js +43 -0
  76. package/dist/material/LocationType.js.map +1 -0
  77. package/dist/material/MaterialSource.d.ts +8 -0
  78. package/dist/material/MaterialSource.d.ts.map +1 -0
  79. package/dist/material/MaterialSource.js +2 -0
  80. package/dist/material/MaterialSource.js.map +1 -0
  81. package/dist/material/MaterialType.d.ts +23 -0
  82. package/dist/material/MaterialType.d.ts.map +1 -0
  83. package/dist/material/MaterialType.js +24 -0
  84. package/dist/material/MaterialType.js.map +1 -0
  85. package/dist/material/Period.d.ts +6 -0
  86. package/dist/material/Period.d.ts.map +1 -0
  87. package/dist/material/Period.js +7 -0
  88. package/dist/material/Period.js.map +1 -0
  89. package/dist/material/PlayerState.d.ts +34 -0
  90. package/dist/material/PlayerState.d.ts.map +1 -0
  91. package/dist/material/PlayerState.js +106 -0
  92. package/dist/material/PlayerState.js.map +1 -0
  93. package/dist/material/QuestTile.d.ts +21 -0
  94. package/dist/material/QuestTile.d.ts.map +1 -0
  95. package/dist/material/QuestTile.js +32 -0
  96. package/dist/material/QuestTile.js.map +1 -0
  97. package/dist/material/Reaction.d.ts +49 -0
  98. package/dist/material/Reaction.d.ts.map +1 -0
  99. package/dist/material/Reaction.js +37 -0
  100. package/dist/material/Reaction.js.map +1 -0
  101. package/dist/material/Tokens.d.ts +29 -0
  102. package/dist/material/Tokens.d.ts.map +1 -0
  103. package/dist/material/Tokens.js +46 -0
  104. package/dist/material/Tokens.js.map +1 -0
  105. package/dist/material/Village.d.ts +23 -0
  106. package/dist/material/Village.d.ts.map +1 -0
  107. package/dist/material/Village.js +29 -0
  108. package/dist/material/Village.js.map +1 -0
  109. package/dist/material/VillageCard.d.ts +90 -0
  110. package/dist/material/VillageCard.d.ts.map +1 -0
  111. package/dist/material/VillageCard.js +359 -0
  112. package/dist/material/VillageCard.js.map +1 -0
  113. package/dist/material/Villager.d.ts +8 -0
  114. package/dist/material/Villager.d.ts.map +1 -0
  115. package/dist/material/Villager.js +7 -0
  116. package/dist/material/Villager.js.map +1 -0
  117. package/dist/material/VpToken.d.ts +10 -0
  118. package/dist/material/VpToken.d.ts.map +1 -0
  119. package/dist/material/VpToken.js +9 -0
  120. package/dist/material/VpToken.js.map +1 -0
  121. package/dist/rules/ActivateCardRule.d.ts +43 -0
  122. package/dist/rules/ActivateCardRule.d.ts.map +1 -0
  123. package/dist/rules/ActivateCardRule.js +183 -0
  124. package/dist/rules/ActivateCardRule.js.map +1 -0
  125. package/dist/rules/AutumnRule.d.ts +9 -0
  126. package/dist/rules/AutumnRule.d.ts.map +1 -0
  127. package/dist/rules/AutumnRule.js +42 -0
  128. package/dist/rules/AutumnRule.js.map +1 -0
  129. package/dist/rules/BonusTokenRule.d.ts +10 -0
  130. package/dist/rules/BonusTokenRule.d.ts.map +1 -0
  131. package/dist/rules/BonusTokenRule.js +20 -0
  132. package/dist/rules/BonusTokenRule.js.map +1 -0
  133. package/dist/rules/ChooseOutcomeRule.d.ts +9 -0
  134. package/dist/rules/ChooseOutcomeRule.d.ts.map +1 -0
  135. package/dist/rules/ChooseOutcomeRule.js +18 -0
  136. package/dist/rules/ChooseOutcomeRule.js.map +1 -0
  137. package/dist/rules/ChooseSkillRule.d.ts +10 -0
  138. package/dist/rules/ChooseSkillRule.d.ts.map +1 -0
  139. package/dist/rules/ChooseSkillRule.js +20 -0
  140. package/dist/rules/ChooseSkillRule.js.map +1 -0
  141. package/dist/rules/CustomMoveType.d.ts +17 -0
  142. package/dist/rules/CustomMoveType.d.ts.map +1 -0
  143. package/dist/rules/CustomMoveType.js +18 -0
  144. package/dist/rules/CustomMoveType.js.map +1 -0
  145. package/dist/rules/DiscardItemRule.d.ts +9 -0
  146. package/dist/rules/DiscardItemRule.d.ts.map +1 -0
  147. package/dist/rules/DiscardItemRule.js +19 -0
  148. package/dist/rules/DiscardItemRule.js.map +1 -0
  149. package/dist/rules/EncounterRule.d.ts +26 -0
  150. package/dist/rules/EncounterRule.d.ts.map +1 -0
  151. package/dist/rules/EncounterRule.js +75 -0
  152. package/dist/rules/EncounterRule.js.map +1 -0
  153. package/dist/rules/EventRule.d.ts +13 -0
  154. package/dist/rules/EventRule.d.ts.map +1 -0
  155. package/dist/rules/EventRule.js +39 -0
  156. package/dist/rules/EventRule.js.map +1 -0
  157. package/dist/rules/FinalScoringRule.d.ts +18 -0
  158. package/dist/rules/FinalScoringRule.d.ts.map +1 -0
  159. package/dist/rules/FinalScoringRule.js +30 -0
  160. package/dist/rules/FinalScoringRule.js.map +1 -0
  161. package/dist/rules/GreyluneRule.d.ts +87 -0
  162. package/dist/rules/GreyluneRule.d.ts.map +1 -0
  163. package/dist/rules/GreyluneRule.js +432 -0
  164. package/dist/rules/GreyluneRule.js.map +1 -0
  165. package/dist/rules/PlaceVillagerRule.d.ts +10 -0
  166. package/dist/rules/PlaceVillagerRule.d.ts.map +1 -0
  167. package/dist/rules/PlaceVillagerRule.js +17 -0
  168. package/dist/rules/PlaceVillagerRule.js.map +1 -0
  169. package/dist/rules/ReactionRule.d.ts +17 -0
  170. package/dist/rules/ReactionRule.d.ts.map +1 -0
  171. package/dist/rules/ReactionRule.js +48 -0
  172. package/dist/rules/ReactionRule.js.map +1 -0
  173. package/dist/rules/ResolveEffectsRule.d.ts +12 -0
  174. package/dist/rules/ResolveEffectsRule.d.ts.map +1 -0
  175. package/dist/rules/ResolveEffectsRule.js +85 -0
  176. package/dist/rules/ResolveEffectsRule.js.map +1 -0
  177. package/dist/rules/ResolveEncounterRule.d.ts +19 -0
  178. package/dist/rules/ResolveEncounterRule.d.ts.map +1 -0
  179. package/dist/rules/ResolveEncounterRule.js +86 -0
  180. package/dist/rules/ResolveEncounterRule.js.map +1 -0
  181. package/dist/rules/ResolveQuestRule.d.ts +17 -0
  182. package/dist/rules/ResolveQuestRule.d.ts.map +1 -0
  183. package/dist/rules/ResolveQuestRule.js +64 -0
  184. package/dist/rules/ResolveQuestRule.js.map +1 -0
  185. package/dist/rules/RuleId.d.ts +27 -0
  186. package/dist/rules/RuleId.d.ts.map +1 -0
  187. package/dist/rules/RuleId.js +28 -0
  188. package/dist/rules/RuleId.js.map +1 -0
  189. package/dist/rules/SeasonRule.d.ts +11 -0
  190. package/dist/rules/SeasonRule.d.ts.map +1 -0
  191. package/dist/rules/SeasonRule.js +32 -0
  192. package/dist/rules/SeasonRule.js.map +1 -0
  193. package/dist/rules/SpecialActionRule.d.ts +15 -0
  194. package/dist/rules/SpecialActionRule.d.ts.map +1 -0
  195. package/dist/rules/SpecialActionRule.js +32 -0
  196. package/dist/rules/SpecialActionRule.js.map +1 -0
  197. package/dist/rules/SpringRule.d.ts +7 -0
  198. package/dist/rules/SpringRule.d.ts.map +1 -0
  199. package/dist/rules/SpringRule.js +16 -0
  200. package/dist/rules/SpringRule.js.map +1 -0
  201. package/dist/rules/StraightenCardRule.d.ts +9 -0
  202. package/dist/rules/StraightenCardRule.d.ts.map +1 -0
  203. package/dist/rules/StraightenCardRule.js +11 -0
  204. package/dist/rules/StraightenCardRule.js.map +1 -0
  205. package/dist/rules/SummerRule.d.ts +30 -0
  206. package/dist/rules/SummerRule.d.ts.map +1 -0
  207. package/dist/rules/SummerRule.js +140 -0
  208. package/dist/rules/SummerRule.js.map +1 -0
  209. package/dist/rules/TellStoryRule.d.ts +22 -0
  210. package/dist/rules/TellStoryRule.d.ts.map +1 -0
  211. package/dist/rules/TellStoryRule.js +72 -0
  212. package/dist/rules/TellStoryRule.js.map +1 -0
  213. package/dist/rules/TheFirstStepRule.d.ts +5 -0
  214. package/dist/rules/TheFirstStepRule.d.ts.map +1 -0
  215. package/dist/rules/TheFirstStepRule.js +7 -0
  216. package/dist/rules/TheFirstStepRule.js.map +1 -0
  217. package/dist/rules/TravelRule.d.ts +13 -0
  218. package/dist/rules/TravelRule.d.ts.map +1 -0
  219. package/dist/rules/TravelRule.js +41 -0
  220. package/dist/rules/TravelRule.js.map +1 -0
  221. package/dist/rules/UseItemRule.d.ts +6 -0
  222. package/dist/rules/UseItemRule.d.ts.map +1 -0
  223. package/dist/rules/UseItemRule.js +35 -0
  224. package/dist/rules/UseItemRule.js.map +1 -0
  225. package/dist/rules/WinterRule.d.ts +24 -0
  226. package/dist/rules/WinterRule.d.ts.map +1 -0
  227. package/dist/rules/WinterRule.js +112 -0
  228. package/dist/rules/WinterRule.js.map +1 -0
  229. package/package.json +39 -0
@@ -0,0 +1,183 @@
1
+ import { isCustomMoveType, isMoveItemType } from '@gamepark/rules-api';
2
+ import { Memory } from '../Memory';
3
+ import { RequirementType, usesSeal, vp } from '../material/Effect';
4
+ import { LocationType } from '../material/LocationType';
5
+ import { MaterialType } from '../material/MaterialType';
6
+ import { itemLimit, playerItems } from '../material/PlayerState';
7
+ import { ReactionType, TriggerType } from '../material/Reaction';
8
+ import { Seal } from '../material/Tokens';
9
+ import { villagersAroundSlot } from '../material/Village';
10
+ import { activationTriggers, getVillageCardType, VillageCardType, villageCardData } from '../material/VillageCard';
11
+ import { CustomMoveType } from './CustomMoveType';
12
+ import { GreyluneRule } from './GreyluneRule';
13
+ import { RuleId } from './RuleId';
14
+ export class ActivateCardRule extends GreyluneRule {
15
+ get card() {
16
+ return this.remind(Memory.ActivatedCard);
17
+ }
18
+ get front() {
19
+ return this.villageCards.getItem(this.card).id.front;
20
+ }
21
+ get data() {
22
+ return villageCardData[this.front];
23
+ }
24
+ get villager() {
25
+ return this.remind(Memory.SpentVillager);
26
+ }
27
+ get seals() {
28
+ return this.material(MaterialType.Seal).location(LocationType.CardSeal).parent(this.card);
29
+ }
30
+ get crowd() {
31
+ const location = this.villageCards.getItem(this.card).location;
32
+ return Math.max(0, villagersAroundSlot(this, { x: location.x ?? 0, y: location.y ?? 0 }).length - 1);
33
+ }
34
+ get surcharge() {
35
+ return this.costReduction.noSurcharge ? 0 : this.crowd;
36
+ }
37
+ get price() {
38
+ return Math.max(0, this.data.cost - (this.costReduction.coins ?? 0) + this.surcharge);
39
+ }
40
+ get triggers() {
41
+ return activationTriggers(this.front).filter((trigger) => trigger !== TriggerType.ActivateSeal && (trigger !== TriggerType.PaySurcharge || this.surcharge > 0));
42
+ }
43
+ get isBuilding() {
44
+ return getVillageCardType(this.front) === VillageCardType.Building;
45
+ }
46
+ get sealAbility() {
47
+ return this.isBuilding ? (this.data.abilities ?? []).findIndex((ability) => usesSeal(ability.requirements)) : -1;
48
+ }
49
+ get sealSpent() {
50
+ return this.remind(Memory.SealValue) !== undefined;
51
+ }
52
+ onRuleStart() {
53
+ if (this.sealSpent)
54
+ return this.costReduction.freeSealValue ? this.onlyValue() : this.activate({ ability: this.sealAbility });
55
+ const moves = this.abilityMoves();
56
+ return moves.length === 1 ? moves : [];
57
+ }
58
+ getPlayerMoves() {
59
+ if (this.sealSpent)
60
+ return this.costReduction.freeSealValue ? this.sealValueMoves() : [];
61
+ return this.abilityMoves();
62
+ }
63
+ get outOfReach() {
64
+ return !this.sealSpent && this.abilityMoves().length === 0;
65
+ }
66
+ abilityMoves() {
67
+ if (this.coins < this.price)
68
+ return [];
69
+ if (!this.isBuilding) {
70
+ return this.purchaseVariants().map((variant) => this.customMove(CustomMoveType.ChooseAbility, variant));
71
+ }
72
+ return (this.data.abilities ?? []).flatMap((ability, index) => {
73
+ if (!this.canPay(ability.requirements) || !this.canReceive(ability.gains))
74
+ return [];
75
+ if (index === this.sealAbility)
76
+ return this.sealMoves();
77
+ return [this.customMove(CustomMoveType.ChooseAbility, { ability: index })];
78
+ });
79
+ }
80
+ sealMoves() {
81
+ const selia = this.reactionChoices([TriggerType.ActivateSeal]).length > 0 && this.canPaySealAt(Seal.One);
82
+ return this.seals
83
+ .filter((item) => selia || this.canPaySealAt(item.id))
84
+ .moveItems({ type: LocationType.SealDiscard });
85
+ }
86
+ canPaySealAt(value) {
87
+ const requirements = this.data.abilities?.[this.sealAbility]?.requirements ?? [];
88
+ const needsCoins = requirements.some((requirement) => requirement.type === RequirementType.SealCoins);
89
+ return !needsCoins || this.coins - this.price >= value;
90
+ }
91
+ sealValueMoves() {
92
+ return [Seal.One, Seal.Two, Seal.Three]
93
+ .filter((value) => this.canPaySealAt(value))
94
+ .map((value) => this.customMove(CustomMoveType.ChooseAbility, { ability: this.sealAbility, value }));
95
+ }
96
+ onlyValue() {
97
+ const moves = this.sealValueMoves();
98
+ return moves.length === 1 ? moves : [];
99
+ }
100
+ purchaseVariants() {
101
+ if (!usesSeal(this.data.immediate?.requirements))
102
+ return [{}];
103
+ return this.seals
104
+ .limit(1)
105
+ .getIndexes()
106
+ .map((seal) => ({ seal, value: this.material(MaterialType.Seal).getItem(seal).id }));
107
+ }
108
+ helps(card, option) {
109
+ const effect = this.reactionEffect(card, option);
110
+ switch (effect.type) {
111
+ case ReactionType.NoSurcharge:
112
+ case ReactionType.CheaperItem:
113
+ return this.coins < this.price;
114
+ case ReactionType.ReduceForceCost:
115
+ return this.blockedBy(RequirementType.SpendForce);
116
+ case ReactionType.ReduceVillagerCost:
117
+ return this.blockedBy(RequirementType.SpendVillagers);
118
+ default:
119
+ return false;
120
+ }
121
+ }
122
+ blockedBy(type) {
123
+ return (this.data.abilities ?? []).some((ability) => !this.canPay(ability.requirements) && (ability.requirements ?? []).some((requirement) => requirement.type === type));
124
+ }
125
+ onCustomMove(move) {
126
+ if (isCustomMoveType(CustomMoveType.ChooseAbility)(move))
127
+ return this.activate(move.data);
128
+ return super.onCustomMove(move);
129
+ }
130
+ afterItemMove(move) {
131
+ if (isMoveItemType(MaterialType.VillageCard)(move) && move.itemIndex === this.card)
132
+ return this.afterTake();
133
+ if (!isMoveItemType(MaterialType.Seal)(move) || move.location.type !== LocationType.SealDiscard || !this.isBuilding)
134
+ return [];
135
+ const value = this.material(MaterialType.Seal).getItem(move.itemIndex).id;
136
+ this.memorize(Memory.SealValue, value);
137
+ const selia = this.reactionChoices([TriggerType.ActivateSeal]);
138
+ if (!this.canPaySealAt(value))
139
+ return [...this.useReaction(selia[0].card, selia[0].option), ...this.onlyValue()];
140
+ if (!selia.length)
141
+ return this.activate({ ability: this.sealAbility });
142
+ return this.openReactions([TriggerType.ActivateSeal], RuleId.ActivateCard);
143
+ }
144
+ activate(data) {
145
+ if (data.value !== undefined)
146
+ this.memorize(Memory.SealValue, data.value);
147
+ const requirements = this.isBuilding ? (this.data.abilities[data.ability].requirements ?? []) : [];
148
+ const moves = [
149
+ ...this.payCoins(this.price + this.coinCost(requirements)),
150
+ this.villagers.index(this.villager).moveItem({ type: LocationType.Camp }),
151
+ ...(data.seal !== undefined ? [this.material(MaterialType.Seal).index(data.seal).moveItem({ type: LocationType.SealDiscard })] : [])
152
+ ];
153
+ return this.isBuilding ? [...moves, ...this.exploit(data.ability, requirements)] : [...moves, ...this.take()];
154
+ }
155
+ exploit(ability, requirements) {
156
+ this.pushGains(this.data.abilities[ability].gains ?? []);
157
+ return [...this.payRequirements(requirements.filter((requirement) => !isCoinCost(requirement))), ...this.endOfAction()];
158
+ }
159
+ take() {
160
+ const isItem = getVillageCardType(this.front) === VillageCardType.Item;
161
+ const gains = [...(this.data.immediate?.gains ?? [])];
162
+ if (isItem && this.costReduction.itemVp)
163
+ gains.push(vp(this.costReduction.itemVp));
164
+ this.pushGains(gains);
165
+ return [
166
+ ...this.payRequirements(this.data.immediate?.requirements),
167
+ this.villageCards.index(this.card).moveItem({
168
+ type: isItem ? LocationType.Items : LocationType.Companions,
169
+ player: this.player,
170
+ rotation: false
171
+ })
172
+ ];
173
+ }
174
+ afterTake() {
175
+ if (playerItems(this, this.player).length > itemLimit(this, this.player)) {
176
+ this.memorize(Memory.Resume, RuleId.ResolveEffects);
177
+ return [this.startRule(RuleId.DiscardItem)];
178
+ }
179
+ return this.endOfAction();
180
+ }
181
+ }
182
+ const isCoinCost = (requirement) => requirement.type === RequirementType.SpendCoins || requirement.type === RequirementType.SealCoins;
183
+ //# sourceMappingURL=ActivateCardRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivateCardRule.js","sourceRoot":"","sources":["../../src/rules/ActivateCardRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Gain } from '../material/Effect';
2
+ import { GreyluneMove, GreyluneRule } from './GreyluneRule';
3
+ export declare class AutumnRule extends GreyluneRule {
4
+ onRuleStart(): GreyluneMove[];
5
+ private comeHome;
6
+ private straightenCards;
7
+ get income(): Gain[];
8
+ }
9
+ //# sourceMappingURL=AutumnRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutumnRule.d.ts","sourceRoot":"","sources":["../../src/rules/AutumnRule.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,IAAI,EAAgB,MAAM,oBAAoB,CAAA;AAK9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAU3D,qBAAa,UAAW,SAAQ,YAAY;IAC1C,WAAW,IAAI,YAAY,EAAE,CAG5B;IAQD,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,eAAe;IASvB,IAAI,MAAM,IAAI,IAAI,EAAE,CAenB;CACF"}
@@ -0,0 +1,42 @@
1
+ import { BASE_INCOME } from '../Constants';
2
+ import { Area } from '../material/Area';
3
+ import { coins, GainType, vp } from '../material/Effect';
4
+ import { LocationType } from '../material/LocationType';
5
+ import { MaterialType } from '../material/MaterialType';
6
+ import { playerCompanions } from '../material/PlayerState';
7
+ import { incomeTokenGains } from '../material/Tokens';
8
+ import { GreyluneRule } from './GreyluneRule';
9
+ export class AutumnRule extends GreyluneRule {
10
+ onRuleStart() {
11
+ this.pushGains(this.income);
12
+ return [...this.comeHome(), ...this.straightenCards(), ...this.endOfAction()];
13
+ }
14
+ comeHome() {
15
+ const travelling = this.adventurer.location((location) => location.id !== Area.Village);
16
+ const away = this.myVillagers.location((location) => location.type !== LocationType.VillagerReserve);
17
+ return [
18
+ ...travelling.moveItems({ type: LocationType.Area, id: Area.Village }),
19
+ ...(away.exists ? [away.moveItemsAtOnce({ type: LocationType.ActiveVillagers, player: this.player })] : [])
20
+ ];
21
+ }
22
+ straightenCards() {
23
+ return this.playerCards.rotation(true).rotateItems(false);
24
+ }
25
+ get income() {
26
+ const wages = Math.max(0, BASE_INCOME - playerCompanions(this, this.player).length);
27
+ const tokens = this.material(MaterialType.IncomeToken)
28
+ .location(LocationType.IncomeTokenSpace)
29
+ .player(this.player)
30
+ .getItems()
31
+ .flatMap((item) => incomeTokenGains[item.id]);
32
+ const total = (type) => tokens.reduce((sum, gain) => (gain.type === type && 'count' in gain ? sum + this.amount(gain.count) : sum), 0);
33
+ const coinTotal = wages + total(GainType.Coins);
34
+ const vpTotal = total(GainType.Vp);
35
+ return [
36
+ ...(coinTotal ? [coins(coinTotal)] : []),
37
+ ...(vpTotal ? [vp(vpTotal)] : []),
38
+ ...tokens.filter((gain) => gain.type !== GainType.Coins && gain.type !== GainType.Vp)
39
+ ];
40
+ }
41
+ }
42
+ //# sourceMappingURL=AutumnRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutumnRule.js","sourceRoot":"","sources":["../../src/rules/AutumnRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ItemMove } from '@gamepark/rules-api';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { GreyluneMove, GreyluneRule } from './GreyluneRule';
5
+ export declare class BonusTokenRule extends GreyluneRule {
6
+ get tokens(): import("@gamepark/rules-api").Material<import("../PlayerColor").PlayerColor, MaterialType, LocationType>;
7
+ getPlayerMoves(): GreyluneMove[];
8
+ beforeItemMove(move: ItemMove): GreyluneMove[];
9
+ }
10
+ //# sourceMappingURL=BonusTokenRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BonusTokenRule.d.ts","sourceRoot":"","sources":["../../src/rules/BonusTokenRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ3D,qBAAa,cAAe,SAAQ,YAAY;IAC9C,IAAI,MAAM,6GAET;IAED,cAAc,IAAI,YAAY,EAAE,CAE/B;IAED,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,CAI7C;CACF"}
@@ -0,0 +1,20 @@
1
+ import { isDeleteItemType } from '@gamepark/rules-api';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { bonusTokenGains } from '../material/Tokens';
5
+ import { GreyluneRule } from './GreyluneRule';
6
+ export class BonusTokenRule extends GreyluneRule {
7
+ get tokens() {
8
+ return this.material(MaterialType.BonusToken).location(LocationType.BonusTokens).player(this.player);
9
+ }
10
+ getPlayerMoves() {
11
+ return this.tokens.deleteItems();
12
+ }
13
+ beforeItemMove(move) {
14
+ if (!isDeleteItemType(MaterialType.BonusToken)(move))
15
+ return [];
16
+ this.pushGains(bonusTokenGains[this.material(MaterialType.BonusToken).getItem(move.itemIndex).id], true);
17
+ return this.endOfAction();
18
+ }
19
+ }
20
+ //# sourceMappingURL=BonusTokenRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BonusTokenRule.js","sourceRoot":"","sources":["../../src/rules/BonusTokenRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAY,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ3D,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC9C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtG,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;IAClC,CAAC;IAED,cAAc,CAAC,IAAc;QAC3B,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QAC/D,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAa,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACpH,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { CustomMove } from '@gamepark/rules-api';
2
+ import { EncounterRule } from './EncounterRule';
3
+ import { GreyluneMove } from './GreyluneRule';
4
+ export declare class ChooseOutcomeRule extends EncounterRule {
5
+ get card(): number;
6
+ getPlayerMoves(): GreyluneMove[];
7
+ onCustomMove(move: CustomMove): GreyluneMove[];
8
+ }
9
+ //# sourceMappingURL=ChooseOutcomeRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseOutcomeRule.d.ts","sourceRoot":"","sources":["../../src/rules/ChooseOutcomeRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,qBAAqB,CAAA;AAGlE,OAAO,EAAE,aAAa,EAAsB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAoB7C,qBAAa,iBAAkB,SAAQ,aAAa;IAElD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,cAAc,IAAI,YAAY,EAAE,CAE/B;IAED,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,EAAE,CAG7C;CACF"}
@@ -0,0 +1,18 @@
1
+ import { isCustomMoveType } from '@gamepark/rules-api';
2
+ import { Memory } from '../Memory';
3
+ import { CustomMoveType } from './CustomMoveType';
4
+ import { EncounterRule } from './EncounterRule';
5
+ export class ChooseOutcomeRule extends EncounterRule {
6
+ get card() {
7
+ return this.remind(Memory.ResolvedEncounter);
8
+ }
9
+ getPlayerMoves() {
10
+ return this.encounterMoves(this.card).map((data) => this.customMove(CustomMoveType.ResolveOutcome, data));
11
+ }
12
+ onCustomMove(move) {
13
+ if (isCustomMoveType(CustomMoveType.ResolveOutcome)(move))
14
+ return this.resolve(move.data);
15
+ return super.onCustomMove(move);
16
+ }
17
+ }
18
+ //# sourceMappingURL=ChooseOutcomeRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseOutcomeRule.js","sourceRoot":"","sources":["../../src/rules/ChooseOutcomeRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAsB,MAAM,iBAAiB,CAAA;AAqBnE,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAElD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAS,MAAM,CAAC,iBAAiB,CAAC,CAAA;IACtD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3G,CAAC;IAED,YAAY,CAAC,IAAgB;QAC3B,IAAI,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAA0B,CAAC,CAAA;QAC/G,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { ItemMove } from '@gamepark/rules-api';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { GreyluneMove, GreyluneRule } from './GreyluneRule';
5
+ export declare class ChooseSkillRule extends GreyluneRule {
6
+ get count(): number;
7
+ getPlayerMoves(): GreyluneMove[];
8
+ afterItemMove(move: ItemMove<number, MaterialType, LocationType>): GreyluneMove[];
9
+ }
10
+ //# sourceMappingURL=ChooseSkillRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseSkillRule.d.ts","sourceRoot":"","sources":["../../src/rules/ChooseSkillRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAA;AAQxE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,IAAI,KAAK,IAAI,MAAM,CAGlB;IAED,cAAc,IAAI,YAAY,EAAE,CAE/B;IAED,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,YAAY,EAAE,CAGhF;CACF"}
@@ -0,0 +1,20 @@
1
+ import { isMoveItemType } from '@gamepark/rules-api';
2
+ import { Memory } from '../Memory';
3
+ import { GainType } from '../material/Effect';
4
+ import { MaterialType } from '../material/MaterialType';
5
+ import { GreyluneRule } from './GreyluneRule';
6
+ const skillMarkers = [MaterialType.StrengthMarker, MaterialType.MagicMarker];
7
+ export class ChooseSkillRule extends GreyluneRule {
8
+ get count() {
9
+ const gain = this.remind(Memory.CurrentGain);
10
+ return gain && gain.type === GainType.Skill && typeof gain.count === 'number' ? gain.count : 1;
11
+ }
12
+ getPlayerMoves() {
13
+ return skillMarkers.flatMap((marker) => this.moveSkillMarker(marker, this.count));
14
+ }
15
+ afterItemMove(move) {
16
+ const marker = skillMarkers.find((marker) => isMoveItemType(marker)(move));
17
+ return marker ? this.skillGained(marker, this.count) : [];
18
+ }
19
+ }
20
+ //# sourceMappingURL=ChooseSkillRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseSkillRule.js","sourceRoot":"","sources":["../../src/rules/ChooseSkillRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAY,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAQ,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAgB,YAAY,EAAe,MAAM,gBAAgB,CAAA;AAExE,MAAM,YAAY,GAAkB,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;AAM3F,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,IAAI,KAAK;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAO,MAAM,CAAC,WAAW,CAAC,CAAA;QAClD,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAChG,CAAC;IAED,cAAc;QACZ,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,aAAa,CAAC,IAAkD;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1E,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3D,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ export declare enum CustomMoveType {
2
+ GainCoins = 1,
3
+ GainVp = 2,
4
+ GainCoinsAround = 3,
5
+ ActivateCard = 4,
6
+ ChooseAbility = 5,
7
+ UseItem = 6,
8
+ ChooseEncounter = 7,
9
+ ResolveOutcome = 8,
10
+ SkipEncounter = 9,
11
+ ResolveQuest = 10,
12
+ Pass = 11,
13
+ UseReaction = 12,
14
+ TakeEventOption = 13,
15
+ TakeSpecialAction = 14
16
+ }
17
+ //# sourceMappingURL=CustomMoveType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomMoveType.d.ts","sourceRoot":"","sources":["../../src/rules/CustomMoveType.ts"],"names":[],"mappings":"AAQA,oBAAY,cAAc;IAKxB,SAAS,IAAI;IAEb,MAAM,IAAA;IAMN,eAAe,IAAA;IAMf,YAAY,IAAA;IAOZ,aAAa,IAAA;IAGb,OAAO,IAAA;IASP,eAAe,IAAA;IAGf,cAAc,IAAA;IAGd,aAAa,IAAA;IACb,YAAY,KAAA;IAGZ,IAAI,KAAA;IAGJ,WAAW,KAAA;IAUX,eAAe,KAAA;IAUf,iBAAiB,KAAA;CAClB"}
@@ -0,0 +1,18 @@
1
+ export var CustomMoveType;
2
+ (function (CustomMoveType) {
3
+ CustomMoveType[CustomMoveType["GainCoins"] = 1] = "GainCoins";
4
+ CustomMoveType[CustomMoveType["GainVp"] = 2] = "GainVp";
5
+ CustomMoveType[CustomMoveType["GainCoinsAround"] = 3] = "GainCoinsAround";
6
+ CustomMoveType[CustomMoveType["ActivateCard"] = 4] = "ActivateCard";
7
+ CustomMoveType[CustomMoveType["ChooseAbility"] = 5] = "ChooseAbility";
8
+ CustomMoveType[CustomMoveType["UseItem"] = 6] = "UseItem";
9
+ CustomMoveType[CustomMoveType["ChooseEncounter"] = 7] = "ChooseEncounter";
10
+ CustomMoveType[CustomMoveType["ResolveOutcome"] = 8] = "ResolveOutcome";
11
+ CustomMoveType[CustomMoveType["SkipEncounter"] = 9] = "SkipEncounter";
12
+ CustomMoveType[CustomMoveType["ResolveQuest"] = 10] = "ResolveQuest";
13
+ CustomMoveType[CustomMoveType["Pass"] = 11] = "Pass";
14
+ CustomMoveType[CustomMoveType["UseReaction"] = 12] = "UseReaction";
15
+ CustomMoveType[CustomMoveType["TakeEventOption"] = 13] = "TakeEventOption";
16
+ CustomMoveType[CustomMoveType["TakeSpecialAction"] = 14] = "TakeSpecialAction";
17
+ })(CustomMoveType || (CustomMoveType = {}));
18
+ //# sourceMappingURL=CustomMoveType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomMoveType.js","sourceRoot":"","sources":["../../src/rules/CustomMoveType.ts"],"names":[],"mappings":"AAQA,MAAM,CAAN,IAAY,cAwEX;AAxED,WAAY,cAAc;IAKxB,6DAAa,CAAA;IAEb,uDAAM,CAAA;IAMN,yEAAe,CAAA;IAMf,mEAAY,CAAA;IAOZ,qEAAa,CAAA;IAGb,yDAAO,CAAA;IASP,yEAAe,CAAA;IAGf,uEAAc,CAAA;IAGd,qEAAa,CAAA;IACb,oEAAY,CAAA;IAGZ,oDAAI,CAAA;IAGJ,kEAAW,CAAA;IAUX,0EAAe,CAAA;IAUf,8EAAiB,CAAA;AACnB,CAAC,EAxEW,cAAc,KAAd,cAAc,QAwEzB"}
@@ -0,0 +1,9 @@
1
+ import { ItemMove } from '@gamepark/rules-api';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { GreyluneMove, GreyluneRule } from './GreyluneRule';
5
+ export declare class DiscardItemRule extends GreyluneRule {
6
+ getPlayerMoves(): GreyluneMove[];
7
+ afterItemMove(move: ItemMove<number, MaterialType, LocationType>): GreyluneMove[];
8
+ }
9
+ //# sourceMappingURL=DiscardItemRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscardItemRule.d.ts","sourceRoot":"","sources":["../../src/rules/DiscardItemRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ3D,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,cAAc,IAAI,YAAY,EAAE,CAE/B;IAMD,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,YAAY,EAAE,CAIhF;CACF"}
@@ -0,0 +1,19 @@
1
+ import { Memory } from '../Memory';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { itemLimit, playerItems } from '../material/PlayerState';
5
+ import { GreyluneRule } from './GreyluneRule';
6
+ import { RuleId } from './RuleId';
7
+ export class DiscardItemRule extends GreyluneRule {
8
+ getPlayerMoves() {
9
+ return this.villageCards.location(LocationType.Items).player(this.player).deleteItems();
10
+ }
11
+ afterItemMove(move) {
12
+ if (move.itemType !== MaterialType.VillageCard)
13
+ return [];
14
+ if (playerItems(this, this.player).length > itemLimit(this, this.player))
15
+ return [];
16
+ return [this.startRule(this.remind(Memory.Resume) ?? RuleId.ResolveEffects)];
17
+ }
18
+ }
19
+ //# sourceMappingURL=DiscardItemRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscardItemRule.js","sourceRoot":"","sources":["../../src/rules/DiscardItemRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAgB,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAOjC,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;IACzF,CAAC;IAMD,aAAa,CAAC,IAAkD;QAC9D,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC,WAAW;YAAE,OAAO,EAAE,CAAA;QACzD,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAA;QACnF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAS,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;IACtF,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { Effect, Gain, Requirement } from '../material/Effect';
2
+ import { EncounterCard } from '../material/EncounterCard';
3
+ import { GreyluneMove, GreyluneRule } from './GreyluneRule';
4
+ export type Ignored = {
5
+ outcome: number;
6
+ requirement: number;
7
+ };
8
+ export type ResolveOutcomeData = {
9
+ card: number;
10
+ outcomes: number[];
11
+ ignored?: Ignored[];
12
+ };
13
+ export declare abstract class EncounterRule extends GreyluneRule {
14
+ get ignores(): number;
15
+ protected front(card: number): EncounterCard;
16
+ protected encounterMoves(card: number): ResolveOutcomeData[];
17
+ private isFree;
18
+ private offerOf;
19
+ private ignoreVariants;
20
+ protected resolve(data: ResolveOutcomeData): GreyluneMove[];
21
+ private incomeOn;
22
+ }
23
+ export declare const outcomeRequirements: (front: EncounterCard, outcomes: number[], ignored?: Ignored[]) => Requirement[];
24
+ export declare const outcomeGains: (front: EncounterCard, outcomes: number[]) => Gain[];
25
+ export declare const outcomeEffect: (front: EncounterCard, data: ResolveOutcomeData) => Effect;
26
+ //# sourceMappingURL=EncounterRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EncounterRule.d.ts","sourceRoot":"","sources":["../../src/rules/EncounterRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAqB,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAE,aAAa,EAAsC,MAAM,2BAA2B,CAAA;AAK7F,OAAO,EAAoB,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAI7E,MAAM,MAAM,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAA;AAG9D,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAAA;AAS1F,8BAAsB,aAAc,SAAQ,YAAY;IAEtD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAGD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAE3C;IAmBD,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAU3D;IAQD,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,cAAc;IAmBtB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,YAAY,EAAE,CAc1D;IAMD,OAAO,CAAC,QAAQ;CAGjB;AAQD,eAAO,MAAM,mBAAmB,UAAW,aAAa,YAAY,MAAM,EAAE,YAAW,OAAO,EAAE,KAAQ,WAAW,EAKhH,CAAA;AAGH,eAAO,MAAM,YAAY,UAAW,aAAa,YAAY,MAAM,EAAE,KAAG,IAAI,EACW,CAAA;AAGvF,eAAO,MAAM,aAAa,UAAW,aAAa,QAAQ,kBAAkB,KAAG,MAG7E,CAAA"}
@@ -0,0 +1,75 @@
1
+ import { GainType, isCheck } from '../material/Effect';
2
+ import { encounterCardData } from '../material/EncounterCard';
3
+ import { LocationType } from '../material/LocationType';
4
+ import { MaterialType } from '../material/MaterialType';
5
+ import { Memory } from '../Memory';
6
+ import { incomeTokenGains } from '../material/Tokens';
7
+ import { GreyluneRule } from './GreyluneRule';
8
+ import { RuleId } from './RuleId';
9
+ export class EncounterRule extends GreyluneRule {
10
+ get ignores() {
11
+ return this.remind(Memory.IgnoredConditions) ?? 0;
12
+ }
13
+ front(card) {
14
+ return this.encounterCards.getItem(card).id.front;
15
+ }
16
+ encounterMoves(card) {
17
+ const front = this.front(card);
18
+ const outcomes = encounterCardData[front].outcomes;
19
+ const free = outcomes.map((_, outcome) => outcome).filter((outcome) => this.isFree(front, outcome));
20
+ const subsets = (outcomes.length > 1 ? [[0], [1], [0, 1]] : [[0]]).filter((subset) => free.every((outcome) => subset.includes(outcome)));
21
+ const ways = subsets.flatMap((subset) => this.ignoreVariants(front, subset).map((ignored) => (ignored.length ? { card, outcomes: subset, ignored } : { card, outcomes: subset })));
22
+ const offers = ways.map((way) => this.offerOf(front, way));
23
+ return ways.filter((_, index) => offers.indexOf(offers[index]) === index);
24
+ }
25
+ isFree(front, outcome) {
26
+ const requirements = encounterCardData[front].outcomes[outcome].requirements ?? [];
27
+ return requirements.every(isCheck) && this.canPay(requirements);
28
+ }
29
+ offerOf(front, data) {
30
+ const requirements = outcomeRequirements(front, data.outcomes, data.ignored);
31
+ const gains = outcomeGains(front, data.outcomes);
32
+ return JSON.stringify([requirements, gains]);
33
+ }
34
+ ignoreVariants(front, subset) {
35
+ const all = subset.flatMap((outcome) => (encounterCardData[front].outcomes[outcome].requirements ?? []).map((_, requirement) => ({ outcome, requirement })));
36
+ return subsetsUpTo(all, this.ignores)
37
+ .filter((ignored) => this.canPay(outcomeRequirements(front, subset, ignored)))
38
+ .filter((ignored) => ignored.every((entry) => !this.canPay(outcomeRequirements(front, subset, without(ignored, entry)))));
39
+ }
40
+ resolve(data) {
41
+ const front = this.front(data.card);
42
+ const requirements = outcomeRequirements(front, data.outcomes, data.ignored);
43
+ const gains = roadLast(outcomeGains(front, data.outcomes));
44
+ const income = this.incomeOn(data.card);
45
+ const taken = income.length > 0 && gains.some((gain) => gain.type === GainType.IncomeToken);
46
+ this.pushGains(gains.flatMap((gain) => (gain.type === GainType.IncomeToken ? (taken ? incomeTokenGains[gain.token] : []) : [gain])));
47
+ return [
48
+ ...this.payRequirements(requirements.filter((requirement) => !isCheck(requirement))),
49
+ ...(taken ? income.moveItems({ type: LocationType.IncomeTokenSpace, player: this.player }) : []),
50
+ this.encounterCards.index(data.card).moveItem({ type: LocationType.UntoldStories, player: this.player }),
51
+ this.startRule(RuleId.ResolveEffects)
52
+ ];
53
+ }
54
+ incomeOn(card) {
55
+ return this.material(MaterialType.IncomeToken).location(LocationType.CardIncome).parent(card);
56
+ }
57
+ }
58
+ export const outcomeRequirements = (front, outcomes, ignored = []) => outcomes.flatMap((outcome) => (encounterCardData[front].outcomes[outcome].requirements ?? []).filter((_, requirement) => !ignored.some((entry) => entry.outcome === outcome && entry.requirement === requirement)));
59
+ export const outcomeGains = (front, outcomes) => outcomes.flatMap((outcome) => encounterCardData[front].outcomes[outcome].gains ?? []);
60
+ export const outcomeEffect = (front, data) => ({
61
+ requirements: outcomeRequirements(front, data.outcomes, data.ignored),
62
+ gains: outcomeGains(front, data.outcomes)
63
+ });
64
+ const roadLast = (gains) => [
65
+ ...gains.filter((gain) => gain.type !== GainType.Travel),
66
+ ...gains.filter((gain) => gain.type === GainType.Travel)
67
+ ];
68
+ const without = (items, item) => items.filter((entry) => entry !== item);
69
+ const subsetsUpTo = (items, size) => {
70
+ if (size <= 0 || !items.length)
71
+ return [[]];
72
+ const [head, ...tail] = items;
73
+ return [...subsetsUpTo(tail, size), ...subsetsUpTo(tail, size - 1).map((subset) => [head, ...subset])];
74
+ };
75
+ //# sourceMappingURL=EncounterRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EncounterRule.js","sourceRoot":"","sources":["../../src/rules/EncounterRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { CustomMove, ItemMove } from '@gamepark/rules-api';
2
+ import { LocationType } from '../material/LocationType';
3
+ import { MaterialType } from '../material/MaterialType';
4
+ import { GreyluneMaterial, GreyluneMove, GreyluneRule } from './GreyluneRule';
5
+ export declare class EventRule extends GreyluneRule {
6
+ get newcomer(): GreyluneMaterial;
7
+ onRuleStart(): GreyluneMove[];
8
+ getPlayerMoves(): GreyluneMove[];
9
+ afterItemMove(move: ItemMove<number, MaterialType, LocationType>): GreyluneMove[];
10
+ onCustomMove(move: CustomMove): GreyluneMove[];
11
+ private takeOption;
12
+ }
13
+ //# sourceMappingURL=EventRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventRule.d.ts","sourceRoot":"","sources":["../../src/rules/EventRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoC,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE5F,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAe7E,qBAAa,SAAU,SAAQ,YAAY;IAEzC,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IAED,WAAW,IAAI,YAAY,EAAE,CAK5B;IAED,cAAc,IAAI,YAAY,EAAE,CAS/B;IAGD,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,YAAY,EAAE,CAGhF;IAGD,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,EAAE,CAG7C;IAED,OAAO,CAAC,UAAU;CAKnB"}