Merge branch 'master' into item_expansion

This commit is contained in:
DizzyEggg 2019-04-14 09:52:07 +02:00
commit d9fc6d36be
14 changed files with 1117 additions and 1957 deletions

View File

@ -5,847 +5,6 @@
.text
thumb_func_start sub_802C838
sub_802C838: @ 802C838
push {r4-r6,lr}
movs r5, 0
movs r4, 0
ldr r3, =gUnknown_02022CFC
ldr r0, [r3]
ldr r2, =gUnknown_082FB714
ldr r1, [r0, 0x78]
ldr r0, [r2]
cmp r1, r0
bcc _0802C874
ldr r5, [r2, 0x4]
adds r6, r3, 0
adds r3, r2, 0x4
_0802C852:
adds r3, 0x8
adds r2, 0x8
adds r4, 0x1
cmp r4, 0x4
bhi _0802C874
ldr r0, [r6]
ldr r1, [r0, 0x78]
ldr r0, [r2]
cmp r1, r0
bcc _0802C874
ldr r5, [r3]
b _0802C852
.pool
_0802C874:
lsls r0, r5, 16
lsrs r0, 16
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_802C838
thumb_func_start sub_802C880
sub_802C880: @ 802C880
push {r4,r5,lr}
lsls r0, 16
lsrs r5, r0, 16
lsls r1, 16
lsrs r4, r1, 16
b _0802C892
_0802C88C:
subs r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
_0802C892:
cmp r4, 0
beq _0802C8A4
adds r0, r5, 0
adds r1, r4, 0
bl CheckBagHasSpace
lsls r0, 24
cmp r0, 0
beq _0802C88C
_0802C8A4:
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_802C880
thumb_func_start sub_802C8AC
sub_802C8AC: @ 802C8AC
push {lr}
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end sub_802C8AC
thumb_func_start sub_802C8BC
sub_802C8BC: @ 802C8BC
ldr r0, =gUnknown_02022CFC
ldr r0, [r0]
ldrb r0, [r0, 0x6]
bx lr
.pool
thumb_func_end sub_802C8BC
thumb_func_start sub_802C8C8
sub_802C8C8: @ 802C8C8
lsls r0, 24
lsrs r0, 24
ldr r2, =gUnknown_02022CFC
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
ldr r0, =0x000082a8
adds r1, r0
ldr r0, [r2]
adds r0, r1
bx lr
.pool
thumb_func_end sub_802C8C8
thumb_func_start sub_802C8E8
sub_802C8E8: @ 802C8E8
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldr r2, =gUnknown_02022CFC
lsls r0, r1, 2
adds r0, r1
lsls r0, 3
ldr r1, [r2]
adds r0, r1
movs r1, 0x83
lsls r1, 8
adds r0, r1
bx lr
.pool
thumb_func_end sub_802C8E8
thumb_func_start sub_802C908
sub_802C908: @ 802C908
push {lr}
lsls r0, 16
lsrs r0, 16
bl sub_802AC00
lsls r0, 16
asrs r0, 16
mvns r0, r0
lsrs r0, 31
pop {r1}
bx r1
thumb_func_end sub_802C908
thumb_func_start sub_802C920
sub_802C920: @ 802C920
push {r4,r5,lr}
movs r5, 0
_0802C924:
movs r0, 0x64
adds r1, r5, 0
muls r1, r0
ldr r0, =gPlayerParty
adds r4, r1, r0
adds r0, r4, 0
movs r1, 0x5
bl GetMonData
cmp r0, 0
beq _0802C95C
adds r0, r4, 0
movs r1, 0x41
bl GetMonData
lsls r0, 16
lsrs r0, 16
bl sub_802C908
cmp r0, 0
beq _0802C95C
ldr r1, =gSpecialVar_Result
movs r0, 0x1
b _0802C966
.pool
_0802C95C:
adds r5, 0x1
cmp r5, 0x5
ble _0802C924
ldr r1, =gSpecialVar_Result
movs r0, 0
_0802C966:
strh r0, [r1]
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_802C920
thumb_func_start sub_802C974
sub_802C974: @ 802C974
push {r4-r6,lr}
adds r6, r0, 0
movs r4, 0
ldr r5, =gUnknown_082FBE08
_0802C97C:
adds r0, r5, 0
bl LoadCompressedSpriteSheet
adds r5, 0x8
adds r4, 0x1
cmp r4, 0x4
bls _0802C97C
movs r4, 0
ldr r5, =gUnknown_082FBE30
_0802C98E:
adds r0, r5, 0
bl LoadSpritePalette
adds r5, 0x8
adds r4, 0x1
cmp r4, 0x1
bls _0802C98E
movs r0, 0x5
bl IndexOfSpritePaletteTag
strb r0, [r6, 0xE]
movs r0, 0x6
bl IndexOfSpritePaletteTag
strb r0, [r6, 0xF]
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end sub_802C974
thumb_func_start sub_802C9BC
sub_802C9BC: @ 802C9BC
push {lr}
movs r2, 0
movs r1, 0x7
adds r0, 0x3C
_0802C9C4:
strh r2, [r0]
subs r0, 0x2
subs r1, 0x1
cmp r1, 0
bge _0802C9C4
pop {r0}
bx r0
thumb_func_end sub_802C9BC
thumb_func_start sub_802C9D4
sub_802C9D4: @ 802C9D4
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x34
mov r9, r0
adds r7, r1, 0
ldr r0, [sp, 0x54]
lsls r2, 16
lsrs r2, 16
str r2, [sp, 0x28]
lsls r3, 16
lsrs r3, 16
str r3, [sp, 0x2C]
lsls r0, 24
lsrs r6, r0, 24
mov r1, sp
ldr r0, =gUnknown_082FBE40
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
movs r0, 0x80
lsls r0, 6
bl Alloc
mov r8, r0
movs r0, 0x80
lsls r0, 4
bl Alloc
mov r10, r0
bl sub_802C8BC
lsls r0, 16
lsrs r0, 16
cmp r6, r0
bne _0802CA2C
movs r0, 0x3
b _0802CA32
.pool
_0802CA2C:
adds r0, r6, 0x4
lsls r0, 24
lsrs r0, 24
_0802CA32:
str r0, [sp, 0x30]
mov r1, r8
cmp r1, 0
beq _0802CAF4
mov r2, r10
cmp r2, 0
beq _0802CAF4
ldrh r2, [r7]
lsls r0, r2, 3
ldr r1, =gMonStillFrontPicTable
adds r0, r1
ldr r3, [r7, 0x8]
mov r1, r8
bl HandleLoadSpecialPokePic
mov r3, r8
str r3, [sp, 0x18]
adds r4, r6, 0
add r0, sp, 0x18
ldr r5, =0xffff0000
lsls r1, r4, 16
movs r2, 0x80
lsls r2, 4
orrs r1, r2
str r1, [r0, 0x4]
bl LoadSpriteSheet
ldrh r0, [r7]
ldr r1, [r7, 0x4]
ldr r2, [r7, 0x8]
bl GetFrontSpritePalFromSpeciesAndPersonality
str r0, [sp, 0x20]
add r0, sp, 0x20
ldr r1, [r0, 0x4]
ands r1, r5
orrs r1, r4
str r1, [r0, 0x4]
bl LoadCompressedSpritePalette
mov r0, r8
bl Free
mov r0, r10
bl Free
mov r1, sp
mov r0, sp
ldrh r0, [r0]
adds r0, r6
strh r0, [r1]
mov r0, sp
ldrh r0, [r0, 0x2]
adds r0, r6
strh r0, [r1, 0x2]
ldr r4, [sp, 0x28]
lsls r1, r4, 16
asrs r1, 16
ldr r0, [sp, 0x2C]
lsls r2, r0, 16
asrs r2, 16
mov r0, sp
ldr r3, [sp, 0x30]
bl CreateSprite
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x40
beq _0802CAF4
lsls r0, r6, 2
ldr r2, =0x000081a8
add r2, r9
adds r2, r0
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
ldr r1, =gSprites
adds r0, r1
str r0, [r2]
ldr r0, =0x000081fc
add r0, r9
adds r0, r6
add r1, sp, 0x30
ldrb r1, [r1]
strb r1, [r0]
b _0802CB00
.pool
_0802CAF4:
lsls r0, r6, 2
ldr r1, =0x000081a8
add r1, r9
adds r1, r0
movs r0, 0
str r0, [r1]
_0802CB00:
add sp, 0x34
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_802C9D4
thumb_func_start sub_802CB14
sub_802CB14: @ 802CB14
push {r4-r6,lr}
adds r4, r0, 0
lsls r6, r1, 2
ldr r0, =0x000081bc
adds r5, r4, r0
adds r5, r6
ldr r0, [r5]
bl sub_802C9BC
ldr r2, [r5]
ldr r0, =0x000081a8
adds r4, r0
adds r4, r6
ldr r1, [r4]
ldr r0, =gSprites
subs r1, r0
lsls r0, r1, 4
subs r0, r1
lsls r1, r0, 8
adds r0, r1
lsls r1, r0, 16
adds r0, r1
negs r0, r0
asrs r0, 2
strh r0, [r2, 0x3C]
ldr r1, [r5]
adds r1, 0x3E
ldrb r2, [r1]
movs r0, 0x5
negs r0, r0
ands r0, r2
strb r0, [r1]
ldr r1, [r5]
movs r0, 0x60
strh r0, [r1, 0x22]
ldr r0, [r5]
ldr r1, =sub_802CB7C
str r1, [r0, 0x1C]
movs r1, 0x1
bl StartSpriteAnim
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CB14
thumb_func_start sub_802CB7C
sub_802CB7C: @ 802CB7C
push {lr}
adds r2, r0, 0
movs r1, 0x2E
ldrsh r0, [r2, r1]
cmp r0, 0x1
beq _0802CBA8
cmp r0, 0x1
bgt _0802CB92
cmp r0, 0
beq _0802CB98
b _0802CBE6
_0802CB92:
cmp r0, 0x2
beq _0802CBC8
b _0802CBE6
_0802CB98:
adds r0, r2, 0
adds r0, 0x3F
ldrb r1, [r0]
movs r0, 0x10
ands r0, r1
cmp r0, 0
beq _0802CBE6
b _0802CBD6
_0802CBA8:
ldrh r1, [r2, 0x22]
subs r1, 0x1
strh r1, [r2, 0x22]
ldrh r0, [r2, 0x30]
adds r0, 0x1
strh r0, [r2, 0x30]
lsls r1, 16
asrs r1, 16
cmp r1, 0x48
bgt _0802CBE6
movs r0, 0x48
strh r0, [r2, 0x22]
ldrh r0, [r2, 0x2E]
adds r0, 0x1
strh r0, [r2, 0x2E]
b _0802CBE6
_0802CBC8:
ldrh r0, [r2, 0x30]
adds r0, 0x1
strh r0, [r2, 0x30]
lsls r0, 16
asrs r0, 16
cmp r0, 0x2F
ble _0802CBE6
_0802CBD6:
adds r3, r2, 0
adds r3, 0x3E
ldrb r0, [r3]
movs r1, 0x4
orrs r0, r1
strb r0, [r3]
ldr r0, =SpriteCallbackDummy
str r0, [r2, 0x1C]
_0802CBE6:
pop {r0}
bx r0
.pool
thumb_func_end sub_802CB7C
thumb_func_start sub_802CBF0
sub_802CBF0: @ 802CBF0
push {lr}
lsls r1, 2
ldr r2, =0x000081a8
adds r0, r2
adds r0, r1
ldr r2, [r0]
ldr r1, =sub_802CC40
str r1, [r2, 0x1C]
movs r1, 0
strh r1, [r2, 0x26]
ldr r0, [r0]
bl sub_802C9BC
pop {r0}
bx r0
.pool
thumb_func_end sub_802CBF0
thumb_func_start sub_802CC18
sub_802CC18: @ 802CC18
push {lr}
movs r2, 0
lsls r1, 2
ldr r3, =0x000081a8
adds r0, r3
adds r0, r1
ldr r0, [r0]
ldr r1, [r0, 0x1C]
ldr r0, =sub_802CC40
cmp r1, r0
bne _0802CC30
movs r2, 0x1
_0802CC30:
adds r0, r2, 0
pop {r1}
bx r1
.pool
thumb_func_end sub_802CC18
thumb_func_start sub_802CC40
sub_802CC40: @ 802CC40
push {lr}
adds r2, r0, 0
ldrh r0, [r2, 0x30]
adds r0, 0x1
strh r0, [r2, 0x30]
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
ble _0802CC6C
ldrh r0, [r2, 0x32]
adds r0, 0x1
strh r0, [r2, 0x32]
movs r1, 0x1
ands r0, r1
cmp r0, 0
beq _0802CC64
movs r0, 0x2
b _0802CC66
_0802CC64:
ldr r0, =0x0000fffe
_0802CC66:
strh r0, [r2, 0x26]
movs r0, 0
strh r0, [r2, 0x30]
_0802CC6C:
movs r1, 0x32
ldrsh r0, [r2, r1]
cmp r0, 0xC
ble _0802CC7C
movs r0, 0
strh r0, [r2, 0x26]
ldr r0, =SpriteCallbackDummy
str r0, [r2, 0x1C]
_0802CC7C:
pop {r0}
bx r0
.pool
thumb_func_end sub_802CC40
thumb_func_start sub_802CC88
sub_802CC88: @ 802CC88
push {r4,lr}
adds r4, r0, 0
lsls r1, 2
ldr r0, =0x000081a8
adds r4, r0
adds r4, r1
ldr r0, [r4]
bl sub_802C9BC
ldr r1, [r4]
ldr r0, =sub_802CD08
str r0, [r1, 0x1C]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CC88
thumb_func_start sub_802CCB0
sub_802CCB0: @ 802CCB0
push {r4-r7,lr}
adds r4, r0, 0
bl sub_802C8AC
lsls r0, 16
lsrs r0, 16
cmp r0, 0
beq _0802CCF4
movs r1, 0x5
negs r1, r1
mov r12, r1
ldr r1, =0x000081a8
adds r3, r4, r1
ldr r7, =sub_802CD08
ldr r6, =SpriteCallbackDummy
movs r5, 0xA
adds r4, r0, 0
_0802CCD2:
ldr r2, [r3]
ldr r0, [r2, 0x1C]
cmp r0, r7
bne _0802CCEC
adds r2, 0x3E
ldrb r1, [r2]
mov r0, r12
ands r0, r1
strb r0, [r2]
ldr r0, [r3]
str r6, [r0, 0x1C]
adds r0, 0x43
strb r5, [r0]
_0802CCEC:
adds r3, 0x4
subs r4, 0x1
cmp r4, 0
bne _0802CCD2
_0802CCF4:
pop {r4-r7}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CCB0
thumb_func_start sub_802CD08
sub_802CD08: @ 802CD08
push {lr}
adds r3, r0, 0
ldrh r0, [r3, 0x2E]
adds r0, 0x1
strh r0, [r3, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0x3
ble _0802CD36
movs r0, 0
strh r0, [r3, 0x2E]
adds r3, 0x3E
ldrb r2, [r3]
lsls r0, r2, 29
lsrs r0, 31
movs r1, 0x1
eors r1, r0
lsls r1, 2
movs r0, 0x5
negs r0, r0
ands r0, r2
orrs r0, r1
strb r0, [r3]
_0802CD36:
pop {r0}
bx r0
thumb_func_end sub_802CD08
thumb_func_start sub_802CD3C
sub_802CD3C: @ 802CD3C
push {r4,r5,lr}
adds r4, r0, 0
bl sub_802C8AC
lsls r0, 16
lsrs r3, r0, 16
movs r2, 0
cmp r2, r3
bge _0802CD66
ldr r0, =0x000081fc
adds r5, r4, r0
subs r0, 0x54
adds r4, r0
_0802CD56:
ldm r4!, {r0}
adds r1, r5, r2
ldrb r1, [r1]
adds r0, 0x43
strb r1, [r0]
adds r2, 0x1
cmp r2, r3
blt _0802CD56
_0802CD66:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CD3C
thumb_func_start sub_802CD70
sub_802CD70: @ 802CD70
push {r4,lr}
adds r4, r0, 0
lsls r1, 2
ldr r0, =0x000081a8
adds r4, r0
adds r4, r1
ldr r0, [r4]
bl sub_802C9BC
ldr r1, [r4]
ldr r0, =sub_802CDD4
str r0, [r1, 0x1C]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CD70
thumb_func_start sub_802CD98
sub_802CD98: @ 802CD98
push {r4,r5,lr}
adds r4, r0, 0
bl sub_802C8AC
lsls r0, 16
lsrs r3, r0, 16
movs r2, 0
cmp r2, r3
bge _0802CDCC
ldr r5, =sub_802CDD4
ldr r0, =0x000081a8
adds r1, r4, r0
_0802CDB0:
ldr r0, [r1]
ldr r0, [r0, 0x1C]
cmp r0, r5
bne _0802CDC4
movs r0, 0x1
b _0802CDCE
.pool
_0802CDC4:
adds r1, 0x4
adds r2, 0x1
cmp r2, r3
blt _0802CDB0
_0802CDCC:
movs r0, 0
_0802CDCE:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_802CD98
thumb_func_start sub_802CDD4
sub_802CDD4: @ 802CDD4
push {r4,r5,lr}
adds r5, r0, 0
movs r0, 0x2E
ldrsh r4, [r5, r0]
cmp r4, 0
beq _0802CDE6
cmp r4, 0x1
beq _0802CDF4
b _0802CE3C
_0802CDE6:
movs r0, 0x22
bl PlaySE
strh r4, [r5, 0x30]
ldrh r0, [r5, 0x2E]
adds r0, 0x1
strh r0, [r5, 0x2E]
_0802CDF4:
ldrh r0, [r5, 0x30]
adds r0, 0x4
strh r0, [r5, 0x30]
lsls r0, 16
asrs r0, 16
cmp r0, 0x7F
ble _0802CE06
movs r0, 0
strh r0, [r5, 0x30]
_0802CE06:
ldr r1, =gSineTable
movs r2, 0x30
ldrsh r0, [r5, r2]
lsls r0, 1
adds r0, r1
ldrh r0, [r0]
lsls r0, 16
asrs r0, 19
negs r0, r0
strh r0, [r5, 0x26]
movs r0, 0x30
ldrsh r1, [r5, r0]
cmp r1, 0
bne _0802CE3C
ldrh r0, [r5, 0x32]
adds r0, 0x1
strh r0, [r5, 0x32]
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
bgt _0802CE38
strh r1, [r5, 0x2E]
b _0802CE3C
.pool
_0802CE38:
ldr r0, =SpriteCallbackDummy
str r0, [r5, 0x1C]
_0802CE3C:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CDD4
thumb_func_start sub_802CE48
sub_802CE48: @ 802CE48
push {r4,r5,lr}
adds r5, r0, 0
lsls r3, 24
lsrs r4, r3, 24
ldr r0, =gUnknown_082FC00C
lsls r1, 16
asrs r1, 16
lsls r2, 16
asrs r2, 16
movs r3, 0x1
bl CreateSprite
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x40
beq _0802CE88
ldr r0, =gSprites
lsls r1, r2, 4
adds r1, r2
lsls r1, 2
adds r1, r0
adds r3, r1, 0
adds r3, 0x3E
ldrb r0, [r3]
movs r2, 0x4
orrs r0, r2
strb r0, [r3]
lsls r2, r4, 2
ldr r3, =0x000081bc
adds r0, r5, r3
adds r0, r2
str r1, [r0]
_0802CE88:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end sub_802CE48
thumb_func_start sub_802CE9C
sub_802CE9C: @ 802CE9C
push {r4-r7,lr}

View File

@ -1,864 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
@ File centered around AllocSubstruct(1)
thumb_func_start sub_81C9268
sub_81C9268: @ 81C9268
push {r4,lr}
movs r4, 0
movs r0, 0x98
lsls r0, 1
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _081C928A
movs r4, 0x1
ldr r0, =0x0000089b
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _081C928A
movs r4, 0x2
_081C928A:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
.pool
thumb_func_end sub_81C9268
thumb_func_start sub_81C9298
sub_81C9298: @ 81C9298
push {r4,lr}
movs r0, 0x1
movs r1, 0x10
bl AllocSubstruct
adds r4, r0, 0
cmp r4, 0
beq _081C92C4
bl sub_81C9268
lsls r0, 24
lsrs r0, 24
movs r1, 0
strh r0, [r4]
strh r1, [r4, 0x2]
strh r1, [r4, 0x4]
strh r1, [r4, 0x6]
adds r0, r4, 0
bl sub_81C939C
movs r0, 0x1
b _081C92C6
_081C92C4:
movs r0, 0
_081C92C6:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C9298
thumb_func_start sub_81C92CC
sub_81C92CC: @ 81C92CC
push {r4,lr}
movs r0, 0x1
movs r1, 0x10
bl AllocSubstruct
adds r4, r0, 0
cmp r4, 0
beq _081C92FA
bl sub_81C9268
lsls r0, 24
lsrs r0, 24
movs r1, 0
strh r0, [r4]
movs r0, 0x2
strh r0, [r4, 0x2]
strh r0, [r4, 0x4]
strh r1, [r4, 0x6]
adds r0, r4, 0
bl sub_81C939C
movs r0, 0x1
b _081C92FC
_081C92FA:
movs r0, 0
_081C92FC:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C92CC
thumb_func_start sub_81C9304
sub_81C9304: @ 81C9304
push {r4,lr}
movs r0, 0x1
movs r1, 0x10
bl AllocSubstruct
adds r4, r0, 0
cmp r4, 0
beq _081C932E
bl sub_81C9268
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
movs r0, 0x3
strh r0, [r4, 0x2]
strh r0, [r4, 0x4]
adds r0, r4, 0
bl sub_81C939C
movs r0, 0x1
b _081C9330
_081C932E:
movs r0, 0
_081C9330:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C9304
thumb_func_start sub_81C9338
sub_81C9338: @ 81C9338
push {lr}
movs r0, 0x1
movs r1, 0x10
bl AllocSubstruct
adds r2, r0, 0
cmp r2, 0
beq _081C9360
movs r0, 0
movs r1, 0x3
strh r1, [r2]
strh r0, [r2, 0x2]
movs r1, 0x5
strh r1, [r2, 0x4]
strh r0, [r2, 0x6]
adds r0, r2, 0
bl sub_81C939C
movs r0, 0x1
b _081C9362
_081C9360:
movs r0, 0
_081C9362:
pop {r1}
bx r1
thumb_func_end sub_81C9338
thumb_func_start sub_81C9368
sub_81C9368: @ 81C9368
push {r4,r5,lr}
movs r0, 0x1
movs r1, 0x10
bl AllocSubstruct
adds r5, r0, 0
cmp r5, 0
beq _081C9394
movs r4, 0
movs r0, 0x4
strh r0, [r5]
bl sub_81C76AC
strh r0, [r5, 0x2]
adds r0, 0x8
strh r0, [r5, 0x4]
strh r4, [r5, 0x6]
adds r0, r5, 0
bl sub_81C939C
movs r0, 0x1
b _081C9396
_081C9394:
movs r0, 0
_081C9396:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_81C9368
thumb_func_start sub_81C939C
sub_81C939C: @ 81C939C
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4]
cmp r0, 0x4
bhi _081C93E0
lsls r0, 2
ldr r1, =_081C93B4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_081C93B4:
.4byte _081C93C8
.4byte _081C93CE
.4byte _081C93CE
.4byte _081C93D4
.4byte _081C93DC
_081C93C8:
movs r0, 0
bl SetPokenavMode
_081C93CE:
bl sub_81C93EC
b _081C93DE
_081C93D4:
ldr r0, =sub_81C963C
b _081C93DE
.pool
_081C93DC:
ldr r0, =sub_81C96FC
_081C93DE:
str r0, [r4, 0xC]
_081C93E0:
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_81C939C
thumb_func_start sub_81C93EC
sub_81C93EC: @ 81C93EC
push {lr}
bl GetPokenavMode
cmp r0, 0x1
beq _081C9408
cmp r0, 0x1
bcc _081C93FE
cmp r0, 0x2
beq _081C9410
_081C93FE:
ldr r0, =sub_81C943C
b _081C9412
.pool
_081C9408:
ldr r0, =sub_81C9520
b _081C9412
.pool
_081C9410:
ldr r0, =c2_pre_battle_1
_081C9412:
pop {r1}
bx r1
.pool
thumb_func_end sub_81C93EC
thumb_func_start sub_81C941C
sub_81C941C: @ 81C941C
push {lr}
movs r0, 0x1
bl GetSubstructPtr
ldr r1, [r0, 0xC]
bl _call_via_r1
pop {r1}
bx r1
thumb_func_end sub_81C941C
thumb_func_start sub_81C9430
sub_81C9430: @ 81C9430
push {lr}
movs r0, 0x1
bl FreePokenavSubstruct
pop {r0}
bx r0
thumb_func_end sub_81C9430
thumb_func_start sub_81C943C
sub_81C943C: @ 81C943C
push {r4,r5,lr}
adds r4, r0, 0
bl sub_81C9814
cmp r0, 0
beq _081C944C
movs r0, 0x1
b _081C951A
_081C944C:
ldr r2, =gMain
ldrh r1, [r2, 0x2E]
movs r0, 0x1
ands r0, r1
adds r5, r2, 0
cmp r0, 0
beq _081C9508
ldr r3, =gUnknown_0861FC59
movs r0, 0x2
ldrsh r1, [r4, r0]
ldrh r2, [r4]
lsls r0, r2, 1
adds r0, r2
lsls r0, 1
adds r1, r0
adds r1, r3
ldrb r0, [r1]
cmp r0, 0x4
bhi _081C9508
lsls r0, 2
ldr r1, =_081C9488
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_081C9488:
.4byte _081C949C
.4byte _081C94BC
.4byte _081C94D4
.4byte _081C94E0
.4byte _081C9516
_081C949C:
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
ldrb r1, [r0, 0x15]
movs r0, 0x8
ands r0, r1
movs r1, 0x1
cmp r0, 0
beq _081C94AE
movs r1, 0x2
_081C94AE:
strh r1, [r4, 0x6]
ldr r1, =0x000186a6
b _081C94EE
.pool
_081C94BC:
movs r1, 0
movs r0, 0x3
strh r0, [r4]
strh r1, [r4, 0x2]
ldrb r0, [r3, 0x12]
strh r0, [r4, 0x4]
ldr r0, =sub_81C963C
str r0, [r4, 0xC]
movs r0, 0x2
b _081C951A
.pool
_081C94D4:
movs r0, 0x6
strh r0, [r4, 0x6]
ldr r1, =0x000186ab
b _081C94EE
.pool
_081C94E0:
bl CanViewRibbonsMenu
cmp r0, 0
beq _081C94FC
movs r0, 0x9
strh r0, [r4, 0x6]
ldr r1, =0x000186ac
_081C94EE:
adds r0, r4, 0
bl sub_81C97B0
movs r0, 0x8
b _081C951A
.pool
_081C94FC:
ldr r0, =sub_81C9600
str r0, [r4, 0xC]
movs r0, 0x6
b _081C951A
.pool
_081C9508:
ldrh r1, [r5, 0x2E]
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _081C9516
movs r0, 0
b _081C951A
_081C9516:
movs r0, 0x1
negs r0, r0
_081C951A:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_81C943C
thumb_func_start sub_81C9520
sub_81C9520: @ 81C9520
push {r4,lr}
adds r4, r0, 0
bl sub_81C9814
cmp r0, 0
beq _081C9530
movs r0, 0x1
b _081C9580
_081C9530:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _081C9570
ldr r3, =gUnknown_0861FC59
movs r0, 0x2
ldrsh r1, [r4, r0]
ldrh r2, [r4]
lsls r0, r2, 1
adds r0, r2
lsls r0, 1
adds r1, r0
adds r1, r3
ldrb r0, [r1]
cmp r0, 0x2
bne _081C9578
movs r0, 0x6
strh r0, [r4, 0x6]
ldr r1, =0x000186ab
adds r0, r4, 0
bl sub_81C97B0
movs r0, 0x8
b _081C9580
.pool
_081C9570:
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _081C957E
_081C9578:
movs r0, 0x20
bl PlaySE
_081C957E:
movs r0, 0
_081C9580:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C9520
thumb_func_start c2_pre_battle_1
c2_pre_battle_1: @ 81C9588
push {r4,lr}
adds r4, r0, 0
bl sub_81C9814
cmp r0, 0
beq _081C9598
movs r0, 0x1
b _081C95F8
_081C9598:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _081C95E8
ldr r3, =gUnknown_0861FC59
movs r0, 0x2
ldrsh r1, [r4, r0]
ldrh r2, [r4]
lsls r0, r2, 1
adds r0, r2
lsls r0, 1
adds r1, r0
adds r1, r3
ldrb r0, [r1]
cmp r0, 0x2
beq _081C95D4
cmp r0, 0x4
beq _081C95F4
movs r0, 0x20
bl PlaySE
movs r0, 0
b _081C95F8
.pool
_081C95D4:
movs r0, 0x6
strh r0, [r4, 0x6]
ldr r1, =0x000186ab
adds r0, r4, 0
bl sub_81C97B0
movs r0, 0x8
b _081C95F8
.pool
_081C95E8:
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _081C95F4
movs r0, 0
b _081C95F8
_081C95F4:
movs r0, 0x1
negs r0, r0
_081C95F8:
pop {r4}
pop {r1}
bx r1
thumb_func_end c2_pre_battle_1
thumb_func_start sub_81C9600
sub_81C9600: @ 81C9600
push {r4,lr}
adds r4, r0, 0
bl sub_81C9814
cmp r0, 0
beq _081C9616
bl sub_81C93EC
str r0, [r4, 0xC]
movs r0, 0x1
b _081C9634
_081C9616:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x3
ands r0, r1
cmp r0, 0
bne _081C962C
movs r0, 0
b _081C9634
.pool
_081C962C:
bl sub_81C93EC
str r0, [r4, 0xC]
movs r0, 0x7
_081C9634:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C9600
thumb_func_start sub_81C963C
sub_81C963C: @ 81C963C
push {r4-r6,lr}
adds r4, r0, 0
bl sub_81C9814
adds r3, r0, 0
cmp r3, 0
beq _081C964E
movs r0, 0x1
b _081C96F6
_081C964E:
ldr r2, =gMain
ldrh r1, [r2, 0x2E]
movs r0, 0x1
ands r0, r1
adds r6, r2, 0
cmp r0, 0
beq _081C96B8
ldr r5, =gUnknown_0861FC59
movs r1, 0x2
ldrsh r0, [r4, r1]
ldrh r2, [r4]
lsls r1, r2, 1
adds r1, r2
lsls r1, 1
adds r0, r1
adds r0, r5
ldrb r0, [r0]
cmp r0, 0x6
beq _081C968E
cmp r0, 0x6
bgt _081C9688
cmp r0, 0x5
beq _081C96A4
b _081C96B8
.pool
_081C9688:
cmp r0, 0x7
beq _081C96E4
b _081C96B8
_081C968E:
movs r0, 0x4
strh r0, [r4]
strh r3, [r4, 0x2]
ldrb r0, [r5, 0x18]
strh r0, [r4, 0x4]
ldr r0, =sub_81C96FC
str r0, [r4, 0xC]
movs r0, 0x4
b _081C96F6
.pool
_081C96A4:
strh r3, [r4, 0x6]
ldr r1, =0x000186a7
adds r0, r4, 0
bl sub_81C97B0
movs r0, 0x8
b _081C96F6
.pool
_081C96B8:
ldrh r1, [r6, 0x2E]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _081C96F4
movs r0, 0x2
ldrsh r2, [r4, r0]
ldr r1, =gUnknown_0861FC54
ldrh r0, [r4]
adds r0, r1
ldrb r0, [r0]
cmp r2, r0
beq _081C96E4
strh r0, [r4, 0x2]
ldr r0, =sub_81C9798
str r0, [r4, 0xC]
movs r0, 0x1
b _081C96F6
.pool
_081C96E4:
movs r0, 0x5
bl PlaySE
adds r0, r4, 0
bl sub_81C97C0
movs r0, 0x3
b _081C96F6
_081C96F4:
movs r0, 0
_081C96F6:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_81C963C
thumb_func_start sub_81C96FC
sub_81C96FC: @ 81C96FC
push {r4,lr}
adds r4, r0, 0
bl sub_81C9814
cmp r0, 0
beq _081C970C
movs r0, 0x1
b _081C9792
_081C970C:
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _081C9754
ldr r3, =gUnknown_0861FC59
movs r0, 0x2
ldrsh r1, [r4, r0]
ldrh r2, [r4]
lsls r0, r2, 1
adds r0, r2
lsls r0, 1
adds r1, r0
adds r1, r3
ldrb r0, [r1]
cmp r0, 0xD
beq _081C9780
subs r0, 0x8
bl sub_81C7694
ldr r1, =0x000186a8
adds r0, r4, 0
bl sub_81C97B0
movs r0, 0x3
strh r0, [r4, 0x6]
movs r0, 0x8
b _081C9792
.pool
_081C9754:
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _081C9790
movs r0, 0x2
ldrsh r2, [r4, r0]
ldr r1, =gUnknown_0861FC54
ldrh r0, [r4]
adds r0, r1
ldrb r0, [r0]
cmp r2, r0
beq _081C9780
strh r0, [r4, 0x2]
ldr r0, =sub_81C97A4
str r0, [r4, 0xC]
movs r0, 0x1
b _081C9792
.pool
_081C9780:
movs r0, 0x5
bl PlaySE
adds r0, r4, 0
bl sub_81C97F8
movs r0, 0x5
b _081C9792
_081C9790:
movs r0, 0
_081C9792:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_81C96FC
thumb_func_start sub_81C9798
sub_81C9798: @ 81C9798
push {lr}
bl sub_81C97C0
movs r0, 0x3
pop {r1}
bx r1
thumb_func_end sub_81C9798
thumb_func_start sub_81C97A4
sub_81C97A4: @ 81C97A4
push {lr}
bl sub_81C97F8
movs r0, 0x5
pop {r1}
bx r1
thumb_func_end sub_81C97A4
thumb_func_start sub_81C97B0
sub_81C97B0: @ 81C97B0
str r1, [r0, 0x8]
ldr r1, =sub_81C97BC
str r1, [r0, 0xC]
bx lr
.pool
thumb_func_end sub_81C97B0
thumb_func_start sub_81C97BC
sub_81C97BC: @ 81C97BC
ldr r0, [r0, 0x8]
bx lr
thumb_func_end sub_81C97BC
thumb_func_start sub_81C97C0
sub_81C97C0: @ 81C97C0
push {r4,lr}
adds r4, r0, 0
bl sub_81C9268
lsls r0, 24
lsrs r0, 24
strh r0, [r4]
movs r0, 0x1
strh r0, [r4, 0x2]
ldr r2, =gUnknown_0861FC59
ldrh r1, [r4]
lsls r0, r1, 1
adds r0, r1
lsls r0, 1
adds r0, 0x1
adds r0, r2
ldrb r0, [r0]
strh r0, [r4, 0x4]
ldr r0, =sub_81C943C
str r0, [r4, 0xC]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_81C97C0
thumb_func_start sub_81C97F8
sub_81C97F8: @ 81C97F8
movs r1, 0x3
strh r1, [r0]
movs r1, 0x1
strh r1, [r0, 0x2]
ldr r1, =gUnknown_0861FC59
ldrb r1, [r1, 0x13]
strh r1, [r0, 0x4]
ldr r1, =sub_81C963C
str r1, [r0, 0xC]
bx lr
.pool
thumb_func_end sub_81C97F8
thumb_func_start sub_81C9814
sub_81C9814: @ 81C9814
push {r4,r5,lr}
adds r4, r0, 0
ldr r0, =gMain
ldrh r1, [r0, 0x2E]
movs r0, 0x40
ands r0, r1
lsls r0, 16
lsrs r5, r0, 16
cmp r5, 0
beq _081C9848
ldrh r0, [r4, 0x2]
subs r0, 0x1
strh r0, [r4, 0x2]
lsls r0, 16
ldrh r3, [r4]
cmp r0, 0
bge _081C986A
ldr r0, =gUnknown_0861FC54
adds r0, r3, r0
ldrb r0, [r0]
strh r0, [r4, 0x2]
b _081C986A
.pool
_081C9848:
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _081C988C
ldrh r0, [r4, 0x2]
adds r0, 0x1
strh r0, [r4, 0x2]
movs r0, 0x2
ldrsh r2, [r4, r0]
ldr r0, =gUnknown_0861FC54
ldrh r1, [r4]
adds r0, r1, r0
adds r3, r1, 0
ldrb r0, [r0]
cmp r2, r0
ble _081C986A
strh r5, [r4, 0x2]
_081C986A:
ldr r2, =gUnknown_0861FC59
movs r0, 0x2
ldrsh r1, [r4, r0]
lsls r0, r3, 1
adds r0, r3
lsls r0, 1
adds r1, r0
adds r1, r2
ldrb r0, [r1]
strh r0, [r4, 0x4]
movs r0, 0x1
b _081C988E
.pool
_081C988C:
movs r0, 0
_081C988E:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_81C9814
thumb_func_start sub_81C9894
sub_81C9894: @ 81C9894
push {lr}
movs r0, 0x1
bl GetSubstructPtr
ldrh r0, [r0]
pop {r1}
bx r1
thumb_func_end sub_81C9894
thumb_func_start sub_81C98A4
sub_81C98A4: @ 81C98A4
push {lr}
movs r0, 0x1
bl GetSubstructPtr
movs r1, 0x2
ldrsh r0, [r0, r1]
pop {r1}
bx r1
thumb_func_end sub_81C98A4
thumb_func_start sub_81C98B4
sub_81C98B4: @ 81C98B4
push {lr}
movs r0, 0x1
bl GetSubstructPtr
ldrh r0, [r0, 0x4]
pop {r1}
bx r1
thumb_func_end sub_81C98B4
thumb_func_start sub_81C98C4
sub_81C98C4: @ 81C98C4
push {lr}
movs r0, 0x1
bl GetSubstructPtr
ldrh r0, [r0, 0x6]
pop {r1}
bx r1
thumb_func_end sub_81C98C4
.align 2, 0 @ Don't pad with nop.

