From 6fe4a580560cc31fb3459ca26f68747d4c593b21 Mon Sep 17 00:00:00 2001 From: Connor Olding Date: Tue, 17 Mar 2015 14:58:07 -0700 Subject: [PATCH] preliminary OoT support --- Lua/A O US10.lua | 188 ++++++++++++++++ Lua/actor lister.lua | 89 +++++--- Lua/actor names oot.lua | 474 ++++++++++++++++++++++++++++++++++++++++ Lua/addrs.lua | 6 + 4 files changed, 727 insertions(+), 30 deletions(-) create mode 100644 Lua/A O US10.lua create mode 100644 Lua/actor names oot.lua diff --git a/Lua/A O US10.lua b/Lua/A O US10.lua new file mode 100644 index 0000000..5051416 --- /dev/null +++ b/Lua/A O US10.lua @@ -0,0 +1,188 @@ +A = require "boilerplate" + +local link = 0x11A5D0 +local global = 0x1C84A0 +local actor = 0x1DAA30 + +function AL(a, s) return A(link+a, s) end +function AG(a, s) return A(global+a, s) end +function AA(a, s) return A(actor+a, s) end + +function merge(t1, t2) + for k, v in pairs(t1) do + t2[k] = v + end + return t2 +end + +function Actor(addr) + local function AA(a, s) return A(addr+a, s) end + return { + num = AA(0x0, 2), + type = AA(0x2, 1), + room_number = AA(0x3, 1), + flags = AA(0x4, 4), + x_copy = AA(0x8, 'f'), + y_copy = AA(0xC, 'f'), + z_copy = AA(0x10, 'f'), + x_rot_init = AA(0x14, 2), + y_rot_init = AA(0x16, 2), + z_rot_init = AA(0x18, 2), + var = AA(0x1C, 2), + x = AA(0x24, 'f'), + y = AA(0x28, 'f'), + z = AA(0x2C, 'f'), + --x_rot_init = AA(0x30, 2), + --y_rot_init = AA(0x32, 2), + --z_rot_init = AA(0x34, 2), + --x_rot_init = AA(0x44, 2), + --y_rot_init = AA(0x46, 2), + --z_rot_init = AA(0x48, 2), + angle_old = AA(0x4A, 2), -- TODO: verify + x_scale = AA(0x50, 'f'), + y_scale = AA(0x54, 'f'), + z_scale = AA(0x58, 'f'), + x_vel = AA(0x5C, 'f'), + y_vel = AA(0x60, 'f'), + z_vel = AA(0x64, 'f'), + --lin_vel_old = AA(0x70, 'f'), + --ground_y = AA(0x88, 'f'), + damage_table = AA(0xA0, 4), -- FIXME + --hp = AA(0xB7, 1), -- FIXME + --angle = AA(0xBA, 2), + --foot_left_x = AA(0xD4, 'f'), + --foot_left_y = AA(0xD8, 'f'), + --foot_left_z = AA(0xDC, 'f'), + --foot_right_x = AA(0xE0, 'f'), + --foot_right_y = AA(0xE4, 'f'), + --foot_right_z = AA(0xE8, 'f'), + --camera_rel_x = AA(0xEC, 'f'), + --camera_rel_y = AA(0xF0, 'f'), + --camera_rel_z = AA(0xF4, 'f'), + --unknown_z = AA(0xF8, 'f'), + --x_old = AA(0x108, 'f'), + --y_old = AA(0x10C, 'f'), + --z_old = AA(0x108, 'f'), + prev = AA(0x120, 4), + next = AA(0x124, 4), + } +end + +local common = { + exit_value = AL(0x02, 2), + age_modifier = AL(0x04, 4), + --cutscene_status = AL(0x0A, 2), + time = AL(0x0C, 2), + day_night = AL(0x10, 4), + --time_speed = AL(0x14, 4), + ZELDA3 = AL(0x1C, 6), -- actually ZELDAZ in OoT + death_count = AL(0x22, 2), + name = AL(0x24, 8), + max_hearts = AL(0x2E, 2), + hearts = AL(0x30, 2), + --has_magic = AL(0x38, 1), -- ? + magic = AL(0x33, 1), + rupees = AL(0x34, 2), + --has_normal_magic = AL(0x40, 1), + --has_double_magic = AL(0x41, 1), + equip_tunic_boots = AL(0x70, 1), + equip_sword_shield = AL(0x71, 1), + inventory_items = AL(0x74, 24), + inventory_counts = AL(0x8C, 24), + --magic_beans_avail = AL(0x9B, 1), + --tunic_boots = AL(0x9C, 1), -- FIXME + --sword_shield = AL(0x9C, 1), -- FIXME + deku_upgrades = AL(0xA1, 1), + wallet_size = AL(0xA2, 1), -- also bullet bag & dive meter in OoT + quiver_bag = AL(0xA3, 1), -- also strength in OoT + --quest_items = AL(0xBC, 4), + --items_wft = AL(0xC0, 1), + --keys_wft = AL(0xCA, 1), + --doubled_hearts = AL(0xD3, 1), -- set to 20 by the game + --strange_string = AL(0xDE, 6), + --scene_flags_save = AL(0x470, 0x960), + --slulltula_count_wf = AL(0xEC0, 2), + --archery = AL(0xF00, 1), + --disable_c_buttons = AL(0xF4A, 1), -- 8 + --sword_disable_c = AL(0xF52, 1), -- 32 + --map_visited = AL(0xF5E, 2), + --map_visible = AL(0xF62, 2), + + inventory = { + b_button = AL(0x68, 1), + c_left_item = AL(0x69, 1), + c_down_item = AL(0x6A, 1), + c_right_item = AL(0x6B, 1), + c_left_slot = AL(0x6C, 1), + c_down_slot = AL(0x6D, 1), + c_right_slot = AL(0x6E, 1), + b_button_slot = AL(0x6F, 1), -- unused? + + ocarina = AL(0x74, 1), + bow = AL(0x75, 1), -- FIXME + fire_arrows = AL(0x76, 1), + ice_arrows = AL(0x77, 1), + light_arrows = AL(0x78, 1), + event_1 = AL(0x79, 1), + bombs = AL(0x7A, 1), + bombchu = AL(0x7B, 1), + deku_stick = AL(0x7C, 1), + deku_nut = AL(0x7D, 1), + magic_beans = AL(0x7E, 1), + event_2 = AL(0x7F, 1), + powder_keg = AL(0x80, 1), + pictograph = AL(0x81, 1), + lens_of_truth = AL(0x82, 1), + hookshot = AL(0x83, 1), + fairy_sword = AL(0x84, 1), + event_3 = AL(0x85, 1), + bottle_1 = AL(0x85, 1), + bottle_2 = AL(0x86, 1), + bottle_3 = AL(0x87, 1), + bottle_4 = AL(0x88, 1), + bottle_5 = AL(0x89, 1), + bottle_6 = AL(0x8A, 1), + }, + quantities = { + arrows = AL(0xA1, 1), -- FIXME + bombs = AL(0xA6, 1), + bombchu = AL(0xA7, 1), + sticks = AL(0xA8, 1), + nuts = AL(0xA9, 1), + beans = AL(0xAA, 1), + kegs = AL(0xAC, 1), + }, + + camera_target = AG(0x270, 4), + actor_count = AG(0x1C2C, 1), + actor_count_0 = AG(0x1C30, 4), + actor_first_0 = AG(0x1C34, 4), + actor_count_1 = AG(0x1C38, 4), + actor_first_1 = AG(0x1C3C, 4), + actor_count_2 = AG(0x1C40, 4), + actor_first_2 = AG(0x1C44, 4), + actor_count_3 = AG(0x1C48, 4), + actor_first_3 = AG(0x1C4C, 4), + actor_count_4 = AG(0x1C50, 4), + actor_first_4 = AG(0x1C54, 4), + actor_count_5 = AG(0x1C58, 4), + actor_first_5 = AG(0x1C5C, 4), + actor_count_6 = AG(0x1C60, 4), + actor_first_6 = AG(0x1C64, 4), + actor_count_7 = AG(0x1C68, 4), + actor_first_7 = AG(0x1C6C, 4), + actor_count_8 = AG(0x1C70, 4), + actor_first_8 = AG(0x1C74, 4), + actor_count_9 = AG(0x1C78, 4), + actor_first_9 = AG(0x1C7C, 4), + actor_count_10 = AG(0x1C80, 4), + actor_first_10 = AG(0x1C84, 4), + actor_count_11 = AG(0x1C88, 4), + actor_first_11 = AG(0x1C8C, 4), + z_cursor_actor = AG(0x1CC8, 4), + z_target_actor = AG(0x1CCC, 4), +} + +return merge(common, { + +}) diff --git a/Lua/actor lister.lua b/Lua/actor lister.lua index 3267119..344725f 100755 --- a/Lua/actor lister.lua +++ b/Lua/actor lister.lua @@ -1,18 +1,27 @@ require "boilerplate" local addrs = require "addrs" -local actor_names = require "actor names" -- bizhawk lua has some nasty memory leaks at the moment, -- so instead of creating an object every time, -- using a template to offset from will do for now. local actor_t = Actor(0) +local oot = version:sub(1, 2) == "O " +local al_next = addrs.actor_count_1.addr - addrs.actor_count_0.addr + +local actor_names +if oot then + actor_names = require "actor names oot" +else + actor_names = require "actor names" +end + function get_actor_count(i) - return R4(addrs.actor_count_0.addr + i*0xC) + return R4(addrs.actor_count_0.addr + i*al_next) end function get_first_actor(i) - return bit.band(R4(addrs.actor_first_0.addr + i*0xC), 0x7FFFFFFF) + return bit.band(R4(addrs.actor_first_0.addr + i*al_next), 0x7FFFFFFF) end function get_next_actor(addr) @@ -30,6 +39,8 @@ local seen_strs = {} local seen_strs_sorted = {} local last_any = 0 +local stupid = addrs.actor_count_0.addr - 0x8 + while true do local any = 0 for i = 0, 11 do @@ -38,6 +49,14 @@ while true do any = any + count end T(0, 1, ("sum:%3i"):format(any), nil, "bottomright") + if addrs.actor_count then + T(10, 1, ("sum:%3i"):format(R1(addrs.actor_count.addr)), 'cyan', "bottomright") + end + + if R4(stupid) ~= 0 then + T(0, 14, "stupid", "red", "bottomright") + any = 0 + end if any == 0 then seen = {} @@ -55,9 +74,11 @@ while true do local actor_type = 2 local actor_index = 0 local once = false - local i = 0 + local j = 0 while any > 0 and last_any ~= any do - if once and actor_type == 2 and actor_index == 0 then break end + if once and actor_type == 2 and actor_index == 0 then + break + end actor_index = actor_index + 1 local actor_count = get_actor_count(actor_type) @@ -85,6 +106,25 @@ while true do local num = R2(addr) local name = actor_names[num] + if name == nil and num < 0x300 then + name = "NEW" + actor_names[num] = name + print(("\t[0x%03X]=\"NEW\","):format(num)) + + if actor_t.damage_table and actor_t.hp then + local dmg = bit.band(addr + actor_t.damage_table.addr, 0x7FFFFFFF) + if dmg == 0 then + print("(no damage table)") + else + local hp = R1(addr + actor_t.hp.addr) + s = ("%04X\t%02X\t%02X"):format(num, actor_type, hp) + for i = 0, 31 do + s = s..("\t%02X"):format(R1(dmg + i)) + end + print(s) + end + end + end if num > 0x300 then print(("BAD %06X %04X (%2i:%2i)"):format(addr, num, actor_type, actor_index)) @@ -101,27 +141,14 @@ while true do seen_strs[num] = str print(str) end - - if name == nil and num < 0x300 then - actor_names[num] = "NEW" - print(("\t[0x%03X]=\"NEW\","):format(num)) - - local dmg = bit.band(addr + actor_t.damage_table.addr, 0x7FFFFFFF) - if dmg == 0 then - print("(no damage table)") - else - local hp = R1(addr + actor_t.hp.addr) - s = ("%04X\t%02X\t%02X"):format(num, actor_type, hp) - for i = 0, 31 do - s = s..("\t%02X"):format(R1(dmg + i)) - end - print(s) - end - end end - i = i + 1 + j = j + 1 once = true + if j > 255 then + print("something went terribly wrong") + do return end + end end last_any = any @@ -146,13 +173,15 @@ while true do T(0, 0, ("unique:%3i"):format(#seen_strs_sorted), nil, "bottomright") - local cursor = bit.band(addrs.z_cursor_actor(), 0x7FFFFFFF) - local target = bit.band(addrs.z_target_actor(), 0x7FFFFFFF) - local z = target or cursor - if z then - local num = R2(z) - T(0, 0, seen_strs[num], nil, "topright") + if once then + local cursor = bit.band(addrs.z_cursor_actor(), 0x7FFFFFFF) + local target = bit.band(addrs.z_target_actor(), 0x7FFFFFFF) + local z = target or cursor + if z then + local num = R2(z) + T(0, 0, seen_strs[num], nil, "topright") + end end - emu.yield() + emu.frameadvance() end diff --git a/Lua/actor names oot.lua b/Lua/actor names oot.lua new file mode 100644 index 0000000..a7abc1c --- /dev/null +++ b/Lua/actor names oot.lua @@ -0,0 +1,474 @@ +local unset="unset" +return { + [0x000]="Link", + [0x001]=unset, + [0x002]="Stalfos", + [0x003]=unset, + [0x004]="Shop Data", + [0x005]=unset, + [0x006]=unset, + [0x007]="???", + [0x008]="Flame", + [0x009]="Wooden Door", + [0x00A]="Treasure Chest", + [0x00B]="Great Fairy", + [0x00C]="Proximity-Activated Firewall", + [0x00D]="Graveyard Poe", + [0x00E]="Octorok", + [0x00F]="Spiderweb", + [0x010]="Bomb Placed by Link", + [0x011]="Wallmaster", + [0x012]="Dodongo", + [0x013]="Keese", + [0x014]="Epona", + [0x015]="Collectable Field & Dungeon Items", + [0x016]="Small Orange Flame (Fades Away)", + [0x017]=unset, + [0x018]="Navi & Healing Fairy", + [0x019]="Cucco", + [0x01A]=unset, + [0x01B]="Tektite", + [0x01C]="Leever", + [0x01D]="Peahat", + [0x01E]="Butterfly", + [0x01F]=unset, + [0x020]="Bug", + [0x021]="Fish", + [0x022]=unset, + [0x023]="Room Transition Plane", + [0x024]="???", + [0x025]="Lizalfos & Dinalfos", + [0x026]="Flagpole", + [0x027]="King Dodongo", + [0x028]="Gohma", + [0x029]="Child Zelda (Cutscene 05 & 06)", + [0x02A]="???", + [0x02B]="Gohma Larva", + [0x02C]="???", + [0x02D]="Shabom", + [0x02E]="Dungeon Door", + [0x02F]="Baby Dodongo", + [0x030]="King Dodongo's Fire", + [0x031]=unset, + [0x032]="Boomerang Thrown by Link", + [0x033]="Dark Link", + [0x034]="Biri", + [0x035]="Tailpasaran", + [0x036]=unset, + [0x037]="Skulltula", + [0x038]="Torch Slug", + [0x039]="Directional Signposts", + [0x03A]="Stinger (Land)", + [0x03B]="Environmental Sound Effects", + [0x03C]="Generic Horse", + [0x03D]="Shopkeeper", + [0x03E]="Deku Tree's Jaw", + [0x03F]="Dead Dodongo's Jaw", + [0x040]="Breakable Hammer Block", + [0x041]="??? Beige Face Block", + [0x042]="Ganondorf's Horse", + [0x043]="Fire-Powered Elevator Block", + [0x044]="Flame-Shooting Statue (Rotates)", + [0x045]="Flame-Shooting Statue (Spews Fire Intermittantly)", + [0x046]="Sinking Stone Platform (Fire Temple)", + [0x047]="Face Elevator ???", + [0x048]="Sheik", + [0x049]="Circle of Flames", + [0x04A]="Drawbridge", + [0x04B]="Moblin", + [0x04C]="Bomb Flower", + [0x04D]="Adult Zelda (Cutscenes)", + [0x04E]="???", + [0x04F]="Kokiri Girl (Early)", + [0x050]="Floating Square Platform (Deku Tree)", + [0x051]="Spiked Log & Dropdown Ladder", + [0x052]="Phantom Ganon", + [0x053]=unset, + [0x054]="Armos", + [0x055]="Deku Baba", + [0x056]="???", + [0x057]="???", + [0x058]="Elevator Platform (Dodongo's Cavern)", + [0x059]="Bombable Wall", + [0x05A]="Jabu-Jabu", + [0x05B]="Zelda's Horse", + [0x05C]="Bombable Stairs", + [0x05D]="Blue Warp & Rupee-Shaped Prism", + [0x05E]="Torch", + [0x05F]="Heart Container & Heart Piece???", + [0x060]="Mad Scrub", + [0x061]="Rotating Ring", + [0x062]="Statue Eye Targets", + [0x063]="Bari", + [0x064]="???", + [0x065]="Water (Water Temple)", + [0x066]="Link's Hookshot", + [0x067]="Phantom Ganon's Horse", + [0x068]="Twisting Corridor", + [0x069]="Bubble", + [0x06A]="Light Streaming From Windows", + [0x06B]="Flying Floor Tile", + [0x06C]="Master Sword", + [0x06D]="Phantom Ganon's Lightning", + [0x06E]="Blank Warp Pad & Ocarina Pedestal", + [0x06F]="Goron Prison Bars", + [0x070]="Door of Time Collision Model", + [0x071]="???", + [0x072]="Brown Bird", + [0x073]=unset, + [0x074]=unset, + [0x075]=unset, + [0x076]=unset, + [0x077]="Grass & Trees", + [0x078]=unset, + [0x079]=unset, + [0x07A]=unset, + [0x07B]=unset, + [0x07C]="Grey Rectangular Block", + [0x07D]="Grey Rectangular Stone Block", + [0x07E]=unset, + [0x07F]=unset, + [0x080]="Sliding Blade Trap", + [0x081]="Arrow-Reflecting Trap", + [0x082]="Orange Pot", + [0x083]=unset, + [0x084]="Talon", + [0x085]="Dampé", + [0x086]="Bow Room Platform", + [0x087]="Sun Elevator", + [0x088]="Rotating Pre-Boss Room", + [0x089]="Collapsing Checkerboard Ceiling", + [0x08A]="Beamos", + [0x08B]="??? Swallowable by Jabu-Jabu?", + [0x08C]="???", + [0x08D]="???", + [0x08E]="Floormaster", + [0x08F]="Hylian Soldier (Castle Hedge Maze)", + [0x090]="Redead & Gibdo", + [0x091]="Poe Sisters", + [0x092]="Golden Gauntlets Rock", + [0x093]="???", + [0x094]="Group of Fish/Bugs/Butterflies", + [0x095]="Skullwalltula", + [0x096]="Volvagia (Flying)", + [0x097]="Weather Effects", + [0x098]="Darunia", + [0x099]="Flare Dancer", + [0x09A]="Child Epona", + [0x09B]="Grotto Hole", + [0x09C]="Graveyard Objects", + [0x09D]="Gravestone", + [0x09E]="Farore's Wind Effect", + [0x09F]="Din's Fire Effect", + [0x0A0]=unset, + [0x0A1]="Child Ruto", + [0x0A2]="Volvagia (Whack-a-Mole)", + [0x0A3]="Flare Dancer Fireball", + [0x0A4]="Dead Hand", + [0x0A5]="Dead Hand's Hands", + [0x0A6]="Rauru", + [0x0A7]="Enemy Spawner", + [0x0A8]="Darunia", + [0x0A9]="Impa", + [0x0AA]="Treasure Chest Light", + [0x0AB]="Flare Dancer Core", + [0x0AC]="???", + [0x0AD]="Volvagia's Rocks", + [0x0AE]="???", + [0x0AF]="Invisible Wall", + [0x0B0]="Charon's Boat", + [0x0B1]="Spinning Scythes", + [0x0B2]=unset, + [0x0B3]="Hylian Soldier (Castle Gate Guard/Castle Courtyard/Kakariko Village)", + [0x0B4]="Falling Boulder Spawner", + [0x0B5]="Flaming Debris", + [0x0B6]="Stunnable Jelly Platform", + [0x0B7]="Reflected Ray of Light", + [0x0B8]="Gerudo Valley Objects", + [0x0B9]="Goron City Objects", + [0x0BA]="Barinade", + [0x0BB]="Flaming Skull Vase", + [0x0BC]="Guillotine", + [0x0BD]="Coffin Lid", + [0x0BE]="???", + [0x0BF]="Smoke Plume", + [0x0C0]="Shooting Gallery Items", + [0x0C1]="Shooting Gallery Owner", + [0x0C2]="Shop Shelves", + [0x0C3]="Nabooru", + [0x0C4]="Morpha", + [0x0C5]="Shellblade", + [0x0C6]="Big Octorok", + [0x0C7]="Wilted Deku Baba", + [0x0C8]="Inside Jabu-Jabu's Belly Objects", + [0x0C9]="Saria (Cutscenes)", + [0x0CA]="Goron (Cutscenes)", + [0x0CB]="Ingo", + [0x0CC]="Kotake & Koume", + [0x0CD]="Boulder Blocking Dodongo's Cavern", + [0x0CE]=unset, + [0x0CF]="Bombable Wall (Fire Temple)", + [0x0D0]="Bombable Wall (Death Mountain Trail)", + [0x0D1]="Floating Ice Platform", + [0x0D2]="Adult Ruto", + [0x0D3]="Deku Tree Sprout", + [0x0D4]="Water Current", + [0x0D5]="Lake Hylia Objects", + [0x0D6]="Ice Cavern Objects", + [0x0D7]="Moat Water (Bottom of the Well)", + [0x0D8]=unset, + [0x0D9]="Adult Malon (Stable & Lon Lon Ranch - Ingo Ousted)", + [0x0DA]="Bombchu Placed by Link", + [0x0DB]="???", + [0x0DC]="Twinrova", + [0x0DD]="Like Like", + [0x0DE]="Parasitic Tentacle", + [0x0DF]="Tentacle Obstruction", + [0x0E0]="Anubis", + [0x0E1]="Anubis-Killing Fire Trap", + [0x0E2]="Dropdown Ladder", + [0x0E3]="Rotating Lava Room Platforms", + [0x0E4]="Well Path Water", + [0x0E5]="Death Mountain Cloud Ring", + [0x0E6]="Inside Jabu-Jabu's Belly Switch", + [0x0E7]="Child Malon", + [0x0E8]="Ganondorf (Boss)", + [0x0E9]="Bongo Bongo", + [0x0EA]=unset, + [0x0EB]=unset, + [0x0EC]="Spike Trap", + [0x0ED]="Frog", + [0x0EE]="Collectable Deku Shield", + [0x0EF]="Meltable Ice Covering", + [0x0F0]="Blue Fire", + [0x0F1]="Collectable Ocarina of Time", + [0x0F2]=unset, + [0x0F3]=unset, + [0x0F4]="Nayru's Love Effect", + [0x0F5]="Light Orbs Representing the Sages", + [0x0F6]="Anubis Spawner", + [0x0F7]="???", + [0x0F8]="Hyrule Castle Gate", + [0x0F9]="Rolling Boulder (Spirit Temple)", + [0x0FA]="Shifting Wall (Spirit Temple)", + [0x0FB]=unset, + [0x0FC]="Snake Statue", + [0x0FD]="Mesh Bridge", + [0x0FE]="Fishing Pond Objects", + [0x0FF]="Pushblock", + [0x100]="Gate to Death Mountain Trail", + [0x101]="Particles Inhaled by Jabu-Jabu", + [0x102]="Windmill Blades", + [0x103]="Wooden Well Beams", + [0x104]="Well Water (Kakariko Village)", + [0x105]="Torch (Poe Sisters)", + [0x106]="Ganondorf's Lair Floor Tile", + [0x107]="Lon Lon Milk Crate", + [0x108]="Horse Jumping Fence", + [0x109]=unset, + [0x10A]="Collectable Fire Arrows", + [0x10B]="Collectable Ice Arrows", + [0x10C]="Collectable Light Arrows", + [0x10D]=unset, + [0x10E]=unset, + [0x10F]="Collectable Quest Items", + [0x110]="Small Wooden Crate", + [0x111]="Pot", + [0x112]="Invisible Collectable Items", + [0x113]="Iron Knuckle", + [0x114]="Iron Knuckle (Cutscenes)", + [0x115]="Skullkid", + [0x116]="Skullkid's Needle", + [0x117]="Silver Rupee", + [0x118]="Kotake & Koume's Portal", + [0x119]="Bongo Bongo's Shadow", + [0x11A]="Business Scrub (After Surrender)", + [0x11B]="Navi Message (Automatically Triggered)", + [0x11C]="Eye Switch (Shoots Flames)", + [0x11D]="Flying Pot", + [0x11E]="???", + [0x11F]="Waterfall (Zora's River)", + [0x120]="Waterfall (Zora's Domain)", + [0x121]="Freezard", + [0x122]="Dampé's Ghost", + [0x123]="Dampé's Relay Objects", + [0x124]="Diving Game Zora", + [0x125]="Grass Clump", + [0x126]="Bean Planting Spot", + [0x127]="Bombable Boulder", + [0x128]=unset, + [0x129]=unset, + [0x12A]="Bronze Switch/Diamond Switch/Eye Switch", + [0x12B]="Stone Elevator", + [0x12C]="Deku Tree Elevator", + [0x12D]="Hookshot Target Pillar", + [0x12E]="Ocarina Spot", + [0x12F]="???", + [0x130]="Rolling Boulder", + [0x131]="Rupee (Deku Target Game)", + [0x132]="Carpenter Boss", + [0x133]="Carpenter (Thieves' Hideout & Carpenters' Tent)", + [0x134]=unset, + [0x135]="Cucco Chick", + [0x136]="Dark Link's Illusion Room", + [0x137]="???", + [0x138]="Gerudo in White", + [0x139]="???", + [0x13A]="Realistic Shadow", + [0x13B]="Arwing", + [0x13C]="Chicken Lady", + [0x13D]="Medigoron", + [0x13E]="Bean Seller", + [0x13F]="Carpenter Boss's Son (Lost Woods)", + [0x140]="Gate to Ingo's Ranch", + [0x141]="Square Sign", + [0x142]="Hylian Soldier (Hyrule Castle)", + [0x143]="???", + [0x144]="Cucco (Attacking)", + [0x145]="Rocks Blocking the Bottom of the Well", + [0x146]="Saria", + [0x147]="???", + [0x148]="Rainbow Bridge", + [0x149]="Potion Shop Granny", + [0x14A]="Lake Scientist", + [0x14B]="Bombchu Bowling Alley Employee", + [0x14C]="???", + [0x14D]="Kaepora Gaebora", + [0x14E]="Silver Gauntlets Boulder", + [0x14F]="Graveyard Flower", + [0x150]="Sun Switch", + [0x151]="Groups of Rocks & Bushes", + [0x152]="Goron (Early)", + [0x153]="Windmill Man", + [0x154]=unset, + [0x155]="Treasure Chest (Treasure Chest Shop)", + [0x156]="Goddess Statue", + [0x157]="Ceiling Elevator", + [0x158]="Ceiling Mirror", + [0x159]="Bombable Bombchu Boulder", + [0x15A]="Hookshottable Grate", + [0x15B]="???", + [0x15C]="Spinning Goron Vase", + [0x15D]=unset, + [0x15E]="Ganondorf's Organ", + [0x15F]="Small Water Spout", + [0x160]="Big Water Spout", + [0x161]=unset, + [0x162]="Running Man (Hyrule Field & Ending)", + [0x163]="Kokiri Spawner", + [0x164]="King Zora", + [0x165]="Weather-Changing Tag", + [0x166]="Bongo Bongo's Drum Head", + [0x167]="Kakariko Rooftop Man", + [0x168]="Bombchu Bowling Prizes???", + [0x169]="Iron Knuckle Throne & Columns", + [0x16A]="Carpet Merchant", + [0x16B]="Carpet Merchant's Magic Carpet", + [0x16C]="Graveyard Boy", + [0x16D]="Mido", + [0x16E]="Hylian Spawner", + [0x16F]="Ganondorf's Cape", + [0x170]="Song of Storms Effect", + [0x171]="Title Screen Overlay", + [0x172]="Thieves' Hideout Jail Cell Door", + [0x173]="Navi Message (Targetable)", + [0x174]="???", + [0x175]="Big Poe", + [0x176]="???", + [0x177]="Gate Barring Escape From Ganon's Tower", + [0x178]="Hylian Soldier (Hyrule Castle Town/Kakariko Village)", + [0x179]="Adult Zelda (Normal Gameplay)", + [0x17A]="Ganon", + [0x17B]="Pierre (Lake Hylia)", + [0x17C]="Treasure Chest Shop Owner", + [0x17D]="Make Pushblock", + [0x17E]="Sun's Song Effect", + [0x17F]="Ending Overlays", + [0x180]=unset, + [0x181]="Grotto Treasure Chest", + [0x182]="Ending Cutscene NPCs", + [0x183]="???", + [0x184]="Great Fairy's Healing Beam", + [0x185]="Checkable Spot", + [0x186]="Patrolling Gerudo in Purple", + [0x187]="???", + [0x188]="Skulltula House Resident (Cursed)", + [0x189]="Skulltula House Resident (Curse Lifted)", + [0x18A]="Song of Time Effect", + [0x18B]="Song of Storms Effect", + [0x18C]="Stinger (Water)", + [0x18D]="Sacred Forest Meadow Pond Bottom", + [0x18E]="Spirit Temple Entrance Room Elevator", + [0x18F]="Iron Knuckle Debris", + [0x190]="Gate to the Haunted Wasteland", + [0x191]="Gate to the Gerudo Training Ground", + [0x192]="Hint-Giving Deku Scrubs", + [0x193]="Deku Scrub Projectile", + [0x194]="Broken Drawbridge", + [0x195]="Business Scrub (Attacking)", + [0x196]="Collectable Grave-Digging Game Items", + [0x197]="Gerudo Fighter", + [0x198]="Epona's Song Effect", + [0x199]="Saria's Song Effect", + [0x19A]="Girl Chasing Cucco", + [0x19B]="Dog", + [0x19C]="Gold Skulltula Token", + [0x19D]="Kakariko Village Objects", + [0x19E]="Beehive", + [0x19F]="Bombable Wall (Desert Colossus)", + [0x1A0]="Wooden Crate", + [0x1A1]="Deku Stage Actor Spawner", + [0x1A2]="Deku Stage Judge", + [0x1A3]="Deku Scrub (Deku Target Game)", + [0x1A4]="Happy Mask Shop Customer", + [0x1A5]="Bombchu Bowling Alley Walls", + [0x1A6]="Carpenter Boss's Son (Kakariko Village)", + [0x1A7]="Ganon's Castle Barrier", + [0x1A8]="Bombable Wall (Zora's Fountain)", + [0x1A9]="Bombable Wall (Death Mountain Crater)", + [0x1AA]=unset, + [0x1AB]="Group of Rupees", + [0x1AC]="Honey & Darling", + [0x1AD]="Haggling Shoppers", + [0x1AE]="Goron & Biggoron", + [0x1AF]="Wolfos", + [0x1B0]="Stalchild", + [0x1B1]="???", + [0x1B2]="???", + [0x1B3]="Sinking Zig-Zag Platform (Fire Medallion Minidungeon)", + [0x1B4]="Invisible Path (Shadow Medallion Minidungeon)", + [0x1B5]="???", + [0x1B6]="Invisible Wall (Inside Ganon's Castle)", + [0x1B7]="Ice Pushblock (Water Medallion Minidungeon)", + [0x1B8]="Poe Collector", + [0x1B9]="Gossip Stone", + [0x1BA]="Bombable Wall (Water Temple)", + [0x1BB]="Water Temple Gate", + [0x1BC]="Kakariko Village - Carpenter", + [0x1BD]="Bombchu Bowling Alley Walls", + [0x1BE]="???", + [0x1BF]="Guiding Poe (Haunted Wasteland)", + [0x1C0]="Guay", + [0x1C1]="Door Mimic", + [0x1C2]="Oasis Water", + [0x1C3]="Spinning Goron Vase Lid", + [0x1C4]="Door to Darunia's Room", + [0x1C5]="Adult Malon (Day)", + [0x1C6]="Cow", + [0x1C7]="Icicle", + [0x1C8]="Ice Cavern Bars", + [0x1C9]="Pierre (Wandering)", + [0x1CA]="Bonooru", + [0x1CB]="Scarecrow's Song Effect", + [0x1CC]="???", + [0x1CD]="Fake Wall (Gerudo Training Ground)", + [0x1CE]="Zora", + [0x1CF]="Gold Skulltula Spawner", + [0x1D0]="Nabooru's Second-in-Command", + [0x1D1]="Time Block", + [0x1D2]="Bronze Boulder (Breakable Using Hammer)", + [0x1D3]="Child Zelda (Normal Gameplay & Cutscene 04)", + [0x1D4]="Carpenters' Tent & Race - Running Man", + [0x1D5]="???", + [0x1D6]="Time Block", +} diff --git a/Lua/addrs.lua b/Lua/addrs.lua index 74e134b..f750241 100755 --- a/Lua/addrs.lua +++ b/Lua/addrs.lua @@ -1,4 +1,5 @@ versions = { -- sha1 hashes of .z64s + -- Majora's Mask ['D6133ACE5AFAA0882CF214CF88DABA39E266C078'] = "US10", ['2F0744F2422B0421697A74B305CB1EF27041AB11'] = "USDE", ['9743AA026E9269B339EB0E3044CD5830A440C1FD'] = "USGC", @@ -9,6 +10,11 @@ versions = { -- sha1 hashes of .z64s ['5FB2301AACBF85278AF30DCA3E4194AD48599E36'] = "JP10", ['41FDB879AB422EC158B4EAFEA69087F255EA8589'] = "JP11", ['1438FD501E3E5B25461770AF88C02AB1E41D3A7E'] = "JPGC", + + -- Ocarina of Time + ['AD69C91157F6705E8AB06C79FE08AAD47BB57BA7'] = "O US10", + -- this is supposedly the same ROM, but i don't have it offhand to verify + ['79A4F053D34018E59279E6D4B83C7DACCD985C87'] = "O US10", } --while version == nil do