mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-22 07:35:37 -07:00
81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
from BaseClasses import Item
|
|
from typing import NamedTuple
|
|
from .names import (needle_cannon, magnet_missile, gemini_laser, hard_knuckle, top_spin, search_snake, spark_shock,
|
|
shadow_blade, rush_coil, rush_marine, rush_jet, needle_man_stage, magnet_man_stage,
|
|
gemini_man_stage, hard_man_stage, top_man_stage, snake_man_stage, spark_man_stage, shadow_man_stage,
|
|
doc_needle_stage, doc_gemini_stage, doc_spark_stage, doc_shadow_stage, e_tank, weapon_energy,
|
|
health_energy, one_up)
|
|
|
|
|
|
class ItemData(NamedTuple):
|
|
code: int
|
|
progression: bool
|
|
useful: bool = False # primarily use this for incredibly useful items of their class, like Metal Blade
|
|
skip_balancing: bool = False
|
|
|
|
|
|
class MM3Item(Item):
|
|
game = "Mega Man 3"
|
|
|
|
|
|
robot_master_weapon_table = {
|
|
needle_cannon: ItemData(0x0001, True),
|
|
magnet_missile: ItemData(0x0002, True, True),
|
|
gemini_laser: ItemData(0x0003, True),
|
|
hard_knuckle: ItemData(0x0004, True),
|
|
top_spin: ItemData(0x0005, True, True),
|
|
search_snake: ItemData(0x0006, True),
|
|
spark_shock: ItemData(0x0007, True),
|
|
shadow_blade: ItemData(0x0008, True, True),
|
|
}
|
|
|
|
stage_access_table = {
|
|
needle_man_stage: ItemData(0x0101, True),
|
|
magnet_man_stage: ItemData(0x0102, True),
|
|
gemini_man_stage: ItemData(0x0103, True),
|
|
hard_man_stage: ItemData(0x0104, True),
|
|
top_man_stage: ItemData(0x0105, True),
|
|
snake_man_stage: ItemData(0x0106, True),
|
|
spark_man_stage: ItemData(0x0107, True),
|
|
shadow_man_stage: ItemData(0x0108, True),
|
|
doc_needle_stage: ItemData(0x0111, True, True),
|
|
doc_gemini_stage: ItemData(0x0113, True, True),
|
|
doc_spark_stage: ItemData(0x0117, True, True),
|
|
doc_shadow_stage: ItemData(0x0118, True, True),
|
|
}
|
|
|
|
rush_item_table = {
|
|
rush_coil: ItemData(0x0011, True, True),
|
|
rush_marine: ItemData(0x0012, True),
|
|
rush_jet: ItemData(0x0013, True, True),
|
|
}
|
|
|
|
filler_item_table = {
|
|
one_up: ItemData(0x0020, False),
|
|
weapon_energy: ItemData(0x0021, False),
|
|
health_energy: ItemData(0x0022, False),
|
|
e_tank: ItemData(0x0023, False, True),
|
|
}
|
|
|
|
filler_item_weights = {
|
|
one_up: 1,
|
|
weapon_energy: 4,
|
|
health_energy: 1,
|
|
e_tank: 2,
|
|
}
|
|
|
|
item_table = {
|
|
**robot_master_weapon_table,
|
|
**stage_access_table,
|
|
**rush_item_table,
|
|
**filler_item_table,
|
|
}
|
|
|
|
item_names = {
|
|
"Weapons": {name for name in robot_master_weapon_table.keys()},
|
|
"Stages": {name for name in stage_access_table.keys()},
|
|
"Rush": {name for name in rush_item_table.keys()}
|
|
}
|
|
|
|
lookup_item_to_id: dict[str, int] = {item_name: data.code for item_name, data in item_table.items() if data.code}
|