mirror of
https://github.com/Yonokid/PyTaiko.git
synced 2026-02-04 19:50:12 +01:00
add scroll speed multiplier
This commit is contained in:
@@ -27,6 +27,7 @@ class OsuParser:
|
|||||||
#self.general = self.read_osu_data(osu_file, target_header="Colours", is_dict=True)
|
#self.general = self.read_osu_data(osu_file, target_header="Colours", is_dict=True)
|
||||||
self.hit_objects = self.read_osu_data_list(osu_file, target_header="HitObjects")
|
self.hit_objects = self.read_osu_data_list(osu_file, target_header="HitObjects")
|
||||||
self.bpm = []
|
self.bpm = []
|
||||||
|
self.slider_multiplier = float(self.difficulty["SliderMultiplier"])
|
||||||
self.metadata = TJAMetadata()
|
self.metadata = TJAMetadata()
|
||||||
self.metadata.wave = osu_file.parent / self.general["AudioFilename"]
|
self.metadata.wave = osu_file.parent / self.general["AudioFilename"]
|
||||||
self.metadata.course_data[0] = CourseData()
|
self.metadata.course_data[0] = CourseData()
|
||||||
@@ -82,18 +83,37 @@ class OsuParser:
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def get_scroll_multiplier(self, ms: float) -> float:
|
||||||
|
base_scroll = (1.0 if 1.37 <= self.slider_multiplier <= 1.47
|
||||||
|
else self.slider_multiplier / 1.40)
|
||||||
|
current_scroll = 1.0
|
||||||
|
|
||||||
|
for tp in self.timing_points:
|
||||||
|
time = tp[0]
|
||||||
|
beat_length = tp[1] # positive for BPM, negative for scroll
|
||||||
|
|
||||||
|
if time > ms:
|
||||||
|
break
|
||||||
|
|
||||||
|
if beat_length < 0: # This is an inherited (green) timing point
|
||||||
|
current_scroll = -100.0 / beat_length
|
||||||
|
|
||||||
|
return current_scroll * base_scroll
|
||||||
|
|
||||||
def note_data_to_NoteList(self, note_data) -> tuple[NoteList, list[NoteList], list[NoteList], list[NoteList]]:
|
def note_data_to_NoteList(self, note_data) -> tuple[NoteList, list[NoteList], list[NoteList], list[NoteList]]:
|
||||||
osu_NoteList = NoteList()
|
osu_NoteList = NoteList()
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
||||||
for line in note_data:
|
for line in note_data:
|
||||||
|
note_time = line[2]
|
||||||
|
scroll = self.get_scroll_multiplier(note_time)
|
||||||
|
|
||||||
if (line[3] == 1 or line[3] == 4 or line[3] == 5 or line[3] == 6) and line[4] == 0: # DON
|
if (line[3] == 1 or line[3] == 4 or line[3] == 5 or line[3] == 6) and line[4] == 0: # DON
|
||||||
don = Note()
|
don = Note()
|
||||||
don.type = NoteType(1)
|
don.type = NoteType(1)
|
||||||
don.hit_ms = line[2]
|
don.hit_ms = line[2]
|
||||||
don.bpm = self.bpm[0]
|
don.bpm = self.bpm[0]
|
||||||
don.scroll_x = 1
|
don.scroll_x = scroll
|
||||||
don.scroll_y = 0
|
don.scroll_y = 0
|
||||||
don.display = True
|
don.display = True
|
||||||
don.index = counter
|
don.index = counter
|
||||||
@@ -107,7 +127,7 @@ class OsuParser:
|
|||||||
kat.type = NoteType(2)
|
kat.type = NoteType(2)
|
||||||
kat.hit_ms = line[2]
|
kat.hit_ms = line[2]
|
||||||
kat.bpm = self.bpm[0]
|
kat.bpm = self.bpm[0]
|
||||||
kat.scroll_x = 1
|
kat.scroll_x = scroll
|
||||||
kat.scroll_y = 0
|
kat.scroll_y = 0
|
||||||
kat.display = True
|
kat.display = True
|
||||||
kat.index = counter
|
kat.index = counter
|
||||||
@@ -121,7 +141,7 @@ class OsuParser:
|
|||||||
don.type = NoteType(3)
|
don.type = NoteType(3)
|
||||||
don.hit_ms = line[2]
|
don.hit_ms = line[2]
|
||||||
don.bpm = self.bpm[0]
|
don.bpm = self.bpm[0]
|
||||||
don.scroll_x = 1
|
don.scroll_x = scroll
|
||||||
don.scroll_y = 0
|
don.scroll_y = 0
|
||||||
don.display = True
|
don.display = True
|
||||||
don.index = counter
|
don.index = counter
|
||||||
@@ -135,7 +155,7 @@ class OsuParser:
|
|||||||
kat.type = NoteType(4)
|
kat.type = NoteType(4)
|
||||||
kat.hit_ms = line[2]
|
kat.hit_ms = line[2]
|
||||||
kat.bpm = self.bpm[0]
|
kat.bpm = self.bpm[0]
|
||||||
kat.scroll_x = 1
|
kat.scroll_x = scroll
|
||||||
kat.scroll_y = 0
|
kat.scroll_y = 0
|
||||||
kat.display = True
|
kat.display = True
|
||||||
kat.index = counter
|
kat.index = counter
|
||||||
@@ -154,7 +174,7 @@ class OsuParser:
|
|||||||
source.type = NoteType(8)
|
source.type = NoteType(8)
|
||||||
source.hit_ms = line[2] + slider_time
|
source.hit_ms = line[2] + slider_time
|
||||||
source.bpm = self.bpm[0]
|
source.bpm = self.bpm[0]
|
||||||
source.scroll_x = 1
|
source.scroll_x = scroll
|
||||||
source.scroll_y = 0
|
source.scroll_y = 0
|
||||||
source.display = True
|
source.display = True
|
||||||
# this is where the index would be if it wasn't a tail note
|
# this is where the index would be if it wasn't a tail note
|
||||||
@@ -165,7 +185,7 @@ class OsuParser:
|
|||||||
slider.type = NoteType(5)
|
slider.type = NoteType(5)
|
||||||
slider.hit_ms = line[2]
|
slider.hit_ms = line[2]
|
||||||
slider.bpm = self.bpm[0]
|
slider.bpm = self.bpm[0]
|
||||||
slider.scroll_x = 1
|
slider.scroll_x = scroll
|
||||||
slider.scroll_y = 0
|
slider.scroll_y = 0
|
||||||
slider.display = True
|
slider.display = True
|
||||||
slider.index = counter
|
slider.index = counter
|
||||||
@@ -187,7 +207,7 @@ class OsuParser:
|
|||||||
source.type = NoteType(8)
|
source.type = NoteType(8)
|
||||||
source.hit_ms = line[2] + slider_time
|
source.hit_ms = line[2] + slider_time
|
||||||
source.bpm = self.bpm[0]
|
source.bpm = self.bpm[0]
|
||||||
source.scroll_x = 1
|
source.scroll_x = scroll
|
||||||
source.scroll_y = 0
|
source.scroll_y = 0
|
||||||
source.display = True
|
source.display = True
|
||||||
# this is where the index would be if it wasn't a tail note
|
# this is where the index would be if it wasn't a tail note
|
||||||
@@ -198,7 +218,7 @@ class OsuParser:
|
|||||||
slider.type = NoteType(6)
|
slider.type = NoteType(6)
|
||||||
slider.hit_ms = line[2]
|
slider.hit_ms = line[2]
|
||||||
slider.bpm = self.bpm[0]
|
slider.bpm = self.bpm[0]
|
||||||
slider.scroll_x = 1
|
slider.scroll_x = scroll
|
||||||
slider.scroll_y = 0
|
slider.scroll_y = 0
|
||||||
slider.display = True
|
slider.display = True
|
||||||
slider.index = counter
|
slider.index = counter
|
||||||
@@ -215,7 +235,7 @@ class OsuParser:
|
|||||||
source.type = NoteType(8)
|
source.type = NoteType(8)
|
||||||
source.hit_ms = line[5]
|
source.hit_ms = line[5]
|
||||||
source.bpm = self.bpm[0]
|
source.bpm = self.bpm[0]
|
||||||
source.scroll_x = 1
|
source.scroll_x = scroll
|
||||||
source.scroll_y = 0
|
source.scroll_y = 0
|
||||||
source.display = True
|
source.display = True
|
||||||
#source.index = counter
|
#source.index = counter
|
||||||
@@ -226,7 +246,7 @@ class OsuParser:
|
|||||||
balloon.type = NoteType(7)
|
balloon.type = NoteType(7)
|
||||||
balloon.hit_ms = line[2]
|
balloon.hit_ms = line[2]
|
||||||
balloon.bpm = self.bpm[0]
|
balloon.bpm = self.bpm[0]
|
||||||
balloon.scroll_x = 1
|
balloon.scroll_x = scroll
|
||||||
balloon.scroll_y = 0
|
balloon.scroll_y = 0
|
||||||
balloon.display = True
|
balloon.display = True
|
||||||
balloon.index = counter
|
balloon.index = counter
|
||||||
@@ -236,7 +256,7 @@ class OsuParser:
|
|||||||
'''
|
'''
|
||||||
od = int(self.difficulty["OverallDifficulty"])
|
od = int(self.difficulty["OverallDifficulty"])
|
||||||
# thank you https://github.com/IepIweidieng/osu2tja/blob/dev-iid/osu2tja/osu2tja.py
|
# thank you https://github.com/IepIweidieng/osu2tja/blob/dev-iid/osu2tja/osu2tja.py
|
||||||
hit_multiplyer = (5 - 2 * (5 - od) / 5 if od < 5
|
hit_multiplier = (5 - 2 * (5 - od) / 5 if od < 5
|
||||||
else 5 + 2.5 * (od - 5) / 5 if od > 5
|
else 5 + 2.5 * (od - 5) / 5 if od > 5
|
||||||
else 5) * 1.65
|
else 5) * 1.65
|
||||||
'''
|
'''
|
||||||
|
|||||||
Reference in New Issue
Block a user