73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from BaseClasses import Item
							 | 
						||
| 
								 | 
							
								from typing import NamedTuple, Dict
							 | 
						||
| 
								 | 
							
								from . import names
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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 MM2Item(Item):
							 | 
						||
| 
								 | 
							
								    game = "Mega Man 2"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								robot_master_weapon_table = {
							 | 
						||
| 
								 | 
							
								    names.atomic_fire: ItemData(0x880001, True),
							 | 
						||
| 
								 | 
							
								    names.air_shooter: ItemData(0x880002, True),
							 | 
						||
| 
								 | 
							
								    names.leaf_shield: ItemData(0x880003, True),
							 | 
						||
| 
								 | 
							
								    names.bubble_lead: ItemData(0x880004, True),
							 | 
						||
| 
								 | 
							
								    names.quick_boomerang: ItemData(0x880005, True),
							 | 
						||
| 
								 | 
							
								    names.time_stopper: ItemData(0x880006, True, True),
							 | 
						||
| 
								 | 
							
								    names.metal_blade: ItemData(0x880007, True, True),
							 | 
						||
| 
								 | 
							
								    names.crash_bomber: ItemData(0x880008, True),
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								stage_access_table = {
							 | 
						||
| 
								 | 
							
								    names.heat_man_stage: ItemData(0x880101, True),
							 | 
						||
| 
								 | 
							
								    names.air_man_stage: ItemData(0x880102, True),
							 | 
						||
| 
								 | 
							
								    names.wood_man_stage: ItemData(0x880103, True),
							 | 
						||
| 
								 | 
							
								    names.bubble_man_stage: ItemData(0x880104, True),
							 | 
						||
| 
								 | 
							
								    names.quick_man_stage: ItemData(0x880105, True),
							 | 
						||
| 
								 | 
							
								    names.flash_man_stage: ItemData(0x880106, True),
							 | 
						||
| 
								 | 
							
								    names.metal_man_stage: ItemData(0x880107, True),
							 | 
						||
| 
								 | 
							
								    names.crash_man_stage: ItemData(0x880108, True),
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								item_item_table = {
							 | 
						||
| 
								 | 
							
								    names.item_1: ItemData(0x880011, True, True, True),
							 | 
						||
| 
								 | 
							
								    names.item_2: ItemData(0x880012, True, True, True),
							 | 
						||
| 
								 | 
							
								    names.item_3: ItemData(0x880013, True, True, True)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								filler_item_table = {
							 | 
						||
| 
								 | 
							
								    names.one_up: ItemData(0x880020, False),
							 | 
						||
| 
								 | 
							
								    names.weapon_energy: ItemData(0x880021, False),
							 | 
						||
| 
								 | 
							
								    names.health_energy: ItemData(0x880022, False),
							 | 
						||
| 
								 | 
							
								    names.e_tank: ItemData(0x880023, False, True),
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								filler_item_weights = {
							 | 
						||
| 
								 | 
							
								    names.one_up: 1,
							 | 
						||
| 
								 | 
							
								    names.weapon_energy: 4,
							 | 
						||
| 
								 | 
							
								    names.health_energy: 1,
							 | 
						||
| 
								 | 
							
								    names.e_tank: 2,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								item_table = {
							 | 
						||
| 
								 | 
							
								    **robot_master_weapon_table,
							 | 
						||
| 
								 | 
							
								    **stage_access_table,
							 | 
						||
| 
								 | 
							
								    **item_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()},
							 | 
						||
| 
								 | 
							
								    "Items": {name for name in item_item_table.keys()}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								lookup_item_to_id: Dict[str, int] = {item_name: data.code for item_name, data in item_table.items()}
							 |