Add Squeezer and ballpoint secondary fire mode info Closes #1372

This commit is contained in:
Kalle 2023-06-23 16:28:59 +03:00
parent 73a9d2b784
commit 01f4afc983
9 changed files with 89 additions and 1 deletions

View File

@ -42,6 +42,8 @@ export const DAMAGE_TYPE = [
"SPECIAL_BUMP",
"SPECIAL_JUMP",
"SPECIAL_TICK",
"SECONDARY_MODE_MAX",
"SECONDARY_MODE_MIN",
] as const;
export const damageTypeToWeaponType: Record<
@ -52,6 +54,8 @@ export const damageTypeToWeaponType: Record<
NORMAL_MAX: "MAIN",
TURRET_MAX: "MAIN",
TURRET_MIN: "MAIN",
SECONDARY_MODE_MAX: "MAIN",
SECONDARY_MODE_MIN: "MAIN",
NORMAL_MAX_FULL_CHARGE: "MAIN",
DIRECT: "MAIN",
DIRECT_MIN: "MAIN",

View File

@ -44,6 +44,8 @@ export interface MainWeaponParams {
DamageParam_SplatanaHorizontal?: number;
DamageLapOverParam_ValueMax?: number;
DamageLapOverParam_ValueMin?: number;
Variable_Damage_ValueMax?: number;
Variable_Damage_ValueMin?: number;
BodyParam_Damage?: number;
SwingUnitGroupParam_DamageParam_DamageMinValue?: number;
SwingUnitGroupParam_DamageParam_DamageMaxValue?: number;
@ -53,6 +55,8 @@ export interface MainWeaponParams {
WideSwingUnitGroupParam_DamageParam_DamageMaxValue?: number;
Jump_DegSwerve?: number;
Stand_DegSwerve?: number;
Variable_Jump_DegSwerve?: number;
Variable_Stand_DegSwerve?: number;
/** Damage caused by charger's full charged shot */
DamageParam_ValueFullCharge?: number;
/** Max damage caused by charger's charged shot before fully charged */
@ -241,6 +245,8 @@ export interface AnalyzedBuild {
superJumpTimeTotal: Stat;
shotSpreadAir?: Stat;
shotSpreadGround?: number;
shotAutofireSpreadAir?: Stat;
shotAutofireSpreadGround?: number;
squidSurgeChargeFrames: Stat;
subDefPointSensorMarkedTimeInSeconds: Stat;

View File

@ -141,6 +141,8 @@ export function buildStats({
superJumpTimeTotal: superJumpTimeTotal(input),
shotSpreadAir: shotSpreadAir(input),
shotSpreadGround: mainWeaponParams.Stand_DegSwerve,
shotAutofireSpreadAir: shotAutofireSpreadAir(input),
shotAutofireSpreadGround: mainWeaponParams.Variable_Stand_DegSwerve,
squidSurgeChargeFrames: squidSurgeChargeFrames(input),
subDefPointSensorMarkedTimeInSeconds:
subDefPointSensorMarkedTimeInSeconds(input),
@ -400,6 +402,8 @@ const damageTypeToParamsKey: Record<
NORMAL_MAX_FULL_CHARGE: "DamageParam_ValueFullChargeMax",
TURRET_MAX: "DamageLapOverParam_ValueMax",
TURRET_MIN: "DamageLapOverParam_ValueMin",
SECONDARY_MODE_MAX: "Variable_Damage_ValueMax",
SECONDARY_MODE_MIN: "Variable_Damage_ValueMin",
DIRECT: "DamageParam_ValueDirect",
DIRECT_MIN: "DamageParam_ValueDirectMin",
DIRECT_MAX: "DamageParam_ValueDirectMax",
@ -1040,6 +1044,39 @@ function shotSpreadAir(
};
}
function shotAutofireSpreadAir(
args: StatFunctionInput
): AnalyzedBuild["stats"]["shotAutofireSpreadAir"] {
const SHOT_SPREAD_AIR_ABILITY = "IA";
const groundSpread = args.mainWeaponParams.Variable_Stand_DegSwerve;
const jumpSpread = args.mainWeaponParams.Variable_Jump_DegSwerve;
if (
typeof jumpSpread !== "number" ||
typeof groundSpread !== "number" ||
jumpSpread === groundSpread
)
return;
const { effect } = abilityPointsToEffects({
abilityPoints: apFromMap({
abilityPoints: args.abilityPoints,
ability: SHOT_SPREAD_AIR_ABILITY,
}),
key: "ReduceJumpSwerveRate",
weapon: args.mainWeaponParams,
});
const extraSpread = jumpSpread - groundSpread;
const reducedExtraSpread = extraSpread * (1 - effect);
return {
baseValue: roundToNDecimalPlaces(jumpSpread),
value: roundToNDecimalPlaces(reducedExtraSpread + groundSpread),
modifiedBy: SHOT_SPREAD_AIR_ABILITY,
};
}
function squidSurgeChargeFrames(
args: StatFunctionInput
): AnalyzedBuild["stats"]["squidSurgeChargeFrames"] {

View File

@ -639,8 +639,12 @@
"MoveSpeed": 0.072,
"DamageParam_ValueMax": 380,
"DamageParam_ValueMin": 190,
"Variable_Damage_ValueMax": 300,
"Variable_Damage_ValueMin": 150,
"Jump_DegSwerve": 0,
"Stand_DegSwerve": 0,
"Variable_Jump_DegSwerve": 13,
"Variable_Stand_DegSwerve": 8,
"InkConsume": 0.022
},
"1000": {
@ -1113,6 +1117,8 @@
"MoveSpeed_Charge": 0.086,
"DamageParam_ValueMax": 280,
"DamageParam_ValueMin": 140,
"Variable_Damage_ValueMax": 300,
"Variable_Damage_ValueMin": 150,
"Jump_DegSwerve": 12,
"Stand_DegSwerve": 6,
"InkRecoverStop": 40,

View File

@ -142,6 +142,28 @@ export default function BuildAnalyzerPage() {
suffix="°"
/>
),
// Squeezer
analyzed.stats.shotAutofireSpreadAir && (
<StatCard
isComparing={isComparing}
abilityPoints={abilityPoints}
key="shotAutofireSpreadAir"
stat={statKeyToTuple("shotAutofireSpreadAir")}
title={t("analyzer:stat.shotAutofireSpreadAir")}
suffix="°"
/>
),
typeof analyzed.stats.shotAutofireSpreadGround === "number" && (
<StatCard
isComparing={isComparing}
abilityPoints={abilityPoints}
key="shotAutofireSpreadGround"
stat={analyzed.stats.shotAutofireSpreadGround}
title={t("analyzer:stat.shotAutofireSpreadGround")}
suffix="°"
/>
),
typeof analyzed.stats.mainWeaponWhiteInkSeconds === "number" && (
<StatCard
isComparing={isComparing}

View File

@ -32,7 +32,9 @@ export const damagePriorities: Array<
["MAIN", [210, 260], "DISTANCE", "Blaster_BlasterMiddle"],
["MAIN", [220], "DISTANCE", "Blaster"],
["MAIN", [400], "NORMAL_MAX", "Shooter_Flash"], // xxx: TODO Squeezer autofire
["MAIN", [400], "NORMAL_MAX", "Shooter_Flash"],
["MAIN", [400], "SECONDARY_MODE_MAX", "Shooter_FlashRepeat"],
["MAIN", [400], "SECONDARY_MODE_MIN", "Shooter_FlashRepeat"],
["MAIN", [400], "NORMAL_MIN", "Shooter_Flash"],
["MAIN", [1000], "SPLASH_VERTICAL_MIN", "RollerSplash_Compact"],

View File

@ -138,6 +138,8 @@ export const damageTypePriorityList = [
"SPECIAL_BUMP",
"SPECIAL_JUMP",
"SPECIAL_TICK",
"SECONDARY_MODE_MAX",
"SECONDARY_MODE_MIN",
] as const;
assertType<
(typeof damageTypePriorityList)[number],

View File

@ -31,6 +31,8 @@
"stat.superJumpTimeTotal": "Super jump time (total)",
"stat.jumpShotSpread": "Shot spread in degrees (jumping)",
"stat.groundShotSpread": "Shot spread in degrees (ground)",
"stat.shotAutofireSpreadGround": "Autofire shot spread (ground)",
"stat.shotAutofireSpreadAir": "Autofire shot spread (jumping)",
"stat.squidSurgeChargeFrames": "Squid Surge charge to full frames",
"stat.swimSpeed": "Swim speed (units per frame)",
"stat.swimSpeedHoldingRainmaker": "Swim speed (holding Rainmaker)",
@ -88,6 +90,8 @@
"damage.toSplat_other": "{{count}} hits to splat",
"damage.NORMAL_MIN": "Minimum",
"damage.NORMAL_MAX": "Maximum",
"damage.SECONDARY_MODE_MIN": "Secondary mode (Minimum)",
"damage.SECONDARY_MODE_MAX": "Secondary mode (Maximum)",
"damage.NORMAL_MAX_FULL_CHARGE": "Maximum (Fully charged)",
"damage.DIRECT": "Direct",
"damage.DIRECT_MIN": "Direct (Minimum)",

View File

@ -276,6 +276,8 @@ function parametersToMainWeaponResult(
DamageParam_SplatanaHorizontal:
params["BulletSaberHorizontalParam"]?.["DamageParam"]?.["HitDamage"],
BodyParam_Damage: params["BodyParam"]?.["Damage"],
Variable_Damage_ValueMax: params["VariableDamageParam"]?.["ValueMax"],
Variable_Damage_ValueMin: params["VariableDamageParam"]?.["ValueMin"],
SwingUnitGroupParam_DamageParam_DamageMinValue: resolveMin(
params["SwingUnitGroupParam"]?.["DamageParam"]?.["Inside"]?.[
"DamageMinValue"
@ -335,6 +337,9 @@ function parametersToMainWeaponResult(
KeepChargeFullFrame !== 1 ? KeepChargeFullFrame : undefined,
Jump_DegSwerve: params["WeaponParam"]?.["Jump_DegSwerve"],
Stand_DegSwerve: params["WeaponParam"]?.["Stand_DegSwerve"],
Variable_Jump_DegSwerve: params["VariableWeaponParam"]?.["Jump_DegSwerve"],
Variable_Stand_DegSwerve:
params["VariableWeaponParam"]?.["Stand_DegSwerve"],
InkRecoverStop: params["WeaponParam"]?.["InkRecoverStop"],
InkConsume,
InkConsumeSlosher,