From 2ebf59e54158b48c302080e1f34553e8b47c5bd5 Mon Sep 17 00:00:00 2001 From: Jennifer Taylor Date: Wed, 17 Aug 2022 01:58:49 +0000 Subject: [PATCH] Partially roll in Subject38's Jubeat backend updates. --- bemani/backend/jubeat/avenue.py | 15 +++++++++++++++ bemani/backend/jubeat/base.py | 14 +++++++++++++- bemani/backend/jubeat/factory.py | 6 +++++- bemani/common/constants.py | 1 + requirements.txt | 1 + 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 bemani/backend/jubeat/avenue.py diff --git a/bemani/backend/jubeat/avenue.py b/bemani/backend/jubeat/avenue.py new file mode 100644 index 0000000..77778ff --- /dev/null +++ b/bemani/backend/jubeat/avenue.py @@ -0,0 +1,15 @@ +# vim: set fileencoding=utf-8 +from typing import Optional +from bemani.backend.jubeat.base import JubeatBase +from bemani.backend.jubeat.festo import JubeatFesto + +from bemani.common import VersionConstants + + +class JubeatAvenue(JubeatBase): + + name: str = 'Jubeat Avenue' + version: int = VersionConstants.JUBEAT_AVENUE + + def previous_version(self) -> Optional[JubeatBase]: + return JubeatFesto(self.data, self.config, self.model) diff --git a/bemani/backend/jubeat/base.py b/bemani/backend/jubeat/base.py index 180c146..5fffa20 100644 --- a/bemani/backend/jubeat/base.py +++ b/bemani/backend/jubeat/base.py @@ -4,7 +4,7 @@ from typing_extensions import Final from bemani.backend.base import Base from bemani.backend.core import CoreHandler, CardManagerHandler, PASELIHandler -from bemani.common import DBConstants, GameConstants, Profile, ValidatedDict +from bemani.common import DBConstants, GameConstants, ValidatedDict, Profile from bemani.data import Score, UserID from bemani.protocol import Node @@ -36,6 +36,9 @@ class JubeatBase(CoreHandler, CardManagerHandler, PASELIHandler, Base): CHART_TYPE_BASIC: Final[int] = 0 CHART_TYPE_ADVANCED: Final[int] = 1 CHART_TYPE_EXTREME: Final[int] = 2 + CHART_TYPE_HARD_BASIC: Final[int] = 3 + CHART_TYPE_HARD_ADVANCED: Final[int] = 4 + CHART_TYPE_HARD_EXTREME: Final[int] = 5 def previous_version(self) -> Optional['JubeatBase']: """ @@ -161,6 +164,7 @@ class JubeatBase(CoreHandler, CardManagerHandler, PASELIHandler, Base): combo: int, ghost: Optional[List[int]]=None, stats: Optional[Dict[str, int]]=None, + music_rate: Optional[int]=None, ) -> None: """ Given various pieces of a score, update the user's high score and score @@ -228,6 +232,14 @@ class JubeatBase(CoreHandler, CardManagerHandler, PASELIHandler, Base): # Update the ghost regardless, but don't bother with it in history scoredata.replace_int_array('ghost', len(ghost), ghost) + if music_rate is not None: + if oldscore is not None: + if music_rate > oldscore.data.get_int('music_rate'): + scoredata.replace_int('music_rate', music_rate) + else: + scoredata.replace_int('music_rate', music_rate) + history.replace_int('music_rate', music_rate) + # Look up where this score was earned lid = self.get_machine_id() diff --git a/bemani/backend/jubeat/factory.py b/bemani/backend/jubeat/factory.py index b403e27..0d807c7 100644 --- a/bemani/backend/jubeat/factory.py +++ b/bemani/backend/jubeat/factory.py @@ -16,6 +16,7 @@ from bemani.backend.jubeat.prop import JubeatProp from bemani.backend.jubeat.qubell import JubeatQubell from bemani.backend.jubeat.clan import JubeatClan from bemani.backend.jubeat.festo import JubeatFesto +from bemani.backend.jubeat.avenue import JubeatAvenue from bemani.common import Model from bemani.data import Config, Data @@ -36,6 +37,7 @@ class JubeatFactory(Factory): JubeatQubell, JubeatClan, JubeatFesto, + JubeatAvenue, ] @classmethod @@ -73,8 +75,10 @@ class JubeatFactory(Factory): return JubeatQubell(data, config, model) if model.version >= 2017062600 and model.version < 2018090500: return JubeatClan(data, config, model) - if model.version >= 2018090500: + if model.version >= 2018090500 and model.version < 2022080300: return JubeatFesto(data, config, model) + if model.version >= 2022080300: + return JubeatAvenue(data, config, model) # Unknown game version return None diff --git a/bemani/common/constants.py b/bemani/common/constants.py index 61a5011..e083244 100644 --- a/bemani/common/constants.py +++ b/bemani/common/constants.py @@ -90,6 +90,7 @@ class VersionConstants: JUBEAT_QUBELL: Final[int] = 11 JUBEAT_CLAN: Final[int] = 12 JUBEAT_FESTO: Final[int] = 13 + JUBEAT_AVENUE: Final[int] = 14 MGA: Final[int] = 1 diff --git a/requirements.txt b/requirements.txt index aa77ed4..2b9cbe1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ types-PyYAML types-Werkzeug types-Flask types-freezegun +types-python-dateutil flake8 typed-ast freezegun