Files
HolodoriCalc/docs/game-data-source.md
T
dal4segno 37102923ac
Publish GitHub Pages output / publish (push) Successful in 37s
feat: apply captured API configuration for Blue Splash event
2026-09-29 23:43:01 +09:00

5.7 KiB

게임 데이터 원본

2026-09-29부터 마스터 데이터의 유일한 수집 원본은 직접 확보한 한국어 Android 게임 DB입니다. 현재 버전은 546b8e2e37db368c6731e148b88611cef105bbaa66ff567f5c1584711ef979a4이며, 379개 SQLite 파일, 233,312행의 무결성 및 protobuf 해석을 검증했습니다.

data/game-db/current.json이 버전별 snapshots/<version>/manifest.json을 SHA-256으로 고정합니다. 스냅샷에는 전체 테이블의 압축 JSON과 DB/JSON 해시만 저장하며, 복호화 키·메모리 덤프·계정 인증은 포함하지 않습니다. data/holodoridb/와 과거 연구 기록은 이전 수집의 기록으로만 남으며 현재 수집기가 읽지 않습니다.

갱신

  1. 게임의 새 DB를 확보·복호화합니다. 복구 디렉터리에 decrypted-master/, decrypt-manifest.json, 해당 앱 버전의 descriptors.json이 필요합니다.
  2. protobuf가 설치된 Python으로 python scripts/import-game-db.py <복구 디렉터리>를 실행합니다. SQLite 해시·무결성·알 수 없는 protobuf 필드를 검사한 뒤 전체 스냅샷을 등록합니다. 같은 버전의 내용 교체는 거부합니다.
  3. npm run data:sync로 전체 테이블을 마지막 적용 스냅샷과 비교합니다. data/game-db/review/latest.json의 전체 변경 전후 값과 latest.md를 검토하고 한국어로 변경 의미를 보고합니다. 첫 등록은 전체 스냅샷 등록으로 표시하며 모든 행을 신규 콘텐츠로 간주하지 않습니다.
  4. npm run data:apply로 카드·보드·메모리·홀로워크 업적을 생성합니다. 검토와 같은 스냅샷만 허용하며 성공 후에만 applied.json을 갱신합니다.
  5. 채보를 갱신할 때는 별도 게임 SUS 파일을 data/raw/sus/에 확보합니다. npm run data:download-charts는 공식 게임 CDN에 직접 접속합니다. npm run data:collect-charts는 로컬 SUS와 DB를 검증한 뒤 공개 시각이 지난 곡만 생성합니다. -- --existing은 기존 카탈로그만 재생성합니다. 이어 npm run data:collect-chart-visuals로 동일 SUS의 표시 데이터를 만듭니다.

수집 실패·누락·해시 불일치 시 다른 사이트나 예전 DB로 대체하지 않습니다. 지금 가진 스냅샷은 캡처 당시 버전이며, 게임의 다음 업데이트는 새로 확보해야 합니다. 실행 중인 게임에서 DB를 복구하는 과정은 아직 별도 작업입니다. 스냅샷 등록 명령이 자동으로 게임 업데이트를 감지하거나 DB를 복호화하지 않습니다.

DB만으로 대체할 수 없는 자료

자료 현재 원본과 처리
카드·스킬·보드·메모리·업적·한국어 문자열·악곡 메타데이터 현재 게임 DB. 영어·일본어 외부 번역을 가져오지 않음
채보 본문·레인·노트 시각·점수 분모 게임 SUS 파일. DB의 난이도·노트 수·계수와 교차 검증. 외부 계산기 채보나 점수 참고표를 생성 입력으로 사용하지 않음
과거 이벤트 기간·배율 src/lib/data/events.ts의 기존 수동 기록. 당시 외부 출처 주석을 유지. 현재 DB에서 이벤트별 설정을 찾지 못함. 기존 기록의 기간·배율은 그대로 보존
카드 별칭·표시명 data/card-overrides.csv의 사용자 편집 설정

이번 전환에서 기존 200곡/800채보를 로컬 게임 파일로 다시 생성하고, 공식 게임 CDN의 Octo revision 93에서 신규·누락 9곡의 SUS 36개를 확보했습니다. 현재 공개된 209곡/836채보를 생성했습니다. 아직 공개되지 않은 2곡은 DB 스냅샷에만 보관합니다. 공식 게임 자산과 서버의 이벤트 설정까지 DB 하나에 들어 있는 것은 아닙니다. HolodoriDB 원격 저장소나 다른 계산기 사이트 접속은 기본 수집 과정에서 필요하지 않습니다.

첫 전환의 기존 데이터 비교는 DB 비교 기록을 참고합니다.

기존 외부 점수 참고표와 달랐던 m0337(Pretty Guardian Matsulimit Zero)의 분모는 공식 게임 CDN revision 93에서 재확인했습니다. Hard는 544300 → 539500, Expert는 874750 → 884700이며, 같은 노트 수라도 비가시·제어점 가중치가 포함되는 분모는 별도로 검증해야 합니다. 검증용 게임 SUS는 scripts/fixtures/game-sus/에 보관합니다.

이벤트 설정의 DB·CDN 조사 범위와 서버 API 스키마 확인 결과는 이벤트 설정 원본 조사를 참고합니다. CDN 목록은 조사했지만 모든 번들 내부를 검사한 것은 아닙니다.

게임 API 이벤트 반영

신규 이벤트의 직접 원본은 data/game-events/2026-09-29.json이다. 실제 앱이 받은 이벤트 응답을 메모리에서 추출·검증하고 계정별 필드를 제외했다. 마스터 DB 및 과거 수동 이벤트 기록과 출처를 구분한다.

data/game-events/current.json에서 적용할 이벤트 ID와 원본 파일의 SHA-256을 지정한 뒤 npm run data:collect-events를 실행한다. 검증한 일정·라이브 Pt·과제곡 스코어 보너스를 src/lib/data/events-api.json으로 생성하며 이벤트명은 DB의 포스터 이름으로 확인한다. 기존 PT·스코어 화면은 이 파일을 읽는다. 지원하지 않는 배율 조건이나 여러 챕터가 있으면 변환을 중단한다.

현재 적용 대상은 marathon_event-normal-005이다. 직전 릴레이 이벤트는 수동 기록을 유지하고, 미니게임 환산 계수와 보너스는 API 원본에 보관한다. 이 명령은 네트워크 수집이나 마스터 DB 갱신을 실행하지 않는다.