mirror of
				https://github.com/MarioSpore/Grinch-AP.git
				synced 2025-10-21 20:21:32 -06:00 
			
		
		
		
	
		
			
	
	
		
			292 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			292 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | class EntranceCoord: | ||
|  |     name: str | ||
|  |     room: int | ||
|  |     x: int | ||
|  |     y: int | ||
|  | 
 | ||
|  |     def __init__(self, name: str, room: int, x: int, y: int): | ||
|  |         self.name = name | ||
|  |         self.room = room | ||
|  |         self.x = x | ||
|  |         self.y = y | ||
|  |      | ||
|  |     def __repr__(self): | ||
|  |         return EntranceCoord.coordString(self.room, self.x, self.y) | ||
|  |      | ||
|  |     def coordString(room: int, x: int, y: int): | ||
|  |         return f"{room:#05x}, {x}, {y}" | ||
|  | 
 | ||
|  | storage_key = "found_entrances" | ||
|  | 
 | ||
|  | room = 0xFFF6 | ||
|  | map_id = 0xFFF7 | ||
|  | indoor_flag = 0xDBA5 | ||
|  | spawn_map = 0xDB60 | ||
|  | spawn_room = 0xDB61 | ||
|  | spawn_x = 0xDB62 | ||
|  | spawn_y = 0xDB63 | ||
|  | entrance_room_offset = 0xD800 | ||
|  | transition_state = 0xC124 | ||
|  | transition_target_x = 0xC12C | ||
|  | transition_target_y = 0xC12D | ||
|  | transition_scroll_x = 0xFF96 | ||
|  | transition_scroll_y = 0xFF97 | ||
|  | link_motion_state = 0xC11C | ||
|  | transition_sequence = 0xC16B  | ||
|  | screen_coord = 0xFFFA | ||
|  | 
 | ||
|  | entrance_address_overrides = { | ||
|  |     0x312: 0xDDF2, | ||
|  | } | ||
|  | 
 | ||
|  | map_map = { | ||
|  |     0x00: 0x01, | ||
|  |     0x01: 0x01, | ||
|  |     0x02: 0x01, | ||
|  |     0x03: 0x01, | ||
|  |     0x04: 0x01, | ||
|  |     0x05: 0x01, | ||
|  |     0x06: 0x02, | ||
|  |     0x07: 0x02, | ||
|  |     0x08: 0x02, | ||
|  |     0x09: 0x02, | ||
|  |     0x0A: 0x02, | ||
|  |     0x0B: 0x02, | ||
|  |     0x0C: 0x02, | ||
|  |     0x0D: 0x02, | ||
|  |     0x0E: 0x02, | ||
|  |     0x0F: 0x02, | ||
|  |     0x10: 0x02, | ||
|  |     0x11: 0x02, | ||
|  |     0x12: 0x02, | ||
|  |     0x13: 0x02, | ||
|  |     0x14: 0x02, | ||
|  |     0x15: 0x02, | ||
|  |     0x16: 0x02, | ||
|  |     0x17: 0x02, | ||
|  |     0x18: 0x02, | ||
|  |     0x19: 0x02, | ||
|  |     0x1D: 0x01, | ||
|  |     0x1E: 0x01, | ||
|  |     0x1F: 0x01, | ||
|  |     0xFF: 0x03, | ||
|  | } | ||
|  | 
 | ||
|  | sidescroller_rooms = { | ||
|  |     0x2e9: "seashell_mansion:inside", | ||
|  |     0x08a: "seashell_mansion", | ||
|  |     0x2fd: "mambo:inside", | ||
|  |     0x02a: "mambo", | ||
|  |     0x1eb: "castle_secret_exit:inside", | ||
|  |     0x049: "castle_secret_exit", | ||
|  |     0x1ec: "castle_secret_entrance:inside", | ||
|  |     0x04a: "castle_secret_entrance", | ||
|  |     0x117: "d1:inside", # not a sidescroller, but acts weird  | ||
|  | } | ||
|  | 
 | ||
