fix: exclude automatic hold judgments from special-start timing bonus
Publish GitHub Pages output / publish (push) Successful in 40s

This commit is contained in:
2026-09-29 10:25:51 +09:00
parent eaf4aeadc5
commit 5783072b12
826 changed files with 859 additions and 828 deletions
+5 -2
View File
@@ -125,6 +125,7 @@ function flattenEvents(chartData) {
const block = Array.isArray(rawBlock) ? rawBlock : [rawBlock];
return block.map((note, index) => ({
...note,
isHoldEnd: index > 0 && index === block.length - 1,
// 롱노트 안쪽 판정은 점 모양이어도 0.1배다. 시작·끝의 일반 판정만 1배다.
type: (index === 0 || index === block.length - 1) &&
note.note_type !== 'mid' &&
@@ -141,13 +142,15 @@ function flattenEvents(chartData) {
...pink.map((note) => ({
...note,
type: note.note_type ?? 'regular',
is_flick: !isHoldEndFlick(note)
is_flick: !isHoldEndFlick(note),
isHoldEnd: isHoldEndFlick(note)
}))
]
.map((note) => ({
timeSeconds: note.time_seconds,
type: note.type === 'mid' ? 'mid' : 'regular',
isFlick: note.is_flick === true
isFlick: note.is_flick === true,
...(note.isHoldEnd ? { isHoldEnd: true } : {})
}))
.filter((note) => Number.isFinite(note.timeSeconds))
.sort((left, right) => left.timeSeconds - right.timeSeconds || (left.type === 'mid' ? 1 : -1));
+1 -1
View File
@@ -156,7 +156,7 @@ export function parseSusTimeline(text) {
for (let beat = (Math.floor(start.beat * 2 + 1e-9) + 1) / 2; beat < end.beat - 1e-9; beat += 0.5) {
notes.push({ timeSeconds: secondsAt(beat), type: 'mid', isFlick: false });
}
notes.push({ timeSeconds: secondsAt(end.beat), type: 'regular', isFlick: false });
notes.push({ timeSeconds: secondsAt(end.beat), type: 'regular', isFlick: false, isHoldEnd: true });
}
// Visible relay ticks are score judgements even if the editor stream contains an unmatched visual segment.
for (const relay of visibleRelays) notes.push({ timeSeconds: secondsAt(relay.beat), type: 'mid', isFlick: false });
+1 -1
View File
@@ -34,7 +34,7 @@ test('끝 플릭을 중복 집계하지 않고 중간 판정을 곡의 반박
{ timeSeconds:0.5,type:'mid',isFlick:false },
{ timeSeconds:0.75,type:'mid',isFlick:false },
{ timeSeconds:1,type:'mid',isFlick:false },
{ timeSeconds:1.25,type:'regular',isFlick:false },
{ timeSeconds:1.25,type:'regular',isFlick:false,isHoldEnd:true },
{ timeSeconds:2,type:'regular',isFlick:true },
{ timeSeconds:3.75,type:'regular',isFlick:false }
]);