Files
yaze/docs/internal/zelda3/alttp-object-handlers.md

15 KiB
Raw Permalink Blame History

ALTTP Dungeon Object Handler Tables

Source: zelda3.sfc (usdasm) — generated via scripts/dump_object_handlers.py.

Table Summary

  • Type 1 (standard objects) — SNES $01:8200 — 256 entries
  • Type 2 (extended objects) — SNES $01:8470 — 64 entries
  • Type 3 (special objects) — SNES $01:85F0 — 128 entries

Type 1 (Object 0x0000x0FF)

  • Handler table: $01:8200 (PC 0x008200)
  • Total objects: 256
  • Unique handlers: 100
  • Shared handlers: 156
  • Most common handlers:
    • $01:8AA3 — used by 32 objects
    • $01:8F62 — used by 22 objects
    • $01:8FA5 — used by 19 objects
    • $01:8C58 — used by 6 objects
    • $01:8C61 — used by 6 objects

Example entries:

  • 0x000 → $01:8B89
  • 0x001 → $01:8A92
  • 0x005 → $01:8C37
  • 0x009 → $01:8C58
  • 0x00A → $01:8C61

Type 2 (Object 0x0000x03F)

  • Handler table: $01:8470 (PC 0x008470)
  • Total objects: 64
  • Unique handlers: 30
  • Shared handlers: 34
  • Most common handlers:
    • $01:97ED — used by 12 objects
    • $01:9813 — used by 8 objects
    • $01:9895 — used by 7 objects
    • $01:9854 — used by 4 objects
    • $01:985C — used by 4 objects

Example entries:

  • 0x000 → $01:97ED
  • 0x010 → $01:9854
  • 0x01D → $01:8F30
  • 0x02D → $01:A41B
  • 0x03F → $01:9A0C

Type 3 (Object 0x0000x07F)

  • Handler table: $01:85F0 (PC 0x0085F0)
  • Total objects: 128
  • Unique handlers: 59
  • Shared handlers: 69
  • Most common handlers:
    • $01:9895 — used by 35 objects
    • $01:9C3E — used by 10 objects
    • $01:99E6 — used by 7 objects
    • $01:9BD9 — used by 4 objects
    • $01:97ED — used by 4 objects

Example entries:

  • 0x000 → $01:9D29
  • 0x00F → $01:9C3E
  • 0x016 → $01:B493
  • 0x02A → $01:9DE5
  • 0x07F → $01:8AA3

Handler Bytes (samples)

  • Handler $01:8B89 (Type1 Obj 0x000): first 64 bytes:
    20 CC B0 20 95 98 C6 B2 D0 F9 60 E6 B2 E6 B4 A5 B2 85 0A BD 52 9B 97 BF 97 C2 97 C5 97 C8 97 CB 97 CE 97 D1 97 D4 98 18 69 00 01 A8 BD 52 9B 97 BF 97 C2 97 C5 97 C8 97 CB 97 CE 97 D1 97 D4 98
  • Handler $01:8A92 (Type1 shared): first 32 bytes:
    20 BE B0 86 0A A9 02 00 20 F0 97 A6 0A C6 B2 D0 F4 60 8A BB A8 20 AC B0 B9 52 9B 9F 00 40 7E 9F
  • Handler $01:97ED (Type2 common): first 32 bytes:
    A9 04 00 85 0E BD 52 9B 97 BF BD 54 9B 97 CB BD 56 9B 97 D7 BD 58 9B 97 DA 8A 18 69 08 00 AA C8

Notes / Next Steps

  • Full per-object table (256/64/128 entries) was emitted by the script; consider importing the CSV/TSV variant if we want all rows in-doc.
  • Phase 1 follow-up: for each handler, map WRAM touches (tilemaps, offsets, flags) and shared subroutines in bank $01 to build alttp-wram-state.md.
  • Handler hotspots to debug (from prior plan): $01:3479 (reported loop); use cycle trace + WRAM init capture when emulating.

Full Handler Tables (from zelda3.sfc)

