Move format_conversion for each game into its own class, instead of the previous version.
This commit is contained in:
parent
f4ee350a29
commit
b58f356479
@ -96,7 +96,7 @@ class PopnMusicBase(CoreHandler, CardManagerHandler, PASELIHandler, Base):
|
||||
profile = oldversion.get_profile(userid)
|
||||
if profile is None:
|
||||
return None
|
||||
return oldversion.format_conversion(userid, profile)
|
||||
return self.format_conversion(userid, profile)
|
||||
elif load_mode == self.NEW_PROFILE_ONLY:
|
||||
# Trying to import from current version
|
||||
profile = self.get_profile(userid)
|
||||
@ -111,7 +111,7 @@ class PopnMusicBase(CoreHandler, CardManagerHandler, PASELIHandler, Base):
|
||||
oldversion = self.previous_version()
|
||||
oldprofile = oldversion.get_profile(userid)
|
||||
if oldprofile is not None:
|
||||
return oldversion.format_conversion(userid, oldprofile)
|
||||
return self.format_conversion(userid, oldprofile)
|
||||
return None
|
||||
else:
|
||||
# Unknown value
|
||||
|
@ -437,11 +437,13 @@ class PopnMusicEclale(PopnMusicBase):
|
||||
return root
|
||||
|
||||
def format_conversion(self, userid: UserID, profile: Profile) -> Node:
|
||||
# TODO: Validate this now that it's been moved.
|
||||
root = Node.void('player23')
|
||||
root.add_child(Node.string('name', profile.get_str('name', 'なし')))
|
||||
root.add_child(Node.s16('chara', profile.get_int('chara', -1)))
|
||||
root.add_child(Node.s8('result', 1))
|
||||
|
||||
# Scores
|
||||
scores = self.data.remote.music.get_scores(self.game, self.version, userid)
|
||||
for score in scores:
|
||||
# Skip any scores for chart types we don't support
|
||||
@ -453,9 +455,6 @@ class PopnMusicEclale(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
medal = score.data.get_int('medal')
|
||||
|
||||
music = Node.void('music')
|
||||
root.add_child(music)
|
||||
music.add_child(Node.s16('music_num', score.id))
|
||||
@ -465,7 +464,7 @@ class PopnMusicEclale(PopnMusicBase):
|
||||
self.CHART_TYPE_HYPER: self.GAME_CHART_TYPE_HYPER,
|
||||
self.CHART_TYPE_EX: self.GAME_CHART_TYPE_EX,
|
||||
}[score.chart]))
|
||||
music.add_child(Node.s32('score', points))
|
||||
music.add_child(Node.s32('score', score.points))
|
||||
music.add_child(Node.u8('clear_type', {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: self.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: self.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
@ -478,7 +477,7 @@ class PopnMusicEclale(PopnMusicBase):
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: self.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: self.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: self.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[medal]))
|
||||
}[score.data.get_int('medal')]))
|
||||
music.add_child(Node.s16('cnt', score.plays))
|
||||
|
||||
return root
|
||||
|
@ -163,9 +163,7 @@ class PopnMusicFantasia(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
clear_medal[score.id] = clear_medal[score.id] | self.__format_medal_for_score(score)
|
||||
|
||||
hiscore_index = (score.id * 4) + {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
@ -174,7 +172,7 @@ class PopnMusicFantasia(PopnMusicBase):
|
||||
}[score.chart]
|
||||
hiscore_byte_pos = int((hiscore_index * 17) / 8)
|
||||
hiscore_bit_pos = int((hiscore_index * 17) % 8)
|
||||
hiscore_value = points << hiscore_bit_pos
|
||||
hiscore_value = score.points << hiscore_bit_pos
|
||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF)
|
||||
@ -476,9 +474,7 @@ class PopnMusicFantasia(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
clear_medal[score.id] = clear_medal[score.id] | self.__format_medal_for_score(score)
|
||||
|
||||
hiscore_index = (score.id * 4) + {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
@ -487,7 +483,7 @@ class PopnMusicFantasia(PopnMusicBase):
|
||||
}[score.chart]
|
||||
hiscore_byte_pos = int((hiscore_index * 17) / 8)
|
||||
hiscore_bit_pos = int((hiscore_index * 17) % 8)
|
||||
hiscore_value = points << hiscore_bit_pos
|
||||
hiscore_value = score.points << hiscore_bit_pos
|
||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF)
|
||||
|
@ -678,12 +678,12 @@ class PopnMusicLapistoria(PopnMusicBase):
|
||||
return newprofile
|
||||
|
||||
def format_conversion(self, userid: UserID, profile: Profile) -> Node:
|
||||
# Circular import, ugh
|
||||
from bemani.backend.popn.eclale import PopnMusicEclale
|
||||
# TODO: Validate this now that it's been moved.
|
||||
root = Node.void('playerdata')
|
||||
|
||||
root = Node.void('player23')
|
||||
root.add_child(Node.string('name', profile.get_str('name', 'なし')))
|
||||
root.add_child(Node.s16('chara', profile.get_int('chara', -1)))
|
||||
root.add_child(Node.s32('option', profile.get_int('option', 0)))
|
||||
root.add_child(Node.s8('result', 1))
|
||||
|
||||
scores = self.data.remote.music.get_scores(self.game, self.version, userid)
|
||||
@ -707,25 +707,27 @@ class PopnMusicLapistoria(PopnMusicBase):
|
||||
root.add_child(music)
|
||||
music.add_child(Node.s16('music_num', score.id))
|
||||
music.add_child(Node.u8('sheet_num', {
|
||||
self.CHART_TYPE_EASY: PopnMusicEclale.GAME_CHART_TYPE_EASY,
|
||||
self.CHART_TYPE_NORMAL: PopnMusicEclale.GAME_CHART_TYPE_NORMAL,
|
||||
self.CHART_TYPE_HYPER: PopnMusicEclale.GAME_CHART_TYPE_HYPER,
|
||||
self.CHART_TYPE_EX: PopnMusicEclale.GAME_CHART_TYPE_EX,
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL,
|
||||
self.CHART_TYPE_HYPER: self.GAME_CHART_TYPE_HYPER,
|
||||
self.CHART_TYPE_EX: self.GAME_CHART_TYPE_EX,
|
||||
}[score.chart]))
|
||||
music.add_child(Node.s32('score', points))
|
||||
music.add_child(Node.u8('clear_type', {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: PopnMusicEclale.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: PopnMusicEclale.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: PopnMusicEclale.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: PopnMusicEclale.GAME_PLAY_MEDAL_EASY_CLEAR,
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: PopnMusicEclale.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: PopnMusicEclale.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: PopnMusicEclale.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: PopnMusicEclale.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: PopnMusicEclale.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: PopnMusicEclale.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: PopnMusicEclale.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[medal]))
|
||||
music.add_child(Node.s16('cnt', score.plays))
|
||||
music.add_child(Node.s32('score', 0))
|
||||
music.add_child(Node.u8('clear_type', 0))
|
||||
music.add_child(Node.s32('old_score', points))
|
||||
music.add_child(Node.u8('old_clear_type', {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: self.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: self.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: self.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: self.GAME_PLAY_MEDAL_EASY_CLEAR,
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: self.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: self.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: self.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: self.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: self.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: self.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[medal]))
|
||||
|
||||
return root
|
||||
|
@ -7,7 +7,7 @@ from bemani.backend.popn.fantasia import PopnMusicFantasia
|
||||
|
||||
from bemani.backend.base import Status
|
||||
from bemani.common import Profile, VersionConstants, ID
|
||||
from bemani.data import UserID, Link
|
||||
from bemani.data import UserID, Link, Score
|
||||
from bemani.protocol import Node
|
||||
|
||||
|
||||
@ -46,6 +46,28 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
def previous_version(self) -> Optional[PopnMusicBase]:
|
||||
return PopnMusicFantasia(self.data, self.config, self.model)
|
||||
|
||||
def __format_medal_for_score(self, score: Score) -> int:
|
||||
medal = {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: self.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: self.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: self.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED, # Map approximately
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: self.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: self.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: self.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: self.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: self.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: self.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[score.data.get_int('medal')]
|
||||
medal_pos = {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
self.CHART_TYPE_HYPER: self.GAME_CHART_TYPE_HYPER_POSITION,
|
||||
self.CHART_TYPE_EX: self.GAME_CHART_TYPE_EX_POSITION,
|
||||
}[score.chart]
|
||||
return (medal << (medal_pos * 4))
|
||||
|
||||
def format_profile(self, userid: UserID, profile: Profile) -> Node:
|
||||
root = Node.void('playerdata')
|
||||
|
||||
@ -124,28 +146,7 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
medal = {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: self.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: self.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: self.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED, # Map approximately
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: self.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: self.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: self.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: self.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: self.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: self.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[score.data.get_int('medal')]
|
||||
medal_pos = {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
self.CHART_TYPE_HYPER: self.GAME_CHART_TYPE_HYPER_POSITION,
|
||||
self.CHART_TYPE_EX: self.GAME_CHART_TYPE_EX_POSITION,
|
||||
}[score.chart]
|
||||
clear_medal[score.id] = clear_medal[score.id] | (medal << (medal_pos * 4))
|
||||
|
||||
clear_medal[score.id] = clear_medal[score.id] | self.__format_medal_for_score(score)
|
||||
hiscore_index = (score.id * 4) + {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
@ -154,7 +155,7 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
}[score.chart]
|
||||
hiscore_byte_pos = int((hiscore_index * 17) / 8)
|
||||
hiscore_bit_pos = int((hiscore_index * 17) % 8)
|
||||
hiscore_value = points << hiscore_bit_pos
|
||||
hiscore_value = score.points << hiscore_bit_pos
|
||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF)
|
||||
@ -283,15 +284,17 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
return root
|
||||
|
||||
def format_conversion(self, userid: UserID, profile: Profile) -> Node:
|
||||
# Circular import, ugh
|
||||
from bemani.backend.popn.lapistoria import PopnMusicLapistoria
|
||||
|
||||
# TODO: Validate this now that it's been moved.
|
||||
root = Node.void('playerdata')
|
||||
|
||||
root.add_child(Node.string('name', profile.get_str('name', 'なし')))
|
||||
root.add_child(Node.s16('chara', profile.get_int('chara', -1)))
|
||||
root.add_child(Node.s32('option', profile.get_int('option', 0)))
|
||||
root.add_child(Node.s8('result', 1))
|
||||
root.add_child(Node.u8('version', 0))
|
||||
root.add_child(Node.u8('kind', 0))
|
||||
root.add_child(Node.u8('season', 0))
|
||||
|
||||
clear_medal = [0] * self.GAME_MAX_MUSIC_ID
|
||||
|
||||
scores = self.data.remote.music.get_scores(self.game, self.version, userid)
|
||||
for score in scores:
|
||||
@ -307,35 +310,9 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
medal = score.data.get_int('medal')
|
||||
clear_medal[score.id] = clear_medal[score.id] | self.__format_medal_for_score(score)
|
||||
|
||||
music = Node.void('music')
|
||||
root.add_child(music)
|
||||
music.add_child(Node.s16('music_num', score.id))
|
||||
music.add_child(Node.u8('sheet_num', {
|
||||
self.CHART_TYPE_EASY: PopnMusicLapistoria.GAME_CHART_TYPE_EASY,
|
||||
self.CHART_TYPE_NORMAL: PopnMusicLapistoria.GAME_CHART_TYPE_NORMAL,
|
||||
self.CHART_TYPE_HYPER: PopnMusicLapistoria.GAME_CHART_TYPE_HYPER,
|
||||
self.CHART_TYPE_EX: PopnMusicLapistoria.GAME_CHART_TYPE_EX,
|
||||
}[score.chart]))
|
||||
music.add_child(Node.s16('cnt', score.plays))
|
||||
music.add_child(Node.s32('score', 0))
|
||||
music.add_child(Node.u8('clear_type', 0))
|
||||
music.add_child(Node.s32('old_score', points))
|
||||
music.add_child(Node.u8('old_clear_type', {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: PopnMusicLapistoria.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: PopnMusicLapistoria.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: PopnMusicLapistoria.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: PopnMusicLapistoria.GAME_PLAY_MEDAL_EASY_CLEAR,
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: PopnMusicLapistoria.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: PopnMusicLapistoria.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: PopnMusicLapistoria.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: PopnMusicLapistoria.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: PopnMusicLapistoria.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: PopnMusicLapistoria.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: PopnMusicLapistoria.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[medal]))
|
||||
root.add_child(Node.u16_array('clear_medal', clear_medal))
|
||||
|
||||
return root
|
||||
|
||||
@ -601,28 +578,7 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
]:
|
||||
continue
|
||||
|
||||
points = score.points
|
||||
medal = {
|
||||
self.PLAY_MEDAL_CIRCLE_FAILED: self.GAME_PLAY_MEDAL_CIRCLE_FAILED,
|
||||
self.PLAY_MEDAL_DIAMOND_FAILED: self.GAME_PLAY_MEDAL_DIAMOND_FAILED,
|
||||
self.PLAY_MEDAL_STAR_FAILED: self.GAME_PLAY_MEDAL_STAR_FAILED,
|
||||
self.PLAY_MEDAL_EASY_CLEAR: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED, # Map approximately
|
||||
self.PLAY_MEDAL_CIRCLE_CLEARED: self.GAME_PLAY_MEDAL_CIRCLE_CLEARED,
|
||||
self.PLAY_MEDAL_DIAMOND_CLEARED: self.GAME_PLAY_MEDAL_DIAMOND_CLEARED,
|
||||
self.PLAY_MEDAL_STAR_CLEARED: self.GAME_PLAY_MEDAL_STAR_CLEARED,
|
||||
self.PLAY_MEDAL_CIRCLE_FULL_COMBO: self.GAME_PLAY_MEDAL_CIRCLE_FULL_COMBO,
|
||||
self.PLAY_MEDAL_DIAMOND_FULL_COMBO: self.GAME_PLAY_MEDAL_DIAMOND_FULL_COMBO,
|
||||
self.PLAY_MEDAL_STAR_FULL_COMBO: self.GAME_PLAY_MEDAL_STAR_FULL_COMBO,
|
||||
self.PLAY_MEDAL_PERFECT: self.GAME_PLAY_MEDAL_PERFECT,
|
||||
}[score.data.get_int('medal')]
|
||||
medal_pos = {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
self.CHART_TYPE_HYPER: self.GAME_CHART_TYPE_HYPER_POSITION,
|
||||
self.CHART_TYPE_EX: self.GAME_CHART_TYPE_EX_POSITION,
|
||||
}[score.chart]
|
||||
clear_medal[score.id] = clear_medal[score.id] | (medal << (medal_pos * 4))
|
||||
|
||||
clear_medal[score.id] = clear_medal[score.id] | self.__format_medal_for_score(score)
|
||||
hiscore_index = (score.id * 4) + {
|
||||
self.CHART_TYPE_EASY: self.GAME_CHART_TYPE_EASY_POSITION,
|
||||
self.CHART_TYPE_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
@ -631,7 +587,7 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
||||
}[score.chart]
|
||||
hiscore_byte_pos = int((hiscore_index * 17) / 8)
|
||||
hiscore_bit_pos = int((hiscore_index * 17) % 8)
|
||||
hiscore_value = points << hiscore_bit_pos
|
||||
hiscore_value = score.points << hiscore_bit_pos
|
||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF)
|
||||
|
@ -253,8 +253,6 @@ class PopnMusicTuneStreet(PopnMusicBase):
|
||||
continue
|
||||
|
||||
# Format actual score, according to DB chart position
|
||||
points = score.points
|
||||
|
||||
hiscore_index = (score.id * 7) + {
|
||||
self.CHART_TYPE_5_BUTTON: self.GAME_CHART_TYPE_5_BUTTON_POSITION,
|
||||
self.CHART_TYPE_OLD_NORMAL: self.GAME_CHART_TYPE_NORMAL_POSITION,
|
||||
@ -266,7 +264,7 @@ class PopnMusicTuneStreet(PopnMusicBase):
|
||||
}[score.chart]
|
||||
hiscore_byte_pos = int((hiscore_index * 17) / 8)
|
||||
hiscore_bit_pos = int((hiscore_index * 17) % 8)
|
||||
hiscore_value = points << hiscore_bit_pos
|
||||
hiscore_value = score.points << hiscore_bit_pos
|
||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF)
|
||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF)
|
||||
@ -350,34 +348,6 @@ class PopnMusicTuneStreet(PopnMusicBase):
|
||||
|
||||
return root
|
||||
|
||||
def format_conversion(self, userid: UserID, profile: Profile) -> Node:
|
||||
root = Node.void('playerdata')
|
||||
|
||||
root.add_child(Node.string('name', profile.get_str('name', 'なし')))
|
||||
root.add_child(Node.s16('chara', profile.get_int('chara', -1)))
|
||||
root.add_child(Node.s32('option', profile.get_int('option', 0)))
|
||||
root.add_child(Node.u8('version', 0))
|
||||
root.add_child(Node.u8('kind', 0))
|
||||
root.add_child(Node.u8('season', 0))
|
||||
|
||||
medals = [0] * (self.GAME_MAX_MUSIC_ID)
|
||||
scores = self.data.remote.music.get_scores(self.game, self.version, userid)
|
||||
for score in scores:
|
||||
if score.id > self.GAME_MAX_MUSIC_ID:
|
||||
continue
|
||||
|
||||
# Skip any scores for chart types we don't support
|
||||
if score.chart in [
|
||||
self.CHART_TYPE_EASY,
|
||||
]:
|
||||
continue
|
||||
|
||||
flags = self.__format_flags_for_score(score)
|
||||
medals[score.id] = medals[score.id] | flags
|
||||
root.add_child(Node.u16_array('clear_medal', medals))
|
||||
|
||||
return root
|
||||
|
||||
def unformat_profile(self, userid: UserID, request: Node, oldprofile: Profile) -> Profile:
|
||||
newprofile = copy.deepcopy(oldprofile)
|
||||
|
||||
@ -558,9 +528,6 @@ class PopnMusicTuneStreet(PopnMusicBase):
|
||||
self.update_machine_name(request.attribute('shop_name'))
|
||||
return Node.void('game')
|
||||
|
||||
def handle_game_taxphase_request(self, request: Node) -> Node:
|
||||
return Node.void('game')
|
||||
|
||||
def handle_playerdata_expire_request(self, request: Node) -> Node:
|
||||
return Node.void('playerdata')
|
||||
|
||||
|
@ -734,6 +734,7 @@ class PopnMusicUsaNeko(PopnMusicBase):
|
||||
return Node.void('player24')
|
||||
|
||||
def format_conversion(self, userid: UserID, profile: Profile) -> Node:
|
||||
# TODO: Validate this now that it's been moved.
|
||||
root = Node.void('player24')
|
||||
root.add_child(Node.string('name', profile.get_str('name', 'なし')))
|
||||
root.add_child(Node.s16('chara', profile.get_int('chara', -1)))
|
||||
|
Loading…
x
Reference in New Issue
Block a user