Skip to content

Add IIDX INFINITAS support with manual score entry#90

Open
katagaki wants to merge 4 commits into
mainfrom
claude/jolly-euler-jIAo7
Open

Add IIDX INFINITAS support with manual score entry#90
katagaki wants to merge 4 commits into
mainfrom
claude/jolly-euler-jIAo7

Conversation

@katagaki
Copy link
Copy Markdown
Owner

Summary

Adds support for beatmania IIDX INFINITAS, the PC home version. Unlike the
arcade versions, INFINITAS has no e-amusement CSV/web export, so scores are
tracked manually.

INFINITAS is modeled as a new IIDXVersion (not the scaffolded
Game.iidxInfinitas), so it reuses the existing IIDX scores screen, score
viewer, and shared PlayData.db, with records tagged by version — exactly like
the arcade versions already coexist.

What changed

  • Version picker — adds IIDXVersion.infinitas, ordered to appear last
    (bottom) in the version dropdown.
  • Manual add — when INFINITAS is selected, the toolbar Import button is
    replaced by a + button
    that opens a new add/edit sheet.
  • Editor (IIDXInfinitasScoreEditor) — add / edit / delete a single
    chart entry: title (with an optional BEMANIWiki-backed song-title
    picker), artist, genre, play type, level + rating, EX score / PGreat / Great /
    Miss, clear type, DJ level, last-played, and play count.
  • Persistent collection — all manual entries live in one date-agnostic
    import group and are always visible regardless of the selected date; the
    time-travel control is hidden in INFINITAS mode.
  • Score viewer — gains a bottom edit (pencil) toolbar for INFINITAS
    entries; saving updates in place, deleting pops back to the list.
  • Row-id tracking — records now carry their SQLite row id (@Transient databaseID) so manual entries can be targeted for edit/delete.

Implementation notes

  • New persistence helpers on IIDXImporter: infinitasImportGroupID,
    addManualSongRecord, updateSongRecord, deleteSongRecord (reusing the
    existing insertSongRecord column layout).
  • IIDXReader.importGroup(for:version:) short-circuits to the single INFINITAS
    group, and its record cache always re-queries for INFINITAS so add/edit/delete
    reflects immediately.
  • Each entry populates exactly one level; the other four are left empty.
  • New localized strings added to Localizable.xcstrings (en + ja).

Verification

The remote environment is Linux with no Swift toolchain, so this was verified by
inspection rather than a build. Suggested manual checks in Xcode:

  1. Version dropdown shows INFINITAS last; selecting it switches the IIDX
    scores screen into manual mode (Import → +, time-travel hidden).
  2. Add an entry by hand and via the BEMANIWiki picker → appears in the list;
    persists across relaunch and date changes.
  3. Open an entry → bottom pencil (verify iOS 18 Spacer and iOS 26
    ToolbarSpacer(.flexible)); edit updates, delete removes and returns to list.
  4. Switch back to an arcade version → Import button and time-travel return;
    SOUND VOLTEX / Polaris Chord modes unaffected.

https://claude.ai/code/session_012v5AtjfrQSraHMhPRVmSid


Generated by Claude Code

claude added 4 commits May 31, 2026 08:56
INFINITAS is the PC home version of beatmania IIDX and has no e-amusement
CSV/web export, so scores must be tracked manually.

- Add IIDXVersion.infinitas, ordered last in the version picker
- Replace the Import button with a + button when INFINITAS is selected
- Add a manual add/edit/delete score editor, with an optional
  BEMANIWiki-backed song title picker
- Persist manual entries in a single date-agnostic import group; hide the
  time-travel control in INFINITAS mode
- Add a bottom edit toolbar to the score viewer for INFINITAS entries
- Track the SQLite row id on records to target edits/deletes
Avoids a static-analysis reliability flag (integer division evaluated in a
floating-point context) on the newly added color literals.
IIDXSongRecord is a class, so storing it in @State is unreliable (in-place
mutations don't trigger updates). Use a plain property instead; the editor
mutates the same instance and dismissing the sheet re-renders the viewer.
Also simplify the manual-entry builder to assign each level score once.
# Conflicts:
#	DJDX/Games/beatmania IIDX/IIDXReader.swift
@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants