537 lines
20 KiB
Python
537 lines
20 KiB
Python
from enum import Enum
|
|
from typing import Dict
|
|
from typing_extensions import Final
|
|
|
|
|
|
class GameConstants(Enum):
|
|
"""
|
|
Constants that identify a game series. These are used in the code as enums
|
|
in order to catch type errors and prevent raw strings being introduced for
|
|
game series. They re also used verbatum in MySQL, so any column named 'game'
|
|
in any of the tables should only contain one of the following strings.
|
|
"""
|
|
|
|
BISHI_BASHI: Final[str] = "bishi"
|
|
DANCE_EVOLUTION: Final[str] = "danevo"
|
|
DDR: Final[str] = "ddr"
|
|
IIDX: Final[str] = "iidx"
|
|
JUBEAT: Final[str] = "jubeat"
|
|
MGA: Final[str] = "mga"
|
|
MUSECA: Final[str] = "museca"
|
|
POPN_MUSIC: Final[str] = "pnm"
|
|
REFLEC_BEAT: Final[str] = "reflec"
|
|
SDVX: Final[str] = "sdvx"
|
|
|
|
|
|
class VersionConstants:
|
|
"""
|
|
Constants used to centralize game versions. These are not enumerations
|
|
since there are multiple keys with the same value. However, all database
|
|
column named 'version' should contain only values found here.
|
|
"""
|
|
|
|
BISHI_BASHI_TSBB: Final[int] = 1
|
|
|
|
DDR_1STMIX: Final[int] = 1
|
|
DDR_2NDMIX: Final[int] = 2
|
|
DDR_3RDMIX: Final[int] = 3
|
|
DDR_4THMIX: Final[int] = 4
|
|
DDR_5THMIX: Final[int] = 5
|
|
DDR_6THMIX: Final[int] = 6
|
|
DDR_7THMIX: Final[int] = 7
|
|
DDR_EXTREME: Final[int] = 8
|
|
DDR_SUPERNOVA: Final[int] = 9
|
|
DDR_SUPERNOVA_2: Final[int] = 10
|
|
DDR_X: Final[int] = 11
|
|
DDR_X2: Final[int] = 12
|
|
DDR_X3_VS_2NDMIX: Final[int] = 13
|
|
DDR_2013: Final[int] = 14
|
|
DDR_2014: Final[int] = 15
|
|
DDR_ACE: Final[int] = 16
|
|
DDR_A20: Final[int] = 17
|
|
|
|
IIDX: Final[int] = 1
|
|
IIDX_2ND_STYLE: Final[int] = 2
|
|
IIDX_3RD_STYLE: Final[int] = 3
|
|
IIDX_4TH_STYLE: Final[int] = 4
|
|
IIDX_5TH_STYLE: Final[int] = 5
|
|
IIDX_6TH_STYLE: Final[int] = 6
|
|
IIDX_7TH_STYLE: Final[int] = 7
|
|
IIDX_8TH_STYLE: Final[int] = 8
|
|
IIDX_9TH_STYLE: Final[int] = 9
|
|
IIDX_10TH_STYLE: Final[int] = 10
|
|
IIDX_RED: Final[int] = 11
|
|
IIDX_HAPPY_SKY: Final[int] = 12
|
|
IIDX_DISTORTED: Final[int] = 13
|
|
IIDX_GOLD: Final[int] = 14
|
|
IIDX_DJ_TROOPERS: Final[int] = 15
|
|
IIDX_EMPRESS: Final[int] = 16
|
|
IIDX_SIRIUS: Final[int] = 17
|
|
IIDX_RESORT_ANTHEM: Final[int] = 18
|
|
IIDX_LINCLE: Final[int] = 19
|
|
IIDX_TRICORO: Final[int] = 20
|
|
IIDX_SPADA: Final[int] = 21
|
|
IIDX_PENDUAL: Final[int] = 22
|
|
IIDX_COPULA: Final[int] = 23
|
|
IIDX_SINOBUZ: Final[int] = 24
|
|
IIDX_CANNON_BALLERS: Final[int] = 25
|
|
IIDX_ROOTAGE: Final[int] = 26
|
|
IIDX_HEROIC_VERSE: Final[int] = 27
|
|
IIDX_BISTROVER: Final[int] = 28
|
|
|
|
JUBEAT: Final[int] = 1
|
|
JUBEAT_RIPPLES: Final[int] = 2
|
|
JUBEAT_RIPPLES_APPEND: Final[int] = 3
|
|
JUBEAT_KNIT: Final[int] = 4
|
|
JUBEAT_KNIT_APPEND: Final[int] = 5
|
|
JUBEAT_COPIOUS: Final[int] = 6
|
|
JUBEAT_COPIOUS_APPEND: Final[int] = 7
|
|
JUBEAT_SAUCER: Final[int] = 8
|
|
JUBEAT_SAUCER_FULFILL: Final[int] = 9
|
|
JUBEAT_PROP: Final[int] = 10
|
|
JUBEAT_QUBELL: Final[int] = 11
|
|
JUBEAT_CLAN: Final[int] = 12
|
|
JUBEAT_FESTO: Final[int] = 13
|
|
JUBEAT_AVENUE: Final[int] = 14
|
|
|
|
MGA: Final[int] = 1
|
|
|
|
MUSECA: Final[int] = 1
|
|
MUSECA_1_PLUS: Final[int] = 2
|
|
|
|
POPN_MUSIC: Final[int] = 1
|
|
POPN_MUSIC_2: Final[int] = 2
|
|
POPN_MUSIC_3: Final[int] = 3
|
|
POPN_MUSIC_4: Final[int] = 4
|
|
POPN_MUSIC_5: Final[int] = 5
|
|
POPN_MUSIC_6: Final[int] = 6
|
|
POPN_MUSIC_7: Final[int] = 7
|
|
POPN_MUSIC_8: Final[int] = 8
|
|
POPN_MUSIC_9: Final[int] = 9
|
|
POPN_MUSIC_10: Final[int] = 10
|
|
POPN_MUSIC_11: Final[int] = 11
|
|
POPN_MUSIC_IROHA: Final[int] = 12
|
|
POPN_MUSIC_CARNIVAL: Final[int] = 13
|
|
POPN_MUSIC_FEVER: Final[int] = 14
|
|
POPN_MUSIC_ADVENTURE: Final[int] = 15
|
|
POPN_MUSIC_PARTY: Final[int] = 16
|
|
POPN_MUSIC_THE_MOVIE: Final[int] = 17
|
|
POPN_MUSIC_SENGOKU_RETSUDEN: Final[int] = 18
|
|
POPN_MUSIC_TUNE_STREET: Final[int] = 19
|
|
POPN_MUSIC_FANTASIA: Final[int] = 20
|
|
POPN_MUSIC_SUNNY_PARK: Final[int] = 21
|
|
POPN_MUSIC_LAPISTORIA: Final[int] = 22
|
|
POPN_MUSIC_ECLALE: Final[int] = 23
|
|
POPN_MUSIC_USANEKO: Final[int] = 24
|
|
POPN_MUSIC_PEACE: Final[int] = 25
|
|
POPN_MUSIC_KAIMEI_RIDDLES: Final[int] = 26
|
|
|
|
REFLEC_BEAT: Final[int] = 1
|
|
REFLEC_BEAT_LIMELIGHT: Final[int] = 2
|
|
REFLEC_BEAT_COLETTE: Final[int] = 3
|
|
REFLEC_BEAT_GROOVIN: Final[int] = 4
|
|
REFLEC_BEAT_VOLZZA: Final[int] = 5
|
|
REFLEC_BEAT_VOLZZA_2: Final[int] = 6
|
|
REFLEC_BEAT_REFLESIA: Final[int] = 7
|
|
|
|
SDVX_BOOTH: Final[int] = 1
|
|
SDVX_INFINITE_INFECTION: Final[int] = 2
|
|
SDVX_GRAVITY_WARS: Final[int] = 3
|
|
SDVX_HEAVENLY_HAVEN: Final[int] = 4
|
|
|
|
|
|
class APIConstants(Enum):
|
|
"""
|
|
The four types of IDs found in a BEMAPI request or response.
|
|
"""
|
|
|
|
ID_TYPE_SERVER: Final[str] = "server"
|
|
ID_TYPE_CARD: Final[str] = "card"
|
|
ID_TYPE_SONG: Final[str] = "song"
|
|
ID_TYPE_INSTANCE: Final[str] = "instance"
|
|
|
|
|
|
class DBConstants:
|
|
"""
|
|
Constants found in the DB relating to clear lamps, halos, grades, and the like.
|
|
"""
|
|
|
|
# When adding new game series, I try to make sure that constants
|
|
# go in order, and have a difference of 100 between them. This is
|
|
# so I can promote lamps/scores/etc by using a simple "max", while
|
|
# still allowing for new game versions to insert new constants anywhere
|
|
# in the lineup. You'll notice a few areas where constants go up by
|
|
# non-100. This is because a new game came out in this series after
|
|
# existing scores were in production, so constants for new grades/lamps
|
|
# had to be snuck in. The actual constant doesn't matter as long as they
|
|
# go in order, so this works out nicely.
|
|
|
|
# Its up to various games to map the in-game constant to these DB
|
|
# constants. Most games will implement a pair of functions that takes
|
|
# one of these values and spits out the game-specific constant, and
|
|
# vice versa. This keeps us individual game agnostic and allows us to
|
|
# react easily to renumberings and constant insertions. These constants
|
|
# will only be found in the DB itself, as well as used on the frontend
|
|
# to display various general information about scores.
|
|
|
|
OMNIMIX_VERSION_BUMP: Final[int] = 10000
|
|
|
|
DDR_HALO_NONE: Final[int] = 100
|
|
DDR_HALO_GOOD_FULL_COMBO: Final[int] = 200
|
|
DDR_HALO_GREAT_FULL_COMBO: Final[int] = 300
|
|
DDR_HALO_PERFECT_FULL_COMBO: Final[int] = 400
|
|
DDR_HALO_MARVELOUS_FULL_COMBO: Final[int] = 500
|
|
DDR_RANK_E: Final[int] = 100
|
|
DDR_RANK_D: Final[int] = 200
|
|
DDR_RANK_D_PLUS: Final[int] = 233
|
|
DDR_RANK_C_MINUS: Final[int] = 266
|
|
DDR_RANK_C: Final[int] = 300
|
|
DDR_RANK_C_PLUS: Final[int] = 333
|
|
DDR_RANK_B_MINUS: Final[int] = 366
|
|
DDR_RANK_B: Final[int] = 400
|
|
DDR_RANK_B_PLUS: Final[int] = 433
|
|
DDR_RANK_A_MINUS: Final[int] = 466
|
|
DDR_RANK_A: Final[int] = 500
|
|
DDR_RANK_A_PLUS: Final[int] = 533
|
|
DDR_RANK_AA_MINUS: Final[int] = 566
|
|
DDR_RANK_AA: Final[int] = 600
|
|
DDR_RANK_AA_PLUS: Final[int] = 650
|
|
DDR_RANK_AAA: Final[int] = 700
|
|
|
|
IIDX_CLEAR_STATUS_NO_PLAY: Final[int] = 50
|
|
IIDX_CLEAR_STATUS_FAILED: Final[int] = 100
|
|
IIDX_CLEAR_STATUS_ASSIST_CLEAR: Final[int] = 200
|
|
IIDX_CLEAR_STATUS_EASY_CLEAR: Final[int] = 300
|
|
IIDX_CLEAR_STATUS_CLEAR: Final[int] = 400
|
|
IIDX_CLEAR_STATUS_HARD_CLEAR: Final[int] = 500
|
|
IIDX_CLEAR_STATUS_EX_HARD_CLEAR: Final[int] = 600
|
|
IIDX_CLEAR_STATUS_FULL_COMBO: Final[int] = 700
|
|
IIDX_DAN_RANK_7_KYU: Final[int] = 100
|
|
IIDX_DAN_RANK_6_KYU: Final[int] = 200
|
|
IIDX_DAN_RANK_5_KYU: Final[int] = 300
|
|
IIDX_DAN_RANK_4_KYU: Final[int] = 400
|
|
IIDX_DAN_RANK_3_KYU: Final[int] = 500
|
|
IIDX_DAN_RANK_2_KYU: Final[int] = 600
|
|
IIDX_DAN_RANK_1_KYU: Final[int] = 700
|
|
IIDX_DAN_RANK_1_DAN: Final[int] = 800
|
|
IIDX_DAN_RANK_2_DAN: Final[int] = 900
|
|
IIDX_DAN_RANK_3_DAN: Final[int] = 1000
|
|
IIDX_DAN_RANK_4_DAN: Final[int] = 1100
|
|
IIDX_DAN_RANK_5_DAN: Final[int] = 1200
|
|
IIDX_DAN_RANK_6_DAN: Final[int] = 1300
|
|
IIDX_DAN_RANK_7_DAN: Final[int] = 1400
|
|
IIDX_DAN_RANK_8_DAN: Final[int] = 1500
|
|
IIDX_DAN_RANK_9_DAN: Final[int] = 1600
|
|
IIDX_DAN_RANK_10_DAN: Final[int] = 1700
|
|
IIDX_DAN_RANK_CHUDEN: Final[int] = 1800
|
|
IIDX_DAN_RANK_KAIDEN: Final[int] = 1900
|
|
|
|
JUBEAT_PLAY_MEDAL_FAILED: Final[int] = 100
|
|
JUBEAT_PLAY_MEDAL_CLEARED: Final[int] = 200
|
|
JUBEAT_PLAY_MEDAL_NEARLY_FULL_COMBO: Final[int] = 300
|
|
JUBEAT_PLAY_MEDAL_FULL_COMBO: Final[int] = 400
|
|
JUBEAT_PLAY_MEDAL_NEARLY_EXCELLENT: Final[int] = 500
|
|
JUBEAT_PLAY_MEDAL_EXCELLENT: Final[int] = 600
|
|
|
|
MUSECA_GRADE_DEATH: Final[int] = 100 # 没
|
|
MUSECA_GRADE_POOR: Final[int] = 200 # 拙
|
|
MUSECA_GRADE_MEDIOCRE: Final[int] = 300 # 凡
|
|
MUSECA_GRADE_GOOD: Final[int] = 400 # 佳
|
|
MUSECA_GRADE_GREAT: Final[int] = 500 # 良
|
|
MUSECA_GRADE_EXCELLENT: Final[int] = 600 # 優
|
|
MUSECA_GRADE_SUPERB: Final[int] = 700 # 秀
|
|
MUSECA_GRADE_MASTERPIECE: Final[int] = 800 # 傑
|
|
MUSECA_GRADE_PERFECT: Final[int] = 900 # 傑
|
|
MUSECA_CLEAR_TYPE_FAILED: Final[int] = 100
|
|
MUSECA_CLEAR_TYPE_CLEARED: Final[int] = 200
|
|
MUSECA_CLEAR_TYPE_FULL_COMBO: Final[int] = 300
|
|
|
|
POPN_MUSIC_PLAY_MEDAL_NO_PLAY: Final[int] = 50
|
|
POPN_MUSIC_PLAY_MEDAL_CIRCLE_FAILED: Final[int] = 100
|
|
POPN_MUSIC_PLAY_MEDAL_DIAMOND_FAILED: Final[int] = 200
|
|
POPN_MUSIC_PLAY_MEDAL_STAR_FAILED: Final[int] = 300
|
|
POPN_MUSIC_PLAY_MEDAL_EASY_CLEAR: Final[int] = 400
|
|
POPN_MUSIC_PLAY_MEDAL_CIRCLE_CLEARED: Final[int] = 500
|
|
POPN_MUSIC_PLAY_MEDAL_DIAMOND_CLEARED: Final[int] = 600
|
|
POPN_MUSIC_PLAY_MEDAL_STAR_CLEARED: Final[int] = 700
|
|
POPN_MUSIC_PLAY_MEDAL_CIRCLE_FULL_COMBO: Final[int] = 800
|
|
POPN_MUSIC_PLAY_MEDAL_DIAMOND_FULL_COMBO: Final[int] = 900
|
|
POPN_MUSIC_PLAY_MEDAL_STAR_FULL_COMBO: Final[int] = 1000
|
|
POPN_MUSIC_PLAY_MEDAL_PERFECT: Final[int] = 1100
|
|
|
|
REFLEC_BEAT_CLEAR_TYPE_NO_PLAY: Final[int] = 100
|
|
REFLEC_BEAT_CLEAR_TYPE_FAILED: Final[int] = 200
|
|
REFLEC_BEAT_CLEAR_TYPE_CLEARED: Final[int] = 300
|
|
REFLEC_BEAT_CLEAR_TYPE_HARD_CLEARED: Final[int] = 400
|
|
REFLEC_BEAT_CLEAR_TYPE_S_HARD_CLEARED: Final[int] = 500
|
|
REFLEC_BEAT_COMBO_TYPE_NONE: Final[int] = 100
|
|
REFLEC_BEAT_COMBO_TYPE_ALMOST_COMBO: Final[int] = 200
|
|
REFLEC_BEAT_COMBO_TYPE_FULL_COMBO: Final[int] = 300
|
|
REFLEC_BEAT_COMBO_TYPE_FULL_COMBO_ALL_JUST: Final[int] = 400
|
|
|
|
SDVX_CLEAR_TYPE_NO_PLAY: Final[int] = 50
|
|
SDVX_CLEAR_TYPE_FAILED: Final[int] = 100
|
|
SDVX_CLEAR_TYPE_CLEAR: Final[int] = 200
|
|
SDVX_CLEAR_TYPE_HARD_CLEAR: Final[int] = 300
|
|
SDVX_CLEAR_TYPE_ULTIMATE_CHAIN: Final[int] = 400
|
|
SDVX_CLEAR_TYPE_PERFECT_ULTIMATE_CHAIN: Final[int] = 500
|
|
SDVX_GRADE_NO_PLAY: Final[int] = 100
|
|
SDVX_GRADE_D: Final[int] = 200
|
|
SDVX_GRADE_C: Final[int] = 300
|
|
SDVX_GRADE_B: Final[int] = 400
|
|
SDVX_GRADE_A: Final[int] = 500
|
|
SDVX_GRADE_A_PLUS: Final[int] = 550
|
|
SDVX_GRADE_AA: Final[int] = 600
|
|
SDVX_GRADE_AA_PLUS: Final[int] = 650
|
|
SDVX_GRADE_AAA: Final[int] = 700
|
|
SDVX_GRADE_AAA_PLUS: Final[int] = 800
|
|
SDVX_GRADE_S: Final[int] = 900
|
|
|
|
|
|
class BroadcastConstants(Enum):
|
|
"""
|
|
Enum representing the various sections of a broadcast trigger. These come
|
|
into play when a new score is earned and there is a trigger such as a
|
|
discord webhook that needs to be notified.
|
|
"""
|
|
|
|
# Sections related to the player/song/etc.
|
|
DJ_NAME: Final[str] = "DJ Name"
|
|
SONG_NAME: Final[str] = "Song"
|
|
ARTIST_NAME: Final[str] = "Artist"
|
|
DIFFICULTY: Final[str] = "Difficulty"
|
|
|
|
# Section headers.
|
|
PLAY_STATS_HEADER: Final[str] = "Play Stats"
|
|
|
|
# Stats that relate to the song, but not the current play of the song.
|
|
TARGET_EXSCORE: Final[str] = "Target EXScore"
|
|
BEST_CLEAR_STATUS: Final[str] = "Best Clear"
|
|
|
|
# Stats that have to do with the current play of the song.
|
|
EXSCORE: Final[str] = "Your EXScore"
|
|
CLEAR_STATUS: Final[str] = "Clear Status"
|
|
PERFECT_GREATS: Final[str] = "Perfect Greats"
|
|
GREATS: Final[str] = "Greats"
|
|
GOODS: Final[str] = "Goods"
|
|
BADS: Final[str] = "Bads"
|
|
POORS: Final[str] = "Poors"
|
|
COMBO_BREAKS: Final[str] = "Combo Breaks"
|
|
SLOWS: Final[str] = "Slow"
|
|
FASTS: Final[str] = "Fast"
|
|
GRADE: Final[str] = "Grade"
|
|
RATE: Final[str] = "Score Rate"
|
|
|
|
# Added for Pnm
|
|
PLAYER_NAME: Final[str] = "Player Name"
|
|
SCORE: Final[str] = "Your Score"
|
|
COOLS: Final[str] = "Cools"
|
|
COMBO: Final[str] = "Combo"
|
|
MEDAL: Final[str] = "Medal"
|
|
|
|
|
|
class _RegionConstants:
|
|
"""
|
|
Class representing the various region IDs found in all games.
|
|
"""
|
|
|
|
# The following are the original enumerations, that still are correct
|
|
# for new games today.
|
|
HOKKAIDO: Final[int] = 1
|
|
AOMORI: Final[int] = 2
|
|
IWATE: Final[int] = 3
|
|
MIYAGI: Final[int] = 4
|
|
AKITA: Final[int] = 5
|
|
YAMAGATA: Final[int] = 6
|
|
FUKUSHIMA: Final[int] = 7
|
|
IBARAKI: Final[int] = 8
|
|
TOCHIGI: Final[int] = 9
|
|
GUNMA: Final[int] = 10
|
|
SAITAMA: Final[int] = 11
|
|
CHIBA: Final[int] = 12
|
|
TOKYO: Final[int] = 13
|
|
KANAGAWA: Final[int] = 14
|
|
NIIGATA: Final[int] = 15
|
|
TOYAMA: Final[int] = 16
|
|
ISHIKAWA: Final[int] = 17
|
|
FUKUI: Final[int] = 18
|
|
YAMANASHI: Final[int] = 19
|
|
NAGANO: Final[int] = 20
|
|
GIFU: Final[int] = 21
|
|
SHIZUOKA: Final[int] = 22
|
|
AICHI: Final[int] = 23
|
|
MIE: Final[int] = 24
|
|
SHIGA: Final[int] = 25
|
|
KYOTO: Final[int] = 26
|
|
OSAKA: Final[int] = 27
|
|
HYOGO: Final[int] = 28
|
|
NARA: Final[int] = 29
|
|
WAKAYAMA: Final[int] = 30
|
|
TOTTORI: Final[int] = 31
|
|
SHIMANE: Final[int] = 32
|
|
OKAYAMA: Final[int] = 33
|
|
HIROSHIMA: Final[int] = 34
|
|
YAMAGUCHI: Final[int] = 35
|
|
TOKUSHIMA: Final[int] = 36
|
|
KAGAWA: Final[int] = 37
|
|
EHIME: Final[int] = 38
|
|
KOUCHI: Final[int] = 39
|
|
FUKUOKA: Final[int] = 40
|
|
SAGA: Final[int] = 41
|
|
NAGASAKI: Final[int] = 42
|
|
KUMAMOTO: Final[int] = 43
|
|
OITA: Final[int] = 44
|
|
MIYAZAKI: Final[int] = 45
|
|
KAGOSHIMA: Final[int] = 46
|
|
OKINAWA: Final[int] = 47
|
|
HONG_KONG: Final[int] = 48
|
|
KOREA: Final[int] = 49
|
|
TAIWAN: Final[int] = 50
|
|
|
|
# The following are new additions, replacing the "OLD" values below.
|
|
THAILAND: Final[int] = 51
|
|
INDONESIA: Final[int] = 52
|
|
SINGAPORE: Final[int] = 53
|
|
PHILLIPINES: Final[int] = 54
|
|
MACAO: Final[int] = 55
|
|
USA: Final[int] = 56
|
|
OTHER: Final[int] = 57
|
|
|
|
# Bogus value for europe.
|
|
EUROPE: Final[int] = 1000
|
|
NO_MAPPING: Final[int] = 2000
|
|
|
|
# Old constant values.
|
|
OLD_USA: Final[int] = 51
|
|
OLD_EUROPE: Final[int] = 52
|
|
OLD_OTHER: Final[int] = 53
|
|
|
|
# Min/max valid values for server.
|
|
MIN: Final[int] = 1
|
|
MAX: Final[int] = 56
|
|
|
|
# Min/max valid values for JP prefectures
|
|
MIN_PREF: Final[int] = 1
|
|
MAX_PREF: Final[int] = 47
|
|
|
|
# This is a really nasty LUT to attempt to make the frontend display
|
|
# the same regardless of the game in question. This is mostly because
|
|
# the prefecture/region stored in the profile is editable by IIDX and
|
|
# I didn't anticipate this ever changing.
|
|
def db_to_game_region(self, use_new_table: bool, region: int) -> int:
|
|
if use_new_table:
|
|
# The new lookup table does not have Europe as an option.
|
|
if region in {RegionConstants.EUROPE, RegionConstants.NO_MAPPING}:
|
|
return RegionConstants.OTHER
|
|
|
|
# The rest matches what we have already.
|
|
return region
|
|
else:
|
|
# The old lookup table supports most of the values.
|
|
if region <= RegionConstants.TAIWAN:
|
|
return region
|
|
|
|
# Map the two values that still exist back to their old values.
|
|
if region == RegionConstants.USA:
|
|
return RegionConstants.OLD_USA
|
|
if region == RegionConstants.EUROPE:
|
|
return RegionConstants.OLD_EUROPE
|
|
|
|
# The rest get mapped to other.
|
|
return RegionConstants.OLD_OTHER
|
|
|
|
# This performs the equivalent inverse of the above function. Note that
|
|
# depending on the game and selection, this is lossy (as in, Europe could
|
|
# get converted to Other, etc).
|
|
def game_to_db_region(self, use_new_table: bool, region: int) -> int:
|
|
if use_new_table:
|
|
if region == RegionConstants.OTHER:
|
|
return RegionConstants.NO_MAPPING
|
|
|
|
# The new lookup table is correct aside from the above correction.
|
|
return region
|
|
else:
|
|
# The old lookup table supports most of the values.
|
|
if region <= RegionConstants.TAIWAN:
|
|
return region
|
|
|
|
# Map the three values that might be seen to new DB values.
|
|
if region == RegionConstants.OLD_USA:
|
|
return RegionConstants.USA
|
|
if region == RegionConstants.OLD_EUROPE:
|
|
return RegionConstants.EUROPE
|
|
if region == RegionConstants.OLD_OTHER:
|
|
return RegionConstants.NO_MAPPING
|
|
|
|
raise Exception(f"Unexpected value {region} for game region!")
|
|
|
|
@property
|
|
def LUT(cls) -> Dict[int, str]:
|
|
return {
|
|
cls.HOKKAIDO: "北海道 (Hokkaido)",
|
|
cls.AOMORI: "青森県 (Aomori)",
|
|
cls.IWATE: "岩手県 (Iwate)",
|
|
cls.MIYAGI: "宮城県 (Miyagi)",
|
|
cls.AKITA: "秋田県 (Akita)",
|
|
cls.YAMAGATA: "山形県 (Yamagata)",
|
|
cls.FUKUSHIMA: "福島県 (Fukushima)",
|
|
cls.IBARAKI: "茨城県 (Ibaraki)",
|
|
cls.TOCHIGI: "栃木県 (Tochigi)",
|
|
cls.GUNMA: "群馬県 (Gunma)",
|
|
cls.SAITAMA: "埼玉県 (Saitama)",
|
|
cls.CHIBA: "千葉県 (Chiba)",
|
|
cls.TOKYO: "東京都 (Tokyo)",
|
|
cls.KANAGAWA: "神奈川県 (Kanagawa)",
|
|
cls.NIIGATA: "新潟県 (Niigata)",
|
|
cls.TOYAMA: "富山県 (Toyama)",
|
|
cls.ISHIKAWA: "石川県 (Ishikawa)",
|
|
cls.FUKUI: "福井県 (Fukui)",
|
|
cls.YAMANASHI: "山梨県 (Yamanashi)",
|
|
cls.NAGANO: "長野県 (Nagano)",
|
|
cls.GIFU: "岐阜県 (Gifu)",
|
|
cls.SHIZUOKA: "静岡県 (Shizuoka)",
|
|
cls.AICHI: "愛知県 (Aichi)",
|
|
cls.MIE: "三重県 (Mie)",
|
|
cls.SHIGA: "滋賀県 (Shiga)",
|
|
cls.KYOTO: "京都府 (Kyoto)",
|
|
cls.OSAKA: "大阪府 (Osaka)",
|
|
cls.HYOGO: "兵庫県 (Hyogo)",
|
|
cls.NARA: "奈良県 (Nara)",
|
|
cls.WAKAYAMA: "和歌山県 (Wakayama)",
|
|
cls.TOTTORI: "鳥取県 (Tottori)",
|
|
cls.SHIMANE: "島根県 (Shimane)",
|
|
cls.OKAYAMA: "岡山県 (Okayama)",
|
|
cls.HIROSHIMA: "広島県 (Hiroshima)",
|
|
cls.YAMAGUCHI: "山口県 (Yamaguchi)",
|
|
cls.TOKUSHIMA: "徳島県 (Tokushima)",
|
|
cls.KAGAWA: "香川県 (Kagawa)",
|
|
cls.EHIME: "愛媛県 (Ehime)",
|
|
cls.KOUCHI: "高知県 (Kochi)",
|
|
cls.FUKUOKA: "福岡県 (Fukuoka)",
|
|
cls.SAGA: "佐賀県 (Saga)",
|
|
cls.NAGASAKI: "長崎県 (Nagasaki)",
|
|
cls.KUMAMOTO: "熊本県 (Kumamoto)",
|
|
cls.OITA: "大分県 (Oita)",
|
|
cls.MIYAZAKI: "宮崎県 (Miyazaki)",
|
|
cls.KAGOSHIMA: "鹿児島県 (Kagoshima)",
|
|
cls.OKINAWA: "沖縄県 (Okinawa)",
|
|
cls.HONG_KONG: "香港 (Hong Kong)",
|
|
cls.KOREA: "韓国 (Korea)",
|
|
cls.TAIWAN: "台湾 (Taiwan)",
|
|
# The following are different depending on the version of the game,
|
|
# so we choose the new value.
|
|
cls.THAILAND: "タイ (Thailand)",
|
|
cls.INDONESIA: "インドネシア (Indonesia)",
|
|
cls.SINGAPORE: "シンガポール (Singapore)",
|
|
cls.PHILLIPINES: "フィリピン (Phillipines)",
|
|
cls.MACAO: "マカオ (Macao)",
|
|
cls.USA: "アメリカ (USA)",
|
|
cls.EUROPE: "欧州 (Europe)",
|
|
cls.NO_MAPPING: "海外 (Other)",
|
|
}
|
|
|
|
|
|
# This is just so I can use the defined constants inside a LUT
|
|
# without having the LUT itself outside the class.
|
|
RegionConstants = _RegionConstants()
|