fleethub-core 1.12.5 → 1.12.7

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