Remove references to old video stuff

This commit is contained in:
544146
2023-09-17 13:39:39 +01:00
parent ebfe0fe1af
commit 4d35f38449
211 changed files with 239 additions and 11675 deletions
+8 -32
View File
@@ -1,6 +1,6 @@
# DANCERUSH STARDOM to Dance Dash
Convert videos & data of [DANCERUSH STARDOM](https://remywiki.com/AC_DRS) tracks into [Dance Dash](https://store.steampowered.com/app/2005050/Dance_Dash/) beat maps
Convert data of [DANCERUSH STARDOM](https://remywiki.com/AC_DRS) tracks into [Dance Dash](https://store.steampowered.com/app/2005050/Dance_Dash/) beat maps
Curious? @thomasasfk on discord or join [drs2dd](https://discord.gg/JVWx6zmtft) and ask!
@@ -8,30 +8,16 @@ Curious? @thomasasfk on discord or join [drs2dd](https://discord.gg/JVWx6zmtft)
### Completed:
- Video converter:
- [x] Detect right & left notes, including position & timing
- [x] Define models based on dd & drs schemas
- [x] Fetch metadata from data store (https://arcade-songs.zetaraku.dev/drs/)
- [x] Simple BepinEx plugin to launch Dance Dash w/o VR
- Parser
- [x] Parse XML files into JSON files
- [x] Parse JSON files into DD info metadata
- [x] Create DD beat map folder structure with song & cover
- [x] Parse notes & lines into DD beat map
- [x] Parse XML files into JSON files
- [x] Parse JSON files into DD info metadata
- [x] Create DD beat map folder structure with song & cover
- [x] Parse notes & lines into DD beat map
### To-Do:
- Video converter (don't know if we'll even do this now...)
- [ ] Detect down and jump notes (?)
- [ ] Detect hold notes (? hard)
- [ ] Write tests based on total note count (?) (https://remywiki.com/AC_DRS)
- [ ] Generate other metadata json file
- Parser
- [ ] Parse down and jump notes into DD beat map
- [ ] Parse shuffles into DD beat map
- [ ] Test folder structure, sort bmp, note speed, order, etc.
- [ ] Parse down and jump notes into DD beat map
- [ ] Parse shuffles into DD beat map
- [ ] Test folder structure, sort bmp, note speed, order, etc.
---
@@ -55,16 +41,6 @@ pre-commit install
### Usage:
Convert a DRS track video to a DD beat map
```bash
# grab video of DRS track from youtube
yt-dlp -f bv[ext=webm] https://youtu.be/o7I0scmptmo -o "drs_video.webm"
# grab song-id from "resources\data.json" or https://arcade-songs.zetaraku.dev/drs/
.venv/Scripts/python drsvideo2dd.py "drs_video.webm" --song-id "BOOMBAYAH-JP Ver.-"
```
Generate json files from xml files (needs xml files and a brave soul)
```bash
-163
View File
@@ -1,163 +0,0 @@
from __future__ import annotations
import argparse
import json
import os
from dataclasses import asdict
import cv2
from alive_progress import alive_bar
from loguru import logger
from model.dancedash import create_note_sphere
from model.dancedash import DD_LEFT
from model.dancedash import DD_RIGHT
from model.dancedash import DDBeatMap
from util import crop_frame
from util import find_l
from util import find_r
from util import find_stage
from util import get_song_metadata_remote
from util import map_position_to_dd_x
from util import NOTE_SEARCH_AREA
from util import ORDER_COUNT_PER_BEAT
from util import SIGN_SEARCH_AREA
from util import WORKING_RESOLUTION
@logger.catch
def extract_spheres_from_drs_video(video_path: str, bpm: int): # noqa
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
raise ValueError(f'Unable to open video file: {video_path}')
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
video_fps = int(cap.get(cv2.CAP_PROP_FPS))
duration_seconds = total_frames / video_fps
bps = bpm / 60
logger.info(f'Starting to process video: {video_path}')
logger.info(f'Total frames: {total_frames}')
bar = alive_bar(
total=total_frames,
title='Finding stage',
bar='notes',
spinner='notes',
)
pbar = bar.__enter__()
stage_found = False
while not stage_found:
pbar()
ret, frame = cap.read()
if not ret:
raise ValueError('Unable to find stage.')
frame_number = cap.get(cv2.CAP_PROP_POS_FRAMES)
if int(frame_number % 5) != 0:
continue
frame = cv2.resize(frame, WORKING_RESOLUTION)
search_area = crop_frame(frame, *SIGN_SEARCH_AREA)
stage_found = find_stage(search_area)
bar.title = 'Finding notes'
frames_since_l = 0
frames_since_r = 0
spheres = []
while True:
pbar()
ret, frame = cap.read()
if not ret:
break
frame = cv2.resize(frame, WORKING_RESOLUTION)
current_position_seconds = cap.get(cv2.CAP_PROP_POS_MSEC) / 1000.0
# float between 0 and 1 representing the time in the song
progress_percentage = current_position_seconds / duration_seconds
frames_since_l -= 1
frames_since_r -= 1
note_order = round(
bps * current_position_seconds *
ORDER_COUNT_PER_BEAT,
)
search_area = crop_frame(frame, *NOTE_SEARCH_AREA)
if frames_since_l < 1:
if left := find_l(search_area):
frames_since_l = 5
note = create_note_sphere( # noqa
progress_percentage,
map_position_to_dd_x(left[0]),
note_order,
DD_LEFT,
)
spheres.append(note)
if frames_since_r < 1:
if right := find_r(search_area):
frames_since_r = 5
note = create_note_sphere( # noqa
progress_percentage,
map_position_to_dd_x(right[0]),
note_order,
DD_RIGHT,
)
spheres.append(note)
bar.__exit__(None, None, None)
cap.release()
return spheres
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Image and video processing tools',
)
parser.add_argument('video_path', type=str, help='DRS Video path')
parser.add_argument('--song-id', type=str, help='BeatMap ID')
parser.add_argument('--bpm', type=int, help='BPM of the song')
args = parser.parse_args()
if not args.song_id and not args.bpm:
raise ValueError('Must provide either song_id or bpm')
raw_video_name = os.path.basename(args.video_path)
logger.remove() # remove default logger (stdout)
logger.add(
f'{raw_video_name}.log',
backtrace=True,
diagnose=True,
level='DEBUG' if os.getenv('DEBUG') else 'INFO',
)
if song_metadata := get_song_metadata_remote(args.song_id):
name = song_metadata.title
bpm = song_metadata.bpm
elif args.bpm:
name = f'Unknown Song - {raw_video_name}'
bpm = args.bpm
else:
raise ValueError('Unable to find song metadata')
spheres = extract_spheres_from_drs_video(args.video_path, bpm)
beatmap = DDBeatMap.create(
name=name,
interval_per_second=0.0, # todo: what is this.
order_count_per_beat=ORDER_COUNT_PER_BEAT,
sphere_nodes=spheres,
beat_subs=1, # todo: what is this.
bpm=bpm,
info='',
)
beatmap_dict = asdict(beatmap)
with open(f'{raw_video_name}.json', 'w') as f:
json.dump(beatmap_dict, f, indent=4)
logger.info(f'Finished processing video: {args.video_path}')
+10 -65
View File
@@ -12,6 +12,16 @@ DD_RIGHT = 9
DD_LINE_LEFT = 12
DD_LINE_RIGHT = 13
DRS_TO_DDS_NOTE_TYPE = {
DRS_LEFT: DD_LEFT,
DRS_RIGHT: DD_RIGHT,
}
DRS_TO_DDS_LINE_NOTE_TYPE = {
DRS_LEFT: DD_LINE_LEFT,
DRS_RIGHT: DD_LINE_RIGHT,
}
@dataclass
class X_Y:
@@ -39,17 +49,6 @@ class DDLineNode:
isPlayAudio: bool
DRS_TO_DDS_NOTE_TYPE = {
DRS_LEFT: DD_LEFT,
DRS_RIGHT: DD_RIGHT,
}
DRS_TO_DDS_LINE_NOTE_TYPE = {
DRS_LEFT: DD_LINE_LEFT,
DRS_RIGHT: DD_LINE_RIGHT,
}
@dataclass
class DDSphereNode:
noteOrder: int
@@ -62,24 +61,6 @@ class DDSphereNode:
isPlayAudio: bool
def create_note_sphere(
time: float,
position: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9,
note_order: int,
note_type: DD_LEFT | DD_RIGHT,
):
return DDSphereNode(
noteOrder=note_order,
time=time,
position=X_Y(x=position, y=0),
position2D=X_Y(x=0, y=0),
size=X_Y_Z(x=1, y=1, z=1),
noteType=note_type,
postionOffset=None,
isPlayAudio=False,
)
@dataclass
class DDBeatMapData:
name: str
@@ -107,42 +88,6 @@ class DDBeatMap:
interval: float
info: str
@classmethod
def create(
cls,
name: str,
interval_per_second: float,
order_count_per_beat: int,
sphere_nodes: list[DDSphereNode],
beat_subs: int,
bpm: int,
info: str,
):
return cls(
data=DDBeatMapData(
name=name,
intervalPerSecond=interval_per_second,
gridSize=X_Y(x=0, y=0),
planeSize=X_Y(x=0, y=0),
orderCountPerBeat=order_count_per_beat,
sphereNodes=sphere_nodes,
lineNodes=[],
effectNodes=[],
roadBlockNodes=[],
trapNodes=[],
),
beatSubs=beat_subs,
BPM=bpm,
# -0.4 is arbitrary, figure out a better value. (because we detect notes early)
songStartOffset=-0.4,
NPS='0.0',
developerMode=False,
noteSpeed=1.0,
noteJumpOffset=0.0,
interval=1.0,
info=info,
)
@dataclass
class DDBeatMapInfoFile:
+11 -43
View File
@@ -8,41 +8,10 @@ import xmltodict
MIN_POS = 0
MAX_POS = 65536
def safe_int(value):
try:
return int(value)
except (ValueError, TypeError):
return None
@dataclass
class DRSSheetDataZetaraku:
type: str
difficulty: str
level: str
levelValue: int
@dataclass
class DRSSongDataZetaraku:
songId: str
category: str
title: str
artist: str
bpm: int
imageName: str
version: str | None = None
releaseDate: str | None = None
isNew: bool | None = None
isLocked: bool = False
sheets: list[DRSSheetDataZetaraku] = field(default_factory=list)
@classmethod
def from_dict(cls, data_dict):
sheets_data = data_dict.get('sheets') or []
sheets = [DRSSheetDataZetaraku(**sheet) for sheet in sheets_data]
return cls(**{**data_dict, 'sheets': sheets})
DRS_LEFT = 1
DRS_RIGHT = 2
DRS_DOWN = 3
DRS_JUMP = 4
@dataclass
@@ -276,12 +245,6 @@ class DRSTrackStepPlayerInfo:
player_id: int
DRS_LEFT = 1
DRS_RIGHT = 2
DRS_DOWN = 3
DRS_JUMP = 4
@dataclass
class DRSTrackStep:
tick_info: DRSTrackStepTickInfo
@@ -367,8 +330,6 @@ class DRSTrack:
seq_version: int
info: DRSTrackInfo
sequence_data: list[DRSTrackStep] = field(default_factory=list)
extend_data = None # TODO: Implement this ???
rec_data = None # TODO: Implement this ???
@classmethod
def from_xml_dict(cls, data: dict):
@@ -397,3 +358,10 @@ class DRSTrack:
for step in data['sequence_data']
],
)
def safe_int(value):
try:
return int(value)
except (ValueError, TypeError):
return None
-11094
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

-5
View File
@@ -1,5 +0,0 @@
from __future__ import annotations
def test_extract_lines_from_drs_video():
assert True # todo: implement your test here
+1 -1
View File
@@ -6320,4 +6320,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4524,4 +4524,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -6772,4 +6772,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4564,4 +4564,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -6091,4 +6091,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -3120,4 +3120,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -5110,4 +5110,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -7386,4 +7386,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -5357,4 +5357,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -3922,4 +3922,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4658,4 +4658,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -5815,4 +5815,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -5078,4 +5078,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -3014,4 +3014,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -5398,4 +5398,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -3655,4 +3655,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -6826,4 +6826,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4642,4 +4642,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -6812,4 +6812,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -4514,4 +4514,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -7217,4 +7217,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -6768,4 +6768,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4820,4 +4820,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4627,4 +4627,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -6193,4 +6193,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4750,4 +4750,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -5606,4 +5606,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -5216,4 +5216,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -6780,4 +6780,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -6935,4 +6935,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -4023,4 +4023,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -7125,4 +7125,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -6281,4 +6281,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -4832,4 +4832,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4071,4 +4071,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -5568,4 +5568,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -3424,4 +3424,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4854,4 +4854,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -6415,4 +6415,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -5517,4 +5517,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -6929,4 +6929,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -3910,4 +3910,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4556,4 +4556,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -2548,4 +2548,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -6077,4 +6077,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -2578,4 +2578,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -7307,4 +7307,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -5732,4 +5732,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -7588,4 +7588,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -3960,4 +3960,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -6819,4 +6819,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -6635,4 +6635,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -5824,4 +5824,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -8019,4 +8019,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -4970,4 +4970,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -3192,4 +3192,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -5843,4 +5843,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -7266,4 +7266,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
@@ -9335,4 +9335,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -24,4 +24,4 @@
"DRS_ACE": null,
"DDVR_Env": null,
"DRS_Env": null
}
}
+1 -1
View File
@@ -6091,4 +6091,4 @@
"noteJumpOffset": 0.0,
"interval": 1.0,
"info": ""
}
}

Some files were not shown because too many files have changed in this diff Show More