 920cffda2d
			
		
	
	920cffda2d
	
	
	
		
			
			* initial work on procedure patch * more flexibility load default procedure for version 5 patches add args for procedure add default extension for tokens and bsdiff allow specifying additional required extensions for generation * pushing current changes to go fix tloz bug * move tokens into a separate inheritable class * forgot the commit to remove token from ProcedurePatch * further cleaning from bad commit * start on docstrings * further work on docstrings and typing * improve docstrings * fix incorrect docstring * cleanup * clean defaults and docstring * define interface that has only the bare minimum required for `Patch.create_rom_file` * change to dictionary.get * remove unnecessary if statement * update to explicitly check for procedure, restore compatible version and manual override * Update Files.py * remove struct uses * Update Rom.py * convert KDL3 to APPP * change class variables to instance variables * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * Update worlds/Files.py Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> * move required_extensions to tuple * fix missing tuple ellipsis * fix classvar mixup * rename tokens to _tokens. use hasattr * type hint cleanup * Update Files.py * initial base for local items, need to finish * coo not clean * handle local items for real, appp cleanup * actually make bosses send their locations * fix cloudy park 4 rule, zero deathlink message * remove redundant door_shuffle bool when generic ER gets in, this whole function gets rewritten. So just clean it a little now. * properly fix deathlink messages, fix fill error * update docs * add prefill items * fix kine fill error * Update Rom.py * Update Files.py * mypy and softlock fix * Update Gifting.py * mypy phase 1 * fix rare async client bug * Update __init__.py * typing cleanup * fix stone softlock because of the way Kine's Stone works, you can't clear the stone blocks before clearing the burning blocks, so we have to bring Burning from outside * Update Rom.py * Add option groups * Rename to lowercase * finish rename * whoops broke the world * fix animal duplication bug * overhaul filler generation * add Miku flavor * Update gifting.py * fix issues related to max_hs increase * Update test_locations.py * fix boss shuffle not working if level shuffle is disabled * fix bleeding default levels * Update options.py * thought this would print seed * yay bad merges * forgot options too * yeah lets just break generation while at it * this is probably a problem * cap required heart stars * Revert "cap required heart stars" This reverts commit 759efd3e2b14ec2855082de041ac989cb9c5d500. * fix duplication removal placement, deprecated test option * forgot that we need to account for what we place * move location ids * rewrite trap handling * further stage renumber fixes * forgot one more * basic UT support * fix local heart star checks * fix pattern --------- Co-authored-by: beauxq <beauxq@yahoo.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
		
			
				
	
	
		
			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": 16,
 | |
|     "Medium Star": 8,
 | |
|     "Big Star": 4
 | |
| }
 | |
| 
 | |
| 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_item_to_id: typing.Dict[str, int] = {item_name: data.code for item_name, data in item_table.items() if data.code}
 |