|
19 | 19 | class GameConfig: |
20 | 20 | """Configuration for validating a specific game's encounter data.""" |
21 | 21 |
|
22 | | - game_id: str |
| 22 | + version_group_id: int |
23 | 23 | name: str |
24 | | - version_ids: list[int] # PokeAPI version IDs |
25 | | - version_group_id: int # PokeAPI version group ID |
| 24 | + version_ids: list[int] |
26 | 25 | valid_pokemon: set[int] |
27 | 26 | valid_method_ids: set[int] |
28 | 27 | version_exclusives: dict[int, int] = field( |
29 | 28 | default_factory=dict |
30 | 29 | ) # pokemon_id -> version_id |
31 | | - level_bounds: tuple[int, int] = (1, 100) |
32 | 30 |
|
33 | 31 |
|
34 | 32 | # ============================================================================= |
35 | 33 | # LGPE Configuration |
36 | 34 | # ============================================================================= |
37 | 35 |
|
38 | | -LGPE_POKEMON = set(range(1, 152)) | {808, 809} |
39 | | - |
| 36 | +# PokeAPI IDs |
40 | 37 | LGPE_VERSION_PIKACHU = 31 |
41 | 38 | LGPE_VERSION_EEVEE = 32 |
42 | 39 | LGPE_VERSION_GROUP = 19 |
43 | 40 |
|
44 | | -LGPE_METHOD_IDS = {38, 39, 40, 41} |
| 41 | +# Pokemon available in LGPE (Kanto dex + Meltan/Melmetal) |
| 42 | +LGPE_POKEMON = set(range(1, 152)) | {808, 809} |
| 43 | + |
| 44 | +# Encounter method IDs |
| 45 | +LGPE_METHOD_OVERWORLD = 38 |
| 46 | +LGPE_METHOD_OVERWORLD_WATER = 39 |
| 47 | +LGPE_METHOD_OVERWORLD_FLYING = 40 |
| 48 | +LGPE_METHOD_RARE_SPAWN = 41 |
| 49 | + |
| 50 | +LGPE_METHOD_IDS = { |
| 51 | + LGPE_METHOD_OVERWORLD, |
| 52 | + LGPE_METHOD_OVERWORLD_WATER, |
| 53 | + LGPE_METHOD_OVERWORLD_FLYING, |
| 54 | + LGPE_METHOD_RARE_SPAWN, |
| 55 | +} |
45 | 56 |
|
46 | 57 | LGPE_VERSION_EXCLUSIVES = { |
47 | | - # Pikachu exclusives (version_id = 31) |
48 | | - 27: 31, |
49 | | - 28: 31, # Sandshrew, Sandslash |
50 | | - 43: 31, |
51 | | - 44: 31, |
52 | | - 45: 31, # Oddish line |
53 | | - 56: 31, |
54 | | - 57: 31, # Mankey, Primeape |
55 | | - 58: 31, |
56 | | - 59: 31, # Growlithe, Arcanine |
57 | | - 88: 31, |
58 | | - 89: 31, # Grimer, Muk |
59 | | - 123: 31, # Scyther |
60 | | - # Eevee exclusives (version_id = 32) |
61 | | - 23: 32, |
62 | | - 24: 32, # Ekans, Arbok |
63 | | - 37: 32, |
64 | | - 38: 32, # Vulpix, Ninetales |
65 | | - 52: 32, |
66 | | - 53: 32, # Meowth, Persian |
67 | | - 69: 32, |
68 | | - 70: 32, |
69 | | - 71: 32, # Bellsprout line |
70 | | - 109: 32, |
71 | | - 110: 32, # Koffing, Weezing |
72 | | - 127: 32, # Pinsir |
| 58 | + # Pikachu exclusives |
| 59 | + # Sandshrew, Sandslash |
| 60 | + 27: LGPE_VERSION_PIKACHU, |
| 61 | + 28: LGPE_VERSION_PIKACHU, |
| 62 | + # Oddish, Gloom, Vileplume |
| 63 | + 43: LGPE_VERSION_PIKACHU, |
| 64 | + 44: LGPE_VERSION_PIKACHU, |
| 65 | + 45: LGPE_VERSION_PIKACHU, |
| 66 | + # Mankey, Primeape |
| 67 | + 56: LGPE_VERSION_PIKACHU, |
| 68 | + 57: LGPE_VERSION_PIKACHU, |
| 69 | + # Growlithe, Arcanine |
| 70 | + 58: LGPE_VERSION_PIKACHU, |
| 71 | + 59: LGPE_VERSION_PIKACHU, |
| 72 | + # Grimer, Muk |
| 73 | + 88: LGPE_VERSION_PIKACHU, |
| 74 | + 89: LGPE_VERSION_PIKACHU, |
| 75 | + # Scyther |
| 76 | + 123: LGPE_VERSION_PIKACHU, |
| 77 | + |
| 78 | + # Eevee exclusives |
| 79 | + # Ekans, Arbok |
| 80 | + 23: LGPE_VERSION_EEVEE, |
| 81 | + 24: LGPE_VERSION_EEVEE, |
| 82 | + # Vulpix, Ninetales |
| 83 | + 37: LGPE_VERSION_EEVEE, |
| 84 | + 38: LGPE_VERSION_EEVEE, |
| 85 | + # Meowth, Persian |
| 86 | + 52: LGPE_VERSION_EEVEE, |
| 87 | + 53: LGPE_VERSION_EEVEE, |
| 88 | + # Bellsprout, Weepinbell, Victreebel |
| 89 | + 69: LGPE_VERSION_EEVEE, |
| 90 | + 70: LGPE_VERSION_EEVEE, |
| 91 | + 71: LGPE_VERSION_EEVEE, |
| 92 | + # Koffing, Weezing |
| 93 | + 109: LGPE_VERSION_EEVEE, |
| 94 | + 110: LGPE_VERSION_EEVEE, |
| 95 | + # Pinsir |
| 96 | + 127: LGPE_VERSION_EEVEE, |
73 | 97 | } |
74 | 98 |
|
75 | 99 | LGPE_CONFIG = GameConfig( |
76 | | - game_id="lgpe", |
| 100 | + version_group_id=LGPE_VERSION_GROUP, |
77 | 101 | name="Let's Go Pikachu/Eevee", |
78 | 102 | version_ids=[LGPE_VERSION_PIKACHU, LGPE_VERSION_EEVEE], |
79 | | - version_group_id=LGPE_VERSION_GROUP, |
80 | 103 | valid_pokemon=LGPE_POKEMON, |
81 | 104 | valid_method_ids=LGPE_METHOD_IDS, |
82 | 105 | version_exclusives=LGPE_VERSION_EXCLUSIVES, |
83 | | - level_bounds=(1, 100), |
84 | 106 | ) |
85 | 107 |
|
86 | 108 |
|
87 | 109 | # ============================================================================= |
88 | 110 | # Game Registry |
89 | 111 | # ============================================================================= |
90 | 112 |
|
91 | | -GAME_CONFIGS: dict[str, GameConfig] = { |
92 | | - "lgpe": LGPE_CONFIG, |
| 113 | +GAME_CONFIGS: dict[int, GameConfig] = { |
| 114 | + LGPE_VERSION_GROUP: LGPE_CONFIG, |
93 | 115 | } |
94 | | - |
95 | | - |
96 | | -def get_game_config(game_id: str) -> GameConfig: |
97 | | - if game_id not in GAME_CONFIGS: |
98 | | - available = ", ".join(GAME_CONFIGS.keys()) |
99 | | - raise ValueError(f"Unknown game '{game_id}'. Available: {available}") |
100 | | - return GAME_CONFIGS[game_id] |
|
0 commit comments