mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-24 23:19:39 -05:00
Add Squeezer and ballpoint secondary fire mode info Closes #1372
This commit is contained in:
parent
73a9d2b784
commit
01f4afc983
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"] {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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"],
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
|
|
|
|||
|
|
@ -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)",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user