Type 1 (0x000-0x0FF)

Object Handler (SNES) Handler (PC)
0x000 $01:8B89 0x008B89
0x001 $01:8A92 0x008A92
0x002 $01:8A92 0x008A92
0x003 $01:8B0D 0x008B0D
0x004 $01:8B0D 0x008B0D
0x005 $01:8C37 0x008C37
0x006 $01:8C37 0x008C37
0x007 $01:8B79 0x008B79
0x008 $01:8B79 0x008B79
0x009 $01:8C58 0x008C58
0x00A $01:8C61 0x008C61
0x00B $01:8C61 0x008C61
0x00C $01:8C58 0x008C58
0x00D $01:8C58 0x008C58
0x00E $01:8C61 0x008C61
0x00F $01:8C61 0x008C61
0x010 $01:8C58 0x008C58
0x011 $01:8C58 0x008C58
0x012 $01:8C61 0x008C61
0x013 $01:8C61 0x008C61
0x014 $01:8C58 0x008C58
0x015 $01:8C58 0x008C58
0x016 $01:8C61 0x008C61
0x017 $01:8C61 0x008C61
0x018 $01:8C58 0x008C58
0x019 $01:8C58 0x008C58
0x01A $01:8C61 0x008C61
0x01B $01:8C61 0x008C61
0x01C $01:8C58 0x008C58
0x01D $01:8C58 0x008C58
0x01E $01:8C61 0x008C61
0x01F $01:8C61 0x008C61
0x020 $01:8C58 0x008C58
0x021 $01:8C58 0x008C58
0x022 $01:8C61 0x008C61
0x023 $01:8C61 0x008C61
0x024 $01:8C58 0x008C58
0x025 $01:8C58 0x008C58
0x026 $01:8C61 0x008C61
0x027 $01:8C61 0x008C61
0x028 $01:8C58 0x008C58
0x029 $01:8C58 0x008C58
0x02A $01:8C61 0x008C61
0x02B $01:8C61 0x008C61
0x02C $01:8C58 0x008C58
0x02D $01:8C58 0x008C58
0x02E $01:8C61 0x008C61
0x02F $01:8C61 0x008C61
0x030 $01:8C58 0x008C58
0x031 $01:8C58 0x008C58
0x032 $01:8C61 0x008C61
0x033 $01:8C61 0x008C61
0x034 $01:8C58 0x008C58
0x035 $01:8C58 0x008C58
0x036 $01:8C61 0x008C61
0x037 $01:8C61 0x008C61
0x038 $01:8C58 0x008C58
0x039 $01:8C58 0x008C58
0x03A $01:8C61 0x008C61
0x03B $01:8C61 0x008C61
0x03C $01:8C58 0x008C58
0x03D $01:8C58 0x008C58
0x03E $01:8C61 0x008C61
0x03F $01:8C61 0x008C61
0x040 $01:8C58 0x008C58
0x041 $01:8C58 0x008C58
0x042 $01:8C61 0x008C61
0x043 $01:8C61 0x008C61
0x044 $01:8C58 0x008C58
0x045 $01:8C58 0x008C58
0x046 $01:8C61 0x008C61
0x047 $01:8C61 0x008C61
0x048 $01:8C58 0x008C58
0x049 $01:8C58 0x008C58
0x04A $01:8C61 0x008C61
0x04B $01:8C61 0x008C61
0x04C $01:8C58 0x008C58
0x04D $01:8C58 0x008C58
0x04E $01:8C61 0x008C61
0x04F $01:8C61 0x008C61
0x050 $01:8C58 0x008C58
0x051 $01:8C58 0x008C58
0x052 $01:8C61 0x008C61
0x053 $01:8C61 0x008C61
0x054 $01:8C58 0x008C58
0x055 $01:8C58 0x008C58
0x056 $01:8C61 0x008C61
0x057 $01:8C61 0x008C61
0x058 $01:8C58 0x008C58
0x059 $01:8C58 0x008C58
0x05A $01:8C61 0x008C61
0x05B $01:8C61 0x008C61
0x05C $01:8C58 0x008C58
0x05D $01:8C58 0x008C58
0x05E $01:8C61 0x008C61
0x05F $01:8C61 0x008C61
0x060 $01:8C58 0x008C58
0x061 $01:8C58 0x008C58
0x062 $01:8C61 0x008C61
0x063 $01:8C61 0x008C61
0x064 $01:8C58 0x008C58
0x065 $01:8C58 0x008C58
0x066 $01:8C61 0x008C61
0x067 $01:8C61 0x008C61
0x068 $01:8C58 0x008C58
0x069 $01:8C58 0x008C58
0x06A $01:8C61 0x008C61
0x06B $01:8C61 0x008C61
0x06C $01:8C58 0x008C58
0x06D $01:8C58 0x008C58
0x06E $01:8C61 0x008C61
0x06F $01:8C61 0x008C61
0x070 $01:8C58 0x008C58
0x071 $01:8C58 0x008C58
0x072 $01:8C61 0x008C61
0x073 $01:8C61 0x008C61
0x074 $01:8C58 0x008C58
0x075 $01:8C58 0x008C58
0x076 $01:8C61 0x008C61
0x077 $01:8C61 0x008C61
0x078 $01:8C58 0x008C58
0x079 $01:8C58 0x008C58
0x07A $01:8C61 0x008C61
0x07B $01:8C61 0x008C61
0x07C $01:8C58 0x008C58
0x07D $01:8C58 0x008C58
0x07E $01:8C61 0x008C61
0x07F $01:8C61 0x008C61
0x080 $01:8C58 0x008C58
0x081 $01:8C58 0x008C58
0x082 $01:8C61 0x008C61
0x083 $01:8C61 0x008C61
0x084 $01:8C58 0x008C58
0x085 $01:8C58 0x008C58
0x086 $01:8C61 0x008C61
0x087 $01:8C61 0x008C61
0x088 $01:8C58 0x008C58
0x089 $01:8C58 0x008C58
0x08A $01:8C61 0x008C61
0x08B $01:8C61 0x008C61
0x08C $01:8C58 0x008C58
0x08D $01:8C58 0x008C58
0x08E $01:8C61 0x008C61
0x08F $01:8C61 0x008C61
0x090 $01:8C58 0x008C58
0x091 $01:8C58 0x008C58
0x092 $01:8C61 0x008C61
0x093 $01:8C61 0x008C61
0x094 $01:8C58 0x008C58
0x095 $01:8C58 0x008C58
0x096 $01:8C61 0x008C61
0x097 $01:8C61 0x008C61
0x098 $01:8C58 0x008C58
0x099 $01:8C58 0x008C58
0x09A $01:8C61 0x008C61
0x09B $01:8C61 0x008C61
0x09C $01:8C58 0x008C58
0x09D $01:8C58 0x008C58
0x09E $01:8C61 0x008C61
0x09F $01:8C61 0x008C61
0x0A0 $01:8C58 0x008C58
0x0A1 $01:8C58 0x008C58
0x0A2 $01:8C61 0x008C61
0x0A3 $01:8C61 0x008C61
0x0A4 $01:8C58 0x008C58
0x0A5 $01:8C58 0x008C58
0x0A6 $01:8C61 0x008C61
0x0A7 $01:8C61 0x008C61
0x0A8 $01:8C58 0x008C58
0x0A9 $01:8C58 0x008C58
0x0AA $01:8C61 0x008C61
0x0AB $01:8C61 0x008C61
0x0AC $01:8C58 0x008C58
0x0AD $01:8C58 0x008C58
0x0AE $01:8C61 0x008C61
0x0AF $01:8C61 0x008C61
0x0B0 $01:8C58 0x008C58
0x0B1 $01:8C58 0x008C58
0x0B2 $01:8C61 0x008C61
0x0B3 $01:8C61 0x008C61
0x0B4 $01:8C58 0x008C58
0x0B5 $01:8C58 0x008C58
0x0B6 $01:8C61 0x008C61
0x0B7 $01:8C61 0x008C61
0x0B8 $01:8C58 0x008C58
0x0B9 $01:8C58 0x008C58
0x0BA $01:8C61 0x008C61
0x0BB $01:8C61 0x008C61
0x0BC $01:8C58 0x008C58
0x0BD $01:8C58 0x008C58
0x0BE $01:8C61 0x008C61
0x0BF $01:8C61 0x008C61
0x0C0 $01:8C58 0x008C58
0x0C1 $01:8C58 0x008C58
0x0C2 $01:8C61 0x008C61
0x0C3 $01:8C61 0x008C61
0x0C4 $01:8C58 0x008C58
0x0C5 $01:8C58 0x008C58
0x0C6 $01:8C61 0x008C61
0x0C7 $01:8C61 0x008C61
0x0C8 $01:8C58 0x008C58
0x0C9 $01:8C58 0x008C58
0x0CA $01:8C61 0x008C61
0x0CB $01:8C61 0x008C61
0x0CC $01:8C58 0x008C58
0x0CD $01:8C58 0x008C58
0x0CE $01:8C61 0x008C61
0x0CF $01:8C61 0x008C61
0x0D0 $01:8C58 0x008C58
0x0D1 $01:8C58 0x008C58
0x0D2 $01:8C61 0x008C61
0x0D3 $01:8C61 0x008C61
0x0D4 $01:8C58 0x008C58
0x0D5 $01:8C58 0x008C58
0x0D6 $01:8C61 0x008C61
0x0D7 $01:8C61 0x008C61
0x0D8 $01:8C58 0x008C58
0x0D9 $01:8C58 0x008C58
0x0DA $01:8C61 0x008C61
0x0DB $01:8C61 0x008C61
0x0DC $01:8C58 0x008C58
0x0DD $01:8C58 0x008C58
0x0DE $01:8C61 0x008C61
0x0DF $01:8C61 0x008C61
0x0E0 $01:8C58 0x008C58
0x0E1 $01:8C58 0x008C58
0x0E2 $01:8C61 0x008C61
0x0E3 $01:8C61 0x008C61
0x0E4 $01:8C58 0x008C58
0x0E5 $01:8C58 0x008C58
0x0E6 $01:8C61 0x008C61
0x0E7 $01:8C61 0x008C61
0x0E8 $01:8C58 0x008C58
0x0E9 $01:8C58 0x008C58
0x0EA $01:8C61 0x008C61
0x0EB $01:8C61 0x008C61
0x0EC $01:8C58 0x008C58
0x0ED $01:8C58 0x008C58
0x0EE $01:8C61 0x008C61
0x0EF $01:8C61 0x008C61
0x0F0 $01:8C58 0x008C58
0x0F1 $01:8C58 0x008C58
0x0F2 $01:8C61 0x008C61
0x0F3 $01:8C61 0x008C61
0x0F4 $01:8C58 0x008C58
0x0F5 $01:8C58 0x008C58
0x0F6 $01:8C61 0x008C61
0x0F7 $01:8C61 0x008C61
0x0F8 $01:8C58 0x008C58
0x0F9 $01:8C58 0x008C58
0x0FA $01:8C61 0x008C61
0x0FB $01:8C61 0x008C61
0x0FC $01:8C58 0x008C58
0x0FD $01:8C58 0x008C58
0x0FE $01:8C61 0x008C61
0x0FF $01:8C61 0x008C61

