diff --git a/Lua/data/entrance names.lua b/Lua/data/entrance names.lua index 0b008df..aa1e6b5 100644 --- a/Lua/data/entrance names.lua +++ b/Lua/data/entrance names.lua @@ -1,7 +1,145 @@ --- entrance order, not scene order. i know it's confusing. local bad="[crash]" -return {[0]= - {name="Southern Swamp (Clean)", +return { + custom_order = { + "Intro Map", + "Lost Woods (Gain Control)", + "(Deku Intro Area before Clock Tower)", + "Clock Tower (Inside)", + "South Clock Town", + "West Clock Town", + "North Clock Town", + "East Clock Town", + "Laundry Pool", + "Astral Observatory (Bomber's Hideout)", + "", + "Fairy's Fountain", + "Termina Field", + "Grottos", + "Atop Clock Tower", + "\n", + + "Curiosity Shop", + "Trading Post", + "Bomb Shop", + "Swordsman's School", + "Post Office", + "Lottery Shop", + "", + "(Deku Flower Minigame)", + "", + "Mayor's Residence", + "Milk Bar", + "Honey & Darling's Shop", + "Town Shooting Gallery", + "Treasure Chest Shop", + "Stock Pot Inn", + "\n", + + "(Road to Swamp)", + "Swamp Shooting Gallery", + "", + "Southern Swamp (Poisoned)", + "Southern Swamp (Clean)", + "Tourist Information", + "Magic Hags' Potion Shop", + "Woods of Mystery", + "Swamp Spider House", + "", + "Deku Palace", + "Deku King's Chamber", + "Deku Shrine", + "", + "Woodfall", + "Woodfall Temple", + "Woodfall Temple - Odolwa", + "\n", + + "Snowhead Passage", -- (Road to Mountain Village) ? + "Mountain Village (Frozen)", + "Mountain Village (Thawed)", + "Mountain Smithy", + "Goron Graveyard", + "", + "(Road to Goron Village) (Frozen)", + "(Road to Goron Village) (Thawed)", + "Goron Racetrack", + "", + "Goron Village (Frozen)", + "Goron Village (Thawed)", + "Goron Shrine", + "Goron Shop", + "", + "(Road to Snowhead Temple)", + "Snowhead", + "Snowhead Temple", + "Snowhead Temple - Goht", + "\n", + + "Milk Road", + "Gorman Track", + "", + "Romani Ranch", + "Mama's House / Barn", + "Cucco Shack", + "Doggy Racetrack", + "\n", + + "Great Bay Coast", + "Fisherman's Hut", + "Oceanside Spider House", + "Marine Research Lab", + "", + "Pinnacle Rock", + "", + "Pirates' Fortress (Exterior)", + "Pirates' Fortress (Outside)", + "Pirates' Fortress (Inside)", + "", + "Zora Cape", + "Waterfall Rapids", + "Zora Hall", + "(Zora Hall Rooms)", + "", + "(Cutscene before Great Bay Temple)", + "Great Bay Temple", + "Great Bay Temple - Gyorg", + "\n", + + "(Road to Ikana)", + "Ikana Graveyard", + "Beneath the Graveyard", + "Beneath the Graveyard (Dampe)", + "", + "Ikana Canyon", + "Sakon's Hideout", + "Music Box House", + "Ghost Hut", + "Beneath the Well", + "Secret Shrine", + "", + "Ikana Castle", + "Ikana Castle Boss Room", + "", + "Stone Tower", + "Inverted Stone Tower", + "", + "Stone Tower Temple", + "Inverted Stone Tower Temple", + "Stone Tower Temple - Twinmold", + "\n", + + "Giants' Chamber", + "Moon", + "Woodfall Trial", + "Snowhead Trial", + "Great Bay Trial", + "Ikana Trial", + "Majora", + }, + +-- entrance order, not scene order. i know it's confusing. + +[0]={name="Southern Swamp (Clean)", [0]="from road", "from Tourists'", "from Woodfall", @@ -42,8 +180,8 @@ return {[0]= "Beehive", "Magic Bean Seller", "Peahat", - "JP grotto (straight) (start?)", - "JP grotto (vines) (upper)", + "JP Grotto (straight) (start?)", + "JP Grotto (vines) (upper)", "Lone Peak Shrine (Lens of Truth Cave)", }, @@ -109,7 +247,7 @@ return {[0]= "from Beneath the Well", "from Sakon's Hideout", "after beating Temple", - "from castle", + "from Castle", "Gibdo cutscene", "Sharp's cave (cutscene)", "from Fairy's Fountain", @@ -189,7 +327,7 @@ return {[0]= "from boss room", }, - {name="Deku Flower Minigame", + {name="(Deku Flower Minigame)", [0]="from Clock Town", "after beating minigame", }, @@ -250,7 +388,7 @@ return {[0]= "from Woodfall", "from Snowhead", "from Great Bay", - "from Ikana canyon", + "from Ikana Canyon", "learning magic", "learning spin attack", "learning double magic", @@ -283,11 +421,11 @@ return {[0]= "from Monkey's cell", "from Deku Shrine", "from Swamp (above)", - "from JP grotto 1", - "from JP grotto 2", - "from JP grotto 3", - "from Bean Seller's grotto", - "from JP grotto 4", + "from JP Grotto 1", + "from JP Grotto 2", + "from JP Grotto 3", + "from Bean Seller's Grotto", + "from JP Grotto 4", }, {name="Mountain Smithy", @@ -405,7 +543,7 @@ return {[0]= {name=bad}, - {name="Pirates' Fortress (Outside)", + {name="Pirates' Fortress (Exterior)", [0]="from Great Bay", "from outside Pirates'", "from underwater passage", @@ -477,7 +615,7 @@ return {[0]= "from Owl Statue", }, - {name="Woodfall Temple (Outside)", + {name="Woodfall", [0]="from Swamp", "from Temple", "from Great Fairy's fountain", @@ -510,8 +648,8 @@ return {[0]= }, {name="Beneath the Well", - [0]="from Ikana canyon", - "from Ikana castle", + [0]="from Ikana Canyon", + "from Ikana Castle", }, {name="(Zora Band Member Rooms)", @@ -554,7 +692,7 @@ return {[0]= }, {name="Ghost Hut", - [0]="from Ikana canyon", + [0]="from Ikana Canyon", "from minigame", "after beating minigame", }, @@ -565,7 +703,7 @@ return {[0]= {name="(Road to Ikana)", [0]="from Termina Field", - "from Ikana canyon", + "from Ikana Canyon", "from Ikana Graveyard", }, @@ -588,7 +726,7 @@ return {[0]= }, {name="Stone Tower", - [0]="from Ikana canyon", + [0]="from Ikana Canyon", "from inverting", "from Temple", "from Owl Statue", @@ -596,7 +734,7 @@ return {[0]= {name="Inverted Stone Tower", [0]="from inverting", - "from stone Tower", + "from Stone Tower", }, {name="Mountain Village (Thawed)", @@ -669,7 +807,7 @@ return {[0]= {name="Woods of Mystery", [0]="from Swamp", - -- "from grotto?", -- did i just dream this up? + -- "from Grotto?", -- did i just dream this up? }, {name="Lost Woods (Gain Control)", diff --git a/Lua/menus/warp.lua b/Lua/menus/warp.lua index dadfe71..2f90c49 100644 --- a/Lua/menus/warp.lua +++ b/Lua/menus/warp.lua @@ -8,27 +8,7 @@ end local per_page = 16 -local scenes_pages = {} -for si=0x00,0x7F do - local i = scene_id_to_entrance_id[si] - local page = math.floor(si/per_page) + 1 - - if si % per_page == 0 then - scenes_pages[page] = {} - local s = ("Warp to Scene #%i/8"):format(page) - ins(scenes_pages[page], Text(s)) - end - - local entrance_items = {} - local entrances = {} - local scene_name = '[crash]' - if i ~= nil then - entrances = entrance_names[i] - scene_name = entrances.name - end - - ins(entrance_items, Text( ("Warp to %s"):format(scene_name) )) - +local function fill_entrances(entrance_items, entrances, si) for j=0,32 do local ename = entrances[j] if ename == nil then @@ -46,22 +26,83 @@ for si=0x00,0x7F do ins(entrance_items, Text("Cutscenes... (TODO)")) ins(entrance_items, Text("")) ins(entrance_items, Back()) - local entrance_menu = Menu{Screen(entrance_items)} - ins(scenes_pages[page], LinkTo(scene_name, entrance_menu)) +end - if si % per_page == per_page - 1 then - ins(scenes_pages[page], Text("")) - ins(scenes_pages[page], Back()) +local scenes_pages = {} +if entrance_names.custom_order then + local lut = {} + for si=0x00,0x7F do + local i = scene_id_to_entrance_id[si] + if i ~= nil then + local e = entrance_names[i] + if e.name ~= nil then + --print(e.name, ("%04X"):format(si * 0x200)) + lut[e.name] = {si=si, i=i} + end + end + end + + local page = 1 + scenes_pages[page] = {} + for i, v in ipairs(entrance_names.custom_order) do + if v == "\n" then + page = page + 1 + scenes_pages[page] = {} + elseif lut[v] ~= nil then + local entrance_items = {} + local entrances = entrance_names[lut[v].i] + local scene_name = entrances.name + + ins(entrance_items, Text( ("Warp to %s"):format(scene_name) )) + fill_entrances(entrance_items, entrances, lut[v].si) + local entrance_menu = Menu{Screen(entrance_items)} + ins(scenes_pages[page], LinkTo(scene_name, entrance_menu)) + else + ins(scenes_pages[page], Text(v)) + end + end + + for i=1,page do + local s = ("Warp to Scene #%i/%i"):format(i, page) + ins(scenes_pages[i], 1, Text(s)) + ins(scenes_pages[i], Text("")) + ins(scenes_pages[i], Back()) + end + +else + for si=0x00,0x7F do + local i = scene_id_to_entrance_id[si] + local page = math.floor(si/per_page) + 1 + + if si % per_page == 0 then + scenes_pages[page] = {} + local s = ("Warp to Scene #%i/8"):format(page) + ins(scenes_pages[page], Text(s)) + end + + local entrance_items = {} + local entrances = {} + local scene_name = '[crash]' + if i ~= nil then + entrances = entrance_names[i] + scene_name = entrances.name + end + + ins(entrance_items, Text( ("Warp to %s"):format(scene_name) )) + fill_entrances(entrance_items, entrances, si) + local entrance_menu = Menu{Screen(entrance_items)} + ins(scenes_pages[page], LinkTo(scene_name, entrance_menu)) + + if si % per_page == per_page - 1 then + ins(scenes_pages[page], Text("")) + ins(scenes_pages[page], Back()) + end end end -return Menu{ - Screen(scenes_pages[1]), - Screen(scenes_pages[2]), - Screen(scenes_pages[3]), - Screen(scenes_pages[4]), - Screen(scenes_pages[5]), - Screen(scenes_pages[6]), - Screen(scenes_pages[7]), - Screen(scenes_pages[8]), -} +local screens = {} +for i, v in ipairs(scenes_pages) do + ins(screens, Screen(v)) +end + +return Menu(screens)