diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-28 21:09:02 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-08-28 21:09:02 +0200 |
commit | c6e0f8cfd74c83165838e227efba27a8f9166133 (patch) | |
tree | af0bfa775bdb0b87c1170c578cf61c87f1131425 | |
parent | 5cfb890e9351b737786ce263b081599513a99ae6 (diff) |
start decomp of pokemon menu
-rw-r--r-- | asm/pokemon_menu.s | 389 | ||||
-rw-r--r-- | data/pokemon_menu.s | 4 | ||||
-rw-r--r-- | include/pokemon_menu.h | 25 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/pokemon_menu.c | 92 | ||||
-rw-r--r-- | sym_ewram.txt | 11 |
6 files changed, 168 insertions, 354 deletions
diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s index fe1b41724..28436e446 100644 --- a/asm/pokemon_menu.s +++ b/asm/pokemon_menu.s @@ -6,305 +6,10 @@ .text - thumb_func_start sub_8089A70 -sub_8089A70: @ 8089A70 - push {lr} - ldr r0, _08089A88 @ =gPaletteFade - ldrb r1, [r0, 0x8] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0, 0x8] - movs r0, 0 - movs r1, 0 - bl OpenPartyMenu - pop {r0} - bx r0 - .align 2, 0 -_08089A88: .4byte gPaletteFade - thumb_func_end sub_8089A70 - thumb_func_start sub_8089A8C -sub_8089A8C: @ 8089A8C - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r5, _08089AD0 @ =gUnknown_0202FFA9 - movs r0, 0 - strb r0, [r5] - ldr r0, _08089AD4 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089AD8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - beq _08089AE0 - ldr r4, _08089ADC @ =gUnknown_0202FFAA - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl AppendToList - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl AppendToList - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x3 - bl AppendToList - b _08089BC8 - .align 2, 0 -_08089AD0: .4byte gUnknown_0202FFA9 -_08089AD4: .4byte gLastFieldPokeMenuOpened -_08089AD8: .4byte gPlayerParty -_08089ADC: .4byte gUnknown_0202FFAA -_08089AE0: - movs r6, 0 - ldr r0, _08089B24 @ =gUnknown_0839F554 - ldrh r0, [r0] - mov r8, r0 -_08089AE8: - movs r4, 0 - adds r7, r6, 0x1 - mov r0, r8 - cmp r0, 0xFF - beq _08089B48 - ldr r5, _08089B24 @ =gUnknown_0839F554 -_08089AF4: - ldr r0, _08089B28 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08089B2C @ =gPlayerParty - adds r0, r1 - adds r1, r6, 0 - adds r1, 0xD - bl GetMonData - lsls r1, r4, 1 - adds r1, r5 - ldrh r1, [r1] - cmp r0, r1 - bne _08089B38 - adds r2, r4, 0 - adds r2, 0xA - lsls r2, 24 - lsrs r2, 24 - ldr r0, _08089B30 @ =gUnknown_0202FFAA - ldr r1, _08089B34 @ =gUnknown_0202FFA9 - bl AppendToList - b _08089B48 - .align 2, 0 -_08089B24: .4byte gUnknown_0839F554 -_08089B28: .4byte gLastFieldPokeMenuOpened -_08089B2C: .4byte gPlayerParty -_08089B30: .4byte gUnknown_0202FFAA -_08089B34: .4byte gUnknown_0202FFA9 -_08089B38: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r0, r4, 1 - adds r0, r5 - ldrh r0, [r0] - cmp r0, 0xFF - bne _08089AF4 -_08089B48: - lsls r0, r7, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08089AE8 - ldr r4, _08089BA4 @ =gUnknown_0202FFAA - ldr r5, _08089BA8 @ =gUnknown_0202FFA9 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl AppendToList - ldr r6, _08089BAC @ =gPlayerParty + 1 * 0x64 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08089B76 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x1 - bl AppendToList -_08089B76: - ldr r0, _08089BB0 @ =gLastFieldPokeMenuOpened - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - adds r1, r6, 0 - subs r1, 0x64 - adds r0, r1 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _08089BB4 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl AppendToList - b _08089BBE - .align 2, 0 -_08089BA4: .4byte gUnknown_0202FFAA -_08089BA8: .4byte gUnknown_0202FFA9 -_08089BAC: .4byte gPlayerParty + 1 * 0x64 -_08089BB0: .4byte gLastFieldPokeMenuOpened -_08089BB4: - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl AppendToList -_08089BBE: - ldr r0, _08089BD4 @ =gUnknown_0202FFAA - ldr r1, _08089BD8 @ =gUnknown_0202FFA9 - movs r2, 0x3 - bl AppendToList -_08089BC8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08089BD4: .4byte gUnknown_0202FFAA -_08089BD8: .4byte gUnknown_0202FFA9 - thumb_func_end sub_8089A8C - - thumb_func_start sub_8089BDC -sub_8089BDC: @ 8089BDC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - adds r4, r2, 0 - mov r8, r3 - ldr r7, [sp, 0x20] - ldr r1, [sp, 0x24] - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x5 - bl sub_806D538 - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - lsls r3, r0, 1 - adds r3, r6, r3 - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl MenuDrawTextWindow - adds r5, 0x1 - lsls r5, 24 - lsrs r5, 24 - adds r6, 0x1 - lsls r6, 24 - lsrs r6, 24 - str r7, [sp] - adds r0, r5, 0 - adds r1, r6, 0 - mov r2, r8 - ldr r3, [sp, 0x1C] - bl PrintMenuItemsReordered - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8089BDC - thumb_func_start sub_8089C50 -sub_8089C50: @ 8089C50 - push {r4,r5,lr} - sub sp, 0xC - ldr r4, [sp, 0x18] - ldr r5, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - str r4, [sp] - str r5, [sp, 0x4] - movs r4, 0x1 - str r4, [sp, 0x8] - bl sub_8089BDC - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8089C50 - thumb_func_start sub_8089C7C -sub_8089C7C: @ 8089C7C - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _08089CC8 @ =gUnknown_0202FFA9 - ldrb r0, [r6] - lsls r0, 1 - movs r4, 0x12 - subs r4, r0 - lsls r4, 24 - lsrs r4, 24 - ldrb r3, [r6] - ldr r0, _08089CCC @ =gPokemonMenuActions - str r0, [sp] - ldr r0, _08089CD0 @ =gUnknown_0202FFAA - str r0, [sp, 0x4] - movs r0, 0x3 - str r0, [sp, 0x8] - movs r0, 0x13 - adds r1, r4, 0 - movs r2, 0xA - bl sub_8089BDC - movs r2, 0x1 - orrs r2, r4 - ldrb r3, [r6] - str r5, [sp] - movs r0, 0x9 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x14 - bl InitMenu - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08089CC8: .4byte gUnknown_0202FFA9 -_08089CCC: .4byte gPokemonMenuActions -_08089CD0: .4byte gUnknown_0202FFAA - thumb_func_end sub_8089C7C + thumb_func_start sub_8089CD4 sub_8089CD4: @ 8089CD4 @@ -346,7 +51,7 @@ _08089D04: ldr r1, _08089D50 @ =gStringVar1 bl GetMonNickname bl sub_8089A8C - ldr r0, _08089D54 @ =gUnknown_0202FFA8 + ldr r0, _08089D54 @ =sPokeMenuCursorPos strb r5, [r0] movs r0, 0 bl sub_8089C7C @@ -364,7 +69,7 @@ _08089D04: _08089D48: .4byte gLastFieldPokeMenuOpened _08089D4C: .4byte gPlayerParty _08089D50: .4byte gStringVar1 -_08089D54: .4byte gUnknown_0202FFA8 +_08089D54: .4byte sPokeMenuCursorPos _08089D58: .4byte gTasks _08089D5C: .4byte sub_8089D94 _08089D60: @@ -417,13 +122,13 @@ sub_8089D94: @ 8089D94 movs r0, 0x1 negs r0, r0 bl MoveMenuCursor - ldr r1, _08089DD0 @ =gUnknown_0202FFA8 + ldr r1, _08089DD0 @ =sPokeMenuCursorPos strb r0, [r1] b _08089E1A .align 2, 0 _08089DC8: .4byte gPaletteFade _08089DCC: .4byte gMain -_08089DD0: .4byte gUnknown_0202FFA8 +_08089DD0: .4byte sPokeMenuCursorPos _08089DD4: cmp r1, 0x80 bne _08089DF0 @@ -431,11 +136,11 @@ _08089DD4: bl PlaySE movs r0, 0x1 bl MoveMenuCursor - ldr r1, _08089DEC @ =gUnknown_0202FFA8 + ldr r1, _08089DEC @ =sPokeMenuCursorPos strb r0, [r1] b _08089E1A .align 2, 0 -_08089DEC: .4byte gUnknown_0202FFA8 +_08089DEC: .4byte sPokeMenuCursorPos _08089DF0: ldrh r1, [r2, 0x2E] movs r0, 0x1 @@ -444,9 +149,9 @@ _08089DF0: beq _08089E30 movs r0, 0x5 bl PlaySE - ldr r1, _08089E24 @ =gPokemonMenuActions - ldr r2, _08089E28 @ =gUnknown_0202FFAA - ldr r0, _08089E2C @ =gUnknown_0202FFA8 + ldr r1, _08089E24 @ =sPokemonMenuActions + ldr r2, _08089E28 @ =sPokeMenuOptionsIDs + ldr r0, _08089E2C @ =sPokeMenuCursorPos ldrb r0, [r0] adds r0, r2 ldrb r0, [r0] @@ -461,9 +166,9 @@ _08089E1A: bl sub_808B5B4 b _08089E44 .align 2, 0 -_08089E24: .4byte gPokemonMenuActions -_08089E28: .4byte gUnknown_0202FFAA -_08089E2C: .4byte gUnknown_0202FFA8 +_08089E24: .4byte sPokemonMenuActions +_08089E28: .4byte sPokeMenuOptionsIDs +_08089E2C: .4byte sPokeMenuCursorPos _08089E30: movs r0, 0x2 ands r0, r1 @@ -520,7 +225,7 @@ sub_8089E84: @ 8089E84 ldr r1, _08089EB4 @ =gStringVar1 bl GetMonNickname bl sub_8089A8C - ldr r1, _08089EB8 @ =gUnknown_0202FFA8 + ldr r1, _08089EB8 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0 @@ -531,7 +236,7 @@ sub_8089E84: @ 8089E84 _08089EAC: .4byte gLastFieldPokeMenuOpened _08089EB0: .4byte gPlayerParty _08089EB4: .4byte gStringVar1 -_08089EB8: .4byte gUnknown_0202FFA8 +_08089EB8: .4byte sPokeMenuCursorPos thumb_func_end sub_8089E84 thumb_func_start sub_8089EBC @@ -746,7 +451,7 @@ sub_808A060: @ 808A060 ldrh r0, [r0, 0x2E] cmp r0, 0x40 bne _0808A086 - ldr r4, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r4, _0808A0D4 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0 beq _0808A086 @@ -761,7 +466,7 @@ _0808A086: ldrh r0, [r0, 0x2E] cmp r0, 0x80 bne _0808A0A4 - ldr r4, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r4, _0808A0D4 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0x2 beq _0808A0A4 @@ -780,8 +485,8 @@ _0808A0A4: movs r0, 0x5 bl PlaySE ldr r1, _0808A0D8 @ =gUnknown_0839F578 - ldr r2, _0808A0DC @ =gPokemonMenuActions - ldr r0, _0808A0D4 @ =gUnknown_0202FFA8 + ldr r2, _0808A0DC @ =sPokemonMenuActions + ldr r0, _0808A0D4 @ =sPokeMenuCursorPos ldrb r3, [r0] movs r0, 0 bl PartyMenuGetPopupMenuFunc @@ -791,9 +496,9 @@ _0808A0A4: b _0808A0F6 .align 2, 0 _0808A0D0: .4byte gMain -_0808A0D4: .4byte gUnknown_0202FFA8 +_0808A0D4: .4byte sPokeMenuCursorPos _0808A0D8: .4byte gUnknown_0839F578 -_0808A0DC: .4byte gPokemonMenuActions +_0808A0DC: .4byte sPokemonMenuActions _0808A0E0: movs r0, 0x2 ands r0, r1 @@ -819,7 +524,7 @@ sub_808A100: @ 808A100 lsls r4, 24 lsrs r4, 24 ldr r1, _0808A130 @ =gUnknown_0839F578 - ldr r2, _0808A134 @ =gPokemonMenuActions + ldr r2, _0808A134 @ =sPokemonMenuActions movs r0, 0 movs r3, 0 bl sub_806E750 @@ -838,7 +543,7 @@ sub_808A100: @ 808A100 bx r0 .align 2, 0 _0808A130: .4byte gUnknown_0839F578 -_0808A134: .4byte gPokemonMenuActions +_0808A134: .4byte sPokemonMenuActions _0808A138: .4byte gTasks _0808A13C: .4byte sub_808A060 thumb_func_end sub_808A100 @@ -850,7 +555,7 @@ PokemonMenu_Item: @ 808A140 lsls r4, 24 lsrs r4, 24 bl HandleDestroyMenuCursors - ldr r1, _0808A174 @ =gUnknown_0202FFA8 + ldr r1, _0808A174 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -869,7 +574,7 @@ PokemonMenu_Item: @ 808A140 pop {r0} bx r0 .align 2, 0 -_0808A174: .4byte gUnknown_0202FFA8 +_0808A174: .4byte sPokeMenuCursorPos _0808A178: .4byte gTasks _0808A17C: .4byte sub_808A100 thumb_func_end PokemonMenu_Item @@ -1544,7 +1249,7 @@ PokemonMenu_Mail: @ 808A6E8 lsls r4, 24 lsrs r4, 24 bl HandleDestroyMenuCursors - ldr r1, _0808A728 @ =gUnknown_0202FFA8 + ldr r1, _0808A728 @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -1553,7 +1258,7 @@ PokemonMenu_Mail: @ 808A6E8 movs r3, 0x13 bl MenuZeroFillWindowRect ldr r1, _0808A72C @ =gUnknown_0839F584 - ldr r2, _0808A730 @ =gPokemonMenuActions + ldr r2, _0808A730 @ =sPokemonMenuActions movs r0, 0 movs r3, 0 bl sub_806E750 @@ -1568,9 +1273,9 @@ PokemonMenu_Mail: @ 808A6E8 pop {r0} bx r0 .align 2, 0 -_0808A728: .4byte gUnknown_0202FFA8 +_0808A728: .4byte sPokeMenuCursorPos _0808A72C: .4byte gUnknown_0839F584 -_0808A730: .4byte gPokemonMenuActions +_0808A730: .4byte sPokemonMenuActions _0808A734: .4byte gTasks _0808A738: .4byte sub_808A73C thumb_func_end PokemonMenu_Mail @@ -1586,7 +1291,7 @@ sub_808A73C: @ 808A73C bne _0808A77A movs r0, 0x5 bl PlaySE - ldr r4, _0808A768 @ =gUnknown_0202FFA8 + ldr r4, _0808A768 @ =sPokeMenuCursorPos ldrb r0, [r4] cmp r0, 0 bne _0808A770 @@ -1598,7 +1303,7 @@ sub_808A73C: @ 808A73C b _0808A774 .align 2, 0 _0808A764: .4byte gMain -_0808A768: .4byte gUnknown_0202FFA8 +_0808A768: .4byte sPokeMenuCursorPos _0808A76C: .4byte gUnknown_0839F584 _0808A770: movs r0, 0x1 @@ -1613,7 +1318,7 @@ _0808A77A: bne _0808A7B4 movs r0, 0x5 bl PlaySE - ldr r4, _0808A7A4 @ =gUnknown_0202FFA8 + ldr r4, _0808A7A4 @ =sPokeMenuCursorPos ldrb r0, [r4] ldr r1, _0808A7A8 @ =gUnknown_0839F584 ldrb r2, [r1] @@ -1627,7 +1332,7 @@ _0808A77A: b _0808A7AE .align 2, 0 _0808A7A0: .4byte gMain -_0808A7A4: .4byte gUnknown_0202FFA8 +_0808A7A4: .4byte sPokeMenuCursorPos _0808A7A8: .4byte gUnknown_0839F584 _0808A7AC: movs r0, 0x1 @@ -1644,8 +1349,8 @@ _0808A7B4: movs r0, 0x5 bl PlaySE ldr r1, _0808A7E4 @ =gUnknown_0839F584 - ldr r2, _0808A7E8 @ =gPokemonMenuActions - ldr r0, _0808A7EC @ =gUnknown_0202FFA8 + ldr r2, _0808A7E8 @ =sPokemonMenuActions + ldr r0, _0808A7EC @ =sPokeMenuCursorPos ldrb r3, [r0] movs r0, 0 bl PartyMenuGetPopupMenuFunc @@ -1656,8 +1361,8 @@ _0808A7B4: .align 2, 0 _0808A7E0: .4byte gMain _0808A7E4: .4byte gUnknown_0839F584 -_0808A7E8: .4byte gPokemonMenuActions -_0808A7EC: .4byte gUnknown_0202FFA8 +_0808A7E8: .4byte sPokemonMenuActions +_0808A7EC: .4byte sPokeMenuCursorPos _0808A7F0: movs r0, 0x2 ands r0, r1 @@ -1779,7 +1484,7 @@ sub_808A8D4: @ 808A8D4 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r1, _0808A90C @ =gUnknown_0202FFA8 + ldr r1, _0808A90C @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] movs r0, 0x13 @@ -1801,7 +1506,7 @@ sub_808A8D4: @ 808A8D4 pop {r0} bx r0 .align 2, 0 -_0808A90C: .4byte gUnknown_0202FFA8 +_0808A90C: .4byte sPokeMenuCursorPos _0808A910: .4byte gTasks _0808A914: .4byte sub_8089CD4 thumb_func_end sub_808A8D4 @@ -1837,7 +1542,7 @@ PokemonMenu_CancelSubmenu: @ 808A938 movs r3, 0x13 bl MenuZeroFillWindowRect bl sub_806D5A4 - ldr r0, _0808A978 @ =gUnknown_0202FFA8 + ldr r0, _0808A978 @ =sPokeMenuCursorPos ldrb r0, [r0] bl sub_8089C7C ldr r1, _0808A97C @ =gTasks @@ -1851,7 +1556,7 @@ PokemonMenu_CancelSubmenu: @ 808A938 pop {r0} bx r0 .align 2, 0 -_0808A978: .4byte gUnknown_0202FFA8 +_0808A978: .4byte sPokeMenuCursorPos _0808A97C: .4byte gTasks _0808A980: .4byte sub_8089D94 thumb_func_end PokemonMenu_CancelSubmenu @@ -1868,8 +1573,8 @@ PokemonMenu_FieldMove: @ 808A984 ldr r7, _0808A9D0 @ =gTasks + 0x8 adds r4, r6, r7 bl HandleDestroyMenuCursors - ldr r1, _0808A9D4 @ =gUnknown_0202FFAA - ldr r0, _0808A9D8 @ =gUnknown_0202FFA8 + ldr r1, _0808A9D4 @ =sPokeMenuOptionsIDs + ldr r0, _0808A9D8 @ =sPokeMenuCursorPos ldrb r0, [r0] adds r0, r1 ldrb r0, [r0] @@ -1895,8 +1600,8 @@ PokemonMenu_FieldMove: @ 808A984 b _0808AAB2 .align 2, 0 _0808A9D0: .4byte gTasks + 0x8 -_0808A9D4: .4byte gUnknown_0202FFAA -_0808A9D8: .4byte gUnknown_0202FFA8 +_0808A9D4: .4byte sPokeMenuOptionsIDs +_0808A9D8: .4byte sPokeMenuCursorPos _0808A9DC: ldrh r1, [r4, 0x16] movs r2, 0x16 @@ -1943,7 +1648,7 @@ _0808AA2C: lsrs r0, 24 cmp r0, 0x1 bne _0808AA90 - ldr r1, _0808AA7C @ =gUnknown_0202FFA8 + ldr r1, _0808AA7C @ =sPokeMenuCursorPos movs r0, 0 strb r0, [r1] ldrh r0, [r4, 0x16] @@ -1969,7 +1674,7 @@ _0808AA2C: b _0808AADA .align 2, 0 _0808AA78: .4byte gFieldMoveFuncs -_0808AA7C: .4byte gUnknown_0202FFA8 +_0808AA7C: .4byte sPokeMenuCursorPos _0808AA80: .4byte gTasks _0808AA84: .4byte sub_808AB34 _0808AA88: diff --git a/data/pokemon_menu.s b/data/pokemon_menu.s index 9e2ce2864..477b33a4a 100644 --- a/data/pokemon_menu.s +++ b/data/pokemon_menu.s @@ -4,7 +4,7 @@ .section .rodata .align 2 -gPokemonMenuActions:: @ 839F494 +sPokemonMenuActions:: @ 839F494 .4byte OtherText_Summary, PokemonMenu_Summary .4byte OtherText_Switch2, PokemonMenu_Switch .4byte OtherText_Item, PokemonMenu_Item @@ -31,7 +31,7 @@ gPokemonMenuActions:: @ 839F494 .4byte gMoveNames + 13 * MOVE_SWEET_SCENT, PokemonMenu_FieldMove .align 1 -gUnknown_0839F554:: @ 839F554 +sPokeMenuFieldMoves:: @ 839F554 .2byte MOVE_CUT .2byte MOVE_FLASH .2byte MOVE_ROCK_SMASH diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h index fc43a44c6..841e62035 100644 --- a/include/pokemon_menu.h +++ b/include/pokemon_menu.h @@ -1,6 +1,31 @@ #ifndef GUARD_POKEMON_MENU_H #define GUARD_POKEMON_MENU_H +#define POKEMENU_FIRST_FIELD_MOVE_ID 10 + +enum +{ + POKEMENU_SUMMARY, // 0 + POKEMENU_SWITCH, // 1 + POKEMENU_ITEM, // 2 + POKEMENU_CANCEL, // 3 + POKEMENU_MAIL = 7, + POKEMENU_CUT = 10, + POKEMENU_FLASH, + POKEMENU_ROCK_SMASH, + POKEMENU_STRENGTH, + POKEMENU_SURF, + POKEMENU_FLY, + POKEMENU_DIVE, + POKEMENU_WATERFALL, + POKEMENU_TELEPORT, + POKEMENU_DIG, + POKEMENU_SECRET_POWER, + POKEMENU_MILK_DRINK, + POKEMENU_SOFT_BOILED, + POKEMENU_SWEET_SCENT, +}; + void sub_8089A70(void); void sub_808A004(); void sub_808AB90(void); diff --git a/ld_script.txt b/ld_script.txt index 4f3ff093d..4700c48b0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -136,6 +136,7 @@ SECTIONS { src/wild_encounter.o(.text); src/field_effect.o(.text); src/unknown_task.o(.text); + src/pokemon_menu.o(.text); asm/pokemon_menu.o(.text); src/option_menu.o(.text); src/pokedex.o(.text); diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c new file mode 100644 index 000000000..46cbc7390 --- /dev/null +++ b/src/pokemon_menu.c @@ -0,0 +1,92 @@ +#include "global.h" +#include "pokemon.h" +#include "pokemon_menu.h" +#include "party_menu.h" +#include "palette.h" +#include "menu.h" +#include "mail_data.h" + +/* +Pokemon menu: + The menu that appears when you + click on a pokemon in + overworld 'pokemon' menu +*/ + +extern u8 gLastFieldPokeMenuOpened; + +EWRAM_DATA u8 sPokeMenuCursorPos = 0; +EWRAM_DATA u8 sPokeMenuOptionsNo = 0; +EWRAM_DATA u8 sPokeMenuOptionsIDs[8] = {0}; // 4 possible field moves and 4 default options + +#define sFieldMovesTerminator 0xFF // note: should be changed to 0xFFFF, because currently it makes it impossible to add a field move with 0xFF index + +extern const u16 sPokeMenuFieldMoves[]; +extern const struct MenuAction sPokemonMenuActions[]; + +void sub_8089A70(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + OpenPartyMenu(0, 0); +} + +void sub_8089A8C(void) +{ + sPokeMenuOptionsNo = 0; + // if checking pokemon is an egg, we can't give it an item and it doesn't know any move + if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG)) + { + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + } + else + { + u16 moveID, tableID; + for (moveID = 0; moveID < 4; moveID++) // 4, max number of possible field moves + { + for (tableID = 0; sPokeMenuFieldMoves[tableID] != sFieldMovesTerminator; tableID++) + { + if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MOVE1 + moveID) == sPokeMenuFieldMoves[tableID]) + { + u8 fieldID = tableID + POKEMENU_FIRST_FIELD_MOVE_ID; + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, fieldID); + break; + } + } + } + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SUMMARY); + + // can't switch a pokemon if it's the only one in the party + if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != 0) + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_SWITCH); + + if (ItemIsMail(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM))) + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_MAIL); + else + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_ITEM); + + AppendToList(sPokeMenuOptionsIDs, &sPokeMenuOptionsNo, POKEMENU_CANCEL); + } +} + +void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5, u8 arg6) +{ + sub_806D538(5, arg6); + MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (arg3 * 2) + arg1 + 1); + PrintMenuItemsReordered(arg0 + 1, arg1 + 1, arg3, arg4, arg5); +} + +void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 arg3, const struct MenuAction* arg4, const u8* arg5) +{ + sub_8089BDC(arg0, arg1, arg2, arg3, arg4, arg5, 1); +} + +void sub_8089C7C(u8 arg0) +{ + u8 var1 = 18; + u8 var2 = (sPokeMenuOptionsNo * 2); + + sub_8089BDC(19, var1 - var2, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsIDs, 3); + InitMenu(0, 20, (var1 - var2) | 1, sPokeMenuOptionsNo, arg0, 9); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index ac6b8b728..faefab204 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -374,17 +374,8 @@ gUnknown_0202FF58: @ 202FF58 gUnknown_0202FFA4: @ 202FFA4 .space 0x4 -@ pokemon_menu - -gUnknown_0202FFA8: @ 202FFA8 - .space 0x1 - -gUnknown_0202FFA9: @ 202FFA9 - .space 0x1 - -gUnknown_0202FFAA: @ 202FFAA - .space 0xA + .include "src/pokemon_menu.o" .include "src/pokedex.o" .include "src/trainer_card.o" .include "src/pokemon_storage_system.o" |