motely-node 2.2.3 → 3.0.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 (59) hide show
  1. package/README.md +10 -10
  2. package/_framework/Motely.8y5rvfuai3.wasm +0 -0
  3. package/_framework/Motely.SingleThread.tnxmlx0rs7.wasm +0 -0
  4. package/_framework/{System.Private.CoreLib.t6vylij0to.wasm → System.Private.CoreLib.q31xygua1s.wasm} +0 -0
  5. package/_framework/dotnet.js +11 -11
  6. package/_framework/{dotnet.native.ws3tq8jgzv.wasm → dotnet.native.f4wynpy50s.wasm} +0 -0
  7. package/index.cjs +3 -0
  8. package/index.d.ts +3 -0
  9. package/index.js +3 -0
  10. package/jaml-schema.d.ts +12 -0
  11. package/jaml-schema.js +3284 -0
  12. package/jaml.schema.json +1267 -115
  13. package/package.json +11 -4
  14. package/_framework/Motely.80zooe1g1b.wasm +0 -0
  15. package/_framework/Motely.80zooe1g1b.wasm.br +0 -0
  16. package/_framework/Motely.80zooe1g1b.wasm.gz +0 -0
  17. package/_framework/Motely.SingleThread.qdb6metss2.wasm +0 -0
  18. package/_framework/Motely.SingleThread.qdb6metss2.wasm.br +0 -0
  19. package/_framework/Motely.SingleThread.qdb6metss2.wasm.gz +0 -0
  20. package/_framework/System.Collections.Concurrent.ayp51emk7f.wasm.br +0 -0
  21. package/_framework/System.Collections.Concurrent.ayp51emk7f.wasm.gz +0 -0
  22. package/_framework/System.Collections.tt425i6ify.wasm.br +0 -0
  23. package/_framework/System.Collections.tt425i6ify.wasm.gz +0 -0
  24. package/_framework/System.ComponentModel.Primitives.fjv77ljto2.wasm.br +0 -0
  25. package/_framework/System.ComponentModel.Primitives.fjv77ljto2.wasm.gz +0 -0
  26. package/_framework/System.Console.a5h4vm85mj.wasm.br +0 -0
  27. package/_framework/System.Console.a5h4vm85mj.wasm.gz +0 -0
  28. package/_framework/System.IO.Pipelines.dvb53mk2zg.wasm.br +0 -0
  29. package/_framework/System.IO.Pipelines.dvb53mk2zg.wasm.gz +0 -0
  30. package/_framework/System.Linq.x3bjseuxl8.wasm.br +0 -0
  31. package/_framework/System.Linq.x3bjseuxl8.wasm.gz +0 -0
  32. package/_framework/System.Memory.tf17uamb4m.wasm.br +0 -0
  33. package/_framework/System.Memory.tf17uamb4m.wasm.gz +0 -0
  34. package/_framework/System.ObjectModel.8ksm30ll2f.wasm.br +0 -0
  35. package/_framework/System.ObjectModel.8ksm30ll2f.wasm.gz +0 -0
  36. package/_framework/System.Private.CoreLib.t6vylij0to.wasm.br +0 -0
  37. package/_framework/System.Private.CoreLib.t6vylij0to.wasm.gz +0 -0
  38. package/_framework/System.Private.Uri.vf3uyjlk4r.wasm.br +0 -0
  39. package/_framework/System.Private.Uri.vf3uyjlk4r.wasm.gz +0 -0
  40. package/_framework/System.Runtime.InteropServices.JavaScript.4jnkqxblyl.wasm.br +0 -0
  41. package/_framework/System.Runtime.InteropServices.JavaScript.4jnkqxblyl.wasm.gz +0 -0
  42. package/_framework/System.Text.Encodings.Web.ha1lyoz09i.wasm.br +0 -0
  43. package/_framework/System.Text.Encodings.Web.ha1lyoz09i.wasm.gz +0 -0
  44. package/_framework/System.Text.Json.ad1y3qs7i4.wasm.br +0 -0
  45. package/_framework/System.Text.Json.ad1y3qs7i4.wasm.gz +0 -0
  46. package/_framework/System.Text.RegularExpressions.n5mf3b24ec.wasm.br +0 -0
  47. package/_framework/System.Text.RegularExpressions.n5mf3b24ec.wasm.gz +0 -0
  48. package/_framework/System.Threading.8wct646wp9.wasm.br +0 -0
  49. package/_framework/System.Threading.8wct646wp9.wasm.gz +0 -0
  50. package/_framework/YamlDotNet.b2a7su70z1.wasm.br +0 -0
  51. package/_framework/YamlDotNet.b2a7su70z1.wasm.gz +0 -0
  52. package/_framework/dotnet.js.br +0 -0
  53. package/_framework/dotnet.js.gz +0 -0
  54. package/_framework/dotnet.native.2rnmjvcnrv.js.br +0 -0
  55. package/_framework/dotnet.native.2rnmjvcnrv.js.gz +0 -0
  56. package/_framework/dotnet.native.ws3tq8jgzv.wasm.br +0 -0
  57. package/_framework/dotnet.native.ws3tq8jgzv.wasm.gz +0 -0
  58. package/_framework/dotnet.runtime.q5rqv3xrhm.js.br +0 -0
  59. package/_framework/dotnet.runtime.q5rqv3xrhm.js.gz +0 -0
package/jaml.schema.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://seedfinder.app/jaml.schema.json",
4
- "version": "2.2.3",
5
- "title": "JAML - Jimbo's Ante Markup Language",
4
+ "version": "3.0.0",
5
+ "title": "JAML - Jimbo\u0027s Ante Markup Language",
6
6
  "description": "Schema for Balatro seed filter configuration files (.jaml)",
7
7
  "type": "object",
8
8
  "properties": {
@@ -40,11 +40,10 @@
40
40
  "Painted",
41
41
  "Anaglyph",
42
42
  "Plasma",
43
- "Erratic",
44
- "Challenge"
43
+ "Erratic"
45
44
  ],
46
- "default": "Red",
47
- "description": "Balatro deck to search with"
45
+ "description": "Balatro deck to search with",
46
+ "default": "Red"
48
47
  },
49
48
  "stake": {
50
49
  "type": "string",
@@ -58,12 +57,19 @@
58
57
  "Orange",
59
58
  "Gold"
60
59
  ],
61
- "default": "White",
62
- "description": "Balatro stake level"
60
+ "description": "Balatro stake level",
61
+ "default": "White"
62
+ },
63
+ "seeds": {
64
+ "type": "array",
65
+ "items": {
66
+ "type": "string"
67
+ },
68
+ "description": "Known seed examples associated with this filter."
63
69
  },
64
70
  "defaults": {
65
71
  "type": "object",
66
- "description": "Default values applied to clauses when not specified",
72
+ "description": "Default values applied to clauses when a clause does not specify its own values.",
67
73
  "properties": {
68
74
  "antes": {
69
75
  "type": "array",
@@ -72,6 +78,7 @@
72
78
  "minimum": 0,
73
79
  "maximum": 39
74
80
  },
81
+ "description": "Default antes to check if a clause does not specify antes.",
75
82
  "default": [
76
83
  1,
77
84
  2,
@@ -81,8 +88,7 @@
81
88
  6,
82
89
  7,
83
90
  8
84
- ],
85
- "description": "Default antes to check if not specified in clause"
91
+ ]
86
92
  },
87
93
  "boosterPacks": {
88
94
  "type": "array",
@@ -91,6 +97,7 @@
91
97
  "minimum": 0,
92
98
  "maximum": 5
93
99
  },