View File

@ -1506,7 +1506,7 @@ sub_81CBE50: @ 81CBE50
movs r0, 0x9
bl GetGameStat
adds r1, r0, 0
ldr r0, =0x0001869f @ Note to decompiler: See UNKNOWN_OFFSET
ldr r0, =0x0001869f
cmp r1, r0
ble _081CBE68
adds r1, r0, 0

View File

@ -3,17 +3,6 @@
.section .rodata
// pokenav_unk_1.s
gUnknown_0861FC54:: @ 861FC54
.byte 2
.byte 3
.byte 4
.byte 2
.byte 5
gUnknown_0861FC59:: @ 861FC59
.byte 0, 1, 4, 4, 4, 4, 0, 1, 2, 4, 4, 4, 0, 1, 2, 3, 4, 4, 5, 6, 7, 4, 4, 4, 8, 9, 10, 11, 12, 13, 0
// pokenav_unk_2.s
gUnknown_0861FC78:: @ 861FC78
.incbin "graphics/pokenav/bg.gbapal"

View File

@ -4,6 +4,7 @@
#include "main.h"
void sub_802A9A8(u16 monId, MainCallback callback);
bool32 sub_802C908(u16 species);
#endif // GUARD_POKEMON_JUMP_H

View File

@ -1,7 +1,7 @@
#ifndef GUARD_POKENAV_H
#define GUARD_POKENAV_H
typedef u32 (*LoopedTask)(s32 state);
typedef u32 (*LoopedTask)(int state);
// Return values of LoopedTask functions.
#define LT_INC_AND_PAUSE 0
@ -11,8 +11,36 @@ typedef u32 (*LoopedTask)(s32 state);
#define LT_FINISH 4
#define LT_SET_STATE(newState) (newState + 5)
enum
{
POKENAV_MODE_NORMAL, // Chosen from Start menu.
POKENAV_MODE_FORCE_CALL_1, // Used for the script's special. Has to choose Match Call and make a call.
POKENAV_MODE_FORCE_CALL_2, // Set after making a call, has to exit Pokenav.
};
#define POKENAV_MENU_IDS_START 100000
enum
{
POKENAV_MENU_0 = POKENAV_MENU_IDS_START,
POKENAV_MENU_1,
POKENAV_MENU_2,
POKENAV_MENU_3,
POKENAV_MENU_4,
POKENAV_MENU_5,
POKENAV_MENU_6,
POKENAV_MENU_7,
POKENAV_MENU_8,
POKENAV_MENU_9,
POKENAV_MENU_A,
POKENAV_MENU_B,
POKENAV_MENU_C,
POKENAV_MENU_D,
POKENAV_MENU_E,
};
// pokenav.c
extern u32 sub_81C99D4(void);
void sub_81C7694(u32);
u16 sub_81C76AC(void);
void CB2_InitPokeNav(void);
u32 CreateLoopedTask(LoopedTask loopedTask, u32 priority);
@ -22,7 +50,31 @@ void FreePokenavSubstruct(u32 index);
void *AllocSubstruct(u32 index, u32 size);
void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes);
bool32 IsLoopedTaskActive(u32 taskId);
void SetPokenavMode(u16 mode);
u32 GetPokenavMode(void);
bool32 CanViewRibbonsMenu(void);
// pokenav_match_call_ui.c
// pokenav_main_menu.c
bool32 InitPokenavMainMenu(void);
void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size);
void sub_81C7850(u32 a0);
u32 sub_81C786C(void);
// pokenav_unk_1.c
bool32 sub_81C9298(void);
bool32 sub_81C92CC(void);
bool32 sub_81C9304(void);
bool32 sub_81C9338(void);
bool32 sub_81C9368(void);
u32 sub_81C941C(void);
void sub_81C9430(void);
int sub_81C9894(void);
// pokenav_unk_2.c
u32 sub_81C99D4(void);
void sub_81CAADC(void);
#endif //GUARD_POKENAV_H

