| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | import typing | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from BaseClasses import Item, ItemClassification | 
					
						
							|  |  |  | from .Names import ItemName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ItemData(typing.NamedTuple): | 
					
						
							|  |  |  |     code: typing.Optional[int] | 
					
						
							|  |  |  |     progression: bool | 
					
						
							|  |  |  |     trap: bool = False | 
					
						
							|  |  |  |     quantity: int = 1 | 
					
						
							|  |  |  |     event: bool = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SMWItem(Item): | 
					
						
							|  |  |  |     game: str = "Super Mario World" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Separate tables for each type of item. | 
					
						
							|  |  |  | junk_table = { | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     ItemName.one_coin:        ItemData(0xBC0017, False), | 
					
						
							|  |  |  |     ItemName.five_coins:      ItemData(0xBC0018, False), | 
					
						
							|  |  |  |     ItemName.ten_coins:       ItemData(0xBC0019, False), | 
					
						
							|  |  |  |     ItemName.fifty_coins:     ItemData(0xBC001A, False), | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  |     ItemName.one_up_mushroom: ItemData(0xBC0001, False), | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | collectable_table = { | 
					
						
							|  |  |  |     ItemName.yoshi_egg:       ItemData(0xBC0002, True), | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | upgrade_table = { | 
					
						
							|  |  |  |     ItemName.mario_run:           ItemData(0xBC0003, True), | 
					
						
							|  |  |  |     ItemName.mario_carry:         ItemData(0xBC0004, True), | 
					
						
							|  |  |  |     ItemName.mario_swim:          ItemData(0xBC0005, True), | 
					
						
							|  |  |  |     ItemName.mario_spin_jump:     ItemData(0xBC0006, True), | 
					
						
							|  |  |  |     ItemName.mario_climb:         ItemData(0xBC0007, True), | 
					
						
							|  |  |  |     ItemName.yoshi_activate:      ItemData(0xBC0008, True), | 
					
						
							|  |  |  |     ItemName.p_switch:            ItemData(0xBC0009, True), | 
					
						
							|  |  |  |     ItemName.progressive_powerup: ItemData(0xBC000A, True), | 
					
						
							|  |  |  |     ItemName.p_balloon:           ItemData(0xBC000B, True), | 
					
						
							|  |  |  |     ItemName.super_star_active:   ItemData(0xBC000D, True), | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     ItemName.special_world_clear: ItemData(0xBC001B, True), | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | switch_palace_table = { | 
					
						
							|  |  |  |     ItemName.yellow_switch_palace: ItemData(0xBC000E, True), | 
					
						
							|  |  |  |     ItemName.green_switch_palace:  ItemData(0xBC000F, True), | 
					
						
							|  |  |  |     ItemName.red_switch_palace:    ItemData(0xBC0010, True), | 
					
						
							|  |  |  |     ItemName.blue_switch_palace:   ItemData(0xBC0011, True), | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | trap_table = { | 
					
						
							| 
									
										
										
										
											2024-03-12 17:00:13 -04:00
										 |  |  |     ItemName.ice_trap:              ItemData(0xBC0013, False, True), | 
					
						
							|  |  |  |     ItemName.stun_trap:             ItemData(0xBC0014, False, True), | 
					
						
							|  |  |  |     ItemName.literature_trap:       ItemData(0xBC0015, False, True), | 
					
						
							|  |  |  |     ItemName.timer_trap:            ItemData(0xBC0016, False, True), | 
					
						
							|  |  |  |     ItemName.reverse_controls_trap: ItemData(0xBC001C, False, True), | 
					
						
							|  |  |  |     ItemName.thwimp_trap:           ItemData(0xBC001D, False, True), | 
					
						
							| 
									
										
										
										
											2022-09-29 14:16:59 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | event_table = { | 
					
						
							|  |  |  |     ItemName.victory:   ItemData(0xBC0000, True), | 
					
						
							|  |  |  |     ItemName.koopaling: ItemData(0xBC0012, True), | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Complete item table. | 
					
						
							|  |  |  | item_table = { | 
					
						
							|  |  |  |     **junk_table, | 
					
						
							|  |  |  |     **collectable_table, | 
					
						
							|  |  |  |     **upgrade_table, | 
					
						
							|  |  |  |     **switch_palace_table, | 
					
						
							|  |  |  |     **trap_table, | 
					
						
							|  |  |  |     **event_table, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in item_table.items() if data.code} | 
					
						
							| 
									
										
										
										
											2025-04-30 10:24:10 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | trap_value_to_name: typing.Dict[int, str] = { | 
					
						
							|  |  |  |     0xBC0013: ItemName.ice_trap, | 
					
						
							|  |  |  |     0xBC0014: ItemName.stun_trap, | 
					
						
							|  |  |  |     0xBC0015: ItemName.literature_trap, | 
					
						
							|  |  |  |     0xBC0016: ItemName.timer_trap, | 
					
						
							|  |  |  |     0xBC001C: ItemName.reverse_controls_trap, | 
					
						
							|  |  |  |     0xBC001D: ItemName.thwimp_trap, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | trap_name_to_value: typing.Dict[str, int] = { | 
					
						
							|  |  |  |     # Our native Traps | 
					
						
							|  |  |  |     ItemName.ice_trap:              0xBC0013, | 
					
						
							|  |  |  |     ItemName.stun_trap:             0xBC0014, | 
					
						
							|  |  |  |     ItemName.literature_trap:       0xBC0015, | 
					
						
							|  |  |  |     ItemName.timer_trap:            0xBC0016, | 
					
						
							|  |  |  |     ItemName.reverse_controls_trap: 0xBC001C, | 
					
						
							|  |  |  |     ItemName.thwimp_trap:           0xBC001D, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Common other trap names | 
					
						
							|  |  |  |     "Chaos Control Trap": 0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Confuse Trap":       0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Exposition Trap":    0xBC0015,  # Literature Trap | 
					
						
							|  |  |  |     "Cutscene Trap":      0xBC0015,  # Literature Trap | 
					
						
							|  |  |  |     "Freeze Trap":        0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Frozen Trap":        0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Paralyze Trap":      0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Reversal Trap":      0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Fuzzy Trap":         0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Confound Trap":      0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Confusion Trap":     0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Police Trap":        0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Buyon Trap":         0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Gooey Bag":          0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "TNT Barrel Trap":    0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Honey Trap":         0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Screen Flip Trap":   0xBC001C,  # Reverse Trap | 
					
						
							|  |  |  |     "Banana Trap":        0xBC0013,  # Ice Trap | 
					
						
							|  |  |  |     "Bomb":               0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Bonk Trap":          0xBC0014,  # Stun Trap | 
					
						
							|  |  |  |     "Ghost":              0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Fast Trap":          0xBC0016,  # Timer Trap | 
					
						
							|  |  |  |     "Nut Trap":           0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  |     "Army Trap":          0xBC001D,  # Thwimp Trap | 
					
						
							|  |  |  | } |