Pokemon Emerald: Implement New Game (#1813)

This commit is contained in:
Bryce Wilson
2023-11-12 13:39:34 -08:00
committed by GitHub
parent e670ca513b
commit 43041f7292
35 changed files with 16338 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
"""
Classes and functions related to AP items for Pokemon Emerald
"""
from typing import Dict, FrozenSet, Optional
from BaseClasses import Item, ItemClassification
from .data import BASE_OFFSET, data
class PokemonEmeraldItem(Item):
game: str = "Pokemon Emerald"
tags: FrozenSet[str]
def __init__(self, name: str, classification: ItemClassification, code: Optional[int], player: int) -> None:
super().__init__(name, classification, code, player)
if code is None:
self.tags = frozenset(["Event"])
else:
self.tags = data.items[reverse_offset_item_value(code)].tags
def offset_item_value(item_value: int) -> int:
"""
Returns the AP item id (code) for a given item value
"""
return item_value + BASE_OFFSET
def reverse_offset_item_value(item_id: int) -> int:
"""
Returns the item value for a given AP item id (code)
"""
return item_id - BASE_OFFSET
def create_item_label_to_code_map() -> Dict[str, int]:
"""
Creates a map from item labels to their AP item id (code)
"""
label_to_code_map: Dict[str, int] = {}
for item_value, attributes in data.items.items():
label_to_code_map[attributes.label] = offset_item_value(item_value)
return label_to_code_map
ITEM_GROUPS = {
"Badges": {
"Stone Badge", "Knuckle Badge",
"Dynamo Badge", "Heat Badge",
"Balance Badge", "Feather Badge",
"Mind Badge", "Rain Badge"
},
"HMs": {
"HM01 Cut", "HM02 Fly",
"HM03 Surf", "HM04 Strength",
"HM05 Flash", "HM06 Rock Smash",
"HM07 Waterfall", "HM08 Dive"
},
"HM01": {"HM01 Cut"},
"HM02": {"HM02 Fly"},
"HM03": {"HM03 Surf"},
"HM04": {"HM04 Strength"},
"HM05": {"HM05 Flash"},
"HM06": {"HM06 Rock Smash"},
"HM07": {"HM07 Waterfall"},
"HM08": {"HM08 Dive"}
}
def get_item_classification(item_code: int) -> ItemClassification:
"""
Returns the item classification for a given AP item id (code)
"""
return data.items[reverse_offset_item_value(item_code)].classification