From 6db3f0eff1d2d895dac7a4cb18de668bcd6a5d59 Mon Sep 17 00:00:00 2001 From: Nicholas Brochu Date: Thu, 8 Aug 2024 17:45:45 -0400 Subject: [PATCH] WIP --- worlds/smb3/__init__.py | 0 worlds/smb3/data/__init__.py | 0 worlds/smb3/data/offsets.py | 413 +++++++++++++++++++++++ worlds/smb3/data/patch_data.py | 3 + worlds/smb3/design.txt | 49 +++ worlds/smb3/enums.py | 592 +++++++++++++++++++++++++++++++++ 6 files changed, 1057 insertions(+) create mode 100644 worlds/smb3/__init__.py create mode 100644 worlds/smb3/data/__init__.py create mode 100644 worlds/smb3/data/offsets.py create mode 100644 worlds/smb3/data/patch_data.py create mode 100644 worlds/smb3/design.txt create mode 100644 worlds/smb3/enums.py diff --git a/worlds/smb3/__init__.py b/worlds/smb3/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/worlds/smb3/data/__init__.py b/worlds/smb3/data/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/worlds/smb3/data/offsets.py b/worlds/smb3/data/offsets.py new file mode 100644 index 000000000000..f7e27e52421b --- /dev/null +++ b/worlds/smb3/data/offsets.py @@ -0,0 +1,413 @@ +offsets = { + "world_1_music_theme": [0x143CA, 0x3C424], + "world_1_palette": [0x1842D], + "world_1_level_1_object_set": [0x19438], + "world_1_level_1_enemy_item_offset": [0x19462], + "world_1_level_1_level_offset": [0x1948C], + "world_1_level_2_object_set": [0x1943A], + "world_1_level_2_enemy_item_offset": [0x19466], + "world_1_level_2_level_offset": [0x19490], + "world_1_level_3_object_set": [0x1943B], + "world_1_level_3_enemy_item_offset": [0x19468], + "world_1_level_3_level_offset": [0x19492], + "world_1_level_4_object_set": [0x19440], + "world_1_level_4_enemy_item_offset": [0x19472], + "world_1_level_4_level_offset": [0x1949C], + "world_1_level_5_object_set": [0x1944A], + "world_1_level_5_enemy_item_offset": [0x19486], + "world_1_level_5_level_offset": [0x194B0], + "world_1_level_6_object_set": [0x1944C], + "world_1_level_6_enemy_item_offset": [0x1948A], + "world_1_level_6_level_offset": [0x194B4], + "world_1_fortress_object_set": [0x19443], + "world_1_fortress_enemy_item_offset": [0x19478], + "world_1_fortress_level_offset": [0x194A2], + "world_1_castle_object_set": [0x19449], + "world_1_castle_enemy_item_offset": [0x19484], + "world_1_castle_level_offset": [0x194AE], + "world_1_mushroom_house_1_object_set": [0x19441], + "world_1_mushroom_house_1_enemy_item_offset": [0x19474], + "world_1_mushroom_house_1_level_offset": [0x1949E], + "world_1_mushroom_house_2_object_set": [0x19446], + "world_1_mushroom_house_2_enemy_item_offset": [0x1947E], + "world_1_mushroom_house_2_level_offset": [0x194A8], + "world_1_spade_bonus_object_set": [0x19444], + "world_1_spade_bonus_enemy_item_offset": [0x1947A], + "world_1_spade_bonus_level_offset": [0x194A4], + "world_2_music_theme": [0x143CB, 0x3C425], + "world_2_palette": [0x1842E], + "world_2_level_1_object_set": [0x194C6], + "world_2_level_1_enemy_item_offset": [0x19530], + "world_2_level_1_level_offset": [0x1958E], + "world_2_level_2_object_set": [0x194BC], + "world_2_level_2_enemy_item_offset": [0x1951C], + "world_2_level_2_level_offset": [0x1957A], + "world_2_level_3_object_set": [0x194C4], + "world_2_level_3_enemy_item_offset": [0x1952C], + "world_2_level_3_level_offset": [0x1958A], + "world_2_level_4_object_set": [0x194D6], + "world_2_level_4_enemy_item_offset": [0x19550], + "world_2_level_4_level_offset": [0x195AE], + "world_2_level_5_object_set": [0x194E2], + "world_2_level_5_enemy_item_offset": [0x19568], + "world_2_level_5_level_offset": [0x195C6], + "world_2_quicksand_object_set": [0x194DA], + "world_2_quicksand_enemy_item_offset": [0x19558], + "world_2_quicksand_level_offset": [0x195B6], + "world_2_pyramid_object_set": [0x194E4], + "world_2_pyramid_enemy_item_offset": [0x1956C], + "world_2_pyramid_level_offset": [0x195CA], + "world_2_fortress_object_set": [0x194C7], + "world_2_fortress_enemy_item_offset": [0x19532], + "world_2_fortress_level_offset": [0x19590], + "world_2_castle_object_set": [0x194DE], + "world_2_castle_enemy_item_offset": [0x19560], + "world_2_castle_level_offset": [0x195BE], + "world_2_mushroom_house_1_object_set": [0x194CC], + "world_2_mushroom_house_1_enemy_item_offset": [0x1953C], + "world_2_mushroom_house_1_level_offset": [0x1959A], + "world_2_mushroom_house_2_object_set": [0x194BF], + "world_2_mushroom_house_2_enemy_item_offset": [0x19522], + "world_2_mushroom_house_2_level_offset": [0x19580], + "world_2_mushroom_house_3_object_set": [0x194D9], + "world_2_mushroom_house_3_enemy_item_offset": [0x19556], + "world_2_mushroom_house_3_level_offset": [0x195B4], + "world_2_spade_bonus_1_object_set": [0x194BA], + "world_2_spade_bonus_1_enemy_item_offset": [0x19518], + "world_2_spade_bonus_1_level_offset": [0x19576], + "world_2_spade_bonus_2_object_set": [0x194D4], + "world_2_spade_bonus_2_enemy_item_offset": [0x1954C], + "world_2_spade_bonus_2_level_offset": [0x195AA], + "world_3_music_theme": [0x143CC, 0x3C426], + "world_3_palette": [0x1842F], + "world_3_level_1_object_set": [0x195E9], + "world_3_level_1_enemy_item_offset": [0x19662], + "world_3_level_1_level_offset": [0x196CA], + "world_3_level_2_object_set": [0x195DF], + "world_3_level_2_enemy_item_offset": [0x1964E], + "world_3_level_2_level_offset": [0x196B6], + "world_3_level_3_object_set": [0x195DB], + "world_3_level_3_enemy_item_offset": [0x19646], + "world_3_level_3_level_offset": [0x196AE], + "world_3_level_4_object_set": [0x195E1], + "world_3_level_4_enemy_item_offset": [0x19652], + "world_3_level_4_level_offset": [0x196BA], + "world_3_level_5_object_set": [0x195EC], + "world_3_level_5_enemy_item_offset": [0x19668], + "world_3_level_5_level_offset": [0x196D0], + "world_3_level_6_object_set": [0x195F3], + "world_3_level_6_enemy_item_offset": [0x19676], + "world_3_level_6_level_offset": [0x196DE], + "world_3_level_7_object_set": [0x195F5], + "world_3_level_7_enemy_item_offset": [0x1967A], + "world_3_level_7_level_offset": [0x196E2], + "world_3_level_8_object_set": [0x195F7], + "world_3_level_8_enemy_item_offset": [0x1967E], + "world_3_level_8_level_offset": [0x196E6], + "world_3_level_9_object_set": [0x195FE], + "world_3_level_9_enemy_item_offset": [0x1968C], + "world_3_level_9_level_offset": [0x196F4], + "world_3_fortress_1_object_set": [0x195E5], + "world_3_fortress_1_enemy_item_offset": [0x1965A], + "world_3_fortress_1_level_offset": [0x196C2], + "world_3_fortress_2_object_set": [0x195FA], + "world_3_fortress_2_enemy_item_offset": [0x19684], + "world_3_fortress_2_level_offset": [0x196EC], + "world_3_castle_object_set": [0x19609], + "world_3_castle_enemy_item_offset": [0x196A2], + "world_3_castle_level_offset": [0x1970A], + "world_3_mushroom_house_1_object_set": [0x195D8], + "world_3_mushroom_house_1_enemy_item_offset": [0x19640], + "world_3_mushroom_house_1_level_offset": [0x196A8], + "world_3_mushroom_house_2_object_set": [0x195DC], + "world_3_mushroom_house_2_enemy_item_offset": [0x19649], + "world_3_mushroom_house_2_level_offset": [0x196B1], + "world_3_mushroom_house_3_object_set": [0x19602], + "world_3_mushroom_house_3_enemy_item_offset": [0x19695], + "world_3_mushroom_house_3_level_offset": [0x196FD], + "world_3_mushroom_house_4_object_set": [0x195FC], + "world_3_mushroom_house_4_enemy_item_offset": [0x19689], + "world_3_mushroom_house_4_level_offset": [0x196F1], + "world_3_mushroom_house_5_object_set": [0x19608], + "world_3_mushroom_house_5_enemy_item_offset": [0x196A1], + "world_3_mushroom_house_5_level_offset": [0x19709], + "world_3_spade_bonus_1_object_set": [0x195E4], + "world_3_spade_bonus_1_enemy_item_offset": [0x19659], + "world_3_spade_bonus_1_level_offset": [0x196C1], + "world_3_spade_bonus_2_object_set": [0x195F0], + "world_3_spade_bonus_2_enemy_item_offset": [0x19671], + "world_3_spade_bonus_2_level_offset": [0x196D9], + "world_3_spade_bonus_3_object_set": [0x195F9], + "world_3_spade_bonus_3_enemy_item_offset": [0x19683], + "world_3_spade_bonus_3_level_offset": [0x196EB], + "world_3_spade_bonus_4_object_set": [0x195FB], + "world_3_spade_bonus_4_enemy_item_offset": [0x19687], + "world_3_spade_bonus_4_level_offset": [0x196EF], + "world_3_spade_bonus_5_object_set": [0x19603], + "world_3_spade_bonus_5_enemy_item_offset": [0x19697], + "world_3_spade_bonus_5_level_offset": [0x196FF], + "world_4_music_theme": [0x143CD, 0x3C427], + "world_4_palette": [0x18430], + "world_4_level_1_object_set": [0x19734], + "world_4_level_1_enemy_item_offset": [0x19798], + "world_4_level_1_level_offset": [0x197DC], + "world_4_level_2_object_set": [0x19728], + "world_4_level_2_enemy_item_offset": [0x19780], + "world_4_level_2_level_offset": [0x197C4], + "world_4_level_3_object_set": [0x19726], + "world_4_level_3_enemy_item_offset": [0x1977C], + "world_4_level_3_level_offset": [0x197C0], + "world_4_level_4_object_set": [0x19731], + "world_4_level_4_enemy_item_offset": [0x19792], + "world_4_level_4_level_offset": [0x197D6], + "world_4_level_5_object_set": [0x19720], + "world_4_level_5_enemy_item_offset": [0x19770], + "world_4_level_5_level_offset": [0x197B4], + "world_4_level_6_object_set": [0x19717], + "world_4_level_6_enemy_item_offset": [0x1975E], + "world_4_level_6_level_offset": [0x197A2], + "world_4_fortress_1_object_set": [0x19724], + "world_4_fortress_1_enemy_item_offset": [0x19778], + "world_4_fortress_1_level_offset": [0x197BC], + "world_4_fortress_2_object_set": [0x1971D], + "world_4_fortress_2_enemy_item_offset": [0x1976A], + "world_4_fortress_2_level_offset": [0x197AE], + "world_4_castle_object_set": [0x1971A], + "world_4_castle_enemy_item_offset": [0x19764], + "world_4_castle_level_offset": [0x197A8], + "world_4_mushroom_house_1_object_set": [0x19732], + "world_4_mushroom_house_1_enemy_item_offset": [0x19794], + "world_4_mushroom_house_1_level_offset": [0x197D8], + "world_4_mushroom_house_2_object_set": [0x1972D], + "world_4_mushroom_house_2_enemy_item_offset": [0x1978A], + "world_4_mushroom_house_2_level_offset": [0x197CE], + "world_4_mushroom_house_3_object_set": [0x19735], + "world_4_mushroom_house_3_enemy_item_offset": [0x1979A], + "world_4_mushroom_house_3_level_offset": [0x197DE], + "world_4_mushroom_house_4_object_set": [0x19716], + "world_4_mushroom_house_4_enemy_item_offset": [0x1975C], + "world_4_mushroom_house_4_level_offset": [0x197A0], + "world_4_spade_bonus_1_object_set": [0x1972C], + "world_4_spade_bonus_1_enemy_item_offset": [0x19788], + "world_4_spade_bonus_1_level_offset": [0x197CC], + "world_4_spade_bonus_2_object_set": [0x1971F], + "world_4_spade_bonus_2_enemy_item_offset": [0x1976E], + "world_4_spade_bonus_2_level_offset": [0x197B2], + "world_5_music_theme": [0x143CE, 0x3C428], + "world_5_palette": [0x18431], + "world_5_level_1_object_set": [0x197E9], + "world_5_level_1_enemy_item_offset": [0x19842], + "world_5_level_1_level_offset": [0x19896], + "world_5_level_2_object_set": [0x197E5], + "world_5_level_2_enemy_item_offset": [0x1983A], + "world_5_level_2_level_offset": [0x1988E], + "world_5_level_3_object_set": [0x197E7], + "world_5_level_3_enemy_item_offset": [0x1983E], + "world_5_level_3_level_offset": [0x19892], + "world_5_level_4_object_set": [0x197FE], + "world_5_level_4_enemy_item_offset": [0x1986C], + "world_5_level_4_level_offset": [0x198C0], + "world_5_level_5_object_set": [0x197FB], + "world_5_level_5_enemy_item_offset": [0x19866], + "world_5_level_5_level_offset": [0x198BA], + "world_5_level_6_object_set": [0x1980D], + "world_5_level_6_enemy_item_offset": [0x1988A], + "world_5_level_6_level_offset": [0x198DE], + "world_5_level_7_object_set": [0x19805], + "world_5_level_7_enemy_item_offset": [0x1987A], + "world_5_level_7_level_offset": [0x198CE], + "world_5_level_8_object_set": [0x1980A], + "world_5_level_8_enemy_item_offset": [0x19884], + "world_5_level_8_level_offset": [0x198D8], + "world_5_level_9_object_set": [0x19809], + "world_5_level_9_enemy_item_offset": [0x19882], + "world_5_level_9_level_offset": [0x198D6], + "world_5_tower_object_set": [0x197EE], + "world_5_tower_enemy_item_offset": [0x1984C], + "world_5_tower_level_offset": [0x198A0], + "world_5_fortress_1_object_set": [0x197F0], + "world_5_fortress_1_enemy_item_offset": [0x19850], + "world_5_fortress_1_level_offset": [0x198A4], + "world_5_fortress_2_object_set": [0x19803], + "world_5_fortress_2_enemy_item_offset": [0x19876], + "world_5_fortress_2_level_offset": [0x198CA], + "world_5_castle_object_set": [0x19807], + "world_5_castle_enemy_item_offset": [0x1987E], + "world_5_castle_level_offset": [0x198D2], + "world_5_mushroom_house_1_object_set": [0x197E6], + "world_5_mushroom_house_1_enemy_item_offset": [0x1983C], + "world_5_mushroom_house_1_level_offset": [0x19890], + "world_5_mushroom_house_2_object_set": [0x197F8], + "world_5_mushroom_house_2_enemy_item_offset": [0x19860], + "world_5_mushroom_house_2_level_offset": [0x198B4], + "world_5_mushroom_house_3_object_set": [0x1980C], + "world_5_mushroom_house_3_enemy_item_offset": [0x19888], + "world_5_mushroom_house_3_level_offset": [0x198DC], + "world_5_spade_bonus_1_object_set": [0x197F6], + "world_5_spade_bonus_1_enemy_item_offset": [0x1985C], + "world_5_spade_bonus_1_level_offset": [0x198B0], + "world_5_spade_bonus_2_object_set": [0x19800], + "world_5_spade_bonus_2_enemy_item_offset": [0x19870], + "world_5_spade_bonus_2_level_offset": [0x198C4], + "world_5_spade_bonus_3_object_set": [0x19801], + "world_5_spade_bonus_3_enemy_item_offset": [0x19872], + "world_5_spade_bonus_3_level_offset": [0x198C6], + "world_6_music_theme": [0x143CF, 0x3C429], + "world_6_palette": [0x18432], + "world_6_level_1_object_set": [0x198EB], + "world_6_level_1_enemy_item_offset": [0x19964], + "world_6_level_1_level_offset": [0x199D6], + "world_6_level_2_object_set": [0x198E6], + "world_6_level_2_enemy_item_offset": [0x1995A], + "world_6_level_2_level_offset": [0x199CC], + "world_6_level_3_object_set": [0x198F3], + "world_6_level_3_enemy_item_offset": [0x19974], + "world_6_level_3_level_offset": [0x199E6], + "world_6_level_4_object_set": [0x19903], + "world_6_level_4_enemy_item_offset": [0x19994], + "world_6_level_4_level_offset": [0x19A06], + "world_6_level_5_object_set": [0x1990B], + "world_6_level_5_enemy_item_offset": [0x199A4], + "world_6_level_5_level_offset": [0x19A16], + "world_6_level_6_object_set": [0x198FD], + "world_6_level_6_enemy_item_offset": [0x19988], + "world_6_level_6_level_offset": [0x199FA], + "world_6_level_7_object_set": [0x19909], + "world_6_level_7_enemy_item_offset": [0x199A0], + "world_6_level_7_level_offset": [0x19A12], + "world_6_level_8_object_set": [0x19901], + "world_6_level_8_enemy_item_offset": [0x19990], + "world_6_level_8_level_offset": [0x19A02], + "world_6_level_9_object_set": [0x19910], + "world_6_level_9_enemy_item_offset": [0x199AE], + "world_6_level_9_level_offset": [0x19A20], + "world_6_level_10_object_set": [0x1991C], + "world_6_level_10_enemy_item_offset": [0x199C6], + "world_6_level_10_level_offset": [0x19A38], + "world_6_fortress_1_object_set": [0x198ED], + "world_6_fortress_1_enemy_item_offset": [0x19968], + "world_6_fortress_1_level_offset": [0x199DA], + "world_6_fortress_2_object_set": [0x198FF], + "world_6_fortress_2_enemy_item_offset": [0x1998C], + "world_6_fortress_2_level_offset": [0x199FE], + "world_6_fortress_3_object_set": [0x19914], + "world_6_fortress_3_enemy_item_offset": [0x199B6], + "world_6_fortress_3_level_offset": [0x19A28], + "world_6_castle_object_set": [0x19919], + "world_6_castle_enemy_item_offset": [0x199C0], + "world_6_castle_level_offset": [0x19A32], + "world_6_mushroom_house_1_object_set": [0x198E4], + "world_6_mushroom_house_1_enemy_item_offset": [0x19956], + "world_6_mushroom_house_1_level_offset": [0x199C8], + "world_6_mushroom_house_2_object_set": [0x19905], + "world_6_mushroom_house_2_enemy_item_offset": [0x19998], + "world_6_mushroom_house_2_level_offset": [0x19A0A], + "world_6_spade_bonus_1_object_set": [0x198EC], + "world_6_spade_bonus_1_enemy_item_offset": [0x19966], + "world_6_spade_bonus_1_level_offset": [0x199D8], + "world_6_spade_bonus_2_object_set": [0x198F4], + "world_6_spade_bonus_2_enemy_item_offset": [0x19976], + "world_6_spade_bonus_2_level_offset": [0x199E8], + "world_6_spade_bonus_3_object_set": [0x1990E], + "world_6_spade_bonus_3_enemy_item_offset": [0x199AA], + "world_6_spade_bonus_3_level_offset": [0x19A1C], + "world_7_music_theme": [0x143D0, 0x3C42A], + "world_7_palette": [0x18433], + "world_7_level_1_object_set": [0x19A44], + "world_7_level_1_enemy_item_offset": [0x19AA6], + "world_7_level_1_level_offset": [0x19B02], + "world_7_level_2_object_set": [0x19A51], + "world_7_level_2_enemy_item_offset": [0x19AC0], + "world_7_level_2_level_offset": [0x19B1C], + "world_7_level_3_object_set": [0x19A54], + "world_7_level_3_enemy_item_offset": [0x19AC6], + "world_7_level_3_level_offset": [0x19B22], + "world_7_level_4_object_set": [0x19A4E], + "world_7_level_4_enemy_item_offset": [0x19ABA], + "world_7_level_4_level_offset": [0x19B16], + "world_7_level_5_object_set": [0x19A61], + "world_7_level_5_enemy_item_offset": [0x19AE0], + "world_7_level_5_level_offset": [0x19B3C], + "world_7_level_6_object_set": [0x19A56], + "world_7_level_6_enemy_item_offset": [0x19ACA], + "world_7_level_6_level_offset": [0x19B26], + "world_7_level_7_object_set": [0x19A57], + "world_7_level_7_enemy_item_offset": [0x19ACC], + "world_7_level_7_level_offset": [0x19B28], + "world_7_level_8_object_set": [0x19A5F], + "world_7_level_8_enemy_item_offset": [0x19ADC], + "world_7_level_8_level_offset": [0x19B38], + "world_7_level_9_object_set": [0x19A64], + "world_7_level_9_enemy_item_offset": [0x19AE6], + "world_7_level_9_level_offset": [0x19B42], + "world_7_piranha_1_object_set": [0x19A49], + "world_7_piranha_1_enemy_item_offset": [0x19AB0], + "world_7_piranha_1_level_offset": [0x19B0C], + "world_7_piranha_2_object_set": [0x19A6B], + "world_7_piranha_2_enemy_item_offset": [0x19AF4], + "world_7_piranha_2_level_offset": [0x19B50], + "world_7_fortress_1_object_set": [0x19A43], + "world_7_fortress_1_enemy_item_offset": [0x19AA4], + "world_7_fortress_1_level_offset": [0x19B00], + "world_7_fortress_2_object_set": [0x19A66], + "world_7_fortress_2_enemy_item_offset": [0x19AEA], + "world_7_fortress_2_level_offset": [0x19B46], + "world_7_castle_object_set": [0x19A69], + "world_7_castle_enemy_item_offset": [0x19AF0], + "world_7_castle_level_offset": [0x19B4C], + "world_7_mushroom_house_1_object_set": [0x19A47], + "world_7_mushroom_house_1_enemy_item_offset": [0x19AAC], + "world_7_mushroom_house_1_level_offset": [0x19B08], + "world_7_mushroom_house_2_object_set": [0x19A68], + "world_7_mushroom_house_2_enemy_item_offset": [0x19AEE], + "world_7_mushroom_house_2_level_offset": [0x19B4A], + "world_7_mushroom_house_3_object_set": [0x19A60], + "world_7_mushroom_house_3_enemy_item_offset": [0x19ADE], + "world_7_mushroom_house_3_level_offset": [0x19B3A], + "world_7_spade_bonus_1_object_set": [0x19A4F], + "world_7_spade_bonus_1_enemy_item_offset": [0x19ABC], + "world_7_spade_bonus_1_level_offset": [0x19B18], + "world_7_spade_bonus_2_object_set": [0x19A55], + "world_7_spade_bonus_2_enemy_item_offset": [0x19AC8], + "world_7_spade_bonus_2_level_offset": [0x19B24], + "world_7_spade_bonus_3_object_set": [0x19A5D], + "world_7_spade_bonus_3_enemy_item_offset": [0x19AD8], + "world_7_spade_bonus_3_level_offset": [0x19B34], + "world_8_music_theme": [0x143D1, 0x3C42B], + "world_8_palette": [0x18434], + "world_8_ship_1_object_set": [0x19B5B], + "world_8_ship_1_enemy_item_offset": [0x19BB2], + "world_8_ship_1_level_offset": [0x19C04], + "world_8_ship_2_object_set": [0x19B5D], + "world_8_ship_2_enemy_item_offset": [0x19BB6], + "world_8_ship_2_level_offset": [0x19C08], + "world_8_ship_3_object_set": [0x19B60], + "world_8_ship_3_enemy_item_offset": [0x19BBC], + "world_8_ship_3_level_offset": [0x19C0E], + "world_8_ship_4_object_set": [0x19B7A], + "world_8_ship_4_enemy_item_offset": [0x19BF0], + "world_8_ship_4_level_offset": [0x19C42], + "world_8_hand_1_object_set": [0X19B66], + "world_8_hand_1_enemy_item_offset": [0x19BC8], + "world_8_hand_1_level_offset": [0x19C1A], + "world_8_hand_2_object_set": [0x19B65], + "world_8_hand_2_enemy_item_offset": [0x19BC6], + "world_8_hand_2_level_offset": [0x19C18], + "world_8_hand_3_object_set": [0x19B64], + "world_8_hand_3_enemy_item_offset": [0x19BC4], + "world_8_hand_3_level_offset": [0x19C16], + "world_8_level_1_object_set": [0X19B6F], + "world_8_level_1_enemy_item_offset": [0x19BDA], + "world_8_level_1_level_offset": [0x19C2C], + "world_8_level_2_object_set": [0x19B73], + "world_8_level_2_enemy_item_offset": [0x19BE2], + "world_8_level_2_level_offset": [0x19C34], + "world_8_fortress_object_set": [0x19B70], + "world_8_fortress_enemy_item_offset": [0x19BDC], + "world_8_fortress_level_offset": [0x19C2E], + "world_8_castle_object_set": [0X19B7E], + "world_8_castle_enemy_item_offset": [0x19BF8], + "world_8_castle_level_offset": [0x19C4A], + "world_9_music_theme": [0x143D2, 0x3C42C], + "world_9_palette": [0x18435], +} diff --git a/worlds/smb3/data/patch_data.py b/worlds/smb3/data/patch_data.py new file mode 100644 index 000000000000..078bbbea9ddc --- /dev/null +++ b/worlds/smb3/data/patch_data.py @@ -0,0 +1,3 @@ +patches = { + +} diff --git a/worlds/smb3/design.txt b/worlds/smb3/design.txt new file mode 100644 index 000000000000..e2a6bcc4d79d --- /dev/null +++ b/worlds/smb3/design.txt @@ -0,0 +1,49 @@ +Start with 2 levels available in each world. Unlock other levels with items +Each world's fortresses are unlocked with items. Locks for each world are moved in front of the castle +Permanent cloud inventory item is given to skip over levels (so we keep the ability to reenter levels) OR ASM to allow moving over levels +Permanent warp whistle inventory item that takes you to a modified warp zone that allows you to warp to any world at any time +All levels are stripped of their powerups (except stars?). Instead, powerups are unlocked as permanent inventory items for each world +Access to all mushroom houses and spade bonuses for each world is given with a respective item +Mushroom houses have 1 check each so unlock is progression, spade bonuses are filler +The ability to swim requires the frog suit +?? The ability to run requires the first level of Progressive P-speed +The ability to fly requires the second level of Progressive P-speed and a flight suit +Some abilities could be randomized: P-switches, Progressive P-speed, Carry +All relevant levels will have coin checks, this is where having the powerups will be great for the randomizer. + Some coins will be in the air and require flight + Some coins will require hitting a p-switch + Some coins will be replaced with ice coins to give purpose to the fire flower + Some coins will be in or over water and require the frog suit +Memory Game is disabled +Mushroom houses, hammer bros, chest levels, giant mystery blocks, after world letters and warp whistle locations do not grant an item (but can be checks) +Hitting one-up blocks are checks? +White Mushroom Houses are disabled + +Level Shuffle +Fortress Shuffle +World 8 Ship Shuffle +Castle Shuffle +Remove Autoscrollers (Levels, Ships, Both) + +Randomize Enemies (Moderate Grouped, Moderate Random, Chaotic Grouped, Chaotic Random, Singularity) +Enemy Speeds (Normal, Slow, Fast, Very Fast) +Boss HP (1, 2, 3, 4, 5, Random) +Bosses with Earthquakes (1, 2, 3, 4, 5, 6, 7, Random) +Mini-Boss HP (1, 2, 3, 4, 5, Random) + +Starting Lives (with option for infinite lives) +Timers (Easy, Normal, Hard) +Death Counter (infinite lives only) +Damage Difficulty (Permanent Powerup, Vanilla, One-Hit Small Mario, One-Hit KO) +Poison One-Ups + +Mario Color +Randomize World Palettes (Shuffle, Random, Singularity) +Randomize Level Palettes (Shuffle, Random, Singularity) +?? Randomize Enemy Palettes + +Randomize World Music (Shuffle, Random, Random Extended, Singularity, Singularity Extended) +Randomize Level Music (Shuffle, Random, Random Extended, Singularity, Singularity Extended) +Randomize Sound Effects (Shuffle, Shuffle Extended, Random, Singularity) + +Death Link \ No newline at end of file diff --git a/worlds/smb3/enums.py b/worlds/smb3/enums.py new file mode 100644 index 000000000000..79274ef67c13 --- /dev/null +++ b/worlds/smb3/enums.py @@ -0,0 +1,592 @@ +import enum + + +class SMB3Levels(enum.Enum): + GRASS_LAND_1 = "Grass Land - Level 1" + GRASS_LAND_2 = "Grass Land - Level 2" + GRASS_LAND_3 = "Grass Land - Level 3" + GRASS_LAND_4 = "Grass Land - Level 4" + GRASS_LAND_5 = "Grass Land - Level 5" + GRASS_LAND_6 = "Grass Land - Level 6" + GRASS_LAND_FORTRESS = "Grass Land - Fortress" + GRASS_LAND_CASTLE = "Grass Land - Castle" + GRASS_LAND_MUSHROOM_HOUSE_1 = "Grass Land - Mushroom House 1" + GRASS_LAND_MUSHROOM_HOUSE_2 = "Grass Land - Mushroom House 2" + GRASS_LAND_SPADE_BONUS = "Grass Land - Spade Bonus" + DESERT_LAND_1 = "Desert Land - Level 1" + DESERT_LAND_2 = "Desert Land - Level 2" + DESERT_LAND_3 = "Desert Land - Level 3" + DESERT_LAND_4 = "Desert Land - Level 4" + DESERT_LAND_5 = "Desert Land - Level 5" + DESERT_LAND_QUICKSAND = "Desert Land - Quicksand" + DESERT_LAND_PYRAMID = "Desert Land - Pyramid" + DESERT_LAND_FORTRESS = "Desert Land - Fortress" + DESERT_LAND_CASTLE = "Desert Land - Castle" + DESERT_LAND_MUSHROOM_HOUSE_1 = "Desert Land - Mushroom House 1" + DESERT_LAND_MUSHROOM_HOUSE_2 = "Desert Land - Mushroom House 2" + DESERT_LAND_MUSHROOM_HOUSE_3 = "Desert Land - Mushroom House 3" + DESERT_LAND_SPADE_BONUS_1 = "Desert Land - Spade Bonus 1" + DESERT_LAND_SPADE_BONUS_2 = "Desert Land - Spade Bonus 2" + WATER_LAND_1 = "Water Land - Level 1" + WATER_LAND_2 = "Water Land - Level 2" + WATER_LAND_3 = "Water Land - Level 3" + WATER_LAND_4 = "Water Land - Level 4" + WATER_LAND_5 = "Water Land - Level 5" + WATER_LAND_6 = "Water Land - Level 6" + WATER_LAND_7 = "Water Land - Level 7" + WATER_LAND_8 = "Water Land - Level 8" + WATER_LAND_9 = "Water Land - Level 9" + WATER_LAND_FORTRESS_1 = "Water Land - Fortress 1" + WATER_LAND_FORTRESS_2 = "Water Land - Fortress 2" + WATER_LAND_CASTLE = "Water Land - Castle" + WATER_LAND_MUSHROOM_HOUSE_1 = "Water Land - Mushroom House 1" + WATER_LAND_MUSHROOM_HOUSE_2 = "Water Land - Mushroom House 2" + WATER_LAND_MUSHROOM_HOUSE_3 = "Water Land - Mushroom House 3" + WATER_LAND_MUSHROOM_HOUSE_4 = "Water Land - Mushroom House 4" + WATER_LAND_MUSHROOM_HOUSE_5 = "Water Land - Mushroom House 5" + WATER_LAND_SPADE_BONUS_1 = "Water Land - Spade Bonus 1" + WATER_LAND_SPADE_BONUS_2 = "Water Land - Spade Bonus 2" + WATER_LAND_SPADE_BONUS_3 = "Water Land - Spade Bonus 3" + WATER_LAND_SPADE_BONUS_4 = "Water Land - Spade Bonus 4" + WATER_LAND_SPADE_BONUS_5 = "Water Land - Spade Bonus 5" + GIANT_LAND_1 = "Giant Land - Level 1" + GIANT_LAND_2 = "Giant Land - Level 2" + GIANT_LAND_3 = "Giant Land - Level 3" + GIANT_LAND_4 = "Giant Land - Level 4" + GIANT_LAND_5 = "Giant Land - Level 5" + GIANT_LAND_6 = "Giant Land - Level 6" + GIANT_LAND_FORTRESS_1 = "Giant Land - Fortress 1" + GIANT_LAND_FORTRESS_2 = "Giant Land - Fortress 2" + GIANT_LAND_CASTLE = "Giant Land - Castle" + GIANT_LAND_MUSHROOM_HOUSE_1 = "Giant Land - Mushroom House 1" + GIANT_LAND_MUSHROOM_HOUSE_2 = "Giant Land - Mushroom House 2" + GIANT_LAND_MUSHROOM_HOUSE_3 = "Giant Land - Mushroom House 3" + GIANT_LAND_MUSHROOM_HOUSE_4 = "Giant Land - Mushroom House 4" + GIANT_LAND_SPADE_BONUS_1 = "Giant Land - Spade Bonus 1" + GIANT_LAND_SPADE_BONUS_2 = "Giant Land - Spade Bonus 2" + SKY_LAND_1 = "Sky Land - Level 1" + SKY_LAND_2 = "Sky Land - Level 2" + SKY_LAND_3 = "Sky Land - Level 3" + SKY_LAND_4 = "Sky Land - Level 4" + SKY_LAND_5 = "Sky Land - Level 5" + SKY_LAND_6 = "Sky Land - Level 6" + SKY_LAND_7 = "Sky Land - Level 7" + SKY_LAND_8 = "Sky Land - Level 8" + SKY_LAND_9 = "Sky Land - Level 9" + SKY_LAND_TOWER = "Sky Land - Tower" + SKY_LAND_FORTRESS_1 = "Sky Land - Fortress 1" + SKY_LAND_FORTRESS_2 = "Sky Land - Fortress 2" + SKY_LAND_CASTLE = "Sky Land - Castle" + SKY_LAND_MUSHROOM_HOUSE_1 = "Sky Land - Mushroom House 1" + SKY_LAND_MUSHROOM_HOUSE_2 = "Sky Land - Mushroom House 2" + SKY_LAND_MUSHROOM_HOUSE_3 = "Sky Land - Mushroom House 3" + SKY_LAND_SPADE_BONUS_1 = "Sky Land - Spade Bonus 1" + SKY_LAND_SPADE_BONUS_2 = "Sky Land - Spade Bonus 2" + SKY_LAND_SPADE_BONUS_3 = "Sky Land - Spade Bonus 3" + ICE_LAND_1 = "Ice Land - Level 1" + ICE_LAND_2 = "Ice Land - Level 2" + ICE_LAND_3 = "Ice Land - Level 3" + ICE_LAND_4 = "Ice Land - Level 4" + ICE_LAND_5 = "Ice Land - Level 5" + ICE_LAND_6 = "Ice Land - Level 6" + ICE_LAND_7 = "Ice Land - Level 7" + ICE_LAND_8 = "Ice Land - Level 8" + ICE_LAND_9 = "Ice Land - Level 9" + ICE_LAND_10 = "Ice Land - Level 10" + ICE_LAND_FORTRESS_1 = "Ice Land - Fortress 1" + ICE_LAND_FORTRESS_2 = "Ice Land - Fortress 2" + ICE_LAND_FORTRESS_3 = "Ice Land - Fortress 3" + ICE_LAND_CASTLE = "Ice Land - Castle" + ICE_LAND_MUSHROOM_HOUSE_1 = "Ice Land - Mushroom House 1" + ICE_LAND_MUSHROOM_HOUSE_2 = "Ice Land - Mushroom House 2" + ICE_LAND_SPADE_BONUS_1 = "Ice Land - Spade Bonus 1" + ICE_LAND_SPADE_BONUS_2 = "Ice Land - Spade Bonus 2" + ICE_LAND_SPADE_BONUS_3 = "Ice Land - Spade Bonus 3" + PIPE_LAND_1 = "Pipe Land - Level 1" + PIPE_LAND_2 = "Pipe Land - Level 2" + PIPE_LAND_3 = "Pipe Land - Level 3" + PIPE_LAND_4 = "Pipe Land - Level 4" + PIPE_LAND_5 = "Pipe Land - Level 5" + PIPE_LAND_6 = "Pipe Land - Level 6" + PIPE_LAND_7 = "Pipe Land - Level 7" + PIPE_LAND_8 = "Pipe Land - Level 8" + PIPE_LAND_9 = "Pipe Land - Level 9" + PIPE_LAND_PIRANHA_1 = "Pipe Land - Piranha 1" + PIPE_LAND_PIRANHA_2 = "Pipe Land - Piranha 2" + PIPE_LAND_FORTRESS_1 = "Pipe Land - Fortress 1" + PIPE_LAND_FORTRESS_2 = "Pipe Land - Fortress 2" + PIPE_LAND_CASTLE = "Pipe Land - Castle" + PIPE_LAND_MUSHROOM_HOUSE_1 = "Pipe Land - Mushroom House 1" + PIPE_LAND_MUSHROOM_HOUSE_2 = "Pipe Land - Mushroom House 2" + PIPE_LAND_MUSHROOM_HOUSE_3 = "Pipe Land - Mushroom House 3" + PIPE_LAND_SPADE_BONUS_1 = "Pipe Land - Spade Bonus 1" + PIPE_LAND_SPADE_BONUS_2 = "Pipe Land - Spade Bonus 2" + PIPE_LAND_SPADE_BONUS_3 = "Pipe Land - Spade Bonus 3" + DARK_LAND_SHIP_1 = "Dark Land - Ship 1" + DARK_LAND_SHIP_2 = "Dark Land - Ship 2" + DARK_LAND_SHIP_3 = "Dark Land - Ship 3" + DARK_LAND_SHIP_4 = "Dark Land - Ship 4" + DARK_LAND_HAND_1 = "Dark Land - Hand Level 1" + DARK_LAND_HAND_2 = "Dark Land - Hand Level 2" + DARK_LAND_HAND_3 = "Dark Land - Hand Level 3" + DARK_LAND_1 = "Dark Land - Level 1" + DARK_LAND_2 = "Dark Land - Level 2" + DARK_LAND_FORTRESS = "Dark Land - Fortress" + DARK_LAND_CASTLE = "Dark Land - Bowser's Castle" + + +class SMB3LevelEnemyItemOffsetValues(enum.Enum): + GRASS_LAND_1 = [0x27, 0xC5] + GRASS_LAND_2 = [0xAA, 0xC6] + GRASS_LAND_3 = [0xEE, 0xC2] + GRASS_LAND_4 = [0x33, 0xCC] + GRASS_LAND_5 = [0x2B, 0xC9] + GRASS_LAND_6 = [0x0D, 0xCC] + GRASS_LAND_FORTRESS = [0x2B, 0xD3] + GRASS_LAND_CASTLE = [0xAF, 0xD2] + GRASS_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x07] + GRASS_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x07] + GRASS_LAND_SPADE_BONUS = [0x01, 0x00] + DESERT_LAND_1 = [0x89, 0xD1] + DESERT_LAND_2 = [0x95, 0xC8] + DESERT_LAND_3 = [0xF0, 0xD1] + DESERT_LAND_4 = [0x5F, 0xD2] + DESERT_LAND_5 = [0xC1, 0xD1] + DESERT_LAND_QUICKSAND = [0x43, 0xC8] + DESERT_LAND_PYRAMID = [0xF7, 0xD0] + DESERT_LAND_FORTRESS = [0x22, 0xD2] + DESERT_LAND_CASTLE = [0xAF, 0xD2] + DESERT_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x07] + DESERT_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x07] + DESERT_LAND_MUSHROOM_HOUSE_3 = [0x00, 0x03] + DESERT_LAND_SPADE_BONUS_1 = [0x01, 0x00] + DESERT_LAND_SPADE_BONUS_2 = [0x01, 0x00] + WATER_LAND_1 = [0x25, 0xCE] + WATER_LAND_2 = [0x23, 0xCA] + WATER_LAND_3 = [0x8E, 0xC5] + WATER_LAND_4 = [0xB3, 0xC9] + WATER_LAND_5 = [0xEB, 0xCD] + WATER_LAND_6 = [0x63, 0xCA] + WATER_LAND_7 = [0x6E, 0xC4] + WATER_LAND_8 = [0x54, 0xC9] + WATER_LAND_9 = [0x8F, 0xC3] + WATER_LAND_FORTRESS_1 = [0x93, 0xD3] + WATER_LAND_FORTRESS_2 = [0x62, 0xD3] + WATER_LAND_CASTLE = [0xAF, 0xD2] + WATER_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x03] + WATER_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x08] + WATER_LAND_MUSHROOM_HOUSE_3 = [0x00, 0x08] + WATER_LAND_MUSHROOM_HOUSE_4 = [0x00, 0x08] + WATER_LAND_MUSHROOM_HOUSE_5 = [0x00, 0x07] + WATER_LAND_SPADE_BONUS_1 = [0x01, 0x00] + WATER_LAND_SPADE_BONUS_2 = [0x01, 0x00] + WATER_LAND_SPADE_BONUS_3 = [0x01, 0x00] + WATER_LAND_SPADE_BONUS_4 = [0x01, 0x00] + WATER_LAND_SPADE_BONUS_5 = [0x01, 0x00] + GIANT_LAND_1 = [0x97, 0xCE] + GIANT_LAND_2 = [0x14, 0xCF] + GIANT_LAND_3 = [0x0C, 0xCF] + GIANT_LAND_4 = [0xB9, 0xCF] + GIANT_LAND_5 = [0xEC, 0xCF] + GIANT_LAND_6 = [0x57, 0xC2] + GIANT_LAND_FORTRESS_1 = [0x28, 0xD5] + GIANT_LAND_FORTRESS_2 = [0x08, 0xD5] + GIANT_LAND_CASTLE = [0xAF, 0xD2] + GIANT_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x04] + GIANT_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x07] + GIANT_LAND_MUSHROOM_HOUSE_3 = [0x00, 0x07] + GIANT_LAND_MUSHROOM_HOUSE_4 = [0x00, 0x09] + GIANT_LAND_SPADE_BONUS_1 = [0x01, 0x00] + GIANT_LAND_SPADE_BONUS_2 = [0x01, 0x00] + SKY_LAND_1 = [0xE2, 0xC3] + SKY_LAND_2 = [0xBE, 0xC8] + SKY_LAND_3 = [0x06, 0xC0] + SKY_LAND_4 = [0x39, 0xD0] + SKY_LAND_5 = [0x0A, 0xCB] + SKY_LAND_6 = [0x40, 0xCF] + SKY_LAND_7 = [0xDD, 0xCE] + SKY_LAND_8 = [0x70, 0xCE] + SKY_LAND_9 = [0x7B, 0xCF] + SKY_LAND_TOWER = [0xEC, 0xD4] + SKY_LAND_FORTRESS_1 = [0xD0, 0xD3] + SKY_LAND_FORTRESS_2 = [0xB4, 0xD2] + SKY_LAND_CASTLE = [0xAF, 0xD2] + SKY_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x04] + SKY_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x09] + SKY_LAND_MUSHROOM_HOUSE_3 = [0x00, 0x07] + SKY_LAND_SPADE_BONUS_1 = [0x01, 0x00] + SKY_LAND_SPADE_BONUS_2 = [0x01, 0x00] + SKY_LAND_SPADE_BONUS_3 = [0x01, 0x00] + ICE_LAND_1 = [0xC2, 0xCB] + ICE_LAND_2 = [0x52, 0xCB] + ICE_LAND_3 = [0x8E, 0xCA] + ICE_LAND_4 = [0x6B, 0xCC] + ICE_LAND_5 = [0xD3, 0xCA] + ICE_LAND_6 = [0xE0, 0xCC] + ICE_LAND_7 = [0x17, 0xCD] + ICE_LAND_8 = [0xE5, 0xC9] + ICE_LAND_9 = [0x2D, 0xCD] + ICE_LAND_10 = [0xE8, 0xCC] + ICE_LAND_FORTRESS_1 = [0xB0, 0xD4] + ICE_LAND_FORTRESS_2 = [0xAB, 0xCA] + ICE_LAND_FORTRESS_3 = [0x70, 0xD4] + ICE_LAND_CASTLE = [0xAF, 0xD2] + ICE_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x07] + ICE_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x05] + ICE_LAND_SPADE_BONUS_1 = [0x01, 0x00] + ICE_LAND_SPADE_BONUS_2 = [0x01, 0x00] + ICE_LAND_SPADE_BONUS_3 = [0x01, 0x00] + PIPE_LAND_1 = [0x4D, 0xC2] + PIPE_LAND_2 = [0x04, 0xD1] + PIPE_LAND_3 = [0xF3, 0xC6] + PIPE_LAND_4 = [0xDD, 0xC3] + PIPE_LAND_5 = [0x56, 0xC5] + PIPE_LAND_6 = [0xD8, 0xC3] + PIPE_LAND_7 = [0x52, 0xC2] + PIPE_LAND_8 = [0x2D, 0xC3] + PIPE_LAND_9 = [0x5A, 0xD1] + PIPE_LAND_PIRANHA_1 = [0x7C, 0xD0] + PIPE_LAND_PIRANHA_2 = [0x68, 0xD0] + PIPE_LAND_FORTRESS_1 = [0xE4, 0xD4] + PIPE_LAND_FORTRESS_2 = [0x1B, 0xD4] + PIPE_LAND_CASTLE = [0xAF, 0xD2] + PIPE_LAND_MUSHROOM_HOUSE_1 = [0x00, 0x07] + PIPE_LAND_MUSHROOM_HOUSE_2 = [0x00, 0x06] + PIPE_LAND_MUSHROOM_HOUSE_3 = [0x00, 0x06] + PIPE_LAND_SPADE_BONUS_1 = [0x01, 0x00] + PIPE_LAND_SPADE_BONUS_2 = [0x01, 0x00] + PIPE_LAND_SPADE_BONUS_3 = [0x01, 0x00] + DARK_LAND_SHIP_1 = [0x6F, 0xD9] + DARK_LAND_SHIP_2 = [0xCC, 0xD8] + DARK_LAND_SHIP_3 = [0x67, 0xD8] + DARK_LAND_SHIP_4 = [0x1C, 0xD9] + DARK_LAND_HAND_1 = [0xB0, 0xD0] + DARK_LAND_HAND_2 = [0x93, 0xD0] + DARK_LAND_HAND_3 = [0xC1, 0xD0] + DARK_LAND_1 = [0x24, 0xC4] + DARK_LAND_2 = [0xFF, 0xC8] + DARK_LAND_FORTRESS = [0x51, 0xD5] + DARK_LAND_CASTLE = [0xCD, 0xD5] + + +class SMB3LevelObjectSets(enum.Enum): + OVERWORLD = 0x0 + PLAINS = 0x1 + DUNGEON = 0x2 + HILLY = 0x3 + SKY = 0x4 + PIRANHA_PLANT = 0x5 + WATER = 0x6 + MUSHROOM = 0x7 + PIPE = 0x8 + DESERT = 0x9 + SHIP = 0xA + GIANT = 0xB + ICE = 0xC + CLOUDY = 0xD + UNDERGROUND = 0xE + SPADE_BONUS = 0xF + + +class SMB3LevelObjectSetValues(enum.Enum): + GRASS_LAND_1 = SMB3LevelObjectSets.PLAINS + GRASS_LAND_2 = SMB3LevelObjectSets.HILLY + GRASS_LAND_3 = SMB3LevelObjectSets.PLAINS + GRASS_LAND_4 = SMB3LevelObjectSets.SKY + GRASS_LAND_5 = SMB3LevelObjectSets.UNDERGROUND + GRASS_LAND_6 = SMB3LevelObjectSets.SKY + GRASS_LAND_FORTRESS = SMB3LevelObjectSets.DUNGEON + GRASS_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + GRASS_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + GRASS_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + GRASS_LAND_SPADE_BONUS = SMB3LevelObjectSets.SPADE_BONUS + DESERT_LAND_1 = SMB3LevelObjectSets.DESERT + DESERT_LAND_2 = SMB3LevelObjectSets.HILLY + DESERT_LAND_3 = SMB3LevelObjectSets.DESERT + DESERT_LAND_4 = SMB3LevelObjectSets.DESERT + DESERT_LAND_5 = SMB3LevelObjectSets.DESERT + DESERT_LAND_QUICKSAND = SMB3LevelObjectSets.HILLY + DESERT_LAND_PYRAMID = SMB3LevelObjectSets.DESERT + DESERT_LAND_FORTRESS = SMB3LevelObjectSets.DUNGEON + DESERT_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + DESERT_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + DESERT_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + DESERT_LAND_MUSHROOM_HOUSE_3 = SMB3LevelObjectSets.MUSHROOM + DESERT_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + DESERT_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + WATER_LAND_1 = SMB3LevelObjectSets.WATER + WATER_LAND_2 = SMB3LevelObjectSets.SKY + WATER_LAND_3 = SMB3LevelObjectSets.PLAINS + WATER_LAND_4 = SMB3LevelObjectSets.UNDERGROUND + WATER_LAND_5 = SMB3LevelObjectSets.WATER + WATER_LAND_6 = SMB3LevelObjectSets.SKY + WATER_LAND_7 = SMB3LevelObjectSets.PLAINS + WATER_LAND_8 = SMB3LevelObjectSets.UNDERGROUND + WATER_LAND_9 = SMB3LevelObjectSets.PLAINS + WATER_LAND_FORTRESS_1 = SMB3LevelObjectSets.DUNGEON + WATER_LAND_FORTRESS_2 = SMB3LevelObjectSets.DUNGEON + WATER_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + WATER_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + WATER_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + WATER_LAND_MUSHROOM_HOUSE_3 = SMB3LevelObjectSets.MUSHROOM + WATER_LAND_MUSHROOM_HOUSE_4 = SMB3LevelObjectSets.MUSHROOM + WATER_LAND_MUSHROOM_HOUSE_5 = SMB3LevelObjectSets.MUSHROOM + WATER_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + WATER_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + WATER_LAND_SPADE_BONUS_3 = SMB3LevelObjectSets.SPADE_BONUS + WATER_LAND_SPADE_BONUS_4 = SMB3LevelObjectSets.SPADE_BONUS + WATER_LAND_SPADE_BONUS_5 = SMB3LevelObjectSets.SPADE_BONUS + GIANT_LAND_1 = SMB3LevelObjectSets.GIANT + GIANT_LAND_2 = SMB3LevelObjectSets.GIANT + GIANT_LAND_3 = SMB3LevelObjectSets.GIANT + GIANT_LAND_4 = SMB3LevelObjectSets.GIANT + GIANT_LAND_5 = SMB3LevelObjectSets.GIANT + GIANT_LAND_6 = SMB3LevelObjectSets.PLAINS + GIANT_LAND_FORTRESS_1 = SMB3LevelObjectSets.DUNGEON + GIANT_LAND_FORTRESS_2 = SMB3LevelObjectSets.DUNGEON + GIANT_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + GIANT_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + GIANT_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + GIANT_LAND_MUSHROOM_HOUSE_3 = SMB3LevelObjectSets.MUSHROOM + GIANT_LAND_MUSHROOM_HOUSE_4 = SMB3LevelObjectSets.MUSHROOM + GIANT_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + GIANT_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + SKY_LAND_1 = SMB3LevelObjectSets.PLAINS + SKY_LAND_2 = SMB3LevelObjectSets.UNDERGROUND + SKY_LAND_3 = SMB3LevelObjectSets.PLAINS + SKY_LAND_4 = SMB3LevelObjectSets.CLOUDY + SKY_LAND_5 = SMB3LevelObjectSets.SKY + SKY_LAND_6 = SMB3LevelObjectSets.CLOUDY + SKY_LAND_7 = SMB3LevelObjectSets.CLOUDY + SKY_LAND_8 = SMB3LevelObjectSets.CLOUDY + SKY_LAND_9 = SMB3LevelObjectSets.CLOUDY + SKY_LAND_TOWER = SMB3LevelObjectSets.DUNGEON + SKY_LAND_FORTRESS_1 = SMB3LevelObjectSets.DUNGEON + SKY_LAND_FORTRESS_2 = SMB3LevelObjectSets.DUNGEON + SKY_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + SKY_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + SKY_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + SKY_LAND_MUSHROOM_HOUSE_3 = SMB3LevelObjectSets.MUSHROOM + SKY_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + SKY_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + SKY_LAND_SPADE_BONUS_3 = SMB3LevelObjectSets.SPADE_BONUS + ICE_LAND_1 = SMB3LevelObjectSets.ICE + ICE_LAND_2 = SMB3LevelObjectSets.ICE + ICE_LAND_3 = SMB3LevelObjectSets.ICE + ICE_LAND_4 = SMB3LevelObjectSets.ICE + ICE_LAND_5 = SMB3LevelObjectSets.ICE + ICE_LAND_6 = SMB3LevelObjectSets.ICE + ICE_LAND_7 = SMB3LevelObjectSets.ICE + ICE_LAND_8 = SMB3LevelObjectSets.UNDERGROUND + ICE_LAND_9 = SMB3LevelObjectSets.ICE + ICE_LAND_10 = SMB3LevelObjectSets.ICE + ICE_LAND_FORTRESS_1 = SMB3LevelObjectSets.DUNGEON + ICE_LAND_FORTRESS_2 = SMB3LevelObjectSets.DUNGEON + ICE_LAND_FORTRESS_3 = SMB3LevelObjectSets.DUNGEON + ICE_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + ICE_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + ICE_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + ICE_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + ICE_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + ICE_LAND_SPADE_BONUS_3 = SMB3LevelObjectSets.SPADE_BONUS + PIPE_LAND_1 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_2 = SMB3LevelObjectSets.DESERT + PIPE_LAND_3 = SMB3LevelObjectSets.HILLY + PIPE_LAND_4 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_5 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_6 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_7 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_8 = SMB3LevelObjectSets.PLAINS + PIPE_LAND_9 = SMB3LevelObjectSets.DESERT + PIPE_LAND_PIRANHA_1 = SMB3LevelObjectSets.PIRANHA_PLANT + PIPE_LAND_PIRANHA_2 = SMB3LevelObjectSets.PIRANHA_PLANT + PIPE_LAND_FORTRESS_1 = SMB3LevelObjectSets.DUNGEON + PIPE_LAND_FORTRESS_2 = SMB3LevelObjectSets.DUNGEON + PIPE_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + PIPE_LAND_MUSHROOM_HOUSE_1 = SMB3LevelObjectSets.MUSHROOM + PIPE_LAND_MUSHROOM_HOUSE_2 = SMB3LevelObjectSets.MUSHROOM + PIPE_LAND_MUSHROOM_HOUSE_3 = SMB3LevelObjectSets.MUSHROOM + PIPE_LAND_SPADE_BONUS_1 = SMB3LevelObjectSets.SPADE_BONUS + PIPE_LAND_SPADE_BONUS_2 = SMB3LevelObjectSets.SPADE_BONUS + PIPE_LAND_SPADE_BONUS_3 = SMB3LevelObjectSets.SPADE_BONUS + DARK_LAND_SHIP_1 = SMB3LevelObjectSets.SHIP + DARK_LAND_SHIP_2 = SMB3LevelObjectSets.SHIP + DARK_LAND_SHIP_3 = SMB3LevelObjectSets.SHIP + DARK_LAND_SHIP_4 = SMB3LevelObjectSets.SHIP + DARK_LAND_HAND_1 = SMB3LevelObjectSets.GIANT + DARK_LAND_HAND_2 = SMB3LevelObjectSets.GIANT + DARK_LAND_HAND_3 = SMB3LevelObjectSets.GIANT + DARK_LAND_1 = SMB3LevelObjectSets.PLAINS + DARK_LAND_2 = SMB3LevelObjectSets.UNDERGROUND + DARK_LAND_FORTRESS = SMB3LevelObjectSets.DUNGEON + DARK_LAND_CASTLE = SMB3LevelObjectSets.DUNGEON + + +class SMB3LevelOffsetValues(enum.Enum): + GRASS_LAND_1 = [0x82, 0xBB] + GRASS_LAND_2 = [0x2A, 0xAF] + GRASS_LAND_3 = [0x09, 0xAE] + GRASS_LAND_4 = [0x01, 0xB5] + GRASS_LAND_5 = [0x41, 0xAA] + GRASS_LAND_6 = [0xA8, 0xB3] + GRASS_LAND_FORTRESS = [0x5D, 0xA9] + GRASS_LAND_CASTLE = [0x37, 0xA8] + GRASS_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + GRASS_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + GRASS_LAND_SPADE_BONUS = [0x00, 0x00] + DESERT_LAND_1 = [0x5F, 0xB4] + DESERT_LAND_2 = [0x98, 0xB8] + DESERT_LAND_3 = [0x15, 0xB9] + DESERT_LAND_4 = [0x5A, 0xB6] + DESERT_LAND_5 = [0x3A, 0xB7] + DESERT_LAND_QUICKSAND = [0x0D, 0xB6] + DESERT_LAND_PYRAMID = [0x26, 0xAF] + DESERT_LAND_FORTRESS = [0xBA, 0xBA] + DESERT_LAND_CASTLE = [0xE7, 0xA7] + DESERT_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + DESERT_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + DESERT_LAND_MUSHROOM_HOUSE_3 = [0x60, 0xAD] + DESERT_LAND_SPADE_BONUS_1 = [0x00, 0x00] + DESERT_LAND_SPADE_BONUS_2 = [0x00, 0x00] + WATER_LAND_1 = [0x0A, 0xB3] + WATER_LAND_2 = [0xD0, 0xA7] + WATER_LAND_3 = [0x69, 0xBE] + WATER_LAND_4 = [0x19, 0xB7] + WATER_LAND_5 = [0x5A, 0xB0] + WATER_LAND_6 = [0x39, 0xA9] + WATER_LAND_7 = [0xBC, 0xB8] + WATER_LAND_8 = [0x59, 0xAC] + WATER_LAND_9 = [0x08, 0xB1] + WATER_LAND_FORTRESS_1 = [0x81, 0xAB] + WATER_LAND_FORTRESS_2 = [0x79, 0xAA] + WATER_LAND_CASTLE = [0xF7, 0xA7] + WATER_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + WATER_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + WATER_LAND_MUSHROOM_HOUSE_3 = [0x60, 0xAD] + WATER_LAND_MUSHROOM_HOUSE_4 = [0x60, 0xAD] + WATER_LAND_MUSHROOM_HOUSE_5 = [0x60, 0xAD] + WATER_LAND_SPADE_BONUS_1 = [0x00, 0x00] + WATER_LAND_SPADE_BONUS_2 = [0x00, 0x00] + WATER_LAND_SPADE_BONUS_3 = [0x00, 0x00] + WATER_LAND_SPADE_BONUS_4 = [0x00, 0x00] + WATER_LAND_SPADE_BONUS_5 = [0x00, 0x00] + GIANT_LAND_1 = [0x88, 0xAB] + GIANT_LAND_2 = [0x67, 0xB0] + GIANT_LAND_3 = [0x0F, 0xB0] + GIANT_LAND_4 = [0xAD, 0xB2] + GIANT_LAND_5 = [0x2C, 0xB7] + GIANT_LAND_6 = [0xDF, 0xAA] + GIANT_LAND_FORTRESS_1 = [0xA6, 0xB6] + GIANT_LAND_FORTRESS_2 = [0xBE, 0xB5] + GIANT_LAND_CASTLE = [0x07, 0xA8] + GIANT_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + GIANT_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + GIANT_LAND_MUSHROOM_HOUSE_3 = [0x60, 0xAD] + GIANT_LAND_MUSHROOM_HOUSE_4 = [0x60, 0xAD] + GIANT_LAND_SPADE_BONUS_1 = [0x00, 0x00] + GIANT_LAND_SPADE_BONUS_2 = [0x00, 0x00] + SKY_LAND_1 = [0x4B, 0xB4] + SKY_LAND_2 = [0x77, 0xA5] + SKY_LAND_3 = [0x16, 0xAC] + SKY_LAND_4 = [0x4C, 0xBA] + SKY_LAND_5 = [0x02, 0xAF] + SKY_LAND_6 = [0x41, 0xB1] + SKY_LAND_7 = [0xB8, 0xAE] + SKY_LAND_8 = [0x5F, 0xAA] + SKY_LAND_9 = [0x02, 0xB2] + SKY_LAND_TOWER = [0x75, 0xB4] + SKY_LAND_FORTRESS_1 = [0x26, 0xAD] + SKY_LAND_FORTRESS_2 = [0x57, 0xA8] + SKY_LAND_CASTLE = [0x17, 0xA8] + SKY_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + SKY_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + SKY_LAND_MUSHROOM_HOUSE_3 = [0x60, 0xAD] + SKY_LAND_SPADE_BONUS_1 = [0x00, 0x00] + SKY_LAND_SPADE_BONUS_2 = [0x00, 0x00] + SKY_LAND_SPADE_BONUS_3 = [0x00, 0x00] + ICE_LAND_1 = [0x2C, 0xB2] + ICE_LAND_2 = [0x4C, 0xB1] + ICE_LAND_3 = [0x6B, 0xAA] + ICE_LAND_4 = [0x25, 0xB6] + ICE_LAND_5 = [0xEA, 0xAC] + ICE_LAND_6 = [0x31, 0xB9] + ICE_LAND_7 = [0xEA, 0xBA] + ICE_LAND_8 = [0xB4, 0xB8] + ICE_LAND_9 = [0xEE, 0xBC] + ICE_LAND_10 = [0x93, 0xB9] + ICE_LAND_FORTRESS_1 = [0x51, 0xB1] + ICE_LAND_FORTRESS_2 = [0x8C, 0xAB] + ICE_LAND_FORTRESS_3 = [0x32, 0xB0] + ICE_LAND_CASTLE = [0x27, 0xA8] + ICE_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + ICE_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + ICE_LAND_SPADE_BONUS_1 = [0x00, 0x00] + ICE_LAND_SPADE_BONUS_2 = [0x00, 0x00] + ICE_LAND_SPADE_BONUS_3 = [0x00, 0x00] + PIPE_LAND_1 = [0x61, 0xAA] + PIPE_LAND_2 = [0xEE, 0xAF] + PIPE_LAND_3 = [0x84, 0xB2] + PIPE_LAND_4 = [0x82, 0xB3] + PIPE_LAND_5 = [0xE9, 0xBC] + PIPE_LAND_6 = [0x32, 0xB3] + PIPE_LAND_7 = [0xA8, 0xAA] + PIPE_LAND_8 = [0x6F, 0xAF] + PIPE_LAND_9 = [0x3F, 0xB2] + PIPE_LAND_PIRANHA_1 = [0x23, 0xBC] + PIPE_LAND_PIRANHA_2 = [0x20, 0xBB] + PIPE_LAND_FORTRESS_1 = [0x8E, 0xB2] + PIPE_LAND_FORTRESS_2 = [0x00, 0xAF] + PIPE_LAND_CASTLE = [0x47, 0xA8] + PIPE_LAND_MUSHROOM_HOUSE_1 = [0x60, 0xAD] + PIPE_LAND_MUSHROOM_HOUSE_2 = [0x60, 0xAD] + PIPE_LAND_MUSHROOM_HOUSE_3 = [0x60, 0xAD] + PIPE_LAND_SPADE_BONUS_1 = [0x00, 0x00] + PIPE_LAND_SPADE_BONUS_2 = [0x00, 0x00] + PIPE_LAND_SPADE_BONUS_3 = [0x00, 0x00] + DARK_LAND_SHIP_1 = [0xD3, 0xB8] + DARK_LAND_SHIP_2 = [0xB1, 0xB6] + DARK_LAND_SHIP_3 = [0x17, 0xB6] + DARK_LAND_SHIP_4 = [0xDE, 0xB7] + DARK_LAND_HAND_1 = [0x40, 0xBD] + DARK_LAND_HAND_2 = [0xDE, 0xBC] + DARK_LAND_HAND_3 = [0x8F, 0xBD] + DARK_LAND_1 = [0x87, 0xB7] + DARK_LAND_2 = [0xFB, 0xA7] + DARK_LAND_FORTRESS = [0x7A, 0xB8] + DARK_LAND_CASTLE = [0x2D, 0xBC] + + +class SMB3Worlds(enum.Enum): + GRASS_LAND = "Grass Land" + DESERT_LAND = "Desert Land" + WATER_LAND = "Water Land" + GIANT_LAND = "Giant Land" + SKY_LAND = "Sky Land" + ICE_LAND = "Ice Land" + PIPE_LAND = "Pipe Land" + DARK_LAND = "Dark Land" + WARP_ZONE = "Warp Zone" + + +class SMB3WorldMusicThemes(enum.Enum): + GRASS_LAND = 0x1 + DESERT_LAND = 0x2 + WATER_LAND = 0x3 + GIANT_LAND = 0x4 + SKY_LAND = 0x5 + ICE_LAND = 0x6 + PIPE_LAND = 0x7 + DARK_LAND = 0x8 + WARP_ZONE = 0xB + + +class SMB3WorldPalettes(enum.Enum): + GRASS_LAND = 0x0 + DESERT_LAND = 0x1 + WATER_LAND = 0x0 + GIANT_LAND = 0x3 + SKY_LAND = 0x4 + ICE_LAND = 0x5 + PIPE_LAND = 0x6 + DARK_LAND = 0x7 + WARP_ZONE = 0x2