decompile menu helpers

This commit is contained in:
DizzyEggg 2018-05-15 20:22:19 +02:00
parent 7735fb2ad3
commit 0cf3836a03
7 changed files with 173 additions and 398 deletions

View File

@ -1,230 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_8122344
sub_8122344: @ 8122344
push {r4-r7,lr}
mov r7, r8
push {r7}
mov r8, r0
lsls r1, 24
lsrs r6, r1, 24
movs r5, 0
cmp r5, r6
bcs _0812239C
ldr r7, =gSprites
_08122358:
lsls r1, r5, 4
ldr r0, =gUnknown_0859F524
movs r2, 0
movs r3, 0
bl CreateSprite
mov r1, r8
adds r4, r1, r5
strb r0, [r4]
cmp r5, 0
beq _0812237E
ldrb r1, [r4]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r7
movs r1, 0x1
bl StartSpriteAnim
_0812237E:
ldrb r1, [r4]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r7
adds r0, 0x3E
ldrb r1, [r0]
movs r2, 0x4
orrs r1, r2
strb r1, [r0]
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, r6
bcc _08122358
_0812239C:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_8122344
thumb_func_start sub_81223B0
sub_81223B0: @ 81223B0
push {r4-r7,lr}
adds r6, r0, 0
lsls r1, 24
lsrs r5, r1, 24
movs r4, 0
cmp r4, r5
bcs _081223F6
ldr r7, =gSprites
_081223C0:
subs r0, r5, 0x1
cmp r4, r0
bne _081223DC
adds r0, r6, r4
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r7
bl DestroySpriteAndFreeResources
b _081223EC
.pool
_081223DC:
adds r0, r6, r4
ldrb r1, [r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r7
bl DestroySprite
_081223EC:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, r5
bcc _081223C0
_081223F6:
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_81223B0
thumb_func_start sub_81223FC
sub_81223FC: @ 81223FC
push {r4-r7,lr}
adds r6, r0, 0
lsls r1, 24
lsrs r4, r1, 24
lsls r2, 24
lsrs r0, r2, 24
movs r3, 0
cmp r3, r4
bcs _0812243E
ldr r1, =gSprites
mov r12, r1
movs r1, 0x1
ands r0, r1
lsls r5, r0, 2
movs r7, 0x5
negs r7, r7
_0812241C:
adds r0, r6, r3
ldrb r0, [r0]
lsls r1, r0, 4
adds r1, r0
lsls r1, 2
add r1, r12
adds r1, 0x3E
ldrb r2, [r1]
adds r0, r7, 0
ands r0, r2
orrs r0, r5
strb r0, [r1]
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, r4
bcc _0812241C
_0812243E:
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_81223FC
thumb_func_start sub_8122448
@ void sub_8122448(int a1, u8 a2, u16 x, u16 y)
sub_8122448: @ 8122448
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r6, r0, 0
lsls r1, 24
lsrs r4, r1, 24
lsls r2, 16
lsrs r7, r2, 16
lsls r3, 16
lsrs r3, 16
mov r9, r3
movs r0, 0x80
ands r0, r4
lsls r0, 24
lsrs r0, 24
mov r8, r0
movs r0, 0x7F
ands r4, r0
movs r3, 0
cmp r3, r4
bcs _081224C8
ldr r5, =gSprites
lsls r0, r7, 16
asrs r0, 16
subs r0, 0x8
mov r12, r0
_0812247E:
subs r0, r4, 0x1
cmp r3, r0
bne _081224A0
mov r0, r8
cmp r0, 0
beq _081224A0
adds r2, r6, r3
ldrb r1, [r2]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
mov r1, r12
strh r1, [r0, 0x24]
b _081224AE
.pool
_081224A0:
adds r2, r6, r3
ldrb r1, [r2]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
strh r7, [r0, 0x24]
_081224AE:
ldrb r1, [r2]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r5
mov r1, r9
adds r1, 0x1
strh r1, [r0, 0x22]
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, r4
bcc _0812247E
_081224C8:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8122448
.align 2, 0 @ Don't pad with nop.

View File

@ -1,37 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2, 0
gUnknown_0859F4E8:: @ 859F4E8
.2byte 0x00
.2byte 0x4000
.2byte 0x00
.2byte 0x00
gUnknown_0859F4F0:: @ 859F4F0
obj_image_anim_frame 0x00, 0x00
obj_image_anim_end
gUnknown_0859F4F8:: @ 859F4F8
obj_image_anim_frame 0x04, 0x00
obj_image_anim_end
gUnknown_0859F500:: @ 859F500
obj_image_anim_frame 0x00, 0x40
obj_image_anim_end
gUnknown_0859F508:: @ 859F508
.4byte gUnknown_0859F4F0
.4byte gUnknown_0859F4F8
.4byte gUnknown_0859F500
gUnknown_0859F514:: @ 859F514
.4byte gBagSwapLineGfx, 0x6D0100
gUnknown_0859F51C:: @ 859F51C
.4byte gBagSwapLinePal, 0x6D
gUnknown_0859F524:: @ 859F524
spr_template 0x6D, 0x6D, gUnknown_0859F4E8, gUnknown_0859F508, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy

View File

@ -14,29 +14,27 @@ struct YesNoFuncTable
// Exported RAM declarations // Exported RAM declarations
// Exported ROM declarations // Exported ROM declarations
void sub_812220C(struct ItemSlot *, u8, u8 *, u8 *, u8);
void sub_812225C(u16 *, u16 *, u8, u8);
void sub_8122298(u16 *, u16 *, u8, u8, u8);
void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data);
bool8 sub_81221AC(void);
bool8 sub_81221EC(void);
void ResetVramOamAndBgCntRegs(void); void ResetVramOamAndBgCntRegs(void);
void SetVBlankHBlankCallbacksToNull(void);
void ResetAllBgsCoordinates(void); void ResetAllBgsCoordinates(void);
void SetVBlankHBlankCallbacksToNull(void);
void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc);
bool16 RunTextPrintersRetIsActive(u8 textPrinterId); bool16 RunTextPrintersRetIsActive(u8 textPrinterId);
void sub_8122344(u8 *arg0, u8 arg1); void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data);
void sub_81223B0(u8 *arg0, u8 arg1);
void LoadListMenuArrowsGfx(void);
void sub_81223FC(u8 *a0, u8 count, u8 a2);
void sub_8122448(u8 *a0, u8 count, u16 x, u16 y);
void DisplayMessageAndContinueTask(u8 taskId, u8 arg1, u16 arg2, u8 arg3, u8 arg4, u8 textSpeed, const u8 *string, void *taskFunc);
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
u8 GetLRKeysState(void); u8 GetLRKeysState(void);
u8 sub_812210C(void); u8 sub_812210C(void);
bool8 sub_81221EC(void); bool8 sub_8122148(u16 itemId);
bool8 itemid_80BF6D8_mail_related(u16 itemId);
bool8 sub_81221AC(void); bool8 sub_81221AC(void);
bool8 sub_8122148(u16); bool8 sub_81221EC(void);
bool8 AdjustQuantityAccordingToDPadInput(s16*, u16); void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount);
bool8 itemid_80BF6D8_mail_related(u16); void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3);
void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4);
void LoadListMenuArrowsGfx(void);
void sub_8122344(u8 *spriteIds, u8 count);
void sub_81223B0(u8 *spriteIds, u8 count);
void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible);
void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y);
#endif //GUARD_MENU_HELPERS_H #endif //GUARD_MENU_HELPERS_H