|  | entrance_coords = [ | ||
|  |     EntranceCoord("writes_house:inside", 0x2a8, 80, 124), | ||
|  |     EntranceCoord("rooster_grave", 0x92, 88, 82), | ||
|  |     EntranceCoord("start_house:inside", 0x2a3, 80, 124), | ||
|  |     EntranceCoord("dream_hut", 0x83, 40, 66), | ||
|  |     EntranceCoord("papahl_house_right:inside", 0x2a6, 80, 124), | ||
|  |     EntranceCoord("papahl_house_right", 0x82, 120, 82), | ||
|  |     EntranceCoord("papahl_house_left:inside", 0x2a5, 80, 124), | ||
|  |     EntranceCoord("papahl_house_left", 0x82, 88, 82), | ||
|  |     EntranceCoord("d2:inside", 0x136, 80, 124), | ||
|  |     EntranceCoord("shop", 0x93, 72, 98), | ||
|  |     EntranceCoord("armos_maze_cave:inside", 0x2fc, 104, 96), | ||
|  |     EntranceCoord("start_house", 0xa2, 88, 82), | ||
|  |     EntranceCoord("animal_house3:inside", 0x2d9, 80, 124), | ||
|  |     EntranceCoord("trendy_shop", 0xb3, 88, 82), | ||
|  |     EntranceCoord("mabe_phone:inside", 0x2cb, 80, 124), | ||
|  |     EntranceCoord("mabe_phone", 0xb2, 88, 82), | ||
|  |     EntranceCoord("ulrira:inside", 0x2a9, 80, 124), | ||
|  |     EntranceCoord("ulrira", 0xb1, 72, 98), | ||
|  |     EntranceCoord("moblin_cave:inside", 0x2f0, 80, 124), | ||
|  |     EntranceCoord("kennel", 0xa1, 88, 66), | ||
|  |     EntranceCoord("madambowwow:inside", 0x2a7, 80, 124), | ||
|  |     EntranceCoord("madambowwow", 0xa1, 56, 66), | ||
|  |     EntranceCoord("library:inside", 0x1fa, 80, 124), | ||
|  |     EntranceCoord("library", 0xb0, 56, 50), | ||
|  |     EntranceCoord("d5:inside", 0x1a1, 80, 124), | ||
|  |     EntranceCoord("d1", 0xd3, 104, 34), | ||
|  |     EntranceCoord("d1:inside", 0x117, 80, 124), | ||
|  |     EntranceCoord("d3:inside", 0x152, 80, 124), | ||
|  |     EntranceCoord("d3", 0xb5, 104, 32), | ||
|  |     EntranceCoord("banana_seller", 0xe3, 72, 48), | ||
|  |     EntranceCoord("armos_temple:inside", 0x28f, 80, 124), | ||
|  |     EntranceCoord("boomerang_cave", 0xf4, 24, 32), | ||
|  |     EntranceCoord("forest_madbatter:inside", 0x1e1, 136, 80), | ||
|  |     EntranceCoord("ghost_house", 0xf6, 88, 66), | ||
|  |     EntranceCoord("prairie_low_phone:inside", 0x29d, 80, 124), | ||
|  |     EntranceCoord("prairie_low_phone", 0xe8, 56, 98), | ||
|  |     EntranceCoord("prairie_madbatter_connector_entrance:inside", 0x1f6, 136, 112), | ||
|  |     EntranceCoord("prairie_madbatter_connector_entrance", 0xf9, 120, 80), | ||
|  |     EntranceCoord("prairie_madbatter_connector_exit", 0xe7, 104, 32), | ||
|  |     EntranceCoord("prairie_madbatter_connector_exit:inside", 0x1e5, 40, 48), | ||
|  |     EntranceCoord("ghost_house:inside", 0x1e3, 80, 124), | ||
|  |     EntranceCoord("prairie_madbatter", 0xe6, 72, 64), | ||
|  |     EntranceCoord("d4:inside", 0x17a, 80, 124), | ||
|  |     EntranceCoord("d5", 0xd9, 88, 64), | ||
|  |     EntranceCoord("prairie_right_cave_bottom:inside", 0x293, 48, 124), | ||
|  |     EntranceCoord("prairie_right_cave_bottom", 0xc8, 40, 80), | ||
|  |     EntranceCoord("prairie_right_cave_high", 0xb8, 88, 48), | ||
|  |     EntranceCoord("prairie_right_cave_high:inside", 0x295, 112, 124), | ||
|  |     EntranceCoord("prairie_right_cave_top", 0xb8, 120, 96), | ||
|  |     EntranceCoord("prairie_right_cave_top:inside", 0x292, 48, 124), | ||
|  |     EntranceCoord("prairie_to_animal_connector:inside", 0x2d0, 40, 64), | ||
|  |     EntranceCoord("prairie_to_animal_connector", 0xaa, 136, 64), | ||
|  |     EntranceCoord("animal_to_prairie_connector", 0xab, 120, 80), | ||
|  |     EntranceCoord("animal_to_prairie_connector:inside", 0x2d1, 120, 64), | ||
|  |     EntranceCoord("animal_phone:inside", 0x2e3, 80, 124), | ||
|  |     EntranceCoord("animal_phone", 0xdb, 120, 82), | ||
|  |     EntranceCoord("animal_house1:inside", 0x2db, 80, 124), | ||
|  |     EntranceCoord("animal_house1", 0xcc, 40, 80), | ||
|  |     EntranceCoord("animal_house2:inside", 0x2dd, 80, 124), | ||
|  |     EntranceCoord("animal_house2", 0xcc, 120, 80), | ||
|  |     EntranceCoord("hookshot_cave:inside", 0x2b3, 80, 124), | ||
|  |     EntranceCoord("animal_house3", 0xcd, 40, 80), | ||
|  |     EntranceCoord("animal_house4:inside", 0x2da, 80, 124), | ||
|  |     EntranceCoord("animal_house4", 0xcd, 88, 80), | ||
|  |     EntranceCoord("banana_seller:inside", 0x2fe, 80, 124), | ||
|  |     EntranceCoord("animal_house5", 0xdd, 88, 66), | ||
|  |     EntranceCoord("animal_cave:inside", 0x2f7, 96, 124), | ||
|  |     EntranceCoord("animal_cave", 0xcd, 136, 32), | ||
|  |     EntranceCoord("d6", 0x8c, 56, 64), | ||
|  |     EntranceCoord("madbatter_taltal:inside", 0x1e2, 136, 80), | ||
|  |     EntranceCoord("desert_cave", 0xcf, 88, 16), | ||
|  |     EntranceCoord("dream_hut:inside", 0x2aa, 80, 124), | ||
|  |     EntranceCoord("armos_maze_cave", 0xae, 72, 112), | ||
|  |     EntranceCoord("shop:inside", 0x2a1, 80, 124), | ||
|  |     EntranceCoord("armos_temple", 0xac, 88, 64), | ||
|  |     EntranceCoord("d6_connector_exit:inside", 0x1f0, 56, 16), | ||
|  |     EntranceCoord("d6_connector_exit", 0x9c, 88, 16), | ||
|  |     EntranceCoord("desert_cave:inside", 0x1f9, 120, 96), | ||
|  |     EntranceCoord("d6_connector_entrance:inside", 0x1f1, 136, 96), | ||
|  |     EntranceCoord("d6_connector_entrance", 0x9d, 56, 48), | ||
|  |     EntranceCoord("armos_fairy:inside", 0x1ac, 80, 124), | ||
|  |     EntranceCoord("armos_fairy", 0x8d, 56, 32), | ||
|  |     EntranceCoord("raft_return_enter:inside", 0x1f7, 136, 96), | ||
|  |     EntranceCoord("raft_return_enter", 0x8f, 8, 32), | ||
|  |     EntranceCoord("raft_return_exit", 0x2f, 24, 112), | ||
|  |     EntranceCoord("raft_return_exit:inside", 0x1e7, 72, 16), | ||
|  |     EntranceCoord("raft_house:inside", 0x2b0, 80, 124), | ||
|  |     EntranceCoord("raft_house", 0x3f, 40, 34), | ||
|  |     EntranceCoord("heartpiece_swim_cave:inside", 0x1f2, 72, 124), | ||
|  |     EntranceCoord("heartpiece_swim_cave", 0x2e, 88, 32), | ||
|  |     EntranceCoord("rooster_grave:inside", 0x1f4, 88, 112), | ||
|  |     EntranceCoord("d4", 0x2b, 72, 34), | ||
|  |     EntranceCoord("castle_phone:inside", 0x2cc, 80, 124), | ||
|  |     EntranceCoord("castle_phone", 0x4b, 72, 34), | ||
|  |     EntranceCoord("castle_main_entrance:inside", 0x2d3, 80, 124), | ||
|  |     EntranceCoord("castle_main_entrance", 0x69, 88, 64), | ||
|  |     EntranceCoord("castle_upper_left", 0x59, 24, 48), | ||
|  |     EntranceCoord("castle_upper_left:inside", 0x2d5, 80, 124), | ||
|  |     EntranceCoord("witch:inside", 0x2a2, 80, 124), | ||
|  |     EntranceCoord("castle_upper_right", 0x59, 88, 64), | ||
|  |     EntranceCoord("prairie_left_cave2:inside", 0x2f4, 64, 124), | ||
|  |     EntranceCoord("castle_jump_cave", 0x78, 40, 112), | ||
|  |     EntranceCoord("prairie_left_cave1:inside", 0x2cd, 80, 124), | ||
|  |     EntranceCoord("seashell_mansion", 0x8a, 88, 64), | ||
|  |     EntranceCoord("prairie_right_phone:inside", 0x29c, 80, 124), | ||
|  |     EntranceCoord("prairie_right_phone", 0x88, 88, 82), | ||
|  |     EntranceCoord("prairie_left_fairy:inside", 0x1f3, 80, 124), | ||
|  |     EntranceCoord("prairie_left_fairy", 0x87, 40, 16), | ||
|  |     EntranceCoord("bird_cave:inside", 0x27e, 96, 124), | ||
|  |     EntranceCoord("prairie_left_cave2", 0x86, 24, 64), | ||
|  |     EntranceCoord("prairie_left_cave1", 0x84, 152, 98), | ||
|  |     EntranceCoord("prairie_left_phone:inside", 0x2b4, 80, 124), | ||
|  |     EntranceCoord("prairie_left_phone", 0xa4, 56, 66), | ||
|  |     EntranceCoord("mamu:inside", 0x2fb, 136, 112), | ||
|  |     EntranceCoord("mamu", 0xd4, 136, 48), | ||
|  |     EntranceCoord("richard_house:inside", 0x2c7, 80, 124), | ||
|  |     EntranceCoord("richard_house", 0xd6, 72, 80), | ||
|  |     EntranceCoord("richard_maze:inside", 0x2c9, 128, 124), | ||
|  |     EntranceCoord("richard_maze", 0xc6, 56, 80), | ||
|  |     EntranceCoord("graveyard_cave_left:inside", 0x2de, 56, 64), | ||
|  |     EntranceCoord("graveyard_cave_left", 0x75, 56, 64), | ||
|  |     EntranceCoord("graveyard_cave_right:inside", 0x2df, 56, 48), | ||
|  |     EntranceCoord("graveyard_cave_right", 0x76, 104, 80), | ||
|  |     EntranceCoord("trendy_shop:inside", 0x2a0, 80, 124), | ||
|  |     EntranceCoord("d0", 0x77, 120, 46), | ||
|  |     EntranceCoord("boomerang_cave:inside", 0x1f5, 72, 124), | ||
|  |     EntranceCoord("witch", 0x65, 72, 50), | ||
|  |     EntranceCoord("toadstool_entrance:inside", 0x2bd, 80, 124), | ||
|  |     EntranceCoord("toadstool_entrance", 0x62, 120, 66), | ||
|  |     EntranceCoord("toadstool_exit", 0x50, 136, 50), | ||
|  |     EntranceCoord("toadstool_exit:inside", 0x2ab, 80, 124), | ||
|  |     EntranceCoord("prairie_madbatter:inside", 0x1e0, 136, 112), | ||
|  |     EntranceCoord("hookshot_cave", 0x42, 56, 66), | ||
|  |     EntranceCoord("castle_upper_right:inside", 0x2d6, 80, 124), | ||
|  |     EntranceCoord("forest_madbatter", 0x52, 104, 48), | ||
|  |     EntranceCoord("writes_phone:inside", 0x29b, 80, 124), | ||
|  |     EntranceCoord("writes_phone", 0x31, 104, 82), | ||
|  |     EntranceCoord("d0:inside", 0x312, 80, 92), | ||
|  |     EntranceCoord("writes_house", 0x30, 120, 50), | ||
|  |     EntranceCoord("writes_cave_left:inside", 0x2ae, 80, 124), | ||
|  |     EntranceCoord("writes_cave_left", 0x20, 136, 50), | ||
|  |     EntranceCoord("writes_cave_right:inside", 0x2af, 80, 124), | ||
|  |     EntranceCoord("writes_cave_right", 0x21, 24, 50), | ||
|  |     EntranceCoord("d6:inside", 0x1d4, 80, 124), | ||
|  |     EntranceCoord("d2", 0x24, 56, 34), | ||
|  |     EntranceCoord("animal_house5:inside", 0x2d7, 80, 124), | ||
|  |     EntranceCoord("moblin_cave", 0x35, 104, 80), | ||
|  |     EntranceCoord("crazy_tracy:inside", 0x2ad, 80, 124), | ||
|  |     EntranceCoord("crazy_tracy", 0x45, 136, 66), | ||
|  |     EntranceCoord("photo_house:inside", 0x2b5, 80, 124), | ||
|  |     EntranceCoord("photo_house", 0x37, 72, 66), | ||
|  |     EntranceCoord("obstacle_cave_entrance:inside", 0x2b6, 80, 124), | ||
|  |     EntranceCoord("obstacle_cave_entrance", 0x17, 56, 50), | ||
|  |     EntranceCoord("left_to_right_taltalentrance:inside", 0x2ee, 120, 48), | ||
|  |     EntranceCoord("left_to_right_taltalentrance", 0x7, 56, 80), | ||
|  |     EntranceCoord("obstacle_cave_outside_chest:inside", 0x2bb, 80, 124), | ||
|  |     EntranceCoord("obstacle_cave_outside_chest", 0x18, 104, 18), | ||
|  |     EntranceCoord("obstacle_cave_exit:inside", 0x2bc, 48, 124), | ||
|  |     EntranceCoord("obstacle_cave_exit", 0x18, 136, 18), | ||
|  |     EntranceCoord("papahl_entrance:inside", 0x289, 64, 124), | ||
|  |     EntranceCoord("papahl_entrance", 0x19, 136, 64), | ||
|  |     EntranceCoord("papahl_exit:inside", 0x28b, 80, 124), | ||
|  |     EntranceCoord("papahl_exit", 0xa, 24, 112), | ||
|  |     EntranceCoord("rooster_house:inside", 0x29f, 80, 124), | ||
|  |     EntranceCoord("rooster_house", 0xa, 72, 34), | ||
|  |     EntranceCoord("d7:inside", 0x20e, 80, 124), | ||
|  |     EntranceCoord("bird_cave", 0xa, 120, 112), | ||
|  |     EntranceCoord("multichest_top:inside", 0x2f2, 80, 124), | ||
|  |     EntranceCoord("multichest_top", 0xd, 24, 112), | ||
|  |     EntranceCoord("multichest_left:inside", 0x2f9, 32, 124), | ||
|  |     EntranceCoord("multichest_left", 0x1d, 24, 48), | ||
|  |     EntranceCoord("multichest_right:inside", 0x2fa, 112, 124), | ||
|  |     EntranceCoord("multichest_right", 0x1d, 120, 80), | ||
|  |     EntranceCoord("right_taltal_connector1:inside", 0x280, 32, 124), | ||
|  |     EntranceCoord("right_taltal_connector1", 0x1e, 56, 16), | ||
|  |     EntranceCoord("right_taltal_connector3:inside", 0x283, 128, 124), | ||
|  |     EntranceCoord("right_taltal_connector3", 0x1e, 120, 16), | ||
|  |     EntranceCoord("right_taltal_connector2:inside", 0x282, 112, 124), | ||
|  |     EntranceCoord("right_taltal_connector2", 0x1f, 40, 16), | ||
|  |     EntranceCoord("right_fairy:inside", 0x1fb, 80, 124), | ||
|  |     EntranceCoord("right_fairy", 0x1f, 56, 80), | ||
|  |     EntranceCoord("right_taltal_connector4:inside", 0x287, 96, 124), | ||
|  |     EntranceCoord("right_taltal_connector4", 0x1f, 88, 64), | ||
|  |     EntranceCoord("right_taltal_connector5:inside", 0x28c, 96, 124), | ||
|  |     EntranceCoord("right_taltal_connector5", 0x1f, 120, 16), | ||
|  |     EntranceCoord("right_taltal_connector6:inside", 0x28e, 112, 124), | ||
|  |     EntranceCoord("right_taltal_connector6", 0xf, 72, 80), | ||
|  |     EntranceCoord("d7", 0x0e, 88, 48), | ||
|  |     EntranceCoord("left_taltal_entrance:inside", 0x2ea, 80, 124), | ||
|  |     EntranceCoord("left_taltal_entrance", 0x15, 136, 64), | ||
|  |     EntranceCoord("castle_jump_cave:inside", 0x1fd, 88, 80), | ||
|  |     EntranceCoord("madbatter_taltal", 0x4, 120, 112), | ||
|  |     EntranceCoord("fire_cave_exit:inside", 0x1ee, 24, 64), | ||
|  |     EntranceCoord("fire_cave_exit", 0x3, 72, 80), | ||
|  |     EntranceCoord("fire_cave_entrance:inside", 0x1fe, 112, 124), | ||
|  |     EntranceCoord("fire_cave_entrance", 0x13, 88, 16), | ||
|  |     EntranceCoord("phone_d8:inside", 0x299, 80, 124), | ||
|  |     EntranceCoord("phone_d8", 0x11, 104, 50), | ||
|  |     EntranceCoord("kennel:inside", 0x2b2, 80, 124), | ||
|  |     EntranceCoord("d8", 0x10, 88, 16), | ||
|  |     EntranceCoord("d8:inside", 0x25d, 80, 124), | ||
|  | ] | ||
|  | 
 | ||
|  | entrance_lookup = {str(coord): coord for coord in entrance_coords} |