100
+ "description": "Default pack offering slots to inspect.",
94
101
  "default": [
95
102
  0,
96
103
  1,
@@ -98,8 +105,7 @@
98
105
  3,
99
106
  4,
100
107
  5
101
- ],
102
- "description": "Default pack slots (ante 1 limited to 0-3, ante 2+ uses 0-5)"
108
+ ]
103
109
  },
104
110
  "shopItems": {
105
111
  "type": "array",
@@ -108,6 +114,7 @@
108
114
  "minimum": 0,
109
115
  "maximum": 5
110
116
  },
117
+ "description": "Default shop item slots to inspect.",
111
118
  "default": [
112
119
  0,
113
120
  1,
@@ -115,35 +122,34 @@
115
122
  3,
116
123
  4,
117
124
  5
118
- ],
119
- "description": "Default shop slots (ante 1 limited to 0-3, ante 2+ uses 0-5)"
125
+ ]
120
126
  },
121
127
  "score": {
122
128
  "type": "integer",
123
129
  "minimum": 0,
124
- "default": 1,
125
- "description": "Default score for 'should' clauses"
130
+ "description": "Default score for should clauses.",
131
+ "default": 1
126
132
  }
127
133
  },
128
134
  "additionalProperties": false
129
135
  },
130
136
  "must": {
131
137
  "type": "array",
132
- "description": "Items that MUST appear in the seed (required)",
138
+ "description": "Required clauses. All listed clauses must match.",
133
139
  "items": {
134
140
  "$ref": "#/definitions/clause"
135
141
  }
136
142
  },
137
143
  "should": {
138
144
  "type": "array",
139
- "description": "Items that SHOULD appear for bonus scoring (optional)",
145
+ "description": "Scored clauses. Matching clauses add score but do not gate the seed by themselves.",
140
146
  "items": {
141
147
  "$ref": "#/definitions/clause"
142
148
  }
143
149
  },
144
150
  "mustNot": {
145
151
  "type": "array",
146
- "description": "Items that MUST NOT appear in the seed (banned)",
152
+ "description": "Rejected clauses. If any listed clause matches, the seed is rejected.",
147
153
  "items": {
148
154
  "$ref": "#/definitions/clause"
149
155
  }
@@ -157,6 +163,10 @@
157
163
  "type": "string",
158
164
  "enum": [
159
165
  "Joker",
166
+ "CommonJoker",
167
+ "UncommonJoker",
168
+ "RareJoker",
169
+ "MixedJoker",
160
170
  "SoulJoker",
161
171
  "Voucher",
162
172
  "TarotCard",
@@ -171,16 +181,24 @@
171
181
  "BossBlind",
172
182
  "StandardCard",
173
183
  "Event",
184
+ "LuckyMoney",
185
+ "LuckyMult",
186
+ "MisprintMult",
187
+ "WheelOfFortune",
188
+ "CavendishExtinct",
189
+ "GrosMichelExtinct",
174
190
  "ErraticRank",
175
191
  "ErraticSuit",
192
+ "ErraticCard",
193
+ "StartingDraw",
176
194
  "And",
177
195
  "Or"
178
196
  ],
179
- "description": "Type of item to search for"
197
+ "description": "Explicit clause type when using the type/value form."
180
198
  },
181
199
  "value": {
182
200
  "type": "string",
183
- "description": "Name of the specific item (e.g., 'Perkeo', 'Hieroglyph'). For Event type, this is the event type name (e.g., 'LuckyMoney', 'LuckyMult'). Shorthand: use 'event: LuckyMoney' instead of 'type: Event, value: LuckyMoney'"
201
+ "description": "Primary clause value when using the explicit type/value form."
184
202
  },
185
203
  "eventType": {
186
204
  "type": "string",
@@ -192,87 +210,1067 @@
192
210
  "CavendishExtinct",
193
211
  "GrosMichelExtinct"
194
212
  ],
195
- "description": "Event type (alternative to 'value' for Event clauses). Shorthand: use 'event: LuckyMoney' instead."
213
+ "description": "Event clause value for the explicit type/eventType form."
196
214
  },
