fleethub-core 1.11.25 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,39 +1,83 @@
1
1
  /* tslint:disable */
2
2
  /* eslint-disable */
3
+ /**
4
+ */
5
+ export function set_panic_hook(): void;
3
6
  /**
4
7
  * @param {ShipConditions} value
5
8
  * @returns {ShipConditions}
6
9
  */
7
10
  export function parse_ship_conditions(value: ShipConditions): ShipConditions;
8
- /**
9
- */
10
- export function set_panic_hook(): void;
11
- export type GearTypeIdArray = [number, number, number, number, number];
11
+ export interface MasterShip {
12
+ ship_id: number;
13
+ name: string;
14
+ yomi: string;
15
+ stype: number;
16
+ ctype: number;
17
+ nationality?: number;
18
+ sort_id?: number;
19
+ max_hp: StatInterval;
20
+ firepower: StatInterval;
21
+ armor: StatInterval;
22
+ torpedo: StatInterval;
23
+ evasion: StatInterval;
24
+ anti_air: StatInterval;
25
+ asw: StatInterval;
26
+ los: StatInterval;
27
+ luck: StatInterval;
28
+ torpedo_accuracy?: number;
29
+ basic_evasion_term?: number;
30
+ speed: number;
31
+ range?: number;
32
+ fuel?: number;
33
+ ammo?: number;
34
+ next_id?: number;
35
+ next_level?: number;
36
+ slotnum: number;
37
+ slots: SlotSizeVec;
38
+ stock: GearState[];
39
+ speed_group?: SpeedGroup;
40
+ useful?: boolean;
41
+ }
12
42
 
