-- Majora's Mask Warp Script
-- BizHawk 1.11.1
-- This displays some simple information on the screen.
-- This allows you to warp to set locations.
-- Press Page Up/Down to scroll through the list.
-- Press Home to Warp.
-- This script works for the following versions so far:
-- english
-- english (kiosk)
-- english (gamecube)
-- japanese 1.0
-- japanese 1.1
-- european 1.0
-- european 1.1
-- Game Hash:
-- english D6133ACE5AFAA0882CF214CF88DABA39E266C078
-- english kiosk 2F0744F2422B0421697A74B305CB1EF27041AB11
-- english gamecube 9743AA026E9269B339EB0E3044CD5830A440C1FD
-- japanese 1.0 5FB2301AACBF85278AF30DCA3E4194AD48599E36
-- japanese 1.1 41FDB879AB422EC158B4EAFEA69087F255EA8589
-- japanese gamecube ????????????????????????????????????????
-- european 1.0 C04599CDAFEE1C84A7AF9A71DF68F139179ADA84
-- european 1.1 BB4E4757D10727C7584C59C1F2E5F44196E9C293
-- european gamecube ????????????????????????????????????????
-- european debug B38B71D2961DFFB523020A67F4807A4B704E347A
-- Version Detection
local version = ""
if (gameinfo.getromhash() == "D6133ACE5AFAA0882CF214CF88DABA39E266C078") then
version = "english"
elseif (gameinfo.getromhash() == "2F0744F2422B0421697A74B305CB1EF27041AB11") then
version = "englishK"
elseif (gameinfo.getromhash() == "9743AA026E9269B339EB0E3044CD5830A440C1FD") then
version = "englishGCN"
elseif (gameinfo.getromhash() == "5FB2301AACBF85278AF30DCA3E4194AD48599E36") then
version = "japanese"
elseif (gameinfo.getromhash() == "41FDB879AB422EC158B4EAFEA69087F255EA8589") then
version = "japaneseA"
elseif (gameinfo.getromhash() == "C04599CDAFEE1C84A7AF9A71DF68F139179ADA84") then
version = "european"
elseif (gameinfo.getromhash() == "BB4E4757D10727C7584C59C1F2E5F44196E9C293") then
version = "europeanA"
end
local scene = {
["english"] = 0x3E6BC4,
["englishK"] = 0x3E6454,
["englishGCN"] = 0x381304,
["japanese"] = 0x3E6D94,
["japaneseA"] = 0x3E7054,
["japaneseGCN"] = 0x000000,
["european"] = 0x3DE064,
["europeanA"] = 0x3DE404,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local entranceLast = {
["english"] = 0x1EF670,
["englishK"] = 0x1EEE80,
["englishGCN"] = 0x1ED830,
["japanese"] = 0x1EF460,
["japaneseA"] = 0x1EF710,
["japaneseGCN"] = 0x000000,
["european"] = 0x1E6B50,
["europeanA"] = 0x1E6EF0,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local entranceSetter = {
["english"] = 0x3FF398,
["englishK"] = 0x3FEC28,
["englishGCN"] = 0x399AD8,
["japanese"] = 0x3FF548,
["japaneseA"] = 0x3FF808,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F6838,
["europeanA"] = 0x3F6BD8,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local loadFlag = {
["english"] = 0x3FF395,
["englishK"] = 0x3FEC25,
["englishGCN"] = 0x399AD5,
["japanese"] = 0x3FF545,
["japaneseA"] = 0x3FF805,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F6835,
["europeanA"] = 0x3F6BD5,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local facingAngle = {
["english"] = 0x3FFE6E,
["englishK"] = 0x3FF73E,
["englishGCN"] = 0x39A5AE,
["japanese"] = 0x40005E,
["japaneseA"] = 0x40031E,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F730E,
["europeanA"] = 0x3F76AE,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local xCoordinate = {
["english"] = 0x3FFDD4,
["englishK"] = 0x3FF6A4,
["englishGCN"] = 0x39A514,
["japanese"] = 0x3FFFC4,
["japaneseA"] = 0x400284,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F7274,
["europeanA"] = 0x3F7614,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local yCoordinate = {
["english"] = 0x3FFDD8,
["englishK"] = 0x3FF6A8,
["englishGCN"] = 0x39A518,
["japanese"] = 0x3FFFC8,
["japaneseA"] = 0x400288,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F7278,
["europeanA"] = 0x3F7618,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local zCoordinate = {
["english"] = 0x3FFDDC,
["englishK"] = 0x3FF6AC,
["englishGCN"] = 0x39A51C,
["japanese"] = 0x3FFFCC,
["japaneseA"] = 0x40028C,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F727C,
["europeanA"] = 0x3F761C,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local xVelocity = {
["english"] = 0x400880,
["englishK"] = 0x400150,
["englishGCN"] = 0x39AFC0,
["japanese"] = 0x400A70,
["japaneseA"] = 0x400D30,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F7D20,
["europeanA"] = 0x3F80C0,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local yVelocity = {
["english"] = 0x3FFE18,
["englishK"] = 0x3FF6E8,
["englishGCN"] = 0x39A558,
["japanese"] = 0x400008,
["japaneseA"] = 0x4002C8,
["japaneseGCN"] = 0x000000,
["european"] = 0x3F72B8,
["europeanA"] = 0x3F7658,
["europeanGCN"] = 0x000000,
["europeanD"] = 0x000000
}
local isPressed = false
local location = 1
local scenes = {
[1] = 54816,
["1"] = "North Clock Town",
[2] = 55296,
["2"] = "South Clock Town",
[3] = 53808,
["3"] = "East Clock Town",
[4] = 54304,
["4"] = "West Clock Town",
[5] = 33792,
["5"] = "Southern Swamp",
[6] = 49664,
["6"] = "Woods of Mystery",
[7] = 20480,
["7"] = "Deku Palace (Swamp)",
[8] = 20592,
["8"] = "Deku Palace (Grotto)",
[9] = 39520,
["9"] = "Mountain Village",
[10] = 37888,
["10"] = "Goron Village",
[11] = 15872,
["11"] = "Milk Road",
[12] = 25600,
["12"] = "Romani Ranch",
[13] = 26624,
["13"] = "Great Bay Coast",
[14] = 22528,
["14"] = "Marine Research Lab",
[15] = 28672,
["15"] = "Pirate's Fortress (Exterior)",
[16] = 16528,
["16"] = "Pirate's Fortress (Sewers)",
[17] = 8704,
["17"] = "Pirate's Fortress (Interior)",
[18] = 16384,
["18"] = "Pirate's Fortress (Hookshot)",
[19] = 17408,
["19"] = "Pinnacle Rock",
[20] = 27136,
["20"] = "Zora Cape",
[21] = 27168,
["21"] = "Zora Cape (Turtle)",
[22] = 24576,
["22"] = "Zora Hall",
[23] = 36352,
["23"] = "Waterfall Rapids",
[24] = 32768,
["24"] = "Ikana Graveyard",
[25] = 2576,
["25"] = "Grave (Day 1)",
[26] = 2560,
["26"] = "Grave (Day 2)",
[27] = 23056,
["27"] = "Dampe's House",
[28] = 8256,
["28"] = "Ikana Canyon",
[29] = 36864,
["29"] = "Beneath the Well",
[30] = 38912,
["30"] = "Sakon's Hideout",
[31] = 47616,
["31"] = "Secret Shrine",
[32] = 43568,
["32"] = "Stone Tower",
[33] = 13328,
["33"] = "Ancient Castle of Ikana",
[34] = 12288,
["34"] = "Woodfall Temple",
[35] = 15360,
["35"] = "Snowhead Temple",
[36] = 35840,
["36"] = "Great Bay Temple",
[37] = 9728,
["37"] = "Stone Tower Temple",
[38] = 10752,
["38"] = "Inverted Stone Tower Temple",
[39] = 14336,
["39"] = "Odolwa's Room",
[40] = 33280,
["40"] = "Goht's Room",
[41] = 47104,
["41"] = "Gyorg's Room",
[42] = 26112,
["42"] = "Twinmold's Room",
[43] = 42496,
["43"] = "Igo's Du Ikana Room",
[44] = 512,
["44"] = "Majora's Room",
[45] = 18432,
["45"] = "Swamp Spider House",
[46] = 18944,
["46"] = "Ocean Spider House",
[47] = 51200,
["47"] = "Moon",
[48] = 19968,
["48"] = "Woodfall Trial",
[49] = 30720,
["49"] = "Snowhead Trial",
[50] = 34816,
["50"] = "Great Bay Trial",
[51] = 50688,
["51"] = "Stone Tower Trial",
}
-- Anchor for Text Display
local x = 1
local y = 65
function setLocation(i)
isPressed = true
location = location + i
if (location < 1) then
location = table.getn(scenes)
elseif (location > table.getn(scenes)) then
location = 1
end
end
function warp(i)
memory.write_u32_be(entranceSetter[version], scenes[i])
memory.write_u8(loadFlag[version], 20)
end
function textDisplay()
-- Text Display
gui.drawText(x + 1, y + 1, string.format("Scene:"), "BLACK")
gui.drawText(x, y, string.format("Scene:"))
gui.drawText(x + 101, y + 1, string.format("%04s", bizstring.hex(memory.read_u16_be(scene[version]))), "BLACK")
gui.drawText(x + 100, y, string.format("%04s", bizstring.hex(memory.read_u16_be(scene[version]))))
gui.drawText(x + 1, y + 13, string.format("Entrance:"), "BLACK")
gui.drawText(x, y + 12, string.format("Entrance:"))
gui.drawText(x + 101, y + 13, string.format("%04s", bizstring.hex(memory.read_u32_be(entranceLast[version]))), "BLACK")
gui.drawText(x + 100, y + 12, string.format("%04s", bizstring.hex(memory.read_u32_be(entranceLast[version]))))
gui.drawText(x + 1, y + 25, string.format("Setter:"), "BLACK")
gui.drawText(x, y + 24, string.format("Setter:"))
gui.drawText(x + 101, y + 25, string.format("%04s", bizstring.hex(memory.read_u32_be(entranceSetter[version]))), "BLACK")
gui.drawText(x + 100, y + 24, string.format("%04s", bizstring.hex(memory.read_u32_be(entranceSetter[version]))))
gui.drawText(x + 1, y + 43, string.format("X:"), "BLACK")
gui.drawText(x, y + 42, string.format("X:"))
gui.drawText(x + 78, y + 43, string.format("% 7.1f", memory.readfloat(xCoordinate[version], true)), "BLACK")
gui.drawText(x + 77, y + 42, string.format("% 7.1f", memory.readfloat(xCoordinate[version], true)))
gui.drawText(x + 1, y + 55, string.format("Y:"), "BLACK")
gui.drawText(x, y + 54, string.format("Y:"))
gui.drawText(x + 78, y + 55, string.format("% 7.1f", memory.readfloat(yCoordinate[version], true)), "BLACK")
gui.drawText(x + 77, y + 54, string.format("% 7.1f", memory.readfloat(yCoordinate[version], true)))
gui.drawText(x + 1, y + 67, string.format("Z:"), "BLACK")
gui.drawText(x, y + 66, string.format("Z:"))
gui.drawText(x + 78, y + 67, string.format("% 7.1f", memory.readfloat(zCoordinate[version], true)), "BLACK")
gui.drawText(x + 77, y + 66, string.format("% 7.1f", memory.readfloat(zCoordinate[version], true)))
gui.drawText(x + 1, y + 79, string.format("V (X):"), "BLACK")
gui.drawText(x, y + 78, string.format("V (X):"))
gui.drawText(x + 93, y + 79, string.format("% 5.1f", memory.readfloat(xVelocity[version], true)), "BLACK")
gui.drawText(x + 92, y + 78, string.format("% 5.1f", memory.readfloat(xVelocity[version], true)))
gui.drawText(x + 1, y + 91, string.format("V (Y):"), "BLACK")
gui.drawText(x, y + 90, string.format("V (Y):"))
gui.drawText(x + 93, y + 91, string.format("% 5.1f", memory.readfloat(yVelocity[version], true)), "BLACK")
gui.drawText(x + 92, y + 90, string.format("% 5.1f", memory.readfloat(yVelocity[version], true)))
gui.drawText(x + 1, y + 109, string.format("Angle:"), "BLACK")
gui.drawText(x, y + 108, string.format("Angle:"))
gui.drawText(x + 93, y + 109, string.format("%05d", memory.read_u16_be(facingAngle[version])), "BLACK")
gui.drawText(x + 92, y + 108, string.format("%05d", memory.read_u16_be(facingAngle[version])))
gui.drawText(x + 1, y + 127, string.format("Warp Destination:"), "BLACK")
gui.drawText(x, y + 126, string.format("Warp Destination:"))
gui.drawText(x + 1, y + 139, string.format("%s", scenes["" .. location]), "BLACK")
gui.drawText(x, y + 138, string.format("%s", scenes["" .. location]))
end
while true do
-- Warping
if input.get().PageUp == true and isPressed == false then
setLocation(-1)
elseif input.get().PageDown == true and isPressed == false then
setLocation(1)
elseif input.get().Home == true and isPressed == false then
warp(location)
elseif input.get().PageUp == null and input.get().PageDown == null and input.get().Home == null then
isPressed = false
end
textDisplay()
emu.frameadvance()
end
Comments
0 B
|👍
/👎