mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-04 14:47:29 +08:00
340 lines
9.0 KiB
Python
340 lines
9.0 KiB
Python
from enum import Enum, IntEnum
|
|
from typing import Optional
|
|
from core.utils import floor_to_nearest_005
|
|
|
|
class ChuniConstants:
|
|
GAME_CODE = "SDBT"
|
|
GAME_CODE_NEW = "SDHD"
|
|
GAME_CODE_INT = "SDGS"
|
|
GAME_CODE_CHN = "SDHJ"
|
|
|
|
CONFIG_NAME = "chuni.yaml"
|
|
|
|
VER_CHUNITHM = 0
|
|
VER_CHUNITHM_PLUS = 1
|
|
VER_CHUNITHM_AIR = 2
|
|
VER_CHUNITHM_AIR_PLUS = 3
|
|
VER_CHUNITHM_STAR = 4
|
|
VER_CHUNITHM_STAR_PLUS = 5
|
|
VER_CHUNITHM_AMAZON = 6
|
|
VER_CHUNITHM_AMAZON_PLUS = 7
|
|
VER_CHUNITHM_CRYSTAL = 8
|
|
VER_CHUNITHM_CRYSTAL_PLUS = 9
|
|
VER_CHUNITHM_PARADISE = 10
|
|
|
|
VER_CHUNITHM_NEW = 11
|
|
VER_CHUNITHM_NEW_PLUS = 12
|
|
VER_CHUNITHM_SUN = 13
|
|
VER_CHUNITHM_SUN_PLUS = 14
|
|
VER_CHUNITHM_LUMINOUS = 15
|
|
VER_CHUNITHM_LUMINOUS_PLUS = 16
|
|
VER_CHUNITHM_VERSE = 17
|
|
VER_CHUNITHM_X_VERSE = 18
|
|
|
|
VERSION_NAMES = [
|
|
"CHUNITHM",
|
|
"CHUNITHM PLUS",
|
|
"CHUNITHM AIR",
|
|
"CHUNITHM AIR PLUS",
|
|
"CHUNITHM STAR",
|
|
"CHUNITHM STAR PLUS",
|
|
"CHUNITHM AMAZON",
|
|
"CHUNITHM AMAZON PLUS",
|
|
"CHUNITHM CRYSTAL",
|
|
"CHUNITHM CRYSTAL PLUS",
|
|
"CHUNITHM PARADISE",
|
|
"CHUNITHM NEW!!",
|
|
"CHUNITHM NEW PLUS!!",
|
|
"CHUNITHM SUN",
|
|
"CHUNITHM SUN PLUS",
|
|
"CHUNITHM LUMINOUS",
|
|
"CHUNITHM LUMINOUS PLUS",
|
|
"CHUNITHM VERSE",
|
|
"CHUNITHM X-VERSE",
|
|
]
|
|
|
|
SCORE_RANK_INTERVALS_OLD = [
|
|
(1007500, "SSS"),
|
|
(1000000, "SS"),
|
|
( 975000, "S"),
|
|
( 950000, "AAA"),
|
|
( 925000, "AA"),
|
|
( 900000, "A"),
|
|
( 800000, "BBB"),
|
|
( 700000, "BB"),
|
|
( 600000, "B"),
|
|
( 500000, "C"),
|
|
( 0, "D"),
|
|
]
|
|
|
|
SCORE_RANK_INTERVALS_NEW = [
|
|
(1009000, "SSS+"), # New only
|
|
(1007500, "SSS"),
|
|
(1005000, "SS+"), # New only
|
|
(1000000, "SS"),
|
|
( 990000, "S+"), # New only
|
|
( 975000, "S"),
|
|
( 950000, "AAA"),
|
|
( 925000, "AA"),
|
|
( 900000, "A"),
|
|
( 800000, "BBB"),
|
|
( 700000, "BB"),
|
|
( 600000, "B"),
|
|
( 500000, "C"),
|
|
( 0, "D"),
|
|
]
|
|
|
|
VERSION_LUT = {
|
|
"100": VER_CHUNITHM,
|
|
"105": VER_CHUNITHM_PLUS,
|
|
"110": VER_CHUNITHM_AIR,
|
|
"115": VER_CHUNITHM_AIR_PLUS,
|
|
"120": VER_CHUNITHM_STAR,
|
|
"125": VER_CHUNITHM_STAR_PLUS,
|
|
"130": VER_CHUNITHM_AMAZON,
|
|
"135": VER_CHUNITHM_AMAZON_PLUS,
|
|
"140": VER_CHUNITHM_CRYSTAL,
|
|
"145": VER_CHUNITHM_CRYSTAL_PLUS,
|
|
"150": VER_CHUNITHM_PARADISE,
|
|
"200": VER_CHUNITHM_NEW,
|
|
"205": VER_CHUNITHM_NEW_PLUS,
|
|
"210": VER_CHUNITHM_SUN,
|
|
"215": VER_CHUNITHM_SUN_PLUS,
|
|
"220": VER_CHUNITHM_LUMINOUS,
|
|
"225": VER_CHUNITHM_LUMINOUS_PLUS,
|
|
"230": VER_CHUNITHM_VERSE,
|
|
"240": VER_CHUNITHM_X_VERSE,
|
|
}
|
|
|
|
@classmethod
|
|
def game_ver_to_string(cls, ver: int):
|
|
return cls.VERSION_NAMES[ver]
|
|
|
|
@classmethod
|
|
def int_ver_to_game_ver(cls, ver: int) -> Optional[int]:
|
|
""" Takes an int ver (ex 100 for 1.00) and returns an internal game version """
|
|
return cls.VERSION_LUT.get(str(floor_to_nearest_005(ver)), None)
|
|
|
|
class MapAreaConditionType(IntEnum):
|
|
"""
|
|
Condition IDs for the `GetGameMapAreaConditionApi` and `GetGameUCConditionApi` requests.
|
|
|
|
- "Item" or "locked item" refers to the map area, unlock challenge or
|
|
Linked VERSE locked using this system.
|
|
- "Chart ID" refers to musicID \\* 100 + difficulty, where difficulty is 0 for BASIC
|
|
up to 6 for WORLD'S END. For example, Halcyon ULTIMA is 17305.
|
|
"""
|
|
|
|
INVALID = 0
|
|
"""
|
|
Invalid condition type. Should cause the hidden item to be automatically unlocked,
|
|
but seemingly only works with map areas.
|
|
"""
|
|
|
|
MAP_CLEARED = 1
|
|
"""Finish the map with ID `conditionId`."""
|
|
|
|
MAP_AREA_CLEARED = 2
|
|
"""Finish the map area with ID `conditionId`."""
|
|
|
|
TROPHY_OBTAINED = 3
|
|
"""Unlock the trophy with ID `conditionId`."""
|
|
|
|
TROPHY_EQUIPPED = 4
|
|
"""
|
|
Equip the trophy with ID `conditionId`. The item is locked again when the trophy is
|
|
unequipped.
|
|
"""
|
|
|
|
NAMEPLATE_OBTAINED = 5
|
|
"""Unlock the nameplate with ID `conditionId`."""
|
|
|
|
NAMEPLATE_EQUIPPED = 6
|
|
"""
|
|
Equip the nameplate with ID `conditionId`. The item is locked again when the nameplate
|
|
is unequipped.
|
|
"""
|
|
|
|
CHARACTER_OBTAINED = 7
|
|
"""Unlock the character with ID `conditionId`."""
|
|
|
|
CHARACTER_EQUIPPED = 8
|
|
"""
|
|
Equip the character with ID `conditionId`. The item is locked again when the character
|
|
is unequipped.
|
|
"""
|
|
|
|
CHARACTER_TRANSFORM_EQUIPPED = 9
|
|
"""
|
|
Equip the character, with the character transform ID `conditionId`. The item is locked again
|
|
if the incorrect character is equipped, or the correct character is equipped with the wrong
|
|
transform.
|
|
"""
|
|
|
|
MUSIC_OBTAINED = 10
|
|
"""Unlock the music with ID `conditionId`."""
|
|
|
|
AVATAR_ACCESSORY_OBTAINED = 11
|
|
"""Unlock the avatar accessory with ID `conditionId`."""
|
|
|
|
AVATAR_ACCESSORY_EQUIPPED = 12
|
|
"""
|
|
Equip the avatar accessory with ID `conditionId`. The item is locked again when the avatar
|
|
accessory is unequipped.
|
|
"""
|
|
|
|
MAP_ICON_OBTAINED = 13
|
|
"""Unlock the map icon with ID `conditionId`."""
|
|
|
|
MAP_ICON_EQUIPPED = 14
|
|
"""
|
|
Equip the map icon with ID `conditionId`. The item is locked again when the map icon is
|
|
unequipped.
|
|
"""
|
|
|
|
SYSTEM_VOICE_OBTAINED = 15
|
|
"""Unlock the system voice with ID `conditionId`."""
|
|
|
|
SYSTEM_VOICE_EQUIPPED = 16
|
|
"""
|
|
Equip the system voice with ID `conditionId`. The item is locked again when the system voice
|
|
is unequipped.
|
|
"""
|
|
|
|
ALL_JUSTICE_CRITICAL = 17
|
|
"""Obtain ALL JUSTICE CRITICAL on the chart given by `conditionId`."""
|
|
|
|
RANK_SSSP = 18
|
|
"""Obtain rank SSS+ on the chart given by `conditionId`."""
|
|
|
|
RANK_SSS = 19
|
|
"""Obtain rank SSS on the chart given by `conditionId`."""
|
|
|
|
RANK_SSP = 20
|
|
"""Obtain rank SS+ on the chart given by `conditionId`."""
|
|
|
|
RANK_SS = 21
|
|
"""Obtain rank SS on the chart given by `conditionId`."""
|
|
|
|
RANK_SP = 22
|
|
"""Obtain rank S+ on the chart given by `conditionId`."""
|
|
|
|
RANK_S = 23
|
|
"""Obtain rank S on the chart given by `conditionId`."""
|
|
|
|
RANK_AAA = 24
|
|
"""Obtain rank AAA on the chart given by `conditionId`."""
|
|
|
|
RANK_AA = 25
|
|
"""Obtain rank AA on the chart given by `conditionId`."""
|
|
|
|
RANK_A = 26
|
|
"""Obtain rank A on the chart given by `conditionId`."""
|
|
|
|
MINIMUM_BEST_30_AVERAGE = 27
|
|
"""Obtain a best 30 average of at least `conditionId / 100`."""
|
|
|
|
ALL_JUSTICE = 28
|
|
"""Obtain ALL JUSTICE on the chart given by `conditionId`."""
|
|
|
|
FULL_COMBO = 29
|
|
"""Obtain FULL COMBO on the chart given by `conditionId`."""
|
|
|
|
UNLOCK_CHALLENGE_DISCOVERED = 30
|
|
"""Discover/unlock the unlock challenge with ID `conditionId`."""
|
|
|
|
UNLOCK_CHALLENGE_CLEARED = 31
|
|
"""Clear the unlock challenge with ID `conditionId`."""
|
|
|
|
MINIMUM_RATING = 32
|
|
"""Obtain a rating of at least `conditionId / 100`."""
|
|
|
|
|
|
class LinkedVerseUnlockConditionType(IntEnum):
|
|
"""
|
|
`conditionList` is a semicolon-delimited list of numbers, where the number's meaning
|
|
is defined by the specific `conditionId`. Additionally, each element of the list
|
|
can be further separated by underscores. For example `1;2_3;4` means that the player
|
|
must achieve 1 AND (2 OR 3) AND 4.
|
|
"""
|
|
|
|
PLAY_SONGS = 33
|
|
"""
|
|
Play songs given by `conditionList`, where `conditionList` is a
|
|
list of song IDs.
|
|
"""
|
|
|
|
COURSE_CLEAR_AND_CLASS_EMBLEM = 34
|
|
"""
|
|
Obtain a class emblem (by clearing all courses of a given class) on **any**
|
|
of the classes given by `conditionList`, where `conditionList` is an
|
|
underscore-separated list of class IDs (1 for CLASS I to 6 for CLASS ∞).
|
|
"""
|
|
|
|
TROPHY_OBTAINED = 35
|
|
"""
|
|
Obtain trophies given by `conditionList`, where `conditionList` is a
|
|
list of trophy IDs.
|
|
"""
|
|
|
|
PLAY_SONGS_IN_FAVORITE = 36
|
|
"""
|
|
Play songs given by `conditionList` **from the favorites folder**, where
|
|
`conditionList` is a list of song IDs.
|
|
"""
|
|
|
|
CLEAR_TEAM_COURSE_WITH_CHARACTER_OF_MINIMUM_RANK = 37
|
|
"""
|
|
Clear a team course while equipping a character of minimum rank.
|
|
"""
|
|
|
|
class MapAreaConditionLogicalOperator(Enum):
|
|
AND = 1
|
|
OR = 2
|
|
|
|
|
|
class AvatarCategory(Enum):
|
|
WEAR = 1
|
|
HEAD = 2
|
|
FACE = 3
|
|
SKIN = 4
|
|
ITEM = 5
|
|
FRONT = 6
|
|
BACK = 7
|
|
|
|
class ItemKind(IntEnum):
|
|
NAMEPLATE = 1
|
|
|
|
FRAME = 2
|
|
"""
|
|
"Frame" is the background for the gauge/score/max combo display
|
|
shown during gameplay. This item cannot be equipped (as of LUMINOUS PLUS)
|
|
and is hardcoded to the current game's version.
|
|
"""
|
|
|
|
TROPHY = 3
|
|
SKILL = 4
|
|
|
|
TICKET = 5
|
|
"""A statue is also a ticket."""
|
|
|
|
PRESENT = 6
|
|
MUSIC_UNLOCK = 7
|
|
MAP_ICON = 8
|
|
SYSTEM_VOICE = 9
|
|
SYMBOL_CHAT = 10
|
|
AVATAR_ACCESSORY = 11
|
|
|
|
ULTIMA_UNLOCK = 12
|
|
"""This only applies to ULTIMA difficulties that are *not* unlocked by
|
|
reaching S rank on EXPERT difficulty or above.
|
|
"""
|
|
|
|
STAGE = 13
|
|
|
|
|
|
class FavoriteItemKind(IntEnum):
|
|
MUSIC = 1
|
|
RIVAL = 2
|
|
CHARACTER = 3
|