View File

@ -164,7 +164,6 @@ SECTIONS {
src/mauville_old_man.o(.text); src/mauville_old_man.o(.text);
src/mail.o(.text); src/mail.o(.text);
src/menu_helpers.o(.text); src/menu_helpers.o(.text);
asm/menu_helpers.o(.text);
src/dewford_trend.o(.text); src/dewford_trend.o(.text);
src/heal_location.o(.text); src/heal_location.o(.text);
src/region_map.o(.text); src/region_map.o(.text);
@ -457,7 +456,7 @@ SECTIONS {
src/mon_markings.o(.rodata); src/mon_markings.o(.rodata);
src/mauville_old_man.o(.rodata); src/mauville_old_man.o(.rodata);
src/mail.o(.rodata); src/mail.o(.rodata);
data/menu_helpers.o(.rodata); src/menu_helpers.o(.rodata);
src/heal_location.o(.rodata); src/heal_location.o(.rodata);
src/region_map.o(.rodata); src/region_map.o(.rodata);
data/cute_sketch.o(.rodata); data/cute_sketch.o(.rodata);

View File

@ -17,19 +17,85 @@
#include "constants/items.h" #include "constants/items.h"
#include "constants/maps.h" #include "constants/maps.h"
extern u8 gUnknown_0203A140;
extern TaskFunc gUnknown_0300117C;
extern struct YesNoFuncTable gUnknown_0203A138;
extern const struct CompressedSpriteSheet gUnknown_0859F514;
extern const struct CompressedSpritePalette gUnknown_0859F51C;
extern bool32 InUnionRoom(void);
extern bool32 sub_800B504(void); extern bool32 sub_800B504(void);
extern const u8 gBagSwapLineGfx[];
extern const u8 gBagSwapLinePal[];
// this file's functions // this file's functions
void Task_ContinueTaskAfterMessagePrints(u8 taskId); static void Task_ContinueTaskAfterMessagePrints(u8 taskId);
void Task_CallYesOrNoCallback(u8 taskId); static void Task_CallYesOrNoCallback(u8 taskId);
// EWRAM vars
EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0};
EWRAM_DATA static u8 gUnknown_0203A140 = 0;
// IWRAM bss vars
IWRAM_DATA static TaskFunc gUnknown_0300117C;
// const rom data
static const struct OamData sOamData_859F4E8 =
{
.y = 0,
.affineMode = 0,
.objMode = 0,
.mosaic = 0,
.bpp = 0,
.shape = 0,
.x = 0,
.matrixNum = 0,
.size = 1,
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
.affineParam = 0
};
static const union AnimCmd sSpriteAnim_859F4F0[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_859F4F8[] =
{
ANIMCMD_FRAME(4, 0),
ANIMCMD_END
};
static const union AnimCmd sSpriteAnim_859F500[] =
{
ANIMCMD_FRAME(0, 0, 1, 0),
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_859F508[] =
{
sSpriteAnim_859F4F0,
sSpriteAnim_859F4F8,
sSpriteAnim_859F500
};
static const struct CompressedSpriteSheet gUnknown_0859F514 =
{
gBagSwapLineGfx, 0x100, 109
};
static const struct CompressedSpritePalette gUnknown_0859F51C =
{
gBagSwapLinePal, 109
};
static const struct SpriteTemplate gUnknown_0859F524 =
{
.tileTag = 109,
.paletteTag = 109,
.oam = &sOamData_859F4E8,
.anims = sSpriteAnimTable_859F508,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
// code // code
void ResetVramOamAndBgCntRegs(void) void ResetVramOamAndBgCntRegs(void)
@ -82,7 +148,7 @@ bool16 RunTextPrintersRetIsActive(u8 textPrinterId)
return IsTextPrinterActive(textPrinterId); return IsTextPrinterActive(textPrinterId);
} }
void Task_ContinueTaskAfterMessagePrints(u8 taskId) static void Task_ContinueTaskAfterMessagePrints(u8 taskId)
{ {
if (!RunTextPrintersRetIsActive(gUnknown_0203A140)) if (!RunTextPrintersRetIsActive(gUnknown_0203A140))
gUnknown_0300117C(taskId); gUnknown_0300117C(taskId);
@ -101,7 +167,7 @@ void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *templa
gTasks[taskId].func = Task_CallYesOrNoCallback; gTasks[taskId].func = Task_CallYesOrNoCallback;
} }
void Task_CallYesOrNoCallback(u8 taskId) static void Task_CallYesOrNoCallback(u8 taskId)
{ {
switch (ProcessMenuInputNoWrap_()) switch (ProcessMenuInputNoWrap_())
{ {
@ -296,105 +362,94 @@ void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3)
} }
} }
#ifdef NONMATCHING
void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4) void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4)
{ {
if (arg2 & 1) u8 i;
{
if (arg4 % 2 != 0)
{
if ((*arg1) >= arg4 / 2)
{
for (i = 0; i < (*arg1) - (arg4 / 2); i++)
{
if ((*arg0) + arg2 == arg3)
break;
(*arg1)--;
(*arg0)++;
}
}
} }
else else
{ {
if ((*arg1) >= (arg4 / 2) + 1)
{
for (i = 0; i <= (*arg1) - (arg4 / 2); i++)
{
if ((*arg0) + arg2 == arg3)
break;
(*arg1)--;
(*arg0)++;
}
}
} }
} }
#else
NAKED
void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4)
{
asm_unified("\n\
push {r4-r7,lr}\n\
adds r5, r0, 0\n\
adds r4, r1, 0\n\
ldr r0, [sp, 0x14]\n\
lsls r2, 24\n\
lsrs r7, r2, 24\n\
lsls r3, 24\n\
lsrs r6, r3, 24\n\
lsls r2, r0, 24\n\
lsrs r0, r2, 24\n\
movs r1, 0x1\n\
ands r0, r1\n\
cmp r0, 0\n\
beq _081222F0\n\
lsrs r2, 25\n\
ldrh r0, [r4]\n\
cmp r0, r2\n\
bcc _08122322\n\
movs r1, 0\n\
subs r0, r2\n\
cmp r1, r0\n\
bge _08122322\n\
ldrh r0, [r5]\n\
adds r0, r7\n\
cmp r0, r6\n\
beq _08122322\n\
_081222CC:\n\
ldrh r0, [r4]\n\
subs r0, 0x1\n\
strh r0, [r4]\n\
ldrh r0, [r5]\n\
adds r0, 0x1\n\
strh r0, [r5]\n\
adds r0, r1, 0x1\n\
lsls r0, 24\n\
lsrs r1, r0, 24\n\
ldrh r0, [r4]\n\
subs r0, r2\n\
cmp r1, r0\n\
bge _08122322\n\
ldrh r0, [r5]\n\
adds r0, r7\n\
cmp r0, r6\n\
bne _081222CC\n\
b _08122322\n\
_081222F0:\n\
ldrh r3, [r4]\n\
lsrs r2, 25\n\
adds r0, r2, 0x1\n\
cmp r3, r0\n\
blt _08122322\n\
movs r1, 0\n\
subs r0, r3, r2\n\
b _08122316\n\
_08122300:\n\
ldrh r0, [r4]\n\
subs r0, 0x1\n\
strh r0, [r4]\n\
ldrh r0, [r5]\n\
adds r0, 0x1\n\
strh r0, [r5]\n\
adds r0, r1, 0x1\n\
lsls r0, 24\n\
lsrs r1, r0, 24\n\
ldrh r0, [r4]\n\
subs r0, r2\n\
_08122316:\n\
cmp r1, r0\n\
bgt _08122322\n\
ldrh r0, [r5]\n\
adds r0, r7\n\
cmp r0, r6\n\
bne _08122300\n\
_08122322:\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0");
}
#endif // NONMATCHING
void LoadListMenuArrowsGfx(void) void LoadListMenuArrowsGfx(void)
{ {
LoadCompressedObjectPic(&gUnknown_0859F514); LoadCompressedObjectPic(&gUnknown_0859F514);
LoadCompressedObjectPalette(&gUnknown_0859F51C); LoadCompressedObjectPalette(&gUnknown_0859F51C);
} }
void sub_8122344(u8 *spriteIds, u8 count)
{
u8 i;
for (i = 0; i < count; i++)
{
spriteIds[i] = CreateSprite(&gUnknown_0859F524, i * 16, 0, 0);
if (i != 0)
StartSpriteAnim(&gSprites[spriteIds[i]], 1);
gSprites[spriteIds[i]].invisible = 1;
}
}
void sub_81223B0(u8 *spriteIds, u8 count)
{
u8 i;
for (i = 0; i < count; i++)
{
if (i == count - 1)
DestroySpriteAndFreeResources(&gSprites[spriteIds[i]]);
else
DestroySprite(&gSprites[spriteIds[i]]);
}
}
void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible)
{
u8 i;
for (i = 0; i < count; i++)
{
gSprites[spriteIds[i]].invisible = invisible;
}
}
void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y)
{
u8 i;
bool8 unknownBit = count & 0x80;
count &= ~(0x80);
for (i = 0; i < count; i++)
{
if (i == count - 1 && unknownBit)
gSprites[spriteIds[i]].pos2.x = x - 8;
else
gSprites[spriteIds[i]].pos2.x = x;
gSprites[spriteIds[i]].pos1.y = 1 + y;
}
}

View File

@ -29,11 +29,7 @@
.include "src/record_mixing.o" .include "src/record_mixing.o"
.include "src/tv.o" .include "src/tv.o"
.include "src/mauville_old_man.o" .include "src/mauville_old_man.o"
.include "src/menu_helpers.o"
.align 2
gUnknown_0300117C: @ 300117C
.space 0x4
.include "src/region_map.o" .include "src/region_map.o"
gUnknown_03001188: @ 3001188 gUnknown_03001188: @ 3001188

View File

@ -533,13 +533,7 @@ gUnknown_0203A120: @ 203A120
.include "src/mon_markings.o" .include "src/mon_markings.o"
.include "src/mauville_old_man.o" .include "src/mauville_old_man.o"
.include "src/mail.o" .include "src/mail.o"
.include "src/menu_helpers.o"
gUnknown_0203A138: @ 203A138
.space 0x8
gUnknown_0203A140: @ 203A140
.space 0x4
.include "src/region_map.o" .include "src/region_map.o"
.include "src/decoration.o" .include "src/decoration.o"
.align 2 .align 2