1
0
Fork 0
mirror of https://github.com/notwa/mm synced 2024-05-19 21:43:23 -07:00

add map select (warp) menu

This commit is contained in:
Connor Olding 2015-11-10 05:59:03 -08:00
parent c082e4ee2f
commit 3342eb90d3
3 changed files with 200 additions and 4 deletions

View File

@ -5,6 +5,8 @@ require "classes"
require "menu classes"
require "messages"
local warp_menu = require "warp menu"
local dummy = Callbacks()
local passives = {}
@ -45,6 +47,11 @@ function everything:on()
dofile("oneshot.lua")
end
local escape_cutscene = Callbacks()
function escape_cutscene:on()
addrs.cutscene_status_2(3)
end
local self_destruct = Callbacks()
function self_destruct:on()
addrs.hearts(0)
@ -110,14 +117,17 @@ local playas_menu = oot and Menu{
},
}
local main_menu = Menu{
Screen{
Text("Main Menu #1/2"),
Toggle("L to Levitate", levitate),
--Toggle("L to Levitate", levitate),
Toggle("A to Run Fast", supersonic),
Hold("Levitate", levitate),
Oneshot("100%", everything),
LinkTo("Play as", playas_menu),
Oneshot("Escape Cutscene", escape_cutscene),
LinkTo("Play as...", playas_menu),
LinkTo("Warp to...", warp_menu),
Back(),
},
Screen{

View File

@ -860,7 +860,7 @@ return {
"from West Clock Town (North)",
"from North Clock Town",
"from West Clock Town (South)",
"from laundry pool",
"from Laundry Pool",
"from East Clock Town (South)",
"from atop Clock Tower (unused)",
"from Owl Statue",
@ -870,7 +870,7 @@ return {
{[0]=
"from South Clock Town",
"from kafei's room",
"from Kafei's room",
},
{},

186
Lua/warp menu.lua Normal file
View File

@ -0,0 +1,186 @@
if not mm then
return Menu{
Screen{
Text("Sorry, no warping for you!"),
Back(),
},
}
end
local scene_names = require "data.scene names"
local entrance_names = require "data.entrance names"
local ins = table.insert
-- we should really figure this out in code,
-- but hardcoding will do for now.
local scene_id_to_entrance_id = {
[0]=0x12,
0x0B,
0x0A,
0x10,
0x11,
0x0C,
0x00,
0x0D,
nil,
nil,
0x07,
nil,
nil,
nil,
0x08,
nil,
0x13,
0x14,
0x15,
0x16,
0x17,
0x18,
0x19,
0x1A,
0x1B,
0x1C,
0x1D,
0x1E,
0x1F,
0x20,
0x21,
0x22,
0x23,
0x24,
0x25,
0x26,
0x27,
0x28,
0x29,
0x2A,
0x2B,
0x2C,
0x2D,
0x2E,
0x2F,
0x30,
nil,
0x32,
0x33,
0x34,
0x35,
nil,
0x37,
0x38,
0x39,
nil,
0x3B,
0x3C,
0x3D,
0x3E,
0x3F,
0x40,
0x41,
0x42,
0x43,
0x44,
0x45,
0x46,
0x47,
0x48,
0x49,
0x4A,
0x4B,
0x4C,
0x4D,
0x4E,
0x4F,
0x50,
0x51,
0x52,
0x53,
0x54,
0x55,
0x56,
0x57,
0x58,
0x59,
0x5A,
0x5B,
0x5C,
0x5D,
0x5E,
0x5F,
0x60,
0x61,
0x62,
0x63,
0x64,
0x65,
0x66,
0x67,
0x68,
0x69,
0x6A,
0x6B,
0x6C,
0x6D,
0x6E,
0x6F,
0x70,
}
local function make_exit_value(s, e, c)
return bit.lshift(s, 9) + bit.lshift(e, 4) + c
end
local scenes_pages = {}
for si=0x00,0x7F do
local i = scene_id_to_entrance_id[si]
local page = math.floor(si/16) + 1
if si % 16 == 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 = scene_names[i]
end
ins(entrance_items, Text( ("Warp to %s"):format(scene_name) ))
for j=0,32 do
local ename = entrances[j]
if ename == nil then
if j ~= 0 then break end
ename = "[crash?]"
end
local callback = Callbacks()
function callback:on()
addrs.warp_destination(make_exit_value(si,j,0))
addrs.warp_begin(1)
end
ins(entrance_items, Oneshot(ename, callback))
end
ins(entrance_items, Text(""))
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))
if si % 16 == 15 then
ins(scenes_pages[page], Text(""))
ins(scenes_pages[page], Back())
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]),
}