diff --git a/script/rdview.js b/script/rdview.js
index 90f77ca..fda7705 100644
--- a/script/rdview.js
+++ b/script/rdview.js
@@ -849,6 +849,9 @@ function ReadProperties(reader, event, pairs) {
if (value = FindValue(pairs, "loop")) {
event.BeatStyle.Loop = parseInt(value.Value);
}
+ if (value = FindValue(pairs, "hold")) {
+ event.BeatStyle.Hold = parseFloat(value.Value);
+ }
break;
default:
break;
@@ -938,7 +941,7 @@ function ConstructDivObject(obj) {
result += (((_a = obj.BeatStyle) === null || _a === void 0 ? void 0 : _a.RowXs[i]) === 'x') ? `
` : ``;
}
return result;
- }], [(obj.BeatType === BeatsSpecial.AddClassicBeat || obj.BeatType === BeatsSpecial.AddFreeTimeBeat || obj.BeatType === BeatsSpecial.PulseFreeTimeBeat) && ((_s = (_r = obj.BeatStyle) === null || _r === void 0 ? void 0 : _r.Hold) !== null && _s !== void 0 ? _s : 0) > 0, `holdbeat`, () => ''], [obj.BeatType === BeatsSpecial.AddOneshotBeat && obj.BeatStyle !== undefined && obj.BeatStyle.OneshotBeatSubType.includes(RDOneshotBeatSubType.Skipshot), `skipshot`, () => ''])}`;
+ }], [(obj.BeatType === BeatsSpecial.AddClassicBeat || obj.BeatType === BeatsSpecial.AddFreeTimeBeat || obj.BeatType === BeatsSpecial.PulseFreeTimeBeat || obj.BeatType === BeatsSpecial.AddOneshotBeat) && ((_s = (_r = obj.BeatStyle) === null || _r === void 0 ? void 0 : _r.Hold) !== null && _s !== void 0 ? _s : 0) > 0, `holdbeat`, () => ''], [obj.BeatType === BeatsSpecial.AddOneshotBeat && obj.BeatStyle !== undefined && obj.BeatStyle.OneshotBeatSubType.includes(RDOneshotBeatSubType.Skipshot), `skipshot`, () => ''])}`;
}
else if (obj instanceof RDGroup) {
return ` 0, `holdbeat`, () => ''],
+ [(obj.BeatType === BeatsSpecial.AddClassicBeat || obj.BeatType === BeatsSpecial.AddFreeTimeBeat || obj.BeatType === BeatsSpecial.PulseFreeTimeBeat || obj.BeatType === BeatsSpecial.AddOneshotBeat) && (obj.BeatStyle?.Hold ?? 0) > 0, `holdbeat`, () => ''],
[obj.BeatType === BeatsSpecial.AddOneshotBeat && obj.BeatStyle !== undefined && obj.BeatStyle.OneshotBeatSubType.includes(RDOneshotBeatSubType.Skipshot), `skipshot`, () => ''],
)}
`;
}
diff --git a/style/assets/beats/subdivision-area.png b/style/assets/beats/subdivision-area.png
index 9915732..1bd906b 100644
Binary files a/style/assets/beats/subdivision-area.png and b/style/assets/beats/subdivision-area.png differ
diff --git a/style/rdview.css b/style/rdview.css
index 1780c62..9ed2093 100644
--- a/style/rdview.css
+++ b/style/rdview.css
@@ -1146,6 +1146,36 @@
}
}
+ &>.beat:not(:has(.classicbeat)) {
+ &>div.holdbeat {
+ position: absolute;
+ width: calc((var(--hold) * 28 - 2) * 1px);
+ height: inherit;
+ background-size: auto 100%;
+ background-image: url(./assets/beats/hold-area.png);
+ transform: translate(calc(((var(--tick) + var(--delay)) * 28 - 4) * 1px), 0);
+ z-index: -2;
+
+ &::after {
+ content: '';
+ position: absolute;
+ width: 2px;
+ height: 28px;
+ background-size: auto 100%;
+ transform: translate(calc((var(--hold) * 28 - 2) * 1px), 0);
+ background-image: url(./assets/beats/hold-right.png);
+ }
+ }
+
+ &:active>div.holdbeat {
+ background-image: url(./assets/beats/hold-hover-area.png);
+
+ &::after {
+ background-image: url(./assets/beats/hold-hover-right.png);
+ }
+ }
+ }
+
&>.beat:has(.row-xs) {
width: 56px;
height: 28px;