Type 2 (0x000-0x03F)

Object Handler (SNES) Handler (PC)
0x000 $01:97ED 0x0097ED
0x001 $01:97ED 0x0097ED
0x002 $01:97ED 0x0097ED
0x003 $01:97ED 0x0097ED
0x004 $01:97ED 0x0097ED
0x005 $01:97ED 0x0097ED
0x006 $01:97ED 0x0097ED
0x007 $01:97ED 0x0097ED
0x008 $01:9813 0x009813
0x009 $01:9813 0x009813
0x00A $01:9813 0x009813
0x00B $01:9813 0x009813
0x00C $01:9813 0x009813
0x00D $01:9813 0x009813
0x00E $01:9813 0x009813
0x00F $01:9813 0x009813
0x010 $01:9854 0x009854
0x011 $01:9854 0x009854
0x012 $01:9854 0x009854
0x013 $01:9854 0x009854
0x014 $01:985C 0x00985C
0x015 $01:985C 0x00985C
0x016 $01:985C 0x00985C
0x017 $01:985C 0x00985C
0x018 $01:9895 0x009895
0x019 $01:9895 0x009895
0x01A $01:9895 0x009895
0x01B $01:9895 0x009895
0x01C $01:97ED 0x0097ED
0x01D $01:8F30 0x008F30
0x01E $01:9A8D 0x009A8D
0x01F $01:9A6F 0x009A6F
0x020 $01:9892 0x009892
0x021 $01:8F30 0x008F30
0x022 $01:9AEE 0x009AEE
0x023 $01:99E6 0x0099E6
0x024 $01:97ED 0x0097ED
0x025 $01:97ED 0x0097ED
0x026 $01:8F30 0x008F30
0x027 $01:9895 0x009895
0x028 $01:9AEE 0x009AEE
0x029 $01:97ED 0x0097ED
0x02A $01:9B48 0x009B48
0x02B $01:9895 0x009895
0x02C $01:9B50 0x009B50
0x02D $01:A41B 0x00A41B
0x02E $01:A458 0x00A458
0x02F $01:A486 0x00A486
0x030 $01:A25D 0x00A25D
0x031 $01:A26D 0x00A26D
0x032 $01:A2C7 0x00A2C7
0x033 $01:A2DF 0x00A2DF
0x034 $01:9895 0x009895
0x035 $01:9B1E 0x009B1E
0x036 $01:A3AE 0x00A3AE
0x037 $01:9BF8 0x009BF8
0x038 $01:A4B4 0x00A4B4
0x039 $01:A533 0x00A533
0x03A $01:A4F5 0x00A4F5
0x03B $01:A584 0x00A584
0x03C $01:9B56 0x009B56
0x03D $01:99E6 0x0099E6
0x03E $01:9A0C 0x009A0C
0x03F $01:9A12 0x009A12

