summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-15 15:11:51 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-15 15:11:51 -0400
commitbe742e6741af58076ac09722d42d64eee3c8d763 (patch)
treebdb64f7dbfed009d75a094acb0ea99e9368d7897
parent8908b7d47a6f4879a37c6d5794a347e1c3c422f4 (diff)
pokemon_storage_system_7
-rw-r--r--asm/pokemon_storage_system.s1479
-rw-r--r--data/pokemon_storage_system.s4
-rw-r--r--include/pokemon_icon.h2
-rw-r--r--include/pokemon_storage_system_internal.h4
-rw-r--r--include/window.h6
-rw-r--r--ld_script.txt2
-rw-r--r--src/pokemon_storage_system_7.c582
-rw-r--r--src/window_8bpp.c4
-rw-r--r--sym_ewram.txt5
9 files changed, 597 insertions, 1491 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index c991cd1eb..fe224637d 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -7,1485 +7,6 @@
@ file boundary?
- thumb_func_start sub_8095050
-sub_8095050: @ 8095050
- push {r4,lr}
- ldr r4, _08095088 @ =gUnknown_2039828
- ldr r0, _0809508C @ =0x00000974
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809509C
- ldr r0, _08095090 @ =gUnknown_83D35D4
- bl AddWindow8Bit
- adds r1, r0, 0
- ldr r0, _08095094 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08095098 @ =0x000021f0
- adds r0, r2
- strh r1, [r0]
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- beq _0809509C
- lsls r0, r1, 24
- lsrs r0, 24
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- b _0809509E
- .align 2, 0
-_08095088: .4byte gUnknown_2039828
-_0809508C: .4byte 0x00000974
-_08095090: .4byte gUnknown_83D35D4
-_08095094: .4byte sPSSData
-_08095098: .4byte 0x000021f0
-_0809509C:
- movs r0, 0
-_0809509E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095050
-
- thumb_func_start sub_80950A4
-sub_80950A4: @ 80950A4
- push {lr}
- ldr r0, _080950B8 @ =gUnknown_2039828
- ldr r0, [r0]
- cmp r0, 0
- beq _080950B2
- bl Free
-_080950B2:
- pop {r0}
- bx r0
- .align 2, 0
-_080950B8: .4byte gUnknown_2039828
- thumb_func_end sub_80950A4
-
- thumb_func_start sub_80950BC
-sub_80950BC: @ 80950BC
- ldr r2, _080950CC @ =gUnknown_2039828
- ldr r1, [r2]
- movs r3, 0
- strb r0, [r1]
- ldr r0, [r2]
- strb r3, [r0, 0x1]
- bx lr
- .align 2, 0
-_080950CC: .4byte gUnknown_2039828
- thumb_func_end sub_80950BC
-
- thumb_func_start sub_80950D0
-sub_80950D0: @ 80950D0
- push {lr}
- ldr r0, _080950E8 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08095130
- lsls r0, 2
- ldr r1, _080950EC @ =_080950F0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080950E8: .4byte gUnknown_2039828
-_080950EC: .4byte _080950F0
- .align 2, 0
-_080950F0:
- .4byte _08095108
- .4byte _0809510E
- .4byte _08095114
- .4byte _0809511A
- .4byte _08095120
- .4byte _08095126
-_08095108:
- bl sub_8095138
- b _0809512A
-_0809510E:
- bl sub_8095234
- b _0809512A
-_08095114:
- bl sub_80952A0
- b _0809512A
-_0809511A:
- bl sub_8095314
- b _0809512A
-_08095120:
- bl sub_8095394
- b _0809512A
-_08095126:
- bl sub_80953BC
-_0809512A:
- lsls r0, 24
- lsrs r0, 24
- b _08095132
-_08095130:
- movs r0, 0
-_08095132:
- pop {r1}
- bx r1
- thumb_func_end sub_80950D0
-
- thumb_func_start sub_8095138
-sub_8095138: @ 8095138
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r6, _08095150 @ =gUnknown_2039828
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x1
- beq _08095168
- cmp r0, 0x1
- bgt _08095154
- cmp r0, 0
- beq _0809515A
- b _08095228
- .align 2, 0
-_08095150: .4byte gUnknown_2039828
-_08095154:
- cmp r0, 0x2
- beq _08095214
- b _08095228
-_0809515A:
- movs r0, 0
- bl HideBg
- movs r0, 0x80
- bl LoadMonIconPalettesAt
- b _080951F8
-_08095168:
- adds r0, r1, 0x2
- adds r1, 0x3
- bl sub_8094CD4
- ldr r1, [r6]
- ldrb r0, [r1, 0x2]
- strb r0, [r1, 0x4]
- ldr r1, [r6]
- ldrb r0, [r1, 0x3]
- strb r0, [r1, 0x5]
- ldr r4, _08095204 @ =0xfffffc00
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- ldr r5, _08095208 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809520C @ =0x000021f0
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl FillWindowPixelBuffer8Bit
- ldr r1, [r6]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- bl sub_80956A4
- movs r0, 0
- movs r1, 0x4
- movs r2, 0x1
- bl SetBgAttribute
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl PutWindowTilemap
- ldr r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0x3
- bl CopyWindowToVram8Bit
- movs r0, 0xFC
- lsls r0, 6
- ldr r2, _08095210 @ =0x00007fff
- movs r1, 0x8
- bl BlendPalettes
- movs r0, 0x2
- bl sub_8094D14
- movs r0, 0x8
- movs r1, 0x80
- bl SetGpuRegBits
-_080951F8:
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _08095228
- .align 2, 0
-_08095204: .4byte 0xfffffc00
-_08095208: .4byte sPSSData
-_0809520C: .4byte 0x000021f0
-_08095210: .4byte 0x00007fff
-_08095214:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08095228
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809522A
-_08095228:
- movs r0, 0x1
-_0809522A:
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8095138
-
- thumb_func_start sub_8095234
-sub_8095234: @ 8095234
- push {r4,lr}
- ldr r4, _0809524C @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _0809525E
- cmp r0, 0x1
- bgt _08095250
- cmp r0, 0
- beq _08095256
- b _08095298
- .align 2, 0
-_0809524C: .4byte gUnknown_2039828
-_08095250:
- cmp r0, 0x2
- beq _08095272
- b _08095298
-_08095256:
- movs r0, 0
- bl HideBg
- b _08095268
-_0809525E:
- bl sub_8095A58
- movs r0, 0
- bl sub_8094D14
-_08095268:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _08095298
-_08095272:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08095298
- bl sub_8094D40
- movs r0, 0x3
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809529A
-_08095298:
- movs r0, 0x1
-_0809529A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095234
-
- thumb_func_start sub_80952A0
-sub_80952A0: @ 80952A0
- push {r4,lr}
- ldr r4, _080952B4 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080952B8
- cmp r0, 0x1
- beq _08095300
- b _0809530A
- .align 2, 0
-_080952B4: .4byte gUnknown_2039828
-_080952B8:
- bl sub_80924A8
- lsls r0, 24
- cmp r0, 0
- bne _0809530A
- ldr r1, [r4]
- adds r0, r1, 0x6
- adds r1, 0x7
- bl sub_8094CD4
- bl sub_8095520
- ldr r1, [r4]
- ldrb r0, [r1, 0x6]
- strb r0, [r1, 0x4]
- ldr r1, [r4]
- ldrb r0, [r1, 0x7]
- strb r0, [r1, 0x5]
- ldr r0, _080952F8 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080952FC @ =0x000021f0
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x2
- bl CopyWindowToVram8Bit
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809530A
- .align 2, 0
-_080952F8: .4byte sPSSData
-_080952FC: .4byte 0x000021f0
-_08095300:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0809530C
-_0809530A:
- movs r0, 0x1
-_0809530C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80952A0
-
- thumb_func_start sub_8095314
-sub_8095314: @ 8095314
- push {r4,lr}
- ldr r4, _0809532C @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _08095342
- cmp r0, 0x1
- bgt _08095330
- cmp r0, 0
- beq _08095336
- b _0809538C
- .align 2, 0
-_0809532C: .4byte gUnknown_2039828
-_08095330:
- cmp r0, 0x2
- beq _0809536E
- b _0809538C
-_08095336:
- bl sub_80957C8
- bl sub_80958A0
- movs r0, 0
- b _08095360
-_08095342:
- bl DoMonPlaceChange
- lsls r0, 24
- cmp r0, 0
- bne _0809538C
- movs r0, 0x3
- bl sub_8094D14
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- movs r2, 0x8
- bl sub_8095780
- movs r0, 0x1
-_08095360:
- bl sub_8092BAC
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809538C
-_0809536E:
- bl sub_8095790
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl DoMonPlaceChange
- lsls r0, 24
- lsrs r0, 24
- cmp r4, 0
- bne _0809538C
- cmp r0, 0
- bne _0809538C
- movs r0, 0
- b _0809538E
-_0809538C:
- movs r0, 0x1
-_0809538E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095314
-
- thumb_func_start sub_8095394
-sub_8095394: @ 8095394
- push {r4,lr}
- bl sub_80924A8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8095790
- lsls r0, 24
- lsrs r0, 24
- cmp r4, 0
- bne _080953B4
- cmp r0, 0
- bne _080953B4
- movs r0, 0
- b _080953B6
-_080953B4:
- movs r0, 0x1
-_080953B6:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8095394
-
- thumb_func_start sub_80953BC
-sub_80953BC: @ 80953BC
- push {r4,lr}
- ldr r4, _080953D4 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- beq _080953FA
- cmp r0, 0x1
- bgt _080953D8
- cmp r0, 0
- beq _080953E2
- b _0809546A
- .align 2, 0
-_080953D4: .4byte gUnknown_2039828
-_080953D8:
- cmp r0, 0x2
- beq _08095426
- cmp r0, 0x3
- beq _08095444
- b _0809546A
-_080953E2:
- bl sub_80959A8
- movs r1, 0xFF
- lsls r1, 8
- movs r0, 0
- movs r2, 0x8
- bl sub_8095780
- movs r0, 0
- bl sub_8092BAC
- b _0809543A
-_080953FA:
- bl DoMonPlaceChange
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- bl sub_8095790
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- bl sub_8095918
- movs r0, 0x2
- bl sub_8094D14
- movs r0, 0x1
- bl sub_8092BAC
- movs r0, 0
- bl HideBg
- b _0809543A
-_08095426:
- bl DoMonPlaceChange
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- movs r0, 0
- bl sub_8094D14
- bl sub_8095A58
-_0809543A:
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- adds r0, 0x1
- strb r0, [r1, 0x1]
- b _0809546A
-_08095444:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0809546A
- movs r0, 0x3
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- bl sub_8094D40
- movs r0, 0
- bl ShowBg
- movs r0, 0
- b _0809546C
-_0809546A:
- movs r0, 0x1
-_0809546C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80953BC
-
- thumb_func_start sub_8095474
-sub_8095474: @ 8095474
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- cmp r0, 0x1
- beq _080954B0
- cmp r0, 0x1
- bgt _0809548A
- cmp r0, 0
- beq _08095494
- b _08095518
-_0809548A:
- cmp r1, 0x2
- beq _080954D0
- cmp r1, 0x3
- beq _080954F0
- b _08095518
-_08095494:
- ldr r0, _080954AC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r0, [r1, 0x9]
- cmp r0, 0
- beq _080954FE
- subs r0, 0x1
- strb r0, [r1, 0x9]
- movs r1, 0x80
- lsls r1, 3
- movs r0, 0
- b _080954E4
- .align 2, 0
-_080954AC: .4byte gUnknown_2039828
-_080954B0:
- ldr r0, _080954CC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r2, [r1, 0x9]
- ldrb r0, [r1, 0xB]
- adds r0, r2, r0
- cmp r0, 0x4
- bgt _080954FE
- adds r0, r2, 0x1
- strb r0, [r1, 0x9]
- movs r1, 0xFC
- lsls r1, 8
- movs r0, 0
- b _080954E4
- .align 2, 0
-_080954CC: .4byte gUnknown_2039828
-_080954D0:
- ldr r0, _080954EC @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r0, [r1, 0x8]
- cmp r0, 0
- beq _080954FE
- subs r0, 0x1
- strb r0, [r1, 0x8]
- movs r0, 0x80
- lsls r0, 3
- movs r1, 0
-_080954E4:
- movs r2, 0x6
- bl sub_8095780
- b _08095518
- .align 2, 0
-_080954EC: .4byte gUnknown_2039828
-_080954F0:
- ldr r0, _08095504 @ =gUnknown_2039828
- ldr r1, [r0]
- ldrb r2, [r1, 0x8]
- ldrb r0, [r1, 0xA]
- adds r0, r2, r0
- cmp r0, 0x5
- ble _08095508
-_080954FE:
- movs r0, 0
- b _0809551A
- .align 2, 0
-_08095504: .4byte gUnknown_2039828
-_08095508:
- adds r0, r2, 0x1
- strb r0, [r1, 0x8]
- movs r0, 0xFC
- lsls r0, 8
- movs r1, 0
- movs r2, 0x6
- bl sub_8095780
-_08095518:
- movs r0, 0x1
-_0809551A:
- pop {r1}
- bx r1
- thumb_func_end sub_8095474
-
- thumb_func_start sub_8095520
-sub_8095520: @ 8095520
- push {r4-r7,lr}
- ldr r6, _080955C0 @ =gUnknown_2039828
- ldr r2, [r6]
- ldrb r3, [r2, 0x2]
- ldrb r5, [r2, 0x6]
- subs r1, r3, r5
- cmp r1, 0
- bge _08095532
- negs r1, r1
-_08095532:
- ldrb r0, [r2, 0x4]
- subs r0, r3, r0
- cmp r0, 0
- bge _0809553C
- negs r0, r0
-_0809553C:
- subs r0, r1, r0
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x7]
- subs r3, r1, r0
- cmp r3, 0
- bge _0809554E
- negs r3, r3
-_0809554E:
- ldrb r2, [r2, 0x5]
- subs r0, r1, r2
- cmp r0, 0
- bge _08095558
- negs r0, r0
-_08095558:
- subs r0, r3, r0
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r0, r4, 16
- asrs r4, r0, 16
- cmp r4, 0
- ble _0809556C
- adds r0, r5, 0
- bl sub_80955C4
-_0809556C:
- cmp r4, 0
- bge _08095588
- ldr r2, [r6]
- ldrb r0, [r2, 0x4]
- ldrb r1, [r2, 0x3]
- ldrb r2, [r2, 0x5]
- bl sub_8095634
- ldr r2, [r6]
- ldrb r0, [r2, 0x6]
- ldrb r1, [r2, 0x3]
- ldrb r2, [r2, 0x5]
- bl sub_80955C4
-_08095588:
- lsls r0, r7, 16
- asrs r4, r0, 16
- cmp r4, 0
- ble _0809559C
- ldr r2, [r6]
- ldrb r0, [r2, 0x7]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_80955FC
-_0809559C:
- cmp r4, 0
- bge _080955B8
- ldr r2, [r6]
- ldrb r0, [r2, 0x5]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_809566C
- ldr r2, [r6]
- ldrb r0, [r2, 0x7]
- ldrb r1, [r2, 0x2]
- ldrb r2, [r2, 0x4]
- bl sub_80955FC
-_080955B8:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080955C0: .4byte gUnknown_2039828
- thumb_func_end sub_8095520
-
- thumb_func_start sub_80955C4
-sub_80955C4: @ 80955C4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _080955E2
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _080955F4
-_080955E2:
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- bl sub_80956A4
- cmp r4, r5
- bls _080955E2
-_080955F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80955C4
-
- thumb_func_start sub_80955FC
-sub_80955FC: @ 80955FC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _0809561A
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _0809562C
-_0809561A:
- adds r0, r4, 0
- adds r1, r0, 0x1
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r6, 0
- bl sub_80956A4
- cmp r4, r5
- bls _0809561A
-_0809562C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80955FC
-
- thumb_func_start sub_8095634
-sub_8095634: @ 8095634
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _08095652
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _08095664
-_08095652:
- adds r1, r4, 0
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- bl sub_809572C
- cmp r4, r5
- bls _08095652
-_08095664:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8095634
-
- thumb_func_start sub_809566C
-sub_809566C: @ 809566C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r4, 0
- lsls r2, 24
- lsrs r5, r2, 24
- adds r0, r5, 0
- cmp r4, r5
- bls _0809568A
- adds r4, r5, 0
- adds r5, r1, 0
- cmp r0, r5
- bhi _0809569C
-_0809568A:
- adds r0, r4, 0
- adds r1, r0, 0x1
- lsls r1, 24
- lsrs r4, r1, 24
- adds r1, r6, 0
- bl sub_809572C
- cmp r4, r5
- bls _0809568A
-_0809569C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_809566C
-
- thumb_func_start sub_80956A4
-sub_80956A4: @ 80956A4
- push {r4-r7,lr}
- sub sp, 0x1C
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r7, r0, r1
- lsls r4, r7, 1
- adds r4, r6, r4
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x41
- bl GetCurrentBoxMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- bl GetCurrentBoxMonData
- adds r1, r0, 0
- cmp r5, 0
- beq _0809571A
- adds r0, r5, 0
- movs r2, 0x1
- bl GetMonIconPtr
- adds r4, r0, 0
- adds r0, r5, 0
- bl GetValidMonIconPalIndex
- adds r0, 0x8
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08095724 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08095728 @ =0x000021f0
- adds r1, r2
- ldrb r3, [r1]
- movs r2, 0x20
- str r2, [sp]
- str r2, [sp, 0x4]
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 3
- str r1, [sp, 0x8]
- lsls r1, r7, 3
- str r1, [sp, 0xC]
- str r2, [sp, 0x10]
- str r2, [sp, 0x14]
- str r0, [sp, 0x18]
- adds r0, r3, 0
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl BlitBitmapRectToWindow4BitTo8Bit
-_0809571A:
- add sp, 0x1C
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095724: .4byte sPSSData
-_08095728: .4byte 0x000021f0
- thumb_func_end sub_80956A4
-
- thumb_func_start sub_809572C
-sub_809572C: @ 809572C
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r5, r0, r1
- lsls r0, r5, 1
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x41
- bl GetCurrentBoxMonData
- lsls r0, 16
- cmp r0, 0
- beq _0809576E
- ldr r0, _08095778 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _0809577C @ =0x000021f0
- adds r0, r1
- ldrb r0, [r0]
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 3
- lsls r3, r5, 3
- movs r1, 0x20
- str r1, [sp]
- str r1, [sp, 0x4]
- movs r1, 0
- bl FillWindowPixelRect8Bit
-_0809576E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08095778: .4byte sPSSData
-_0809577C: .4byte 0x000021f0
- thumb_func_end sub_809572C
-
- thumb_func_start sub_8095780
-sub_8095780: @ 8095780
- ldr r3, _0809578C @ =gUnknown_2039828
- ldr r3, [r3]
- strh r0, [r3, 0xC]
- strh r1, [r3, 0xE]
- strh r2, [r3, 0x10]
- bx lr
- .align 2, 0
-_0809578C: .4byte gUnknown_2039828
- thumb_func_end sub_8095780
-
- thumb_func_start sub_8095790
-sub_8095790: @ 8095790
- push {r4,lr}
- ldr r4, _080957C4 @ =gUnknown_2039828
- ldr r1, [r4]
- ldrh r0, [r1, 0x10]
- cmp r0, 0
- beq _080957BA
- ldrh r1, [r1, 0xC]
- movs r0, 0
- movs r2, 0x1
- bl ChangeBgX
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- movs r0, 0
- movs r2, 0x1
- bl ChangeBgY
- ldr r1, [r4]
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- strh r0, [r1, 0x10]
-_080957BA:
- ldr r0, [r4]
- ldrb r0, [r0, 0x10]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080957C4: .4byte gUnknown_2039828
- thumb_func_end sub_8095790
-
- thumb_func_start sub_80957C8
-sub_80957C8: @ 80957C8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r4, _0809589C @ =gUnknown_2039828
- ldr r1, [r4]
- ldrb r0, [r1, 0x4]
- ldrb r2, [r1, 0x2]
- cmp r0, r2
- bls _080957E0
- adds r0, r2, 0
-_080957E0:
- strb r0, [r1, 0x8]
- ldr r1, [r4]
- ldrb r0, [r1, 0x5]
- ldrb r2, [r1, 0x3]
- cmp r0, r2
- bls _080957EE
- adds r0, r2, 0
-_080957EE:
- strb r0, [r1, 0x9]
- ldr r2, [r4]
- ldrb r1, [r2, 0x2]
- ldrb r0, [r2, 0x4]
- subs r0, r1, r0
- cmp r0, 0
- bge _080957FE
- negs r0, r0
-_080957FE:
- adds r0, 0x1
- strb r0, [r2, 0xA]
- ldr r2, [r4]
- ldrb r1, [r2, 0x3]
- ldrb r0, [r2, 0x5]
- subs r0, r1, r0
- cmp r0, 0
- bge _08095810
- negs r0, r0
-_08095810:
- adds r0, 0x1
- strb r0, [r2, 0xB]
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r6, 0
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r8, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1
- mov r9, r0
- adds r2, r1, 0
- cmp r2, r9
- bge _0809588C
-_08095838:
- lsls r0, r2, 1
- adds r0, r2
- ldr r3, _0809589C @ =gUnknown_2039828
- ldr r1, [r3]
- lsls r0, 1
- ldrb r3, [r1, 0x8]
- adds r0, r3
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r7, r2, 0x1
- cmp r4, r8
- bge _08095886
- mov r0, r8
- subs r4, r0, r4
-_08095856:
- mov r0, r10
- adds r1, r5, 0
- bl GetBoxedMonPtr
- adds r1, r0, 0
- ldr r2, _0809589C @ =gUnknown_2039828
- ldr r0, [r2]
- lsls r2, r6, 2
- adds r2, r6
- lsls r2, 4
- adds r0, r2
- adds r0, 0x14
- movs r2, 0x50
- bl memcpy
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _08095856
-_08095886:
- adds r2, r7, 0
- cmp r2, r9
- blt _08095838
-_0809588C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809589C: .4byte gUnknown_2039828
- thumb_func_end sub_80957C8
-
- thumb_func_start sub_80958A0
-sub_80958A0: @ 80958A0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, _08095914 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r7, r2, r1
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r1, r0
- mov r9, r1
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, [r4]
- ldrb r2, [r0, 0x9]
- cmp r2, r9
- bge _08095908
-_080958CC:
- lsls r0, r2, 1
- adds r0, r2
- ldr r1, _08095914 @ =gUnknown_2039828
- ldr r1, [r1]
- lsls r0, 1
- ldrb r3, [r1, 0x8]
- adds r0, r3
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r6, r2, 0x1
- cmp r4, r7
- bge _08095902
- subs r4, r7, r4
-_080958E8:
- adds r0, r5, 0
- bl DestroyBoxMonIconAtPosition
- mov r0, r8
- adds r1, r5, 0
- bl ZeroBoxMonAt
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _080958E8
-_08095902:
- adds r2, r6, 0
- cmp r2, r9
- blt _080958CC
-_08095908:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095914: .4byte gUnknown_2039828
- thumb_func_end sub_80958A0
-
- thumb_func_start sub_8095918
-sub_8095918: @ 8095918
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _080959A4 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r8, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1
- mov r10, r0
- movs r6, 0
- adds r2, r1, 0
- cmp r2, r10
- bge _08095994
-_0809593E:
- lsls r0, r2, 1
- adds r0, r2
- ldr r3, _080959A4 @ =gUnknown_2039828
- ldr r1, [r3]
- lsls r0, 1
- ldrb r4, [r1, 0x8]
- adds r0, r4
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- adds r7, r2, 0x1
- cmp r4, r8
- bge _0809598E
- mov r9, r3
- mov r0, r8
- subs r4, r0, r4
-_0809595E:
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 4
- adds r1, 0x14
- mov r2, r9
- ldr r0, [r2]
- adds r0, r1
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _0809597C
- adds r0, r5, 0
- bl sub_80901EC
-_0809597C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- subs r4, 0x1
- cmp r4, 0
- bne _0809595E
-_0809598E:
- adds r2, r7, 0
- cmp r2, r10
- blt _0809593E
-_08095994:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080959A4: .4byte gUnknown_2039828
- thumb_func_end sub_8095918
-
- thumb_func_start sub_80959A8
-sub_80959A8: @ 80959A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r4, _08095A54 @ =gUnknown_2039828
- ldr r0, [r4]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r10, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r1, r0
- str r1, [sp]
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r7, 0
- ldr r0, [r4]
- ldrb r3, [r0, 0x9]
- ldr r0, [sp]
- cmp r3, r0
- bge _08095A42
-_080959DE:
- lsls r0, r3, 1
- adds r0, r3
- ldr r2, _08095A54 @ =gUnknown_2039828
- ldr r1, [r2]
- lsls r0, 1
- ldrb r4, [r1, 0x8]
- adds r0, r4
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r5, [r1, 0x8]
- adds r3, 0x1
- mov r9, r3
- cmp r5, r10
- bge _08095A3A
- mov r8, r2
- mov r0, r10
- subs r5, r0, r5
-_08095A00:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 4
- adds r4, r0, 0
- adds r4, 0x14
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _08095A28
- mov r0, r8
- ldr r2, [r0]
- adds r2, r4
- ldr r0, [sp, 0x4]
- adds r1, r6, 0
- bl SetBoxMonAt
-_08095A28:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- subs r5, 0x1
- cmp r5, 0
- bne _08095A00
-_08095A3A:
- mov r3, r9
- ldr r1, [sp]
- cmp r3, r1
- blt _080959DE
-_08095A42:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08095A54: .4byte gUnknown_2039828
- thumb_func_end sub_80959A8
-
- thumb_func_start sub_8095A58
-sub_8095A58: @ 8095A58
- push {lr}
- sub sp, 0x8
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- movs r1, 0x4
- movs r2, 0
- bl SetBgAttribute
- movs r0, 0x8
- movs r1, 0x80
- bl ClearGpuRegBits
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_8095A58
-
- thumb_func_start sub_8095AA0
-sub_8095AA0: @ 8095AA0
- ldr r0, _08095AB8 @ =gUnknown_2039828
- ldr r2, [r0]
- ldrb r1, [r2, 0x3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- ldrb r2, [r2, 0x2]
- adds r0, r2
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .align 2, 0
-_08095AB8: .4byte gUnknown_2039828
- thumb_func_end sub_8095AA0
-
- thumb_func_start sub_8095ABC
-sub_8095ABC: @ 8095ABC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _08095B28 @ =gUnknown_2039828
- ldr r0, [r0]
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0xA]
- adds r2, r1
- mov r9, r2
- ldrb r1, [r0, 0x9]
- ldrb r0, [r0, 0xB]
- adds r0, r1, r0
- str r0, [sp]
- movs r7, 0
- adds r6, r1, 0
- cmp r6, r0
- bge _08095B4A
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 1
- mov r8, r0
-_08095AEC:
- ldr r2, _08095B28 @ =gUnknown_2039828
- ldr r1, [r2]
- ldrb r0, [r1, 0x8]
- add r0, r8
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r4, [r1, 0x8]
- cmp r4, r9
- bge _08095B3E
- mov r10, r2
-_08095B00:
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 4
- adds r1, 0x14
- mov r2, r10
- ldr r0, [r2]
- adds r0, r1
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _08095B2C
- adds r0, r5, 0
- movs r1, 0x5
- bl GetCurrentBoxMonData
- cmp r0, 0
- beq _08095B2C
- movs r0, 0
- b _08095B4C
- .align 2, 0
-_08095B28: .4byte gUnknown_2039828
-_08095B2C:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x1
- cmp r4, r9
- blt _08095B00
-_08095B3E:
- movs r0, 0x6
- add r8, r0
- adds r6, 0x1
- ldr r2, [sp]
- cmp r6, r2
- blt _08095AEC
-_08095B4A:
- movs r0, 0x1
-_08095B4C:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8095ABC
-
- @ file boundary?
-
thumb_func_start sub_8095B5C
sub_8095B5C: @ 8095B5C
push {r4-r7,lr}
diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s
index 113488954..65fefed4f 100644
--- a/data/pokemon_storage_system.s
+++ b/data/pokemon_storage_system.s
@@ -6,10 +6,6 @@
.section .rodata
.align 2
-gUnknown_83D35D4:: @ 83D35D4
- .byte 0, 10, 3, 20, 18, 9
- .2byte 0x000a
-
gUnknown_83D35DC:: @ 83D35DC
.incbin "graphics/interface/pss_unk_83D35DC.4bpp"
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index 597694baf..e2eebc62b 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -28,5 +28,7 @@ void FreeMonIconPalette(u16 iconId);
void SetPartyHPBarSprite(struct Sprite * sprite, u8 animNum);
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
u16 GetIconSpecies(u16 species, u32 personality);
+void LoadMonIconPalettesAt(u16 offset);
+u8 GetValidMonIconPalIndex(u16 species);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h
index 3d80b4c6a..399e29f32 100644
--- a/include/pokemon_storage_system_internal.h
+++ b/include/pokemon_storage_system_internal.h
@@ -506,5 +506,9 @@ bool8 sub_8095474(u8 action);
u8 sub_8095AA0(void);
bool8 sub_8095ABC(void);
void sub_8095D44(u8 cursorArea, u8 cursorPos);
+void sub_8094CD4(u8 *arg0, u8 *arg1);
+void sub_8094D40(void);
+void sub_8092BAC(bool8 arg0);
+void DestroyBoxMonIconAtPosition(u8 boxPosition);
#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
diff --git a/include/window.h b/include/window.h
index 5f3630afb..c8b83af7a 100644
--- a/include/window.h
+++ b/include/window.h
@@ -69,10 +69,10 @@ void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, WindowFunc func);
bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value);
u32 GetWindowAttribute(u8 windowId, u8 attributeId);
-u16 AddWindow8Bit(struct WindowTemplate *template);
-u16 AddWindow8Bit(struct WindowTemplate *template);
+u16 AddWindow8Bit(const struct WindowTemplate *template);
+void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue);
void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
void CopyWindowToVram8Bit(u8 windowId, u8 mode);
extern void *gWindowBgTilemapBuffers[];
diff --git a/ld_script.txt b/ld_script.txt
index 89f486240..554592574 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -134,6 +134,7 @@ SECTIONS {
src/pokemon_storage_system_4.o(.text);
src/pokemon_storage_system_5.o(.text);
src/pokemon_storage_system_6.o(.text);
+ src/pokemon_storage_system_7.o(.text);
asm/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text);
src/script_movement.o(.text);
@@ -459,6 +460,7 @@ SECTIONS {
src/pokemon_storage_system_4.o(.rodata);
src/pokemon_storage_system_5.o(.rodata);
src/pokemon_storage_system_6.o(.rodata);
+ src/pokemon_storage_system_7.o(.rodata);
data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
src/fldeff_cut.o(.rodata);
diff --git a/src/pokemon_storage_system_7.c b/src/pokemon_storage_system_7.c
new file mode 100644
index 000000000..9982655e3
--- /dev/null
+++ b/src/pokemon_storage_system_7.c
@@ -0,0 +1,582 @@
+#include <stdlib.h> // to declare abs
+#include "global.h"
+#include "gflib.h"
+#include "pokemon_icon.h"
+#include "pokemon_storage_system_internal.h"
+#include "text_window.h"
+#include "constants/species.h"
+
+struct MoveMons
+{
+ u8 field_0;
+ u8 state;
+ u8 fromRow;
+ u8 fromColumn;
+ u8 toRow;
+ u8 toColumn;
+ u8 field_6;
+ u8 field_7;
+ u8 minRow;
+ u8 minColumn;
+ u8 rowsTotal;
+ u8 columsTotal;
+ u16 bgX;
+ u16 bgY;
+ u16 field_10;
+ struct BoxPokemon boxMons[IN_BOX_COUNT];
+};
+
+EWRAM_DATA struct MoveMons *sMoveMonsPtr = NULL;
+
+bool8 sub_8095138(void);
+bool8 sub_8095234(void);
+bool8 sub_80952A0(void);
+bool8 sub_8095314(void);
+bool8 sub_8095394(void);
+bool8 sub_80953BC(void);
+void sub_8095520(void);
+void sub_80955C4(u8 arg0, u8 arg1, u8 arg2);
+void sub_80955FC(u8 arg0, u8 arg1, u8 arg2);
+void sub_8095634(u8 arg0, u8 arg1, u8 arg2);
+void sub_809566C(u8 arg0, u8 arg1, u8 arg2);
+void sub_80956A4(u8 x, u8 y);
+void sub_809572C(u8 x, u8 y);
+void sub_8095780(u16 bgX, u16 bgY, u16 duration);
+u8 sub_8095790(void);
+void sub_80957C8(void);
+void sub_80958A0(void);
+void sub_8095918(void);
+void sub_80959A8(void);
+void sub_8095A58(void);
+
+const struct WindowTemplate gUnknown_83D35D4 = {
+ .bg = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 3,
+ .width = 20,
+ .height = 18,
+ .paletteNum = 9,
+ .baseBlock = 0x00a
+};
+
+bool8 sub_8095050(void)
+{
+ sMoveMonsPtr = Alloc(sizeof(*sMoveMonsPtr));
+ if (sMoveMonsPtr != NULL)
+ {
+ sPSSData->field_2200 = AddWindow8Bit(&gUnknown_83D35D4);
+ if (sPSSData->field_2200 != 0xFF)
+ {
+ FillWindowPixelBuffer(sPSSData->field_2200, PIXEL_FILL(0));
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+void sub_80950A4(void)
+{
+ if (sMoveMonsPtr != NULL)
+ Free(sMoveMonsPtr);
+}
+
+void sub_80950BC(u8 arg0)
+{
+ sMoveMonsPtr->field_0 = arg0;
+ sMoveMonsPtr->state = 0;
+}
+
+bool8 sub_80950D0(void)
+{
+ switch (sMoveMonsPtr->field_0)
+ {
+ case 0:
+ return sub_8095138();
+ case 1:
+ return sub_8095234();
+ case 2:
+ return sub_80952A0();
+ case 3:
+ return sub_8095314();
+ case 4:
+ return sub_8095394();
+ case 5:
+ return sub_80953BC();
+ }
+
+ return FALSE;
+}
+
+bool8 sub_8095138(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ HideBg(0);
+ LoadMonIconPalettesAt(0x80);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ sub_8094CD4(&sMoveMonsPtr->fromRow, &sMoveMonsPtr->fromColumn);
+ sMoveMonsPtr->toRow = sMoveMonsPtr->fromRow;
+ sMoveMonsPtr->toColumn = sMoveMonsPtr->fromColumn;
+ ChangeBgX(0, -1024, 0);
+ ChangeBgY(0, -1024, 0);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
+ FillWindowPixelBuffer8Bit(sPSSData->field_2200, PIXEL_FILL(0));
+ sub_80956A4(sMoveMonsPtr->fromRow, sMoveMonsPtr->fromColumn);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 1);
+ PutWindowTilemap(sPSSData->field_2200);
+ CopyWindowToVram8Bit(sPSSData->field_2200, 3);
+ BlendPalettes(0x3F00, 8, RGB_WHITE);
+ sub_8094D14(2);
+ SetGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
+ sMoveMonsPtr->state++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8095234(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ HideBg(0);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ sub_8095A58();
+ sub_8094D14(0);
+ sMoveMonsPtr->state++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_8094D40();
+ LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_80952A0(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ if (!sub_80924A8())
+ {
+ sub_8094CD4(&sMoveMonsPtr->field_6, &sMoveMonsPtr->field_7);
+ sub_8095520();
+ sMoveMonsPtr->toRow = sMoveMonsPtr->field_6;
+ sMoveMonsPtr->toColumn = sMoveMonsPtr->field_7;
+ CopyWindowToVram8Bit(sPSSData->field_2200, 2);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8095314(void)
+{
+ u8 var1, var2;
+
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ sub_80957C8();
+ sub_80958A0();
+ sub_8092BAC(FALSE);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange())
+ {
+ sub_8094D14(3);
+ sub_8095780(0, 256, 8);
+ sub_8092BAC(TRUE);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 2:
+ var1 = sub_8095790();
+ var2 = DoMonPlaceChange();
+ if (!var1 && !var2)
+ return FALSE;
+ break;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8095394(void)
+{
+ u8 var1 = sub_80924A8();
+ u8 var2 = sub_8095790();
+
+ if (!var1 && !var2)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+bool8 sub_80953BC(void)
+{
+ switch (sMoveMonsPtr->state)
+ {
+ case 0:
+ sub_80959A8();
+ sub_8095780(0, -256, 8);
+ sub_8092BAC(FALSE);
+ sMoveMonsPtr->state++;
+ break;
+ case 1:
+ if (!DoMonPlaceChange() && !sub_8095790())
+ {
+ sub_8095918();
+ sub_8094D14(2);
+ sub_8092BAC(TRUE);
+ HideBg(0);
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 2:
+ if (!DoMonPlaceChange())
+ {
+ sub_8094D14(0);
+ sub_8095A58();
+ sMoveMonsPtr->state++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ LoadPalette(stdpal_get(3), 0xD0, 0x20);
+ sub_8094D40();
+ ShowBg(0);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8095474(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0: // up
+ if (sMoveMonsPtr->minColumn == 0)
+ return FALSE;
+ sMoveMonsPtr->minColumn--;
+ sub_8095780(0, 1024, 6);
+ break;
+ case 1: // down
+ if (sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal >= 5)
+ return FALSE;
+ sMoveMonsPtr->minColumn++;
+ sub_8095780(0, -1024, 6);
+ break;
+ case 2: // left
+ if (sMoveMonsPtr->minRow == 0)
+ return FALSE;
+ sMoveMonsPtr->minRow--;
+ sub_8095780(1024, 0, 6);
+ break;
+ case 3: // right
+ if (sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal > 5)
+ return FALSE;
+ sMoveMonsPtr->minRow++;
+ sub_8095780(-1024, 0, 6);
+ break;
+ }
+
+ return TRUE;
+}
+
+void sub_8095520(void)
+{
+ s16 var = (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->field_6)) - (abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow));
+ s16 var2 = (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->field_7)) - (abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn));
+
+ if (var > 0)
+ sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+
+ if (var < 0)
+ {
+ sub_8095634(sMoveMonsPtr->toRow, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ sub_80955C4(sMoveMonsPtr->field_6, sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ }
+
+ if (var2 > 0)
+ sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+
+ if (var2 < 0)
+ {
+ sub_809566C(sMoveMonsPtr->toColumn, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ sub_80955FC(sMoveMonsPtr->field_7, sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ }
+}
+
+void sub_80955C4(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_80956A4(arg0, arg1++);
+}
+
+void sub_80955FC(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_80956A4(arg1++, arg0);
+}
+
+void sub_8095634(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_809572C(arg0, arg1++);
+}
+
+void sub_809566C(u8 arg0, u8 arg1, u8 arg2)
+{
+ u8 var1 = arg1;
+
+ if (arg1 > arg2)
+ {
+ arg1 = arg2;
+ arg2 = var1;
+ }
+
+ while (arg1 <= arg2)
+ sub_809572C(arg1++, arg0);
+}
+
+void sub_80956A4(u8 x, u8 y)
+{
+ u8 position = x + (IN_BOX_ROWS * y);
+ u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
+ u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY);
+
+ if (species != SPECIES_NONE)
+ {
+ const u8 *iconGfx = GetMonIconPtr(species, personality, 1);
+ u8 index = GetValidMonIconPalIndex(species) + 8;
+
+ BlitBitmapRectToWindow4BitTo8Bit(sPSSData->field_2200,
+ iconGfx,
+ 0,
+ 0,
+ 32,
+ 32,
+ 24 * x,
+ 24 * y,
+ 32,
+ 32,
+ index);
+ }
+}
+
+void sub_809572C(u8 x, u8 y)
+{
+ u8 position = x + (IN_BOX_ROWS * y);
+ u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2);
+
+ if (species != SPECIES_NONE)
+ {
+ FillWindowPixelRect8Bit(sPSSData->field_2200,
+ PIXEL_FILL(0),
+ 24 * x,
+ 24 * y,
+ 32,
+ 32);
+ }
+}
+
+void sub_8095780(u16 bgX, u16 bgY, u16 duration)
+{
+ sMoveMonsPtr->bgX = bgX;
+ sMoveMonsPtr->bgY = bgY;
+ sMoveMonsPtr->field_10 = duration;
+}
+
+u8 sub_8095790(void)
+{
+ if (sMoveMonsPtr->field_10 != 0)
+ {
+ ChangeBgX(0, sMoveMonsPtr->bgX, 1);
+ ChangeBgY(0, sMoveMonsPtr->bgY, 1);
+ sMoveMonsPtr->field_10--;
+ }
+
+ return sMoveMonsPtr->field_10;
+}
+
+void sub_80957C8(void)
+{
+ s32 i, j;
+ s32 rowCount, columnCount;
+ u8 boxId;
+ u8 monArrayId;
+
+ sMoveMonsPtr->minRow = min(sMoveMonsPtr->fromRow, sMoveMonsPtr->toRow);
+ sMoveMonsPtr->minColumn = min(sMoveMonsPtr->fromColumn, sMoveMonsPtr->toColumn);
+ sMoveMonsPtr->rowsTotal = abs(sMoveMonsPtr->fromRow - sMoveMonsPtr->toRow) + 1;
+ sMoveMonsPtr->columsTotal = abs(sMoveMonsPtr->fromColumn - sMoveMonsPtr->toColumn) + 1;
+ boxId = StorageGetCurrentBox();
+ monArrayId = 0;
+ rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition);
+
+ sMoveMonsPtr->boxMons[monArrayId] = *boxMon;
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+}
+
+void sub_80958A0(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 boxId = StorageGetCurrentBox();
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ DestroyBoxMonIconAtPosition(boxPosition);
+ ZeroBoxMonAt(boxId, boxPosition);
+ boxPosition++;
+ }
+ }
+}
+
+void sub_8095918(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ sub_80901EC(boxPosition);
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+}
+
+void sub_80959A8(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 boxId = StorageGetCurrentBox();
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES))
+ SetBoxMonAt(boxId, boxPosition, &sMoveMonsPtr->boxMons[monArrayId]);
+ boxPosition++;
+ monArrayId++;
+ }
+ }
+}
+
+void sub_8095A58(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ SetBgAttribute(0, BG_ATTR_PALETTEMODE, 0);
+ ClearGpuRegBits(REG_OFFSET_BG0CNT, BGCNT_256COLOR);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+}
+
+u8 sub_8095AA0(void)
+{
+ return (IN_BOX_ROWS * sMoveMonsPtr->fromColumn) + sMoveMonsPtr->fromRow;
+}
+
+bool8 sub_8095ABC(void)
+{
+ s32 i, j;
+ s32 rowCount = sMoveMonsPtr->minRow + sMoveMonsPtr->rowsTotal;
+ s32 columnCount = sMoveMonsPtr->minColumn + sMoveMonsPtr->columsTotal;
+ u8 monArrayId = 0;
+
+ for (i = sMoveMonsPtr->minColumn; i < columnCount; i++)
+ {
+ u8 boxPosition = (IN_BOX_ROWS * i) + sMoveMonsPtr->minRow;
+ for (j = sMoveMonsPtr->minRow; j < rowCount; j++)
+ {
+ if (GetBoxMonData(&sMoveMonsPtr->boxMons[monArrayId], MON_DATA_SANITY_HAS_SPECIES)
+ && GetCurrentBoxMonData(boxPosition, MON_DATA_SANITY_HAS_SPECIES))
+ return FALSE;
+
+ monArrayId++;
+ boxPosition++;
+ }
+ }
+
+ return TRUE;
+}
diff --git a/src/window_8bpp.c b/src/window_8bpp.c
index c58c13802..8977d61e4 100644
--- a/src/window_8bpp.c
+++ b/src/window_8bpp.c
@@ -13,7 +13,7 @@ static void nullsub_9(void)
{
}
-u16 AddWindow8Bit(struct WindowTemplate *template)
+u16 AddWindow8Bit(const struct WindowTemplate *template)
{
u16 windowId;
u8* memAddress;
@@ -81,7 +81,7 @@ void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width,
FillBitmapRect8Bit(&pixelRect, x, y, width, height, fillValue);
}
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum)
+void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum)
{
struct Bitmap sourceRect;
struct Bitmap destRect;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 2ab91f8d4..312f3f2f0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -162,11 +162,10 @@ gUnknown_20386A8: @ 20386A8
.include "src/pokemon_storage_system_3.o"
.align 2
.include "src/pokemon_storage_system_5.o"
-
.align 2
-gUnknown_2039828: @ 2039828
- .space 0x4
+ .include "src/pokemon_storage_system_7.o"
+ .align 2
gUnknown_203982C: @ 203982C
.space 0x4