106 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
from BaseClasses import Item
 | 
						|
import typing
 | 
						|
 | 
						|
 | 
						|
class ItemData(typing.NamedTuple):
 | 
						|
    code: typing.Optional[int]
 | 
						|
    progression: bool
 | 
						|
    skip_balancing: bool = False
 | 
						|
    trap: bool = False
 | 
						|
 | 
						|
 | 
						|
class KDL3Item(Item):
 | 
						|
    game = "Kirby's Dream Land 3"
 | 
						|
 | 
						|
 | 
						|
copy_ability_table = {
 | 
						|
    "Burning": ItemData(0x770001, True),
 | 
						|
    "Stone": ItemData(0x770002, True),
 | 
						|
    "Ice": ItemData(0x770003, True),
 | 
						|
    "Needle": ItemData(0x770004, True),
 | 
						|
    "Clean": ItemData(0x770005, True),
 | 
						|
    "Parasol": ItemData(0x770006, True),
 | 
						|
    "Spark": ItemData(0x770007, True),
 | 
						|
    "Cutter": ItemData(0x770008, True)
 | 
						|
}
 | 
						|
 | 
						|
animal_friend_table = {
 | 
						|
    "Rick": ItemData(0x770010, True),
 | 
						|
    "Kine": ItemData(0x770011, True),
 | 
						|
    "Coo": ItemData(0x770012, True),
 | 
						|
    "Nago": ItemData(0x770013, True),
 | 
						|
    "ChuChu": ItemData(0x770014, True),
 | 
						|
    "Pitch": ItemData(0x770015, True)
 | 
						|
}
 | 
						|
 | 
						|
animal_friend_spawn_table = {
 | 
						|
    "Rick Spawn": ItemData(None, True),
 | 
						|
    "Kine Spawn": ItemData(None, True),
 | 
						|
    "Coo Spawn": ItemData(None, True),
 | 
						|
    "Nago Spawn": ItemData(None, True),
 | 
						|
    "ChuChu Spawn": ItemData(None, True),
 | 
						|
    "Pitch Spawn": ItemData(None, True)
 | 
						|
}
 | 
						|
 | 
						|
copy_ability_access_table = {
 | 
						|
    "No Ability": ItemData(None, False),
 | 
						|
    "Burning Ability": ItemData(None, True),
 | 
						|
    "Stone Ability": ItemData(None, True),
 | 
						|
    "Ice Ability": ItemData(None, True),
 | 
						|
    "Needle Ability": ItemData(None, True),
 | 
						|
    "Clean Ability": ItemData(None, True),
 | 
						|
    "Parasol Ability": ItemData(None, True),
 | 
						|
    "Spark Ability": ItemData(None, True),
 | 
						|
    "Cutter Ability": ItemData(None, True),
 | 
						|
}
 | 
						|
 | 
						|
misc_item_table = {
 | 
						|
    "Heart Star": ItemData(0x770020, True, True),
 | 
						|
    "1-Up": ItemData(0x770021, False),
 | 
						|
    "Maxim Tomato": ItemData(0x770022, False),
 | 
						|
    "Invincible Candy": ItemData(0x770023, False),
 | 
						|
    "Little Star": ItemData(0x770024, False),
 | 
						|
    "Medium Star": ItemData(0x770025, False),
 | 
						|
    "Big Star": ItemData(0x770026, False),
 | 
						|
}
 | 
						|
 | 
						|
trap_item_table = {
 | 
						|
    "Gooey Bag": ItemData(0x770040, False, False, True),
 | 
						|
    "Slowness": ItemData(0x770041, False, False, True),
 | 
						|
    "Eject Ability": ItemData(0x770042, False, False, True)
 | 
						|
}
 | 
						|
 | 
						|
filler_item_weights = {
 | 
						|
    "1-Up": 4,
 | 
						|
    "Maxim Tomato": 2,
 | 
						|
    "Invincible Candy": 2
 | 
						|
}
 | 
						|
 | 
						|
star_item_weights = {
 | 
						|
    "Little Star": 4,
 | 
						|
    "Medium Star": 2,
 | 
						|
    "Big Star": 1
 | 
						|
}
 | 
						|
 | 
						|
total_filler_weights = {
 | 
						|
    **filler_item_weights,
 | 
						|
    **star_item_weights
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
item_table = {
 | 
						|
    **copy_ability_table,
 | 
						|
    **copy_ability_access_table,
 | 
						|
    **animal_friend_table,
 | 
						|
    **animal_friend_spawn_table,
 | 
						|
    **misc_item_table,
 | 
						|
    **trap_item_table
 | 
						|
}
 | 
						|
 | 
						|
item_names = {
 | 
						|
    "Copy Ability": set(copy_ability_table),
 | 
						|
    "Animal Friend": set(animal_friend_table),
 | 
						|
}
 | 
						|
 | 
						|
lookup_name_to_id: typing.Dict[str, int] = {item_name: data.code for item_name, data in item_table.items() if data.code}
 |