v2.0.0-beta-5 — Self-Updating Install
Pre-release
Pre-release
Download
| Quartz.zip | MelonLoader — start here |
| QuartzUmm.zip | UnityModManager |
| QuartzKeyViewer.zip | Standalone Key Viewer — MelonLoader |
| QuartzKeyViewerUmm.zip | Standalone Key Viewer — UnityModManager |
Every feature is included; you pick what to turn on from Modules inside the game. Step-by-step instructions are in the install guide.
The other files below are for the mod itself — you don't need to download them.
Beta catches up with ten alpha builds at once. The headline is that Quartz now updates itself — please read the upgrading section, the install layout changed.
Quartz updates itself now
- When the game starts, Quartz checks for a new release, downloads it, and loads it in the same launch. No more clicking update and restarting to pick up a build.
- Updates are trial-run before they stick: a new build only becomes your current one after it starts cleanly. A build that fails to start is rolled back automatically and held back until the next release, so a bad update costs one launch instead of a broken install.
- Launch-time checks follow the update channel and skipped-version choices from Settings, and can be turned off entirely with
"Enabled": falseinUserData/Quartz/Runtime/update.json. - A broken install repairs itself: some installers extract the mod folder without its
Runtime/folder, which used to leave Quartz refusing to load with "no usable runtime — reinstall Quartz". The bootstrap now notices, re-downloads its own release, and restores the missing runtime on its own.
Upgrading from an older beta
- Update from inside the game as usual, or extract the new zip over your install. After the first restart your previous version runs one last session while the new layout takes over; from the second restart onward you are on the bootstrap and updates happen on their own.
- Installing by hand: copy
Mods/Quartz.Bootstrap.dlland theUserData/Quartz/folder from the zip. The oldMods/Quartz.dllis removed automatically. - Why:
Mods/now carries only a smallQuartz.Bootstrap.dll, and the mod itself lives in versioned folders underUserData/Quartz/Runtime/(for UnityModManager, under the mod folder'sRuntime/). Settings, profiles and modules are untouched; shipped files like translations refresh automatically.
New
- Standalone Key Viewer — install the Key Viewer by itself for MelonLoader or UnityModManager. Its own files, its own updater, opens directly to one focused page, and no longer requires the Key Limiter module.
- Key Viewer JavaScript plugins — import DM Note-style
.jsor.mjsplugins. The sandboxed engine supports declarative HTML/CSS/SVG panels, keyboard hooks, live stats, timers, settings, and private plugin storage. JavaScript stays off by default; only import plugins you trust. - Key Viewer element images — elements can show a custom image for idle and pressed states, with a cover/contain/fill/none fit. Exports carry those images inside the file (de-duplicated, size-capped) so a shared layout looks the same on someone else's machine.
- Chart Key Limiter — charts can carry a Key Limiter event in the level editor: cap how many distinct keys may be used from a tile onward, and pick what an extra press does. Levels listing
KeyLimiterinrequiredModsload normally while the module is on. - Addon toolkit — addons can declare dependencies and load order, call each other with no compile-time reference, check GitHub for updates, ship their own translations, take a top-level sidebar entry with an icon, draw a standard header card, and get a whole settings form auto-generated from an attributed settings class and placed in any tab they like. Worked example:
examples/AddonExample. - Excluded Filters (Effect Remover, Simple mode) — choose filters that survive "Disable Filters".
- Responsive color picker — colors open in a compact popup with direct hex and channel controls, plus a Wide color picker option for shorter displays.
- Song Title rich-text stripping — remove formatting tags and line breaks when a chart title should render as plain text.
- Key Viewer can be driven by an external replay renderer: the capture's timeline replaces the wall clock and injected presses replace the keyboard.
Improved
- The Release Candidate update channel is gone — the picker now offers Stable, Beta, and Alpha. Installs that had RC selected follow Stable.
- Panel size is saved proportionally, reclamped when the display changes, and reloaded when a profile is applied. The menu shortcut stays inactive while you type into a text field.
- Key binding capture is arbitrated by a single owner, so two controls can never fight over the same press, and hook-only keys such as right-side modifiers keep working without Key Limiter.
- Settings writes interrupted by a crash or power loss are recovered on the next launch.
- Key Viewer's "Hidden" flag is now "Disabled", and disabled elements stay clickable so you can turn them back on.
- Korean and Chinese translations updated throughout.
Performance
- Overlay settings (Song Title, Combo, Judgement, Progress Bar, Practice) batch their saves instead of writing the config file on every keystroke.
- Menu search reuses result rows while you type instead of rebuilding up to 40 buttons per character.
- Key Viewer JS plugins no longer allocate per frame, and the layout editor's marquee selection scales to large layouts.
- Editor: BGA mode no longer re-hides planets every frame through slow reflection, and the floor readout's change detection is throttled.
- TUF: the installed-level library loads much faster with many levels installed.
- The color picker reuses its wheel pixel buffer instead of reallocating on every repaint.
Fixed
- Effect Remover: removing Hall of Mirrors no longer leaves stale frame trails behind.
- UI Hider: hiding beta-only UI could silently stop working after a scene change; it recovers on its own now.
- Profile names can no longer escape the profiles folder, and module removal stays confined to the modules folder.
- A module whose enable step throws is fully unwound instead of leaving its patches installed.
- Sliders accept direct numeric values, clamp correctly with only one bound set, and fire their completion callback once per gesture. Text inputs no longer send re-entrant change notifications.
- UI controls ignore delayed callbacks after teardown, and the first-run helper no longer duplicates or survives a menu rebuild.
- Live panel text no longer wraps and overflows its box.
- Map time no longer counts the song offset twice.
- The Discord auto-deafen worker shuts down within a bounded window.
- Current game release detection and Harmony compatibility work across both supported loaders.
한국어
베타가 알파 10개 빌드를 한 번에 따라잡습니다. 핵심은 Quartz가 스스로 업데이트한다는 점입니다 — 설치 구조가 바뀌었으니 업그레이드 항목을 꼭 읽어 주세요.
Quartz가 스스로 업데이트합니다
- 게임을 시작하면 새 릴리스를 확인하고 내려받아 같은 실행에서 바로 불러옵니다. 새 빌드를 받으려고 업데이트 버튼을 누르고 재시작할 필요가 없습니다.
- 업데이트는 먼저 시험 실행됩니다: 새 빌드는 깨끗하게 시작된 뒤에야 현재 버전이 됩니다. 시작에 실패한 빌드는 자동으로 롤백되고 다음 릴리스까지 보류되므로, 잘못된 업데이트의 대가는 망가진 설치가 아니라 한 번의 실행입니다.
- 실행 시 업데이트 확인은 설정의 업데이트 채널과 건너뛴 버전 선택을 따르며,
UserData/Quartz/Runtime/update.json에서"Enabled": false로 완전히 끌 수 있습니다. - 망가진 설치를 스스로 복구합니다. 일부 설치 프로그램이 모드 폴더를
Runtime/폴더 없이 풀어 놓아 "no usable runtime — reinstall Quartz" 오류로 로드가 거부되던 문제를, 이제 부트스트랩이 감지해 릴리스를 다시 내려받아 알아서 복원합니다.
이전 베타에서 업그레이드하기
- 평소처럼 게임 안에서 업데이트하거나 새 zip을 설치 위에 풀면 됩니다. 첫 재시작에서는 이전 버전이 마지막으로 한 번 실행되면서 새 구조가 자리를 잡고, 두 번째 재시작부터는 부트스트랩으로 실행되며 업데이트가 자동으로 이뤄집니다.
- 수동 설치라면 zip의
Mods/Quartz.Bootstrap.dll과UserData/Quartz/폴더를 복사하세요. 이전Mods/Quartz.dll은 자동으로 제거됩니다. - 이유:
Mods/에는 작은Quartz.Bootstrap.dll만 남고, 모드 본체는UserData/Quartz/Runtime/아래 버전별 폴더에 들어갑니다(UnityModManager는 모드 폴더의Runtime/아래). 설정·프로필·모듈은 그대로 유지되고, 번역 같은 배포 파일은 자동으로 갱신됩니다.
새 기능
- 독립형 키 뷰어 — 전체 Quartz를 설치하지 않고 키 뷰어만 MelonLoader 또는 UnityModManager에서 사용할 수 있습니다. 전용 파일과 업데이터를 쓰고, 한 페이지로 바로 열리며, Key Limiter 모듈이 필요 없습니다.
- 키 뷰어 JavaScript 플러그인 — DM Note 방식의
.js또는.mjs플러그인을 불러올 수 있습니다. 제한된 실행 환경에서 HTML/CSS/SVG 패널, 키 입력 훅, 실시간 통계, 타이머, 설정, 플러그인별 저장소를 지원합니다. JavaScript는 기본적으로 꺼져 있으므로 신뢰하는 플러그인만 불러오세요. - 키 뷰어 요소 이미지 — 요소에 대기/누름 상태별 커스텀 이미지를 cover/contain/fill/none 맞춤 방식으로 지정할 수 있습니다. 내보내기에는 그 이미지가 파일 안에 함께 담겨(중복 제거, 용량 제한) 다른 사람의 컴퓨터에서도 똑같이 보입니다.
- 차트 Key Limiter — 레벨 에디터에서 차트에 Key Limiter 이벤트를 넣어, 특정 타일부터 사용할 수 있는 키 개수를 제한하고 초과 입력 시 동작을 고를 수 있습니다.
requiredMods에KeyLimiter가 있는 레벨도 모듈이 켜져 있으면 정상적으로 열립니다. - 애드온 툴킷 — 애드온이 의존성과 로드 순서를 선언하고, 컴파일 참조 없이 서로 호출하고, GitHub에서 업데이트를 확인하고, 자체 번역을 제공하고, 아이콘과 함께 사이드바 최상단 탭을 가지고, 표준 헤더 카드를 그리고, 속성을 붙인 설정 클래스에서 자동 생성된 설정 폼을 원하는 탭에 배치할 수 있습니다. 예제:
examples/AddonExample. - 필터 예외(이펙트 리무버, 간단 모드) — "필터 비활성화"를 적용해도 유지할 필터를 고를 수 있습니다.
- 반응형 색상 선택기 — 색상 설정이 작은 팝업으로 열리고 16진수 값과 각 채널을 직접 조절할 수 있으며, 높이가 낮은 화면을 위한 넓은 색상 선택기 옵션이 있습니다.
- 노래 제목 서식 제거 — 차트 제목의 리치 텍스트 태그와 줄바꿈을 지워 일반 텍스트로 표시합니다.
- 외부 리플레이 렌더러가 키 뷰어를 구동할 수 있습니다: 캡처의 타임라인이 실제 시계를, 주입된 입력이 키보드를 대신합니다.
개선
- 릴리스 후보(RC) 업데이트 채널이 사라졌습니다 — 선택지는 안정판·베타·알파입니다. RC를 선택했던 설치는 안정판을 따릅니다.
- 패널 크기를 화면 비율에 맞춰 저장하고, 해상도가 바뀌면 화면 안으로 다시 맞추며, 프로필을 적용하면 다시 불러옵니다. 텍스트 입력 중에는 메뉴 단축키가 작동하지 않습니다.
- 키 바인딩 캡처를 단일 소유자가 중재해 두 컨트롤이 같은 입력을 두고 충돌하지 않으며, Key Limiter 없이도 오른쪽 보조키 같은 훅 전용 키가 계속 동작합니다.
- 충돌이나 전원 차단으로 중단된 설정 저장을 다음 실행 시 복구합니다.
- 키 뷰어의 "숨김" 플래그가 "비활성화"로 바뀌었고, 비활성화된 요소도 캔버스에서 계속 선택할 수 있어 다시 켤 수 있습니다.
- 한국어·중국어 번역을 전반적으로 갱신했습니다.
성능
- 오버레이 설정(곡 제목, 콤보, 판정, 진행 바, 연습)이 키 입력마다 설정 파일을 쓰지 않고 저장을 모아서 처리합니다.
- 메뉴 검색이 글자마다 버튼을 최대 40개씩 다시 만드는 대신 결과 줄을 재사용합니다.
- 키 뷰어 JS 플러그인이 프레임마다 가비지를 만들지 않고, 레이아웃 편집기의 드래그 범위 선택이 큰 레이아웃에서도 부드럽습니다.
- 에디터: BGA 모드가 매 프레임 느린 리플렉션으로 행성을 다시 숨기지 않고, 타일 정보 표시의 변경 감지가 조절됩니다.
- TUF: 설치된 레벨이 많아도 라이브러리를 훨씬 빠르게 불러옵니다.
- 색상 선택기가 휠 픽셀 버퍼를 재사용합니다.
수정
- 이펙트 리무버: Hall of Mirrors를 제거해도 잔상이 남지 않습니다.
- UI 하이더: 장면 전환 후 베타 전용 UI 숨김이 조용히 멈추던 문제가 스스로 복구됩니다.
- 프로필 이름이 프로필 폴더를 벗어날 수 없고, 모듈 삭제가 모듈 폴더 안으로 제한됩니다.
- 활성화 중 예외가 발생한 모듈은 패치를 남기지 않고 완전히 되돌립니다.
- 슬라이더가 숫자 값을 바로 처리하고, 한쪽 범위만 있어도 올바르게 제한하며, 완료 콜백이 제스처당 한 번만 호출됩니다. 텍스트 입력이 재진입 변경 알림을 보내지 않습니다.
- UI가 닫힌 뒤 늦게 도착한 콜백을 무시하며, 첫 실행 안내가 메뉴를 다시 만들 때 중복되거나 남아 있지 않습니다.
- 라이브 패널 텍스트가 줄바꿈되어 패널 밖으로 넘치지 않습니다.
- 맵 시간이 노래 오프셋을 두 번 더하지 않습니다.
- Discord 자동 헤드셋 해제 워커가 제한 시간 안에 종료됩니다.
- 최신 게임 버전 감지와 Harmony 호환성이 지원하는 두 로더에서 모두 동작합니다.
beta build 5 of 2.0.0. · v2.0.0-beta-4…v2.0.0-beta-5