@my-swu/simulator-client 0.1.5 → 0.1.6

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 (36) hide show
  1. package/dist/generated/schemas.js +267 -671
  2. package/dist/generated/types/admin-match-debug-bundle.d.ts +1 -1
  3. package/dist/generated/types/admin-match-replay-response.d.ts +1 -1
  4. package/dist/generated/types/client-message.d.ts +1 -1
  5. package/dist/generated/types/common.d.ts +79 -260
  6. package/dist/generated/types/format-event-response.d.ts +1 -1
  7. package/dist/generated/types/game-command.d.ts +1 -1
  8. package/dist/generated/types/game-event.d.ts +1 -1
  9. package/dist/generated/types/game-state.d.ts +1 -1
  10. package/dist/generated/types/get-match-response.d.ts +1 -1
  11. package/dist/generated/types/list-active-ai-matches-response.d.ts +1 -1
  12. package/dist/generated/types/lobby-access-response.d.ts +1 -1
  13. package/dist/generated/types/lobby-server-message.d.ts +1 -1
  14. package/dist/generated/types/match-access-recovery-response.d.ts +1 -1
  15. package/dist/generated/types/match-access-response.d.ts +1 -1
  16. package/dist/generated/types/match-history-replay-response.d.ts +1 -1
  17. package/dist/generated/types/match-recovery-response.d.ts +1 -1
  18. package/dist/generated/types/match-spectator-access-response.d.ts +1 -1
  19. package/dist/generated/types/rematch-match-response.d.ts +1 -1
  20. package/dist/generated/types/restore-history-response.d.ts +1 -1
  21. package/dist/generated/types/restore-match-save-response.d.ts +1 -1
  22. package/dist/generated/types/server-message.d.ts +1 -1
  23. package/dist/generated/types/shared-match-history-replay-response.d.ts +1 -1
  24. package/dist/generated/types/submit-match-deck-response.d.ts +1 -1
  25. package/dist/generated/types/tournament-room-access-response.d.ts +1 -1
  26. package/dist/generated/types/tournament-room-server-message.d.ts +1 -1
  27. package/dist/generated/types/undo-match-response.d.ts +1 -1
  28. package/dist/generated/version.d.ts +1 -1
  29. package/dist/generated/version.js +1 -1
  30. package/dist/index.d.ts +1 -1
  31. package/dist/types.d.ts +1 -1
  32. package/package.json +1 -1
  33. package/schema/common.schema.json +259 -671
  34. package/schema/game-state.schema.json +8 -0
  35. package/schema/manifest.json +1 -1
  36. package/schema/match-save-payload.schema.json +1 -1
@@ -266,7 +266,7 @@ export const sdkSchemaCommon = {
266
266
  ]
267
267
  },
