Skip to content

Implement the P.ATTACK / G.ATTACK gauge types (LR2) #142

@nulltask

Description

@nulltask

Context

Found by reverse-engineering the actual LR2 (LR2body.exe, beta3) shipped files. LR2's gauge list is larger than what we model.

First-party evidence

  • LR2files/Config/optionstr.csv: #GAUGE,GROOVE,SURVIVAL,DEATH,EASY,P.ATTACK,G.ATTACK — LR2 offers six gauges.
  • history.txt (080313): "ゲージオプションに、PERFECT ATTACKとGOOD ATTACKを追加しました。… PAはGOOD以下で閉店し、黄GREATで少量ゲージが減少します。GAは黄GREATで少量、光GREATでPOORと同量ゲージが減少します。クリアはハードクリア扱いとなります。"
    • P.ATTACK: fails (closes) on GOOD-or-worse; a non-PGREAT GREAT drains a small amount.
    • G.ATTACK: a non-PGREAT GREAT drains a small amount, a PGREAT-flagged GREAT drains the same as a POOR. Clear counts as a HARD clear.

Naming note

Our GrooveGaugeType uses HARD / DEATH; LR2 calls these SURVIVAL / DEATH. Worth aligning the labels (or at least documenting the mapping) when adding the new types.

Current behavior

packages/player/src/core/groove-gauge.ts models GROOVE / HARD (= LR2 SURVIVAL) / DEATH / EASY only. P.ATTACK and G.ATTACK are absent.

Notes

  • The engine currently only exercises GROOVE (gauge-type selection isn't user-exposed yet), so this is gated on gauge-type selection landing first.
  • The binary's gauge constant pool (.rdata ~0x744830) contains unmodeled values (0.048, 0.12, -3.0, ...) that likely belong to these gauges; map them via xref when implementing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions