Decomp GetWindow; retype overlay_31's window callbacks as ids

Decompile from asm:

  GetWindow  0x020275F8

It indexes WINDOW_LIST with a stride of 0xE0, so its argument is a window id
rather than a pointer, and its result is the address of one entry.

overlay_31_02382820.c declared it as taking a struct Window * and passed one,
which cannot be what the target computes: multiplying a pointer by 0xE0 and
adding it to WINDOW_LIST is meaningless. The value it passes is an id, and the
same value goes to DrawTextInWindow and UpdateWindow, so those take ids too.
This retypes the three window callbacks and both of those prototypes
accordingly, along with the callback type CreateTextBox stores.

That retyping is byte-neutral -- a pointer and an id both travel in r0 -- but
overlay_31_02382820.o was already matching, so it is rebuilt here to confirm
rather than assumed.

struct Window keeps its existing return type and gains padding to its real 0xE0
size, which is what lets &WINDOW_LIST[id] stride correctly. Its first seven
bytes are unchanged, so the width field overlay_31 reads is where it was. The
struct moves from the overlay's header into include/window.h, which already
exists and is where a main-binary function returning one can reach it; the
overlay includes it rather than the main binary including an overlay header.

No comments are added to any pmd-sky file.

Authored by Claude (Opus 5) under human direction. Confirmed by a matching
build with overlay_31_02382820.o rebuilt:
build/pmdsky.us/pmdsky.us.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-17 02:09:00 -07:00
parent 2472ad54f7
commit aade0cdfc8
10 changed files with 3089 additions and 3045 deletions

View File

@@ -1,30 +1,30 @@
#pragma once
.public DecompressAtHalf
.public DelayWteFree
.public GetWindow
.public LoadAlert
.public LoadCursors
.public LoadFileFromRom
.public LoadWteFromRom
.public MemZero
.public Memcpy32
.public UnloadFile
.public WINDOW_LIST
.public _0209AC4C
.public _0209AC50
.public _0209AC54
.public _0209AC58
.public _0209AC64
.public _0209AC78
.public _0209ACA8
.public _0209ACAC
.public _0209ADC8
.public _0209ADDC
.public _0209ADF0
.public _0209AE08
.public _0209B32C_JP
.public _0209B408_JP
.public _020AFC70
.public _020AFD04
.public _020AFD4C
.public _020AFD58
.public _020AFD5C
.public _020AFD60
.public _020AFD94
.public _020AFD98
.public _020AFD9C
.public _022A7A5C
.public _022A7A6C
.public _022A7A74
.public _022A7A78
.public _022A7A8C
.public _022A7AA0
@@ -36,67 +36,18 @@
.public _022A7B1C
.public _022A7EDC
.public _022A88E4
.public _022A88F0
.public _022A88F8
.public _022A88FC
.public _022A8908
.public _022A8990
.public _022A8991
.public _022A8992
.public _022A8994
.public _022A92B4_JP
.public _022A92B8_JP
.public _022A9A5C
.public _022AA35C
.public CURSOR_16_ANIMATION_CONTROL
.public CURSOR_16_SPRITE_ID
.public CURSOR_ANIMATION_CONTROL
.public DecompressAtHalf
.public DelayWteFree
.public GetPageItemYOffset
.public InitAnimationControlWithSet__0201C0B0
.public InitRender3dElement64
.public LoadAlert
.public LoadFileFromRom
.public LoadWanTableEntry
.public LoadWteFromRom
.public MemAlloc
.public Memcpy32
.public MemFree
.public memset
.public MemZero
.public PREV_MENU_ITEMS
.public SetAnimationForAnimationControl
.public SetSpriteIdForAnimationControl
.public sub_0200302C
.public sub_020030FC
.public sub_0200A124
.public sub_0200A174
.public sub_0200A184
.public sub_0200A29C
.public sub_0200B2C4
.public sub_0200B330
.public sub_0200B340
.public sub_0200B3C0
.public sub_0200B3FC
.public sub_0201C108
.public sub_0201D9C8
.public sub_0201E12C
.public sub_0201F2A0
.public sub_02025C7C
.public sub_0202760C
.public sub_02027624
.public sub_0202796C_JP
.public sub_020282C8
.public sub_0202903C
.public sub_02029A50
.public sub_02029A68
.public sub_02029B0C
.public sub_02029EC4
.public sub_02029FE8
.public sub_0202A124
.public sub_0202A2C8
.public sub_0202A388
.public sub_02032918
.public sub_0203293C
.public sub_02033350
.public sub_02033390
.public sub_020333B4
.public UnloadFile
.public WAN_TABLE
.public WINDOW_LIST

View File

@@ -0,0 +1,72 @@
#pragma once
.public CURSOR_16_ANIMATION_CONTROL
.public CURSOR_16_SPRITE_ID
.public CURSOR_ANIMATION_CONTROL
.public GetPageItemYOffset
.public InitAnimationControlWithSet__0201C0B0
.public InitRender3dElement64
.public LoadWanTableEntry
.public MemAlloc
.public MemFree
.public Memcpy32
.public PREV_MENU_ITEMS
.public SetAnimationForAnimationControl
.public SetSpriteIdForAnimationControl
.public WAN_TABLE
.public WINDOW_LIST
.public _0209AC64
.public _0209AC78
.public _0209ACA8
.public _0209ACAC
.public _0209ADF0
.public _0209AE08
.public _020AFC70
.public _020AFD4C
.public _020AFD94
.public _020AFD98
.public _020AFD9C
.public _022A7A6C
.public _022A7A74
.public _022A7A78
.public _022A7A8C
.public _022A7AA0
.public _022A7AC8
.public _022A7AE4
.public _022A7B00
.public _022A7B1C
.public _022A7EDC
.public _022A88E4
.public _022A88F0
.public _022A88F8
.public _022A88FC
.public _022A8908
.public _022A8990
.public _022A8991
.public _022A8992
.public _022A8994
.public _022A9A5C
.public _022AA35C
.public memset
.public sub_0200302C
.public sub_020030FC
.public sub_0200A174
.public sub_0200A184
.public sub_0200B330
.public sub_0200B340
.public sub_0200B3C0
.public sub_0200B3FC
.public sub_0201C108
.public sub_0201D9C8
.public sub_0201F2A0
.public sub_02029A50
.public sub_02029A68
.public sub_02029B0C
.public sub_02029EC4
.public sub_02029FE8
.public sub_0202A2C8
.public sub_0202A388
.public sub_02032918
.public sub_0203293C
.public sub_02033350
.public sub_02033390
.public sub_020333B4