268
268
  "AbilityWindow": {
269
- "description": "Trigger window for a parsed ability. Identifies WHEN the ability\nfires; the WHAT is carried by `TriggeredEffect`.",
269
+ "description": "Trigger window for a parsed ability. Identifies WHEN the ability\nfires; the WHAT is carried by `TriggeredEffect`.\n\nThis type is on the public SDK schema — it reaches `GameState` through\n`PendingAbilityView.window` and `GameEvent` — but only ever server to\nclient: no `GameCommand` carries one, so a consumer reads it and never\nconstructs it. The two variants that carry a [`crate::effect::UnitFilter`]\nare therefore exported opaquely, the way `MatchSavePayload::state` is: the\nvariant discriminant stays on the wire so a UI can still switch on the\nwindow, while the engine filter behind it does not pin ~60 internal fields\nand their whole reference closure into the SDK type surface.",
270
270
  "oneOf": [
271
271
  {
272
272
  "type": "string",
@@ -333,12 +333,10 @@ export const sdkSchemaCommon = {
333
333
  "const": "WhenFriendlyUnitDealtDamageAndSurvives"
334
334
  },
335
335
  {
336
- "description": "Fires when a friendly Unit matching the typed filter takes combat damage\nand remains in play.",
336
+ "description": "Fires when a friendly Unit matching the typed filter takes combat damage\nand remains in play.\n\nOpaque to the public schema — see the type doc.",
337
337
  "type": "object",
338
338
  "properties": {
339
- "WhenFriendlyUnitDealtCombatDamageAndSurvives": {
340
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/UnitFilter"
341
- }
339
+ "WhenFriendlyUnitDealtCombatDamageAndSurvives": true
342
340
  },
343
341
  "additionalProperties": false,
344
342
  "required": [
@@ -413,12 +411,10 @@ export const sdkSchemaCommon = {
413
411
  "const": "WhenThisUnitWouldBeCaptured"
414
412
  },
415
413
  {
416
- "description": "Fires when a Unit matching the typed filter is defeated.",
414
+ "description": "Fires when a Unit matching the typed filter is defeated.\n\nOpaque to the public schema — see the type doc.",
417
415
  "type": "object",
418
416
  "properties": {
419
- "WhenUnitDefeated": {
420
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/UnitFilter"
421
- }
417
+ "WhenUnitDefeated": true
422
418
  },
423
419
  "additionalProperties": false,
424
420
  "required": [
@@ -3147,32 +3143,6 @@ export const sdkSchemaCommon = {
3147
3143
  "setCode"
3148
3144
  ]
3149
3145
  },
3150
- "DynamicPowerLimit": {
3151
- "description": "Typed game-state source for a dynamic Unit power ceiling.",
3152
- "oneOf": [
3153
- {
3154
- "description": "Number of upgrades attached across units with this controller relation.",
3155
- "type": "object",
3156
- "properties": {
3157
- "UpgradesOnUnits": {
3158
- "type": "object",
3159
- "properties": {
3160
- "relation": {
3161
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/RelationFilter"
3162
- }
3163
- },
3164
- "required": [
3165
- "relation"
3166
- ]
3167
- }
3168
- },
3169
- "additionalProperties": false,
3170
- "required": [
3171
- "UpgradesOnUnits"
3172
- ]
3173
- }
3174
- ]
3175
- },
3176
3146
  "EffectCardScopeView": {
3177
3147
  "description": "Public card subset affected by a play or cost modifier.",
3178
3148
  "oneOf": [
@@ -7388,6 +7358,14 @@ export const sdkSchemaCommon = {
7388
7358
  "type": "boolean",
7389
7359
  "default": false
7390
7360
  },
7361
+ "playgroundActionAbilities": {
7362
+ "description": "Host-only Playground ability projection. Empty for normal matches and\nwhile a resolution owns the command boundary.",
7363
+ "type": "array",
7364
+ "default": [],
7365
+ "items": {
7366
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundActionAbilityView"
7367
+ }
7368
+ },
7391
7369
  "playgroundDeckCardIds": {
7392
7370
  "description": "Printed cards supplied by every configured Playground deck.",
7393
7371
  "type": "array",
@@ -10131,7 +10109,7 @@ export const sdkSchemaCommon = {
10131
10109
  "description": "The serialized engine state. Catalog `Arc`s are skip-default here\nand grafted on by the restore path before the state goes live.\n\nOpaque to the public schema — SDK consumers should treat this as an\nimplementation-defined object that round-trips byte-for-byte. Pinning\nevery engine sub-struct into the schema would couple the SDK type\nsurface to the entire engine, which we explicitly do not want."
10132
10110
  },
10133
10111
  "version": {
10134
- "description": "Wire-format version. Always [`MATCH_SAVE_VERSION`] for newly minted\npayloads; restore rejects mismatches.",
10112
+ "description": "Wire-format version. Always [`MATCH_SAVE_VERSION`] for newly minted\npayloads; restore accepts every [`SUPPORTED_SAVE_VERSIONS`] entry and\nrejects anything else.",
10135
10113
  "type": "integer",
10136
10114
  "format": "uint8",
10137
10115
  "maximum": 255,
@@ -11538,60 +11516,150 @@ export const sdkSchemaCommon = {
11538
11516
  "left"
11539
11517
  ]
11540
11518
  },
11541
- "PlayerTargetPattern": {
11542
- "oneOf": [
11543
- {
11544
- "type": "string",
11545
- "enum": [
11546
- "SelfPlayer",
11547
- "EachPlayer",
11548
- "OpponentPlayer",
11549
- "ChosenOpponent",
11550
- "ChosenPlayer",
11551
- "DefendingPlayer",
11552
- "RememberedPlayer",
11553
- "RememberedUnitController",
11554
- "OtherThanRememberedPlayer"
11555
- ]
11556
- },
11557
- {
11558
- "description": "Every opponent independently. Unlike `OpponentPlayer`, this never\ncollapses a multiplayer instruction into one opponent.",
11559
- "type": "string",
11560
- "const": "EachOpponent"
11519
+ "PlaygroundActionAbilityView": {
11520
+ "description": "Playground-only action ability that may be executed without normal action\ntiming, usage, condition, or cost gates.",
11521
+ "type": "object",
11522
+ "properties": {
11523
+ "label": {
11524
+ "type": "string"
11561
11525
  },
11562
- {
11563
- "description": "Every opponent whose base the source player damaged during this phase.",
11564
- "type": "string",
11565
- "const": "EachOpponentWhoseBaseDamagedBySourceThisPhase"
11526
+ "seat": {
11527
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11566
11528
  },
11567
- {
11568
- "description": "Controller of the target selected by a preceding effect.",
11569
- "type": "string",
11570
- "const": "RememberedTargetController"
11529
+ "source": {
11530
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/ActionAbilitySource"
11571
11531
  },
11532
+ "targetGroups": {
11533
+ "type": "array",
11534
+ "items": {
11535
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/TargetSelectionGroup"
11536
+ }
11537
+ }
11538
+ },
11539
+ "required": [
11540
+ "seat",
11541
+ "source",
11542
+ "label",
11543
+ "targetGroups"
11544
+ ]
11545
+ },
11546
+ "PlaygroundCardStateChange": {
11547
+ "description": "One in-play card whose Playground-editable state may be set exactly.\n\nEvery field is a target value rather than a delta, so a client that shows\ncurrent counts can submit what the board should look like instead of\nreconstructing the sequence of adjustments that gets there. Anything the\nengine derives — keywords, clone identity, controller, arena, card text —\nstays out of this patch and remains read-only.",
11548
+ "oneOf": [
11572
11549
  {
11573
- "description": "Player at one relative multiplayer seat from the remembered player.",
11550
+ "description": "Forces unit state directly, bypassing normal gameplay restrictions.\n\nAbsent fields are left untouched; at least one must be present.",
11574
11551
  "type": "object",
11575
11552
  "properties": {
11576
- "RelativeToRememberedPlayer": {
11577
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/SeatDirection"
11553
+ "advantageTokens": {
11554
+ "type": [
11555
+ "integer",
11556
+ "null"
11557
+ ],
11558
+ "format": "uint8",
11559
+ "maximum": 255,
11560
+ "minimum": 0
11561
+ },
11562
+ "damage": {
11563
+ "type": [
11564
+ "integer",
11565
+ "null"
11566
+ ],
11567
+ "format": "int16",
11568
+ "maximum": 32767,
11569
+ "minimum": -32768
11570
+ },
11571
+ "experienceTokens": {
11572
+ "type": [
11573
+ "integer",
11574
+ "null"
11575
+ ],
11576
+ "format": "uint8",
11577
+ "maximum": 255,
11578
+ "minimum": 0
11579
+ },
11580
+ "ready": {
11581
+ "description": "`true` readies the unit even while an effect forbids readying.",
11582
+ "type": [
11583
+ "boolean",
11584
+ "null"
11585
+ ]
11586
+ },
11587
+ "shieldTokens": {
11588
+ "type": [
11589
+ "integer",
11590
+ "null"
11591
+ ],
11592
+ "format": "uint8",
11593
+ "maximum": 255,
11594
+ "minimum": 0
11595
+ },
11596
+ "type": {
11597
+ "type": "string",
11598
+ "const": "unit"
11599
+ },
11600
+ "unitId": {
11601
+ "type": "integer",
11602
+ "format": "uint64",
11603
+ "minimum": 0
11578
11604
  }
11579
11605
  },
11580
- "additionalProperties": false,
11581
11606
  "required": [
11582
- "RelativeToRememberedPlayer"
11607
+ "type",
11608
+ "unitId"
11583
11609
  ]
11584
11610
  },
11585
11611
  {
11586
- "description": "Controller of the lower printed-cost Unit in a remembered pair.",
11587
- "type": "string",
11588
- "const": "ControllerOfLowerCostRememberedUnit"
11612
+ "description": "Sets exact base damage; a base carries no other editable state.",
11613
+ "type": "object",
11614
+ "properties": {
11615
+ "damage": {
11616
+ "type": "integer",
11617
+ "format": "int16",
11618
+ "maximum": 32767,
11619
+ "minimum": -32768
11620
+ },
11621
+ "seat": {
11622
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11623
+ },
11624
+ "type": {
11625
+ "type": "string",
11626
+ "const": "base"
11627
+ }
11628
+ },
11629
+ "required": [
11630
+ "type",
11631
+ "seat",
11632
+ "damage"
11633
+ ]
11589
11634
  }
11590
11635
  ]
11591
11636
  },
11592
11637
  "PlaygroundCommand": {
11593
11638
  "description": "Host-authorized raw scenario mutation for a Playground match.",
11594
11639
  "oneOf": [
11640
+ {
11641
+ "description": "Adds a fresh, ready physical card to a player's resource row.",
11642
+ "type": "object",
11643
+ "properties": {
11644
+ "cardId": {
11645
+ "type": "integer",
11646
+ "format": "uint32",
11647
+ "minimum": 0
11648
+ },
11649
+ "seat": {
11650
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11651
+ },
11652
+ "type": {
11653
+ "type": "string",
11654
+ "const": "addResource"
11655
+ }
11656
+ },
11657
+ "required": [
11658
+ "type",
11659
+ "seat",
11660
+ "cardId"
11661
+ ]
11662
+ },
11595
11663
  {
11596
11664
  "type": "object",
11597
11665
  "properties": {
@@ -11678,6 +11746,53 @@ export const sdkSchemaCommon = {
11678
11746
  "cardId"
11679
11747
  ]
11680
11748
  },
11749
+ {
11750
+ "description": "Resolves an action ability without its normal activation gates or costs.",
11751
+ "type": "object",
11752
+ "properties": {
11753
+ "modeIndices": {
11754
+ "type": "array",
11755
+ "items": {
11756
+ "type": "integer",
11757
+ "format": "uint",
11758
+ "minimum": 0
11759
+ }
11760
+ },
11761
+ "seat": {
11762
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11763
+ },
11764
+ "source": {
11765
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/ActionAbilitySource"
11766
+ },
11767
+ "target": {
11768
+ "anyOf": [
11769
+ {
11770
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AbilityTarget"
11771
+ },
11772
+ {
11773
+ "type": "null"
11774
+ }
11775
+ ]
11776
+ },
11777
+ "targets": {
11778
+ "type": "array",
11779
+ "items": {
11780
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AbilityTarget"
11781
+ }
11782
+ },
11783
+ "type": {
11784
+ "type": "string",
11785
+ "const": "executeActionAbility"
11786
+ }
11787
+ },
11788
+ "required": [
11789
+ "type",
11790
+ "seat",
11791
+ "source",
11792
+ "targets",
11793
+ "modeIndices"
11794
+ ]
11795
+ },
11681
11796
  {
11682
11797
  "type": "object",
11683
11798
  "properties": {
@@ -11701,6 +11816,23 @@ export const sdkSchemaCommon = {
11701
11816
  "amount"
11702
11817
  ]
11703
11818
  },
11819
+ {
11820
+ "description": "Sets several editable fields of one in-play card in a single atomic edit.",
11821
+ "type": "object",
11822
+ "properties": {
11823
+ "change": {
11824
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundCardStateChange"
11825
+ },
11826
+ "type": {
11827
+ "type": "string",
11828
+ "const": "changeCardState"
11829
+ }
11830
+ },
11831
+ "required": [
11832
+ "type",
11833
+ "change"
11834
+ ]
11835
+ },
11704
11836
  {
11705
11837
  "type": "object",
11706
11838
  "properties": {
@@ -11744,6 +11876,56 @@ export const sdkSchemaCommon = {
11744
11876
  "cardId",
11745
11877
  "captorUnitId"
11746
11878
  ]
11879
+ },
11880
+ {
11881
+ "type": "object",
11882
+ "properties": {
11883
+ "cardId": {
11884
+ "type": "integer",
11885
+ "format": "uint32",
11886
+ "minimum": 0
11887
+ },
11888
+ "leaderIndex": {
11889
+ "type": "integer",
11890
+ "format": "uint",
11891
+ "minimum": 0
11892
+ },
11893
+ "seat": {
11894
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11895
+ },
11896
+ "type": {
11897
+ "type": "string",
11898
+ "const": "swapLeader"
11899
+ }
11900
+ },
11901
+ "required": [
11902
+ "type",
11903
+ "seat",
11904
+ "leaderIndex",
11905
+ "cardId"
11906
+ ]
11907
+ },
11908
+ {
11909
+ "type": "object",
11910
+ "properties": {
11911
+ "cardId": {
11912
+ "type": "integer",
11913
+ "format": "uint32",
11914
+ "minimum": 0
11915
+ },
11916
+ "seat": {
11917
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11918
+ },
11919
+ "type": {
11920
+ "type": "string",
11921
+ "const": "swapBase"
11922
+ }
11923
+ },
11924
+ "required": [
11925
+ "type",
11926
+ "seat",
11927
+ "cardId"
11928
+ ]
11747
11929
  }
11748
11930
  ]
11749
11931
  },
@@ -11827,14 +12009,6 @@ export const sdkSchemaCommon = {
11827
12009
  }
11828
12010
  ]
11829
12011
  },
11830
- "PresenceFilter": {
11831
- "type": "string",
11832
- "enum": [
11833
- "Any",
11834
- "Required",
11835
- "Forbidden"
11836
- ]
11837
- },
11838
12012
  "PromptProvenanceView": {
11839
12013
  "description": "Stable parent/stage identity shared by every prompt opened during an effect.",
11840
12014
  "type": "object",
@@ -12689,6 +12863,7 @@ export const sdkSchemaCommon = {
12689
12863
  ]
12690
12864
  },
12691
12865
  "RelationFilter": {
12866
+ "description": "Restricts a target by controller relation to the effect source.",
12692
12867
  "type": "string",
12693
12868
  "enum": [
12694
12869
  "Any",
@@ -12799,14 +12974,6 @@ export const sdkSchemaCommon = {
12799
12974
  "four"
12800
12975
  ]
12801
12976
  },
12802
- "SeatDirection": {
12803
- "description": "Relative multiplayer seat direction.",
12804
- "type": "string",
12805
- "enum": [
12806
- "Left",
12807
- "Right"
12808
- ]
12809
- },
12810
12977
  "SeatOfferIntent": {
12811
12978
  "description": "Per-seat stance on a two-sided post-game offer.\n\nBoth post-game offers (extending a finished single game into a series, and\nstarting a rematch) need the same three-state answer from every seat, and a\nseat that answers twice must overwrite its previous answer rather than\nstack a second one — hence one shared enum instead of a pair of booleans.",
12812
12979
  "oneOf": [
@@ -13061,26 +13228,11 @@ export const sdkSchemaCommon = {
13061
13228
  "mulliganTaken"
13062
13229
  ]
13063
13230
  },
13064
- "SelectionScope": {
13065
- "description": "How far back an `exclude_previously_selected` filter looks.",
13231
+ "SeriesEndReason": {
13232
+ "description": "Public reason a match series ended.",
13066
13233
  "oneOf": [
13067
13234
  {
13068
- "description": "Every selection recorded since the resolving effect began.\n\nThis is what printed \"another\" / \"a third\" mean: the choices are\ndistinct across the whole ability, not merely against the last one.",
13069
- "type": "string",
13070
- "const": "ThisEffect"
13071
- },
13072
- {
13073
- "description": "Only the selections recorded by the clause currently resolving.\n\nA later clause of the same effect starts a new clause id, so its choices\nmay legally repeat a target an earlier clause used.",
13074
- "type": "string",
13075
- "const": "ThisClause"
13076
- }
13077
- ]
13078
- },
13079
- "SeriesEndReason": {
13080
- "description": "Public reason a match series ended.",
13081
- "oneOf": [
13082
- {
13083
- "description": "A one-game match completed.",
13235
+ "description": "A one-game match completed.",
13084
13236
  "type": "string",
13085
13237
  "const": "singleGame"
13086
13238
  },
@@ -14519,14 +14671,6 @@ export const sdkSchemaCommon = {
14519
14671
  }
14520
14672
  ]
14521
14673
  },
14522
- "UniquenessFilter": {
14523
- "type": "string",
14524
- "enum": [
14525
- "Any",
14526
- "Unique",
14527
- "NonUnique"
14528
- ]
14529
- },
14530
14674
  "UnitAbilitySuppressionView": {
14531
14675
  "type": "string",
14532
14676
  "enum": [
@@ -14564,562 +14708,6 @@ export const sdkSchemaCommon = {
14564
14708
  "damage"
14565
14709
  ]
14566
14710
  },
14567
- "UnitExtremum": {
14568
- "oneOf": [
14569
- {
14570
- "type": "string",
14571
- "enum": [
14572
- "LeastRemainingHp"
14573
- ]
14574
- },
14575
- {
14576
- "description": "Selects the unit(s) with the highest effective power.",
14577
- "type": "string",
14578
- "const": "MostPower"
14579
- },
14580
- {
14581
- "description": "Selects every unit tied for highest printed cost in filtered set.",
14582
- "type": "string",
14583
- "const": "HighestPrintedCost"
14584
- }
14585
- ]
14586
- },
14587
- "UnitFilter": {
14588
- "type": "object",
14589
- "properties": {
14590
- "alternatives": {
14591
- "description": "Matches when any complete alternative filter matches.\n\nThis keeps `one_of((unit_selector_a, unit_selector_b))` orthogonal\nwithout flattening distinct restrictions into one lossy filter.",
14592
- "type": "array",
14593
- "default": [],
14594
- "items": {
14595
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/UnitFilter"
14596
- }
14597
- },
14598
- "arena": {
14599
- "anyOf": [
14600
- {
14601
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/CardArena"
14602
- },
14603
- {
14604
- "type": "null"
14605
- }
14606
- ]
14607
- },
14608
- "attacked_base_this_phase": {
14609
- "type": "boolean"
14610
- },
14611
- "controller": {
14612
- "description": "Requires current control by one typed player independently from the\nbroad source-relative relation.",
14613
- "anyOf": [
14614
- {
14615
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlayerTargetPattern"
14616
- },
14617
- {
14618
- "type": "null"
14619
- }
14620
- ],
14621
- "default": null
14622
- },
14623
- "controller_is_another_player": {
14624
- "description": "Marks a count whose Units must all be controlled by one other player.\n\nThis is consumed by `Condition::AnotherPlayerControlsUnitsAtLeast`\nbefore the filter reaches ordinary target matching.",
14625
- "type": "boolean",
14626
- "default": false
14627
- },
14628
- "controller_is_remembered_player": {
14629
- "type": "boolean"
14630
- },
14631
- "dealt_base_damage_this_phase": {
14632
- "type": "boolean"
14633
- },
14634
- "different_arena_from_source": {
14635
- "description": "Matches a Unit in the arena opposite the resolving source Unit.",
14636
- "type": "boolean",
14637
- "default": false
14638
- },
14639
- "different_aspect_from_remembered_card": {
14640
- "type": "boolean"
14641
- },
14642
- "eligible_for_remembered_upgrade": {
14643
- "description": "Requires legal attachment for Upgrade retained by preceding choice.",
14644
- "type": "boolean",
14645
- "default": false
14646
- },
14647
- "exact_cost": {
14648
- "type": [
14649
- "integer",
14650
- "null"
14651
- ],
14652
- "format": "uint8",
14653
- "maximum": 255,
14654
- "minimum": 0
14655
- },
14656
- "exact_cost_same_as_remembered_cost": {
14657
- "description": "Only matches units whose cost equals context.remembered_unit_cost.",
14658
- "type": "boolean",
14659
- "default": false
14660
- },
14661
- "exact_power_equal_ready_resources": {
14662
- "type": "boolean"
14663
- },
14664
- "exact_remaining_hp_equal_ready_resources": {
14665
- "type": "boolean"
14666
- },
14667
- "exact_title": {
14668
- "type": [
14669
- "string",
14670
- "null"
14671
- ]
14672
- },
14673
- "exact_titles_any": {
14674
- "description": "Matches any unit whose title is in this list. When combined with\nrequired_traits_any, either a matching title or trait satisfies the\nname/trait requirement.",
14675
- "type": "array",
14676
- "items": {
14677
- "type": "string"
14678
- }
14679
- },
14680
- "exclude_attached_unit": {
14681
- "description": "Excludes Unit hosting resolving source Upgrade.",
14682
- "type": "boolean",
14683
- "default": false
14684
- },
14685
- "exclude_previous_damage_dealer": {
14686
- "description": "Excludes only the Unit that dealt the immediately preceding damage.",
14687
- "type": "boolean",
14688
- "default": false
14689
- },
14690
- "exclude_previously_selected": {
14691
- "description": "Excludes every Unit already selected earlier in the resolving effect.\n\nDistinct from `require_other`, which only knows the source Unit and the\nsingle most recent selection: a third sequential choice (\"Give a third\nfriendly unit +1/+1\") has to exclude both earlier picks.",
14692
- "anyOf": [
14693
- {
14694
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/SelectionScope"
14695
- },
14696
- {
14697
- "type": "null"
14698
- }
14699
- ],
14700
- "default": null
14701
- },
14702
- "exclude_remembered_units": {
14703
- "description": "Excludes units retained by a preceding multi-target choice.",
14704
- "type": "boolean",
14705
- "default": false
14706
- },
14707
- "excluded_aspects": {
14708
- "type": "array",
14709
- "items": {
14710
- "type": "string"
14711
- }
14712
- },
14713
- "excluded_controller": {
14714
- "description": "Excludes units currently controlled by one typed player.",
14715
- "anyOf": [
14716
- {
14717
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlayerTargetPattern"
14718
- },
14719
- {
14720
- "type": "null"
14721
- }
14722
- ],
14723
- "default": null
14724
- },
14725
- "excluded_titles": {
14726
- "description": "Excludes units with any listed canonical title.",
14727
- "type": "array",
14728
- "default": [],
14729
- "items": {
14730
- "type": "string"
14731
- }
14732
- },
14733
- "excluded_traits": {
14734
- "type": "array",
14735
- "items": {
14736
- "type": "string"
14737
- }
14738
- },
14739
- "exploited_to_play_source": {
14740
- "description": "Restricts iteration to Units exploited while playing resolving source card.",
14741
- "type": "boolean",
14742
- "default": false
14743
- },
14744
- "extremum": {
14745
- "anyOf": [
14746
- {
14747
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/UnitExtremum"
14748
- },
14749
- {
14750
- "type": "null"
14751
- }
14752
- ]
14753
- },
14754
- "max_cost": {
14755
- "type": [
14756
- "integer",
14757
- "null"
14758
- ],
14759
- "format": "uint8",
14760
- "maximum": 255,
14761
- "minimum": 0
14762
- },
14763
- "max_cost_less_than_combat_damage_to_base": {
14764
- "description": "Only matches units whose printed cost is strictly less than the amount of\ncombat damage dealt to a base this attack\n(`context.combat_damage_dealt_to_base`). Shin Hati ASH 51762.",
14765
- "type": "boolean",
14766
- "default": false
14767
- },
14768
- "max_cost_same_or_less_than_remembered_cost": {
14769
- "description": "Filters out units whose cost exceeds the cost stored in context.remembered_unit_cost.",
14770
- "type": "boolean"
14771
- },
14772
- "max_cost_same_or_less_than_resources_paid_to_play": {
14773
- "description": "Filters out units whose printed cost exceeds resources paid to play the\nsource card for current trigger.",
14774
- "type": "boolean",
14775
- "default": false
14776
- },
14777
- "max_cost_same_or_less_than_source": {
14778
- "type": "boolean"
14779
- },
14780
- "max_power": {
14781
- "type": [
14782
- "integer",
14783
- "null"
14784
- ],
14785
- "format": "int16",
14786
- "maximum": 32767,
14787
- "minimum": -32768
14788
- },
14789
- "max_power_dynamic": {
14790
- "description": "Dynamic alternative to a fixed `max_power`.",
14791
- "anyOf": [
14792
- {
14793
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/DynamicPowerLimit"
14794
- },
14795
- {
14796
- "type": "null"
14797
- }
14798
- ],
14799
- "default": null
14800
- },
14801
- "max_power_less_than_any_friendly": {
14802
- "description": "Only matches a unit whose power is strictly less than at least one\nfriendly unit's power (Ahsoka Tano 51727 action target restriction).",
14803
- "type": "boolean",
14804
- "default": false
14805
- },
14806
- "max_power_less_than_remembered_power": {
14807
- "description": "Only matches Units with strictly less power than remembered Unit.",
14808
- "type": "boolean",
14809
- "default": false
14810
- },
14811
- "max_power_less_than_source": {
14812
- "type": "boolean"
14813
- },
14814
- "max_power_same_or_less_than_remembered_power": {
14815
- "description": "Filters out units whose power exceeds the power stored in context.remembered_unit_power.",
14816
- "type": "boolean"
14817
- },
14818
- "max_remaining_hp": {
14819
- "type": [
14820
- "integer",
14821
- "null"
14822
- ],
14823
- "format": "int16",
14824
- "maximum": 32767,
14825
- "minimum": -32768
14826
- },
14827
- "max_remaining_hp_less_than_source": {
14828
- "type": "boolean"
14829
- },
14830
- "min_cost": {
14831
- "type": [
14832
- "integer",
14833
- "null"
14834
- ],
14835
- "format": "uint8",
14836
- "maximum": 255,
14837
- "minimum": 0
14838
- },
14839
- "min_cost_greater_than_remembered_cost": {
14840
- "description": "Only matches units whose cost is strictly greater than the cost stored in\ncontext.remembered_unit_cost (e.g. Reckless Sacrifice's \"a unit that costs\nmore than the discarded card\").",
14841
- "type": "boolean",
14842
- "default": false
14843
- },
14844
- "min_hp": {
14845
- "type": [
14846
- "integer",
14847
- "null"
14848
- ],
14849
- "format": "int16",
14850
- "maximum": 32767,
14851
- "minimum": -32768
14852
- },
14853
- "min_power": {
14854
- "type": [
14855
- "integer",
14856
- "null"
14857
- ],
14858
- "format": "int16",
14859
- "maximum": 32767,
14860
- "minimum": -32768
14861
- },
14862
- "min_remaining_hp": {
14863
- "type": [
14864
- "integer",
14865
- "null"
14866
- ],
14867
- "format": "int16",
14868
- "default": null,
14869
- "maximum": 32767,
14870
- "minimum": -32768
14871
- },
14872
- "minimum_distinct_keywords": {
14873
- "description": "Only matches Units with at least this many distinct active keywords.",
14874
- "type": [
14875
- "integer",
14876
- "null"
14877
- ],
14878
- "format": "uint8",
14879
- "default": null,
14880
- "maximum": 255,
14881
- "minimum": 0
14882
- },
14883
- "non_leader": {
14884
- "type": "boolean"
14885
- },
14886
- "owner": {
14887
- "description": "Requires canonical ownership by one typed player independently from\ncurrent controller relation.",
14888
- "anyOf": [
14889
- {
14890
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlayerTargetPattern"
14891
- },
14892
- {
14893
- "type": "null"
14894
- }
14895
- ],
14896
- "default": null
14897
- },
14898
- "relation": {
14899
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/RelationFilter"
14900
- },
14901
- "require_attacked_this_phase": {
14902
- "description": "Only matches units that attacked during the current phase.",
14903
- "type": "boolean",
14904
- "default": false
14905
- },
14906
- "require_damaged": {
14907
- "type": "boolean"
14908
- },
14909
- "require_entered_this_phase": {
14910
- "description": "Only matches units that entered play this phase (UnitState::entered_this_phase).",
14911
- "type": "boolean"
14912
- },
14913
- "require_exhausted": {
14914
- "type": "boolean"
14915
- },
14916
- "require_has_keyword": {
14917
- "description": "Only matches units that have at least one keyword (printed or granted).",
14918
- "type": "boolean",
14919
- "default": false
14920
- },
14921
- "require_healed_this_phase": {
14922
- "description": "Only matches Units healed at least once during current phase.",
14923
- "type": "boolean",
14924
- "default": false
14925
- },
14926
- "require_leader": {
14927
- "description": "Restrict to leader units (deployed leaders). Set by \"a friendly leader\"\ntargets, e.g. Mando's N-1 Starfighter (ASH 52696).",
14928
- "type": "boolean",
14929
- "default": false
14930
- },
14931
- "require_no_experience": {
14932
- "description": "Filters out units that have an Experience token attached.",
14933
- "type": "boolean"
14934
- },
14935
- "require_no_pilot": {
14936
- "type": "boolean"
14937
- },
14938
- "require_not_attacked_this_phase": {
14939
- "description": "Filters out units that attacked earlier this phase.",
14940
- "type": "boolean"
14941
- },
14942
- "require_not_entered_this_phase": {
14943
- "description": "Only matches Units that did not enter play during current phase.",
14944
- "type": "boolean",
14945
- "default": false
14946
- },
14947
- "require_not_entered_this_round": {
14948
- "description": "Only matches Units that did not enter play during current round.",
14949
- "type": "boolean",
14950
- "default": false
14951
- },
14952
- "require_other": {
14953
- "type": "boolean"
14954
- },
14955
- "require_ready": {
14956
- "type": "boolean"
14957
- },
14958
- "require_shield_token": {
14959
- "description": "Only matches units that have at least one Shield token attached.",
14960
- "type": "boolean",
14961
- "default": false
14962
- },
14963
- "require_undamaged": {
14964
- "type": "boolean"
14965
- },
14966
- "required_aspects": {
14967
- "type": "array",
14968
- "items": {
14969
- "type": "string"
14970
- }
14971
- },
14972
- "required_aspects_any": {
14973
- "type": "array",
14974
- "items": {
14975
- "type": "string"
14976
- }
14977
- },
14978
- "required_card_or_upgrade_traits_any": {
14979
- "type": "array",
14980
- "items": {
14981
- "type": "string"
14982
- }
14983
- },
14984
- "required_keywords_any": {
14985
- "type": "array",
14986
- "items": {
14987
- "type": "string"
14988
- }
14989
- },
14990
- "required_traits": {
14991
- "type": "array",
14992
- "items": {
14993
- "type": "string"
14994
- }
14995
- },
14996
- "required_traits_any": {
14997
- "type": "array",
14998
- "items": {
14999
- "type": "string"
15000
- }
15001
- },
15002
- "requires_chosen_aspect": {
15003
- "type": "boolean"
15004
- },
15005
- "same_arena_as_remembered_unit": {
15006
- "description": "Matches the arena occupied by Unit selected earlier in this ability.",
15007
- "type": "boolean",
15008
- "default": false
15009
- },
15010
- "same_arena_as_source": {
15011
- "type": "boolean"
15012
- },
15013
- "same_name_as_remembered_card": {
15014
- "type": "boolean"
15015
- },
15016
- "same_name_as_remembered_unit": {
15017
- "description": "Matches Units with same name as Unit stored by preceding target choice.",
15018
- "type": "boolean",
15019
- "default": false
15020
- },
15021
- "selected_max_combined_cost": {
15022
- "description": "Requires the selected units' printed costs to be at most this value.",
15023
- "type": [
15024
- "integer",
15025
- "null"
15026
- ],
15027
- "format": "uint8",
15028
- "default": null,
15029
- "maximum": 255,
15030
- "minimum": 0
15031
- },
15032
- "selected_max_combined_power": {
15033
- "description": "Requires selected Units' current combined power to be at most this value.",
15034
- "type": [
15035
- "integer",
15036
- "null"
15037
- ],
15038
- "format": "int16",
15039
- "default": null,
15040
- "maximum": 32767,
15041
- "minimum": -32768
15042
- },
15043
- "selected_max_combined_remaining_hp": {
15044
- "description": "Requires the selected units' combined remaining HP to be at most this\nvalue (Pre Vizsla ASH 51947: \"with a total of N or less remaining HP\").",
15045
- "type": [
15046
- "integer",
15047
- "null"
15048
- ],
15049
- "format": "int16",
15050
- "default": null,
15051
- "maximum": 32767,
15052
- "minimum": -32768
15053
- },
15054
- "selected_same_arena": {
15055
- "description": "Requires every selected unit in a multi-unit selection to share an arena.",
15056
- "type": "boolean",
15057
- "default": false
15058
- },
15059
- "selected_share_trait": {
15060
- "description": "Requires every selected Unit to share at least one Trait.",
15061
- "type": "boolean",
15062
- "default": false
15063
- },
15064
- "shares_aspect_with_context_unit": {
15065
- "type": "boolean"
15066
- },
15067
- "shares_trait_with_friendly_leader": {
15068
- "description": "Requires the target to share a trait with a leader card controlled by the source player.",
15069
- "type": "boolean"
15070
- },
15071
- "token_filter": {
15072
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PresenceFilter"
15073
- },
15074
- "uniqueness_filter": {
15075
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/UniquenessFilter"
15076
- },
15077
- "upgrade_filter": {
15078
- "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PresenceFilter"
15079
- }
15080
- },
15081
- "required": [
15082
- "relation",
15083
- "controller_is_remembered_player",
15084
- "require_other",
15085
- "require_damaged",
15086
- "require_undamaged",
15087
- "require_exhausted",
15088
- "require_ready",
15089
- "require_no_pilot",
15090
- "non_leader",
15091
- "uniqueness_filter",
15092
- "token_filter",
15093
- "upgrade_filter",
15094
- "exact_power_equal_ready_resources",
15095
- "exact_remaining_hp_equal_ready_resources",
15096
- "max_cost_same_or_less_than_source",
15097
- "max_power_less_than_source",
15098
- "max_remaining_hp_less_than_source",
15099
- "attacked_base_this_phase",
15100
- "dealt_base_damage_this_phase",
15101
- "required_traits",
15102
- "required_traits_any",
15103
- "shares_trait_with_friendly_leader",
15104
- "required_card_or_upgrade_traits_any",
15105
- "excluded_traits",
15106
- "required_aspects",
15107
- "required_aspects_any",
15108
- "excluded_aspects",
15109
- "required_keywords_any",
15110
- "requires_chosen_aspect",
15111
- "same_name_as_remembered_card",
15112
- "different_aspect_from_remembered_card",
15113
- "same_arena_as_source",
15114
- "shares_aspect_with_context_unit",
15115
- "exact_titles_any",
15116
- "require_no_experience",
15117
- "max_cost_same_or_less_than_remembered_cost",
15118
- "max_power_same_or_less_than_remembered_power",
15119
- "require_entered_this_phase",
15120
- "require_not_attacked_this_phase"
15121
- ]
15122
- },
15123
14711
  "UnitStateView": {
15124
14712
  "type": "object",
15125
14713
  "properties": {
@@ -22503,6 +22091,14 @@ export const sdkSchemas = {
22503
22091
  "type": "boolean",
22504
22092
  "default": false
22505
22093
  },
22094
+ "playgroundActionAbilities": {
22095
+ "description": "Host-only Playground ability projection. Empty for normal matches and\nwhile a resolution owns the command boundary.",
22096
+ "type": "array",
22097
+ "default": [],
22098
+ "items": {
22099
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundActionAbilityView"
22100
+ }
22101
+ },
22506
22102
  "playgroundDeckCardIds": {
22507
22103
  "description": "Printed cards supplied by every configured Playground deck.",
22508
22104
  "type": "array",
@@ -22773,7 +22369,7 @@ export const sdkSchemas = {
22773
22369
  "description": "The serialized engine state. Catalog `Arc`s are skip-default here\nand grafted on by the restore path before the state goes live.\n\nOpaque to the public schema — SDK consumers should treat this as an\nimplementation-defined object that round-trips byte-for-byte. Pinning\nevery engine sub-struct into the schema would couple the SDK type\nsurface to the entire engine, which we explicitly do not want."
22774
22370
  },
22775
22371
  "version": {
22776
- "description": "Wire-format version. Always [`MATCH_SAVE_VERSION`] for newly minted\npayloads; restore rejects mismatches.",
22372
+ "description": "Wire-format version. Always [`MATCH_SAVE_VERSION`] for newly minted\npayloads; restore accepts every [`SUPPORTED_SAVE_VERSIONS`] entry and\nrejects anything else.",
22777
22373
  "type": "integer",
22778
22374
  "format": "uint8",
22779
22375
  "maximum": 255,