Remove references to old video stuff
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
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 |
@@ -1,5 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def test_extract_lines_from_drs_video():
|
||||
assert True # todo: implement your test here
|
||||
@@ -6320,4 +6320,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -4524,4 +4524,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -6772,4 +6772,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -4564,4 +4564,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -6091,4 +6091,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3120,4 +3120,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -5110,4 +5110,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -7386,4 +7386,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -5357,4 +5357,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3922,4 +3922,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4658,4 +4658,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -5398,4 +5398,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3655,4 +3655,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -6826,4 +6826,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -6768,4 +6768,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4820,4 +4820,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -4627,4 +4627,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -6193,4 +6193,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -4750,4 +4750,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -5606,4 +5606,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -7125,4 +7125,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -6281,4 +6281,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -4832,4 +4832,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4071,4 +4071,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -5568,4 +5568,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3424,4 +3424,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4854,4 +4854,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -6415,4 +6415,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4556,4 +4556,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -2548,4 +2548,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -6077,4 +6077,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -2578,4 +2578,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -7307,4 +7307,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -5732,4 +5732,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -7588,4 +7588,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3960,4 +3960,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -6819,4 +6819,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -4970,4 +4970,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -3192,4 +3192,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -5843,4 +5843,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -7266,4 +7266,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -24,4 +24,4 @@
|
||||
"DRS_ACE": null,
|
||||
"DDVR_Env": null,
|
||||
"DRS_Env": null
|
||||
}
|
||||
}
|
||||
@@ -9335,4 +9335,4 @@
|
||||
"noteJumpOffset": 0.0,
|
||||
"interval": 1.0,
|
||||
"info": ""
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user