Type 3 (0x000-0x07F)

Object Handler (SNES) Handler (PC)
0x000 $01:9D29 0x009D29
0x001 $01:9D5D 0x009D5D
0x002 $01:9D67 0x009D67
0x003 $01:9C3B 0x009C3B
0x004 $01:9C3E 0x009C3E
0x005 $01:9C3E 0x009C3E
0x006 $01:9C3E 0x009C3E
0x007 $01:9C3E 0x009C3E
0x008 $01:9C3E 0x009C3E
0x009 $01:9C3E 0x009C3E
0x00A $01:9C3E 0x009C3E
0x00B $01:9C3E 0x009C3E
0x00C $01:9C3E 0x009C3E
0x00D $01:9C44 0x009C44
0x00E $01:9C3B 0x009C3B
0x00F $01:9C3E 0x009C3E
0x010 $01:9895 0x009895
0x011 $01:9895 0x009895
0x012 $01:9AA9 0x009AA9
0x013 $01:9895 0x009895
0x014 $01:99E6 0x0099E6
0x015 $01:9D96 0x009D96
0x016 $01:B493 0x00B493
0x017 $01:9C44 0x009C44
0x018 $01:98AE 0x0098AE
0x019 $01:98D0 0x0098D0
0x01A $01:99B8 0x0099B8
0x01B $01:A30C 0x00A30C
0x01C $01:A31C 0x00A31C
0x01D $01:A36E 0x00A36E
0x01E $01:A5D2 0x00A5D2
0x01F $01:A5F4 0x00A5F4
0x020 $01:A607 0x00A607
0x021 $01:A626 0x00A626
0x022 $01:9895 0x009895
0x023 $01:9895 0x009895
0x024 $01:9895 0x009895
0x025 $01:9895 0x009895
0x026 $01:A664 0x00A664
0x027 $01:A695 0x00A695
0x028 $01:A71C 0x00A71C
0x029 $01:A74A 0x00A74A
0x02A $01:9DE5 0x009DE5
0x02B $01:B306 0x00B306
0x02C $01:B310 0x00B310
0x02D $01:9E30 0x009E30
0x02E $01:9EA3 0x009EA3
0x02F $01:B395 0x00B395
0x030 $01:B30B 0x00B30B
0x031 $01:99BB 0x0099BB
0x032 $01:9A00 0x009A00
0x033 $01:A380 0x00A380
0x034 $01:9BD9 0x009BD9
0x035 $01:9BD9 0x009BD9
0x036 $01:9B50 0x009B50
0x037 $01:9B50 0x009B50
0x038 $01:9BD9 0x009BD9
0x039 $01:9BD9 0x009BD9
0x03A $01:9A90 0x009A90
0x03B $01:9A90 0x009A90
0x03C $01:9AA3 0x009AA3
0x03D $01:9AA3 0x009AA3
0x03E $01:9895 0x009895
0x03F $01:9895 0x009895
0x040 $01:9895 0x009895
0x041 $01:9895 0x009895
0x042 $01:9895 0x009895
0x043 $01:9895 0x009895
0x044 $01:9895 0x009895
0x045 $01:9895 0x009895
0x046 $01:9895 0x009895
0x047 $01:B3E1 0x00B3E1
0x048 $01:97ED 0x0097ED
0x049 $01:9895 0x009895
0x04A $01:9895 0x009895
0x04B $01:9A06 0x009A06
0x04C $01:9A66 0x009A66
0x04D $01:9A0C 0x009A0C
0x04E $01:99E6 0x0099E6
0x04F $01:9895 0x009895
0x050 $01:9A8D 0x009A8D
0x051 $01:9895 0x009895
0x052 $01:9895 0x009895
0x053 $01:9895 0x009895
0x054 $01:A095 0x00A095
0x055 $01:A194 0x00A194
0x056 $01:9895 0x009895
0x057 $01:9895 0x009895
0x058 $01:9895 0x009895
0x059 $01:9895 0x009895
0x05A $01:9D6C 0x009D6C
0x05B $01:A194 0x00A194
0x05C $01:9AA3 0x009AA3
0x05D $01:9A0C 0x009A0C
0x05E $01:9895 0x009895
0x05F $01:9895 0x009895
0x060 $01:A7A3 0x00A7A3
0x061 $01:A7A3 0x00A7A3
0x062 $01:A1D1 0x00A1D1
0x063 $01:9895 0x009895
0x064 $01:9895 0x009895
0x065 $01:9895 0x009895
0x066 $01:97ED 0x0097ED
0x067 $01:99E6 0x0099E6
0x068 $01:99E6 0x0099E6
0x069 $01:99EC 0x0099EC
0x06A $01:99EC 0x0099EC
0x06B $01:97ED 0x0097ED
0x06C $01:99E6 0x0099E6
0x06D $01:99E6 0x0099E6
0x06E $01:99EC 0x0099EC
0x06F $01:99EC 0x0099EC
0x070 $01:A7B6 0x00A7B6
0x071 $01:A7D3 0x00A7D3
0x072 $01:9DD9 0x009DD9
0x073 $01:A255 0x00A255
0x074 $01:A7DC 0x00A7DC
0x075 $01:9895 0x009895
0x076 $01:9A06 0x009A06
0x077 $01:9A06 0x009A06
0x078 $01:A7F0 0x00A7F0
0x079 $01:99E6 0x0099E6
0x07A $01:97ED 0x0097ED
0x07B $01:A809 0x00A809
0x07C $01:9895 0x009895
0x07D $01:9895 0x009895
0x07E $01:9895 0x009895
0x07F $01:8AA3 0x008AA3