@spacemolt/lib 13.2.0 → 14.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.
@@ -133,6 +133,8 @@ export type AmmoStats = {
133
133
  shield_bypass?: number;
134
134
  shield_damage_mod?: number;
135
135
  splash_pct?: number;
136
+ splash_radius?: number;
137
+ splash_stack_cap?: number;
136
138
  untraceable?: boolean;
137
139
  };
138
140
  export type AnalysisInput = {
@@ -208,6 +210,60 @@ export type ArenaActionResponse = {
208
210
  */
209
211
  message: string;
210
212
  };
213
+ export type ArenaChallengeDefInfo = {
214
+ /**
215
+ * True when you are undocked at the challenge's arena right now. Starting it also needs locked to be false.
216
+ */
217
+ at_this_arena: boolean;
218
+ /**
219
+ * Challenge ID to pass as challenge_id to arena action=fight.
220
+ */
221
+ challenge_id: string;
222
+ /**
223
+ * Lore and briefing for the fight, including what the rules ask of your ship.
224
+ */
225
+ description: string;
226
+ /**
227
+ * The enemy ships spawned for the fight, one entry per line of the definition.
228
+ */
229
+ enemies: Array<ArenaEnemyInfo>;
230
+ /**
231
+ * True while any challenge in requires has no win on your record. arena action=fight refuses a locked challenge with challenge_locked.
232
+ */
233
+ locked: boolean;
234
+ /**
235
+ * Display name of the challenge.
236
+ */
237
+ name: string;
238
+ /**
239
+ * Arena POI the fight is held at. You must be undocked there to start it.
240
+ */
241
+ poi_id: string;
242
+ /**
243
+ * Display name of the arena POI.
244
+ */
245
+ poi_name: string;
246
+ /**
247
+ * Challenge IDs you must have won at least once before this one will start. Empty when the challenge is open to everyone.
248
+ */
249
+ requires: Array<string>;
250
+ /**
251
+ * Loadout rules every ship on your side must pass. Zero or omitted fields are unrestricted. A ship that breaks a rule refuses the whole side with a rule_* error naming the pilot, the hull and the rule.
252
+ */
253
+ rules: ArenaRules;
254
+ /**
255
+ * Series the challenge belongs to. Challenges list in series, then stage, order.
256
+ */
257
+ series: string;
258
+ /**
259
+ * Position within the series, from 1. Higher stages are harder.
260
+ */
261
+ stage: number;
262
+ /**
263
+ * Times you have won this challenge. 0 until your first win.
264
+ */
265
+ wins: number;
266
+ };
211
267
  export type ArenaChallengeInfo = {
212
268
  /**
213
269
  * ID of the pending challenge.
@@ -268,11 +324,135 @@ export type ArenaChallengeResponse = {
268
324
  */
269
325
  target_name: string;
270
326
  };
327
+ export type ArenaChallengesResponse = {
328
+ /**
329
+ * Always challenges.
330
+ */
331
+ action: 'challenges';
332
+ /**
333
+ * Every NPC challenge in the game, in series then stage order. Empty when none are defined.
334
+ */
335
+ challenges: Array<ArenaChallengeDefInfo>;
336
+ };
271
337
  export type ArenaDroneEntry = {
272
338
  hull: number;
273
339
  owner_id: string;
274
340
  status: string;
275
341
  };
342
+ export type ArenaEnemyInfo = {
343
+ /**
344
+ * How many ships of this line the challenge spawns. Always at least 1.
345
+ */
346
+ count: number;
347
+ /**
348
+ * True for the named headline enemy of the fight. Your ship opens targeting the boss when there is one.
349
+ */
350
+ is_boss: boolean;
351
+ /**
352
+ * Display name of the enemy. Copies of a multi-ship line are numbered (Ring Cleaver 1, Ring Cleaver 2) once spawned.
353
+ */
354
+ name: string;
355
+ /**
356
+ * Ship class ID of the enemy hull.
357
+ */
358
+ ship_class: string;
359
+ /**
360
+ * Display name of the enemy hull.
361
+ */
362
+ ship_class_name: string;
363
+ };
364
+ export type ArenaFightResponse = {
365
+ /**
366
+ * Always fight.
367
+ */
368
+ action: 'fight';
369
+ /**
370
+ * ID of the arena battle. Use the battle command and get_battle_status to fight it.
371
+ */
372
+ battle_id: string;
373
+ /**
374
+ * Challenge ID that was started.
375
+ */
376
+ challenge_id: string;
377
+ /**
378
+ * The enemy lines of the challenge, as listed by arena action=challenges.
379
+ */
380
+ enemies: Array<ArenaEnemyInfo>;
381
+ /**
382
+ * Battle side ID every challenge enemy fights on.
383
+ */
384
+ enemy_side: number;
385
+ /**
386
+ * Human-readable confirmation.
387
+ */
388
+ message: string;
389
+ /**
390
+ * Display name of the challenge.
391
+ */
392
+ name: string;
393
+ /**
394
+ * Every combatant in the match at the moment it started, your side and the enemies. Enemy entries carry the spawned NPC's id as player_id.
395
+ */
396
+ participants: Array<ArenaParticipantInfo>;
397
+ /**
398
+ * Your battle side ID. Fleet members share it.
399
+ */
400
+ your_side: number;
401
+ };
402
+ export type ArenaNpcInfo = {
403
+ /**
404
+ * ID of the arena match the enemy is fighting in. Enemies exist only for the length of their match.
405
+ */
406
+ battle_id: string;
407
+ /**
408
+ * Current hull points.
409
+ */
410
+ hull: number;
411
+ /**
412
+ * True for the named headline enemy of its challenge.
413
+ */
414
+ is_boss: boolean;
415
+ /**
416
+ * Maximum hull points.
417
+ */
418
+ max_hull: number;
419
+ /**
420
+ * Maximum shield points.
421
+ */
422
+ max_shield: number;
423
+ /**
424
+ * Display name of the enemy.
425
+ */
426
+ name: string;
427
+ /**
428
+ * Combat ID of the enemy: the player_id it carries in battle payloads and the id to target with the battle command.
429
+ */
430
+ npc_id: string;
431
+ /**
432
+ * Primary livery color as #RRGGBB.
433
+ */
434
+ primary_color: string;
435
+ /**
436
+ * Secondary livery color as #RRGGBB.
437
+ */
438
+ secondary_color: string;
439
+ /**
440
+ * Current shield points.
441
+ */
442
+ shield: number;
443
+ /**
444
+ * Ship class ID of the enemy hull.
445
+ */
446
+ ship_class: string;
447
+ /**
448
+ * Display name of the enemy hull.
449
+ */
450
+ ship_class_name: string;
451
+ /**
452
+ * The enemy's status line, as a player's status message. Omitted when it has none.
453
+ */
454
+ status?: string;
455
+ };
276
456
  export type ArenaParticipantInfo = {
277
457
  /**
278
458
  * Player ID.
@@ -296,6 +476,10 @@ export type ArenaResponse = ({
296
476
  } & ArenaActionResponse) | ({
297
477
  action: 'status';
298
478
  } & ArenaStatusResponse) | ({
479
+ action: 'challenges';
480
+ } & ArenaChallengesResponse) | ({
481
+ action: 'fight';
482
+ } & ArenaFightResponse) | ({
299
483
  action: 'help';
300
484
  } & CommandHelpResponse);
301
485
  export type ArenaRestoreState = {
@@ -307,6 +491,112 @@ export type ArenaRestoreState = {
307
491
  [key: string]: ArenaShipEntry;
308
492
  };
309
493
  };
494
+ export type ArenaRules = {
495
+ /**
496
+ * Item IDs allowed in cargo. Omitted or empty = any item.
497
+ */
498
+ allowed_cargo?: Array<string>;
499
+ /**
500
+ * Weapon damage types allowed (kinetic, energy, thermal, em, explosive, void). Omitted or empty = every type.
501
+ */
502
+ allowed_damage_types?: Array<string>;
503
+ /**
504
+ * Hull classes allowed (Fighter, Freighter, Miner, ...), case-insensitive. Omitted or empty = every class.
505
+ */
506
+ allowed_hull_classes?: Array<string>;
507
+ /**
508
+ * Module IDs allowed on the hull. Omitted or empty = any module.
509
+ */
510
+ allowed_modules?: Array<string>;
511
+ /**
512
+ * Ship categories allowed (Combat, Industrial, Commercial, ...), case-insensitive. Omitted or empty = every category.
513
+ */
514
+ allowed_ship_categories?: Array<string>;
515
+ /**
516
+ * Ship class IDs allowed. Omitted or empty = every ship class.
517
+ */
518
+ allowed_ship_classes?: Array<string>;
519
+ /**
520
+ * Item IDs refused in cargo and refused by use_item during the match. Omitted or empty = none banned.
521
+ */
522
+ banned_cargo?: Array<string>;
523
+ /**
524
+ * Consumable effect types refused (repair, shield, buff, emergency_jump, fuel, power). Omitted or empty = none banned.
525
+ */
526
+ banned_effect_types?: Array<string>;
527
+ /**
528
+ * Hull classes refused, case-insensitive. Omitted or empty = none banned.
529
+ */
530
+ banned_hull_classes?: Array<string>;
531
+ /**
532
+ * Module IDs refused. Omitted or empty = none banned.
533
+ */
534
+ banned_modules?: Array<string>;
535
+ /**
536
+ * Ship categories refused, case-insensitive. Omitted or empty = none banned.
537
+ */
538
+ banned_ship_categories?: Array<string>;
539
+ /**
540
+ * Ship class IDs refused. Omitted or empty = none banned.
541
+ */
542
+ banned_ship_classes?: Array<string>;
543
+ /**
544
+ * Maximum crew aboard (fit plus injured). Omitted or 0 = no cap.
545
+ */
546
+ max_crew?: number;
547
+ /**
548
+ * Maximum marines aboard. Omitted or 0 = no cap.
549
+ */
550
+ max_marines?: number;
551
+ /**
552
+ * Largest ship scale allowed (1 = personal ... 5 = capital). Omitted or 0 = no cap.
553
+ */
554
+ max_ship_scale?: number;
555
+ /**
556
+ * Highest ship tier allowed (0-5). Omitted or 0 = no cap.
557
+ */
558
+ max_ship_tier?: number;
559
+ /**
560
+ * Maximum ships per side. 0 = every eligible fleet member joins, 1 = solo duel.
561
+ */
562
+ max_side_size: number;
563
+ /**
564
+ * Lowest ship tier allowed (0-5). Omitted or 0 = no minimum.
565
+ */
566
+ min_ship_tier?: number;
567
+ /**
568
+ * Minimum ships a side must bring. Omitted or 0 = no minimum.
569
+ */
570
+ min_side_size?: number;
571
+ /**
572
+ * True when magazine-fed weapons are refused. Omitted = allowed.
573
+ */
574
+ no_ammo_weapons?: boolean;
575
+ /**
576
+ * True when boarding gear is refused. Omitted = allowed.
577
+ */
578
+ no_boarding?: boolean;
579
+ /**
580
+ * True when cloaking modules are refused. Omitted = allowed.
581
+ */
582
+ no_cloak?: boolean;
583
+ /**
584
+ * True when no consumable (any item use_item accepts) may be carried in or used. Omitted = consumables allowed.
585
+ */
586
+ no_consumables?: boolean;
587
+ /**
588
+ * True when drone bays and deployed drones are refused. Omitted = allowed.
589
+ */
590
+ no_drones?: boolean;
591
+ /**
592
+ * True when webifiers, disruptors and scramblers are refused. Omitted = allowed.
593
+ */
594
+ no_tackle?: boolean;
595
+ /**
596
+ * True when ships must enter with an empty hold. Omitted = cargo allowed.
597
+ */
598
+ require_empty_cargo?: boolean;
599
+ };
310
600
  export type ArenaShipEntry = {
311
601
  armor: number;
312
602
  hull: number;
@@ -388,15 +678,23 @@ export type AttackLogEntry = {
388
678
  emergency_cloak_strength?: number;
389
679
  final_damage: number;
390
680
  flat_reduction_pct?: number;
681
+ /**
682
+ * Ship-level hit chance in [0.05,0.95] that every weapon starts from (separation, skills, modules, stance, speed). Each entry in weapons[] carries its own hit_chance with that weapon's ammo and mine modifiers added.
683
+ */
391
684
  hit_chance: number;
392
- hit_roll: number;
685
+ /**
686
+ * True when at least one weapon hit. Per-weapon outcomes are in weapons[].
687
+ */
393
688
  hit_success: boolean;
394
689
  hull_damage: number;
395
690
  ignored_resistance_pct?: number;
691
+ /**
692
+ * Sum of the damage of the weapons that hit, after offensive skill and buff bonuses, before the target's stance and defenses. 0 when every weapon missed. Rows recorded before per-weapon rolls report their single-roll volley damage here.
693
+ */
694
+ landed_damage: number;
396
695
  lifesteal_pct?: number;
397
696
  mine_duration?: number;
398
697
  off_buff_pct?: number;
399
- pre_hit_damage: number;
400
698
  raw_damage: number;
401
699
  secondary_kind?: string;
402
700
  shield_damage: number;
@@ -571,7 +869,7 @@ export type BattleCombatState = {
571
869
  */
572
870
  disruption_ticks?: number;
573
871
  /**
574
- * Your ship speed after EM disruption penalties. Webifier penalties are reported separately and affect escape timing.
872
+ * Your derived combat speed after fitted modules, temporary buffs, pilot skills, EM disruption, and enemy webifiers. This value drives hit chance, maneuvering, escape, and boarding pursuit.
575
873
  */
576
874
  effective_speed: number;
577
875
  /**
@@ -619,11 +917,11 @@ export type BattleCombatState = {
619
917
  */
620
918
  warp_disrupted: boolean;
621
919
  /**
622
- * Combined escape-speed penalty from enemy webifiers as a percentage. Webifier penalties add and cap at 75%.
920
+ * Combined combat-speed penalty from enemy webifiers as a percentage. Webifier penalties add and cap at 75%.
623
921
  */
624
922
  web_strength_pct?: number;
625
923
  /**
626
- * An enemy stasis webifier is increasing the time you need to escape.
924
+ * An enemy stasis webifier is reducing your effective combat speed.
627
925
  */
628
926
  webbed: boolean;
629
927
  };
@@ -765,7 +1063,7 @@ export type BattleResponse = {
765
1063
  */
766
1064
  battle_id?: string;
767
1065
  /**
768
- * Marines you committed to the boarding attempt, echoed back. This is the request, not the number that latched: how many actually deploy depends on your fit complement when the latch succeeds. Present on a board stance only. Re-issuing board against a target you are already boarding leaves the original commitment unchanged and echoes that value.
1066
+ * Marines requested for the queued boarding attempt, echoed back. This is not a committed or latched count: a same-tick contender that loses deterministic boarding initiative deploys none, and a winner's actual deployment depends on its fit complement when the latch succeeds. Present on a board stance only. Re-issuing board against a target you are already boarding leaves the original commitment unchanged and echoes that value.
769
1067
  */
770
1068
  marines_requested?: number;
771
1069
  /**
@@ -780,7 +1078,7 @@ export type BattleResponse = {
780
1078
  */
781
1079
  self_destruct_countdown?: number;
782
1080
  /**
783
- * Combat stance now in effect. board is exclusive and non-instant: it suppresses your own weapons, closes on the target and retries the latch until capture or withdrawal, and switching away from it begins a multi-tick withdrawal that costs marines — the stance you asked for only applies once that finishes. Present on action=stance.
1081
+ * Combat stance requested by action=stance. Ordinary stance changes apply on the next battle tick. A queued board request becomes exclusive and suppresses your weapons only if it wins any same-tick hull conflict; deterministic boarding initiative selects one physical link and the battle log records rejected contenders. Switching away from an active board stance begins a multi-tick withdrawal that costs marines — the requested replacement stance applies once disengagement finishes.
784
1082
  */
785
1083
  stance?: 'fire' | 'evade' | 'brace' | 'flee' | 'board';
786
1084
  /**
@@ -932,7 +1230,7 @@ export type BoardingStateLogEntry = {
932
1230
  */
933
1231
  phase: 'latching' | 'assault' | 'withdrawing' | 'resolved' | 'self_destruct';
934
1232
  /**
935
- * Why the event fired, when the event alone is ambiguous. Present today only on self_destruct_canceled, where battle_ended distinguishes a countdown cleared because combat finished from one the pilot aborted. Omitted otherwise.
1233
+ * Why the event fired, when the event alone is ambiguous. boarding_rejected carries either a validation reason or contested_same_tick when deterministic boarding initiative selected another eligible request sharing either hull. self_destruct_canceled may carry battle_ended when combat ending cleared the countdown. Omitted otherwise.
936
1234
  */
937
1235
  reason?: string;
938
1236
  /**
@@ -4075,6 +4373,10 @@ export type FleetStatusMember = {
4075
4373
  };
4076
4374
  export type FleetStatusResponse = {
4077
4375
  action: 'status';
4376
+ /**
4377
+ * True when this fleet exceeded ordinary capacity at an arena and will disband if its leader leaves the arena. Omitted or false means this is an ordinary fleet.
4378
+ */
4379
+ arena_only?: boolean;
4078
4380
  fleet_id?: string;
4079
4381
  in_fleet: boolean;
4080
4382
  invite_fleet?: string;
@@ -4082,6 +4384,9 @@ export type FleetStatusResponse = {
4082
4384
  invites?: Array<FleetStatusInvite>;
4083
4385
  is_leader?: boolean;
4084
4386
  leader?: string;
4387
+ /**
4388
+ * Maximum fleet membership for an ordinary fleet. Omitted for an unlimited arena-only fleet.
4389
+ */
4085
4390
  max_size?: number;
4086
4391
  members?: Array<FleetStatusMember>;
4087
4392
  pending_invite?: boolean;
@@ -4368,6 +4673,14 @@ export type GetMissionsResponse = {
4368
4673
  missions: Array<MissionInfo>;
4369
4674
  };
4370
4675
  export type GetNearbyResponse = {
4676
+ /**
4677
+ * Number of entries in arena_npcs.
4678
+ */
4679
+ arena_npc_count: number;
4680
+ /**
4681
+ * Challenge enemies fighting an arena match held at this POI. Empty when no NPC challenge is in progress here. They exist only for the length of their match and cannot be attacked from outside it.
4682
+ */
4683
+ arena_npcs: Array<ArenaNpcInfo>;
4371
4684
  count: number;
4372
4685
  creature_count: number;
4373
4686
  creatures: Array<CreatureInfo>;
@@ -4704,6 +5017,14 @@ export type ItemEffect = {
4704
5017
  ammo?: AmmoStats;
4705
5018
  amount?: number;
4706
5019
  duration?: number;
5020
+ /**
5021
+ * Magnitude of the consumable's additional effect. Read together with secondary_stat.
5022
+ */
5023
+ secondary_amount?: number;
5024
+ /**
5025
+ * Stat modified by the consumable's additional effect. Omitted when the item has only one effect.
5026
+ */
5027
+ secondary_stat?: string;
4707
5028
  stat?: string;
4708
5029
  subtype?: string;
4709
5030
  type: string;
@@ -5285,6 +5606,10 @@ export type Module = {
5285
5606
  hull_bonus?: number;
5286
5607
  hull_penalty?: number;
5287
5608
  id: string;
5609
+ /**
5610
+ * Percentage points subtracted from each hostile ECM lock-break roll. Fitted bonuses stack up to the combat resistance cap.
5611
+ */
5612
+ jam_resistance?: number;
5288
5613
  jam_strength?: number;
5289
5614
  latch_resistance?: number;
5290
5615
  latch_strength?: number;
@@ -5310,7 +5635,14 @@ export type Module = {
5310
5635
  reactive_resistance?: number;
5311
5636
  refit_capability?: boolean;
5312
5637
  remote_medical_treatment?: boolean;
5638
+ /**
5639
+ * Hull points repaired per tick on the most-wounded eligible ally.
5640
+ */
5313
5641
  remote_repair_power?: number;
5642
+ /**
5643
+ * Maximum remote-repair range in same-side radial-band distance to an eligible ally.
5644
+ */
5645
+ remote_repair_range?: number;
5314
5646
  required_skills?: {
5315
5647
  [key: string]: number;
5316
5648
  };
@@ -5332,6 +5664,10 @@ export type Module = {
5332
5664
  speed_penalty?: number;
5333
5665
  survey_power?: number;
5334
5666
  targeting_reduction?: number;
5667
+ /**
5668
+ * Percentage points subtracted from hostile sensor-dampener reach reduction. Fitted bonuses stack up to the combat resistance cap.
5669
+ */
5670
+ targeting_resistance?: number;
5335
5671
  tow_speed_penalty?: number;
5336
5672
  tracking_bonus?: number;
5337
5673
  type: string;
@@ -6226,6 +6562,14 @@ export type ObjectiveInfo = {
6226
6562
  system_name?: string;
6227
6563
  target_base_id?: string;
6228
6564
  target_base_name?: string;
6565
+ /**
6566
+ * kill_player objectives only: the username of the pilot this bounty names
6567
+ */
6568
+ target_player?: string;
6569
+ /**
6570
+ * kill_player objectives only: the ID of the pilot this bounty names
6571
+ */
6572
+ target_player_id?: string;
6229
6573
  type: string;
6230
6574
  };
6231
6575
  export type ObjectiveProgressInfo = {
@@ -6249,6 +6593,14 @@ export type ObjectiveProgressInfo = {
6249
6593
  system_name?: string;
6250
6594
  target_base?: string;
6251
6595
  target_base_name?: string;
6596
+ /**
6597
+ * kill_player objectives only: the username of the pilot this bounty names
6598
+ */
6599
+ target_player?: string;
6600
+ /**
6601
+ * kill_player objectives only: the ID of the pilot this bounty names
6602
+ */
6603
+ target_player_id?: string;
6252
6604
  type: string;
6253
6605
  };
6254
6606
  export type OpenOrderSummary = {
@@ -6609,6 +6961,12 @@ export type PlaceShipBuyOrderResponse = {
6609
6961
  * A player account with progression, customization, and current state.
6610
6962
  */
6611
6963
  export type Player = {
6964
+ /**
6965
+ * Times each arena NPC challenge was won, keyed by challenge ID (see arena action=challenges). Omitted until the first win.
6966
+ */
6967
+ arena_won?: {
6968
+ [key: string]: number;
6969
+ };
6612
6970
  /**
6613
6971
  * Combat XP earned from arena fights today (UTC), per skill. Omitted until the player fights in an arena. Resets when the day changes.
6614
6972
  */
@@ -7520,9 +7878,9 @@ export type SellWreckResponse = {
7520
7878
  * True when the engine undocked you automatically before running this command, because the command requires being undocked. Omitted when no automatic undock happened.
7521
7879
  */
7522
7880
  auto_undocked?: boolean;
7523
- cargo_value?: number;
7524
7881
  message: string;
7525
7882
  new_balance: number;
7883
+ offer: number;
7526
7884
  salvage_value?: number;
7527
7885
  ship_class?: string;
7528
7886
  total_payout: number;
@@ -7944,7 +8302,7 @@ export type ShipClass = {
7944
8302
  [key: string]: unknown;
7945
8303
  }>;
7946
8304
  /**
7947
- * Minimum reputation with the ship's empire to commission or buy this ship (0 = no requirement)
8305
+ * Minimum reputation with the ship's empire to commission or buy this ship (0 = no requirement). Not applied to a faction-funded build at the faction's own station when the faction holds a buy_ship_license for this design — the license authorizes that build instead
7948
8306
  */
7949
8307
  required_reputation?: number;
7950
8308
  /**
@@ -9344,6 +9702,16 @@ export type V2Personnel = {
9344
9702
  injured_marines: number;
9345
9703
  };
9346
9704
  export type V2Player = {
9705
+ /**
9706
+ * NPC arena challenge win counts, keyed by challenge_id. Omitted until the first NPC-trial win; a missing challenge key means zero wins.
9707
+ */
9708
+ arena_won?: {
9709
+ [key: string]: number;
9710
+ };
9711
+ /**
9712
+ * Combat XP earned from arena fights during the UTC date in day, keyed by skill ID in by_skill. Omitted until the first arena fight; a missing skill key means zero XP. The ledger resets when the UTC date changes.
9713
+ */
9714
+ arena_xp?: ArenaXpLedger;
9347
9715
  /**
9348
9716
  * Empire IDs this player holds citizenship in (omitted when empty). Independent of the immutable origin empire.
9349
9717
  */
@@ -9716,6 +10084,18 @@ export type WeaponFireDetail = {
9716
10084
  crit_roll: number;
9717
10085
  damage: number;
9718
10086
  damage_type: string;
10087
+ /**
10088
+ * This weapon's own hit chance in [0.05,0.95]: the entry's hit_chance plus this weapon's loaded ammo accuracy and mine guidance. Present on every weapon that fired; absent on rows recorded before per-weapon rolls.
10089
+ */
10090
+ hit_chance?: number;
10091
+ /**
10092
+ * This weapon's roll in [0,1). It hit when hit_roll < hit_chance. Present on every weapon that fired; absent on rows recorded before per-weapon rolls.
10093
+ */
10094
+ hit_roll?: number;
10095
+ /**
10096
+ * True when this weapon connected. Omitted when it missed, and on rows recorded before per-weapon rolls (use the entry's hit_success there).
10097
+ */
10098
+ hit_success?: boolean;
9719
10099
  instance_id: string;
9720
10100
  name: string;
9721
10101
  type_bonus_pct: number;
@@ -9961,7 +10341,7 @@ export type SpacemoltAcceptMissionResponse = SpacemoltAcceptMissionResponses[key
9961
10341
  export type SpacemoltAttackData = {
9962
10342
  body?: {
9963
10343
  /**
9964
- * ID of the target: a player, pirate, empire NPC, wildlife creature, intact-prize actor, or station. Prize actor IDs come from get_nearby. Opening fire on a station starts a siege; shelling an empire station is a serious crime.
10344
+ * ID of the target: a player, pirate, empire NPC, wildlife creature, intact-prize actor, or station. Prize actor IDs come from get_nearby. Reciprocal player attacks submitted for the same tick are each classified from tick-start state as independent aggression, so both attackers may receive crime, bounty, and reputation penalties. Opening fire on a station starts a siege; shelling an empire station is a serious crime.
9965
10345
  */
9966
10346
  id: string;
9967
10347
  };
@@ -12361,6 +12741,37 @@ export type SpacemoltArenaChallengeResponses = {
12361
12741
  };
12362
12742
  };
12363
12743
  export type SpacemoltArenaChallengeResponse = SpacemoltArenaChallengeResponses[keyof SpacemoltArenaChallengeResponses];
12744
+ export type SpacemoltArenaChallengesData = {
12745
+ body?: {
12746
+ [key: string]: unknown;
12747
+ };
12748
+ path?: never;
12749
+ query?: never;
12750
+ url: '/api/v2/spacemolt_arena/challenges';
12751
+ };
12752
+ export type SpacemoltArenaChallengesErrors = {
12753
+ /**
12754
+ * Bad request — invalid params, unknown command, or game error
12755
+ */
12756
+ 400: unknown;
12757
+ /**
12758
+ * Not authenticated — missing or invalid session
12759
+ */
12760
+ 401: unknown;
12761
+ /**
12762
+ * Rate limited — mutations allow 1 per tick (10 seconds)
12763
+ */
12764
+ 429: unknown;
12765
+ };
12766
+ export type SpacemoltArenaChallengesResponses = {
12767
+ /**
12768
+ * Result. structuredContent type: ArenaChallengesResponse
12769
+ */
12770
+ 200: V2Response & {
12771
+ structuredContent?: ArenaChallengesResponse;
12772
+ };
12773
+ };
12774
+ export type SpacemoltArenaChallengesResponse = SpacemoltArenaChallengesResponses[keyof SpacemoltArenaChallengesResponses];
12364
12775
  export type SpacemoltArenaDeclineData = {
12365
12776
  body?: {
12366
12777
  [key: string]: unknown;
@@ -12394,6 +12805,42 @@ export type SpacemoltArenaDeclineResponses = {
12394
12805
  };
12395
12806
  };
12396
12807
  export type SpacemoltArenaDeclineResponse = SpacemoltArenaDeclineResponses[keyof SpacemoltArenaDeclineResponses];
12808
+ export type SpacemoltArenaFightData = {
12809
+ body?: {
12810
+ /**
12811
+ * For 'fight': the NPC challenge to start, from 'challenges'.
12812
+ */
12813
+ id: string;
12814
+ };
12815
+ path?: never;
12816
+ query?: never;
12817
+ url: '/api/v2/spacemolt_arena/fight';
12818
+ };
12819
+ export type SpacemoltArenaFightErrors = {
12820
+ /**
12821
+ * Bad request — invalid params, unknown command, or game error
12822
+ */
12823
+ 400: unknown;
12824
+ /**
12825
+ * Not authenticated — missing or invalid session
12826
+ */
12827
+ 401: unknown;
12828
+ /**
12829
+ * Rate limited — mutations allow 1 per tick (10 seconds)
12830
+ */
12831
+ 429: unknown;
12832
+ };
12833
+ export type SpacemoltArenaFightResponses = {
12834
+ /**
12835
+ * Result. structuredContent: V2GameState post-mutation delta (changed ship/cargo/location/queue sections); the command result is under `details` (ArenaFightResponse)
12836
+ */
12837
+ 200: V2Response & {
12838
+ structuredContent?: V2GameState & {
12839
+ details?: ArenaFightResponse;
12840
+ };
12841
+ };
12842
+ };
12843
+ export type SpacemoltArenaFightResponse = SpacemoltArenaFightResponses[keyof SpacemoltArenaFightResponses];
12397
12844
  export type SpacemoltArenaHelpData = {
12398
12845
  body?: never;
12399
12846
  path?: never;
@@ -12993,7 +13440,7 @@ export type SpacemoltBattleSelfDestructResponse = SpacemoltBattleSelfDestructRes
12993
13440
  export type SpacemoltBattleStanceData = {
12994
13441
  body?: {
12995
13442
  /**
12996
- * Battle stance: fire (100% dmg dealt/taken), evade (0%/50%, costs fuel), brace (0%/25%, shields regen 2x), flee (0%/100%, auto-retreats to escape), or board (0%/100%, automatically closes for repeated latch attempts; requires target_id and marines). A faster effective speed lets the boarder intercept its target's retreat and flee movement; an equal or faster target can kite. Changing away from board begins non-instant withdrawal.
13443
+ * Battle stance: fire (100% dmg dealt/taken), evade (0%/50%, costs fuel), brace (0%/25%, shields regen 2x), flee (0%/100%, auto-retreats to escape), or board (0%/100%, automatically closes for repeated latch attempts; requires target_id and marines). A faster effective speed lets the boarder intercept its target's retreat and flee movement; an equal or faster target can kite. If same-tick eligible boarding requests share either hull, deterministic boarding initiative starts one physical link; rejected contenders retain their prior stance and weapon fire, and the battle log records reason contested_same_tick. Changing away from board begins non-instant withdrawal.
12997
13444
  */
12998
13445
  id: 'fire' | 'evade' | 'brace' | 'flee' | 'board';
12999
13446
  /**
@@ -17034,9 +17481,12 @@ export type SpacemoltFactionAdminPostMissionData = {
17034
17481
  * Destination for a deliver_item or dock_at_base objective, as either the station's Base ID or station POI ID. Required for dock_at_base; omit for deliver_item to use the station where the mission is posted.
17035
17482
  */
17036
17483
  target_base_id?: string;
17484
+ /**
17485
+ * Bounty target for a kill_player objective: the pilot's username or player ID. Required for kill_player.
17486
+ */
17037
17487
  target_id?: string;
17038
17488
  /**
17039
- * Objective type (deliver_item, kill_player, visit_system, etc.)
17489
+ * Objective type (deliver_item, kill_pirate, kill_player, visit_system, dock_at_base)
17040
17490
  */
17041
17491
  type: string;
17042
17492
  }>;
@@ -17058,7 +17508,7 @@ export type SpacemoltFactionAdminPostMissionData = {
17058
17508
  */
17059
17509
  triggers?: Array<string>;
17060
17510
  /**
17061
- * Mission type (delivery, combat, exploration, etc.)
17511
+ * Mission type (delivery, combat, exploration, bounty, etc.)
17062
17512
  */
17063
17513
  type: string;
17064
17514
  };