13
- export interface FleetCutinReport<T> {
14
- cutin: FleetCutin;
15
- rate: number | null;
16
- formation: Formation;
17
- attacks: FleetCutinAttackReport<T>[];
43
+ export type StatInterval = [number | null, number | null];
44
+
45
+ export interface AttackPower {
46
+ precap: number;
47
+ is_capped: boolean;
48
+ capped: number;
49
+ normal: number;
50
+ critical: number;
51
+ armor_penetration: number;
52
+ remaining_ammo_mod: number;
18
53
  }
19
54
 
20
- export interface FleetCutinAttackReport<T> extends AttackReport<T> {
21
- index: number;
22
- ship_id: number;
23
- power_mod: number;
55
+ export interface AttackPowerParams {
56
+ is_cutin: boolean;
57
+ basic: number;
58
+ cap: number;
59
+ precap_mod: AttackPowerModifier;
60
+ postcap_mod: AttackPowerModifier;
61
+ ap_shell_mod: number | null;
62
+ aerial_power: number | null;
63
+ proficiency_critical_mod: number;
64
+ armor_penetration: number;
65
+ remaining_ammo_mod: number;
66
+ balloon_mod: number;
67
+ special_enemy_mods: SpecialEnemyModifiers;
68
+ historical_mod: AttackPowerModifier;
69
+ custom_mods: CustomPowerModifiers;
24
70
  }
25
71
 
26
- export interface DamageReport {
27
- miss_damage_min: number;
28
- miss_damage_max: number;
29
- normal_damage_min: number;
30
- normal_damage_max: number;
31
- critical_damage_min: number;
32
- critical_damage_max: number;
33
- normal_scratch_rate: number;
34
- critical_scratch_rate: number;
35
- damage_density: Histogram<number, number>;
36
- damage_state_density: Histogram<DamageState, number>;
72
+ export interface AttackReport<T> {
73
+ style: T;
74
+ proc_rate: number | null;
75
+ attack_power: AttackPower | null;
76
+ attack_power_params: AttackPowerParams | null;
77
+ hits: number;
78
+ hit_rate: HitRate | null;
79
+ hit_rate_params: HitRateParams | null;
80
+ damage: DamageReport | null;
37
81
  }
38
82
 
39
83
  export interface AttackAnalysis {
@@ -48,24 +92,25 @@ export interface AttackAnalysis {
48
92
  support_shelling: ActionReport<SupportShellingStyle>;
49
93
  }
50
94
 
51
- export type AirSquadronMode = "Sortie" | "AirDefense";
52
-
53
- export interface AirSquadronState extends GearVecState, SlotSizeVecState {
54
- id?: string;
55
- mode?: AirSquadronMode;
56
- }
57
-
58
- export type ContactRank = "Rank1" | "Rank2" | "Rank3";
95
+ export type AirWaveType = "Jet" | "LandBase" | "Carrier";
59
96
 
60
97
  export type DamageState = "Normal" | "Shouha" | "Chuuha" | "Taiha" | "Sunk";
61
98
 
62
- export type Engagement = "GreenT" | "Parallel" | "HeadOn" | "RedT";
99
+ export type FleetType = "Main" | "Escort" | "RouteSup" | "BossSup";
63
100
 
64
- export type Role = "Main" | "Escort";
101
+ export type OrgType =
102
+ | "Single"
103
+ | "CarrierTaskForce"
104
+ | "SurfaceTaskForce"
105
+ | "TransportEscort"
106
+ | "EnemySingle"
107
+ | "EnemyCombined";
65
108
 
66
- export interface ShipConditions extends ShipPosition {
67
- formation?: Formation;
68
- amagiri_index?: number | null;
109
+ export interface ShipPosition {
110
+ org_type?: OrgType;
111
+ fleet_type?: FleetType;
112
+ fleet_len?: number;
113
+ index?: number;
69
114
  }
70
115
 
71
116
  export type ShipCategory =
@@ -103,134 +148,220 @@ export type ShipType =
103
148
  | "CT"
104
149
  | "AO";
105
150
 
106
- export type SpecialEnemyType =
107
- | "None"
108
- | "SoftSkinned"
109
- | "Pillbox"
110
- | "IsolatedIsland"
111
- | "SupplyDepot"
112
- | "NewSupplyDepot"
113
- | "HarbourSummerPrincess"
114
- | "PtImp"
115
- | "BattleshipSummerPrincess"
116
- | "HeavyCruiserSummerPrincess"
117
- | "FrenchBattleshipPrincess"
118
- | "AnchorageWaterDemonVacationMode"
119
- | "DockPrincess"
120
- | "SummerAircraftCarrierDemon";
121
-
122
- export interface SupportShellingSimulatorParams {
123
- attacker_formation?: Formation;
124
- target_formation?: Formation;
125
- engagement: Engagement;
126
- node_state: NodeState;
151
+ export interface FleetCutinReport<T> {
152
+ cutin: FleetCutin;
153
+ rate: number | null;
154
+ formation: Formation;
155
+ attacks: FleetCutinAttackReport<T>[];
127
156
  }
128
157
 
129
- export type FhResult<T> = { Ok: T } | { Err: string };
130
-
131
- export interface MasterIBonuses {
132
- shelling_power: MasterIBonusRule[];
133
- shelling_accuracy: MasterIBonusRule[];
134
- shelling_aerial_power: MasterIBonusRule[];
135
- torpedo_power: MasterIBonusRule[];
136
- torpedo_accuracy: MasterIBonusRule[];
137
- torpedo_evasion: MasterIBonusRule[];
138
- asw_power: MasterIBonusRule[];
139
- asw_accuracy: MasterIBonusRule[];
140
- night_power: MasterIBonusRule[];
141
- night_aerial_power: MasterIBonusRule[];
142
- night_accuracy: MasterIBonusRule[];
143
- defense_power: MasterIBonusRule[];
144
- contact_selection: MasterIBonusRule[];
145
- fighter_power: MasterIBonusRule[];
146
- ship_anti_air: MasterIBonusRule[];
147
- fleet_anti_air: MasterIBonusRule[];
148
- elos: MasterIBonusRule[];
158
+ export interface FleetCutinAttackReport<T> extends AttackReport<T> {
159
+ index: number;
160
+ ship_id: number;
161
+ power_mod: number;
149
162
  }
150
163
 
151
- export interface MasterIBonusRule {
152
- expr: CompiledEvaler;
153
- formula: CompiledEvaler;
164
+ export interface DamageReport {
165
+ miss_damage_min: number;
166
+ miss_damage_max: number;
167
+ normal_damage_min: number;
168
+ normal_damage_max: number;
169
+ critical_damage_min: number;
170
+ critical_damage_max: number;
171
+ normal_scratch_rate: number;
172
+ critical_scratch_rate: number;
173
+ damage_density: Histogram<number, number>;
174
+ damage_state_density: Histogram<DamageState, number>;
154
175
  }
155
176
 
156
- export interface AttackPower {
157
- precap: number;
158
- is_capped: boolean;
159
- capped: number;
160
- normal: number;
161
- critical: number;
162
- armor_penetration: number;
163
- remaining_ammo_mod: number;
164
- }
177
+ export type AswAttackType = "DepthCharge" | "Aerial";
165
178
 
166
- export interface AttackPowerParams {
167
- is_cutin: boolean;
168
- basic: number;
169
- cap: number;
170
- precap_mod: AttackPowerModifier;
171
- postcap_mod: AttackPowerModifier;
172
- ap_shell_mod: number | null;
173
- aerial_power: number | null;
174
- proficiency_critical_mod: number;
175
- armor_penetration: number;
176
- remaining_ammo_mod: number;
177
- balloon_mod: number;
178
- special_enemy_mods: SpecialEnemyModifiers;
179
- historical_mod: AttackPowerModifier;
180
- custom_mods: CustomPowerModifiers;
181
- }
179
+ export type ShellingType = "Normal" | "Aerial";
182
180
 
183
- export interface ActionReport<T> {
184
- data: Record<string, AttackReport<T>>;
185
- damage_state_density: Histogram<DamageState, number> | null;
186
- is_active: boolean;
187
- }
181
+ export type NightAttackType = "Normal" | "Swordfish" | "Aerial";
188
182
 
189
- export interface AttackPowerModifier {
190
- a?: number;
191
- b?: number;
192
- }
183
+ export type SupportShellingType = ShellingType;
193
184
 
194
- export interface SpecialEnemyModifiers {
195
- precap_general_mod: AttackPowerModifier;
196
- stype_mod: AttackPowerModifier;
197
- landing_craft_synergy_mod: AttackPowerModifier;
198
- toku_daihatsu_tank_mod: AttackPowerModifier;
199
- m4a1dd_mod: AttackPowerModifier;
200
- honi_mod: AttackPowerModifier;
201
- toku_daihatsu_chiha_mod: AttackPowerModifier;
202
- toku_daihatsu_chiha_kai_mod: AttackPowerModifier;
203
- postcap_general_mod: AttackPowerModifier;
204
- pt_mod: AttackPowerModifier | null;
205
- }
185
+ export type AttackType =
186
+ | { t: "Asw"; c: AswAttackType }
187
+ | { t: "Shelling"; c: ShellingType }
188
+ | { t: "Night"; c: NightAttackType }
189
+ | { t: "Torpedo" }
190
+ | { t: "SupportShelling"; c: SupportShellingType };
206
191
 
207
- export interface CustomPowerModifiers {
208
- precap_mod?: AttackPowerModifier;
209
- postcap_mod?: AttackPowerModifier;
210
- basic_power_mod?: AttackPowerModifier;
211
- historical_mod?: AttackPowerModifier;
212
- }
192
+ export type DayPhaseAttackType =
193
+ | { t: "Shelling"; c: ShellingType }
194
+ | { t: "Asw"; c: AswAttackType };
213
195
 
214
- export interface BattleConditions {
215
- org_type: OrgType;
216
- role: Role;
217
- ship_index: number;
218
- fleet_len: number;
219
- formation: Formation;
220
- fleet_los_mod: number | null;
221
- night_conditions: NightFleetConditions;
222
- }
196
+ export type NightPhaseAttackType =
197
+ | { t: "Night"; c: NightAttackType }
198
+ | { t: "Asw"; c: AswAttackType };
223
199
 
224
- export interface NightConditions {
225
- player?: NightFleetConditions;
226
- enemy?: NightFleetConditions;
200
+ export type TorpedoAttackType = null;
201
+
202
+ export type GearType =
203
+ | "Unknown"
204
+ | "SmallMainGun"
205
+ | "MediumMainGun"
206
+ | "LargeMainGun"
207
+ | "SecondaryGun"
208
+ | "Torpedo"
209
+ | "CbFighter"
210
+ | "CbDiveBomber"
211
+ | "CbTorpedoBomber"
212
+ | "CbRecon"
213
+ | "ReconSeaplane"
214
+ | "SeaplaneBomber"
215
+ | "SmallRadar"
216
+ | "LargeRadar"
217
+ | "Sonar"
218
+ | "DepthCharge"
219
+ | "ExtraArmor"
220
+ | "Engine"
221
+ | "AntiAirShell"
222
+ | "ApShell"
223
+ | "VtFuze"
224
+ | "AntiAirGun"
225
+ | "MidgetSubmarine"
226
+ | "EmergencyRepair"
227
+ | "LandingCraft"
228
+ | "Rotorcraft"
229
+ | "AntiSubPatrolAircraft"
230
+ | "MediumArmor"
231
+ | "LargeArmor"
232
+ | "Searchlight"
233
+ | "SupplyContainer"
234
+ | "ShipRepairFacility"
235
+ | "SubmarineTorpedo"
236
+ | "Starshell"
237
+ | "CommandFacility"
238
+ | "AviationPersonnel"
239
+ | "AntiAirFireDirector"
240
+ | "AntiGroundEquipment"
241
+ | "LargeMainGun2"
242
+ | "ShipPersonnel"
243
+ | "LargeSonar"
244
+ | "LargeFlyingBoat"
245
+ | "LargeSearchlight"
246
+ | "CombatRation"
247
+ | "Supplies"
248
+ | "SeaplaneFighter"
249
+ | "AmphibiousTank"
250
+ | "LbAttacker"
251
+ | "LbFighter"
252
+ | "LbRecon"
253
+ | "TransportationMaterial"
254
+ | "SubmarineEquipment"
255
+ | "LandingForce"
256
+ | "LargeLbAircraft"
257
+ | "SurfaceEquipment"
258
+ | "JetFighter"
259
+ | "JetFighterBomber"
260
+ | "JetTorpedoBomber"
261
+ | "JetRecon"
262
+ | "LargeRadar2"
263
+ | "CbRecon2"
264
+ | "SecondaryGun2";
265
+
266
+ export type GearCategory =
267
+ | "Fighter"
268
+ | "Bomber"
269
+ | "Recon"
270
+ | "MainGun"
271
+ | "Secondary"
272
+ | "Torpedo"
273
+ | "AntiSub"
274
+ | "Radar"
275
+ | "Landing"
276
+ | "Ration"
277
+ | "LandBased"
278
+ | "Misc";
279
+
280
+ export type ContactRank = "Rank1" | "Rank2" | "Rank3";
281
+
282
+ export type DayCutin =
283
+ | "Zuiun"
284
+ | "AirSea"
285
+ | "MainMain"
286
+ | "MainAp"
287
+ | "MainRadar"
288
+ | "MainSec"
289
+ | "DoubleAttack"
290
+ | "FBA"
291
+ | "BBA"
292
+ | "BA";
293
+
294
+ export type NightCutin =
295
+ | "MainTorpRadar"
296
+ | "TorpLookoutRadar"
297
+ | "TorpTsloTorp"
298
+ | "TorpTsloDrum"
299
+ | "NightZuiun2Radar"
300
+ | "NightZuiun2"
301
+ | "NightZuiunRadar"
302
+ | "NightZuiun"
303
+ | "DoubleAttack"
304
+ | "TorpTorpMain"
305
+ | "TorpTorpTorp"
306
+ | "MainMainSec"
307
+ | "MainMainMain"
308
+ | "SubTorpTorp"
309
+ | "SubRadarTorp"
310
+ | "Cvci1_25"
311
+ | "Cvci1_20"
312
+ | "Cvci1_18"
313
+ | "Photobomber";
314
+
315
+ export type FleetCutin =
316
+ | "NelsonTouch"
317
+ | "NagatoClassCutin"
318
+ | "ColoradoClassCutin"
319
+ | "KongouClassCutin"
320
+ | "Yamato2ShipCutin"
321
+ | "Yamato3ShipCutin";
322
+
323
+ export type DayCutinLike = DayCutin | FleetCutin;
324
+
325
+ export type NightCutinLike = NightCutin | FleetCutin;
326
+
327
+ export type MoraleState = "Sparkle" | "Normal" | "Orange" | "Red";
328
+
329
+ export type NodeId = string;
330
+
331
+ export interface NodeState {
332
+ map?: number;
333
+ node?: NodeId;
334
+ phase?: number;
335
+ debuff?: boolean;
336
+ disable_historical_mod?: boolean;
337
+ landing_battle?: boolean;
227
338
  }
228
339
 
229
- export interface NightFleetConditions {
230
- night_contact_rank?: ContactRank | null;
231
- starshell_index?: number | null;
232
- searchlight_index?: number | null;
233
- activates_large_searchlight?: boolean;
340
+ export type Role = "Main" | "Escort";
341
+
342
+ export type SpecialEnemyType =
343
+ | "None"
344
+ | "SoftSkinned"
345
+ | "Pillbox"
346
+ | "IsolatedIsland"
347
+ | "SupplyDepot"
348
+ | "NewSupplyDepot"
349
+ | "HarbourSummerPrincess"
350
+ | "PtImp"
351
+ | "BattleshipSummerPrincess"
352
+ | "HeavyCruiserSummerPrincess"
353
+ | "FrenchBattleshipPrincess"
354
+ | "AnchorageWaterDemonVacationMode"
355
+ | "DockPrincess"
356
+ | "SummerAircraftCarrierDemon";
357
+
358
+ export type GearTypeIdArray = [number, number, number, number, number];
359
+
360
+ export interface SupportShellingSimulatorParams {
361
+ attacker_formation?: Formation;
362
+ target_formation?: Formation;
363
+ engagement: Engagement;
364
+ node_state: NodeState;
234
365
  }
235
366
 
236
367
  export interface FleetState {
@@ -245,50 +376,31 @@ export interface FleetState {
245
376
  s7?: ShipState;
246
377
  }
247
378
 
248
- export interface ShipMeta {
249
- id: string;
250
- ship_id: number;
379
+ export interface SimulatorResult {
380
+ items: SimulatorResultItem[];
381
+ sunk_vec: [number, number, number][];
251
382
  }
252
383
 
253
- export interface FleetMeta {
384
+ export interface SimulatorResultItem {
254
385
  id: string;
255
- len: number;
256
- ships: [string, ShipMeta | null][];
257
- }
258
-
259
- export interface CompMeta {
260
- fleets: Record<FleetType, FleetMeta>;
261
- }
262
-
263
- export type MoraleState = "Sparkle" | "Normal" | "Orange" | "Red";
264
-
265
- export interface MasterData extends MasterBattleDefinitions {
266
- created_at: number;
267
- gears: MasterGear[];
268
- gear_attrs: MasterAttrRule<GearAttr>[];
269
- ships: MasterShip[];
270
- ship_attrs: MasterAttrRule<ShipAttr>[];
271
- ibonuses: MasterIBonuses;
272
- equippability: MasterEquippability;
273
- }
274
-
275
- export interface NationalityDef {
276
- id: number;
277
- ctypes: number[];
386
+ fleet_type: FleetType;
387
+ index: number;
388
+ damage_state_map: Record<DamageState, number>;
278
389
  }
279
390
 
280
- export interface MasterAttrRule<T> {
281
- tag: T;
282
- name: string;
283
- expr: CompiledEvaler;
391
+ export interface HitRate {
392
+ normal: number;
393
+ critical: number;
394
+ total: number;
284
395
  }
285
396
 
286
- export interface MasterBattleDefinitions {
287
- formation: NestedFormationDef[];
288
- anti_air_cutin: AntiAirCutinDef[];
289
- day_cutin: DayCutinDef[];
290
- night_cutin: NightCutinDef[];
291
- historical_bonuses?: HistoricalBonusDef[];
397
+ export interface HitRateParams {
398
+ accuracy_term: number;
399
+ evasion_term: number;
400
+ target_morale_mod: number;
401
+ critical_rate_constant: number;
402
+ critical_percentage_bonus: number;
403
+ hit_percentage_bonus: number;
292
404
  }
293
405
 
294
406
  export interface NightContactChance {
@@ -334,263 +446,243 @@ export interface DayCutinReport extends ActionReport<DayPhaseAttackStyle> {
334
446
  observation_term: number | null;
335
447
  }
336
448
 
337
- export interface AttackAnalyzerShipConfig
338
- extends ShipConditions,
339
- NightFleetConditions {
340
- balloons?: number;
341
- fleet_los_mod?: number | null;
449
+ export interface ActionReport<T> {
450
+ data: Record<string, AttackReport<T>>;
451
+ damage_state_density: Histogram<DamageState, number> | null;
452
+ is_active: boolean;
342
453
  }
343
454
 
344
- export type GearAttr =
345
- | "Unknown"
346
- | "HighAngleMount"
347
- | "NightFighter"
348
- | "NightAttacker"
349
- | "HeavyBomber"
350
- | "NightRecon"
351
- | "MainGun"
352
- | "Radar"
353
- | "SurfaceRadar"
354
- | "AirRadar"
355
- | "DepthChargeProjector"
356
- | "SynergisticDepthCharge"
357
- | "AntiSubMortar"
358
- | "AntiSubWeapon"
359
- | "ApDepthCharge"
360
- | "AntiSubAircraft"
361
- | "LateModelBowTorpedo"
362
- | "Seaplane"
363
- | "CbAircraft"
364
- | "LbAircraft"
365
- | "JetAircraft"
366
- | "Fighter"
367
- | "Recon"
368
- | "ObservationSeaplane"
369
- | "CbFighterBomber"
370
- | "AntiInstDiveBomber"
371
- | "CbSwordfish"
372
- | "SemiNightPlane"
373
- | "HighAltitudeInterceptor";
455
+ export interface ShipMeta {
456
+ id: string;
457
+ ship_id: number;
458
+ }
374
459
 
375
- export interface OrgState {
376
- id?: string;
377
- f1?: FleetState;
378
- f2?: FleetState;
379
- f3?: FleetState;
380
- f4?: FleetState;
381
- a1?: AirSquadronState;
382
- a2?: AirSquadronState;
383
- a3?: AirSquadronState;
384
- hq_level?: number;
385
- org_type?: OrgType;
386
- sortie?: FleetKey;
387
- route_sup?: FleetKey;
388
- boss_sup?: FleetKey;
460
+ export interface FleetMeta {
461
+ id: string;
462
+ len: number;
463
+ ships: [string, ShipMeta | null][];
389
464
  }
390
465
 
391
- export type FleetKey = "f1" | "f2" | "f3" | "f4";
466
+ export interface CompMeta {
467
+ fleets: Record<FleetType, FleetMeta>;
468
+ }
392
469
 
393
- export type OrgType =
394
- | "Single"
395
- | "CarrierTaskForce"
396
- | "SurfaceTaskForce"
397
- | "TransportEscort"
398
- | "EnemySingle"
399
- | "EnemyCombined";
470
+ export interface MoveShipPayload {
471
+ current: [string, string, ShipKey];
472
+ target: [string | null, string, ShipKey];
473
+ }
400
474
 
401
- export interface EquippabilityRule {
402
- ship: CompiledEvaler;
403
- keys?: string[];
404
- include?: string;
405
- exclude?: string;
475
+ export type GearVecInput = GearInput[];
476
+
477
+ export interface GearInput {
478
+ gear_id: number;
479
+ types: GearTypeIdArray;
480
+ firepower: number;
481
+ torpedo: number;
482
+ anti_air: number;
483
+ armor: number;
484
+ evasion: number;
485
+ asw: number;
486
+ los: number;
487
+ bombing: number;
488
+ accuracy: number;
489
+ range: number;
490
+ radius: number;
491
+ stars: number;
492
+ ace: number;
406
493
  }
407
494
 
408
- export interface MasterEquippability {
409
- equip_stype: EquipStype[];
410
- equip_exslot: number[];
411
- equip_ship: MstEquipShip[];
412
- equip_exslot_ship: Record<number, MstEquipExslotShip>;
413
- rules: EquippabilityRule[];
495
+ export interface ShipInput {
496
+ ship_id: number;
497
+ ctype: number;
498
+ stype: number;
499
+ yomi: string;
414
500
  }
415
501
 
416
- export interface MstEquipExslotShip {
417
- api_ctypes: Record<number, number> | null;
418
- api_ship_ids: Record<number, number> | null;
419
- api_stypes: Record<number, number> | null;
502
+ export interface EBonuses {
503
+ firepower: number;
504
+ torpedo: number;
505
+ anti_air: number;
506
+ armor: number;
507
+ evasion: number;
508
+ asw: number;
509
+ los: number;
510
+ bombing: number;
511
+ accuracy: number;
512
+ range: number;
420
513
  }
421
514
 
422
- export interface MstEquipShip {
423
- api_ship_id: number;
424
- api_equip_type: number[];
515
+ export interface MasterIBonuses {
516
+ shelling_power: MasterIBonusRule[];
517
+ shelling_accuracy: MasterIBonusRule[];
518
+ shelling_aerial_power: MasterIBonusRule[];
519
+ torpedo_power: MasterIBonusRule[];
520
+ torpedo_accuracy: MasterIBonusRule[];
521
+ torpedo_evasion: MasterIBonusRule[];
522
+ asw_power: MasterIBonusRule[];
523
+ asw_accuracy: MasterIBonusRule[];
524
+ night_power: MasterIBonusRule[];
525
+ night_aerial_power: MasterIBonusRule[];
526
+ night_accuracy: MasterIBonusRule[];
527
+ defense_power: MasterIBonusRule[];
528
+ contact_selection: MasterIBonusRule[];
529
+ fighter_power: MasterIBonusRule[];
530
+ ship_anti_air: MasterIBonusRule[];
531
+ fleet_anti_air: MasterIBonusRule[];
532
+ elos: MasterIBonusRule[];
425
533
  }
426
534
 
427
- export interface EquipStype {
428
- id: number;
429
- equip_type: number[];
535
+ export interface MasterIBonusRule {
536
+ expr: CompiledEvaler;
537
+ formula: CompiledEvaler;
430
538
  }
431
539
 
432
- export interface CompAntiAirAnalysis {
433
- fleet_adjusted_anti_air: number;
434
- ships: AntiAirReport[];
435
- anti_air_cutin_chance: [number, number][];
540
+ export interface MasterGear {
541
+ gear_id: number;
542
+ name: string;
543
+ types: GearTypeIdArray;
544
+ special_type?: number;
545
+ max_hp?: number;
546
+ firepower?: number;
547
+ armor?: number;
548
+ torpedo?: number;
549
+ anti_air?: number;
550
+ speed?: number;
551
+ bombing?: number;
552
+ asw?: number;
553
+ los?: number;
554
+ luck?: number;
555
+ accuracy?: number;
556
+ evasion?: number;
557
+ range?: number;
558
+ radius?: number;
559
+ cost?: number;
560
+ improvable?: boolean;
561
+ ship_anti_air_resist?: number;
562
+ fleet_anti_air_resist?: number;
563
+ historical_aircraft_group?: number;
436
564
  }
437
565
 
438
- export interface AntiAirReport {
439
- ship_id: number;
440
- role: Role;
441
- index: number;
442
- adjusted_anti_air: number | null;
443
- proportional_shotdown_rate: number | null;
444
- fixed_shotdown_number: number | null;
445
- guaranteed: number | null;
446
- anti_air_cutin_chance: [number, number][];
447
- anti_air_propellant_barrage_chance: number | null;
566
+ export interface NodeAttackAnalyzerShipConfig extends NightFleetConditions {
567
+ formation?: Formation;
448
568
  }
449
569
 
450
- export interface FormationCombatModifiersDef {
451
- power_mod?: number;
452
- accuracy_mod?: number;
453
- evasion_mod?: number;
570
+ export interface NodeAttackAnalyzerConfig {
571
+ air_state?: AirState;
572
+ engagement?: Engagement;
573
+ node_state?: NodeState;
574
+ left?: NodeAttackAnalyzerShipConfig;
575
+ right?: NodeAttackAnalyzerShipConfig;
454
576
  }
455
577
 
456
- export interface FormationDef {
457
- tag: Formation;
458
- protection_rate: number | null;
459
- fleet_anti_air_mod: number;
460
- shelling: FormationCombatModifiersDef;
461
- torpedo: FormationCombatModifiersDef;
462
- asw: FormationCombatModifiersDef;
463
- night: FormationCombatModifiersDef;
464
- support_shelling: FormationCombatModifiersDef;
578
+ export interface NodeAttackAnalysis {
579
+ left: AttackAnalysis;
580
+ right: AttackAnalysis;
581
+ shelling_fleet_cutin: FleetCutinReport<ShellingStyle>[];
582
+ night_fleet_cutin: FleetCutinReport<NightAttackStyle>[];
465
583
  }
466
584
 
467
- export type NestedFormationDef =
468
- | FormationDef
469
- | { top_half: FormationDef; bottom_half: FormationDef };
585
+ export interface CompAnalyzerConfig {
586
+ engagement: Engagement;
587
+ formation: Formation;
588
+ anti_air_cutin: number | null;
589
+ ship_anti_air_resist: number;
590
+ fleet_anti_air_resist: number;
591
+ left_night_fleet_conditions: NightFleetConditions;
592
+ right_night_fleet_conditions: NightFleetConditions;
593
+ }
470
594
 
471
- export interface AntiAirCutinDef {
472
- id: number;
473
- type_factor: number | null;
474
- multiplier: number | null;
475
- guaranteed: number | null;
476
- sequential: boolean | null;
595
+ export interface CompNightAnalysis {
596
+ night_cutin: CompNightCutinAnalysis;
597
+ fleet_cutin: FleetCutinReport<NightAttackStyle>[];
477
598
  }
478
599
 
479
- export interface DayCutinDef {
480
- tag: DayCutin;
481
- hits: number;
482
- type_factor: number | null;
483
- power_mod: number | null;
484
- accuracy_mod: number | null;
600
+ export interface CompDayAnalysis {
601
+ day_cutin: CompDayCutinAnalysis;
602
+ fleet_cutin: FleetCutinReport<ShellingStyle>[];
485
603
  }
486
604
 
487
- export interface HistoricalBonusDef {
488
- map?: number;
489
- node?: CompiledEvaler;
490
- phase?: number;
491
- debuff?: boolean;
492
- ship?: CompiledEvaler;
493
- enemy?: CompiledEvaler;
494
- power_mod?: AttackPowerModifier;
495
- armor_penetration?: number;
496
- accuracy_mod?: number;
497
- evasion_mod?: number;
605
+ export interface CompAnalysis {
606
+ day: CompDayAnalysis;
607
+ night: CompNightAnalysis;
608
+ contact: ContactAnalysis;
609
+ anti_air: CompAntiAirAnalysis;
498
610
  }
499
611
 
500
- export interface HistoricalParams {
501
- power_mod: AttackPowerModifier;
502
- armor_penetration: number;
503
- accuracy_mod: number;
504
- target_evasion_mod: number;
612
+ export interface AttackAnalyzerShipConfig
613
+ extends ShipConditions,
614
+ NightFleetConditions {
615
+ balloons?: number;
616
+ fleet_los_mod?: number | null;
505
617
  }
506
618
 
507
- export interface NightCutinDef {
508
- tag: NightCutin;
509
- hits: number;
510
- type_factor: number | null;
511
- power_mod: number | null;
512
- accuracy_mod: number | null;
619
+ export interface AttackPowerModifier {
620
+ a?: number;
621
+ b?: number;
513
622
  }
514
623
 
515
- export interface BattleDefinitions {
516
- formation: Record<Formation, NestedFormationDef>;
517
- anti_air_cutin: Record<number, AntiAirCutinDef>;
518
- day_cutin: Record<DayCutin, DayCutinDef>;
519
- night_cutin: Record<NightCutin, NightCutinDef>;
520
- historical_bonuses: HistoricalBonusDef[];
624
+ export interface SpecialEnemyModifiers {
625
+ precap_general_mod: AttackPowerModifier;
626
+ stype_mod: AttackPowerModifier;
627
+ landing_craft_synergy_mod: AttackPowerModifier;
628
+ toku_daihatsu_tank_mod: AttackPowerModifier;
629
+ m4a1dd_mod: AttackPowerModifier;
630
+ honi_mod: AttackPowerModifier;
631
+ toku_daihatsu_chiha_mod: AttackPowerModifier;
632
+ toku_daihatsu_chiha_kai_mod: AttackPowerModifier;
633
+ t4_tank_group_mod: AttackPowerModifier;
634
+ t4_tank_kai_mod: AttackPowerModifier;
635
+ postcap_general_mod: AttackPowerModifier;
636
+ pt_mod: AttackPowerModifier | null;
521
637
  }
522
638
 
523
- export type FleetType = "Main" | "Escort" | "RouteSup" | "BossSup";
524
-
525
- export type SingleFormation =
526
- | "LineAhead"
527
- | "DoubleLine"
528
- | "Diamond"
529
- | "Echelon"
530
- | "LineAbreast"
531
- | "Vanguard";
532
-
533
- export type CombinedFormation =
534
- | "Cruising1"
535
- | "Cruising2"
536
- | "Cruising3"
537
- | "Cruising4";
538
-
539
- export type Formation = SingleFormation | CombinedFormation;
540
-
541
- export interface ShipPosition {
542
- org_type?: OrgType;
543
- fleet_type?: FleetType;
544
- fleet_len?: number;
545
- index?: number;
639
+ export interface CustomPowerModifiers {
640
+ precap_mod?: AttackPowerModifier;
641
+ postcap_mod?: AttackPowerModifier;
642
+ basic_power_mod?: AttackPowerModifier;
643
+ historical_mod?: AttackPowerModifier;
546
644
  }
547
645
 
548
- export type Histogram<K extends keyof any, V> = Partial<Record<K, V>>;
549
-
550
- export interface SimulatorResult {
551
- items: SimulatorResultItem[];
552
- sunk_vec: [number, number, number][];
646
+ export interface GearState {
647
+ id?: string;
648
+ gear_id: number;
649
+ exp?: number;
650
+ stars?: number;
553
651
  }
554
652
 
555
- export interface SimulatorResultItem {
556
- id: string;
557
- fleet_type: FleetType;
558
- index: number;
559
- damage_state_map: Record<DamageState, number>;
653
+ export interface GearVecState {
654
+ g1?: GearState;
655
+ g2?: GearState;
656
+ g3?: GearState;
657
+ g4?: GearState;
658
+ g5?: GearState;
659
+ gx?: GearState;
560
660
  }
561
661
 
562
- export interface AttackReport<T> {
563
- style: T;
564
- proc_rate: number | null;
565
- attack_power: AttackPower | null;
566
- attack_power_params: AttackPowerParams | null;
567
- hits: number;
568
- hit_rate: HitRate | null;
569
- hit_rate_params: HitRateParams | null;
570
- damage: DamageReport | null;
662
+ export interface ShipConditions extends ShipPosition {
663
+ formation?: Formation;
664
+ amagiri_index?: number | null;
571
665
  }
572
666
 
573
- export type AirWaveType = "Jet" | "LandBase" | "Carrier";
574
-
575
- export type Side = "Player" | "Enemy";
576
-
577
- export type Align = "Left" | "Right";
578
-
579
- export type CompiledEvaler = string;
667
+ export interface MasterData extends MasterBattleDefinitions {
668
+ created_at: number;
669
+ gears: MasterGear[];
670
+ gear_attrs: MasterAttrRule<GearAttr>[];
671
+ ships: MasterShip[];
672
+ ship_attrs: MasterAttrRule<ShipAttr>[];
673
+ ibonuses: MasterIBonuses;
674
+ equippability: MasterEquippability;
675
+ }
580
676
 
581
- export interface HitRate {
582
- normal: number;
583
- critical: number;
584
- total: number;
677
+ export interface NationalityDef {
678
+ id: number;
679
+ ctypes: number[];
585
680
  }
586
681
 
587
- export interface HitRateParams {
588
- accuracy_term: number;
589
- evasion_term: number;
590
- target_morale_mod: number;
591
- critical_rate_constant: number;
592
- critical_percentage_bonus: number;
593
- hit_percentage_bonus: number;
682
+ export interface MasterAttrRule<T> {
683
+ tag: T;
684
+ name: string;
685
+ expr: CompiledEvaler;
594
686
  }
595
687
 
596
688
  export interface ShipAnalyzerConfig {
@@ -600,25 +692,82 @@ export interface ShipAnalyzerConfig {
600
692
  right?: AttackAnalyzerShipConfig;
601
693
  }
602
694
 
603
- export interface NodeAttackAnalyzerShipConfig extends NightFleetConditions {
604
- formation?: Formation;
695
+ export interface BattleConditions {
696
+ org_type: OrgType;
697
+ role: Role;
698
+ ship_index: number;
699
+ fleet_len: number;
700
+ formation: Formation;
701
+ fleet_los_mod: number | null;
702
+ night_conditions: NightFleetConditions;
605
703
  }
606
704
 
607
- export interface NodeAttackAnalyzerConfig {
608
- air_state?: AirState;
609
- engagement?: Engagement;
610
- node_state?: NodeState;
611
- left?: NodeAttackAnalyzerShipConfig;
612
- right?: NodeAttackAnalyzerShipConfig;
705
+ export interface NightConditions {
706
+ player?: NightFleetConditions;
707
+ enemy?: NightFleetConditions;
613
708
  }
614
709
 
615
- export interface NodeAttackAnalysis {
616
- left: AttackAnalysis;
617
- right: AttackAnalysis;
618
- shelling_fleet_cutin: FleetCutinReport<ShellingStyle>[];
619
- night_fleet_cutin: FleetCutinReport<NightAttackStyle>[];
710
+ export interface NightFleetConditions {
711
+ night_contact_rank?: ContactRank | null;
712
+ starshell_index?: number | null;
713
+ searchlight_index?: number | null;
714
+ activates_large_searchlight?: boolean;
620
715
  }
621
716
 
717
+ export type GearAttr =
718
+ | "Unknown"
719
+ | "HighAngleMount"
720
+ | "NightFighter"
721
+ | "NightAttacker"
722
+ | "HeavyBomber"
723
+ | "NightRecon"
724
+ | "MainGun"
725
+ | "Radar"
726
+ | "SurfaceRadar"
727
+ | "AirRadar"
728
+ | "DepthChargeProjector"
729
+ | "SynergisticDepthCharge"
730
+ | "AntiSubMortar"
731
+ | "AntiSubWeapon"
732
+ | "ApDepthCharge"
733
+ | "AntiSubAircraft"
734
+ | "LateModelBowTorpedo"
735
+ | "Seaplane"
736
+ | "CbAircraft"
737
+ | "LbAircraft"
738
+ | "JetAircraft"
739
+ | "Fighter"
740
+ | "Recon"
741
+ | "ObservationSeaplane"
742
+ | "CbFighterBomber"
743
+ | "AntiInstDiveBomber"
744
+ | "CbSwordfish"
745
+ | "SemiNightPlane"
746
+ | "HighAltitudeInterceptor";
747
+
748
+ export type ShipAttr =
749
+ | "Unknown"
750
+ | "NightCarrier"
751
+ | "Installation"
752
+ | "RoyalNavy"
753
+ | "Kai2"
754
+ | "TurbineSpeedBonus"
755
+ | "NewModelBoilerSpeedBonus"
756
+ | "Pillbox"
757
+ | "IsolatedIsland"
758
+ | "HarbourSummerPrincess"
759
+ | "SupplyDepot"
760
+ | "NewSupplyDepot"
761
+ | "PtImp"
762
+ | "BattleshipSummerPrincess"
763
+ | "HeavyCruiserSummerPrincess"
764
+ | "AnchorageWaterDemonVacationMode"
765
+ | "FrenchBattleshipPrincess"
766
+ | "DockPrincess"
767
+ | "SummerAircraftCarrierDemon";
768
+
769
+ export type FhResult<T> = { Ok: T } | { Err: string };
770
+
622
771
  export interface ContactAnalysis {
623
772
  single: DayContactChance[] | null;
624
773
  combined: DayContactChance[] | null;
@@ -633,190 +782,50 @@ export interface DayContactChance {
633
782
  total: number;
634
783
  }
635
784
 
636
- export type AswAttackType = "DepthCharge" | "Aerial";
637
-
638
- export type ShellingType = "Normal" | "Aerial";
785
+ export type AirSquadronMode = "Sortie" | "AirDefense";
639
786
 
640
- export type NightAttackType = "Normal" | "Swordfish" | "Aerial";
787
+ export interface AirSquadronState extends GearVecState, SlotSizeVecState {
788
+ id?: string;
789
+ mode?: AirSquadronMode;
790
+ }
641
791
 
642
- export type SupportShellingType = ShellingType;
792
+ export interface ShellingStyle {
793
+ tag: "ShellingStyle";
794
+ attack_type: ShellingType;
795
+ cutin: DayCutinLike | null;
796
+ power_mod: number;
797
+ accuracy_mod: number;
798
+ hits: number;
799
+ }
643
800
 
644
- export type AttackType =
645
- | { t: "Asw"; c: AswAttackType }
646
- | { t: "Shelling"; c: ShellingType }
647
- | { t: "Night"; c: NightAttackType }
648
- | { t: "Torpedo" }
649
- | { t: "SupportShelling"; c: SupportShellingType };
801
+ export interface NightAttackStyle {
802
+ tag: "NightAttackStyle";
803
+ attack_type: NightAttackType;
804
+ cutin: NightCutinLike | null;
805
+ power_mod: number;
806
+ accuracy_mod: number;
807
+ hits: number;
808
+ }
650
809
 
651
- export type DayPhaseAttackType =
652
- | { t: "Shelling"; c: ShellingType }
653
- | { t: "Asw"; c: AswAttackType };
810
+ export interface AswAttackStyle {
811
+ tag: "AswAttackStyle";
812
+ attack_type: AswAttackType;
813
+ }
654
814
 
655
- export type NightPhaseAttackType =
656
- | { t: "Night"; c: NightAttackType }
657
- | { t: "Asw"; c: AswAttackType };
815
+ export interface TorpedoAttackStyle {
816
+ tag: "TorpedoAttackStyle";
817
+ attack_type: TorpedoAttackType;
818
+ }
658
819
 
659
- export type TorpedoAttackType = null;
820
+ export type DayPhaseAttackStyle = ShellingStyle | AswAttackStyle;
660
821
 
661
- export type NodeId = string;
822
+ export type NightPhaseAttackStyle = NightAttackStyle | AswAttackStyle;
662
823
 
663
- export interface NodeState {
664
- map?: number;
665
- node?: NodeId;
666
- phase?: number;
667
- debuff?: boolean;
668
- disable_historical_mod?: boolean;
669
- landing_battle?: boolean;
824
+ export interface SupportShellingStyle {
825
+ tag: "SupportShellingStyle";
826
+ attack_type: SupportShellingType;
670
827
  }
671
828
 
672
- export type SlotSizeVec = (number | null)[];
673
-
674
- export interface MoveShipPayload {
675
- current: [string, string, ShipKey];
676
- target: [string | null, string, ShipKey];
677
- }
678
-
679
- export interface MasterGear {
680
- gear_id: number;
681
- name: string;
682
- types: GearTypeIdArray;
683
- special_type?: number;
684
- max_hp?: number;
685
- firepower?: number;
686
- armor?: number;
687
- torpedo?: number;
688
- anti_air?: number;
689
- speed?: number;
690
- bombing?: number;
691
- asw?: number;
692
- los?: number;
693
- luck?: number;
694
- accuracy?: number;
695
- evasion?: number;
696
- range?: number;
697
- radius?: number;
698
- cost?: number;
699
- improvable?: boolean;
700
- ship_anti_air_resist?: number;
701
- fleet_anti_air_resist?: number;
702
- historical_aircraft_group?: number;
703
- }
704
-
705
- export interface ShellingStyle {
706
- tag: "ShellingStyle";
707
- attack_type: ShellingType;
708
- cutin: DayCutinLike | null;
709
- power_mod: number;
710
- accuracy_mod: number;
711
- hits: number;
712
- }
713
-
714
- export interface NightAttackStyle {
715
- tag: "NightAttackStyle";
716
- attack_type: NightAttackType;
717
- cutin: NightCutinLike | null;
718
- power_mod: number;
719
- accuracy_mod: number;
720
- hits: number;
721
- }
722
-
723
- export interface AswAttackStyle {
724
- tag: "AswAttackStyle";
725
- attack_type: AswAttackType;
726
- }
727
-
728
- export interface TorpedoAttackStyle {
729
- tag: "TorpedoAttackStyle";
730
- attack_type: TorpedoAttackType;
731
- }
732
-
733
- export type DayPhaseAttackStyle = ShellingStyle | AswAttackStyle;
734
-
735
- export type NightPhaseAttackStyle = NightAttackStyle | AswAttackStyle;
736
-
737
- export interface SupportShellingStyle {
738
- tag: "SupportShellingStyle";
739
- attack_type: SupportShellingType;
740
- }
741
-
742
- export type GearType =
743
- | "Unknown"
744
- | "SmallMainGun"
745
- | "MediumMainGun"
746
- | "LargeMainGun"
747
- | "SecondaryGun"
748
- | "Torpedo"
749
- | "CbFighter"
750
- | "CbDiveBomber"
751
- | "CbTorpedoBomber"
752
- | "CbRecon"
753
- | "ReconSeaplane"
754
- | "SeaplaneBomber"
755
- | "SmallRadar"
756
- | "LargeRadar"
757
- | "Sonar"
758
- | "DepthCharge"
759
- | "ExtraArmor"
760
- | "Engine"
761
- | "AntiAirShell"
762
- | "ApShell"
763
- | "VtFuze"
764
- | "AntiAirGun"
765
- | "MidgetSubmarine"
766
- | "EmergencyRepair"
767
- | "LandingCraft"
768
- | "Rotorcraft"
769
- | "AntiSubPatrolAircraft"
770
- | "MediumArmor"
771
- | "LargeArmor"
772
- | "Searchlight"
773
- | "SupplyContainer"
774
- | "ShipRepairFacility"
775
- | "SubmarineTorpedo"
776
- | "Starshell"
777
- | "CommandFacility"
778
- | "AviationPersonnel"
779
- | "AntiAirFireDirector"
780
- | "AntiGroundEquipment"
781
- | "LargeMainGun2"
782
- | "ShipPersonnel"
783
- | "LargeSonar"
784
- | "LargeFlyingBoat"
785
- | "LargeSearchlight"
786
- | "CombatRation"
787
- | "Supplies"
788
- | "SeaplaneFighter"
789
- | "AmphibiousTank"
790
- | "LbAttacker"
791
- | "LbFighter"
792
- | "LbRecon"
793
- | "TransportationMaterial"
794
- | "SubmarineEquipment"
795
- | "LandingForce"
796
- | "LargeLbAircraft"
797
- | "SurfaceEquipment"
798
- | "JetFighter"
799
- | "JetFighterBomber"
800
- | "JetTorpedoBomber"
801
- | "JetRecon"
802
- | "LargeRadar2"
803
- | "CbRecon2"
804
- | "SecondaryGun2";
805
-
806
- export type GearCategory =
807
- | "Fighter"
808
- | "Bomber"
809
- | "Recon"
810
- | "MainGun"
811
- | "Secondary"
812
- | "Torpedo"
813
- | "AntiSub"
814
- | "Radar"
815
- | "Landing"
816
- | "Ration"
817
- | "LandBased"
818
- | "Misc";
819
-
820
829
  export interface SlotSizeVecState {
821
830
  ss1?: number;
822
831
  ss2?: number;
@@ -849,199 +858,192 @@ export interface ShipState extends GearVecState, SlotSizeVecState {
849
858
 
850
859
  export type ShipKey = "s1" | "s2" | "s3" | "s4" | "s5" | "s6" | "s7";
851
860
 
852
- export type SpeedGroup = "A" | "B1" | "B2" | "C";
861
+ export type SlotSizeVec = (number | null)[];
853
862
 
854
- export type GearVecInput = GearInput[];
863
+ export type Histogram<K extends keyof any, V> = Partial<Record<K, V>>;
855
864
 
856
- export interface GearInput {
857
- gear_id: number;
858
- types: GearTypeIdArray;
859
- firepower: number;
860
- torpedo: number;
861
- anti_air: number;
862
- armor: number;
863
- evasion: number;
864
- asw: number;
865
- los: number;
866
- bombing: number;
867
- accuracy: number;
868
- range: number;
869
- radius: number;
870
- stars: number;
871
- ace: number;
865
+ export interface MasterBattleDefinitions {
866
+ formation: NestedFormationDef[];
867
+ anti_air_cutin: AntiAirCutinDef[];
868
+ day_cutin: DayCutinDef[];
869
+ night_cutin: NightCutinDef[];
870
+ historical_bonuses?: HistoricalBonusDef[];
872
871
  }
873
872
 
874
- export interface ShipInput {
875
- ship_id: number;
876
- ctype: number;
877
- stype: number;
878
- yomi: string;
873
+ export type CompiledEvaler = string;
874
+
875
+ export interface EquippabilityRule {
876
+ ship: CompiledEvaler;
877
+ keys?: string[];
878
+ include?: string;
879
+ exclude?: string;
879
880
  }
880
881
 
881
- export interface EBonuses {
882
- firepower: number;
883
- torpedo: number;
884
- anti_air: number;
885
- armor: number;
886
- evasion: number;
887
- asw: number;
888
- los: number;
889
- bombing: number;
890
- accuracy: number;
891
- range: number;
882
+ export interface MasterEquippability {
883
+ equip_stype: EquipStype[];
884
+ equip_exslot: number[];
885
+ equip_ship: MstEquipShip[];
886
+ equip_exslot_ship: Record<number, MstEquipExslotShip>;
887
+ rules: EquippabilityRule[];
892
888
  }
893
889
 
894
- export interface MasterShip {
895
- ship_id: number;
896
- name: string;
897
- yomi: string;
898
- stype: number;
899
- ctype: number;
900
- nationality?: number;
901
- sort_id?: number;
902
- max_hp: StatInterval;
903
- firepower: StatInterval;
904
- armor: StatInterval;
905
- torpedo: StatInterval;
906
- evasion: StatInterval;
907
- anti_air: StatInterval;
908
- asw: StatInterval;
909
- los: StatInterval;
910
- luck: StatInterval;
911
- torpedo_accuracy?: number;
912
- basic_evasion_term?: number;
913
- speed: number;
914
- range?: number;
915
- fuel?: number;
916
- ammo?: number;
917
- next_id?: number;
918
- next_level?: number;
919
- slotnum: number;
920
- slots: SlotSizeVec;
921
- stock: GearState[];
922
- speed_group?: SpeedGroup;
923
- useful?: boolean;
890
+ export interface MstEquipExslotShip {
891
+ api_ctypes: Record<number, number> | null;
892
+ api_ship_ids: Record<number, number> | null;
893
+ api_stypes: Record<number, number> | null;
924
894
  }
925
895
 
926
- export type StatInterval = [number | null, number | null];
896
+ export interface MstEquipShip {
897
+ api_ship_id: number;
898
+ api_equip_type: number[];
899
+ }
927
900
 
928
- export type DayCutin =
929
- | "Zuiun"
930
- | "AirSea"
931
- | "MainMain"
932
- | "MainAp"
933
- | "MainRadar"
934
- | "MainSec"
935
- | "DoubleAttack"
936
- | "FBA"
937
- | "BBA"
938
- | "BA";
901
+ export interface EquipStype {
902
+ id: number;
903
+ equip_type: number[];
904
+ }
939
905
 
940
- export type NightCutin =
941
- | "MainTorpRadar"
942
- | "TorpLookoutRadar"
943
- | "TorpTsloTorp"
944
- | "TorpTsloDrum"
945
- | "NightZuiun2Radar"
946
- | "NightZuiun2"
947
- | "NightZuiunRadar"
948
- | "NightZuiun"
949
- | "DoubleAttack"
950
- | "TorpTorpMain"
951
- | "TorpTorpTorp"
952
- | "MainMainSec"
953
- | "MainMainMain"
954
- | "SubTorpTorp"
955
- | "SubRadarTorp"
956
- | "Cvci1_25"
957
- | "Cvci1_20"
958
- | "Cvci1_18"
959
- | "Photobomber";
906
+ export interface CompAntiAirAnalysis {
907
+ fleet_adjusted_anti_air: number;
908
+ ships: AntiAirReport[];
909
+ anti_air_cutin_chance: [number, number][];
910
+ }
960
911
 
961
- export type FleetCutin =
962
- | "NelsonTouch"
963
- | "NagatoClassCutin"
964
- | "ColoradoClassCutin"
965
- | "KongouClassCutin"
966
- | "Yamato2ShipCutin"
967
- | "Yamato3ShipCutin";
912
+ export interface AntiAirReport {
913
+ ship_id: number;
914
+ role: Role;
915
+ index: number;
916
+ adjusted_anti_air: number | null;
917
+ proportional_shotdown_rate: number | null;
918
+ fixed_shotdown_number: number | null;
919
+ guaranteed: number | null;
920
+ anti_air_cutin_chance: [number, number][];
921
+ anti_air_propellant_barrage_chance: number | null;
922
+ }
968
923
 
969
- export type DayCutinLike = DayCutin | FleetCutin;
924
+ export type AirState =
925
+ | "AirSupremacy"
926
+ | "AirSuperiority"
927
+ | "AirParity"
928
+ | "AirDenial"
929
+ | "AirIncapability";
970
930
 
971
- export type NightCutinLike = NightCutin | FleetCutin;
931
+ export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
972
932
 
973
- export interface GearState {
974
- id?: string;
975
- gear_id: number;
976
- exp?: number;
977
- stars?: number;
933
+ export interface FormationCombatModifiersDef {
934
+ power_mod?: number;
935
+ accuracy_mod?: number;
936
+ evasion_mod?: number;
978
937
  }
979
938
 
980
- export interface GearVecState {
981
- g1?: GearState;
982
- g2?: GearState;
983
- g3?: GearState;
984
- g4?: GearState;
985
- g5?: GearState;
986
- gx?: GearState;
939
+ export interface FormationDef {
940
+ tag: Formation;
941
+ protection_rate: number | null;
942
+ fleet_anti_air_mod: number;
943
+ shelling: FormationCombatModifiersDef;
944
+ torpedo: FormationCombatModifiersDef;
945
+ asw: FormationCombatModifiersDef;
946
+ night: FormationCombatModifiersDef;
947
+ support_shelling: FormationCombatModifiersDef;
987
948
  }
988
949
 
989
- export type ShipAttr =
990
- | "Unknown"
991
- | "NightCarrier"
992
- | "Installation"
993
- | "RoyalNavy"
994
- | "Kai2"
995
- | "TurbineSpeedBonus"
996
- | "NewModelBoilerSpeedBonus"
997
- | "Pillbox"
998
- | "IsolatedIsland"
999
- | "HarbourSummerPrincess"
1000
- | "SupplyDepot"
1001
- | "NewSupplyDepot"
1002
- | "PtImp"
1003
- | "BattleshipSummerPrincess"
1004
- | "HeavyCruiserSummerPrincess"
1005
- | "AnchorageWaterDemonVacationMode"
1006
- | "FrenchBattleshipPrincess"
1007
- | "DockPrincess"
1008
- | "SummerAircraftCarrierDemon";
950
+ export type NestedFormationDef =
951
+ | FormationDef
952
+ | { top_half: FormationDef; bottom_half: FormationDef };
1009
953
 
1010
- export interface CompAnalyzerConfig {
1011
- engagement: Engagement;
1012
- formation: Formation;
1013
- anti_air_cutin: number | null;
1014
- ship_anti_air_resist: number;
1015
- fleet_anti_air_resist: number;
1016
- left_night_fleet_conditions: NightFleetConditions;
1017
- right_night_fleet_conditions: NightFleetConditions;
954
+ export interface AntiAirCutinDef {
955
+ id: number;
956
+ type_factor: number | null;
957
+ multiplier: number | null;
958
+ guaranteed: number | null;
959
+ sequential: boolean | null;
1018
960
  }
1019
961
 
1020
- export interface CompNightAnalysis {
1021
- night_cutin: CompNightCutinAnalysis;
1022
- fleet_cutin: FleetCutinReport<NightAttackStyle>[];
962
+ export interface DayCutinDef {
963
+ tag: DayCutin;
964
+ hits: number;
965
+ type_factor: number | null;
966
+ power_mod: number | null;
967
+ accuracy_mod: number | null;
1023
968
  }
1024
969
 
1025
- export interface CompDayAnalysis {
1026
- day_cutin: CompDayCutinAnalysis;
1027
- fleet_cutin: FleetCutinReport<ShellingStyle>[];
970
+ export interface HistoricalBonusDef {
971
+ map?: number;
972
+ node?: CompiledEvaler;
973
+ phase?: number;
974
+ debuff?: boolean;
975
+ ship?: CompiledEvaler;
976
+ enemy?: CompiledEvaler;
977
+ power_mod?: AttackPowerModifier;
978
+ armor_penetration?: number;
979
+ accuracy_mod?: number;
980
+ evasion_mod?: number;
1028
981
  }
1029
982
 
1030
- export interface CompAnalysis {
1031
- day: CompDayAnalysis;
1032
- night: CompNightAnalysis;
1033
- contact: ContactAnalysis;
1034
- anti_air: CompAntiAirAnalysis;
983
+ export interface HistoricalParams {
984
+ power_mod: AttackPowerModifier;
985
+ armor_penetration: number;
986
+ accuracy_mod: number;
987
+ target_evasion_mod: number;
1035
988
  }
1036
989
 
1037
- export type AirState =
1038
- | "AirSupremacy"
1039
- | "AirSuperiority"
1040
- | "AirParity"
1041
- | "AirDenial"
1042
- | "AirIncapability";
990
+ export interface NightCutinDef {
991
+ tag: NightCutin;
992
+ hits: number;
993
+ type_factor: number | null;
994
+ power_mod: number | null;
995
+ accuracy_mod: number | null;
996
+ }
1043
997
 
1044
- export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
998
+ export interface BattleDefinitions {
999
+ formation: Record<Formation, NestedFormationDef>;
1000
+ anti_air_cutin: Record<number, AntiAirCutinDef>;
1001
+ day_cutin: Record<DayCutin, DayCutinDef>;
1002
+ night_cutin: Record<NightCutin, NightCutinDef>;
1003
+ historical_bonuses: HistoricalBonusDef[];
1004
+ }
1005
+
1006
+ export type Engagement = "GreenT" | "Parallel" | "HeadOn" | "RedT";
1007
+
1008
+ export type SingleFormation =
1009
+ | "LineAhead"
1010
+ | "DoubleLine"
1011
+ | "Diamond"
1012
+ | "Echelon"
1013
+ | "LineAbreast"
1014
+ | "Vanguard";
1015
+
1016
+ export type CombinedFormation =
1017
+ | "Cruising1"
1018
+ | "Cruising2"
1019
+ | "Cruising3"
1020
+ | "Cruising4";
1021
+
1022
+ export type Formation = SingleFormation | CombinedFormation;
1023
+
1024
+ export interface OrgState {
1025
+ id?: string;
1026
+ f1?: FleetState;
1027
+ f2?: FleetState;
1028
+ f3?: FleetState;
1029
+ f4?: FleetState;
1030
+ a1?: AirSquadronState;
1031
+ a2?: AirSquadronState;
1032
+ a3?: AirSquadronState;
1033
+ hq_level?: number;
1034
+ org_type?: OrgType;
1035
+ sortie?: FleetKey;
1036
+ route_sup?: FleetKey;
1037
+ boss_sup?: FleetKey;
1038
+ }
1039
+
1040
+ export type FleetKey = "f1" | "f2" | "f3" | "f4";
1041
+
1042
+ export type Side = "Player" | "Enemy";
1043
+
1044
+ export type Align = "Left" | "Right";
1045
+
1046
+ export type SpeedGroup = "A" | "B1" | "B2" | "C";
1045
1047
 
1046
1048
  /**
1047
1049
  */
@@ -1229,7 +1231,7 @@ export class Comp {
1229
1231
  transport_point(): number;
1230
1232
  /**
1231
1233
  * @param {Ship} ship
1232
- * @param {Formation | undefined} formation
1234
+ * @param {Formation | undefined} [formation]
1233
1235
  * @returns {ShipConditions}
1234
1236
  */
1235
1237
  get_ship_conditions(ship: Ship, formation?: Formation): ShipConditions;
@@ -1270,27 +1272,27 @@ export class FhCore {
1270
1272
  */
1271
1273
  constructor(js_master: MasterData);
1272
1274
  /**
1273
- * @param {GearState | undefined} input
1275
+ * @param {GearState | undefined} [input]
1274
1276
  * @returns {Gear | undefined}
1275
1277
  */
1276
1278
  create_gear(input?: GearState): Gear | undefined;
1277
1279
  /**
1278
- * @param {ShipState | undefined} input
1280
+ * @param {ShipState | undefined} [input]
1279
1281
  * @returns {Ship | undefined}
1280
1282
  */
1281
1283
  create_ship(input?: ShipState): Ship | undefined;
1282
1284
  /**
1283
- * @param {AirSquadronState | undefined} input
1285
+ * @param {AirSquadronState | undefined} [input]
1284
1286
  * @returns {AirSquadron}
1285
1287
  */
1286
1288
  create_air_squadron(input?: AirSquadronState): AirSquadron;
1287
1289
  /**
1288
- * @param {FleetState | undefined} input
1290
+ * @param {FleetState | undefined} [input]
1289
1291
  * @returns {Fleet}
1290
1292
  */
1291
1293
  create_fleet(input?: FleetState): Fleet;
1292
1294
  /**
1293
- * @param {OrgState | undefined} input
1295
+ * @param {OrgState | undefined} [input]
1294
1296
  * @returns {Org | undefined}
1295
1297
  */
1296
1298
  create_org(input?: OrgState): Org | undefined;
@@ -1310,7 +1312,7 @@ export class FhCore {
1310
1312
  create_all_ships(): Ship[];
1311
1313
  /**
1312
1314
  * @param {Uint16Array} main
1313
- * @param {Uint16Array | undefined} escort
1315
+ * @param {Uint16Array | undefined} [escort]
1314
1316
  * @returns {Comp}
1315
1317
  */
1316
1318
  create_comp_by_map_enemy(main: Uint16Array, escort?: Uint16Array): Comp;