197
- "rolls": {
215
+ "joker": {
216
+ "type": "string",
217
+ "enum": [
218
+ "Joker",
219
+ "GreedyJoker",
220
+ "LustyJoker",
221
+ "WrathfulJoker",
222
+ "GluttonousJoker",
223
+ "JollyJoker",
224
+ "ZanyJoker",
225
+ "MadJoker",
226
+ "CrazyJoker",
227
+ "DrollJoker",
228
+ "SlyJoker",
229
+ "WilyJoker",
230
+ "CleverJoker",
231
+ "DeviousJoker",
232
+ "CraftyJoker",
233
+ "HalfJoker",
234
+ "CreditCard",
235
+ "Banner",
236
+ "MysticSummit",
237
+ "EightBall",
238
+ "Misprint",
239
+ "RaisedFist",
240
+ "ChaostheClown",
241
+ "ScaryFace",
242
+ "AbstractJoker",
243
+ "DelayedGratification",
244
+ "GrosMichel",
245
+ "EvenSteven",
246
+ "OddTodd",
247
+ "Scholar",
248
+ "BusinessCard",
249
+ "Supernova",
250
+ "RideTheBus",
251
+ "Egg",
252
+ "Runner",
253
+ "IceCream",
254
+ "Splash",
255
+ "BlueJoker",
256
+ "FacelessJoker",
257
+ "GreenJoker",
258
+ "Superposition",
259
+ "ToDoList",
260
+ "Cavendish",
261
+ "RedCard",
262
+ "SquareJoker",
263
+ "RiffRaff",
264
+ "Photograph",
265
+ "ReservedParking",
266
+ "MailInRebate",
267
+ "Hallucination",
268
+ "FortuneTeller",
269
+ "Juggler",
270
+ "Drunkard",
271
+ "GoldenJoker",
272
+ "Popcorn",
273
+ "WalkieTalkie",
274
+ "SmileyFace",
275
+ "GoldenTicket",
276
+ "Swashbuckler",
277
+ "HangingChad",
278
+ "ShootTheMoon",
279
+ "JokerStencil",
280
+ "FourFingers",
281
+ "Mime",
282
+ "CeremonialDagger",
283
+ "MarbleJoker",
284
+ "LoyaltyCard",
285
+ "Dusk",
286
+ "Fibonacci",
287
+ "SteelJoker",
288
+ "Hack",
289
+ "Pareidolia",
290
+ "SpaceJoker",
291
+ "Burglar",
292
+ "Blackboard",
293
+ "SixthSense",
294
+ "Constellation",
295
+ "Hiker",
296
+ "CardSharp",
297
+ "Madness",
298
+ "Seance",
299
+ "Vampire",
300
+ "Shortcut",
301
+ "Hologram",
302
+ "Cloud9",
303
+ "Rocket",
304
+ "MidasMask",
305
+ "Luchador",
306
+ "GiftCard",
307
+ "TurtleBean",
308
+ "Erosion",
309
+ "ToTheMoon",
310
+ "StoneJoker",
311
+ "LuckyCat",
312
+ "Bull",
313
+ "DietCola",
314
+ "TradingCard",
315
+ "FlashCard",
316
+ "SpareTrousers",
317
+ "Ramen",
318
+ "Seltzer",
319
+ "Castle",
320
+ "MrBones",
321
+ "Acrobat",
322
+ "SockAndBuskin",
323
+ "Troubadour",
324
+ "Certificate",
325
+ "SmearedJoker",
326
+ "Throwback",
327
+ "RoughGem",
328
+ "Bloodstone",
329
+ "Arrowhead",
330
+ "OnyxAgate",
331
+ "GlassJoker",
332
+ "Showman",
333
+ "FlowerPot",
334
+ "MerryAndy",
335
+ "OopsAll6s",
336
+ "TheIdol",
337
+ "SeeingDouble",
338
+ "Matador",
339
+ "Satellite",
340
+ "Cartomancer",
341
+ "Astronomer",
342
+ "Bootstraps",
343
+ "DNA",
344
+ "Vagabond",
345
+ "Baron",
346
+ "Obelisk",
347
+ "BaseballCard",
348
+ "AncientJoker",
349
+ "Campfire",
350
+ "Blueprint",
351
+ "WeeJoker",
352
+ "HitTheRoad",
353
+ "TheDuo",
354
+ "TheTrio",
355
+ "TheFamily",
356
+ "TheOrder",
357
+ "TheTribe",
358
+ "Stuntman",
359
+ "InvisibleJoker",
360
+ "Brainstorm",
361
+ "DriversLicense",
362
+ "BurntJoker",
363
+ "Canio",
364
+ "Triboulet",
365
+ "Yorick",
366
+ "Chicot",
367
+ "Perkeo"
368
+ ],
369
+ "description": "Joker clause."
370
+ },
371
+ "jokers": {
198
372
  "type": "array",
199
373
  "items": {
200
- "type": "integer",
201
- "minimum": 0
374
+ "type": "string"
202
375
  },
203
- "description": "Roll indices for Event clauses (e.g. [0, 1] for first two occurrences of the event). Only valid for type: Event. Example: 'rolls: [0]' checks the first occurrence"
376
+ "description": "Joker clause matching any listed joker names."
204
377
  },
205
- "event": {
378
+ "commonJoker": {
206
379
  "type": "string",
207
- "description": "Shorthand for Event type (type-as-key). Example: 'event: LuckyMoney'"
380
+ "enum": [
381
+ "Joker",
382
+ "GreedyJoker",
383
+ "LustyJoker",
384
+ "WrathfulJoker",
385
+ "GluttonousJoker",
386
+ "JollyJoker",
387
+ "ZanyJoker",
388
+ "MadJoker",
389
+ "CrazyJoker",
390
+ "DrollJoker",
391
+ "SlyJoker",
392
+ "WilyJoker",
393
+ "CleverJoker",
394
+ "DeviousJoker",
395
+ "CraftyJoker",
396
+ "HalfJoker",
397
+ "CreditCard",
398
+ "Banner",
399
+ "MysticSummit",
400
+ "EightBall",
401
+ "Misprint",
402
+ "RaisedFist",
403
+ "ChaostheClown",
404
+ "ScaryFace",
405
+ "AbstractJoker",
406
+ "DelayedGratification",
407
+ "GrosMichel",
408
+ "EvenSteven",
409
+ "OddTodd",
410
+ "Scholar",
411
+ "BusinessCard",
412
+ "Supernova",
413
+ "RideTheBus",
414
+ "Egg",
415
+ "Runner",
416
+ "IceCream",
417
+ "Splash",
418
+ "BlueJoker",
419
+ "FacelessJoker",
420
+ "GreenJoker",
421
+ "Superposition",
422
+ "ToDoList",
423
+ "Cavendish",
424
+ "RedCard",
425
+ "SquareJoker",
426
+ "RiffRaff",
427
+ "Photograph",
428
+ "ReservedParking",
429
+ "MailInRebate",
430
+ "Hallucination",
431
+ "FortuneTeller",
432
+ "Juggler",
433
+ "Drunkard",
434
+ "GoldenJoker",
435
+ "Popcorn",
436
+ "WalkieTalkie",
437
+ "SmileyFace",
438
+ "GoldenTicket",
439
+ "Swashbuckler",
440
+ "HangingChad",
441
+ "ShootTheMoon"
442
+ ],
443
+ "description": "Common Joker clause."
208
444
  },
209
- "joker": {
445
+ "commonJokers": {
446
+ "type": "array",
447
+ "items": {
448
+ "type": "string"
449
+ },
450
+ "description": "Common Joker clause matching any listed common joker names."
451
+ },
452
+ "uncommonJoker": {
210
453
  "type": "string",
211
- "description": "Shorthand for Joker type. Example: 'joker: Blueprint'"
454
+ "enum": [
455
+ "JokerStencil",
456
+ "FourFingers",
457
+ "Mime",
458
+ "CeremonialDagger",
459
+ "MarbleJoker",
460
+ "LoyaltyCard",
461
+ "Dusk",
462
+ "Fibonacci",
463
+ "SteelJoker",
464
+ "Hack",
465
+ "Pareidolia",
466
+ "SpaceJoker",
467
+ "Burglar",
468
+ "Blackboard",
469
+ "SixthSense",
470
+ "Constellation",
471
+ "Hiker",
472
+ "CardSharp",
473
+ "Madness",
474
+ "Seance",
475
+ "Vampire",
476
+ "Shortcut",
477
+ "Hologram",
478
+ "Cloud9",
479
+ "Rocket",
480
+ "MidasMask",
481
+ "Luchador",
482
+ "GiftCard",
483
+ "TurtleBean",
484
+ "Erosion",
485
+ "ToTheMoon",
486
+ "StoneJoker",
487
+ "LuckyCat",
488
+ "Bull",
489
+ "DietCola",
490
+ "TradingCard",
491
+ "FlashCard",
492
+ "SpareTrousers",
493
+ "Ramen",
494
+ "Seltzer",
495
+ "Castle",
496
+ "MrBones",
497
+ "Acrobat",
498
+ "SockAndBuskin",
499
+ "Troubadour",
500
+ "Certificate",
501
+ "SmearedJoker",
502
+ "Throwback",
503
+ "RoughGem",
504
+ "Bloodstone",
505
+ "Arrowhead",
506
+ "OnyxAgate",
507
+ "GlassJoker",
508
+ "Showman",
509
+ "FlowerPot",
510
+ "MerryAndy",
511
+ "OopsAll6s",
512
+ "TheIdol",
513
+ "SeeingDouble",
514
+ "Matador",
515
+ "Satellite",
516
+ "Cartomancer",
517
+ "Astronomer",
518
+ "Bootstraps"
519
+ ],
520
+ "description": "Uncommon Joker clause."
212
521
  },
213
- "legendaryJoker": {
522
+ "uncommonJokers": {
523
+ "type": "array",
524
+ "items": {
525
+ "type": "string"
526
+ },
527
+ "description": "Uncommon Joker clause matching any listed uncommon joker names."
528
+ },
529
+ "rareJoker": {
214
530
  "type": "string",
215
- "description": "Shorthand for SoulJoker type. Example: 'legendaryJoker: Perkeo'"
531
+ "enum": [
532
+ "DNA",
533
+ "Vagabond",
534
+ "Baron",
535
+ "Obelisk",
536
+ "BaseballCard",
537
+ "AncientJoker",
538
+ "Campfire",
539
+ "Blueprint",
540
+ "WeeJoker",
541
+ "HitTheRoad",
542
+ "TheDuo",
543
+ "TheTrio",
544
+ "TheFamily",
545
+ "TheOrder",
546
+ "TheTribe",
547
+ "Stuntman",
548
+ "InvisibleJoker",
549
+ "Brainstorm",
550
+ "DriversLicense",
551
+ "BurntJoker"
552
+ ],
553
+ "description": "Rare Joker clause."
216
554
  },
217
- "voucher": {
555
+ "rareJokers": {
556
+ "type": "array",
557
+ "items": {
558
+ "type": "string"
559
+ },
560
+ "description": "Rare Joker clause matching any listed rare joker names."
561
+ },
562
+ "mixedJoker": {
218
563
  "type": "string",
219
- "description": "Shorthand for Voucher type."
564
+ "enum": [
565
+ "Joker",
566
+ "GreedyJoker",
567
+ "LustyJoker",
568
+ "WrathfulJoker",
569
+ "GluttonousJoker",
570
+ "JollyJoker",
571
+ "ZanyJoker",
572
+ "MadJoker",
573
+ "CrazyJoker",
574
+ "DrollJoker",
575
+ "SlyJoker",
576
+ "WilyJoker",
577
+ "CleverJoker",
578
+ "DeviousJoker",
579
+ "CraftyJoker",
580
+ "HalfJoker",
581
+ "CreditCard",
582
+ "Banner",
583
+ "MysticSummit",
584
+ "EightBall",
585
+ "Misprint",
586
+ "RaisedFist",
587
+ "ChaostheClown",
588
+ "ScaryFace",
589
+ "AbstractJoker",
590
+ "DelayedGratification",
591
+ "GrosMichel",
592
+ "EvenSteven",
593
+ "OddTodd",
594
+ "Scholar",
595
+ "BusinessCard",
596
+ "Supernova",
597
+ "RideTheBus",
598
+ "Egg",
599
+ "Runner",
600
+ "IceCream",
601
+ "Splash",
602
+ "BlueJoker",
603
+ "FacelessJoker",
604
+ "GreenJoker",
605
+ "Superposition",
606
+ "ToDoList",
607
+ "Cavendish",
608
+ "RedCard",
609
+ "SquareJoker",
610
+ "RiffRaff",
611
+ "Photograph",
612
+ "ReservedParking",
613
+ "MailInRebate",
614
+ "Hallucination",
615
+ "FortuneTeller",
616
+ "Juggler",
617
+ "Drunkard",
618
+ "GoldenJoker",
619
+ "Popcorn",
620
+ "WalkieTalkie",
621
+ "SmileyFace",
622
+ "GoldenTicket",
623
+ "Swashbuckler",
624
+ "HangingChad",
625
+ "ShootTheMoon",
626
+ "JokerStencil",
627
+ "FourFingers",
628
+ "Mime",
629
+ "CeremonialDagger",
630
+ "MarbleJoker",
631
+ "LoyaltyCard",
632
+ "Dusk",
633
+ "Fibonacci",
634
+ "SteelJoker",
635
+ "Hack",
636
+ "Pareidolia",
637
+ "SpaceJoker",
638
+ "Burglar",
639
+ "Blackboard",
640
+ "SixthSense",
641
+ "Constellation",
642
+ "Hiker",
643
+ "CardSharp",
644
+ "Madness",
645
+ "Seance",
646
+ "Vampire",
647
+ "Shortcut",
648
+ "Hologram",
649
+ "Cloud9",
650
+ "Rocket",
651
+ "MidasMask",
652
+ "Luchador",
653
+ "GiftCard",
654
+ "TurtleBean",
655
+ "Erosion",
656
+ "ToTheMoon",
657
+ "StoneJoker",
658
+ "LuckyCat",
659
+ "Bull",
660
+ "DietCola",
661
+ "TradingCard",
662
+ "FlashCard",
663
+ "SpareTrousers",
664
+ "Ramen",
665
+ "Seltzer",
666
+ "Castle",
667
+ "MrBones",
668
+ "Acrobat",
669
+ "SockAndBuskin",
670
+ "Troubadour",
671
+ "Certificate",
672
+ "SmearedJoker",
673
+ "Throwback",
674
+ "RoughGem",
675
+ "Bloodstone",
676
+ "Arrowhead",
677
+ "OnyxAgate",
678
+ "GlassJoker",
679
+ "Showman",
680
+ "FlowerPot",
681
+ "MerryAndy",
682
+ "OopsAll6s",
683
+ "TheIdol",
684
+ "SeeingDouble",
685
+ "Matador",
686
+ "Satellite",
687
+ "Cartomancer",
688
+ "Astronomer",
689
+ "Bootstraps",
690
+ "DNA",
691
+ "Vagabond",
692
+ "Baron",
693
+ "Obelisk",
694
+ "BaseballCard",
695
+ "AncientJoker",
696
+ "Campfire",
697
+ "Blueprint",
698
+ "WeeJoker",
699
+ "HitTheRoad",
700
+ "TheDuo",
701
+ "TheTrio",
702
+ "TheFamily",
703
+ "TheOrder",
704
+ "TheTribe",
705
+ "Stuntman",
706
+ "InvisibleJoker",
707
+ "Brainstorm",
708
+ "DriversLicense",
709
+ "BurntJoker",
710
+ "Canio",
711
+ "Triboulet",
712
+ "Yorick",
713
+ "Chicot",
714
+ "Perkeo"
715
+ ],
716
+ "description": "Mixed-rarity Joker clause."
220
717
  },
221
- "tarot": {
718
+ "mixedJokers": {
719
+ "type": "array",
720
+ "items": {
721
+ "type": "string"
722
+ },
723
+ "description": "Mixed-rarity Joker clause matching any listed joker names."
724
+ },
725
+ "soulJoker": {
222
726
  "type": "string",
223
- "description": "Shorthand for TarotCard type."
727
+ "enum": [
728
+ "Canio",
729
+ "Triboulet",
730
+ "Yorick",
731
+ "Chicot",
732
+ "Perkeo"
733
+ ],
734
+ "description": "Soul Joker clause."
224
735
  },
225
- "tarotCard": {
736
+ "legendaryJoker": {
737
+ "type": "string",
738
+ "enum": [
739
+ "Canio",
740
+ "Triboulet",
741
+ "Yorick",
742
+ "Chicot",
743
+ "Perkeo"
744
+ ],
745
+ "description": "Legendary Joker clause."
746
+ },
747
+ "voucher": {
226
748
  "type": "string",
227
- "description": "Shorthand for TarotCard type."
749
+ "enum": [
750
+ "Overstock",
751
+ "OverstockPlus",
752
+ "ClearanceSale",
753
+ "Liquidation",
754
+ "Hone",
755
+ "GlowUp",
756
+ "RerollSurplus",
757
+ "RerollGlut",
758
+ "CrystalBall",
759
+ "OmenGlobe",
760
+ "Telescope",
761
+ "Observatory",
762
+ "Grabber",
763
+ "NachoTong",
764
+ "Wasteful",
765
+ "Recyclomancy",
766
+ "TarotMerchant",
767
+ "TarotTycoon",
768
+ "PlanetMerchant",
769
+ "PlanetTycoon",
770
+ "SeedMoney",
771
+ "MoneyTree",
772
+ "Blank",
773
+ "Antimatter",
774
+ "MagicTrick",
775
+ "Illusion",
776
+ "Hieroglyph",
777
+ "Petroglyph",
778
+ "DirectorsCut",
779
+ "Retcon",
780
+ "PaintBrush",
781
+ "Palette"
782
+ ],
783
+ "description": "Voucher clause."
228
784
  },
229
- "planet": {
785
+ "vouchers": {
786
+ "type": "array",
787
+ "items": {
788
+ "type": "string"
789
+ },
790
+ "description": "Voucher clause matching any listed voucher names."
791
+ },
792
+ "tarot": {
230
793
  "type": "string",
231
- "description": "Shorthand for PlanetCard type."
794
+ "enum": [
795
+ "TheFool",
796
+ "TheMagician",
797
+ "TheHighPriestess",
798
+ "TheEmpress",
799
+ "TheEmperor",
800
+ "TheHierophant",
801
+ "TheLovers",
802
+ "TheChariot",
803
+ "Justice",
804
+ "TheHermit",
805
+ "TheWheelOfFortune",
806
+ "Strength",
807
+ "TheHangedMan",
808
+ "Death",
809
+ "Temperance",
810
+ "TheDevil",
811
+ "TheTower",
812
+ "TheStar",
813
+ "TheMoon",
814
+ "TheSun",
815
+ "Judgement",
816
+ "TheWorld"
817
+ ],
818
+ "description": "Tarot card clause."
232
819
  },
233
- "planetCard": {
820
+ "tarotCard": {
234
821
  "type": "string",
235
- "description": "Shorthand for PlanetCard type."
822
+ "enum": [
823
+ "TheFool",
824
+ "TheMagician",
825
+ "TheHighPriestess",
826
+ "TheEmpress",
827
+ "TheEmperor",
828
+ "TheHierophant",
829
+ "TheLovers",
830
+ "TheChariot",
831
+ "Justice",
832
+ "TheHermit",
833
+ "TheWheelOfFortune",
834
+ "Strength",
835
+ "TheHangedMan",
836
+ "Death",
837
+ "Temperance",
838
+ "TheDevil",
839
+ "TheTower",
840
+ "TheStar",
841
+ "TheMoon",
842
+ "TheSun",
843
+ "Judgement",
844
+ "TheWorld"
845
+ ],
846
+ "description": "Tarot card clause."
236
847
  },
237
848
  "spectral": {
238
849
  "type": "string",
239
- "description": "Shorthand for SpectralCard type."
850
+ "enum": [
851
+ "Familiar",
852
+ "Grim",
853
+ "Incantation",
854
+ "Talisman",
855
+ "Aura",
856
+ "Wraith",
857
+ "Sigil",
858
+ "Ouija",
859
+ "Ectoplasm",
860
+ "Immolate",
861
+ "Ankh",
862
+ "DejaVu",
863
+ "Hex",
864
+ "Trance",
865
+ "Medium",
866
+ "Cryptid",
867
+ "TheSoul",
868
+ "BlackHole"
869
+ ],
870
+ "description": "Spectral card clause."
240
871
  },
241
872
  "spectralCard": {
242
873
  "type": "string",
243
- "description": "Shorthand for SpectralCard type."
874
+ "enum": [
875
+ "Familiar",
876
+ "Grim",
877
+ "Incantation",
878
+ "Talisman",
879
+ "Aura",
880
+ "Wraith",
881
+ "Sigil",
882
+ "Ouija",
883
+ "Ectoplasm",
884
+ "Immolate",
885
+ "Ankh",
886
+ "DejaVu",
887
+ "Hex",
888
+ "Trance",
889
+ "Medium",
890
+ "Cryptid",
891
+ "TheSoul",
892
+ "BlackHole"
893
+ ],
894
+ "description": "Spectral card clause."
244
895
  },
245
- "standardCard": {
896
+ "planet": {
246
897
  "type": "string",
247
- "description": "Shorthand for StandardCard type."
898
+ "enum": [
899
+ "Mercury",
900
+ "Venus",
901
+ "Earth",
902
+ "Mars",
903
+ "Jupiter",
904
+ "Saturn",
905
+ "Uranus",
906
+ "Neptune",
907
+ "Pluto",
908
+ "PlanetX",
909
+ "Ceres",
910
+ "Eris"
911
+ ],
912
+ "description": "Planet card clause."
913
+ },
914
+ "planetCard": {
915
+ "type": "string",
916
+ "enum": [
917
+ "Mercury",
918
+ "Venus",
919
+ "Earth",
920
+ "Mars",
921
+ "Jupiter",
922
+ "Saturn",
923
+ "Uranus",
924
+ "Neptune",
925
+ "Pluto",
926
+ "PlanetX",
927
+ "Ceres",
928
+ "Eris"
929
+ ],
930
+ "description": "Planet card clause."
248
931
  },
249
932
  "boss": {
250
933
  "type": "string",
251
- "description": "Shorthand for Boss type."
934
+ "enum": [
935
+ "TheClub",
936
+ "TheGoad",
937
+ "TheHead",
938
+ "TheHook",
939
+ "TheManacle",
940
+ "ThePillar",
941
+ "ThePsychic",
942
+ "TheWindow",
943
+ "TheArm",
944
+ "TheFish",
945
+ "TheFlint",
946
+ "TheHouse",
947
+ "TheMark",
948
+ "TheMouth",
949
+ "TheNeedle",
950
+ "TheWall",
951
+ "TheWater",
952
+ "TheWheel",
953
+ "TheEye",
954
+ "TheTooth",
955
+ "ThePlant",
956
+ "TheSerpent",
957
+ "TheOx",
958
+ "AmberAcorn",
959
+ "CeruleanBell",
960
+ "CrimsonHeart",
961
+ "VerdantLeaf",
962
+ "VioletVessel"
963
+ ],
964
+ "description": "Boss clause."
252
965
  },
253
966
  "tag": {
254
967
  "type": "string",
255
- "description": "Shorthand for Tag type."
968
+ "enum": [
969
+ "UncommonTag",
970
+ "RareTag",
971
+ "NegativeTag",
972
+ "FoilTag",
973
+ "HolographicTag",
974
+ "PolychromeTag",
975
+ "InvestmentTag",
976
+ "VoucherTag",
977
+ "BossTag",
978
+ "StandardTag",
979
+ "CharmTag",
980
+ "MeteorTag",
981
+ "BuffoonTag",
982
+ "HandyTag",
983
+ "GarbageTag",
984
+ "EtherealTag",
985
+ "CouponTag",
986
+ "DoubleTag",
987
+ "JuggleTag",
988
+ "D6Tag",
989
+ "TopupTag",
990
+ "SpeedTag",
991
+ "OrbitalTag",
992
+ "EconomyTag"
993
+ ],
994
+ "description": "Tag clause matching either blind position."
256
995
  },
257
996
  "smallBlindTag": {
258
997
  "type": "string",
259
- "description": "Shorthand for SmallBlindTag type."
998
+ "enum": [
999
+ "UncommonTag",
1000
+ "RareTag",
1001
+ "NegativeTag",
1002
+ "FoilTag",
1003
+ "HolographicTag",
1004
+ "PolychromeTag",
1005
+ "InvestmentTag",
1006
+ "VoucherTag",
1007
+ "BossTag",
1008
+ "StandardTag",
1009
+ "CharmTag",
1010
+ "MeteorTag",
1011
+ "BuffoonTag",
1012
+ "HandyTag",
1013
+ "GarbageTag",
1014
+ "EtherealTag",
1015
+ "CouponTag",
1016
+ "DoubleTag",
1017
+ "JuggleTag",
1018
+ "D6Tag",
1019
+ "TopupTag",
1020
+ "SpeedTag",
1021
+ "OrbitalTag",
1022
+ "EconomyTag"
1023
+ ],
1024
+ "description": "Small blind tag clause."
260
1025
  },
261
1026
  "bigBlindTag": {
262
1027
  "type": "string",
263
- "description": "Shorthand for BigBlindTag type."
1028
+ "enum": [
1029
+ "UncommonTag",
1030
+ "RareTag",
1031
+ "NegativeTag",
1032
+ "FoilTag",
1033
+ "HolographicTag",
1034
+ "PolychromeTag",
1035
+ "InvestmentTag",
1036
+ "VoucherTag",
1037
+ "BossTag",
1038
+ "StandardTag",
1039
+ "CharmTag",
1040
+ "MeteorTag",
1041
+ "BuffoonTag",
1042
+ "HandyTag",
1043
+ "GarbageTag",
1044
+ "EtherealTag",
1045
+ "CouponTag",
1046
+ "DoubleTag",
1047
+ "JuggleTag",
1048
+ "D6Tag",
1049
+ "TopupTag",
1050
+ "SpeedTag",
1051
+ "OrbitalTag",
1052
+ "EconomyTag"
1053
+ ],
1054
+ "description": "Big blind tag clause."
1055
+ },
1056
+ "standardCard": {
1057
+ "type": "string",
1058
+ "enum": [
1059
+ "C2",
1060
+ "C3",
1061
+ "C4",
1062
+ "C5",
1063
+ "C6",
1064
+ "C7",
1065
+ "C8",
1066
+ "C9",
1067
+ "C10",
1068
+ "CJ",
1069
+ "CQ",
1070
+ "CK",
1071
+ "CA",
1072
+ "D2",
1073
+ "D3",
1074
+ "D4",
1075
+ "D5",
1076
+ "D6",
1077
+ "D7",
1078
+ "D8",
1079
+ "D9",
1080
+ "D10",
1081
+ "DJ",
1082
+ "DQ",
1083
+ "DK",
1084
+ "DA",
1085
+ "H2",
1086
+ "H3",
1087
+ "H4",
1088
+ "H5",
1089
+ "H6",
1090
+ "H7",
1091
+ "H8",
1092
+ "H9",
1093
+ "H10",
1094
+ "HJ",
1095
+ "HQ",
1096
+ "HK",
1097
+ "HA",
1098
+ "S2",
1099
+ "S3",
1100
+ "S4",
1101
+ "S5",
1102
+ "S6",
1103
+ "S7",
1104
+ "S8",
1105
+ "S9",
1106
+ "S10",
1107
+ "SJ",
1108
+ "SQ",
1109
+ "SK",
1110
+ "SA"
1111
+ ],
1112
+ "description": "Playing card clause."
264
1113
  },
265
1114
  "erraticRank": {
266
1115
  "type": "string",
267
- "description": "Shorthand for ErraticRank type."
1116
+ "enum": [
1117
+ "2",
1118
+ "3",
1119
+ "4",
1120
+ "5",
1121
+ "6",
1122
+ "7",
1123
+ "8",
1124
+ "9",
1125
+ "10",
1126
+ "J",
1127
+ "Jack",
1128
+ "Q",
1129
+ "Queen",
1130
+ "K",
1131
+ "King",
1132
+ "A",
1133
+ "Ace"
1134
+ ],
1135
+ "description": "Erratic deck rank clause."
268
1136
  },
269
1137
  "erraticSuit": {
270
1138
  "type": "string",
271
- "description": "Shorthand for ErraticSuit type."
1139
+ "enum": [
1140
+ "Hearts",
1141
+ "Diamonds",
1142
+ "Clubs",
1143
+ "Spades"
1144
+ ],
1145
+ "description": "Erratic deck suit clause."
272
1146
  },
273
1147
  "erraticCard": {
274
1148
  "type": "string",
275
- "description": "Shorthand for ErraticCard type."
1149
+ "enum": [
1150
+ "C2",
1151
+ "C3",
1152
+ "C4",
1153
+ "C5",
1154
+ "C6",
1155
+ "C7",
1156
+ "C8",
1157
+ "C9",
1158
+ "C10",
1159
+ "CJ",
1160
+ "CQ",
1161
+ "CK",
1162
+ "CA",
1163
+ "D2",
1164
+ "D3",
1165
+ "D4",
1166
+ "D5",
1167
+ "D6",
1168
+ "D7",
1169
+ "D8",
1170
+ "D9",
1171
+ "D10",
1172
+ "DJ",
1173
+ "DQ",
1174
+ "DK",
1175
+ "DA",
1176
+ "H2",
1177
+ "H3",
1178
+ "H4",
1179
+ "H5",
1180
+ "H6",
1181
+ "H7",
1182
+ "H8",
1183
+ "H9",
1184
+ "H10",
1185
+ "HJ",
1186
+ "HQ",
1187
+ "HK",
1188
+ "HA",
1189
+ "S2",
1190
+ "S3",
1191
+ "S4",
1192
+ "S5",
1193
+ "S6",
1194
+ "S7",
1195
+ "S8",
1196
+ "S9",
1197
+ "S10",
1198
+ "SJ",
1199
+ "SQ",
1200
+ "SK",
1201
+ "SA"
1202
+ ],
1203
+ "description": "Erratic deck card clause."
1204
+ },
1205
+ "startingDraw": {
1206
+ "type": "string",
1207
+ "enum": [
1208
+ "C2",
1209
+ "C3",
1210
+ "C4",
1211
+ "C5",
1212
+ "C6",
1213
+ "C7",
1214
+ "C8",
1215
+ "C9",
1216
+ "C10",
1217
+ "CJ",
1218
+ "CQ",
1219
+ "CK",
1220
+ "CA",
1221
+ "D2",
1222
+ "D3",
1223
+ "D4",
1224
+ "D5",
1225
+ "D6",
1226
+ "D7",
1227
+ "D8",
1228
+ "D9",
1229
+ "D10",
1230
+ "DJ",
1231
+ "DQ",
1232
+ "DK",
1233
+ "DA",
1234
+ "H2",
1235
+ "H3",
1236
+ "H4",
1237
+ "H5",
1238
+ "H6",
1239
+ "H7",
1240
+ "H8",
1241
+ "H9",
1242
+ "H10",
1243
+ "HJ",
1244
+ "HQ",
1245
+ "HK",
1246
+ "HA",
1247
+ "S2",
1248
+ "S3",
1249
+ "S4",
1250
+ "S5",
1251
+ "S6",
1252
+ "S7",
1253
+ "S8",
1254
+ "S9",
1255
+ "S10",
1256
+ "SJ",
1257
+ "SQ",
1258
+ "SK",
1259
+ "SA"
1260
+ ],
1261
+ "description": "Starting draw clause."
1262
+ },
1263
+ "event": {
1264
+ "type": "string",
1265
+ "enum": [
1266
+ "LuckyMoney",
1267
+ "LuckyMult",
1268
+ "MisprintMult",
1269
+ "WheelOfFortune",
1270
+ "CavendishExtinct",
1271
+ "GrosMichelExtinct"
1272
+ ],
1273
+ "description": "Event clause."
276
1274
  },
277
1275
  "antes": {
278
1276
  "type": "array",
@@ -281,17 +1279,27 @@
281
1279
  "minimum": 0,
282
1280
  "maximum": 39
283
1281
  },
284
- "description": "Which antes (0-39) to search in"
1282
+ "description": "Which antes to search in."
285
1283
  },
286
1284
  "score": {
287
1285
  "type": "integer",
288
1286
  "minimum": 0,
289
- "default": 1,
290
- "description": "Scoring weight for 'should' clauses"
1287
+ "description": "Score contribution for should clauses.",
1288
+ "default": 1
1289
+ },
1290
+ "min": {
1291
+ "type": "integer",
1292
+ "minimum": 0,
1293
+ "description": "Minimum matches required for this clause."
1294
+ },
1295
+ "max": {
1296
+ "type": "integer",
1297
+ "minimum": 0,
1298
+ "description": "Maximum matches allowed for this clause."
291
1299
  },
292
1300
  "label": {
293
1301
  "type": "string",
294
- "description": "Custom label for display in results"
1302
+ "description": "Custom label for result output."
295
1303
  },
296
1304
  "edition": {
297
1305
  "type": "string",
@@ -301,17 +1309,29 @@
301
1309
  "Polychrome",
302
1310
  "Negative"
303
1311
  ],
304
- "description": "Required edition for the item"
1312
+ "description": "Required edition for matching items."
1313
+ },
1314
+ "stickers": {
1315
+ "type": "array",
1316
+ "items": {
1317
+ "type": "string",
1318
+ "enum": [
1319
+ "Eternal",
1320
+ "Perishable",
1321
+ "Rental"
1322
+ ]
1323
+ },
1324
+ "description": "Required joker stickers."
305
1325
  },
306
1326
  "seal": {
307
1327
  "type": "string",
308
1328
  "enum": [
1329
+ "Gold",
309
1330
  "Red",
310
1331
  "Blue",
311
- "Gold",
312
1332
  "Purple"
313
1333
  ],
314
- "description": "Required seal for playing cards"
1334
+ "description": "Required seal for playing cards."
315
1335
  },
316
1336
  "enhancement": {
317
1337
  "type": "string",
@@ -322,10 +1342,10 @@
322
1342
  "Glass",
323
1343
  "Steel",
324
1344
  "Stone",
325
- "Lucky",
326
- "Gold"
1345
+ "Gold",
1346
+ "Lucky"
327
1347
  ],
328
- "description": "Required enhancement for playing cards"
1348
+ "description": "Required enhancement for playing cards."
329
1349
  },
330
1350
  "rank": {
331
1351
  "type": "string",
@@ -348,7 +1368,7 @@
348
1368
  "A",
349
1369
  "Ace"
350
1370
  ],
351
- "description": "Card rank for playing cards (abbreviation or full name)"
1371
+ "description": "Required rank for playing-card-based clauses."
352
1372
  },
353
1373
  "suit": {
354
1374
  "type": "string",
@@ -358,153 +1378,285 @@
358
1378
  "Clubs",
359
1379
  "Spades"
360
1380
  ],
361
- "description": "Card suit for playing cards"
1381
+ "description": "Required suit for playing-card-based clauses."
1382
+ },
1383
+ "rolls": {
1384
+ "type": "array",
1385
+ "items": {
1386
+ "type": "integer",
1387
+ "minimum": 0
1388
+ },
1389
+ "description": "Event occurrence indices to check."
1390
+ },
1391
+ "shopItems": {
1392
+ "type": "array",
1393
+ "items": {
1394
+ "type": "integer",
1395
+ "minimum": 0,
1396
+ "maximum": 1023
1397
+ },
1398
+ "description": "Clause-level source mapping for shop item slots."
1399
+ },
1400
+ "boosterPacks": {
1401
+ "type": "array",
1402
+ "items": {
1403
+ "type": "integer",
1404
+ "minimum": 0,
1405
+ "maximum": 5
1406
+ },
1407
+ "description": "Clause-level source mapping for pack offering slots."
1408
+ },
1409
+ "minShopSlot": {
1410
+ "type": "integer",
1411
+ "minimum": 0,
1412
+ "description": "Minimum shop slot index for range generation.",
1413
+ "maximum": 1023
1414
+ },
1415
+ "maxShopSlot": {
1416
+ "type": "integer",
1417
+ "minimum": 0,
1418
+ "description": "Maximum shop slot index for range generation.",
1419
+ "maximum": 1023
1420
+ },
1421
+ "minPackSlot": {
1422
+ "type": "integer",
1423
+ "minimum": 0,
1424
+ "description": "Minimum pack slot index for range generation.",
1425
+ "maximum": 5
1426
+ },
1427
+ "maxPackSlot": {
1428
+ "type": "integer",
1429
+ "minimum": 0,
1430
+ "description": "Maximum pack slot index for range generation.",
1431
+ "maximum": 5
362
1432
  },
363
1433
  "sources": {
364
1434
  "type": "object",
1435
+ "description": "Source mapping that describes where the clause may be satisfied.",
365
1436
  "properties": {
366
1437
  "shopItems": {
367
1438
  "type": "array",
368
1439
  "items": {
369
- "type": "integer"
1440
+ "type": "integer",
1441
+ "minimum": 0,
1442
+ "maximum": 1023
370
1443
  },
371
- "description": "Shop slot indices (0-based). If empty array [], will be populated from minshopItem/maxshopItem if provided."
1444
+ "description": "Shop item slot indices."
372
1445
  },
373
1446
  "boosterPacks": {
374
1447
  "type": "array",
375
1448
  "items": {
376
- "type": "integer"
1449
+ "type": "integer",
1450
+ "minimum": 0,
1451
+ "maximum": 5
377
1452
  },
378
- "description": "Pack slot indices (0-based). If empty array [], will be populated from minboosterPack/maxboosterPack if provided."
1453
+ "description": "Pack offering slot indices."
379
1454
  },
380
- "minshopItem": {
1455
+ "minShopSlot": {
381
1456
  "type": "integer",
382
1457
  "minimum": 0,
383
- "maximum": 1023,
384
- "description": "Minimum shop slot index (inclusive). If specified with maxshopItem, generates shopItems array [minshopItem..maxshopItem]."
1458
+ "description": "Minimum shop slot index for range generation.",
1459
+ "maximum": 1023
385
1460
  },
386
- "maxshopItem": {
1461
+ "maxShopSlot": {
387
1462
  "type": "integer",
388
1463
  "minimum": 0,
389
- "maximum": 1023,
390
- "description": "Maximum shop slot index (inclusive). If specified with minshopItem, generates shopItems array [minshopItem..maxshopItem]."
1464
+ "description": "Maximum shop slot index for range generation.",
1465
+ "maximum": 1023
391
1466
  },
392
- "minboosterPack": {
1467
+ "minPackSlot": {
393
1468
  "type": "integer",
394
1469
  "minimum": 0,
395
- "maximum": 5,
396
- "description": "Minimum pack slot index (inclusive). If specified with maxboosterPack, generates boosterPacks array [minboosterPack..maxboosterPack]."
1470
+ "description": "Minimum pack slot index for range generation.",
1471
+ "maximum": 5
397
1472
  },
398
- "maxboosterPack": {
1473
+ "maxPackSlot": {
399
1474
  "type": "integer",
400
1475
  "minimum": 0,
401
- "maximum": 5,
402
- "description": "Maximum pack slot index (inclusive). If specified with minboosterPack, generates boosterPacks array [minboosterPack..maxboosterPack]."
1476
+ "description": "Maximum pack slot index for range generation.",
1477
+ "maximum": 5
403
1478
  },
404
1479
  "tags": {
405
1480
  "type": "boolean",
406
- "description": "Whether item can come from tags (Rare Tag, Uncommon Tag, Negative Tag)"
1481
+ "description": "Allow tag-based sources."
407
1482
  },
408
1483
  "requireMega": {
409
1484
  "type": "boolean",
410
- "description": "Whether pack must be a Mega pack (for pack slots 4-5)"
1485
+ "description": "Require Mega pack sources where applicable."
411
1486
  },
412
1487
  "judgement": {
413
1488
  "type": "array",
414
1489
  "items": {
415
- "type": "integer"
1490
+ "type": "integer",
1491
+ "minimum": 0
416
1492
  },
417
- "description": "Judgement tarot joker roll indices (e.g. [0, 1] for first two uses)"
1493
+ "description": "Judgement roll indices."
418
1494
  },
419
1495
  "rareTag": {
420
1496
  "type": "array",
421
1497
  "items": {
422
- "type": "integer"
1498
+ "type": "integer",
1499
+ "minimum": 0
423
1500
  },
424
- "description": "Rare tag joker roll indices (e.g. [0] for first rare tag)"
1501
+ "description": "Rare Tag roll indices."
425
1502
  },
426
1503
  "uncommonTag": {
427
1504
  "type": "array",
428
1505
  "items": {
429
- "type": "integer"
1506
+ "type": "integer",
1507
+ "minimum": 0
1508
+ },
1509
+ "description": "Uncommon Tag roll indices."
1510
+ },
1511
+ "wraith": {
1512
+ "type": "array",
1513
+ "items": {
1514
+ "type": "integer",
1515
+ "minimum": 0
430
1516
  },
431
- "description": "Uncommon tag joker roll indices (e.g. [0] for first uncommon tag)"
1517
+ "description": "Wraith roll indices."
1518
+ },
1519
+ "soulCard": {
1520
+ "type": "array",
1521
+ "items": {
1522
+ "type": "integer",
1523
+ "minimum": 0
1524
+ },
1525
+ "description": "Soul card roll indices."
432
1526
  },
433
1527
  "riffRaff": {
434
1528
  "type": "array",
435
1529
  "items": {
436
- "type": "integer"
1530
+ "type": "integer",
1531
+ "minimum": 0
437
1532
  },
438
- "description": "RiffRaff joker roll indices (e.g. [0, 1] for first two RiffRaff jokers - RiffRaff creates 2 jokers)"
1533
+ "description": "Riff-Raff roll indices."
439
1534
  },
440
1535
  "purpleSealOrEightBall": {
441
1536
  "type": "array",
442
1537
  "items": {
443
- "type": "integer"
1538
+ "type": "integer",
1539
+ "minimum": 0
444
1540
  },
445
- "description": "Purple Seal / 8Ball tarot card roll indices (e.g. [0] for first tarot from Purple Seal or 8Ball - both use same PRNG key)"
1541
+ "description": "Purple Seal or 8 Ball tarot roll indices."
446
1542
  },
447
1543
  "emperor": {
448
1544
  "type": "array",
449
1545
  "items": {
450
- "type": "integer"
1546
+ "type": "integer",
1547
+ "minimum": 0
451
1548
  },
452
- "description": "Emperor tarot card roll indices (e.g. [0, 1] for first two tarot cards from Emperor - Emperor creates 2 tarot cards)"
1549
+ "description": "Emperor roll indices."
453
1550
  },
454
1551
  "sixthSense": {
455
1552
  "type": "array",
456
1553
  "items": {
457
- "type": "integer"
1554
+ "type": "integer",
1555
+ "minimum": 0
458
1556
  },
459
- "description": "SixthSense spectral card roll indices (e.g. [0] for first spectral card from SixthSense joker)"
1557
+ "description": "Sixth Sense roll indices."
460
1558
  },
461
1559
  "seance": {
462
1560
  "type": "array",
463
1561
  "items": {
464
- "type": "integer"
1562
+ "type": "integer",
1563
+ "minimum": 0
1564
+ },
1565
+ "description": "Seance roll indices."
1566
+ },
1567
+ "certificate": {
1568
+ "type": "array",
1569
+ "items": {
1570
+ "type": "integer",
1571
+ "minimum": 0
1572
+ },
1573
+ "description": "Certificate roll indices."
1574
+ },
1575
+ "incantation": {
1576
+ "type": "array",
1577
+ "items": {
1578
+ "type": "integer",
1579
+ "minimum": 0
1580
+ },
1581
+ "description": "Incantation roll indices."
1582
+ },
1583
+ "familiar": {
1584
+ "type": "array",
1585
+ "items": {
1586
+ "type": "integer",
1587
+ "minimum": 0
1588
+ },
1589
+ "description": "Familiar roll indices."
1590
+ },
1591
+ "grim": {
1592
+ "type": "array",
1593
+ "items": {
1594
+ "type": "integer",
1595
+ "minimum": 0
465
1596
  },
466
- "description": "Seance spectral card roll indices (e.g. [0, 1] for first two spectral cards from Seance joker)"
1597
+ "description": "Grim roll indices."
1598
+ },
1599
+ "deckDraw": {
1600
+ "type": "array",
1601
+ "items": {
1602
+ "type": "integer",
1603
+ "minimum": 0
1604
+ },
1605
+ "description": "Deck draw positions."
467
1606
  },
468
1607
  "uncommonShopJokers": {
469
1608
  "type": "array",
470
1609
  "items": {
471
- "type": "integer"
1610
+ "type": "integer",
1611
+ "minimum": 0
472
1612
  },
473
- "description": "Raw uncommon shop joker stream roll indices - FAST pre-filter that bypasses shop item type check (e.g. [0, 1, 2] for first 3 uncommon jokers in stream)"
1613
+ "description": "Raw uncommon shop joker stream positions."
474
1614
  },
475
1615
  "rareShopJokers": {
476
1616
  "type": "array",
477
1617
  "items": {
478
- "type": "integer"
1618
+ "type": "integer",
1619
+ "minimum": 0
479
1620
  },
480
- "description": "Raw rare shop joker stream roll indices - FAST pre-filter that bypasses shop item type check (e.g. [0] for first rare joker in stream)"
1621
+ "description": "Raw rare shop joker stream positions."
481
1622
  },
482
1623
  "commonShopJokers": {
483
1624
  "type": "array",
484
1625
  "items": {
485
- "type": "integer"
1626
+ "type": "integer",
1627
+ "minimum": 0
1628
+ },
1629
+ "description": "Raw common shop joker stream positions."
1630
+ },
1631
+ "allShopJokers": {
1632
+ "type": "array",
1633
+ "items": {
1634
+ "type": "integer",
1635
+ "minimum": 0
486
1636
  },
487
- "description": "Raw common shop joker stream roll indices - FAST pre-filter that bypasses shop item type check (e.g. [0, 1] for first 2 common jokers in stream)"
1637
+ "description": "Raw shop joker stream positions across all rarities."
488
1638
  }
489
1639
  },
490
- "additionalProperties": false,
491
- "description": "Where the item can be found - object with source-specific roll indices. If sources: is specified (even with empty arrays), the Sources object will exist after processing."
1640
+ "additionalProperties": false
492
1641
  },
493
1642
  "and": {
494
1643
  "type": "array",
1644
+ "description": "Nested AND clause list.",
495
1645
  "items": {
496
1646
  "$ref": "#/definitions/clause"
497
- },
498
- "description": "Nested AND conditions"
1647
+ }
499
1648
  },
500
1649
  "or": {
501
1650
  "type": "array",
1651
+ "description": "Nested OR clause list.",
502
1652
  "items": {
503
1653
  "$ref": "#/definitions/clause"
504
- },
505
- "description": "Nested OR conditions (any match)"
1654
+ }
506
1655
  }
507
- }
1656
+ },
1657
+ "additionalProperties": false,
1658
+ "minProperties": 1
508
1659
  }
509
- }
510
- }
1660
+ },
1661
+ "additionalProperties": false
1662
+ }