mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-17 03:57:38 +01:00
decompiled up to sub_81AC10C
This commit is contained in:
parent
e78697494c
commit
0a67b1d80c
369
asm/item_menu.s
369
asm/item_menu.s
@ -5,375 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start GetSwitchBagPocketDirection
|
|
||||||
GetSwitchBagPocketDirection: @ 81ABF10
|
|
||||||
push {lr}
|
|
||||||
ldr r0, =gUnknown_0203CE54
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldr r1, =0x0000081b
|
|
||||||
adds r0, r1
|
|
||||||
ldrb r1, [r0]
|
|
||||||
movs r0, 0xF
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081ABF6A
|
|
||||||
bl GetLRKeysState
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r2, r0, 24
|
|
||||||
ldr r0, =gMain
|
|
||||||
ldrh r1, [r0, 0x2E]
|
|
||||||
movs r0, 0x20
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081ABF3C
|
|
||||||
cmp r2, 0x1
|
|
||||||
bne _081ABF54
|
|
||||||
_081ABF3C:
|
|
||||||
movs r0, 0x5
|
|
||||||
bl PlaySE
|
|
||||||
movs r0, 0x1
|
|
||||||
b _081ABF6C
|
|
||||||
.pool
|
|
||||||
_081ABF54:
|
|
||||||
movs r0, 0x10
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081ABF60
|
|
||||||
cmp r2, 0x2
|
|
||||||
bne _081ABF6A
|
|
||||||
_081ABF60:
|
|
||||||
movs r0, 0x5
|
|
||||||
bl PlaySE
|
|
||||||
movs r0, 0x2
|
|
||||||
b _081ABF6C
|
|
||||||
_081ABF6A:
|
|
||||||
movs r0, 0
|
|
||||||
_081ABF6C:
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end GetSwitchBagPocketDirection
|
|
||||||
|
|
||||||
thumb_func_start ChangeBagPocketId
|
|
||||||
@ void ChangeBagPocketId(u8 *bagPocketId, u8 deltaBagPocketId)
|
|
||||||
ChangeBagPocketId: @ 81ABF70
|
|
||||||
push {r4,lr}
|
|
||||||
adds r2, r0, 0
|
|
||||||
lsls r1, 24
|
|
||||||
lsrs r4, r1, 24
|
|
||||||
asrs r1, 24
|
|
||||||
cmp r1, 0x1
|
|
||||||
bne _081ABF88
|
|
||||||
ldrb r0, [r2]
|
|
||||||
cmp r0, 0x4
|
|
||||||
bne _081ABF88
|
|
||||||
movs r0, 0
|
|
||||||
b _081ABFA0
|
|
||||||
_081ABF88:
|
|
||||||
lsls r0, r4, 24
|
|
||||||
asrs r0, 24
|
|
||||||
movs r1, 0x1
|
|
||||||
negs r1, r1
|
|
||||||
ldrb r3, [r2]
|
|
||||||
cmp r0, r1
|
|
||||||
bne _081ABF9E
|
|
||||||
cmp r3, 0
|
|
||||||
bne _081ABF9E
|
|
||||||
movs r0, 0x4
|
|
||||||
b _081ABFA0
|
|
||||||
_081ABF9E:
|
|
||||||
adds r0, r3, r4
|
|
||||||
_081ABFA0:
|
|
||||||
strb r0, [r2]
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end ChangeBagPocketId
|
|
||||||
|
|
||||||
thumb_func_start SwitchBagPocket
|
|
||||||
@ void SwitchBagPocket(u8 taskId, u16 deltaBagPocketId, u16 a3)
|
|
||||||
SwitchBagPocket: @ 81ABFA8
|
|
||||||
push {r4-r6,lr}
|
|
||||||
sub sp, 0xC
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r6, r0, 24
|
|
||||||
lsls r1, 16
|
|
||||||
lsrs r5, r1, 16
|
|
||||||
lsls r2, 16
|
|
||||||
lsls r0, r6, 2
|
|
||||||
adds r0, r6
|
|
||||||
lsls r0, 3
|
|
||||||
ldr r1, =gTasks + 0x8
|
|
||||||
adds r4, r0, r1
|
|
||||||
movs r0, 0
|
|
||||||
strh r0, [r4, 0x1A]
|
|
||||||
strh r0, [r4, 0x18]
|
|
||||||
strh r5, [r4, 0x16]
|
|
||||||
cmp r2, 0
|
|
||||||
bne _081AC026
|
|
||||||
movs r0, 0
|
|
||||||
bl ClearWindowTilemap
|
|
||||||
movs r0, 0x1
|
|
||||||
bl ClearWindowTilemap
|
|
||||||
ldrb r0, [r4]
|
|
||||||
ldr r3, =gUnknown_0203CE58
|
|
||||||
ldrb r2, [r3, 0x5]
|
|
||||||
lsls r2, 1
|
|
||||||
adds r1, r3, 0
|
|
||||||
adds r1, 0x12
|
|
||||||
adds r1, r2, r1
|
|
||||||
adds r3, 0x8
|
|
||||||
adds r2, r3
|
|
||||||
bl sub_81AE6C8
|
|
||||||
movs r0, 0
|
|
||||||
bl schedule_bg_copy_tilemap_to_vram
|
|
||||||
ldr r3, =gSprites
|
|
||||||
ldr r0, =gUnknown_0203CE54
|
|
||||||
ldr r2, [r0]
|
|
||||||
ldr r1, =0x0000081b
|
|
||||||
adds r0, r2, r1
|
|
||||||
ldrb r1, [r0]
|
|
||||||
lsls r1, 26
|
|
||||||
lsrs r1, 30
|
|
||||||
movs r0, 0x1
|
|
||||||
eors r0, r1
|
|
||||||
adds r2, r0
|
|
||||||
ldr r0, =0x00000806
|
|
||||||
adds r2, r0
|
|
||||||
ldrb r1, [r2]
|
|
||||||
lsls r0, r1, 4
|
|
||||||
adds r0, r1
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r3
|
|
||||||
adds r0, 0x3E
|
|
||||||
ldrb r1, [r0]
|
|
||||||
movs r2, 0x4
|
|
||||||
orrs r1, r2
|
|
||||||
strb r1, [r0]
|
|
||||||
bl sub_81AB824
|
|
||||||
_081AC026:
|
|
||||||
ldr r4, =gUnknown_0203CE58
|
|
||||||
ldrb r1, [r4, 0x5]
|
|
||||||
add r0, sp, 0x8
|
|
||||||
strb r1, [r0]
|
|
||||||
lsls r1, r5, 24
|
|
||||||
asrs r1, 24
|
|
||||||
bl ChangeBagPocketId
|
|
||||||
lsls r0, r5, 16
|
|
||||||
asrs r1, r0, 16
|
|
||||||
adds r5, r0, 0
|
|
||||||
cmp r1, 0x1
|
|
||||||
bne _081AC07C
|
|
||||||
ldr r2, =gPocketNamesStringsTable
|
|
||||||
ldrb r0, [r4, 0x5]
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r2
|
|
||||||
ldr r0, [r0]
|
|
||||||
add r1, sp, 0x8
|
|
||||||
ldrb r1, [r1]
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r2
|
|
||||||
ldr r1, [r1]
|
|
||||||
bl bag_menu_print_pocket_names
|
|
||||||
movs r0, 0
|
|
||||||
bl bag_menu_copy_pocket_name_to_window
|
|
||||||
b _081AC09A
|
|
||||||
.pool
|
|
||||||
_081AC07C:
|
|
||||||
ldr r2, =gPocketNamesStringsTable
|
|
||||||
add r0, sp, 0x8
|
|
||||||
ldrb r0, [r0]
|
|
||||||
lsls r0, 2
|
|
||||||
adds r0, r2
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r1, [r4, 0x5]
|
|
||||||
lsls r1, 2
|
|
||||||
adds r1, r2
|
|
||||||
ldr r1, [r1]
|
|
||||||
bl bag_menu_print_pocket_names
|
|
||||||
movs r0, 0x8
|
|
||||||
bl bag_menu_copy_pocket_name_to_window
|
|
||||||
_081AC09A:
|
|
||||||
ldr r0, =gUnknown_0203CE58
|
|
||||||
ldrb r0, [r0, 0x5]
|
|
||||||
movs r1, 0
|
|
||||||
bl bag_menu_draw_pocket_indicator_square
|
|
||||||
add r0, sp, 0x8
|
|
||||||
ldrb r0, [r0]
|
|
||||||
movs r1, 0x1
|
|
||||||
bl bag_menu_draw_pocket_indicator_square
|
|
||||||
movs r0, 0xF
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0x10
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0xB
|
|
||||||
movs r2, 0xE
|
|
||||||
movs r3, 0x2
|
|
||||||
bl FillBgTilemapBufferRect_Palette0
|
|
||||||
movs r0, 0x2
|
|
||||||
bl schedule_bg_copy_tilemap_to_vram
|
|
||||||
add r0, sp, 0x8
|
|
||||||
ldrb r0, [r0]
|
|
||||||
movs r1, 0x1
|
|
||||||
bl SetBagVisualPocketId
|
|
||||||
movs r0, 0x1
|
|
||||||
bl RemoveBagObject
|
|
||||||
asrs r0, r5, 16
|
|
||||||
bl AddSwitchPocketRotatingBallObject
|
|
||||||
ldr r1, =sub_81AC10C
|
|
||||||
ldr r2, =gTasks
|
|
||||||
lsls r0, r6, 2
|
|
||||||
adds r0, r6
|
|
||||||
lsls r0, 3
|
|
||||||
adds r0, r2
|
|
||||||
ldr r2, [r0]
|
|
||||||
adds r0, r6, 0
|
|
||||||
bl SetTaskFuncWithFollowupFunc
|
|
||||||
add sp, 0xC
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end SwitchBagPocket
|
|
||||||
|
|
||||||
thumb_func_start sub_81AC10C
|
|
||||||
sub_81AC10C: @ 81AC10C
|
|
||||||
push {r4-r7,lr}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r7, r0, 24
|
|
||||||
lsls r0, r7, 2
|
|
||||||
adds r0, r7
|
|
||||||
lsls r0, 3
|
|
||||||
ldr r1, =gTasks + 0x8
|
|
||||||
adds r6, r0, r1
|
|
||||||
bl sub_81221AC
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081AC184
|
|
||||||
bl IsWallysBag
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081AC184
|
|
||||||
bl GetSwitchBagPocketDirection
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
cmp r0, 0x1
|
|
||||||
beq _081AC148
|
|
||||||
cmp r0, 0x2
|
|
||||||
beq _081AC164
|
|
||||||
b _081AC184
|
|
||||||
.pool
|
|
||||||
_081AC148:
|
|
||||||
ldr r0, =gUnknown_0203CE5D
|
|
||||||
movs r1, 0x16
|
|
||||||
ldrsb r1, [r6, r1]
|
|
||||||
bl ChangeBagPocketId
|
|
||||||
adds r0, r7, 0
|
|
||||||
bl SwitchTaskToFollowupFunc
|
|
||||||
movs r1, 0x1
|
|
||||||
negs r1, r1
|
|
||||||
adds r0, r7, 0
|
|
||||||
b _081AC178
|
|
||||||
.pool
|
|
||||||
_081AC164:
|
|
||||||
ldr r0, =gUnknown_0203CE5D
|
|
||||||
movs r1, 0x16
|
|
||||||
ldrsb r1, [r6, r1]
|
|
||||||
bl ChangeBagPocketId
|
|
||||||
adds r0, r7, 0
|
|
||||||
bl SwitchTaskToFollowupFunc
|
|
||||||
adds r0, r7, 0
|
|
||||||
movs r1, 0x1
|
|
||||||
_081AC178:
|
|
||||||
movs r2, 0x1
|
|
||||||
bl SwitchBagPocket
|
|
||||||
b _081AC22E
|
|
||||||
.pool
|
|
||||||
_081AC184:
|
|
||||||
movs r1, 0x1A
|
|
||||||
ldrsh r0, [r6, r1]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081AC192
|
|
||||||
cmp r0, 0x1
|
|
||||||
beq _081AC1DC
|
|
||||||
b _081AC22E
|
|
||||||
_081AC192:
|
|
||||||
ldrb r0, [r6, 0x18]
|
|
||||||
bl sub_81AC23C
|
|
||||||
ldrh r0, [r6, 0x18]
|
|
||||||
adds r1, r0, 0x1
|
|
||||||
strh r1, [r6, 0x18]
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081AC1CC
|
|
||||||
movs r2, 0x16
|
|
||||||
ldrsh r0, [r6, r2]
|
|
||||||
cmp r0, 0x1
|
|
||||||
bne _081AC1BC
|
|
||||||
lsls r0, r1, 16
|
|
||||||
asrs r0, 17
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
bl bag_menu_copy_pocket_name_to_window
|
|
||||||
b _081AC1CC
|
|
||||||
_081AC1BC:
|
|
||||||
lsls r1, 16
|
|
||||||
asrs r1, 17
|
|
||||||
movs r0, 0x8
|
|
||||||
subs r0, r1
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
bl bag_menu_copy_pocket_name_to_window
|
|
||||||
_081AC1CC:
|
|
||||||
movs r1, 0x18
|
|
||||||
ldrsh r0, [r6, r1]
|
|
||||||
cmp r0, 0x10
|
|
||||||
bne _081AC22E
|
|
||||||
ldrh r0, [r6, 0x1A]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r6, 0x1A]
|
|
||||||
b _081AC22E
|
|
||||||
_081AC1DC:
|
|
||||||
ldr r4, =gUnknown_0203CE5D
|
|
||||||
movs r1, 0x16
|
|
||||||
ldrsb r1, [r6, r1]
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl ChangeBagPocketId
|
|
||||||
subs r5, r4, 0x5
|
|
||||||
ldrb r0, [r5, 0x5]
|
|
||||||
bl load_bag_item_list_buffers
|
|
||||||
ldr r0, =gMultiuseListMenuTemplate
|
|
||||||
ldrb r2, [r5, 0x5]
|
|
||||||
lsls r2, 1
|
|
||||||
adds r1, r4, 0
|
|
||||||
adds r1, 0xD
|
|
||||||
adds r1, r2, r1
|
|
||||||
ldrh r1, [r1]
|
|
||||||
adds r4, 0x3
|
|
||||||
adds r2, r4
|
|
||||||
ldrh r2, [r2]
|
|
||||||
bl ListMenuInit
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
strh r0, [r6]
|
|
||||||
movs r0, 0x1
|
|
||||||
bl PutWindowTilemap
|
|
||||||
movs r0, 0x2
|
|
||||||
bl PutWindowTilemap
|
|
||||||
movs r0, 0
|
|
||||||
bl schedule_bg_copy_tilemap_to_vram
|
|
||||||
bl bag_menu_add_pocket_scroll_arrow_indicators_maybe
|
|
||||||
bl bag_menu_add_list_scroll_arrow_indicators_maybe
|
|
||||||
adds r0, r7, 0
|
|
||||||
bl SwitchTaskToFollowupFunc
|
|
||||||
_081AC22E:
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81AC10C
|
|
||||||
|
|
||||||
thumb_func_start sub_81AC23C
|
thumb_func_start sub_81AC23C
|
||||||
sub_81AC23C: @ 81AC23C
|
sub_81AC23C: @ 81AC23C
|
||||||
push {lr}
|
push {lr}
|
||||||
|
283
src/item_menu.c
283
src/item_menu.c
@ -39,7 +39,8 @@ struct unkBagStruct {
|
|||||||
void* unk0;
|
void* unk0;
|
||||||
u8 unk4[0x800];
|
u8 unk4[0x800];
|
||||||
u8 unk804;
|
u8 unk804;
|
||||||
u8 filler4[11];
|
u8 filler4;
|
||||||
|
u8 unk806[10];
|
||||||
u8 unk810[10];
|
u8 unk810[10];
|
||||||
u8 unk81A;
|
u8 unk81A;
|
||||||
u8 unk81B:4;
|
u8 unk81B:4;
|
||||||
@ -92,6 +93,8 @@ extern u8 GetMenuCursorDimensionByFont(u8, u8);
|
|||||||
extern u8 AddScrollIndicatorArrowPair(void*, void*);
|
extern u8 AddScrollIndicatorArrowPair(void*, void*);
|
||||||
extern void sub_80D6FB4(struct BagPocket*);
|
extern void sub_80D6FB4(struct BagPocket*);
|
||||||
extern void sub_80D6F64(struct BagPocket*);
|
extern void sub_80D6F64(struct BagPocket*);
|
||||||
|
extern u8 GetLRKeysState(void);
|
||||||
|
extern void sub_81AC23C(u8);
|
||||||
|
|
||||||
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
|
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
|
||||||
void CB2_Bag(void);
|
void CB2_Bag(void);
|
||||||
@ -101,7 +104,7 @@ bool8 load_bag_menu_graphics(void);
|
|||||||
void setup_bag_menu_textboxes(void);
|
void setup_bag_menu_textboxes(void);
|
||||||
void allocate_bag_item_list_buffers(void);
|
void allocate_bag_item_list_buffers(void);
|
||||||
void load_bag_item_list_buffers(u8);
|
void load_bag_item_list_buffers(u8);
|
||||||
void bag_menu_print_pocket_names(u8*, u8);
|
void bag_menu_print_pocket_names(u8*, u8*);
|
||||||
void bag_menu_copy_pocket_name_to_window(u8);
|
void bag_menu_copy_pocket_name_to_window(u8);
|
||||||
void bag_menu_draw_pocket_indicator_square(u8, u8);
|
void bag_menu_draw_pocket_indicator_square(u8, u8);
|
||||||
void AddBagVisualObject(u8);
|
void AddBagVisualObject(u8);
|
||||||
@ -129,9 +132,13 @@ void set_callback3_to_bag(u8);
|
|||||||
void sub_81ABC54(u8, s16);
|
void sub_81ABC54(u8, s16);
|
||||||
u8 bag_menu_add_window(u8);
|
u8 bag_menu_add_window(u8);
|
||||||
u8 GetSwitchBagPocketDirection(void);
|
u8 GetSwitchBagPocketDirection(void);
|
||||||
void SwitchBagPocket(u8, s8, u8);
|
void SwitchBagPocket(u8, s16, u16);
|
||||||
bool8 sub_81AC2C0(void);
|
bool8 sub_81AC2C0(void);
|
||||||
void bag_menu_swap_items(u8);
|
void bag_menu_swap_items(u8);
|
||||||
|
void SetBagVisualPocketId(u8, u8);
|
||||||
|
void RemoveBagObject(u8);
|
||||||
|
void AddSwitchPocketRotatingBallObject(s16);
|
||||||
|
void sub_81AC10C(u8);
|
||||||
|
|
||||||
extern u8 *gPocketNamesStringsTable[];
|
extern u8 *gPocketNamesStringsTable[];
|
||||||
extern struct BgTemplate gUnknown_08613F90[];
|
extern struct BgTemplate gUnknown_08613F90[];
|
||||||
@ -842,3 +849,273 @@ void set_callback3_to_bag(u8 taskId)
|
|||||||
schedule_bg_copy_tilemap_to_vram(0);
|
schedule_bg_copy_tilemap_to_vram(0);
|
||||||
gTasks[taskId].func = Task_BagMenu;
|
gTasks[taskId].func = Task_BagMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 GetSwitchBagPocketDirection(void)
|
||||||
|
{
|
||||||
|
u8 LRKeys;
|
||||||
|
if (gUnknown_0203CE54->unk81B != 0)
|
||||||
|
return 0;
|
||||||
|
LRKeys = GetLRKeysState();
|
||||||
|
if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1)
|
||||||
|
{
|
||||||
|
PlaySE(SE_SELECT);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == 2)
|
||||||
|
{
|
||||||
|
PlaySE(SE_SELECT);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
|
||||||
|
{
|
||||||
|
if (deltaBagPocketId == 1 && *bagPocketId == 4)
|
||||||
|
*bagPocketId = 0;
|
||||||
|
else if (deltaBagPocketId == -1 && *bagPocketId == 0)
|
||||||
|
{
|
||||||
|
*bagPocketId = 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*bagPocketId += deltaBagPocketId;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NONMATCHING
|
||||||
|
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||||
|
{
|
||||||
|
s16* data = gTasks[taskId].data;
|
||||||
|
u8 pocketId;
|
||||||
|
|
||||||
|
|
||||||
|
data[13] = 0;
|
||||||
|
data[12] = 0;
|
||||||
|
data[11] = deltaBagPocketId;
|
||||||
|
if (a3 == 0)
|
||||||
|
{
|
||||||
|
ClearWindowTilemap(0);
|
||||||
|
ClearWindowTilemap(1);
|
||||||
|
sub_81AE6C8(data[0], &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
|
||||||
|
schedule_bg_copy_tilemap_to_vram(0);
|
||||||
|
gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1;
|
||||||
|
sub_81AB824();
|
||||||
|
}
|
||||||
|
pocketId = gUnknown_0203CE58.pocket;
|
||||||
|
ChangeBagPocketId(&pocketId, deltaBagPocketId);
|
||||||
|
if (deltaBagPocketId == 1)
|
||||||
|
{
|
||||||
|
bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], gPocketNamesStringsTable[pocketId]);
|
||||||
|
bag_menu_copy_pocket_name_to_window(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bag_menu_print_pocket_names(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gUnknown_0203CE58.pocket]);
|
||||||
|
bag_menu_copy_pocket_name_to_window(8);
|
||||||
|
}
|
||||||
|
bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 0);
|
||||||
|
bag_menu_draw_pocket_indicator_square(pocketId, 1);
|
||||||
|
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
|
||||||
|
schedule_bg_copy_tilemap_to_vram(2);
|
||||||
|
SetBagVisualPocketId(pocketId, 1);
|
||||||
|
RemoveBagObject(1);
|
||||||
|
AddSwitchPocketRotatingBallObject(deltaBagPocketId);
|
||||||
|
SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
__attribute__((naked))
|
||||||
|
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||||
|
{
|
||||||
|
asm(".syntax unified\n\
|
||||||
|
push {r4-r6,lr}\n\
|
||||||
|
sub sp, 0xC\n\
|
||||||
|
lsls r0, 24\n\
|
||||||
|
lsrs r6, r0, 24\n\
|
||||||
|
lsls r1, 16\n\
|
||||||
|
lsrs r5, r1, 16\n\
|
||||||
|
lsls r2, 16\n\
|
||||||
|
lsls r0, r6, 2\n\
|
||||||
|
adds r0, r6\n\
|
||||||
|
lsls r0, 3\n\
|
||||||
|
ldr r1, =gTasks + 0x8\n\
|
||||||
|
adds r4, r0, r1\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
strh r0, [r4, 0x1A]\n\
|
||||||
|
strh r0, [r4, 0x18]\n\
|
||||||
|
strh r5, [r4, 0x16]\n\
|
||||||
|
cmp r2, 0\n\
|
||||||
|
bne _081AC026\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
bl ClearWindowTilemap\n\
|
||||||
|
movs r0, 0x1\n\
|
||||||
|
bl ClearWindowTilemap\n\
|
||||||
|
ldrb r0, [r4]\n\
|
||||||
|
ldr r3, =gUnknown_0203CE58\n\
|
||||||
|
ldrb r2, [r3, 0x5]\n\
|
||||||
|
lsls r2, 1\n\
|
||||||
|
adds r1, r3, 0\n\
|
||||||
|
adds r1, 0x12\n\
|
||||||
|
adds r1, r2, r1\n\
|
||||||
|
adds r3, 0x8\n\
|
||||||
|
adds r2, r3\n\
|
||||||
|
bl sub_81AE6C8\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||||
|
ldr r3, =gSprites\n\
|
||||||
|
ldr r0, =gUnknown_0203CE54\n\
|
||||||
|
ldr r2, [r0]\n\
|
||||||
|
ldr r1, =0x0000081b\n\
|
||||||
|
adds r0, r2, r1\n\
|
||||||
|
ldrb r1, [r0]\n\
|
||||||
|
lsls r1, 26\n\
|
||||||
|
lsrs r1, 30\n\
|
||||||
|
movs r0, 0x1\n\
|
||||||
|
eors r0, r1\n\
|
||||||
|
adds r2, r0\n\
|
||||||
|
ldr r0, =0x00000806\n\
|
||||||
|
adds r2, r0\n\
|
||||||
|
ldrb r1, [r2]\n\
|
||||||
|
lsls r0, r1, 4\n\
|
||||||
|
adds r0, r1\n\
|
||||||
|
lsls r0, 2\n\
|
||||||
|
adds r0, r3\n\
|
||||||
|
adds r0, 0x3E\n\
|
||||||
|
ldrb r1, [r0]\n\
|
||||||
|
movs r2, 0x4\n\
|
||||||
|
orrs r1, r2\n\
|
||||||
|
strb r1, [r0]\n\
|
||||||
|
bl sub_81AB824\n\
|
||||||
|
_081AC026:\n\
|
||||||
|
ldr r4, =gUnknown_0203CE58\n\
|
||||||
|
ldrb r1, [r4, 0x5]\n\
|
||||||
|
add r0, sp, 0x8\n\
|
||||||
|
strb r1, [r0]\n\
|
||||||
|
lsls r1, r5, 24\n\
|
||||||
|
asrs r1, 24\n\
|
||||||
|
bl ChangeBagPocketId\n\
|
||||||
|
lsls r0, r5, 16\n\
|
||||||
|
asrs r1, r0, 16\n\
|
||||||
|
adds r5, r0, 0\n\
|
||||||
|
cmp r1, 0x1\n\
|
||||||
|
bne _081AC07C\n\
|
||||||
|
ldr r2, =gPocketNamesStringsTable\n\
|
||||||
|
ldrb r0, [r4, 0x5]\n\
|
||||||
|
lsls r0, 2\n\
|
||||||
|
adds r0, r2\n\
|
||||||
|
ldr r0, [r0]\n\
|
||||||
|
add r1, sp, 0x8\n\
|
||||||
|
ldrb r1, [r1]\n\
|
||||||
|
lsls r1, 2\n\
|
||||||
|
adds r1, r2\n\
|
||||||
|
ldr r1, [r1]\n\
|
||||||
|
bl bag_menu_print_pocket_names\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
bl bag_menu_copy_pocket_name_to_window\n\
|
||||||
|
b _081AC09A\n\
|
||||||
|
.pool\n\
|
||||||
|
_081AC07C:\n\
|
||||||
|
ldr r2, =gPocketNamesStringsTable\n\
|
||||||
|
add r0, sp, 0x8\n\
|
||||||
|
ldrb r0, [r0]\n\
|
||||||
|
lsls r0, 2\n\
|
||||||
|
adds r0, r2\n\
|
||||||
|
ldr r0, [r0]\n\
|
||||||
|
ldrb r1, [r4, 0x5]\n\
|
||||||
|
lsls r1, 2\n\
|
||||||
|
adds r1, r2\n\
|
||||||
|
ldr r1, [r1]\n\
|
||||||
|
bl bag_menu_print_pocket_names\n\
|
||||||
|
movs r0, 0x8\n\
|
||||||
|
bl bag_menu_copy_pocket_name_to_window\n\
|
||||||
|
_081AC09A:\n\
|
||||||
|
ldr r0, =gUnknown_0203CE58\n\
|
||||||
|
ldrb r0, [r0, 0x5]\n\
|
||||||
|
movs r1, 0\n\
|
||||||
|
bl bag_menu_draw_pocket_indicator_square\n\
|
||||||
|
add r0, sp, 0x8\n\
|
||||||
|
ldrb r0, [r0]\n\
|
||||||
|
movs r1, 0x1\n\
|
||||||
|
bl bag_menu_draw_pocket_indicator_square\n\
|
||||||
|
movs r0, 0xF\n\
|
||||||
|
str r0, [sp]\n\
|
||||||
|
movs r0, 0x10\n\
|
||||||
|
str r0, [sp, 0x4]\n\
|
||||||
|
movs r0, 0x2\n\
|
||||||
|
movs r1, 0xB\n\
|
||||||
|
movs r2, 0xE\n\
|
||||||
|
movs r3, 0x2\n\
|
||||||
|
bl FillBgTilemapBufferRect_Palette0\n\
|
||||||
|
movs r0, 0x2\n\
|
||||||
|
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||||
|
add r0, sp, 0x8\n\
|
||||||
|
ldrb r0, [r0]\n\
|
||||||
|
movs r1, 0x1\n\
|
||||||
|
bl SetBagVisualPocketId\n\
|
||||||
|
movs r0, 0x1\n\
|
||||||
|
bl RemoveBagObject\n\
|
||||||
|
asrs r0, r5, 16\n\
|
||||||
|
bl AddSwitchPocketRotatingBallObject\n\
|
||||||
|
ldr r1, =sub_81AC10C\n\
|
||||||
|
ldr r2, =gTasks\n\
|
||||||
|
lsls r0, r6, 2\n\
|
||||||
|
adds r0, r6\n\
|
||||||
|
lsls r0, 3\n\
|
||||||
|
adds r0, r2\n\
|
||||||
|
ldr r2, [r0]\n\
|
||||||
|
adds r0, r6, 0\n\
|
||||||
|
bl SetTaskFuncWithFollowupFunc\n\
|
||||||
|
add sp, 0xC\n\
|
||||||
|
pop {r4-r6}\n\
|
||||||
|
pop {r0}\n\
|
||||||
|
bx r0\n\
|
||||||
|
.pool\n\
|
||||||
|
.syntax divided\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void sub_81AC10C(u8 taskId)
|
||||||
|
{
|
||||||
|
s16* data = gTasks[taskId].data;
|
||||||
|
|
||||||
|
if (!sub_81221AC() && !IsWallysBag())
|
||||||
|
{
|
||||||
|
switch (GetSwitchBagPocketDirection())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||||
|
SwitchTaskToFollowupFunc(taskId);
|
||||||
|
SwitchBagPocket(taskId, -1, 1);
|
||||||
|
return;
|
||||||
|
case 2:
|
||||||
|
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||||
|
SwitchTaskToFollowupFunc(taskId);
|
||||||
|
SwitchBagPocket(taskId, 1, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (data[13])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sub_81AC23C(data[12]);
|
||||||
|
if (!(++data[12] & 1))
|
||||||
|
{
|
||||||
|
if (data[11] == 1)
|
||||||
|
bag_menu_copy_pocket_name_to_window(data[12] >> 1);
|
||||||
|
else
|
||||||
|
bag_menu_copy_pocket_name_to_window(8 - (data[12] >> 1));
|
||||||
|
}
|
||||||
|
if (data[12] == 16)
|
||||||
|
data[13]++;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||||
|
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||||
|
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
|
||||||
|
PutWindowTilemap(1);
|
||||||
|
PutWindowTilemap(2);
|
||||||
|
schedule_bg_copy_tilemap_to_vram(0);
|
||||||
|
bag_menu_add_pocket_scroll_arrow_indicators_maybe();
|
||||||
|
bag_menu_add_list_scroll_arrow_indicators_maybe();
|
||||||
|
SwitchTaskToFollowupFunc(taskId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user