View File

@ -162,7 +162,6 @@ extern u8 gUnknown_02022C3E;
// Exported ROM declarations
u8 sub_8013F78(void);
bool32 sub_802C908(u16);
void nullsub_89(u8 taskId);
void var_800D_set_xB(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);

View File

@ -303,7 +303,7 @@ SECTIONS {
src/pokenav.o(.text);
src/pokenav_main_menu.o(.text);
src/pokenav_match_call_ui.o(.text);
asm/pokenav_unk_1.o(.text);
src/pokenav_unk_1.o(.text);
asm/pokenav_unk_2.o(.text);
asm/pokenav_unk_3.o(.text);
asm/pokenav_unk_4.o(.text);
@ -632,6 +632,7 @@ SECTIONS {
src/pokenav.o(.rodata);
src/pokenav_main_menu.o(.rodata);
src/pokenav_match_call_ui.o(.rodata);
src/pokenav_unk_1.o(.rodata);
data/pokenav.o(.rodata);
src/pokenav_match_call_data.o(.rodata);
src/menu_specialized.o(.rodata);

View File

@ -45,11 +45,11 @@
#include "player_pc.h"
#include "pokemon.h"
#include "pokemon_icon.h"
#include "pokemon_jump.h"
#include "pokemon_storage_system.h"
#include "pokemon_summary_screen.h"
#include "region_map.h"
#include "reshow_battle_screen.h"
#include "union_room.h"
#include "scanline_effect.h"
#include "script.h"
#include "sound.h"
@ -61,6 +61,7 @@
#include "text.h"
#include "text_window.h"
#include "trade.h"
#include "union_room.h"
#include "window.h"
#include "constants/battle.h"
#include "constants/battle_frontier.h"

View File

@ -4039,7 +4039,7 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
lsls r2, 24\n\
lsrs r2, 24\n\
str r2, [sp, 0x10]\n\
ldr r5, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\
ldr r5, =0x000186a0\n\
muls r0, r5\n\
ldr r1, =0x000011b8\n\
bl __divsi3\n\
@ -4073,7 +4073,7 @@ _080C04C0:\n\
mov r8, r1\n\
movs r6, 0x1\n\
_080C04C6:\n\
ldr r1, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\
ldr r1, =0x000186a0\n\
adds r0, r7, 0\n\
bl __umodsi3\n\
adds r7, r0, 0\n\

View File

@ -1,5 +1,8 @@
#include "global.h"
#include "alloc.h"
#include "data.h"
#include "decompress.h"
#include "event_data.h"
#include "item.h"
#include "link.h"
#include "link_rfu.h"
@ -12,6 +15,7 @@
#include "sprite.h"
#include "string_util.h"
#include "task.h"
#include "trig.h"
#include "pokemon.h"
#include "pokemon_jump.h"
#include "constants/rgb.h"
@ -121,11 +125,25 @@ struct Unk802B078
int unk8;
};
struct PokemonJump2
{
u8 filler0[0xE];
u8 unkE;
u8 unkF;
u8 filler10[0x8198];
struct Sprite *unk81A8[MAX_RFU_PLAYERS];
struct Sprite *unk81BC[MAX_RFU_PLAYERS];
struct Sprite *unk81D0[8];
u8 filler81F0[0xC];
u8 unk81FC[MAX_RFU_PLAYERS];
};
static void sub_802AA60(struct PokemonJump1 *);
void sub_802AA94(struct PokemonJump1 *);
void sub_802AB20(void);
static void sub_802AB98(void);
s16 sub_802AC00(u16);
static s16 sub_802AC00(u16 species);
static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon);
static void sub_802AC6C(void);
static void sub_802ACA0(u8 taskId);
@ -191,8 +209,12 @@ static bool32 sub_802C7BC(void);
static u16 sub_802C7E0(void);
static void sub_802C808(u16, u16 *, u16 *);
static u16 sub_802C818(void);
u16 sub_802C838(void);
u16 sub_802C880(u16, u16);
static u16 sub_802C838(void);
static u16 sub_802C880(u16 item, u16 quantity);
static void sub_802CB7C(struct Sprite *sprite);
static void sub_802CC40(struct Sprite *sprite);
static void sub_802CD08(struct Sprite *sprite);
static void sub_802CDD4(struct Sprite *sprite);
void sub_802DC9C(u32);
void sub_802D074(void *);
void sub_802D0AC(void);
@ -229,6 +251,7 @@ int sub_802E354(int, u16, u16);
void sub_802E3A8(void);
extern struct PokemonJump1 *gUnknown_02022CFC;
extern struct PokemonJump2 *gUnknown_02022D00;
const struct PokemonJumpMons gPkmnJumpSpecies[] =
{
@ -363,10 +386,17 @@ bool32 (* const gUnknown_082FB618[])(void) =
extern const u16 gUnknown_082FB63C[];
extern const u16 gUnknown_082FB64C[4];
extern const u16 gUnknown_082FB654[];
extern s8 gUnknown_082FB65C[][48];
extern int gUnknown_082FB6EC[];
extern int gUnknown_082FB714[];
extern u16 gUnknown_082FB704[8];
extern const s8 gUnknown_082FB65C[][48];
extern const int gUnknown_082FB6EC[];
extern const int gUnknown_082FB714[];
extern const u16 gUnknown_082FB704[8];
extern const struct CompressedSpriteSheet gUnknown_082FBE08[5];
extern const struct SpritePalette gUnknown_082FBE30[2];
extern const struct SpriteTemplate gUnknown_082FBE40;
extern const struct SpriteTemplate gUnknown_082FC00C;
extern const s16 gUnknown_082FBE58[];
extern const s16 gUnknown_082FBEA8[8];
extern const struct SpriteTemplate gUnknown_082FBEB8[4];
void sub_802A9A8(u16 partyIndex, MainCallback callback)
{
@ -480,7 +510,7 @@ static void sub_802AB98(void)
}
}
s16 sub_802AC00(u16 species)
static s16 sub_802AC00(u16 species)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(gPkmnJumpSpecies); i++)
@ -2022,3 +2052,355 @@ static u16 sub_802C818(void)
u16 index = Random() % ARRAY_COUNT(gUnknown_082FB704);
return gUnknown_082FB704[index];
}
NAKED
static u16 sub_802C838(void)
{
asm_unified("\n\
push {r4-r6,lr}\n\
movs r5, 0\n\
movs r4, 0\n\
ldr r3, =gUnknown_02022CFC\n\
ldr r0, [r3]\n\
ldr r2, =gUnknown_082FB714\n\
ldr r1, [r0, 0x78]\n\
ldr r0, [r2]\n\
cmp r1, r0\n\
bcc _0802C874\n\
ldr r5, [r2, 0x4]\n\
adds r6, r3, 0\n\
adds r3, r2, 0x4\n\
_0802C852:\n\
adds r3, 0x8\n\
adds r2, 0x8\n\
adds r4, 0x1\n\
cmp r4, 0x4\n\
bhi _0802C874\n\
ldr r0, [r6]\n\
ldr r1, [r0, 0x78]\n\
ldr r0, [r2]\n\
cmp r1, r0\n\
bcc _0802C874\n\
ldr r5, [r3]\n\
b _0802C852\n\
.pool\n\
_0802C874:\n\
lsls r0, r5, 16\n\
lsrs r0, 16\n\
pop {r4-r6}\n\
pop {r1}\n\
bx r1");
}
static u16 sub_802C880(u16 item, u16 quantity)
{
while (quantity && !CheckBagHasSpace(item, quantity))
quantity--;
return quantity;
}
u16 sub_802C8AC(void)
{
return GetLinkPlayerCount();
}
u16 sub_802C8BC(void)
{
return gUnknown_02022CFC->unk6;
}
struct PokemonJump1_MonInfo *sub_802C8C8(u8 multiplayerId)
{
return &gUnknown_02022CFC->unk82A8[multiplayerId];
}
u8 *sub_802C8E8(u8 multiplayerId)
{
return gUnknown_02022CFC->unk82E4[multiplayerId].unk1C;
}
bool32 sub_802C908(u16 species)
{
return sub_802AC00(species) > -1;
}
void sub_802C920(void)
{
int i;
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES))
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (sub_802C908(species))
{
gSpecialVar_Result = 1;
return;
}
}
}
gSpecialVar_Result = 0;
}
void sub_802C974(struct PokemonJump2 *arg0)
{
int i;
for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE08); i++)
LoadCompressedSpriteSheet(&gUnknown_082FBE08[i]);
for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE30); i++)
LoadSpritePalette(&gUnknown_082FBE30[i]);
arg0->unkE = IndexOfSpritePaletteTag(5);
arg0->unkF = IndexOfSpritePaletteTag(6);
}
static void sub_802C9BC(struct Sprite *sprite)
{
int i;
for (i = 0; i < 8; i++)
sprite->data[i] = 0;
}
void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon, u16 x, u16 y, u8 multiplayerId)
{
struct SpriteTemplate spriteTemplate;
struct SpriteSheet spriteSheet;
struct CompressedSpritePalette spritePalette;
u8 *buffer;
u8 *unusedBuffer;
u8 subpriority;
u8 spriteId;
spriteTemplate = gUnknown_082FBE40;
buffer = Alloc(0x2000);
unusedBuffer = Alloc(0x800);
if (multiplayerId == sub_802C8BC())
subpriority = 3;
else
subpriority = multiplayerId + 4;
if (buffer && unusedBuffer)
{
HandleLoadSpecialPokePic(
&gMonStillFrontPicTable[jumpMon->species],
buffer,
jumpMon->species,
jumpMon->personality);
spriteSheet.data = buffer;
spriteSheet.tag = multiplayerId;
spriteSheet.size = 0x800;
LoadSpriteSheet(&spriteSheet);
spritePalette.data = GetFrontSpritePalFromSpeciesAndPersonality(jumpMon->species, jumpMon->otId, jumpMon->personality);
spritePalette.tag = multiplayerId;
LoadCompressedSpritePalette(&spritePalette);
Free(buffer);
Free(unusedBuffer);
spriteTemplate.tileTag += multiplayerId;
spriteTemplate.paletteTag += multiplayerId;
spriteId = CreateSprite(&spriteTemplate, x, y, subpriority);
if (spriteId != MAX_SPRITES)
{
arg0->unk81A8[multiplayerId] = &gSprites[spriteId];
arg0->unk81FC[multiplayerId] = subpriority;
return;
}
}
arg0->unk81A8[multiplayerId] = NULL;
}
void sub_802CB14(struct PokemonJump2 *arg0, int multiplayerId)
{
sub_802C9BC(arg0->unk81BC[multiplayerId]);
arg0->unk81BC[multiplayerId]->data[7] = arg0->unk81A8[multiplayerId] - gSprites;
arg0->unk81BC[multiplayerId]->invisible = 0;
arg0->unk81BC[multiplayerId]->pos1.y = 96;
arg0->unk81BC[multiplayerId]->callback = sub_802CB7C;
StartSpriteAnim(arg0->unk81BC[multiplayerId], 1);
}
static void sub_802CB7C(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
if (sprite->animEnded)
{
sprite->invisible = 1;
sprite->callback = SpriteCallbackDummy;
}
break;
case 1:
sprite->pos1.y--;
sprite->data[1]++;
if (sprite->pos1.y <= 72)
{
sprite->pos1.y = 72;
sprite->data[0]++;
}
break;
case 2:
if (++sprite->data[1] >= 48)
{
sprite->invisible = 1;
sprite->callback = SpriteCallbackDummy;
}
break;
}
}
void sub_802CBF0(struct PokemonJump2 *arg0, int multiplayerId)
{
arg0->unk81A8[multiplayerId]->callback = sub_802CC40;
arg0->unk81A8[multiplayerId]->pos2.y = 0;
sub_802C9BC(arg0->unk81A8[multiplayerId]);
}
bool32 sub_802CC18(struct PokemonJump2 *arg0, int multiplayerId)
{
return arg0->unk81A8[multiplayerId]->callback == sub_802CC40;
}
static void sub_802CC40(struct Sprite *sprite)
{
if (++sprite->data[1] > 1)
{
if (++sprite->data[2] & 1)
sprite->pos2.y = 2;
else
sprite->pos2.y = -2;
sprite->data[1] = 0;
}
if (sprite->data[2] > 12)
{
sprite->pos2.y = 0;
sprite->callback = SpriteCallbackDummy;
}
}
void sub_802CC88(struct PokemonJump2 *arg0, int multiplayerId)
{
sub_802C9BC(arg0->unk81A8[multiplayerId]);
arg0->unk81A8[multiplayerId]->callback = sub_802CD08;
}
void sub_802CCB0(struct PokemonJump2 *arg0)
{
int i;
u16 numPlayers = sub_802C8AC();
for (i = 0; i < numPlayers; i++)
{
if (arg0->unk81A8[i]->callback == sub_802CD08)
{
arg0->unk81A8[i]->invisible = 0;
arg0->unk81A8[i]->callback = SpriteCallbackDummy;
arg0->unk81A8[i]->subpriority = 10;
}
}
}
static void sub_802CD08(struct Sprite *sprite)
{
if (++sprite->data[0] > 3)
{
sprite->data[0] = 0;
sprite->invisible ^= 1;
}
}
void sub_802CD3C(struct PokemonJump2 *arg0)
{
int i;
u16 numPlayers = sub_802C8AC();
for (i = 0; i < numPlayers; i++)
arg0->unk81A8[i]->subpriority = arg0->unk81FC[i];
}
void sub_802CD70(struct PokemonJump2 *arg0, int multiplayerId)
{
sub_802C9BC(arg0->unk81A8[multiplayerId]);
arg0->unk81A8[multiplayerId]->callback = sub_802CDD4;
}
bool32 sub_802CD98(struct PokemonJump2 *arg0)
{
int i;
u16 numPlayers = sub_802C8AC();
for (i = 0; i < numPlayers; i++)
{
if (arg0->unk81A8[i]->callback == sub_802CDD4)
return TRUE;
}
return FALSE;
}
static void sub_802CDD4(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
PlaySE(SE_JITE_PYOKO);
sprite->data[1] = 0;
sprite->data[0]++;
// fall through
case 1:
sprite->data[1] += 4;
if (sprite->data[1] > 0x7F)
sprite->data[1] = 0;
sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
if (sprite->data[1] == 0)
{
if (++sprite->data[2] < 2)
sprite->data[0] = 0;
else
sprite->callback = SpriteCallbackDummy;
}
break;
}
}
void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId)
{
u8 spriteId = CreateSprite(&gUnknown_082FC00C, x, y, 1);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].invisible = 1;
arg0->unk81BC[multiplayerId] = &gSprites[spriteId];
}
}
// void sub_802CE9C(struct PokemonJump2 *arg0)
// {
// int i;
// int count;
// u8 spriteId;
// count = 0;
// for (i = 0; i < 4; i++)
// {
// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2);
// arg0->unk81D0[count] = &gSprites[spriteId];
// count++;
// }
// for (i = 0; i < 4; i++)
// {
// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2);
// arg0->unk81D0[count] = &gSprites[spriteId];
// arg0->unk81D0[count]->hFlip = 1;
// count++;
// }
// }

