fleethub-core 1.12.11 → 1.12.12

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