View File

@ -8,32 +8,12 @@
#include "pokemon_storage_system.h"
#include "pokenav.h"
enum
{
MODE_NORMAL, // Chosen from Start menu.
MODE_FORCE_CALL_1, // Used for the script's special. Has to choose Match Call and make a call.
MODE_FORCE_CALL_2, // Set after making a call, has to exit Pokenav.
};
enum
{
NAVMENU_CB_UNK_0,
NAVMENU_CB_UNK_1,
NAVMENU_CB_UNK_2,
NAVMENU_CB_UNK_3,
NAVMENU_CB_UNK_4,
NAVMENU_CB_UNK_5,
NAVMENU_CB_UNK_6
};
#define LOOPED_TASK_DECODE_STATE(action) (action - 5)
#define LOOPED_TASK_ID(primary, secondary) (((secondary) << 16) |(primary))
#define LOOPED_TASK_PRIMARY_ID(taskId) (taskId & 0xFFFF)
#define LOOPED_TASK_SECONDARY_ID(taskId) (taskId >> 16)
#define UNKNOWN_OFFSET 100000
#define SUBSTRUCT_COUNT 19
struct PokenavResources
@ -46,37 +26,41 @@ struct PokenavResources
void *field10[SUBSTRUCT_COUNT];
};
extern u32 sub_81C9430(void);
extern u32 sub_81C9298(void);
extern u32 sub_81C941C(void);
struct UnknownPokenavCallbackStruct
{
u32 (*unk0)(void);
u32 (*unk4)(void);
u32 (*unk8)(void);
u32 (*unkC)(void);
u32 (*unk10)(void);
void (*unk14)(void);
u32 (*unk18)(void);
};
extern u32 sub_81C9924(void);
extern u32 sub_81C99C0(void);
extern u32 sub_81C9990(void);
extern u32 sub_81C9940(void);
extern u32 sub_81C9338(void);
extern u32 sub_81C9368(void);
extern u32 sub_81C92CC(void);
extern u32 sub_81C9304(void);
extern u32 sub_81CC4D4(void);
extern u32 sub_81CC554(void);
extern u32 sub_81CC5F4(void);
extern u32 sub_81CC62C(void);
extern u32 sub_81CC65C(void);
extern u32 sub_81CC524(void);
extern void sub_81CC524(void);
extern u32 sub_81CC670(void);
extern u32 sub_81CCFD8(void);
extern u32 sub_81CD070(void);
extern u32 sub_81CDDD4(void);
extern u32 sub_81CDE2C(void);
extern u32 sub_81CDE64(void);
extern u32 sub_81CD1C0(void);
extern void sub_81CD1C0(void);
extern u32 sub_81CECA0(void);
extern u32 sub_81CEF3C(void);
extern u32 sub_81CEFDC(void);
extern u32 sub_81CF330(void);
extern u32 sub_81CF3A0(void);
extern u32 sub_81CF3D0(void);
extern u32 sub_81CEFF0(void);
extern void sub_81CEFF0(void);
extern u32 sub_81CF3F8(void);
extern u32 sub_81CD024(void);
extern u32 sub_81CEF98(void);
@ -86,36 +70,33 @@ extern u32 sub_81CAB24(void);
extern u32 sub_81CB260(void);
extern u32 sub_81CB29C(void);
extern u32 sub_81CB2CC(void);
extern u32 sub_81CAB38(void);
extern void sub_81CAB38(void);
extern u32 sub_81CB2E0(void);
extern u32 sub_81CF9BC(void);
extern u32 sub_81CFA34(void);
extern u32 sub_81CFDD0(void);
extern u32 sub_81CFE40(void);
extern u32 sub_81CFE70(void);
extern u32 sub_81CFA48(void);
extern void sub_81CFA48(void);
extern u32 sub_81CFE98(void);
extern u32 sub_81D0450(void);
extern u32 sub_81D04A0(void);
extern u32 sub_81D0978(void);
extern u32 sub_81D09B0(void);
extern u32 sub_81D09E0(void);
extern u32 sub_81D04B8(void);
extern void sub_81D04B8(void);
extern u32 sub_81D09F4(void);
extern u32 sub_81CFA04(void);
extern u32 sub_81CFE08(void);
bool32 SetActivePokenavMenu(u32 a0);
bool32 InitPokenavMainMenu(void);
static bool32 SetActivePokenavMenu(u32 menuId);
static bool32 AnyMonHasRibbon(void);
u32 sub_81C75E0(void);
u32 sub_81C75D4(void);
u32 PokenavMainMenuLoopedTaskIsActive(void);
u32 sub_81C786C(void);
bool32 WaitForPokenavShutdownFade(void);
void sub_81C7834(void *func1, void *func2);
static void InitPokenavResources(struct PokenavResources *a0);
void sub_81C7850(u32 a0);
void Task_RunLoopedTask_LinkMode(u8 a0);
void Task_RunLoopedTask(u8 taskId);
void sub_81C742C(u8 taskId);
@ -126,143 +107,142 @@ static void VBlankCB_Pokenav(void);
static void CB2_Pokenav(void);
void sub_81C72BC(void);
// Const rom data.
u32 (*const PokenavMenuCallbacks[15][7])(void) =
const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
{
{
sub_81C9298,
sub_81C941C,
sub_81C9924,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C9298,
.unk4 = sub_81C941C,
.unk8 = sub_81C9924,
.unkC = sub_81C9990,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81C9298,
sub_81C941C,
sub_81C9940,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C9298,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = sub_81C9990,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81C9338,
sub_81C941C,
sub_81C9940,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C9338,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = sub_81C9990,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81C9368,
sub_81C941C,
sub_81C9940,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C9368,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = sub_81C9990,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81C92CC,
sub_81C941C,
sub_81C9940,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C92CC,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = sub_81C9990,
.unk10 =sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81C9304,
sub_81C941C,
sub_81C9940,
sub_81C9990,
sub_81C99C0,
sub_81C9430,
sub_81C99D4,
.unk0 = sub_81C9304,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
.unkC = sub_81C9990,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
},
{
sub_81CC4D4,
sub_81CC554,
sub_81CC5F4,
sub_81CC62C,
sub_81CC65C,
sub_81CC524,
sub_81CC670,
.unk0 = sub_81CC4D4,
.unk4 = sub_81CC554,
.unk8 = sub_81CC5F4,
.unkC = sub_81CC62C,
.unk10 = sub_81CC65C,
.unk14 = sub_81CC524,
.unk18 = sub_81CC670,
},
{
sub_81CCFD8,
sub_81CD070,
sub_81CDDD4,
sub_81CDE2C,
sub_81CDE64,
sub_81CD1C0,
sub_81CECA0,
.unk0 = sub_81CCFD8,
.unk4 = sub_81CD070,
.unk8 = sub_81CDDD4,
.unkC = sub_81CDE2C,
.unk10 = sub_81CDE64,
.unk14 = sub_81CD1C0,
.unk18 = sub_81CECA0,
},
{
sub_81CEF3C,
sub_81CEFDC,
sub_81CF330,
sub_81CF3A0,
sub_81CF3D0,
sub_81CEFF0,
sub_81CF3F8,
.unk0 = sub_81CEF3C,
.unk4 = sub_81CEFDC,
.unk8 = sub_81CF330,
.unkC = sub_81CF3A0,
.unk10 = sub_81CF3D0,
.unk14 = sub_81CEFF0,
.unk18 = sub_81CF3F8,
},
{
sub_81CD024,
sub_81CD070,
sub_81CDDD4,
sub_81CDE2C,
sub_81CDE64,
sub_81CD1C0,
sub_81CECA0,
.unk0 = sub_81CD024,
.unk4 = sub_81CD070,
.unk8 = sub_81CDDD4,
.unkC = sub_81CDE2C,
.unk10 = sub_81CDE64,
.unk14 = sub_81CD1C0,
.unk18 = sub_81CECA0,
},
{
sub_81CEF98,
sub_81CEFDC,
sub_81CF368,
sub_81CF3A0,
sub_81CF3D0,
sub_81CEFF0,
sub_81CF3F8,
.unk0 = sub_81CEF98,
.unk4 = sub_81CEFDC,
.unk8 = sub_81CF368,
.unkC = sub_81CF3A0,
.unk10 = sub_81CF3D0,
.unk14 = sub_81CEFF0,
.unk18 = sub_81CF3F8,
},
{
sub_81CAAE8,
sub_81CAB24,
sub_81CB260,
sub_81CB29C,
sub_81CB2CC,
sub_81CAB38,
sub_81CB2E0,
.unk0 = sub_81CAAE8,
.unk4 = sub_81CAB24,
.unk8 = sub_81CB260,
.unkC = sub_81CB29C,
.unk10 = sub_81CB2CC,
.unk14 = sub_81CAB38,
.unk18 = sub_81CB2E0,
},
{
sub_81CF9BC,
sub_81CFA34,
sub_81CFDD0,
sub_81CFE40,
sub_81CFE70,
sub_81CFA48,
sub_81CFE98,
.unk0 = sub_81CF9BC,
.unk4 = sub_81CFA34,
.unk8 = sub_81CFDD0,
.unkC = sub_81CFE40,
.unk10 = sub_81CFE70,
.unk14 = sub_81CFA48,
.unk18 = sub_81CFE98,
},
{
sub_81D0450,
sub_81D04A0,
sub_81D0978,
sub_81D09B0,
sub_81D09E0,
sub_81D04B8,
sub_81D09F4,
.unk0 = sub_81D0450,
.unk4 = sub_81D04A0,
.unk8 = sub_81D0978,
.unkC = sub_81D09B0,
.unk10 = sub_81D09E0,
.unk14 = sub_81D04B8,
.unk18 = sub_81D09F4,
},
{
sub_81CFA04,
sub_81CFA34,
sub_81CFE08,
sub_81CFE40,
sub_81CFE70,
sub_81CFA48,
sub_81CFE98,
.unk0 = sub_81CFA04,
.unk4 = sub_81CFA34,
.unk8 = sub_81CFE08,
.unkC = sub_81CFE40,
.unk10 = sub_81CFE70,
.unk14 = sub_81CFA48,
.unk18 = sub_81CFE98,
},
};
@ -300,7 +280,7 @@ bool32 IsLoopedTaskActive(u32 taskId)
bool32 FuncIsActiveLoopedTask(LoopedTask func)
{
s32 i;
int i;
for (i = 0; i < NUM_TASKS; i++)
{
if (gTasks[i].isActive
@ -413,7 +393,7 @@ void sub_81C72BC(void)
else
{
InitPokenavResources(gPokenavResources);
gPokenavResources->mode = MODE_FORCE_CALL_1;
gPokenavResources->mode = POKENAV_MODE_FORCE_CALL_1;
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
@ -426,7 +406,7 @@ void sub_81C72BC(void)
static void FreePokenavResources(void)
{
s32 i;
int i;
for (i = 0; i < SUBSTRUCT_COUNT; i++)
FreePokenavSubstruct(i);
@ -437,12 +417,12 @@ static void FreePokenavResources(void)
static void InitPokenavResources(struct PokenavResources *a0)
{
s32 i;
int i;
for (i = 0; i < SUBSTRUCT_COUNT; i++)
a0->field10[i] = NULL;
a0->mode = MODE_NORMAL;
a0->mode = POKENAV_MODE_NORMAL;
a0->currentMenuIndex = 0;
a0->hasAnyRibbons = AnyMonHasRibbon();
a0->currentMenuCb1 = NULL;
@ -450,7 +430,7 @@ static void InitPokenavResources(struct PokenavResources *a0)
static bool32 AnyMonHasRibbon(void)
{
s32 i, j;
int i, j;
for (i = 0; i < PARTY_SIZE; i++)
{
@ -507,7 +487,7 @@ void sub_81C742C(u8 taskId)
// Wait for LoopedTask_InitPokenavMenu to finish
if (PokenavMainMenuLoopedTaskIsActive())
break;
SetActivePokenavMenu(0 + UNKNOWN_OFFSET);
SetActivePokenavMenu(POKENAV_MENU_0);
data[0] = 4;
break;
case 2:
@ -521,10 +501,10 @@ void sub_81C742C(u8 taskId)
ShutdownPokenav();
data[0] = 5;
}
else if (v1 >= UNKNOWN_OFFSET)
else if (v1 >= POKENAV_MENU_IDS_START)
{
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex][NAVMENU_CB_UNK_6]();
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex][NAVMENU_CB_UNK_5]();
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].unk18();
PokenavMenuCallbacks[gPokenavResources->currentMenuIndex].unk14();
if (SetActivePokenavMenu(v1))
{
data[0] = 4;
@ -549,7 +529,7 @@ void sub_81C742C(u8 taskId)
case 5:
if (!WaitForPokenavShutdownFade())
{
bool32 calledFromScript = (gPokenavResources->mode != MODE_NORMAL);
bool32 calledFromScript = (gPokenavResources->mode != POKENAV_MODE_NORMAL);
sub_81C9430();
FreePokenavResources();
@ -562,18 +542,18 @@ void sub_81C742C(u8 taskId)
}
}
bool32 SetActivePokenavMenu(u32 indexWithOffset)
static bool32 SetActivePokenavMenu(u32 menuId)
{
u32 index = indexWithOffset - UNKNOWN_OFFSET;
u32 index = menuId - POKENAV_MENU_IDS_START;
InitKeys_();
if (!PokenavMenuCallbacks[index][NAVMENU_CB_UNK_0]())
if (!PokenavMenuCallbacks[index].unk0())
return FALSE;
if (!PokenavMenuCallbacks[index][NAVMENU_CB_UNK_2]())
if (!PokenavMenuCallbacks[index].unk8())
return FALSE;
sub_81C7834(PokenavMenuCallbacks[index][NAVMENU_CB_UNK_3], PokenavMenuCallbacks[index][NAVMENU_CB_UNK_4]);
gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index][NAVMENU_CB_UNK_1];
sub_81C7834(PokenavMenuCallbacks[index].unkC, PokenavMenuCallbacks[index].unk10);
gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].unk4;
gPokenavResources->currentMenuIndex = index;
return TRUE;
}
@ -605,7 +585,8 @@ void SetPokenavVBlankCallback(void)
void *AllocSubstruct(u32 index, u32 size)
{
return gPokenavResources->field10[index] = Alloc(size);
gPokenavResources->field10[index] = Alloc(size);
return gPokenavResources->field10[index];
}
void *GetSubstructPtr(u32 index)
@ -619,7 +600,7 @@ void FreePokenavSubstruct(u32 index)
FREE_AND_SET_NULL(gPokenavResources->field10[index]);
}
u16 GetPokenavMode(void)
u32 GetPokenavMode(void)
{
return gPokenavResources->mode;
}

View File

@ -19,12 +19,10 @@ enum
POKENAV_GFX_CONDITION_MENU,
POKENAV_GFX_RIBBONS_MENU,
POKENAV_GFX_MATCH_CALL_MENU,
// One of these is for the zoomed-in map, and the other is for the
// zoomed-out map. Don't know which is which yet.
POKENAV_GFX_MAP_MENU_UNK0,
POKENAV_GFX_MAP_MENU_UNK1,
POKENAV_GFX_PARTY_MENU,
POKENAV_GFX_SEARCH_MENU,
POKENAV_GFX_COOL_MENU,
@ -32,8 +30,7 @@ enum
POKENAV_GFX_CUTE_MENU,
POKENAV_GFX_SMART_MENU,
POKENAV_GFX_TOUGH_MENU,
POKENAV_GFX_MENUS_END
POKENAV_GFX_MENUS_END,
};
#define POKENAV_GFX_SUBMENUS_START POKENAV_GFX_PARTY_MENU
@ -60,27 +57,23 @@ struct CompressedSpriteSheetNoSize
u32 tag;
};
extern void sub_81CAADC(void);
void CleanupPokenavMainMenuResources(void);
void LoadLeftHeaderGfxForSubMenu(u32 arg0);
void LoadLeftHeaderGfxForMenu(u32 arg0);
void HideLeftHeaderSubmenuSprites(bool32 arg0);
void HideLeftHeaderSprites(bool32 arg0);
void ShowLeftHeaderSprites(u32 arg0, bool32 arg1);
void ShowLeftHeaderSubmenuSprites(u32 arg0, bool32 arg1);
void MoveLeftHeader(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3);
void SpriteCB_MoveLeftHeader(struct Sprite *sprite);
void InitPokenavMainMenuResources(void);
void InitHoennMapHeaderSprites(void);
void sub_81C7B74(void);
void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 a1, u32 a2);
u32 LoopedTask_ScrollMenuHeaderDown(s32 a0);
u32 LoopedTask_ScrollMenuHeaderUp(s32 a0);
void sub_81C7BF8(u32 a0);
void SpriteCB_SpinningPokenav(struct Sprite* sprite);
u32 LoopedTask_InitPokenavMenu(s32 a0);
static void CleanupPokenavMainMenuResources(void);
static void LoadLeftHeaderGfxForSubMenu(u32 arg0);
static void LoadLeftHeaderGfxForMenu(u32 index);
static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide);
static void HideLeftHeaderSprites(bool32 isOnRightSide);
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide);
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide);
static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration);
static void SpriteCB_MoveLeftHeader(struct Sprite *sprite);
static void InitPokenavMainMenuResources(void);
static void InitHoennMapHeaderSprites(void);
static void sub_81C7B74(void);
static u32 LoopedTask_ScrollMenuHeaderDown(int a0);
static u32 LoopedTask_ScrollMenuHeaderUp(int a0);
static void sub_81C7BF8(u32 a0);
static void SpriteCB_SpinningPokenav(struct Sprite* sprite);
static u32 LoopedTask_InitPokenavMenu(int a0);
const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal");
const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz");
@ -121,7 +114,7 @@ const struct WindowTemplate gUnknown_0861FA08[2] =
},
};
const u8 *const sMenuButtonReminders[12] =
const u8 *const sHelpBarTexts[12] =
{
gText_Pokenav_ClearButtonList,
gText_PokenavMap_ZoomedOutButtons,
@ -367,7 +360,7 @@ bool32 WaitForPokenavShutdownFade(void)
return TRUE;
}
u32 LoopedTask_InitPokenavMenu(s32 a0)
static u32 LoopedTask_InitPokenavMenu(int a0)
{
struct PokenavMainMenuResources *structPtr;
@ -447,7 +440,7 @@ bool32 MainMenuLoopedTaskIsBusy(void)
return IsLoopedTaskActive(structPtr->currentTaskId);
}
u32 LoopedTask_ScrollMenuHeaderDown(s32 a0)
static u32 LoopedTask_ScrollMenuHeaderDown(int a0)
{
switch (a0)
{
@ -468,7 +461,7 @@ u32 LoopedTask_ScrollMenuHeaderDown(s32 a0)
}
}
u32 LoopedTask_ScrollMenuHeaderUp(s32 a0)
static u32 LoopedTask_ScrollMenuHeaderUp(int a0)
{
if (ChangeBgY(0, 384, 2) <= 0)
{
@ -508,7 +501,7 @@ void sub_81C7990(u32 a0, u16 a1)
CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16));
}
__attribute__((naked))
NAKED
void sub_81C79BC(u16 *a0, u16 *a1, u32 a2, u32 a3, u32 a4, u32 a5)
{
asm(".syntax unified\n\
@ -644,7 +637,7 @@ _081C7AAE:\n\
.syntax divided");
}
void sub_81C7AC0(s32 a0)
void sub_81C7AC0(int a0)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@ -675,15 +668,15 @@ void sub_81C7B40(void)
BlendPalettes(0xFFFEFFFE, 16, RGB_BLACK);
}
void InitBgTemplates(const struct BgTemplate *templates, s32 count)
void InitBgTemplates(const struct BgTemplate *templates, int count)
{
s32 i;
int i;
for (i = 0; i < count; i++)
InitBgFromTemplate(templates++);
}
void sub_81C7B74(void)
static void sub_81C7B74(void)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@ -694,12 +687,12 @@ void sub_81C7B74(void)
CopyWindowToVram(structPtr->unk10, 3); // TODO: Use a defined constant here.
}
void sub_81C7BA4(u32 a0)
void sub_81C7BA4(u32 helpBarIndex)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
sub_81C7BF8(structPtr->unk10);
AddTextPrinterParameterized3(structPtr->unk10, 1, 0, 1, gMenuButtonReminderColor, 0, sMenuButtonReminders[a0]);
AddTextPrinterParameterized3(structPtr->unk10, 1, 0, 1, gMenuButtonReminderColor, 0, sHelpBarTexts[helpBarIndex]);
}
bool32 IsDma3ManagerBusyWithBgCopy_(void)
@ -707,15 +700,15 @@ bool32 IsDma3ManagerBusyWithBgCopy_(void)
return IsDma3ManagerBusyWithBgCopy();
}
void sub_81C7BF8(u32 windowId)
static void sub_81C7BF8(u32 windowId)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(4));
FillWindowPixelRect(windowId, PIXEL_FILL(5), 0, 0, 0x80, 1);
}
void InitPokenavMainMenuResources(void)
static void InitPokenavMainMenuResources(void)
{
s32 i;
int i;
u8 spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@ -728,7 +721,7 @@ void InitPokenavMainMenuResources(void)
structPtr->spinningPokenav = &gSprites[spriteId];
}
void CleanupPokenavMainMenuResources(void)
static void CleanupPokenavMainMenuResources(void)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
@ -737,7 +730,7 @@ void CleanupPokenavMainMenuResources(void)
FreeSpritePaletteByTag(0);
}
void SpriteCB_SpinningPokenav(struct Sprite *sprite)
static void SpriteCB_SpinningPokenav(struct Sprite *sprite)
{
// If the background starts scrolling, follow it.
sprite->pos2.y = (GetBgY(0) / 256u) * -1;
@ -763,15 +756,15 @@ void ResumeSpinningPokenavSprite(void)
structPtr->spinningPokenav->subpriority = 0;
}
void InitHoennMapHeaderSprites(void)
static void InitHoennMapHeaderSprites(void)
{
s32 i, spriteId;
int i, spriteId;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet);
AllocSpritePalette(1);
AllocSpritePalette(2);
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{
spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1);
structPtr->leftHeaderSprites[i] = &gSprites[spriteId];
@ -805,7 +798,7 @@ void sub_81C7E14(u32 arg0)
structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 64;
}
void LoadLeftHeaderGfxForMenu(u32 index)
static void LoadLeftHeaderGfxForMenu(u32 index)
{
struct PokenavMainMenuResources *structPtr;
u32 size, tag;
@ -827,7 +820,7 @@ void LoadLeftHeaderGfxForMenu(u32 index)
structPtr->leftHeaderSprites[1]->pos2.x = 64;
}
void LoadLeftHeaderGfxForSubMenu(u32 arg0)
static void LoadLeftHeaderGfxForSubMenu(u32 arg0)
{
u32 size, tag;
@ -866,10 +859,10 @@ void sub_81C7FC4(u32 arg0, bool32 arg1)
void sub_81C7FDC(void)
{
s32 i;
int i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{
structPtr->leftHeaderSprites[i]->invisible = TRUE;
structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE;
@ -886,9 +879,9 @@ bool32 sub_81C8010(void)
return TRUE;
}
void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
{
s32 start, end, i;
int start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide)
@ -896,16 +889,16 @@ void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide)
else
start = 256, end = 160;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{
structPtr->leftHeaderSprites[i]->pos1.y = startY;
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12);
}
}
void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
{
s32 start, end, i;
int start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide)
@ -913,16 +906,16 @@ void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide)
else
start = 256, end = 192;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
{
structPtr->submenuLeftHeaderSprites[i]->pos1.y = startY;
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12);
}
}
void HideLeftHeaderSprites(bool32 isOnRightSide)
static void HideLeftHeaderSprites(bool32 isOnRightSide)
{
s32 start, end, i;
int start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide)
@ -930,15 +923,15 @@ void HideLeftHeaderSprites(bool32 isOnRightSide)
else
start = 192, end = 256;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++)
{
MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12);
}
}
void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
{
s32 start, end, i;
int start, end, i;
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
if (!isOnRightSide)
@ -946,13 +939,13 @@ void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide)
else
start = 192, end = 256;
for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++)
{
MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12);
}
}
void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration)
static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration)
{
sprite->pos1.x = startX;
sprite->data[0] = startX * 16;
@ -962,7 +955,7 @@ void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration)
sprite->callback = SpriteCB_MoveLeftHeader;
}
void SpriteCB_MoveLeftHeader(struct Sprite *sprite)
static void SpriteCB_MoveLeftHeader(struct Sprite *sprite)
{
if (sprite->data[2] != 0)
{

466
src/pokenav_unk_1.c Normal file
View File

@ -0,0 +1,466 @@
#include "global.h"
#include "pokenav.h"
#include "event_data.h"
#include "main.h"
#include "sound.h"
#include "constants/songs.h"
struct Pokenav1Struct
{
u16 menuType;
s16 cursorPos;
u16 descriptionId;
u16 helpBarIndex;
u32 unk8;
u32 (*callback)(struct Pokenav1Struct*);
};
static bool32 sub_81C9814(struct Pokenav1Struct *a0);
static void sub_81C97F8(struct Pokenav1Struct *a0);
static void sub_81C97C0(struct Pokenav1Struct *a0);
static u32 sub_81C97BC(struct Pokenav1Struct *a0);
static void sub_81C97B0(struct Pokenav1Struct *a0, u32 a1);
static u32 sub_81C97A4(struct Pokenav1Struct *a0);
static u32 sub_81C9798(struct Pokenav1Struct *a0);
static u32 sub_81C96FC(struct Pokenav1Struct *a0);
static u32 sub_81C963C(struct Pokenav1Struct *a0);
static u32 sub_81C9600(struct Pokenav1Struct *a0);
static u32 sub_81C9588(struct Pokenav1Struct *a0);
static u32 sub_81C9520(struct Pokenav1Struct *a0);
static u32 sub_81C943C(struct Pokenav1Struct *a0);
static u32 (*sub_81C93EC(void))(struct Pokenav1Struct*);
static void sub_81C939C(struct Pokenav1Struct *state);
static const u8 sLastCursorPositions[] = {2, 3, 4, 2, 5};
static const u8 sDescriptionIds[][6] =
{
{ 0, 1, 4, 4, 4, 4 },
{ 0, 1, 2, 4, 4, 4 },
{ 0, 1, 2, 3, 4, 4 },
{ 5, 6, 7, 4, 4, 4 },
{ 8, 9, 10, 11, 12, 13 },
};
static u8 GetPokenavMainMenuType(void)
{
u8 retVal = 0;
if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV))
{
retVal = 1;
if (FlagGet(FLAG_SYS_RIBBON_GET))
retVal = 2;
}
return retVal;
}
bool32 sub_81C9298(void)
{
struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
if (!state)
return FALSE;
state->menuType = GetPokenavMainMenuType();
state->cursorPos = 0;
state->descriptionId = 0;
state->helpBarIndex = 0;
sub_81C939C(state);
return TRUE;
}
bool32 sub_81C92CC(void)
{
struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
if (!state)
return FALSE;
state->menuType = GetPokenavMainMenuType();
state->cursorPos = 2;
state->descriptionId = 2;
state->helpBarIndex = 0;
sub_81C939C(state);
return TRUE;
}
bool32 sub_81C9304(void)
{
struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
if (!state)
return FALSE;
state->menuType = GetPokenavMainMenuType();
state->cursorPos = 3;
state->descriptionId = 3;
sub_81C939C(state);
return TRUE;
}
bool32 sub_81C9338(void)
{
struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
if (!state)
return FALSE;
state->menuType = 3;
state->cursorPos = 0;
state->descriptionId = 5;
state->helpBarIndex = 0;
sub_81C939C(state);
return TRUE;
}
bool32 sub_81C9368(void)
{
struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
if (!state)
return FALSE;
state->menuType = 4;
state->cursorPos = sub_81C76AC();
state->descriptionId = state->cursorPos + 8;
state->helpBarIndex = 0;
sub_81C939C(state);
return TRUE;
}
static void sub_81C939C(struct Pokenav1Struct *state)
{
switch (state->menuType)
{
case 0:
SetPokenavMode(POKENAV_MODE_NORMAL);
// fallthrough
case 1:
case 2:
state->callback = sub_81C93EC();
break;
case 3:
state->callback = sub_81C963C;
break;
case 4:
state->callback = sub_81C96FC;
break;
}
}
static u32 (*sub_81C93EC(void))(struct Pokenav1Struct*)
{
switch (GetPokenavMode())
{
default:
case POKENAV_MODE_NORMAL:
return sub_81C943C;
case POKENAV_MODE_FORCE_CALL_1:
return sub_81C9520;
case POKENAV_MODE_FORCE_CALL_2:
return sub_81C9588;
}
}
u32 sub_81C941C(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->callback(state);
}
void sub_81C9430(void)
{
FreePokenavSubstruct(1);
}
static u32 sub_81C943C(struct Pokenav1Struct *a0)
{
if (sub_81C9814(a0))
return 1;
if (gMain.newKeys & A_BUTTON)
{
switch (sDescriptionIds[a0->menuType][a0->cursorPos])
{
case 0:
a0->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? 2 : 1;
sub_81C97B0(a0, POKENAV_MENU_6);
return 8;
case 1:
a0->menuType = 3;
a0->cursorPos = 0;
a0->descriptionId = sDescriptionIds[3][0];
a0->callback = sub_81C963C;
return 2;
case 2:
a0->helpBarIndex = 6;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
case 3:
if (CanViewRibbonsMenu())
{
a0->helpBarIndex = 9;
sub_81C97B0(a0, POKENAV_MENU_C);
return 8;
}
else
{
a0->callback = sub_81C9600;
return 6;
}
case 4:
return -1;
}
}
if (gMain.newKeys & B_BUTTON)
return -1;
return 0;
}
static u32 sub_81C9520(struct Pokenav1Struct *a0)
{
if (sub_81C9814(a0))
return 1;
if (gMain.newKeys & A_BUTTON)
{
if (sDescriptionIds[a0->menuType][a0->cursorPos] == 2)
{
a0->helpBarIndex = 6;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
}
else
{
PlaySE(SE_HAZURE);
return 0;
}
}
if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_HAZURE);
return 0;
}
return 0;
}
static u32 sub_81C9588(struct Pokenav1Struct *a0)
{
if (sub_81C9814(a0))
return 1;
if (gMain.newKeys & A_BUTTON)
{
u32 v0 = sDescriptionIds[a0->menuType][a0->cursorPos];
if (v0 != 2 && v0 != 4)
{
PlaySE(SE_HAZURE);
return 0;
}
else if (v0 == 2)
{
a0->helpBarIndex = 6;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
}
else
{
return -1;
}
}
else if (gMain.newKeys & B_BUTTON)
{
return -1;
}
return 0;
}
static u32 sub_81C9600(struct Pokenav1Struct *a0)
{
if (sub_81C9814(a0))
{
a0->callback = sub_81C93EC();
return 1;
}
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
a0->callback = sub_81C93EC();
return 7;
}
return 0;
}
static u32 sub_81C963C(struct Pokenav1Struct *a0)
{
u32 v0 = sub_81C9814(a0);
if (v0)
return 1;
if (gMain.newKeys & A_BUTTON)
{
switch (sDescriptionIds[a0->menuType][a0->cursorPos])
{
case 6:
a0->menuType = 4;
a0->cursorPos = v0;
a0->descriptionId = sDescriptionIds[4][0];
a0->callback = sub_81C96FC;
return 4;
case 5:
a0->helpBarIndex = v0;
sub_81C97B0(a0, POKENAV_MENU_7);
return 8;
case 7:
PlaySE(SE_SELECT);
sub_81C97C0(a0);
return 3;
}
}
if (gMain.newKeys & B_BUTTON)
{
if (a0->cursorPos != sLastCursorPositions[a0->menuType])
{
a0->cursorPos = sLastCursorPositions[a0->menuType];
a0->callback = sub_81C9798;
return 1;
}
else
{
PlaySE(SE_SELECT);
sub_81C97C0(a0);
return 3;
}
}
return 0;
}
static u32 sub_81C96FC(struct Pokenav1Struct *a0)
{
if (sub_81C9814(a0))
return 1;
if (gMain.newKeys & A_BUTTON)
{
u8 v0 = sDescriptionIds[a0->menuType][a0->cursorPos];
if (v0 != 13)
{
sub_81C7694(v0 - 8);
sub_81C97B0(a0, POKENAV_MENU_8);
a0->helpBarIndex = 3;
return 8;
}
else
{
PlaySE(SE_SELECT);
sub_81C97F8(a0);
return 5;
}
}
if (gMain.newKeys & B_BUTTON)
{
if (a0->cursorPos != sLastCursorPositions[a0->menuType])
{
a0->cursorPos = sLastCursorPositions[a0->menuType];
a0->callback = sub_81C97A4;
return 1;
}
else
{
PlaySE(SE_SELECT);
sub_81C97F8(a0);
return 5;
}
}
return 0;
}
static u32 sub_81C9798(struct Pokenav1Struct *a0)
{
sub_81C97C0(a0);
return 3;
}
static u32 sub_81C97A4(struct Pokenav1Struct *a0)
{
sub_81C97F8(a0);
return 5;
}
static void sub_81C97B0(struct Pokenav1Struct *a0, u32 a1)
{
a0->unk8 = a1;
a0->callback = sub_81C97BC;
}
static u32 sub_81C97BC(struct Pokenav1Struct *a0)
{
return a0->unk8;
}
static void sub_81C97C0(struct Pokenav1Struct *a0)
{
a0->menuType = GetPokenavMainMenuType();
a0->cursorPos = 1;
a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
a0->callback = sub_81C943C;
}
static void sub_81C97F8(struct Pokenav1Struct *a0)
{
a0->menuType = 3;
a0->cursorPos = 1;
a0->descriptionId = sDescriptionIds[3][1];
a0->callback = sub_81C963C;
}
static bool32 sub_81C9814(struct Pokenav1Struct *a0)
{
if (gMain.newKeys & DPAD_UP)
{
if (--a0->cursorPos < 0)
a0->cursorPos = sLastCursorPositions[a0->menuType];
a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
return TRUE;
}
else if (gMain.newKeys & DPAD_DOWN)
{
a0->cursorPos++;
if (a0->cursorPos > sLastCursorPositions[a0->menuType])
a0->cursorPos = 0;
a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
return TRUE;
}
else
{
return FALSE;
}
}
int sub_81C9894(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->menuType;
}
int sub_81C98A4(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->cursorPos;
}
int sub_81C98B4(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->descriptionId;
}
int sub_81C98C4(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->helpBarIndex;
}