Merge pull request #136 from SethBarberee/june_2023

June 2023
This commit is contained in:
Seth Barberee
2023-07-10 09:32:06 -07:00
committed by GitHub
92 changed files with 3439 additions and 5364 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,112 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_801BB5C
sub_801BB5C:
push {r4-r7,lr}
ldr r4, _0801BBEC
ldr r2, [r4]
adds r1, r2, 0
adds r1, 0xCC
ldr r0, _0801BBF0
str r0, [r1]
adds r1, 0x4
movs r0, 0x6
str r0, [r1]
ldr r0, [r2, 0x24]
bl sub_801ADA0
lsls r0, 24
cmp r0, 0
bne _0801BB86
ldr r0, [r4]
adds r0, 0xD0
movs r1, 0x1
negs r1, r1
str r1, [r0]
_0801BB86:
ldr r0, [r4]
mov r12, r0
movs r3, 0x1
movs r2, 0x8
mov r1, r12
adds r1, 0xD4
ldr r0, _0801BBF4
str r0, [r1]
adds r1, 0x4
movs r0, 0x7
str r0, [r1]
adds r1, 0x4
ldr r0, _0801BBF8
ldr r0, [r0]
str r0, [r1]
mov r0, r12
adds r0, 0xE0
str r2, [r0]
movs r5, 0x3
adds r1, 0x8
movs r0, 0
str r0, [r1]
mov r0, r12
adds r0, 0xE8
str r3, [r0]
movs r3, 0
adds r6, r4, 0
movs r7, 0x1
negs r7, r7
mov r4, r12
adds r4, 0xC8
subs r1, 0x14
_0801BBC6:
ldr r2, [r1]
cmp r2, r7
beq _0801BBD2
ldr r0, [r4]
cmp r2, r0
beq _0801BC1C
_0801BBD2:
adds r1, 0x8
adds r3, 0x1
cmp r3, r5
blt _0801BBC6
movs r3, 0
cmp r3, r5
bge _0801BC1C
ldr r2, [r6]
adds r0, r2, 0
adds r0, 0xD0
ldr r1, [r0]
b _0801BC0E
.align 2, 0
_0801BBEC: .4byte gUnknown_203B234
_0801BBF0: .4byte gKangaskhanStorage
_0801BBF4: .4byte gKangaskhanTrash
_0801BBF8: .4byte gUnknown_80D4970
_0801BBFC:
adds r3, 0x1
cmp r3, r5
bge _0801BC1C
ldr r2, [r6]
lsls r0, r3, 3
adds r1, r2, 0
adds r1, 0xD0
adds r1, r0
ldr r1, [r1]
_0801BC0E:
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _0801BBFC
adds r0, r2, 0
adds r0, 0xC8
str r1, [r0]
_0801BC1C:
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_801BB5C
.align 2,0

View File

@@ -204,354 +204,4 @@ _0801D384:
_0801D3A4: .4byte gUnknown_203B250
thumb_func_end sub_801D220
thumb_func_start sub_801D3A8
sub_801D3A8:
push {r4-r6,lr}
sub sp, 0x8
ldr r1, _0801D3C4
ldr r0, [r1]
ldr r0, [r0, 0x10]
adds r6, r1, 0
cmp r0, 0xC
bls _0801D3BA
b _0801D4B6
_0801D3BA:
lsls r0, 2
ldr r1, _0801D3C8
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0801D3C4: .4byte gUnknown_203B250
_0801D3C8: .4byte _0801D3CC
.align 2, 0
_0801D3CC:
.4byte _0801D400
.4byte _0801D400
.4byte _0801D4B6
.4byte _0801D458
.4byte _0801D462
.4byte _0801D468
.4byte _0801D472
.4byte _0801D47A
.4byte _0801D482
.4byte _0801D490
.4byte _0801D49C
.4byte _0801D4AA
.4byte _0801D4B2
_0801D400:
ldr r0, [r6]
ldr r5, [r0]
cmp r5, 0
beq _0801D438
ldr r4, _0801D434
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x7
bl PrintColoredPokeNameToBuffer
ldr r2, [r6]
str r4, [r2, 0x18]
adds r0, r2, 0
adds r0, 0x18
adds r1, r2, 0
adds r1, 0x68
adds r3, r2, 0
adds r3, 0xA8
ldr r2, [r2, 0x14]
str r2, [sp]
movs r2, 0
str r2, [sp, 0x4]
bl sub_8012D60
b _0801D4B6
.align 2, 0
_0801D434: .4byte gAvailablePokemonNames
_0801D438:
bl sub_801D894
ldr r2, [r6]
adds r0, r2, 0
adds r0, 0x18
adds r1, r2, 0
adds r1, 0x68
adds r3, r2, 0
adds r3, 0xA8
ldr r2, [r2, 0x14]
str r2, [sp]
str r5, [sp, 0x4]
movs r2, 0
bl sub_8012D60
b _0801D4B6
_0801D458:
ldr r0, [r6]
ldr r0, [r0]
bl sub_80227B8
b _0801D4B6
_0801D462:
bl sub_8027074
b _0801D4B6
_0801D468:
ldr r0, [r6]
ldr r0, [r0]
bl sub_8025EF4
b _0801D4B6
_0801D472:
movs r0, 0
bl sub_80252F0
b _0801D4B6
_0801D47A:
movs r0, 0x1
bl sub_80252F0
b _0801D4B6
_0801D482:
ldr r0, [r6]
movs r1, 0x4
ldrsh r0, [r0, r1]
movs r1, 0x2
bl sub_8024458
b _0801D4B6
_0801D490:
ldr r0, [r6]
movs r1, 0x4
ldrsh r0, [r0, r1]
bl sub_801BEEC
b _0801D4B6
_0801D49C:
ldr r0, [r6]
ldrb r0, [r0, 0x6]
movs r1, 0x1
movs r2, 0x2
bl sub_8021774
b _0801D4B6
_0801D4AA:
movs r0, 0
bl InitializeJobListMenu
b _0801D4B6
_0801D4B2:
bl sub_801DCC4
_0801D4B6:
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_801D3A8
thumb_func_start sub_801D4C0
sub_801D4C0:
push {r4-r7,lr}
movs r6, 0
ldr r4, _0801D554
ldr r0, [r4]
adds r0, 0xA8
movs r1, 0
movs r2, 0x10
bl MemoryFill16
ldr r0, [r4]
ldrb r0, [r0, 0x6]
cmp r0, 0
bne _0801D568
bl sub_8096E2C
lsls r0, 24
cmp r0, 0
beq _0801D534
ldr r1, [r4]
movs r0, 0x2
str r0, [r1, 0x6C]
ldr r0, _0801D558
str r0, [r1, 0x68]
bl GetNumberOfFilledInventorySlots
cmp r0, 0
bne _0801D4FE
ldr r0, [r4]
adds r0, 0xA8
movs r1, 0x1
strh r1, [r0]
_0801D4FE:
ldr r1, [r4]
ldr r0, _0801D55C
str r0, [r1, 0x70]
movs r0, 0x4
str r0, [r1, 0x74]
movs r6, 0x2
movs r0, 0x2
bl sub_80023E4
lsls r0, 24
cmp r0, 0
beq _0801D534
ldr r1, [r4]
ldr r0, _0801D560
str r0, [r1, 0x78]
movs r0, 0x9
str r0, [r1, 0x7C]
bl HasNoAcceptedJobs
lsls r0, 24
cmp r0, 0
beq _0801D532
ldr r0, [r4]
adds r0, 0xAC
movs r1, 0x1
strh r1, [r0]
_0801D532:
movs r6, 0x3
_0801D534:
ldr r4, _0801D554
ldr r2, [r4]
lsls r3, r6, 3
adds r0, r2, 0
adds r0, 0x68
adds r0, r3
ldr r1, _0801D564
str r1, [r0]
adds r2, 0x6C
adds r2, r3
movs r0, 0xB
str r0, [r2]
adds r6, 0x1
adds r7, r4, 0
b _0801D5E6
.align 2, 0
_0801D554: .4byte gUnknown_203B250
_0801D558: .4byte gMenuItems
_0801D55C: .4byte gMenuTeam
_0801D560: .4byte gMenuJobList
_0801D564: .4byte gMenuOthers
_0801D568:
ldr r0, _0801D63C
ldr r1, _0801D640
bl strcpy
bl sub_8096E2C
lsls r0, 24
cmp r0, 0
beq _0801D5B6
ldr r1, [r4]
ldr r0, _0801D644
ldr r0, [r0]
str r0, [r1, 0x68]
movs r0, 0x5
str r0, [r1, 0x6C]
movs r0, 0x4
bl sub_8024108
lsls r0, 24
cmp r0, 0
beq _0801D59A
ldr r0, [r4]
adds r0, 0xA8
movs r1, 0x1
strh r1, [r0]
_0801D59A:
movs r6, 0x1
ldr r1, [r4]
movs r0, 0x2
str r0, [r1, 0x74]
ldr r0, _0801D648
str r0, [r1, 0x70]
bl GetNumberOfFilledInventorySlots
cmp r0, 0
bne _0801D5B4
ldr r0, [r4]
adds r0, 0xAA
strh r6, [r0]
_0801D5B4:
movs r6, 0x2
_0801D5B6:
ldr r5, _0801D64C
ldr r1, [r5]
lsls r2, r6, 3
adds r3, r1, 0
adds r3, 0x68
adds r4, r3, r2
ldr r0, _0801D650
ldr r0, [r0]
str r0, [r4]
adds r1, 0x6C
adds r2, r1, r2
movs r0, 0x8
str r0, [r2]
adds r6, 0x1
lsls r2, r6, 3
adds r3, r2
ldr r0, _0801D654
ldr r0, [r0]
str r0, [r3]
adds r1, r2
movs r0, 0xA
str r0, [r1]
adds r6, 0x1
adds r7, r5, 0
_0801D5E6:
ldr r4, [r7]
lsls r2, r6, 3
adds r0, r4, 0
adds r0, 0x68
adds r0, r2
movs r1, 0
str r1, [r0]
adds r1, r4, 0
adds r1, 0x6C
adds r2, r1, r2
movs r0, 0x1
str r0, [r2]
movs r3, 0
cmp r3, r6
bge _0801D622
adds r5, r4, 0
adds r4, 0xA8
adds r2, r1, 0
_0801D60A:
ldrh r0, [r4]
cmp r0, 0
bne _0801D618
ldr r1, [r2]
ldr r0, [r5, 0x14]
cmp r1, r0
beq _0801D67A
_0801D618:
adds r4, 0x2
adds r2, 0x8
adds r3, 0x1
cmp r3, r6
blt _0801D60A
_0801D622:
movs r3, 0
cmp r3, r6
bge _0801D67A
ldr r1, [r7]
adds r0, r1, 0
adds r0, 0xA8
ldrh r0, [r0]
cmp r0, 0
bne _0801D658
ldr r0, [r1, 0x6C]
str r0, [r1, 0x14]
b _0801D67A
.align 2, 0
_0801D63C: .4byte gAvailablePokemonNames
_0801D640: .4byte gUnknown_80DBF34
_0801D644: .4byte gUnknown_80D49A8
_0801D648: .4byte gMenuItems
_0801D64C: .4byte gUnknown_203B250
_0801D650: .4byte gUnknown_80D4970
_0801D654: .4byte gUnknown_80D49B4
_0801D658:
adds r3, 0x1
cmp r3, r6
bge _0801D67A
ldr r2, [r7]
lsls r0, r3, 1
adds r1, r2, 0
adds r1, 0xA8
adds r1, r0
ldrh r0, [r1]
cmp r0, 0
bne _0801D658
lsls r0, r3, 3
adds r1, r2, 0
adds r1, 0x6C
adds r1, r0
ldr r0, [r1]
str r0, [r2, 0x14]
_0801D67A:
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_801D4C0
.align 2,0

View File

@@ -605,34 +605,4 @@ _0801F3F0: .4byte gUnknown_203B270
_0801F3F4: .4byte gUnknown_80DC2A0
thumb_func_end sub_801F280
thumb_func_start sub_801F3F8
sub_801F3F8:
push {r4,r5,lr}
movs r4, 0
ldr r0, _0801F424
ldr r0, [r0]
movs r5, 0x1
ldr r2, [r0, 0x10]
movs r3, 0x7
_0801F406:
ldrb r1, [r2]
adds r0, r5, 0
ands r0, r1
cmp r0, 0
beq _0801F412
adds r4, 0x1
_0801F412:
adds r2, 0x8
subs r3, 0x1
cmp r3, 0
bge _0801F406
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0801F424: .4byte gUnknown_203B270
thumb_func_end sub_801F3F8
.align 2,0

View File

@@ -5,405 +5,6 @@
.text
thumb_func_start sub_8023420
sub_8023420:
push {r4,r5,lr}
ldr r4, _080234A8
ldr r0, [r4]
movs r1, 0xFE
lsls r1, 2
adds r0, r1
movs r2, 0
movs r1, 0x1
strb r1, [r0]
ldr r0, [r4]
ldr r1, _080234AC
adds r0, r1
strb r2, [r0]
ldr r0, [r4]
adds r1, 0x1
adds r0, r1
movs r1, 0xC
strb r1, [r0]
ldr r0, [r4]
ldr r1, _080234B0
adds r0, r1
strb r2, [r0]
ldr r0, [r4]
ldr r2, _080234B4
adds r0, r2
movs r1, 0
ldrsh r0, [r0, r1]
movs r1, 0xC
bl sub_80095E4
adds r0, 0x2
ldr r3, [r4]
movs r2, 0xE4
lsls r2, 2
adds r5, r3, r2
ldr r2, [r5]
lsls r1, r2, 1
adds r1, r2
lsls r1, 3
adds r1, r3, r1
ldr r2, _080234B8
adds r1, r2
lsls r0, 16
lsrs r0, 16
strh r0, [r1]
ldr r2, [r5]
lsls r1, r2, 1
adds r1, r2
lsls r1, 3
adds r3, r1
movs r1, 0xEA
lsls r1, 2
adds r3, r1
strh r0, [r3]
bl ResetUnusedInputStruct
ldr r0, [r4]
movs r2, 0xE6
lsls r2, 2
adds r0, r2
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080234A8: .4byte gUnknown_3001B5C
_080234AC: .4byte 0x000003f9
_080234B0: .4byte 0x000003fb
_080234B4: .4byte 0x00000376
_080234B8: .4byte 0x000003a6
thumb_func_end sub_8023420
thumb_func_start sub_80234BC
sub_80234BC:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x178
ldr r5, _0802368C
ldr r0, [r5]
movs r4, 0xE4
lsls r4, 2
adds r0, r4
ldr r0, [r0]
bl sub_8008C54
ldr r0, [r5]
adds r0, r4
ldr r0, [r0]
bl sub_80073B8
ldr r2, _08023690
ldr r0, [r5]
adds r0, r4
ldr r3, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0xA
movs r1, 0
bl xxx_call_draw_string
ldr r3, [r5]
ldr r1, _08023694
adds r0, r3, r1
ldrb r0, [r0]
lsls r0, 3
adds r0, 0x4
ldr r2, _08023698
adds r1, r3, r2
movs r6, 0
ldrsh r2, [r1, r6]
adds r2, 0x1
movs r1, 0x7
str r1, [sp]
adds r3, r4
ldr r1, [r3]
str r1, [sp, 0x4]
movs r1, 0
movs r3, 0x2
bl sub_8012BC4
movs r0, 0
mov r10, r0
ldr r0, [r5]
ldr r1, _0802369C
adds r0, r1
movs r2, 0
ldrsh r0, [r0, r2]
cmp r10, r0
blt _08023532
b _0802366C
_08023532:
ldr r3, _0802368C
ldr r0, [r3]
movs r6, 0xD7
lsls r6, 2
adds r0, r6
mov r1, r10
bl sub_8013800
mov r8, r0
ldr r0, _0802368C
ldr r1, [r0]
ldr r2, _08023698
adds r0, r1, r2
movs r3, 0
ldrsh r2, [r0, r3]
adds r6, 0x1C
adds r0, r1, r6
movs r3, 0
ldrsh r0, [r0, r3]
muls r0, r2
add r0, r10
lsls r0, 1
adds r1, 0xC
adds r1, r0
movs r6, 0
ldrsh r5, [r1, r6]
adds r0, r5, 0
bl GetFriendArea
lsls r0, 24
lsrs r0, 24
add r4, sp, 0x16C
adds r1, r4, 0
movs r2, 0
movs r3, 0
bl sub_8092638
movs r7, 0x7
ldrb r0, [r4, 0x4]
cmp r0, 0
beq _08023594
adds r0, r5, 0
bl HasRecruitedMon
lsls r0, 24
movs r7, 0x4
cmp r0, 0
beq _08023594
movs r7, 0x5
_08023594:
adds r0, r5, 0
movs r1, 0
bl GetDexInternalNo
lsls r0, 16
asrs r4, r0, 16
adds r0, r4, 0
movs r1, 0xA
bl __modsi3
adds r2, r0, 0
adds r2, 0x30
lsls r2, 24
lsrs r2, 24
ldr r6, _0802368C
ldr r0, [r6]
movs r1, 0xE4
lsls r1, 2
mov r9, r1
add r0, r9
ldr r0, [r0]
str r0, [sp]
movs r0, 0x14
mov r1, r8
adds r3, r7, 0
bl sub_8012C60
cmp r4, 0x9
ble _08023628
adds r0, r4, 0
movs r1, 0xA
bl __divsi3
adds r4, r0, 0
movs r1, 0xA
bl __modsi3
adds r2, r0, 0
adds r2, 0x30
lsls r2, 24
lsrs r2, 24
ldr r0, [r6]
movs r3, 0xE4
lsls r3, 2
adds r0, r3
ldr r0, [r0]
str r0, [sp]
movs r0, 0xD
mov r1, r8
adds r3, r7, 0
bl sub_8012C60
cmp r4, 0x9
ble _08023628
adds r0, r4, 0
movs r1, 0xA
bl __divsi3
movs r1, 0xA
bl __modsi3
adds r2, r0, 0
adds r2, 0x30
lsls r2, 24
lsrs r2, 24
ldr r0, [r6]
add r0, r9
ldr r0, [r0]
str r0, [sp]
movs r0, 0x6
mov r1, r8
adds r3, r7, 0
bl sub_8012C60
_08023628:
add r4, sp, 0x108
adds r0, r4, 0
adds r1, r5, 0
bl sub_808D930
add r0, sp, 0x8
ldr r1, _080236A0
adds r2, r7, 0
adds r3, r4, 0
bl sprintfStatic
ldr r6, _0802368C
ldr r0, [r6]
movs r1, 0xE4
lsls r1, 2
adds r0, r1
ldr r3, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x24
mov r1, r8
add r2, sp, 0x8
bl xxx_call_draw_string
movs r2, 0x1
add r10, r2
ldr r0, [r6]
ldr r3, _0802369C
adds r0, r3
movs r6, 0
ldrsh r0, [r0, r6]
cmp r10, r0
bge _0802366C
b _08023532
_0802366C:
ldr r0, _0802368C
ldr r0, [r0]
movs r1, 0xE4
lsls r1, 2
adds r0, r1
ldr r0, [r0]
bl sub_80073E0
add sp, 0x178
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0802368C: .4byte gUnknown_3001B5C
_08023690: .4byte gUnknown_80DC934
_08023694: .4byte 0x000003fa
_08023698: .4byte 0x0000037a
_0802369C: .4byte 0x00000376
_080236A0: .4byte gUnknown_80DC93C
thumb_func_end sub_80234BC
thumb_func_start sub_80236A4
sub_80236A4:
push {r4,r5,lr}
ldr r0, _080236FC
ldr r1, [r0]
movs r0, 0
str r0, [r1, 0x8]
movs r5, 0
_080236B0:
lsls r0, r5, 16
asrs r4, r0, 16
adds r0, r4, 0
bl sub_8098134
lsls r0, 24
cmp r0, 0
beq _080236E2
adds r0, r4, 0
bl GetBaseSpeciesNoUnown
lsls r0, 16
asrs r0, 16
cmp r4, r0
bne _080236E2
ldr r0, _080236FC
ldr r3, [r0]
ldr r1, [r3, 0x8]
lsls r2, r1, 1
adds r0, r3, 0
adds r0, 0xC
adds r0, r2
strh r5, [r0]
adds r1, 0x1
str r1, [r3, 0x8]
_080236E2:
adds r5, 0x1
ldr r0, _08023700
cmp r5, r0
ble _080236B0
bl sub_8023730
ldr r0, _080236FC
ldr r0, [r0]
ldr r0, [r0, 0x8]
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_080236FC: .4byte gUnknown_3001B5C
_08023700: .4byte 0x000001a7
thumb_func_end sub_80236A4
thumb_func_start sub_8023704
sub_8023704:
push {r4,lr}
movs r4, 0
_08023708:
lsls r0, r4, 16
asrs r0, 16
bl sub_8098134
lsls r0, 24
cmp r0, 0
beq _0802371A
movs r0, 0
b _08023724
_0802371A:
adds r4, 0x1
ldr r0, _0802372C
cmp r4, r0
ble _08023708
movs r0, 0x1
_08023724:
pop {r4}
pop {r1}
bx r1
.align 2, 0
_0802372C: .4byte 0x000001a7
thumb_func_end sub_8023704
thumb_func_start sub_8023730
sub_8023730:
push {lr}
ldr r0, _08023744
ldr r0, [r0]
ldr r0, [r0, 0x4]
cmp r0, 0x1
beq _08023748
cmp r0, 0x2
beq _0802374E
b _08023752
.align 2, 0
_08023744: .4byte gUnknown_3001B5C
_08023748:
bl sub_8023758
b _08023752
_0802374E:
bl sub_80237E0
_08023752:
pop {r0}
bx r0
thumb_func_end sub_8023730
thumb_func_start sub_8023758
sub_8023758:
push {r4-r7,lr}

View File

@@ -1,266 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8031D70
sub_8031D70:
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
ldr r5, _08031DC4
movs r0, 0x7C
movs r1, 0x8
bl MemoryAlloc
str r0, [r5]
stm r0!, {r6}
bl sub_801317C
ldr r0, [r5]
str r4, [r0, 0x10]
lsls r1, r4, 1
adds r1, r4
lsls r1, 3
adds r1, 0x18
adds r1, r0, r1
str r1, [r0, 0x14]
adds r0, 0x18
bl sub_8006518
ldr r1, [r5]
ldr r2, [r1, 0x10]
lsls r0, r2, 1
adds r0, r2
lsls r0, 3
adds r1, r0
adds r1, 0x18
ldr r0, _08031DC8
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
bl sub_8031E00
movs r0, 0x1
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08031DC4: .4byte gUnknown_203B334
_08031DC8: .4byte gUnknown_80E1FC4
thumb_func_end sub_8031D70
thumb_func_start sub_8031DCC
sub_8031DCC:
push {lr}
ldr r0, _08031DEC
ldr r1, [r0]
adds r0, r1, 0x4
ldr r1, [r1, 0x10]
bl sub_8012A64
cmp r0, 0x1
beq _08031DF0
cmp r0, 0x2
bne _08031DFA
movs r0, 0x1
bl PlayMenuSoundEffect
movs r0, 0x2
b _08031DFC
.align 2, 0
_08031DEC: .4byte gUnknown_203B334
_08031DF0:
movs r0, 0
bl PlayMenuSoundEffect
movs r0, 0x3
b _08031DFC
_08031DFA:
movs r0, 0
_08031DFC:
pop {r1}
bx r1
thumb_func_end sub_8031DCC
thumb_func_start sub_8031E00
sub_8031E00:
push {lr}
bl sub_8031E58
bl sub_8031E74
pop {r0}
bx r0
thumb_func_end sub_8031E00
thumb_func_start sub_8031E10
sub_8031E10:
push {r4,r5,lr}
ldr r4, _08031E50
ldr r2, [r4]
cmp r2, 0
beq _08031E4A
ldr r0, [r2, 0x10]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, r2, r1
adds r1, 0x18
ldr r0, _08031E54
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x18
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
_08031E4A:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08031E50: .4byte gUnknown_203B334
_08031E54: .4byte gUnknown_80E1FA8
thumb_func_end sub_8031E10
thumb_func_start sub_8031E58
sub_8031E58:
push {lr}
bl ResetUnusedInputStruct
ldr r0, _08031E70
ldr r0, [r0]
adds r0, 0x18
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
pop {r0}
bx r0
.align 2, 0
_08031E70: .4byte gUnknown_203B334
thumb_func_end sub_8031E58
thumb_func_start sub_8031E74
sub_8031E74:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x3C
ldr r3, _08031EC0
ldr r5, _08031EC4
ldr r2, [r5]
ldr r1, [r2]
lsls r0, r1, 1
adds r0, r1
lsls r0, 4
ldr r4, [r3]
adds r4, r0
ldr r0, [r2, 0x10]
bl sub_80073B8
ldr r2, _08031EC8
ldr r0, [r5]
ldr r3, [r0, 0x10]
movs r0, 0
str r0, [sp]
movs r0, 0x14
movs r1, 0
bl xxx_call_draw_string
add r0, sp, 0x4
adds r1, r4, 0
bl sub_803D2C0
movs r7, 0
mov r8, r5
_08031EB2:
cmp r7, 0x4
ble _08031ED0
cmp r7, 0xC
bgt _08031ECC
movs r6, 0x6
movs r5, 0x16
b _08031F00
.align 2, 0
_08031EC0: .4byte gUnknown_203B480
_08031EC4: .4byte gUnknown_203B334
_08031EC8: .4byte gUnknown_80E1FDC
_08031ECC:
cmp r7, 0x11
bgt _08031ED6
_08031ED0:
movs r6, 0x7
movs r5, 0x15
b _08031F00
_08031ED6:
cmp r7, 0x16
ble _08031EE8
cmp r7, 0x1E
bgt _08031EE4
movs r6, 0x6
movs r5, 0x25
b _08031F00
_08031EE4:
cmp r7, 0x23
bgt _08031EEE
_08031EE8:
movs r6, 0x7
movs r5, 0x24
b _08031F00
_08031EEE:
cmp r7, 0x28
ble _08031EFC
cmp r7, 0x30
bgt _08031EFC
movs r6, 0x6
movs r5, 0x34
b _08031F00
_08031EFC:
movs r6, 0x7
movs r5, 0x33
_08031F00:
adds r0, r7, 0
movs r1, 0x12
bl __modsi3
movs r1, 0xB
adds r4, r0, 0
muls r4, r1
adds r4, 0x6
mov r0, sp
adds r0, r7
adds r0, 0x4
ldrb r2, [r0]
mov r1, r8
ldr r0, [r1]
ldr r0, [r0, 0x10]
str r0, [sp]
adds r0, r4, 0
adds r1, r5, 0
adds r3, r6, 0
bl sub_8012C60
mov r1, r8
ldr r0, [r1]
ldr r0, [r0, 0x10]
adds r2, r5, 0
adds r2, 0xA
movs r1, 0x5
str r1, [sp]
adds r1, r4, 0
movs r3, 0xA
bl sub_80078A4
adds r7, 0x1
cmp r7, 0x35
ble _08031EB2
ldr r0, _08031F5C
ldr r0, [r0]
ldr r0, [r0, 0x10]
bl sub_80073E0
add sp, 0x3C
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08031F5C: .4byte gUnknown_203B334
thumb_func_end sub_8031E74
.align 2,0

View File

@@ -1311,7 +1311,7 @@ _08040B4C:
bx r0
.align 2, 0
_08040B58: .4byte 0x0000e0b8
_08040B5C: .4byte gUnknown_202B03A
_08040B5C: .4byte gUnknown_202B038 + 2
thumb_func_end sub_8040ABC
thumb_func_start sub_8040B60

View File

@@ -1937,346 +1937,4 @@ _0804AA46:
_0804AA5C: .4byte 0x00013554
thumb_func_end sub_804A728
thumb_func_start sub_804AA60
sub_804AA60:
push {r4,lr}
movs r1, 0
ldr r0, _0804AAA0
movs r3, 0
movs r2, 0x80
lsls r2, 5
adds r4, r0, r2
_0804AA6E:
lsls r0, r1, 6
adds r2, r1, 0x1
movs r1, 0x1F
adds r0, r4
adds r0, 0x3E
_0804AA78:
strh r3, [r0]
subs r0, 0x2
subs r1, 0x1
cmp r1, 0
bge _0804AA78
adds r1, r2, 0
cmp r1, 0x1F
ble _0804AA6E
movs r4, 0
movs r0, 0x2
bl sub_80098F8
ldr r0, _0804AAA4
ldr r0, [r0]
ldr r1, _0804AAA8
adds r0, r1
strb r4, [r0]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0804AAA0: .4byte gUnknown_202B038
_0804AAA4: .4byte gDungeon
_0804AAA8: .4byte 0x0001821a
thumb_func_end sub_804AA60
thumb_func_start sub_804AAAC
sub_804AAAC:
push {r4-r7,lr}
movs r5, 0
movs r7, 0
_0804AAB2:
movs r4, 0
adds r6, r5, 0x1
_0804AAB6:
adds r0, r4, 0
adds r1, r5, 0
bl GetTileSafe
strh r7, [r0, 0x4]
adds r4, 0x1
cmp r4, 0x37
ble _0804AAB6
adds r5, r6, 0
cmp r5, 0x1F
ble _0804AAB2
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_804AAAC
thumb_func_start sub_804AAD4
sub_804AAD4:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
ldr r4, _0804AC04
movs r0, 0
mov r8, r0
ldr r6, _0804AC08
ldr r5, _0804AC0C
movs r2, 0
movs r3, 0x1F
_0804AAEA:
ldr r0, [r4]
adds r0, r2
ldr r1, _0804AC10
adds r0, r1
mov r7, r8
strb r7, [r0]
ldr r0, [r4]
adds r0, r2
adds r1, 0x1
adds r0, r1
strb r7, [r0]
ldr r0, [r4]
adds r0, r2
ldr r7, _0804AC14
adds r1, r0, r7
strh r6, [r1]
adds r7, 0x2
adds r1, r0, r7
strh r6, [r1]
adds r7, 0x2
adds r1, r0, r7
strh r5, [r1]
ldr r1, _0804AC18
adds r0, r1
strh r5, [r0]
adds r2, 0x1C
subs r3, 0x1
cmp r3, 0
bge _0804AAEA
movs r4, 0
mov r9, r4
movs r6, 0
ldr r7, _0804AC04
mov r8, r7
_0804AB2E:
movs r4, 0
adds r5, r6, 0x1
_0804AB32:
adds r0, r4, 0
adds r1, r6, 0
bl GetTile
ldrb r2, [r0, 0x9]
adds r3, r4, 0x1
cmp r2, 0xFF
beq _0804AB84
lsls r0, r2, 3
subs r0, r2
lsls r0, 2
ldr r1, _0804AC10
adds r0, r1
mov r7, r8
ldr r1, [r7]
adds r1, r0
movs r0, 0x1
strb r0, [r1]
movs r7, 0x2
ldrsh r0, [r1, r7]
cmp r0, r4
ble _0804AB60
strh r4, [r1, 0x2]
_0804AB60:
movs r4, 0x4
ldrsh r0, [r1, r4]
cmp r0, r6
ble _0804AB6A
strh r6, [r1, 0x4]
_0804AB6A:
movs r7, 0x6
ldrsh r0, [r1, r7]
cmp r0, r3
bge _0804AB74
strh r3, [r1, 0x6]
_0804AB74:
movs r4, 0x8
ldrsh r0, [r1, r4]
cmp r0, r5
bge _0804AB7E
strh r5, [r1, 0x8]
_0804AB7E:
cmp r9, r2
bge _0804AB84
mov r9, r2
_0804AB84:
adds r4, r3, 0
cmp r4, 0x37
ble _0804AB32
adds r6, r5, 0
cmp r6, 0x1F
ble _0804AB2E
ldr r7, _0804AC04
mov r8, r7
mov r5, r9
adds r5, 0x1
mov r6, r8
movs r4, 0
movs r3, 0x1F
_0804AB9E:
ldr r1, _0804AC10
adds r0, r4, r1
ldr r1, [r6]
adds r2, r1, r0
ldrb r0, [r2]
cmp r0, 0
beq _0804ABE4
movs r7, 0x2
ldrsh r1, [r2, r7]
subs r1, 0x1
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
str r0, [r2, 0xC]
movs r0, 0x4
ldrsh r1, [r2, r0]
subs r1, 0x1
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
str r0, [r2, 0x10]
movs r7, 0x6
ldrsh r1, [r2, r7]
adds r1, 0x1
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
str r0, [r2, 0x14]
movs r0, 0x8
ldrsh r1, [r2, r0]
adds r1, 0x1
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
str r0, [r2, 0x18]
_0804ABE4:
adds r4, 0x1C
subs r3, 0x1
cmp r3, 0
bge _0804AB9E
mov r1, r8
ldr r0, [r1]
ldr r4, _0804AC1C
adds r0, r4
strb r5, [r0]
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804AC04: .4byte gDungeon
_0804AC08: .4byte 0x0000270f
_0804AC0C: .4byte 0x0000d8f1
_0804AC10: .4byte 0x000104c4
_0804AC14: .4byte 0x000104c6
_0804AC18: .4byte 0x000104cc
_0804AC1C: .4byte 0x000104c0
thumb_func_end sub_804AAD4
thumb_func_start sub_804AC20
sub_804AC20:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r4, r0, 0
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl GetTile
ldrb r1, [r0, 0x9]
ldr r0, _0804AC6C
ldr r3, [r0]
ldr r5, _0804AC70
adds r0, r3, r5
ldrb r2, [r0]
adds r5, 0x1
adds r0, r3, r5
ldrb r0, [r0]
cmp r0, 0
bne _0804ACD4
cmp r2, 0
bne _0804AC52
movs r2, 0x2
_0804AC52:
cmp r1, 0xFF
bne _0804AC74
movs r0, 0
ldrsh r1, [r4, r0]
subs r3, r1, r2
mov r9, r3
movs r5, 0x2
ldrsh r0, [r4, r5]
subs r3, r0, r2
adds r6, r1, r2
adds r0, r2
mov r8, r0
b _0804ACA2
.align 2, 0
_0804AC6C: .4byte gDungeon
_0804AC70: .4byte 0x00018209
_0804AC74:
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
ldr r1, _0804ACE0
adds r0, r1
adds r2, r3, r0
ldrb r0, [r2, 0x1]
cmp r0, 0
bne _0804ACD4
movs r0, 0x1
strb r0, [r2, 0x1]
movs r3, 0x2
ldrsh r0, [r2, r3]
subs r0, 0x1
mov r9, r0
movs r5, 0x4
ldrsh r0, [r2, r5]
subs r3, r0, 0x1
movs r0, 0x6
ldrsh r6, [r2, r0]
movs r5, 0x8
ldrsh r1, [r2, r5]
mov r8, r1
_0804ACA2:
adds r5, r3, 0
cmp r5, r8
bgt _0804ACD4
_0804ACA8:
mov r4, r9
adds r7, r5, 0x1
cmp r4, r6
bgt _0804ACCE
_0804ACB0:
adds r0, r4, 0
adds r1, r5, 0
bl GetTileSafe
ldrh r2, [r0, 0x4]
movs r1, 0x3
orrs r1, r2
strh r1, [r0, 0x4]
adds r0, r4, 0
adds r1, r5, 0
bl sub_80402AC
adds r4, 0x1
cmp r4, r6
ble _0804ACB0
_0804ACCE:
adds r5, r7, 0
cmp r5, r8
ble _0804ACA8
_0804ACD4:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804ACE0: .4byte 0x000104c4
thumb_func_end sub_804AC20
.align 2, 0

View File

@@ -5347,200 +5347,4 @@ _0806CC08: .4byte 0x000001ff
_0806CC0C: .4byte 0x00000fff
thumb_func_end sub_806C51C
thumb_func_start sub_806CC10
sub_806CC10:
push {r4,r5,lr}
movs r5, 0
_0806CC14:
ldr r0, _0806CC68
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _0806CC6C
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0806CC5C
ldr r2, [r4, 0x70]
movs r1, 0xB3
lsls r1, 1
adds r0, r2, r1
ldrb r1, [r0]
cmp r1, 0
beq _0806CC5C
subs r1, 0x1
strb r1, [r0]
movs r0, 0x1
ands r1, r0
cmp r1, 0
bne _0806CC5C
adds r0, r2, 0
adds r0, 0x46
ldrb r2, [r0]
subs r2, 0x1
movs r0, 0x7
ands r2, r0
adds r0, r4, 0
movs r1, 0
bl sub_806CDD4
_0806CC5C:
adds r5, 0x1
cmp r5, 0x13
ble _0806CC14
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0806CC68: .4byte gDungeon
_0806CC6C: .4byte 0x000135cc
thumb_func_end sub_806CC10
thumb_func_start sub_806CC70
sub_806CC70:
push {r4,r5,lr}
movs r5, 0
_0806CC74:
ldr r0, _0806CCAC
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _0806CCB0
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0806CCA0
adds r0, r4, 0
bl sub_806CEBC
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
bl sub_806CCB4
_0806CCA0:
adds r5, 0x1
cmp r5, 0x13
ble _0806CC74
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0806CCAC: .4byte gDungeon
_0806CCB0: .4byte 0x000135cc
thumb_func_end sub_806CC70
thumb_func_start sub_806CCB4
sub_806CCB4:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0xC
adds r5, r0, 0
lsls r1, 24
lsrs r4, r1, 24
ldr r7, [r5, 0x70]
ldr r0, _0806CD40
ldr r0, [r0]
ldr r2, _0806CD44
adds r1, r0, r2
ldrb r6, [r1]
ldr r3, _0806CD48
adds r0, r3
ldr r0, [r0]
cmp r5, r0
bne _0806CCDC
movs r6, 0
_0806CCDC:
adds r0, r5, 0
adds r0, 0x6B
movs r3, 0
strb r4, [r0]
adds r2, r5, 0
adds r2, 0x6A
strb r4, [r2]
adds r4, r7, 0
adds r4, 0x46
ldrb r0, [r4]
adds r1, r5, 0
adds r1, 0x6D
strb r0, [r1]
ldrb r0, [r4]
subs r1, 0x1
strb r0, [r1]
adds r0, r5, 0
adds r0, 0x6F
strb r3, [r0]
subs r0, 0x7
movs r3, 0
ldrsh r4, [r0, r3]
mov r9, r4
adds r0, r7, 0
adds r0, 0xC8
ldrb r0, [r0]
adds r7, r2, 0
mov r8, r1
cmp r0, 0x2
beq _0806CD4C
cmp r6, 0
bne _0806CD4C
bl Rand32Bit
movs r4, 0x3
ands r4, r0
adds r0, r5, 0
adds r0, 0x28
ldr r1, [r5, 0x64]
ldrb r2, [r7]
mov r7, r8
ldrb r3, [r7]
mov r7, r9
str r7, [sp]
str r4, [sp, 0x4]
str r6, [sp, 0x8]
bl sub_80053AC
b _0806CD76
.align 2, 0
_0806CD40: .4byte gDungeon
_0806CD44: .4byte 0x00018210
_0806CD48: .4byte 0x000181f8
_0806CD4C:
ldr r0, _0806CD8C
bl sub_80687D0
adds r4, r0, 0
bl Rand32Bit
movs r1, 0x3
ands r1, r0
adds r0, r5, 0
adds r0, 0x28
ldrb r2, [r7]
mov r6, r8
ldrb r3, [r6]
mov r7, r9
str r7, [sp]
str r1, [sp, 0x4]
movs r1, 0
str r1, [sp, 0x8]
adds r1, r4, 0
bl sub_80053AC
_0806CD76:
adds r1, r5, 0
adds r1, 0x6E
movs r0, 0
strb r0, [r1]
add sp, 0xC
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0806CD8C: .4byte 0x000001a5
thumb_func_end sub_806CCB4
.align 2,0

View File

@@ -269,201 +269,4 @@ _0808546E:
_0808547C: .4byte gUnknown_80F4598
thumb_func_end sub_8085374
thumb_func_start xxx_call_GetLeader
xxx_call_GetLeader:
push {lr}
bl GetLeader
pop {r1}
bx r1
thumb_func_end xxx_call_GetLeader
thumb_func_start GetPartnerEntity
GetPartnerEntity:
push {r4,r5,lr}
movs r5, 0
_08085490:
ldr r0, _080854B8
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _080854BC
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _080854C0
ldr r0, [r4, 0x70]
adds r0, 0x40
ldrb r0, [r0]
cmp r0, 0x41
bne _080854C0
adds r0, r4, 0
b _080854CC
.align 2, 0
_080854B8: .4byte gDungeon
_080854BC: .4byte 0x0001357c
_080854C0:
adds r5, 0x1
cmp r5, 0x3
ble _08085490
movs r0, 0x2
bl GetEntityFromClientType
_080854CC:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end GetPartnerEntity
thumb_func_start sub_80854D4
sub_80854D4:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x20
movs r6, 0
movs r5, 0
add r0, sp, 0x10
mov r8, r0
mov r7, sp
_080854E6:
ldr r0, _080855D8
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _080855DC
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08085504
stm r7!, {r4}
adds r6, 0x1
_08085504:
adds r5, 0x1
cmp r5, 0x3
ble _080854E6
cmp r6, 0x3
bgt _0808551C
movs r1, 0
lsls r0, r6, 2
add r0, sp
_08085514:
stm r0!, {r1}
adds r6, 0x1
cmp r6, 0x3
ble _08085514
_0808551C:
movs r6, 0
movs r4, 0
mov r2, sp
mov r3, r8
movs r5, 0x3
_08085526:
ldr r1, [r2]
cmp r1, 0
beq _0808553A
ldr r0, [r1, 0x70]
ldrb r0, [r0, 0x7]
cmp r0, 0
beq _0808553A
str r4, [r2]
stm r3!, {r1}
adds r6, 0x1
_0808553A:
adds r2, 0x4
subs r5, 0x1
cmp r5, 0
bge _08085526
movs r4, 0
mov r2, sp
lsls r0, r6, 2
mov r1, r8
adds r3, r0, r1
movs r5, 0x3
_0808554E:
ldr r1, [r2]
cmp r1, 0
beq _08085564
ldr r0, [r1, 0x70]
adds r0, 0x40
ldrb r0, [r0]
cmp r0, 0x41
bne _08085564
str r4, [r2]
stm r3!, {r1}
adds r6, 0x1
_08085564:
adds r2, 0x4
subs r5, 0x1
cmp r5, 0
bge _0808554E
movs r3, 0
mov r2, sp
lsls r0, r6, 2
add r0, r8
movs r5, 0x3
_08085576:
ldr r1, [r2]
cmp r1, 0
beq _08085582
str r3, [r2]
stm r0!, {r1}
adds r6, 0x1
_08085582:
adds r2, 0x4
subs r5, 0x1
cmp r5, 0
bge _08085576
cmp r6, 0x3
bgt _0808559C
movs r1, 0
lsls r0, r6, 2
add r0, r8
_08085594:
stm r0!, {r1}
adds r6, 0x1
cmp r6, 0x3
ble _08085594
_0808559C:
movs r5, 0
mov r4, r8
_080855A0:
lsls r1, r5, 2
ldr r3, [r4]
cmp r3, 0
beq _080855C4
ldr r0, _080855D8
ldr r0, [r0]
adds r0, r1
ldr r2, _080855E0
adds r1, r0, r2
movs r6, 0
ldrsh r1, [r1, r6]
adds r2, 0x2
adds r0, r2
movs r6, 0
ldrsh r2, [r0, r6]
adds r0, r3, 0
bl sub_80856C8
_080855C4:
adds r4, 0x4
adds r5, 0x1
cmp r5, 0x3
ble _080855A0
add sp, 0x20
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080855D8: .4byte gDungeon
_080855DC: .4byte 0x0001357c
_080855E0: .4byte 0x0000e220
thumb_func_end sub_80854D4
.align 2, 0

View File

@@ -5,459 +5,6 @@
.text
thumb_func_start sub_8086F54
sub_8086F54:
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
lsls r1, 24
movs r0, 0xFC
lsls r0, 24
adds r1, r0
lsrs r1, 24
cmp r1, 0x1
bhi _08086FA8
movs r5, 0
_08086F6A:
ldr r0, _08086FB0
ldr r0, [r0]
lsls r1, r5, 2
ldr r2, _08086FB4
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08086F8E
ldr r0, [r4, 0x70]
adds r0, 0xA4
ldrb r0, [r0]
cmp r0, r6
bne _08086FA8
_08086F8E:
adds r5, 0x1
cmp r5, 0xF
ble _08086F6A
movs r0, 0
cmp r0, 0
bne _08086FA8
movs r0, 0x3
bl sub_8097FA8
ldr r0, _08086FB0
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x2]
_08086FA8:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08086FB0: .4byte gDungeon
_08086FB4: .4byte 0x0001358c
thumb_func_end sub_8086F54
thumb_func_start TeamMeaniesPreFightDialogue
TeamMeaniesPreFightDialogue:
push {r4,lr}
bl xxx_call_GetLeader
adds r4, r0, 0
bl sub_8086448
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087048
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808704C
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
bl sub_8087144
movs r0, 0xA
bl DungeonStartNewBGM
ldr r0, _08087050
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087054
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087058
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808705C
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087060
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r4, 0xC
adds r0, r4, 0
movs r1, 0x10
bl ShiftCameraToPosition
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08087048: .4byte gTeamMeaniesPreFightDialogue_1
_0808704C: .4byte gTeamMeaniesPreFightDialogue_2
_08087050: .4byte gTeamMeaniesPreFightDialogue_3
_08087054: .4byte gTeamMeaniesPreFightDialogue_4
_08087058: .4byte gTeamMeaniesPreFightDialogue_5
_0808705C: .4byte gTeamMeaniesPreFightDialogue_6
_08087060: .4byte gTeamMeaniesPreFightDialogue_7
thumb_func_end TeamMeaniesPreFightDialogue
thumb_func_start TeamMeaniesReFightDialogue
TeamMeaniesReFightDialogue:
push {r4,r5,lr}
bl xxx_call_GetLeader
adds r4, r0, 0
bl GetPartnerEntity
adds r5, r0, 0
bl sub_8086448
ldr r0, _08087118
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _0808711C
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
bl sub_8087144
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087120
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087124
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r4, 0
movs r1, 0x6
movs r2, 0x4
bl sub_806CDD4
adds r0, r5, 0
movs r1, 0x6
movs r2, 0x4
bl sub_806CDD4
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r0, r4, 0
movs r1, 0x7
movs r2, 0x4
bl sub_806CDD4
adds r0, r5, 0
movs r1, 0x7
movs r2, 0x4
bl sub_806CDD4
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
ldr r0, _08087128
bl DisplayDungeonDialogue
ldr r0, _0808712C
bl DisplayDungeonDialogue
movs r0, 0xA
movs r1, 0x46
bl sub_803E708
adds r4, 0xC
adds r0, r4, 0
movs r1, 0x10
bl ShiftCameraToPosition
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_08087118: .4byte gTeamMeaniesReFightDialogue_1
_0808711C: .4byte gTeamMeaniesPreFightDialogue_2
_08087120: .4byte gTeamMeaniesReFightDialogue_2
_08087124: .4byte gTeamMeaniesReFightDialogue_3
_08087128: .4byte gTeamMeaniesReFightDialogue_4
_0808712C: .4byte gTeamMeaniesReFightDialogue_5
thumb_func_end TeamMeaniesReFightDialogue
thumb_func_start sub_8087130
sub_8087130:
push {lr}
bl sub_8086448
ldr r0, _08087140
bl sub_80866C4
pop {r0}
bx r0
.align 2, 0
_08087140: .4byte gUnknown_8101440
thumb_func_end sub_8087130
thumb_func_start sub_8087144
sub_8087144:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0xF0
movs r0, 0x5
bl GetEntityFromClientType
adds r7, r0, 0
movs r0, 0x6
bl GetEntityFromClientType
mov r8, r0
movs r0, 0x7
bl GetEntityFromClientType
mov r9, r0
ldr r1, _080871E0
mov r0, sp
movs r2, 0x38
bl memcpy
add r6, sp, 0x38
ldr r1, _080871E4
adds r0, r6, 0
movs r2, 0x38
bl memcpy
add r4, sp, 0x70
ldr r1, _080871E8
adds r0, r4, 0
movs r2, 0x38
bl memcpy
add r5, sp, 0xA8
mov r0, sp
str r0, [r5]
str r6, [r5, 0x4]
str r4, [r5, 0x8]
add r4, sp, 0xB4
str r7, [r4]
mov r3, r8
str r3, [r4, 0x4]
mov r0, r9
str r0, [r4, 0x8]
movs r0, 0xA
bl DungeonStartNewBGM
adds r0, r7, 0
bl sub_8086A54
mov r0, r8
bl sub_8086A54
mov r0, r9
bl sub_8086A54
add r6, sp, 0xC0
adds r0, r6, 0
adds r1, r5, 0
adds r2, r4, 0
movs r3, 0x3
bl sub_8085B4C
ldr r0, [r7, 0x70]
ldr r2, _080871EC
adds r0, r2
movs r1, 0x1
strb r1, [r0]
mov r3, r8
ldr r0, [r3, 0x70]
adds r0, r2
strb r1, [r0]
mov r3, r9
ldr r0, [r3, 0x70]
adds r0, r2
strb r1, [r0]
b _080871F6
.align 2, 0
_080871E0: .4byte gUnknown_810739C
_080871E4: .4byte gUnknown_81073D4
_080871E8: .4byte gUnknown_810740C
_080871EC: .4byte 0x0000015f
_080871F0:
movs r0, 0x46
bl sub_803E46C
_080871F6:
adds r0, r6, 0
bl sub_8085B80
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0
bne _080871F0
ldr r0, [r7, 0x70]
ldr r1, _0808722C
adds r0, r1
strb r2, [r0]
mov r3, r8
ldr r0, [r3, 0x70]
adds r0, r1
strb r2, [r0]
mov r3, r9
ldr r0, [r3, 0x70]
adds r0, r1
strb r2, [r0]
add sp, 0xF0
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0808722C: .4byte 0x0000015f
thumb_func_end sub_8087144
thumb_func_start sub_8087230
sub_8087230:
push {r4-r6,lr}
bl xxx_call_GetLeader
adds r6, r0, 0
movs r0, 0x8
bl GetEntityFromClientType
adds r5, r0, 0
movs r0, 0x72
bl DungeonStartNewBGM
bl sub_8085374
bl sub_80854D4
movs r0, 0x4
bl sub_8085930
ldr r4, _08087294
adds r0, r4, 0
bl sub_80855E4
adds r0, r5, 0
movs r1, 0
bl SetFacingDirection
adds r0, r5, 0
bl _call_via_r4
movs r1, 0x4
ldrsh r0, [r6, r1]
movs r2, 0x6
ldrsh r1, [r6, r2]
subs r1, 0x3
bl sub_8085860
ldr r4, _08087298
movs r1, 0x96
lsls r1, 1
adds r0, r4, 0
bl CopyMonsterNametoBuffer
adds r4, 0x50
adds r0, r4, 0
movs r1, 0x91
bl CopyMonsterNametoBuffer
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08087294: .4byte sub_8086A3C
_08087298: .4byte gUnknown_202E038
thumb_func_end sub_8087230
thumb_func_start sub_808729C
sub_808729C:
push {r4-r6,lr}
sub sp, 0x4
bl xxx_call_GetLeader
adds r5, r0, 0
movs r0, 0x8
bl GetEntityFromClientType
adds r4, r0, 0
bl sub_80854D4
movs r0, 0x4
bl sub_8085930
ldr r6, _080872DC
adds r0, r6, 0
bl sub_80855E4
movs r0, 0x91
bl sub_8086AE4
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
beq _080872E0
movs r1, 0x87
lsls r1, 2
adds r0, r4, 0
movs r2, 0
bl sub_8068FE0
b _08087300
.align 2, 0
_080872DC: .4byte sub_8086A3C
_080872E0:
ldr r0, _0808732C
movs r3, 0
ldrsh r2, [r0, r3]
str r1, [sp]
adds r0, r4, 0
adds r1, r4, 0
movs r3, 0
bl sub_8072008
adds r0, r4, 0
movs r1, 0
bl SetFacingDirection
adds r0, r4, 0
bl _call_via_r6
_08087300:
movs r1, 0x4
ldrsh r0, [r5, r1]
movs r2, 0x6
ldrsh r1, [r5, r2]
subs r1, 0x3
bl sub_8085860
ldr r4, _08087330
movs r1, 0x96
lsls r1, 1
adds r0, r4, 0
bl CopyMonsterNametoBuffer
adds r4, 0x50
adds r0, r4, 0
movs r1, 0x91
bl CopyMonsterNametoBuffer
add sp, 0x4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0808732C: .4byte gUnknown_80F57CC
_08087330: .4byte gUnknown_202E038
thumb_func_end sub_808729C
thumb_func_start sub_8087334
sub_8087334:
push {lr}
lsls r0, 24
lsrs r0, 24
lsls r1, 24
movs r2, 0xF9
lsls r2, 24
adds r1, r2
lsrs r1, 24
cmp r1, 0x2
bhi _0808735A
cmp r0, 0x8
bne _0808735A
movs r0, 0x5
bl sub_8097FA8
ldr r0, _08087360
ldr r1, [r0]
movs r0, 0x1
strb r0, [r1, 0x2]
_0808735A:
pop {r0}
bx r0
.align 2, 0
_08087360: .4byte gDungeon
thumb_func_end sub_8087334
thumb_func_start ZapdosPreFightDialogue
ZapdosPreFightDialogue:
push {r4-r7,lr}

View File

@@ -1,123 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80973A8
sub_80973A8:
push {r4-r6,lr}
lsls r0, 16
asrs r0, 16
lsls r1, 24
lsrs r6, r1, 24
cmp r0, 0xD
beq _080973EE
lsls r5, r0, 16
cmp r6, 0
beq _080973E2
bl sub_80A26B8
lsls r0, 16
asrs r4, r0, 16
lsrs r2, r5, 16
movs r0, 0
movs r1, 0x2B
movs r3, 0
bl sub_800199C
movs r0, 0x1
negs r0, r0
cmp r4, r0
beq _080973E2
movs r0, 0
movs r1, 0x12
adds r2, r4, 0
bl sub_80018D8
_080973E2:
lsrs r2, r5, 16
movs r0, 0
movs r1, 0x2C
adds r3, r6, 0
bl sub_800199C
_080973EE:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_80973A8
thumb_func_start sub_80973F4
sub_80973F4:
push {lr}
lsls r0, 16
asrs r0, 16
cmp r0, 0xD
bne _08097402
movs r0, 0
b _08097414
_08097402:
lsls r2, r0, 16
lsrs r2, 16
movs r0, 0
movs r1, 0x2D
bl sub_8001784
cmp r0, 0
beq _08097414
movs r0, 0x1
_08097414:
pop {r1}
bx r1
thumb_func_end sub_80973F4
thumb_func_start sub_8097418
sub_8097418:
push {r4-r7,lr}
lsls r0, 16
asrs r5, r0, 16
lsls r1, 24
lsrs r7, r1, 24
cmp r5, 0xD
beq _08097470
lsls r6, r5, 16
cmp r7, 0
beq _08097464
lsrs r2, r6, 16
movs r0, 0
movs r1, 0x2C
movs r3, 0
bl sub_800199C
cmp r5, 0x1E
bgt _08097464
lsls r0, r5, 3
ldr r1, _08097478
adds r4, r0, r1
ldrb r0, [r4, 0x4]
cmp r0, 0xFF
beq _0809744C
bl sub_8097FA8
_0809744C:
ldrb r0, [r4, 0x5]
cmp r0, 0xFF
beq _08097456
bl sub_8097FA8
_08097456:
cmp r5, 0x9
bne _08097460
movs r0, 0x1F
bl sub_8097FA8
_08097460:
bl sub_8097FF8
_08097464:
lsrs r2, r6, 16
movs r0, 0
movs r1, 0x2D
adds r3, r7, 0
bl sub_800199C
_08097470:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08097478: .4byte gStoryMissionText
thumb_func_end sub_8097418
.align 2,0

585
asm/menu_input.s Normal file
View File

@@ -0,0 +1,585 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start AddMenuCursorSprite_
AddMenuCursorSprite_:
push {r4-r6,lr}
sub sp, 0x8
adds r6, r0, 0
movs r0, 0
movs r1, 0
str r0, [sp]
str r1, [sp, 0x4]
movs r1, 0x1A
ldrsh r0, [r6, r1]
cmp r0, 0
bgt _080131CC
b _080132D6
_080131CC:
adds r0, r6, 0
bl UpdateMenuCursorSpriteCoords
ldrh r1, [r6, 0x24]
movs r0, 0x8
ands r0, r1
cmp r0, 0
bne _080132D6
mov r0, sp
ldrh r0, [r0]
ldr r1, _080132FC
ands r1, r0
ldr r3, _08013300
ldr r0, [sp]
ands r0, r3
orrs r0, r1
str r0, [sp]
mov r1, sp
ldrh r1, [r1]
adds r2, r3, 0
ands r2, r0
orrs r2, r1
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013304
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r4, _08013308
adds r0, r4, 0
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _0801330C
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013310
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013314
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
ands r3, r1
orrs r3, r0
str r3, [sp]
mov r3, sp
movs r2, 0xFD
lsls r2, 2
ldrh r1, [r3, 0x4]
movs r0, 0xFC
lsls r0, 8
ands r0, r1
orrs r0, r2
ands r0, r4
movs r5, 0xF
movs r1, 0xF0
lsls r1, 8
ldr r4, _08013318
ands r0, r4
orrs r0, r1
strh r0, [r3, 0x4]
ldrh r0, [r3, 0x6]
ldr r1, _0801331C
ands r1, r0
ldr r0, _08013320
ands r1, r0
movs r2, 0x8
ldrsh r0, [r6, r2]
ldr r2, _08013324
ands r0, r2
strh r0, [r3, 0x2]
movs r2, 0xA
ldrsh r0, [r6, r2]
adds r0, 0x1
ands r0, r4
lsls r0, 4
ands r1, r5
orrs r1, r0
strh r1, [r3, 0x6]
mov r0, sp
movs r1, 0xFF
movs r2, 0
movs r3, 0
bl AddSprite
_080132D6:
adds r0, r6, 0
bl sub_8013470
movs r1, 0x14
ldrsh r0, [r6, r1]
cmp r0, 0
beq _080132EC
adds r0, r6, 0
adds r0, 0x14
bl sub_801332C
_080132EC:
ldrh r0, [r6, 0x24]
adds r0, 0x1
strh r0, [r6, 0x24]
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080132FC: .4byte 0x0000feff
_08013300: .4byte 0xffff0000
_08013304: .4byte 0x0000fdff
_08013308: .4byte 0x0000f3ff
_0801330C: .4byte 0x0000efff
_08013310: .4byte 0x0000dfff
_08013314: .4byte 0x00003fff
_08013318: .4byte 0x00000fff
_0801331C: .4byte 0x0000fffe
_08013320: .4byte 0x0000fffd
_08013324: .4byte 0x000001ff
thumb_func_end AddMenuCursorSprite_
thumb_func_start nullsub_34
nullsub_34:
bx lr
thumb_func_end nullsub_34
thumb_func_start sub_801332C
sub_801332C:
push {r4-r6,lr}
sub sp, 0x8
movs r1, 0
movs r2, 0
str r1, [sp]
str r2, [sp, 0x4]
mov r1, sp
ldrh r1, [r1]
ldr r2, _08013440
ands r2, r1
ldr r4, _08013444
ldr r1, [sp]
ands r1, r4
orrs r1, r2
str r1, [sp]
mov r2, sp
ldrh r2, [r2]
adds r3, r4, 0
ands r3, r1
orrs r3, r2
str r3, [sp]
mov r1, sp
ldrh r2, [r1]
ldr r1, _08013448
ands r1, r2
adds r2, r4, 0
ands r2, r3
orrs r2, r1
str r2, [sp]
mov r1, sp
ldrh r1, [r1]
adds r3, r4, 0
ands r3, r2
orrs r3, r1
str r3, [sp]
movs r5, 0x80
lsls r5, 3
mov r1, sp
ldrh r2, [r1]
ldr r6, _0801344C
adds r1, r6, 0
ands r1, r2
adds r2, r4, 0
ands r2, r3
orrs r2, r1
str r2, [sp]
mov r1, sp
ldrh r1, [r1]
orrs r5, r1
adds r3, r4, 0
ands r3, r2
orrs r3, r5
str r3, [sp]
mov r1, sp
ldrh r2, [r1]
ldr r1, _08013450
ands r1, r2
adds r2, r4, 0
ands r2, r3
orrs r2, r1
str r2, [sp]
mov r1, sp
ldrh r1, [r1]
adds r3, r4, 0
ands r3, r2
orrs r3, r1
str r3, [sp]
mov r1, sp
ldrh r2, [r1]
ldr r1, _08013454
ands r1, r2
adds r2, r4, 0
ands r2, r3
orrs r2, r1
str r2, [sp]
mov r1, sp
ldrh r1, [r1]
adds r3, r4, 0
ands r3, r2
orrs r3, r1
str r3, [sp]
mov r1, sp
ldrh r2, [r1]
ldr r1, _08013458
ands r1, r2
adds r2, r4, 0
ands r2, r3
orrs r2, r1
str r2, [sp]
mov r1, sp
ldrh r1, [r1]
ands r4, r2
orrs r4, r1
str r4, [sp]
mov r4, sp
ldr r3, _0801345C
ldrh r2, [r4, 0x4]
movs r1, 0xFC
lsls r1, 8
ands r1, r2
orrs r1, r3
ands r1, r6
movs r6, 0xF
movs r2, 0xF0
lsls r2, 8
ldr r5, _08013460
ands r1, r5
orrs r1, r2
strh r1, [r4, 0x4]
ldrh r1, [r4, 0x6]
ldr r2, _08013464
ands r2, r1
ldr r1, _08013468
ands r2, r1
movs r3, 0
ldrsh r1, [r0, r3]
ldr r3, _0801346C
ands r1, r3
strh r1, [r4, 0x2]
movs r1, 0x2
ldrsh r0, [r0, r1]
adds r0, 0x1
ands r0, r5
lsls r0, 4
ands r2, r6
orrs r2, r0
strh r2, [r4, 0x6]
mov r0, sp
movs r1, 0xFF
movs r2, 0
movs r3, 0
bl AddSprite
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08013440: .4byte 0x0000feff
_08013444: .4byte 0xffff0000
_08013448: .4byte 0x0000fdff
_0801344C: .4byte 0x0000f3ff
_08013450: .4byte 0x0000efff
_08013454: .4byte 0x0000dfff
_08013458: .4byte 0x00003fff
_0801345C: .4byte 0x000003f5
_08013460: .4byte 0x00000fff
_08013464: .4byte 0x0000fffe
_08013468: .4byte 0x0000fffd
_0801346C: .4byte 0x000001ff
thumb_func_end sub_801332C
thumb_func_start sub_8013470
sub_8013470:
push {r4-r6,lr}
sub sp, 0x8
adds r6, r0, 0
movs r0, 0
movs r1, 0
str r0, [sp]
str r1, [sp, 0x4]
movs r1, 0xC
ldrsh r0, [r6, r1]
cmp r0, 0
bne _08013488
b _08013624
_08013488:
movs r2, 0x1E
ldrsh r0, [r6, r2]
cmp r0, 0
beq _08013586
mov r0, sp
ldrh r0, [r0]
ldr r1, _0801362C
ands r1, r0
ldr r3, _08013630
ldr r0, [sp]
ands r0, r3
orrs r0, r1
str r0, [sp]
mov r1, sp
ldrh r1, [r1]
adds r2, r3, 0
ands r2, r0
orrs r2, r1
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013634
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r4, _08013638
adds r0, r4, 0
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _0801363C
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013640
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
adds r2, r3, 0
ands r2, r1
orrs r2, r0
str r2, [sp]
mov r0, sp
ldrh r1, [r0]
ldr r0, _08013644
ands r0, r1
adds r1, r3, 0
ands r1, r2
orrs r1, r0
str r1, [sp]
mov r0, sp
ldrh r0, [r0]
ands r3, r1
orrs r3, r0
str r3, [sp]
mov r3, sp
ldr r2, _08013648
ldrh r1, [r3, 0x4]
movs r0, 0xFC
lsls r0, 8
ands r0, r1
orrs r0, r2
ands r0, r4
movs r5, 0xF
movs r1, 0xF0
lsls r1, 8
ldr r4, _0801364C
ands r0, r4
orrs r0, r1
strh r0, [r3, 0x4]
ldrh r0, [r3, 0x6]
ldr r1, _08013650
ands r1, r0
ldr r0, _08013654
ands r1, r0
movs r2, 0xC
ldrsh r0, [r6, r2]
ldr r2, _08013658
ands r0, r2
strh r0, [r3, 0x2]
movs r2, 0xE
ldrsh r0, [r6, r2]
ands r0, r4
lsls r0, 4
ands r1, r5
orrs r1, r0
strh r1, [r3, 0x6]
mov r0, sp
movs r1, 0xFF
movs r2, 0
movs r3, 0
bl AddSprite
_08013586:
movs r1, 0x20
ldrsh r0, [r6, r1]
cmp r0, 0
beq _08013624
adds r1, r0, 0
movs r2, 0x1E
ldrsh r0, [r6, r2]
adds r0, 0x1
cmp r1, r0
beq _08013624
mov r0, sp
ldrh r0, [r0]
ldr r1, _0801362C
ands r1, r0
mov r0, sp
strh r1, [r0]
strh r1, [r0]
ldr r0, _08013634
ands r0, r1
mov r1, sp
strh r0, [r1]
strh r0, [r1]
ldr r4, _08013638
ands r0, r4
strh r0, [r1]
strh r0, [r1]
ldr r1, _0801363C
ands r1, r0
mov r0, sp
strh r1, [r0]
strh r1, [r0]
ldr r2, _08013640
ands r2, r1
strh r2, [r0]
strh r2, [r0]
ldr r0, _08013644
ands r0, r2
mov r1, sp
strh r0, [r1]
strh r0, [r1]
mov r3, sp
ldr r2, _0801365C
ldrh r1, [r3, 0x4]
movs r0, 0xFC
lsls r0, 8
ands r0, r1
orrs r0, r2
ands r0, r4
movs r5, 0xF
movs r1, 0xF0
lsls r1, 8
ldr r4, _0801364C
ands r0, r4
orrs r0, r1
strh r0, [r3, 0x4]
ldrh r0, [r3, 0x6]
ldr r1, _08013650
ands r1, r0
ldr r0, _08013654
ands r1, r0
movs r2, 0xC
ldrsh r0, [r6, r2]
adds r0, 0xA
ldr r2, _08013658
ands r0, r2
strh r0, [r3, 0x2]
movs r2, 0xE
ldrsh r0, [r6, r2]
ands r0, r4
lsls r0, 4
ands r1, r5
orrs r1, r0
strh r1, [r3, 0x6]
mov r0, sp
movs r1, 0xFF
movs r2, 0
movs r3, 0
bl AddSprite
_08013624:
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0801362C: .4byte 0x0000feff
_08013630: .4byte 0xffff0000
_08013634: .4byte 0x0000fdff
_08013638: .4byte 0x0000f3ff
_0801363C: .4byte 0x0000efff
_08013640: .4byte 0x0000dfff
_08013644: .4byte 0x00003fff
_08013648: .4byte 0x000003f2
_0801364C: .4byte 0x00000fff
_08013650: .4byte 0x0000fffe
_08013654: .4byte 0x0000fffd
_08013658: .4byte 0x000001ff
_0801365C: .4byte 0x000003f3
thumb_func_end sub_8013470
.align 2,0

View File

@@ -1,31 +0,0 @@
.section .rodata
.global gUnknown_80E1FA8
gUnknown_80E1FA8: @ 80E1FA8
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnkData_80E1FC0
gUnkData_80E1FC0:
.byte 0x01, 0x00, 0x0A, 0x00
.global gUnknown_80E1FC4
gUnknown_80E1FC4: @ 80E1FC4
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x06, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x02, 0x00
.byte 0x1a, 0x00, 0x0a, 0x00
.byte 0x0a, 0x00, 0x00, 0x00
.4byte gUnkData_80E1FC0
.global gUnknown_80E1FDC
gUnknown_80E1FDC: @ 80E1FDC
.string "Password\0"
.align 2,0
.string "pksdir0\0"
.align 2,0

23
include/code_801EE10.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef CODE_801EE10_H
#define CODE_801EE10_H
struct unkStruct_203B270
{
// size 0xBC
u32 unk0;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
/* 0x8 */ struct PokemonStruct *pokeStruct;
/* 0xC */ u8 isTeamLeader;
/* 0x10 */ struct Move *moves;
u8 fill14[0x1C - 0x14];
struct MenuInputStruct input;
u32 unk50;
u32 unk54;
struct UnkTextStruct2 unk58[4];
u8 *unkB8;
};
#endif

View File

@@ -3,6 +3,8 @@
#define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2)
#define NUM_BASIC_DUNGEON_MAZE (DUNGEON_STEEL_MAZE - DUNGEON_NORMAL_MAZE_2 + 1)
enum DungeonID
{
DUNGEON_TINY_WOODS = 0,

View File

@@ -294,7 +294,7 @@ struct Entity
/* 0x54 */ u16 spriteGlobalIndex;
u8 fill56[0x64 - 0x56];
u32 unk64;
u16 unk68;
s16 unk68;
/* 0x6A */ u8 unk6A;
/* 0x6A */ u8 unk6B;
/* 0x6C */ u8 direction;
@@ -346,6 +346,7 @@ enum ClientType
{
CLIENT_TYPE_NONE = 0,
CLIENT_TYPE_CLIENT = 1, // Used for mission clients that need rescuing.
CLIENT_TYPE_PARTNER,
CLIENT_TYPE_DONT_MOVE = 4 // Used for Diglett in the Skarmory boss fight.
};

View File

@@ -136,9 +136,11 @@ struct Dungeon
u8 fill3A10[0x3A14 - 0x3A12];
/* 0x3A14 */ s16 bossBattleIndex;
/* 0x3A18 */ struct Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
u8 fillE218[0xE23C - 0xE218];
s16 unkE23C;
s16 unkE23E;
u8 fillE218[0xE220 - 0xE218];
struct Position unkE220[4];
u8 unkE230[0xE23C - 0xE230];
s16 unkE23C; // x coord of some kind
s16 unkE23E; // y coord of some kind
u8 fillE240[0xE264 - 0xE240];
/* 0xE264 */ u8 weather; // Uses the weather constants in weather.h.
u8 unkE265; // Uses the weather constants in weather.h
@@ -155,7 +157,7 @@ struct Dungeon
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
u8 fillE27A[0xE8C0 - 0xE27A];
/* 0xE8C0 */ struct Tile* tilePointers[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
u8 fill104C0[0x104C4 - 0x104C0];
u8 unk104C0;
/* 0x104C4 */ struct RoomData roomData[MAX_ROOM_COUNT];
u8 fill10764[0x10844 - 0x10764];
/* 0x10844 */ s16 naturalJunctionListCounts[MAX_ROOM_COUNT];
@@ -206,7 +208,9 @@ struct Dungeon
/* 0x18210 */ bool8 hallucinating; // Displays Substitute and flower sprites when the player has the Cross-Eyed status.
u8 fill18211[0x18217 - 0x18211];
u8 unk18217;
u8 fill18218[0x1C578 - 0x18218];
u8 fill18218[0x1821A - 0x18218];
u8 unk1821A;
u8 fill1821B[0x1C578 - 0x1821B];
u8 unk1C578;
u8 fill1C579[0x1C57E - 0x1C579];
u8 unk1C57E;

View File

@@ -3,6 +3,9 @@
#include "dungeon_entity.h"
struct Entity *xxx_call_GetLeader(void);
struct Entity *GetPartnerEntity(void);
void sub_80854D4(void);
struct Entity *GetEntityFromClientType(u8 entityType);
void sub_80856C8(struct Entity * pokemon, s32 x, s32 y);
void sub_80856E0(struct Entity * pokemon, s32 direction);

View File

@@ -0,0 +1,9 @@
#ifndef INCLUDE_FRIEND_LIST_MENU_H
#define INCLUDE_FRIEND_LIST_MENU_H
bool8 sub_80252F0(s32 param_1);
u32 sub_8025354(void);
u8 sub_802540C(void);
void sub_8025418(void);
#endif

View File

@@ -48,26 +48,39 @@ struct UnusedInputStruct
/* 0x2A..0x2B - padding */
};
struct UnkInputStruct
struct MenuInputStructSub
{
/* 0x0 */ u8 unk0;
/* 0x1 */ u8 unk1;
/* 0x2 */ u8 unk2;
/* 0x3 */ u8 unk3;
/* 0x4 */ u8 unk4;
/* 0x8 */ u32 unk8;
/* 0xC */ u32 unkC;
u8 unk0;
/* 0x1 */ u8 a_button;
/* 0x2 */ u8 b_button;
/* 0x3 */ u8 dpad_right;
/* 0x4 */ u8 dpad_left;
u8 fill5[3];
u16 unk8;
s16 unkA;
};
struct MenuInputStruct
{
s32 unk0;
/* 0x4 */ u16 unk4;
/* 0x6 */ s16 unk6;
/* 0x8 */ u16 unk8;
/* 0x8 */ u16 unkA;
/* 0xC */ u16 unkC;
/* 0xE */ u16 unkE;
/* 0x10 */ u32 unk10;
/* 0x14 */ u32 unk14;
/* 0x18 */ u32 unk18;
/* 0x1C */ u32 unk1C;
/* 0x20 */ u32 unk20;
/* 0x24 */ u32 unk24;
/* 0x28 */ u8 unk28;
/* 0x29 */ u8 a_button;
/* 0x2A */ u8 b_button;
/* 0x2B */ u8 dpad_right;
/* 0x2C */ u8 dpad_left;
/* 0x14 */ s16 unk14;
/* 0x16 */ u16 unk16;
/* 0x18 */ s16 menuIndex;
/* 0x1A */ s16 unk1A;
/* 0x1C */ s16 unk1C;
/* 0x1E */ s16 unk1E;
/* 0x20 */ s16 unk20;
/* 0x22 */ s16 unk22;
/* 0x24 */ u16 unk24;
u16 unk26;
/* 0x28 */ struct MenuInputStructSub unk28;
};

View File

@@ -129,6 +129,7 @@ s32 FindItemInInventory(u8 id);
bool8 IsHMItem(u8 id);
bool8 IsEdibleItem(u8 id);
u8 xxx_bit_lut_lookup_8091E50(u8 i0, u8 i1);
bool8 IsInvalidItemReward(u8 itemID);
void RestoreHeldItem(struct unkStruct_8094924*, struct BulkItem*);
void SaveHeldItem(struct unkStruct_8094924*, struct BulkItem*);

View File

@@ -41,17 +41,8 @@ struct unkStruct_203B224
{
// size: 0xF4
u32 unk0;
u32 unk4[INVENTORY_SIZE];
u32 unk54;
u8 fill58[0x6C - 0x58];
s16 unk6C;
s16 unk6E;
s16 unk70;
s16 unk72;
u16 unk74;
u16 unk76;
u8 fill78[0x88 - 0x78];
/* 0x54 */ struct MenuInputStruct input;
u32 unk88;
struct UnkTextStruct2 *unk8C;
struct UnkTextStruct2 unk90[4];

View File

@@ -48,14 +48,19 @@ struct Tile
struct RoomData
{
u8 fill0[0x2 - 0x0];
u8 unk0;
u8 unk1;
// All coordinates are inclusive.
// These are not aligned properly to use the Position struct.
/* 0x2 */ s16 bottomRightCornerX;
/* 0x4 */ s16 bottomRightCornerY;
/* 0x6 */ s16 topLeftCornerX;
/* 0x8 */ s16 topLeftCornerY;
u8 fillA[0x1A - 0xA];
u8 fillA[0xC - 0xA];
u32 unkC; // bottom right x
u32 unk10; // bottom right y
u32 unk14; // top left x
u32 unk18; // top left y
};
#endif

View File

@@ -1,6 +1,8 @@
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
#include "input.h"
struct MenuItem
{
const u8 *text;
@@ -15,13 +17,7 @@ struct MenuStruct
const u32 *menuTextColorArray;
u16 *unkC;
/* 0x10 */ s32 index;
/* 0x14 */ u32 unk14;
u8 fill18[0x2C - 0x18];
/* 0x2C */ s16 menuIndex;
s16 unk2E;
u8 fill30[0x38 - 0x30];
u16 unk38;
u8 fill3A[0x48 - 0x3A];
/* 0x14 */ struct MenuInputStruct input;
/* 0x48 */ s32 menuAction;
bool8 unk4C;
bool8 unk4D;

View File

@@ -1,7 +1,7 @@
#include "menu.h"
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6);
void sub_8012C60(u32 x, u32 y, u32 param_3, u32 param_4, u32 param_5);
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6);
void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5);
void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2);
void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2);
void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2);

View File

@@ -49,13 +49,7 @@ struct PersonalityStruct_203B404
/* 0x0 */ s16 StarterID;
/* 0x2 */ s16 PartnerArray[NUM_PARTNERS];
u8 unk16;
/* 0x18 */ struct UnkInputStruct *unk18; // something menu related (seems to be some struct)
u8 padding[0x30 - 0x1C];
/* 0x30 */ s16 currPartnerSelection;
s16 unk32;
u8 padding2[0x3A - 0x34];
/* 0x3A */ s16 numPartners;
u8 padding3[0x4C - 0x3C];
/* 0x18 */ struct MenuInputStruct input;
u32 unk4C;
/* 0x50 */ struct UnkTextStruct2 *unk50;
/* 0x54 */ struct UnkTextStruct2 unk54[4];

View File

@@ -209,7 +209,7 @@ bool8 CanMove(s16 index);
u8 GetChanceAsleep(s16 index);
u32 GetWeight(s16 index);
u32 GetSize(s16 index);
u8 GetFriendArea(s16 index);
u8 GetFriendArea(s32 index);
u16 GetBaseHP(s16 index);
bool8 IsToolboxEnabled(s16 index);
u8 GetUnk12(s16 index);
@@ -218,7 +218,7 @@ u16 GetBaseOffensiveStat(s16 index, u32 r1);
u16 GetBaseDefensiveStat(s16 index, u32 r1);
u8 GetPokemonType(s32 index, u32 typeIndex);
u8 GetPokemonAbility(s16 index, u32 abilityIndex);
s16 GetDexInternalNo(s16 index, u32 r1);
s16 GetDexInternalNo(s32 index, u32 r1);
s16 GetRecruitRate(s16 index);
s16 GetAlphabetParentNo(s16 index, s32 r1);
s16 GetInternalNo(s16 index);

View File

@@ -1,6 +1,7 @@
#ifndef GUARD_POKEMON_3_H
#define GUARD_POKEMON_3_H
s16 GetBaseSpeciesNoUnown(s16 index);
bool8 TacticsTargetLeader(u8 tactic);
bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex);
void SetIQSkill(u8 *param_1, u32 skillIndex);

View File

@@ -2,9 +2,10 @@
#define GUARD_TEXT_H
struct UnkTextStruct1 {
u8 fill00[4];
u16 unk04;
u8 fill06[2];
s16 unk0;
s16 unk2;
s16 unk04;
s16 unk6;
u16 unk08;
u16 fillA;
u32 unkC;

View File

@@ -2,16 +2,7 @@ struct unkStruct_203B2E8
{
// size: 0xA8
u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS];
u32 unk8;
u8 fillC[0x20 - 0xC];
s16 unk20;
s16 unk22;
s16 unk24;
s16 unk26;
u16 unk28;
u16 acceptedJobs;
u16 unk2C;
u8 fill2E[0x3C - 0x2E];
struct MenuInputStruct input;
u32 unk3C;
struct UnkTextStruct2 *unk40;
struct UnkTextStruct2 unk44[4];

View File

@@ -1,13 +1,7 @@
#include "menu.h"
struct unkStruct_203B2F4
{
u8 fill0[0x18];
u8 unk18;
u8 unk19;
s16 unk1A;
s16 unk1C;
s16 unk1E;
u8 fill20[0x34 - 0x20];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];

View File

@@ -94,6 +94,8 @@ SECTIONS {
src/code_8012A18.o(.text);
src/more_input.o(.text);
src/menu_input.o(.text);
asm/menu_input.o(.text);
src/menu_input_1.o(.text);
asm/code_80130A8.o(.text);
src/code_8012A18_1.o(.text);
src/felicity_bank.o(.text);
@@ -107,7 +109,6 @@ SECTIONS {
src/kecleon_items_1.o(.text);
src/code_801AFA4.o(.text);
src/code_801B3C0.o(.text);
asm/code_801B3C0.o(.text);
src/code_801C620.o(.text);
asm/code_801C620.o(.text);
src/code_801D760.o(.text);
@@ -150,7 +151,7 @@ SECTIONS {
src/wonder_mail_5.o(.text);
src/wonder_mail_6.o(.text);
src/post_office_guide.o(.text);
asm/code_8031D70.o(.text);
src/code_8031D70.o(.text);
src/adventure_log.o(.text);
src/friend_rescue.o(.text);
asm/friend_rescue.o(.text);
@@ -203,6 +204,7 @@ SECTIONS {
src/dungeon_ai_item_weight.o(.text);
src/dungeon_map_access.o(.text);
asm/code_80495E4.o(.text);
src/dungeon_map_access_1.o(.text);
src/tile_types.o(.text);
asm/code_804AFAC.o(.text);
src/code_80521D0.o(.text);
@@ -307,8 +309,6 @@ SECTIONS {
src/code_80958E8_1.o(.text);
asm/code_8096AF8.o(.text);
src/code_80972F4.o(.text);
asm/code_8097318.o(.text);
src/code_809747C.o(.text);
src/code_8097670.o(.text);
asm/code_8097670.o(.text);
src/code_8097DD0.o(.text);
@@ -434,7 +434,7 @@ SECTIONS {
src/wonder_mail_5.o(.rodata);
src/wonder_mail_6.o(.rodata);
src/post_office_guide.o(.rodata);
data/data_80E1F30.o(.rodata);
src/code_8031D70.o(.rodata);
src/adventure_log.o(.rodata);
data/data_80E2068.o(.rodata);
src/main_menu.o(.rodata);

View File

@@ -8,12 +8,7 @@
struct AdventureLog
{
// size: 0xA0
u8 fill0[0x1A];
/* 0x1A */ s16 unk1A;
/* 0x1C */ s16 unk1C;
/* 0x1E */ s16 currPage;
s16 unk20;
u8 fill22[0x34 - 0x22];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
@@ -47,10 +42,10 @@ const u8 fill_adven[] = "pksdir0";
void sub_8032084();
void DisplayAdventureLog();
extern void sub_8013818(void *, u32, u32, u32);
extern bool8 sub_8013938(void *);
extern void sub_8013660(void *);
extern bool8 sub_8013938(struct MenuInputStruct *);
extern void sub_8013660(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern u32 GetKeyPress(void *);
extern u32 GetKeyPress(struct MenuInputStruct *);
extern bool8 sub_8097710(u8);
extern s16 sub_80978B8();
@@ -88,11 +83,11 @@ u32 CreateAdventureLogScreen(u32 param_1)
u32 HandleAdventureLogInput(u8 param_1)
{
if (param_1 == 0) {
sub_8013660(gAdventureLog);
sub_8013660(&gAdventureLog->input);
return 0;
}
else {
switch(GetKeyPress(gAdventureLog))
switch(GetKeyPress(&gAdventureLog->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -101,7 +96,7 @@ u32 HandleAdventureLogInput(u8 param_1)
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(gAdventureLog)) {
if (sub_8013938(&gAdventureLog->input)) {
sub_8032084();
DisplayAdventureLog();
return 1;
@@ -131,11 +126,11 @@ void sub_8032084(void)
u32 sVar2;
gAdventureLog->unk9C[0] = gAdventureLog->unk20;
gAdventureLog->unk9C[1]= gAdventureLog->currPage;
gAdventureLog->unk9C[1]= gAdventureLog->unk0.unk1E;
gAdventureLog->unk9C[2]= 0xb;
gAdventureLog->unk9C[3]= 0;
// So a sign extend..
sVar2 = sub_80095E4(gAdventureLog->unk1A,0xc) + 2 << 0x10;
sVar2 = sub_80095E4(gAdventureLog->unk0.unk1A,0xc) + 2 << 0x10;
// TODO needs asr r3, r0, r16
// and lsr r0, r0, r16
gAdventureLog->unk3C[gAdventureLog->unk34].unkE = sVar2;
@@ -215,7 +210,7 @@ void DisplayAdventureLog(void)
sub_8008C54(gAdventureLog->unk34);
sub_80073B8(gAdventureLog->unk34);
r4 = gAdventureLog->currPage * 8;
r4 = gAdventureLog->input.unk1E * 8;
r6 = r4;
r6 += 10;
// Draw Header
@@ -223,11 +218,11 @@ void DisplayAdventureLog(void)
r4 += 4;
r6 = r4 + gAdventureLog->unk9C[2] * 8;
// Draw Page #
sub_8012BC4(r6, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34);
sub_8012BC4(r6, 0, gAdventureLog->input.unk1E + 1, 1, 7, gAdventureLog->unk34);
for(counter = 0; counter < gAdventureLog->unk1A; counter++)
for(counter = 0; counter < gAdventureLog->input.unk1A; counter++)
{
temp = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
temp = gAdventureLog->input.unk1E * gAdventureLog->input.unk1C + counter;
if(sub_8097710(temp)){
switch(temp) {
case 0xc:

View File

@@ -1,4 +1,3 @@
#include "gba/defines.h"
#include "global.h"
IWRAM_DATA u32 gUnknown_3004000 = {0};

View File

@@ -3,10 +3,7 @@
extern u8 gUnknown_202D238[4];
extern s32 gUnknown_202D23C;
extern u16 gUnknown_202B038[2][32][32];
extern u8 gUnknown_202B838[0x800];
extern u8 gUnknown_202C038[0x800];
extern u8 gUnknown_202C838[0x720];
extern u16 gUnknown_202B038[4][32][32];
struct unkStruct_202D240
{
@@ -99,41 +96,34 @@ void sub_80098F8(u32 r0)
void sub_8009908(void)
{
s32 index;
u32 iVar3;
index = 0;
if (index < gUnknown_202D23C) {
iVar3 = 0;
do {
CpuCopy(gUnknown_202D240[index].unk0,gUnknown_202D240[index].unk4,gUnknown_202D240[index].size);
iVar3 += sizeof(struct unkStruct_202D240);
index++;
} while (index < gUnknown_202D23C);
for(index = 0; index < gUnknown_202D23C; index++)
{
CpuCopy(gUnknown_202D240[index].unk0, gUnknown_202D240[index].unk4, gUnknown_202D240[index].size);
}
gUnknown_202D23C = 0;
if (gUnknown_202D238[0] != 0) {
gUnknown_202D238[0] = 0;
CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[1] != 0) {
gUnknown_202D238[1] = 0;
CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B838, BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[2] != 0) {
gUnknown_202D238[2] = 0;
CpuCopy(BG_SCREEN_ADDR(14),gUnknown_202C038, BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(14), gUnknown_202B038[2], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[3] != 0) {
gUnknown_202D238[3] = 0;
CpuCopy(BG_SCREEN_ADDR(15),gUnknown_202C838, BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(15), gUnknown_202B038[3], BG_SCREEN_SIZE);
}
}
void sub_80099C0(void)
{
CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE);
// TODO shouldn't this be 202B838? It didn't match... might need raw address
CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B038 + 0x1, BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE);
}
void sub_80099F0(u32 r0)

View File

@@ -66,6 +66,20 @@ extern u8 gUnknown_80DBB08[];
extern u8 gUnknown_80DBB38[];
extern u8 gKangaskhanTrashToolboxItem[];
extern u8 gKangaskhanTrashReceivedItem[];
extern u8 gKangaskhanStorage[];
extern u8 gKangaskhanTrash[];
extern u8 *gUnknown_80D4970[];
extern u8 gUnknown_202DEA8[];
extern u8 *gUnknown_80D4920[];
extern u8 *gUnknown_80D4928[];
extern s32 sub_80144A4(s32 *);
extern u32 sub_801A6E8(u32);
extern u32 sub_801A8AC();
extern void sub_8099690(u32);
extern void sub_801A928(void);
extern bool8 sub_801ADA0(s32);
extern struct UnkTextStruct2 gUnknown_80DBA58;
extern struct UnkTextStruct2 gUnknown_80DBA88;
extern struct UnkTextStruct2 gUnknown_80DBA70;
@@ -508,3 +522,206 @@ void sub_801BB20(void)
gUnknown_203B234->unkCC[loopMax].text = NULL;
gUnknown_203B234->unkCC[loopMax].menuAction = -1;
}
void sub_801BB5C(void)
{
int index;
s32 loopMax = 0;
gUnknown_203B234->unkCC[loopMax].text = gKangaskhanStorage;
gUnknown_203B234->unkCC[loopMax].menuAction = 6;
if (!sub_801ADA0(gUnknown_203B234->unk24)) {
gUnknown_203B234->unkCC[loopMax].menuAction = -1;
}
loopMax++;
gUnknown_203B234->unkCC[loopMax].text = gKangaskhanTrash;
gUnknown_203B234->unkCC[loopMax].menuAction = 7;
loopMax++;
gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4970;
gUnknown_203B234->unkCC[loopMax].menuAction = 8;
loopMax++;
gUnknown_203B234->unkCC[loopMax].text = 0;
gUnknown_203B234->unkCC[loopMax].menuAction = 1;
for(index = 0; index < loopMax; index++)
{
if(gUnknown_203B234->unkCC[index].menuAction != -1)
if(gUnknown_203B234->unkCC[index].menuAction == gUnknown_203B234->menuAction)
return;
}
for(index = 0; index < loopMax; index++)
{
if(gUnknown_203B234->unkCC[index].menuAction != -1)
{
gUnknown_203B234->menuAction = gUnknown_203B234->unkCC[index].menuAction;
break;
}
}
}
void sub_801BC24(void)
{
s32 loopMax;
loopMax = 0;
gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4920;
gUnknown_203B234->unkCC[loopMax].menuAction = 2;
loopMax += 1;
gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4928;
gUnknown_203B234->unkCC[loopMax].menuAction = 3;
loopMax += 1;
gUnknown_203B234->unkCC[loopMax].text = NULL;
gUnknown_203B234->unkCC[loopMax].menuAction = 1;
}
void sub_801BC64(void)
{
s32 temp;
if(sub_80144A4(&temp)== 0)
{
switch(temp)
{
case 4:
sub_801B748(0x8);
break;
case 5:
sub_801B748(0x7);
break;
}
}
}
void sub_801BC94(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
switch(temp)
{
case 2:
sub_801B748(0xD);
break;
case 1:
case 3:
sub_801B748(0x6);
break;
}
}
}
void sub_801BCCC(void)
{
switch(sub_801A6E8(1))
{
case 0:
case 1:
break;
case 3:
gUnknown_203B234->unk24 = sub_801A8AC();
gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24];
sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14);
sub_801B748(0xA);
break;
case 4:
gUnknown_203B234->unk24 = sub_801A8AC();
gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24];
sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14);
sub_8099690(0);
sub_801B748(0xB);
break;
case 2:
sub_801A928();
sub_801B748(6);
break;
}
}
void sub_801BD80(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
if (!sub_8012FD8(&gUnknown_203B234->unk28)) {
sub_8013114(&gUnknown_203B234->unk28,&menuAction);
if (menuAction != 1) gUnknown_203B234->menuAction = menuAction;
}
switch(menuAction)
{
case 6:
MoveToStorage(&gUnknown_203B234->unk20);
ShiftItemsDownFrom(gUnknown_203B234->unk24);
AddItemToInventory(&gUnknown_203B234->unk10);
FillInventoryGaps();
PlaySound(0xcb);
sub_8099690(0);
sub_801A928();
sub_801B748(0xE);
break;
case 7:
sub_801B748(0xC);
break;
case 8:
sub_8099690(0);
sub_801B748(0xB);
break;
case 1:
sub_801B748(0x9);
break;
}
}
void sub_801BE30(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
sub_8012FD8(&gUnknown_203B234->unk28);
if (!sub_8012FD8(&gUnknown_203B234->unk78)) {
sub_8013114(&gUnknown_203B234->unk78,&menuAction);
}
switch(menuAction)
{
case 1:
case 3:
sub_801B748(9);
break;
case 2:
ShiftItemsDownFrom(gUnknown_203B234->unk24);
AddItemToInventory(&gUnknown_203B234->unk10);
FillInventoryGaps();
PlaySound(0xcb);
sub_801A928();
sub_801B748(0xf);
break;
}
}
void sub_801BEAC(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_801B748(9);
case 0:
case 1:
break;
}
}
void sub_801BEC8(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_801B748(gUnknown_203B234->fallbackState);
}
}

View File

@@ -11,27 +11,6 @@
#include "subStruct_203B240.h"
#include "menu_input.h"
struct unkStruct_203B234
{
// size: 0x154
u32 unk0;
u32 state;
u32 fallbackState;
u8 unkC;
struct Item unk10;
struct unkStruct_8090F58 unk14;
struct Item unk20;
u32 unk24;
struct MenuStruct unk28;
struct MenuStruct unk78;
u32 menuAction;
struct MenuItem unkCC[5];
struct UnkTextStruct2 unkF4[4];
};
extern struct unkStruct_203B234 *gUnknown_203B234;
struct unkStruct_203B238
{
// size: 0x124
@@ -55,17 +34,7 @@ struct unkStruct_203B23C
/* 0x4 */ struct PokemonStruct *pokeStruct;
/* 0x8 */ u8 iqSkills[NUM_IQ_SKILLS];
/* 0x20 */ s32 numIQSkills;
/* 0x24 */ u32 unk24;
u8 fill28[0x3C - 0x28];
s16 unk3C;
s16 unk3E;
s16 unk40;
s16 unk42;
s16 unk44;
s16 unk46;
u8 fill48[0x52 - 0x48];
u8 unk52;
u8 fill52[0x58 - 0x53];
/* 0x24 */ struct MenuInputStruct input;
u32 unk58;
/* 0x5C */ struct UnkTextStruct2 *unk5C;
/* 0x60 */ struct UnkTextStruct2 unk60[4];
@@ -98,15 +67,7 @@ struct unkStruct_203B244
u32 unk0;
u8 itemIDs[NUMBER_OF_ITEM_IDS];
u32 unkF4[NUMBER_OF_ITEM_IDS];
u32 unk4B4;
u8 fill4B8[0x4CC - 0x4B8];
s16 unk4CC;
s16 unk4CE;
s16 unk4D0;
s16 unk4D2;
s16 unk4D4;
s16 itemCount;
u8 fill4D8[0x4E8 - 0x4D8];
struct MenuInputStruct input;
u32 unk4E8;
struct UnkTextStruct2 * unk4EC;
struct UnkTextStruct2 unk4F0[4];
@@ -115,7 +76,7 @@ struct unkStruct_203B244
struct unk_203B250
{
struct PokemonStruct *unk0;
struct PokemonStruct *pokeStruct;
s16 index;
/* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area
u8 unk7;
@@ -182,9 +143,9 @@ extern u8 *gUnknown_80D4970[];
void sub_8007B7C(s32, s32, s32, s32, s32);
extern bool8 sub_801CF14(s32);
extern void sub_8013818(u32 *, u32, u32, u32);
extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32);
extern u32 sub_801CE58(void);
extern void sub_8013984(void *);
extern void sub_8013984(struct MenuInputStruct *);
extern void sub_801CC38(void);
extern void sub_801CCD8(void);
extern void sub_801CF94(void);
@@ -204,14 +165,14 @@ extern void sub_8013C68(u32 *);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
extern char * GetIQSkillName(u8 r0);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
extern s32 sub_8013800(u32 *, s32);
extern s32 sub_8013800(struct MenuInputStruct *, s32);
extern u32 sub_80095E4(s16, u32);
extern void sub_801C440(void);
extern void sub_801C4C8(void);
extern void AddMenuCursorSprite(u32 *);
extern u8 sub_80138B8(u32 *, u32);
extern void sub_8013660(u32 *);
extern s32 GetKeyPress(u32 *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern void sub_8013660(struct MenuInputStruct *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern bool8 HasNoAvailIQSkills(s16 species);
extern u32 sub_801C674(void);
extern void sub_801C6B4(void);
@@ -239,188 +200,12 @@ void sub_801C118();
void sub_801C1A0();
void sub_801C228();
void sub_801B748(u32);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801B410(void);
extern void sub_801B450(void);
extern u32 sub_801A6E8(u32);
extern void sub_801A928(void);
extern void sub_8099690(u32);
extern u32 sub_801A8AC();
extern u8 sub_801CB24();
extern u32 sub_801CFE0(u8);
extern s32 sub_801CFB8(void);
extern void sub_801D220();
extern void sub_801D3A8();
extern u8 *gUnknown_80D4920[];
extern u8 *gUnknown_80D4928[];
void sub_801BC24(void)
{
struct unkStruct_203B234 *puVar1;
u8 *nullText;
u32 menuAction;
puVar1 = gUnknown_203B234;
nullText = NULL;
puVar1->unkCC[0].text = *gUnknown_80D4920;
gUnknown_203B234->unkCC[0].menuAction = 2;
menuAction = 1;
gUnknown_203B234->unkCC[1].text = *gUnknown_80D4928;
gUnknown_203B234->unkCC[1].menuAction = 3;
gUnknown_203B234->unkCC[2].text = nullText;
gUnknown_203B234->unkCC[2].menuAction = menuAction;
}
void sub_801BC64(void)
{
s32 temp;
if(sub_80144A4(&temp)== 0)
{
switch(temp)
{
case 4:
sub_801B748(0x8);
break;
case 5:
sub_801B748(0x7);
break;
}
}
}
void sub_801BC94(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
switch(temp)
{
case 2:
sub_801B748(0xD);
break;
case 1:
case 3:
sub_801B748(0x6);
break;
}
}
}
void sub_801BCCC(void)
{
switch(sub_801A6E8(1))
{
case 0:
case 1:
break;
case 3:
gUnknown_203B234->unk24 = sub_801A8AC();
gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24];
sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14);
sub_801B748(0xA);
break;
case 4:
gUnknown_203B234->unk24 = sub_801A8AC();
gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24];
sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14);
sub_8099690(0);
sub_801B748(0xB);
break;
case 2:
sub_801A928();
sub_801B748(6);
break;
}
}
void sub_801BD80(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
if (sub_8012FD8(&gUnknown_203B234->unk28) == '\0') {
sub_8013114(&gUnknown_203B234->unk28,&menuAction);
if (menuAction != 1) gUnknown_203B234->menuAction = menuAction;
}
switch(menuAction)
{
case 6:
MoveToStorage(&gUnknown_203B234->unk20);
ShiftItemsDownFrom(gUnknown_203B234->unk24);
AddItemToInventory(&gUnknown_203B234->unk10);
FillInventoryGaps();
PlaySound(0xcb);
sub_8099690(0);
sub_801A928();
sub_801B748(0xE);
break;
case 7:
sub_801B748(0xC);
break;
case 8:
sub_8099690(0);
sub_801B748(0xB);
break;
case 1:
sub_801B748(0x9);
break;
}
}
void sub_801BE30(void)
{
s32 menuAction;
menuAction = 0;
sub_801A6E8(0);
sub_8012FD8(&gUnknown_203B234->unk28);
if (sub_8012FD8(&gUnknown_203B234->unk78) == '\0') {
sub_8013114(&gUnknown_203B234->unk78,&menuAction);
}
switch(menuAction)
{
case 1:
case 3:
sub_801B748(9);
break;
case 2:
ShiftItemsDownFrom(gUnknown_203B234->unk24);
AddItemToInventory(&gUnknown_203B234->unk10);
FillInventoryGaps();
PlaySound(0xcb);
sub_801A928();
sub_801B748(0xf);
break;
}
}
void sub_801BEAC(void)
{
switch(sub_801B410())
{
case 2:
case 3:
sub_801B450();
sub_801B748(9);
case 0:
case 1:
break;
}
}
void sub_801BEC8(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)
{
sub_801B748(gUnknown_203B234->fallbackState);
}
}
bool8 sub_801BEEC(s16 species)
{
@@ -638,7 +423,7 @@ bool8 sub_801C244(s16 species, u32 index, u32 param_3)
sub_8012D08(gUnknown_203B23C->unk5C,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B23C->unk60,1,1);
sub_8013818(&gUnknown_203B23C->unk24,gUnknown_203B23C->numIQSkills,param_3,index);
sub_8013818(&gUnknown_203B23C->input,gUnknown_203B23C->numIQSkills,param_3,index);
sub_801C440();
sub_801C4C8();
return TRUE;
@@ -649,10 +434,10 @@ u32 sub_801C308(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B23C->unk24);
sub_8013660(&gUnknown_203B23C->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B23C->unk24))
switch(GetKeyPress(&gUnknown_203B23C->input))
{
case 2:
PlayMenuSoundEffect(1);
@@ -664,7 +449,7 @@ u32 sub_801C308(u8 r0)
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&gUnknown_203B23C->unk24, 1) != 0)
if(sub_80138B8(&gUnknown_203B23C->input, 1) != 0)
{
sub_801C440();
sub_801C4C8();
@@ -677,19 +462,19 @@ u32 sub_801C308(u8 r0)
s32 sub_801C390(void)
{
return (gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40) + gUnknown_203B23C->unk3C;
return (gUnknown_203B23C->input.unk1E * gUnknown_203B23C->input.unk1C) + gUnknown_203B23C->input.menuIndex;
}
void sub_801C3B0(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B23C->unk60, 0, 0);
gUnknown_203B23C->unk46 = gUnknown_203B23C->numIQSkills;
sub_8013984(&gUnknown_203B23C->unk24);
gUnknown_203B23C->input.unk22 = gUnknown_203B23C->numIQSkills;
sub_8013984(&gUnknown_203B23C->input);
sub_801C440();
sub_801C4C8();
if(r0)
AddMenuCursorSprite(&gUnknown_203B23C->unk24);
AddMenuCursorSprite(&gUnknown_203B23C->input);
}
void sub_801C3F8(void)
@@ -710,13 +495,13 @@ void sub_801C440(void)
{
u16 sVar2;
gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk44;
gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk42;
gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk24.unk20;
gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk24.unk1E;
gUnknown_203B23C->unkC2 = 0xA;
gUnknown_203B23C->unkC3 = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B23C->unk60, 1, 1);
sVar2 = sub_80095E4(gUnknown_203B23C->unk3E, 0xc) + 2;
sVar2 = sub_80095E4(gUnknown_203B23C->unk24.unk1A, 0xc) + 2;
gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unkE = sVar2;
gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unk10 = sVar2;
ResetUnusedInputStruct();
@@ -804,18 +589,18 @@ void sub_801C4C8(void)
sub_8008C54(gUnknown_203B23C->unk58);
sub_80073B8(gUnknown_203B23C->unk58);
x = gUnknown_203B23C->unk42 * 8;
x = gUnknown_203B23C->input.unk1E * 8;
x2 = x;
x2 += 10;
xxx_call_draw_string(x2,0,gUnknown_80DBE08,gUnknown_203B23C->unk58,0);
x += 4;
x2 = x + gUnknown_203B23C->unkC2 * 8;
sub_8012BC4(x2,0,gUnknown_203B23C->unk42 + 1,1,7,
sub_8012BC4(x2,0,gUnknown_203B23C->input.unk1E + 1,1,7,
gUnknown_203B23C->unk58);
for (counter = 0; counter < gUnknown_203B23C->unk3E; counter++) {
for (counter = 0; counter < gUnknown_203B23C->input.unk1A; counter++) {
skillIndex = gUnknown_203B23C->iqSkills
[gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40 + counter];
y = sub_8013800(&gUnknown_203B23C->unk24,counter);
[gUnknown_203B23C->input.unk1E * gUnknown_203B23C->input.unk1C + counter];
y = sub_8013800(&gUnknown_203B23C->input,counter);
strncpy(gUnknown_202DEA8,GetIQSkillName(skillIndex),0x50);
if (IsIQSkillSet((u8 *)&gUnknown_203B23C->pokeStruct->IQSkills,1 << skillIndex)) {
strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE14);
@@ -1002,11 +787,11 @@ bool8 sub_801C8C4(s32 param_1, s32 param_2, struct UnkTextStruct2_sub *param_3,
sub_8012D08(gUnknown_203B244->unk4EC, param_4);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B244->unk4F0,1,1);
sub_8013818(&gUnknown_203B244->unk4B4, sub_801CE58(), param_4, param_2);
sub_8013818(&gUnknown_203B244->input, sub_801CE58(), param_4, param_2);
if (gUnknown_203B248 == gUnknown_203B244->unk0) {
gUnknown_203B244->unk4CC = gUnknown_203B24C;
gUnknown_203B244->unk4D2 = gUnknown_203B24E;
sub_8013984(&gUnknown_203B244->unk4B4);
gUnknown_203B244->input.menuIndex = gUnknown_203B24C;
gUnknown_203B244->input.unk1E = gUnknown_203B24E;
sub_8013984(&gUnknown_203B244->input);
}
sub_801CC38();
sub_801CCD8();
@@ -1021,10 +806,10 @@ bool8 sub_801CA08(u8 param_1)
u32 flag;
if (param_1 == 0) {
sub_8013660(&gUnknown_203B244->unk4B4);
sub_8013660(&gUnknown_203B244->input);
return 0;
}
switch(GetKeyPress(&(gUnknown_203B244->unk4B4)))
switch(GetKeyPress(&(gUnknown_203B244->input)))
{
case 2:
PlayMenuSoundEffect(1);
@@ -1039,7 +824,7 @@ bool8 sub_801CA08(u8 param_1)
if ((temp = sub_801CFE0(index), flag = FALSE, temp != 0) || (flag = (INVENTORY_SIZE > GetNumberOfFilledInventorySlots() + sub_801CFB8())) || flag != 0 ) {
PlayMenuSoundEffect(6);
gUnknown_203B244->unkF4[index] = gUnknown_203B244->unkF4[index] ^ 1;
sub_80138B8(&gUnknown_203B244->unk4B4,0);
sub_80138B8(&gUnknown_203B244->input,0);
sub_801CCD8();
return 1;
}
@@ -1053,7 +838,7 @@ bool8 sub_801CA08(u8 param_1)
return 4;
default:
_0801CAF2:
if (sub_80138B8(&gUnknown_203B244->unk4B4,1) != 0) {
if (sub_80138B8(&gUnknown_203B244->input,1) != 0) {
sub_801CC38();
sub_801CCD8();
return 1;
@@ -1066,19 +851,19 @@ _0801CAF2:
}
u8 sub_801CB24(void) {
return gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + gUnknown_203B244->unk4CC];
return gUnknown_203B244->itemIDs[(gUnknown_203B244->input.unk1E * gUnknown_203B244->input.unk1C) + gUnknown_203B244->input.menuIndex];
}
void sub_801CB5C(u8 r0) {
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B244->unk4F0, 0, 0);
gUnknown_203B244->itemCount = sub_801CE58();
sub_8013984(&gUnknown_203B244->unk4B4);
gUnknown_203B244->input.unk22 = sub_801CE58();
sub_8013984(&gUnknown_203B244->input);
sub_801CC38();
sub_801CCD8();
if(r0)
{
AddMenuCursorSprite(&gUnknown_203B244->unk4B4);
AddMenuCursorSprite(&gUnknown_203B244->input);
}
}
@@ -1086,8 +871,8 @@ void sub_801CBB8(void) {
if(gUnknown_203B244 != NULL)
{
gUnknown_203B248 = gUnknown_203B244->unk0;
gUnknown_203B24C = gUnknown_203B244->unk4CC;
gUnknown_203B24E = gUnknown_203B244->unk4D2;
gUnknown_203B24C = gUnknown_203B244->input.menuIndex;
gUnknown_203B24E = gUnknown_203B244->input.unk1E;
gUnknown_203B244->unk4F0[gUnknown_203B244->unk4E8] = gUnknown_80DBE3C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B244->unk4F0, 1, 1);
@@ -1186,17 +971,17 @@ void sub_801CCD8(void)
sub_80073B8(gUnknown_203B244->unk4E8);
xxx_call_draw_string(10,0,gUnknown_80DBE6C,gUnknown_203B244->unk4E8,0);
sub_8012BC4(gUnknown_203B244->unk550[2] * 8 + 4,0,
gUnknown_203B244->unk4D2 + 1,2,7,gUnknown_203B244->unk4E8);
for(index = 0; index < gUnknown_203B244->unk4CE; index++) {
uVar3 = gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + index];
gUnknown_203B244->input.unk1E + 1,2,7,gUnknown_203B244->unk4E8);
for(index = 0; index < gUnknown_203B244->input.unk1A; index++) {
uVar3 = gUnknown_203B244->itemIDs[(gUnknown_203B244->input.unk1E * gUnknown_203B244->input.unk1C) + index];
sub_8090DC4(buffer,uVar3,0);
y = sub_8013800(&gUnknown_203B244->unk4B4,index);
y = sub_8013800(&gUnknown_203B244->input,index);
xxx_call_draw_string(8,y,buffer,gUnknown_203B244->unk4E8,0);
y2 = sub_8013800(&gUnknown_203B244->unk4B4,index);
y2 = sub_8013800(&gUnknown_203B244->input,index);
sub_8012BC4((gUnknown_203B244->unk4EC->unkC << 3) - 2,y2,
gTeamInventory_203B460->teamStorage[uVar3],3,5,gUnknown_203B244->unk4E8);
if ((sub_801CFE0(uVar3) & 1) != 0) {
sub_8007B7C(gUnknown_203B244->unk4E8,0x8,sub_8013800(&gUnknown_203B244->unk4B4,index), (gUnknown_203B244->unk4EC->unkC + -1) * '\b',10);
sub_8007B7C(gUnknown_203B244->unk4E8,0x8,sub_8013800(&gUnknown_203B244->input,index), (gUnknown_203B244->unk4EC->unkC + -1) * '\b',10);
}
}
sub_80073E0(gUnknown_203B244->unk4E8);
@@ -1307,42 +1092,42 @@ struct unkStruct_203B244 *sub_801D008(void)
bool8 sub_801D014(struct PokemonStruct *param_1)
{
s32 index;
struct PokemonStruct *pokemon;
struct unk_203B250 *preload;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8);
gUnknown_203B250->menuAction = gUnknown_203B254;
gUnknown_203B250->unk0 = param_1;
if (gUnknown_203B250->unk0 != NULL) {
for(index = 0; index < NUM_MONSTERS; index++)
{
preload = gUnknown_203B250;
pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here
if(preload->unk0 == pokemon)
s32 index;
struct PokemonStruct *pokemon;
struct unk_203B250 *preload;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8);
gUnknown_203B250->menuAction = gUnknown_203B254;
gUnknown_203B250->pokeStruct = param_1;
if (gUnknown_203B250->pokeStruct != NULL) {
for(index = 0; index < NUM_MONSTERS; index++)
{
preload->index = index;
break;
preload = gUnknown_203B250;
pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here
if(preload->pokeStruct == pokemon)
{
preload->index = index;
break;
}
}
}
}
else {
gUnknown_203B250->index = NUM_MONSTERS;
}
gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728());
gUnknown_203B250->unk8 = 0;
gUnknown_203B250->unk9 = 0;
gUnknown_203B250->unkC = GetPlayerPokemonStruct();
gUnknown_203B250->unk7 = 0;
if (gUnknown_203B250->unk0 != 0) {
sub_801D208(5);
}
else {
sub_801D208(0);
}
return 1;
}
else {
gUnknown_203B250->index = NUM_MONSTERS;
}
gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728());
gUnknown_203B250->unk8 = 0;
gUnknown_203B250->unk9 = 0;
gUnknown_203B250->unkC = GetPlayerPokemonStruct();
gUnknown_203B250->unk7 = 0;
if (gUnknown_203B250->pokeStruct != NULL) {
sub_801D208(5);
}
else {
sub_801D208(0);
}
return 1;
}
u32 sub_801D0DC(void)
@@ -1390,10 +1175,8 @@ u32 sub_801D0DC(void)
u32 sub_801D178(void)
{
struct unk_203B250 *preload;
struct PokemonStruct *pokeStruct;
preload = gUnknown_203B250;
if (gUnknown_203B250->unk9 != 0)
{
return 2;
@@ -1406,12 +1189,12 @@ u32 sub_801D178(void)
{
return 1;
}
else if (preload->unkC != GetPlayerPokemonStruct())
else if (gUnknown_203B250->unkC != GetPlayerPokemonStruct())
{
goto _ret4;
}
else if (sub_80A7AE8(7) < 0)
{
{
return 0;
}
else if((pokeStruct = sub_808D3F8(), (pokeStruct->unk0 >> 1 & 1) == 0))

View File

@@ -3,8 +3,10 @@
#include "constants/friend_area.h"
#include "constants/input.h"
#include "file_system.h"
#include "friend_list_menu.h"
#include "item.h"
#include "menu.h"
#include "pokemon.h"
#include "team_inventory.h"
#include "memory.h"
#include "input.h"
@@ -16,14 +18,7 @@
struct unkStruct_203B258
{
// size: 0xA0
u8 fill0[0x18];
u16 unk18;
u16 unk1A;
s16 unk1C;
s16 unk1E;
s16 unk20;
u16 unk22;
u8 unk24[0x34 - 0x24];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
@@ -34,15 +29,15 @@ extern struct unkStruct_203B258 *gUnknown_203B258;
extern struct UnkTextStruct2 gUnknown_80DBF88;
extern struct UnkTextStruct2 gUnknown_80DBF70;
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013878(void *, s32);
extern u8 sub_80138B8(void *, u32);
extern u32 GetKeyPress(void *);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern void sub_8013878(struct MenuInputStruct *, s32);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern u32 GetKeyPress(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern void sub_801DB54();
extern void sub_801DBD4();
extern void sub_8013984(void *);
extern void AddMenuCursorSprite(void *);
extern void sub_8013984(struct MenuInputStruct *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u32 sub_801BF48(void);
extern void sub_801BF98(void);
@@ -55,9 +50,6 @@ extern u32 sub_8022860();
extern void sub_8022908();
extern u32 sub_80244E4(void);
extern void sub_802453C(void);
extern u32 sub_8025354(void);
extern u8 sub_802540C(void);
extern void sub_8025418(void);
extern u32 sub_8025F68();
extern u8 sub_802604C();
extern void sub_8026058();
@@ -65,6 +57,7 @@ extern void sub_8027168();
extern u32 sub_80270A4();
extern u32 sub_802C898(void);
extern void sub_802C8F4(void);
extern void InitializeJobListMenu(u32);
extern const char *sub_8098FB4();
extern void xxx_format_string(const char *, u8 *, u32 **, u32);
@@ -80,8 +73,18 @@ extern void sub_8007E20(u32, u32, u32, u32, u32, u8 *, u32);
extern struct FileArchive gTitleMenuFileArchive;
extern const char gTeamRankBadgeFileName;
extern u8 gAvailablePokemonNames[];
extern char gUnknown_80DBF3C[];
extern char gUnknown_80DBF4C[];
extern u8 gMenuItems[];
extern u8 gMenuJobList[];
extern u8 gMenuTeam[];
extern u8 gMenuOthers[];
extern u8 *gUnknown_80D49B4[];
extern u8 gUnknown_80DBF34[];
extern u8 *gUnknown_80D49A8[];
extern u8 *gUnknown_80D4970[];
struct TeamBadgeData
{
@@ -91,13 +94,12 @@ struct TeamBadgeData
struct unk_203B250
{
u32 unk0;
u16 unk4;
struct PokemonStruct *pokeStruct;
s16 index;
/* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area
u8 unk7;
u8 unk8;
u8 unk9;
u8 fillA[0xC - 0xA];
struct PokemonStruct *unkC;
u32 state;
u32 menuAction;
@@ -109,13 +111,154 @@ struct unk_203B250
struct unk_203B250 *gUnknown_203B250;
extern bool8 HasNoAcceptedJobs(void);
extern bool8 sub_8024108(u32);
extern bool8 sub_8096E2C(void);
extern bool8 sub_80023E4(u32);
extern u32 sub_801DCC4(void);
extern u32 sub_8027074(void);
extern void sub_80227B8(struct PokemonStruct *);
extern bool8 sub_8024458(s16, u32);
extern bool8 sub_801BEEC(s16);
extern void sub_8021774(u8, u32, u32);
void sub_801D894(void);
u32 sub_8025EF4(struct PokemonStruct *);
void sub_801D3A8(void)
{
switch(gUnknown_203B250->state)
{
case 0:
case 1:
if(gUnknown_203B250->pokeStruct != NULL)
{
PrintColoredPokeNameToBuffer(gAvailablePokemonNames, gUnknown_203B250->pokeStruct, 7);
gUnknown_203B250->unk18.unk0 = gAvailablePokemonNames;
sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0);
}
else {
sub_801D894();
sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0);
}
break;
case 3:
sub_80227B8(gUnknown_203B250->pokeStruct);
break;
case 4:
sub_8027074();
break;
case 5:
sub_8025EF4(gUnknown_203B250->pokeStruct);
break;
case 6:
sub_80252F0(0);
break;
case 7:
sub_80252F0(1);
break;
case 8:
sub_8024458(gUnknown_203B250->index, 2);
break;
case 9:
sub_801BEEC(gUnknown_203B250->index);
break;
case 10:
sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2);
break;
case 11:
InitializeJobListMenu(0);
break;
case 12:
sub_801DCC4();
break;
}
}
void sub_801D4C0(void)
{
s32 index;
s32 loopMax;
loopMax = 0;
MemoryFill16(gUnknown_203B250->unkA8,0,sizeof(gUnknown_203B250->unkA8));
if (gUnknown_203B250->currFriendAreaLocation == 0) {
if (sub_8096E2C()) {
gUnknown_203B250->unk68[loopMax].menuAction = 2;
gUnknown_203B250->unk68[loopMax].text = gMenuItems;
if (GetNumberOfFilledInventorySlots() == 0) {
gUnknown_203B250->unkA8[loopMax] = 1;
}
loopMax++;
gUnknown_203B250->unk68[loopMax].text = gMenuTeam;
gUnknown_203B250->unk68[loopMax].menuAction = 4;
loopMax++;
if (sub_80023E4(2)) {
gUnknown_203B250->unk68[loopMax].text = gMenuJobList;
gUnknown_203B250->unk68[loopMax].menuAction = 9;
if (HasNoAcceptedJobs()) {
gUnknown_203B250->unkA8[loopMax] = 1;
}
loopMax++;
}
}
gUnknown_203B250->unk68[loopMax].text = gMenuOthers;
gUnknown_203B250->unk68[loopMax].menuAction = 0xb;
loopMax++;
}
else {
strcpy(gAvailablePokemonNames,gUnknown_80DBF34);
if (sub_8096E2C()) {
gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49A8;
gUnknown_203B250->unk68[loopMax].menuAction = 5;
if (sub_8024108(4)) {
gUnknown_203B250->unkA8[loopMax] = 1;
}
loopMax++;
gUnknown_203B250->unk68[loopMax].menuAction = 2;
gUnknown_203B250->unk68[loopMax].text = gMenuItems;
if (GetNumberOfFilledInventorySlots() == 0) {
gUnknown_203B250->unkA8[loopMax] = 1;
}
loopMax++;
}
gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D4970;
gUnknown_203B250->unk68[loopMax].menuAction = 8;
loopMax++;
gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49B4;
gUnknown_203B250->unk68[loopMax].menuAction = 10;
loopMax++;
}
gUnknown_203B250->unk68[loopMax].text = NULL;
gUnknown_203B250->unk68[loopMax].menuAction = 1;
for(index = 0; index < loopMax; index++)
{
if(gUnknown_203B250->unkA8[index] == 0)
{
if(gUnknown_203B250->unk68[index].menuAction == gUnknown_203B250->menuAction)
{
return;
}
}
}
for(index = 0; index < loopMax; index++)
{
if(gUnknown_203B250->unkA8[index] == 0)
{
gUnknown_203B250->menuAction = gUnknown_203B250->unk68[index].menuAction;
break;
}
}
}
void sub_801D680(void)
{
int menuAction;
menuAction = 0;
if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) {
if (!(sub_8012FD8(&gUnknown_203B250->unk18)) && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) {
gUnknown_203B250->menuAction = menuAction;
}
switch(menuAction) {
@@ -381,7 +524,7 @@ u32 sub_801D9E4(void)
gUnknown_203B258->unk38->unk14 = gUnknown_203B258->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B258->unk3C,1,1);
sub_8013818(gUnknown_203B258,0xe5,10,gUnknown_203B258->unk34);
sub_8013818(&gUnknown_203B258->input,0xe5,10,gUnknown_203B258->unk34);
sub_801DB54();
sub_801DBD4();
return 1;
@@ -391,14 +534,14 @@ void sub_801DA58(s16 param_0)
{
s32 cast;
cast = param_0;
sub_8013878(gUnknown_203B258, cast);
sub_8013878(&gUnknown_203B258->input, cast);
sub_801DB54();
sub_801DBD4();
}
u32 sub_801DA78(void)
{
switch(GetKeyPress(gUnknown_203B258))
switch(GetKeyPress(&gUnknown_203B258->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -406,7 +549,7 @@ u32 sub_801DA78(void)
case INPUT_A_BUTTON:
return 3;
default:
if(sub_80138B8(gUnknown_203B258, 1) != 0)
if(sub_80138B8(&gUnknown_203B258->input, 1) != 0)
{
sub_801DB54();
sub_801DBD4();
@@ -420,17 +563,17 @@ u32 sub_801DA78(void)
s16 sub_801DAC0(void)
{
return (gUnknown_203B258->unk1E * gUnknown_203B258->unk1C) + gUnknown_203B258->unk18;
return (gUnknown_203B258->input.unk1E * gUnknown_203B258->input.unk1C) + gUnknown_203B258->input.menuIndex;
}
void sub_801DADC(u8 r0)
{
gUnknown_203B258->unk22 = 0xE5;
sub_8013984(gUnknown_203B258);
gUnknown_203B258->input.unk22 = 0xE5;
sub_8013984(&gUnknown_203B258->input);
sub_801DB54();
sub_801DBD4();
if(r0)
AddMenuCursorSprite(gUnknown_203B258);
AddMenuCursorSprite(&gUnknown_203B258->input);
}
void sub_801DB0C(void)

View File

@@ -3,26 +3,7 @@
#include "text.h"
#include "memory.h"
#include "input.h"
struct unkStruct_203B270
{
// size 0xBC
u32 unk0;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
/* 0x8 */ struct PokemonStruct *pokeStruct;
/* 0xC */ u8 isTeamLeader;
/* 0x10 */ struct Move *moves;
u8 fill14[0x1C - 0x14];
u32 unk1C;
u8 fill20[0x50 - 0x20];
u32 unk50;
u32 unk54;
struct UnkTextStruct2 unk58[4];
u32 unkB8;
};
#include "code_801EE10.h"
extern struct unkStruct_203B270 *gUnknown_203B270;
extern struct UnkTextStruct2 gUnknown_80DC25C;
@@ -32,10 +13,10 @@ extern void sub_8012D08(void *, u32);
extern void sub_8013818(void *, u32, u32, u32);
u32 sub_8006544(u32 index);
s32 sub_801F3F8(void);
void sub_8013780(u32 *, u32);
void sub_8013780(struct MenuInputStruct*, u32);
void sub_801F280(u32);
u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_5,u32 param_6)
u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_5,u32 param_6)
{
s32 iVar5;
s32 iVar8;
@@ -82,8 +63,8 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_
sub_8012D08(&gUnknown_203B270->unk58[gUnknown_203B270->unk50],iVar8);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B270->unk58,1,1);
sub_8013818(&gUnknown_203B270->unk1C,iVar5,iVar5,param_6);
sub_8013780(&gUnknown_203B270->unk1C,0);
sub_8013818(&gUnknown_203B270->input,iVar5,iVar5,param_6);
sub_8013780(&gUnknown_203B270->input,0);
sub_801F280(1);
return 1;
}

View File

@@ -8,10 +8,7 @@
struct unkStruct_203B2AC
{
u8 unk0[0x1E];
s16 unk1E;
s16 unk20;
u8 unk22[0x34 - 0x22];
struct MenuInputStruct input;
u32 unk34[3];
u8 unk40[0x48 - 0x40];
s16 speciesNum;
@@ -48,15 +45,15 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60;
extern struct UnkTextStruct2 gUnknown_80DC9B0;
extern struct UnkTextStruct2 gUnknown_80DC9C8;
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern bool8 sub_80023E4(u32);
extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8);
extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32);
extern s32 GetKeyPress(void *);
extern bool8 sub_8013938(void *);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern bool8 sub_8013938(struct MenuInputStruct*);
extern void sub_802452C(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(void *);
extern void sub_8013984(struct MenuInputStruct*);
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
bool8 ComparePokemonNames(s16 a1, s16 a2);
@@ -237,13 +234,13 @@ bool8 sub_8024458(s16 speciesNum, s32 param_2)
gUnknown_203B2AC->unk148[2] = 10;
sub_8024604();
sub_802452C();
sub_8013984(gUnknown_203B2AC);
sub_8013984(&gUnknown_203B2AC->input);
return TRUE;
}
u8 sub_80244E4(void)
{
switch(GetKeyPress(gUnknown_203B2AC))
switch(GetKeyPress(&gUnknown_203B2AC->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -252,7 +249,7 @@ u8 sub_80244E4(void)
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_8013938(gUnknown_203B2AC) != 0) {
if (sub_8013938(&gUnknown_203B2AC->input) != 0) {
sub_802452C();
return 1;
}
@@ -282,8 +279,8 @@ void sub_802453C(void)
void sub_8024588(void)
{
gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20;
gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E;
gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->input.unk20;
gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->input.unk1E;
gUnknown_203B2AC->unk148[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2AC->unkE8,1,1);
@@ -292,8 +289,8 @@ void sub_8024588(void)
void sub_80245D0(void)
{
CreatePokemonInfoTabScreen
(gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E],
gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C,
(gUnknown_203B2AC->unk34[gUnknown_203B2AC->input.unk1E],
gUnknown_203B2AC->input.unk1E,&gUnknown_203B2AC->unk4C,
&gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0);
}
@@ -305,7 +302,7 @@ void sub_8024604(void)
gUnknown_203B2AC->unk34[0] = 2;
gUnknown_203B2AC->unk34[1] = 3;
gUnknown_203B2AC->unk34[2] = 5;
sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0);
sub_8013818(&gUnknown_203B2AC->input,3,1,gUnknown_203B2AC->unkE0);
iVar3 = &gUnknown_203B2AC->unk4C;
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum];
sub_808FF20(iVar3,pokeStruct, sub_80023E4(7));

View File

@@ -5,6 +5,9 @@
#include "input.h"
#include "code_800D090.h"
#include "moves.h"
#include "code_801EE10.h"
extern struct unkStruct_203B270 *gUnknown_203B270;
struct unkStruct_203B274
{
@@ -12,14 +15,7 @@ struct unkStruct_203B274
struct PokemonStruct *pokeStruct;
struct unkStruct_808E218_arg *unk4;
struct unkStruct_808E218_arg unk8;
u32 unk348;
u8 fill34C[0x360 - 0x34C];
s16 unk360;
s16 unk362;
s16 unk364;
s16 unk366;
s16 unk368;
u8 fill36A[0x37C - 0x36A];
struct MenuInputStruct input;
s32 unk37C;
struct UnkTextStruct2 *unk380;
struct UnkTextStruct2 unk384[4];
@@ -31,23 +27,40 @@ extern struct UnkTextStruct2 gUnknown_80DC2AC;
extern u8 gUnknown_80DC2DC[];
extern void sub_8013818(u32 *, u32, u32, u32);
extern s32 GetKeyPress(void *);
extern void sub_8013660(void *);
extern void AddMenuCursorSprite(void *);
extern u8 sub_80138B8(u32 *, u32);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern void sub_8013660(struct MenuInputStruct*);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
extern u8 sub_80138B8(struct MenuInputStruct*, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(void *);
extern void sub_8013984(struct MenuInputStruct*);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(u32 *, s32);
extern s32 sub_8013800(struct MenuInputStruct*, s32);
extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32);
u32 sub_801F7E4(void);
void sub_801F690(void);
void sub_801F700(void);
s32 sub_801F3F8(void)
{
struct Move *move;
int index;
s32 counter;
counter = 0;
for(index = 0; index < 8; index++)
{
move = &gUnknown_203B270->moves[index];
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
counter++;
}
}
return counter;
}
bool8 sub_801F428(s16 index, s32 param_2) {
s32 index_s32 = index;
@@ -65,7 +78,7 @@ bool8 sub_801F428(s16 index, s32 param_2) {
gUnknown_203B274->unk3E4[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B274->unk384, 1, 1);
sub_8013818(&gUnknown_203B274->unk348, sub_801F7E4(), 4, param_2);
sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2);
sub_801F690();
sub_801F700();
return 1;
@@ -74,11 +87,11 @@ bool8 sub_801F428(s16 index, s32 param_2) {
u32 sub_801F520(u8 param_1)
{
if (param_1 == 0) {
sub_8013660(&gUnknown_203B274->unk348);
sub_8013660(&gUnknown_203B274->input);
return 0;
}
else {
switch(GetKeyPress(&gUnknown_203B274->unk348))
switch(GetKeyPress(&gUnknown_203B274->input))
{
case 2:
PlayMenuSoundEffect(1);
@@ -92,7 +105,7 @@ u32 sub_801F520(u8 param_1)
default:
break;
}
if (sub_80138B8(&gUnknown_203B274->unk348,1) != 0) {
if (sub_80138B8(&gUnknown_203B274->input,1) != 0) {
sub_801F690();
sub_801F700();
return 1;
@@ -105,18 +118,18 @@ u32 sub_801F520(u8 param_1)
u16 sub_801F5B4(void)
{
return gUnknown_203B274->unk4->unk0[gUnknown_203B274->unk366 * gUnknown_203B274->unk364 + gUnknown_203B274->unk360];
return gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + gUnknown_203B274->input.menuIndex];
}
void sub_801F5F0(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B274->unk384, 0, 0);
sub_8013984(&gUnknown_203B274->unk348);
sub_8013984(&gUnknown_203B274->input);
sub_801F690();
sub_801F700();
if(r0)
AddMenuCursorSprite(&gUnknown_203B274->unk348);
AddMenuCursorSprite(&gUnknown_203B274->input);
}
void sub_801F63C(void)
@@ -196,12 +209,12 @@ void sub_801F700(void)
sub_8008C54(gUnknown_203B274->unk37C);
sub_80073B8(gUnknown_203B274->unk37C);
sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->unk366 + 1,gUnknown_203B274->unk368); // Moves Page: %d/%d
sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->input.unk1E + 1,gUnknown_203B274->input.unk20); // Moves Page: %d/%d
xxx_call_draw_string(0x10,0,buffer1,gUnknown_203B274->unk37C,0);
for(index = 0; index < gUnknown_203B274->unk362; index++)
for(index = 0; index < gUnknown_203B274->input.unk1A; index++)
{
sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->unk366 * gUnknown_203B274->unk364 + index]);
y = sub_8013800(&gUnknown_203B274->unk348, index);
sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + index]);
y = sub_8013800(&gUnknown_203B274->input, index);
xxx_call_draw_string(8,y,buffer2,gUnknown_203B274->unk37C,0);
}
sub_80073E0(gUnknown_203B274->unk37C);

View File

@@ -4,6 +4,7 @@
#include "memory.h"
#include "menu.h"
#include "pokemon.h"
#include "pokemon_3.h"
#include "team_inventory.h"
#include "text.h"
#include "input.h"
@@ -21,13 +22,7 @@ struct unkStruct_3001B5C
u8 fill14[0x354 - 0x14];
u8 unk354;
u8 fill355[0x35C - 0x355];
u8 unk35C;
u8 fill35D[0x374 - 0x35D];
s16 unk374;
s16 unk376;
s16 unk378;
s16 unk37A;
u8 fill37C[0x390 - 0x37C];
struct MenuInputStruct input;
u32 unk390;
struct UnkTextStruct2 *unk394;
struct UnkTextStruct2 unk398[4];
@@ -42,17 +37,21 @@ extern u16 gUnknown_203B29E;
extern struct UnkTextStruct2 gUnknown_80DC91C;
extern struct UnkTextStruct2 gUnknown_80DC904;
void sub_8023758(void);
void sub_80237E0(void);
extern bool8 sub_8098134(s32);
extern void sub_8023730(void);
extern u8 sub_8023704(u8);
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013984(u8 *);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern void sub_8013984(struct MenuInputStruct*);
extern void sub_8023420(void);
extern void sub_80234BC(void);
extern u32 sub_80236A4(void);
extern u8 sub_80138B8(void *, u32);
extern u8 sub_80138B8(struct MenuInputStruct*, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(void *);
extern void sub_8013660(void *);
extern void AddMenuCursorSprite(void *);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern void sub_8013660(struct MenuInputStruct*);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
struct unkStruct_203B294
{
@@ -331,10 +330,10 @@ bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 pa
sub_8012D08(gUnknown_3001B5C->unk394,param_4);
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,1,1);
sub_8013818(&gUnknown_3001B5C->unk35C,sub_80236A4(),param_4,index);
gUnknown_3001B5C->unk374 = gUnknown_203B29C;
gUnknown_3001B5C->unk37A = gUnknown_203B29E;
sub_8013984(&gUnknown_3001B5C->unk35C);
sub_8013818(&gUnknown_3001B5C->input,sub_80236A4(),param_4,index);
gUnknown_3001B5C->input.menuIndex = gUnknown_203B29C;
gUnknown_3001B5C->input.unk1E = gUnknown_203B29E;
sub_8013984(&gUnknown_3001B5C->input);
sub_8023420();
sub_80234BC();
return 1;
@@ -347,10 +346,10 @@ u8 sub_8023278(u8 param_1)
u32 temp;
if (param_1 == 0) {
sub_8013660(&gUnknown_3001B5C->unk35C);
sub_8013660(&gUnknown_3001B5C->input);
return 0;
}
switch(GetKeyPress(&gUnknown_3001B5C->unk35C))
switch(GetKeyPress(&gUnknown_3001B5C->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -367,7 +366,7 @@ u8 sub_8023278(u8 param_1)
sub_80236A4();
break;
default:
if (sub_80138B8(&gUnknown_3001B5C->unk35C, 1) == 0) {
if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) {
return 0;
}
break;
@@ -379,18 +378,18 @@ u8 sub_8023278(u8 param_1)
s16 sub_802331C(void)
{
return gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk37A * gUnknown_3001B5C->unk378 + gUnknown_3001B5C->unk374];
return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex];
}
void sub_8023354(u8 param_1)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,0,0);
sub_8013984(&gUnknown_3001B5C->unk35C);
sub_8013984(&gUnknown_3001B5C->input);
sub_8023420();
sub_80234BC();
if (param_1 != 0) {
AddMenuCursorSprite(&gUnknown_3001B5C->unk35C);
AddMenuCursorSprite(&gUnknown_3001B5C->input);
}
}
@@ -399,8 +398,8 @@ void sub_80233A0(void)
{
if (gUnknown_3001B5C != NULL) {
gUnknown_203B298 = gUnknown_3001B5C->unk4;
gUnknown_203B29C = gUnknown_3001B5C->unk374;
gUnknown_203B29E = gUnknown_3001B5C->unk37A;
gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex;
gUnknown_203B29E = gUnknown_3001B5C->input.unk1E;
gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904;
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,1,1);
@@ -408,3 +407,192 @@ void sub_80233A0(void)
gUnknown_3001B5C = NULL;
}
}
NAKED
void sub_8023420(void)
{
asm_unified(
"\tpush {r4,r5,lr}\n"
"\tldr r4, _080234A8\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0xFE\n"
"\tlsls r1, 2\n"
"\tadds r0, r1\n"
"\tmovs r2, 0\n"
"\tmovs r1, 0x1\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tldr r1, _080234AC\n"
"\tadds r0, r1\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r1, 0x1\n"
"\tadds r0, r1\n"
"\tmovs r1, 0xC\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tldr r1, _080234B0\n"
"\tadds r0, r1\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tldr r2, _080234B4\n"
"\tadds r0, r2\n"
"\tmovs r1, 0\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tldr r3, [r4]\n"
"\tmovs r2, 0xE4\n"
"\tlsls r2, 2\n"
"\tadds r5, r3, r2\n"
"\tldr r2, [r5]\n"
"\tlsls r1, r2, 1\n"
"\tadds r1, r2\n"
"\tlsls r1, 3\n"
"\tadds r1, r3, r1\n"
"\tldr r2, _080234B8\n"
"\tadds r1, r2\n"
"\tlsls r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r2, [r5]\n"
"\tlsls r1, r2, 1\n"
"\tadds r1, r2\n"
"\tlsls r1, 3\n"
"\tadds r3, r1\n"
"\tmovs r1, 0xEA\n"
"\tlsls r1, 2\n"
"\tadds r3, r1\n"
"\tstrh r0, [r3]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tmovs r2, 0xE6\n"
"\tlsls r2, 2\n"
"\tadds r0, r2\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4,r5}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_080234A8: .4byte gUnknown_3001B5C\n"
"_080234AC: .4byte 0x000003f9\n"
"_080234B0: .4byte 0x000003fb\n"
"_080234B4: .4byte 0x00000376\n"
"_080234B8: .4byte 0x000003a6");
}
extern u8 gUnknown_80DC934[];
struct unkStruct_8092638
{
u32 unk0;
u8 unk4;
u32 unk5;
};
extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
void sub_808D930(u8 *buffer, s32 index);
extern s32 sub_8013800(void *, u32);
bool8 HasRecruitedMon(s16 species_);
extern u8 gUnknown_80DC93C[];
void sprintfStatic(char *buffer, const char *text, ...);
void sub_80234BC(void)
{
u8 cVar2;
u32 y;
s32 uVar3;
s32 iVar4;
s32 species;
u32 color;
s32 index;
u8 buffer2 [256];
u8 buffer1 [100];
struct unkStruct_8092638 auStack_2c;
sub_8008C54(gUnknown_3001B5C->unk390);
sub_80073B8(gUnknown_3001B5C->unk390);
xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon
sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0,
gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390);
for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++)
{
y = sub_8013800(&gUnknown_3001B5C->input,index);
species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)];
sub_8092638(GetFriendArea(species),&auStack_2c,0,0);
color = 7;
if (auStack_2c.unk4 != 0) {
color = HasRecruitedMon(species) ? 5 : 4;
}
iVar4 = GetDexInternalNo(species,0);
cVar2 = (iVar4 % 10) + 0x30;
sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390);
if (9 < iVar4) {
iVar4 /= 10;
cVar2 = (iVar4 % 10) + 0x30;
sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390);
if (9 < iVar4) {
uVar3 = iVar4 / 10;
cVar2 = (uVar3 % 10) + 0x30;
sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390);
}
}
sub_808D930(buffer1,species);
sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s
xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0);
}
sub_80073E0(gUnknown_3001B5C->unk390);
}
u32 sub_80236A4(void)
{
s16 index_s32;
int index;
s32 temp;
gUnknown_3001B5C->unk8 = 0;
for(index = 0; index < 0x1a8; index++)
{
index_s32 = index;
if ((sub_8098134(index_s32)) &&
(index_s32 == GetBaseSpeciesNoUnown(index_s32))) {
temp = gUnknown_3001B5C->unk8;
gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8] = index;
gUnknown_3001B5C->unk8 = temp + 1;
}
}
sub_8023730();
return gUnknown_3001B5C->unk8;
}
bool8 sub_8023704(u8 unused)
{
s32 index;
for(index = 0; index < 0x1a8; index++)
{
if (sub_8098134((s16)index))
return FALSE;
}
return TRUE;
}
void sub_8023730(void)
{
switch(gUnknown_3001B5C->unk4)
{
case 1:
sub_8023758();
break;
case 2:
sub_80237E0();
break;
}
}

184
src/code_8031D70.c Normal file
View File

@@ -0,0 +1,184 @@
#include "global.h"
#include "constants/wonder_mail.h"
#include "constants/colors.h"
#include "input.h"
#include "memory.h"
#include "text.h"
#include "dungeon_global_data.h"
#include "pokemon.h"
#include "code_8094F88.h"
#include "menu_input.h"
struct unkStruct_203B334
{
// size: 0x7C
u32 mailIndex;
u32 unk4;
u8 fill8[0x10 - 0x8];
u32 unk10;
struct UnkTextStruct2 *unk14;
struct UnkTextStruct2 unk18[4];
u8 unk78[4];
};
EWRAM_DATA_2 struct unkStruct_203B334 *gUnknown_203B334 = {0};
extern struct unkStruct_203B480 *gUnknown_203B480;
const struct UnkTextStruct2 gUnknown_80E1FA8 = {
0, 0, 0, 0,
3,
0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0, 0,
NULL
};
const u8 gUnkData_80E1FC0[4] = {0x01, 0x00, 0x0A, 0x00};
const struct UnkTextStruct2 gUnknown_80E1FC4 = {
0, 0, 0, 0,
6,
0x2, 0x0, 0x2, 0x0,
0x1A, 0xA,
0xA, 0,
gUnkData_80E1FC0
};
ALIGNED(4) const u8 gUnknown_80E1FDC[] = "Password";
ALIGNED(4) static const u8 fill0[] = "pksdir0";
extern void xxx_call_draw_string(s32, s32, const u8 *, s32, s32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void sub_80078A4(u32, u32, u32, u32, u32);
extern void sub_803D2C0(u8 *, struct unkStruct_203B480 *);
extern void sub_801317C(u32 *);
extern u32 sub_8012A64(u32 *, u32);
extern void PlayMenuSoundEffect(u32);
void sub_8031E00(void);
void sub_8031E58(void);
void DrawSOSPasswordScreen(void);
bool8 sub_8031D70(u32 mailIndex, s32 param_2)
{
gUnknown_203B334 = MemoryAlloc(sizeof(struct unkStruct_203B334),8);
gUnknown_203B334->mailIndex = mailIndex;
sub_801317C(&gUnknown_203B334->unk4);
gUnknown_203B334->unk10 = param_2;
gUnknown_203B334->unk14 = &gUnknown_203B334->unk18[param_2];
sub_8006518(gUnknown_203B334->unk18);
gUnknown_203B334->unk18[gUnknown_203B334->unk10] = gUnknown_80E1FC4;
sub_8031E00();
return TRUE;
}
u32 sub_8031DCC(void)
{
switch(sub_8012A64(&gUnknown_203B334->unk4, gUnknown_203B334->unk10))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
default:
return 0;
}
}
void sub_8031E00(void)
{
sub_8031E58();
DrawSOSPasswordScreen();
}
void sub_8031E10(void)
{
if(gUnknown_203B334)
{
gUnknown_203B334->unk18[gUnknown_203B334->unk10] = gUnknown_80E1FA8;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B334->unk18, 1, 1);
MemoryFree(gUnknown_203B334);
gUnknown_203B334 = NULL;
}
}
void sub_8031E58(void)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B334->unk18, 1, 1);
}
void DrawSOSPasswordScreen(void)
{
int rowIndex;
u32 x;
u32 y;
u32 color;
s32 index;
u8 buffer [PASSWORD_BUFFER_SIZE + 2];
struct unkStruct_203B480 *mail;
mail = &gUnknown_203B480[gUnknown_203B334->mailIndex];
sub_80073B8(gUnknown_203B334->unk10);
xxx_call_draw_string(0x14,0,gUnknown_80E1FDC,gUnknown_203B334->unk10,0); // Password
sub_803D2C0(buffer, mail);
for(index = 0; index < PASSWORD_BUFFER_SIZE; index++)
{
if (index < 5) {
color = COLOR_WHITE_2;
y = 0x15;
}
else if (index < 0xd) {
color = COLOR_YELLOW;
y = 0x16;
}
else if (index < 0x12)
{
color = COLOR_WHITE_2;
y = 0x15;
}
else if (index < 0x17) {
color = COLOR_WHITE_2;
y = 0x24;
}
else if (index < 0x1f) {
color = COLOR_YELLOW;
y = 0x25;
}
else if (index < 0x24)
{
color = COLOR_WHITE_2;
y = 0x24;
}
else
{
if(index > 0x28)
{
if(index < 0x31)
{
color = COLOR_YELLOW;
y = 0x34;
}
else
{
color = COLOR_WHITE_2;
y = 0x33;
}
}
else
{
color = COLOR_WHITE_2;
y = 0x33;
}
}
rowIndex = index % 0x12;
x = rowIndex * 0xb + 6;
sub_8012C60(x,y,buffer[index],color,gUnknown_203B334->unk10); // Draw character
sub_80078A4(gUnknown_203B334->unk10,x,y + 0xA,10,COLOR_CYAN); // Draw underscore beneath character
}
sub_80073E0(gUnknown_203B334->unk10);
}

View File

@@ -408,7 +408,7 @@ extern void sub_808692C();
extern void sub_80868F4();
extern void sub_8086910();
extern u32 sub_8085EC8(u32, u32, u32, u32 *, u32);
extern u32 sub_8085EC8(u32, u32, u32, struct Position *, u32);
extern void sub_808680C();
extern void sub_808682C();
extern void sub_8086854();
@@ -417,7 +417,7 @@ extern void sub_8086838(u32, u32, u32);
extern void sub_80426C8(u32, u32);
extern void sub_807EAA0(u32, u32);
extern void sub_808BCE4(void);
extern void CreateJirachiWishWarpTile(void);
extern u8 sub_8098100(u32);
extern void sub_8086794();
@@ -447,7 +447,6 @@ extern u8 sub_8086AE4(u32);
extern void sub_8072008(struct Entity *, struct Entity *, s16, u32, u32);
extern struct Entity *GetPartnerEntity();
extern void sub_80869E4(struct Entity *, u32, u32, u32);
extern void sub_806CDD4(struct Entity *, u32, u32);
extern void sub_8085374();
@@ -486,9 +485,9 @@ void ZapdosScreenFlash(int param_1);
extern s32 sub_8052C68(u32, u8 *, u32 *, u32);
extern void sub_80861A8(void);
extern void sub_8045C28(struct Item *, u8 , u8 *);
extern void sub_808BD38(void);
extern void sub_808BB3C(s16 *);
extern void sub_8046860(struct Entity *, s32 *, struct Item *, u32);
extern void EnableJirachiWishWarpTile(void);
extern void sub_808BB3C(struct Position *);
extern void sub_8046860(struct Entity *, struct Position *, struct Item *, u32);
extern u32 sub_803D73C(u32);
void ZapdosReFightDialogue(void)
@@ -562,20 +561,20 @@ void ZapdosDropInEffect(struct Entity *zapdosEntity)
sub_803E708(0x1e,0x46);
}
void ZapdosScreenFlash(s32 param_1)
void ZapdosScreenFlash(s32 numFlashes)
{
s32 iVar1;
s32 iVar2;
PlaySoundEffect(0x1f6);
if (2 < param_1) {
if (2 < numFlashes) {
for(iVar2 = 250; iVar2 > 199; iVar2 -= 10)
{
SetDungeonBGColorRGB(iVar2,iVar2,iVar2 / 2,1,1);
sub_803E46C(0x46);
}
}
if (1 < param_1) {
if (1 < numFlashes) {
for(iVar2 = 250; iVar2 > 199; iVar2 -= 10)
{
SetDungeonBGColorRGB(iVar2,iVar2,iVar2 / 2,1,1);
@@ -594,8 +593,6 @@ void ZapdosScreenFlash(s32 param_1)
sub_8085EB0();
}
void sub_80877E8(void)
{
struct Entity * LeaderEntity;
@@ -643,11 +640,9 @@ void sub_8087848(void)
CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_MOLTRES);
}
void sub_80878F4(char param_1, s32 param_2)
void sub_80878F4(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xF6000000U) >> 0x18 < 3) && (param_1 == 0x9)) {
if ((param_2 == 0xA || param_2 == 0xB || param_2 == 0xC) && (param_1 == 0x9)) {
sub_8097FA8(0x7);
gDungeon->unk2 = 1;
}
@@ -1062,11 +1057,9 @@ void sub_8087FF8(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_ARTICUNO);
}
void sub_8088088(char param_1, s32 param_2)
void sub_8088088(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xF3000000U) >> 0x18 < 3) && (param_1 == 0xD)) {
if ((param_2 == 0xD || param_2 == 0xE || param_2 == 0xF) && (param_1 == 0xD)) {
sub_8097FA8(0x9);
gDungeon->unk2 = 1;
}
@@ -1376,9 +1369,9 @@ void sub_808875C(void)
CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ALAKAZAM);
}
void sub_8088818(char param_1, s32 param_2)
void sub_8088818(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xEE000000U) >> 0x18 < 3) && (param_1 == 0xE)) {
if ((param_2 == 0x12 || param_2 == 0x13 || param_2 == 0x14) && (param_1 == 0xE)) {
sub_8097FA8(0xC);
gDungeon->unk2 = 1;
}
@@ -1924,9 +1917,9 @@ void sub_8089328(void)
CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_RAYQUAZA);
}
void sub_80893B4(char param_1, s32 param_2)
void sub_80893B4(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xE9000000U) >> 0x18 < 3) && (param_1 == 0xF)) {
if ((param_2 == 0x17 || param_2 == 0x18 || param_2 == 0x19) && (param_1 == 0xF)) {
sub_8097FA8(0xF);
gDungeon->unk2 = 1;
}
@@ -2098,19 +2091,19 @@ void sub_808974C(void)
sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y + -3);
}
void sub_8089788(struct Entity *param_1, u8 param_2, s32 param_3)
void sub_8089788(struct Entity *entity, u8 param_2, u8 param_3)
{
struct Entity *iVar2;
s32 iVar3;
struct Entity *monEntity;
s32 index;
u32 unk1;
unk1 = 0;
if ((((param_3 * 0x1000000) + 0xe6000000U) >> 0x18) < 2) {
for(iVar3 = 0; iVar3 < DUNGEON_MAX_WILD_POKEMON; iVar3++)
if (param_3 == 0x1A || param_3 == 0x1B) {
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
{
iVar2 = gDungeon->wildPokemon[iVar3];
if ((EntityExists(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->info->clientType == param_2)) {
monEntity = gDungeon->wildPokemon[index];
if ((EntityExists(monEntity)) && (monEntity != entity) && (monEntity->info->clientType == param_2)) {
return;
}
}
@@ -2235,9 +2228,9 @@ void sub_8089978(void)
CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_MEWTWO);
}
void sub_8089A00(char param_1, s32 param_2)
void sub_8089A00(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xE3000000U) >> 0x18 < 3) && (param_1 == 0x11)) {
if ((param_2 == 0x1d || param_2 == 0x1e || param_2 == 0x1f) && (param_1 == 0x11)) {
sub_8097FA8(0x13);
gDungeon->unk2 = 1;
}
@@ -2381,16 +2374,14 @@ void sub_8089C90(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_ENTEI);
}
void sub_8089CFC(char param_1,int param_2)
void sub_8089CFC(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xE0000000U) >> 0x18 < 3) && (param_1 == 0x12)) {
if ((param_2 == 0x20 || param_2 == 0x21 || param_2 == 0x22) && (param_1 == 0x12)) {
sub_8097FA8(0x15);
gDungeon->unk2 = 1;
}
}
void EnteiPreFightDialogue(void)
{
struct Entity * LeaderEntity;
@@ -2528,15 +2519,14 @@ void sub_8089F8C(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_RAIKOU);
}
void sub_8089FF0(char param_1,int param_2)
void sub_8089FF0(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xdD000000U) >> 0x18 < 3) && (param_1 == 0x13)) {
if ((param_2 == 0x23 || param_2 == 0x24 || param_2 == 0x25) && (param_1 == 0x13)) {
sub_8097FA8(0x17);
gDungeon->unk2 = 1;
}
}
void RaikouPreFightDialogue(void)
{
struct Entity * LeaderEntity;
@@ -2684,9 +2674,9 @@ void sub_808A308(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SUICUNE);
}
void sub_808A36C(char param_1,int param_2)
void sub_808A36C(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xda000000U) >> 0x18 < 3) && (param_1 == 0x14)) {
if ((param_2 == 0x26 || param_2 == 0x27 || param_2 == 0x28) && (param_1 == 0x14)) {
sub_8097FA8(0x19);
gDungeon->unk2 = 1;
}
@@ -2848,15 +2838,14 @@ void sub_808A668(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_HO_OH);
}
void sub_808A6E8(char param_1, s32 param_2)
void sub_808A6E8(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xd7000000U) >> 0x18 < 2) && (param_1 == 0x15)) {
if ((param_2 == 0x29 || param_2 == 0x2A) && (param_1 == 0x15)) {
sub_8097FA8(0x1A);
gDungeon->unk2 = 1;
}
}
void sub_808A718(void)
{
sub_8086854();
@@ -3034,10 +3023,10 @@ void sub_808AA94(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_LATIOS);
}
void sub_808AAF0(char param_1, s32 param_2)
void sub_808AAF0(u8 param_1, u8 param_2)
{
if ((((param_2 * 0x1000000) + 0xd5000000U) >> 0x18 < 3) && (param_1 == 0x16)) {
sub_8097FA8(0x1c);
if ((param_2 == 0x2B || param_2 == 0x2C || param_2 == 0x2D) && (param_1 == 0x16)) {
sub_8097FA8(0x1C);
gDungeon->unk2 = 1;
}
}
@@ -3047,14 +3036,15 @@ void LatiosPreFightDialogue(void)
struct Entity * LeaderEntity;
struct Entity * LatiosEntity;
struct Position32 local_18;
u32 local_19;
struct Position local_19;
LeaderEntity = xxx_call_GetLeader();
LatiosEntity = GetEntityFromClientType(0x16);
local_18.x = LatiosEntity->pixelPos.x;
local_18.y = LatiosEntity->pixelPos.y + (0x80 << 6);
local_19 = 0x7000fc;
local_19.y = 0x70;
local_19.x = 0xFC;
sub_8085EC8(0x1bd,0,0,&local_19,1);
sub_803E708(0x1e,70);
@@ -3504,7 +3494,7 @@ void sub_808B2F4(void)
LeaderEntity = xxx_call_GetLeader();
JirachiEntity = GetEntityFromClientType(0x1a);
DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST);
sub_808BCE4();
CreateJirachiWishWarpTile();
sub_8049ED4();
sub_80854D4();
sub_8085930(DIRECTION_NORTH);
@@ -3532,7 +3522,7 @@ void sub_808B35C(void)
else {
SetFacingDirection(JirachiEntity, DIRECTION_SOUTH);
sub_8086A3C(JirachiEntity);
sub_808BCE4();
CreateJirachiWishWarpTile();
sub_8049ED4();
}
@@ -3540,94 +3530,30 @@ void sub_808B35C(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_JIRACHI);
}
#ifdef NONMATCHING
void sub_808B3E4(u8 param_1,u8 param_2,u8 param_3)
void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3)
{
u8 uVar1;
// TODO R1 and R2 shifts are switched ordering but matches
if (((((param_2 * 0x1000000) + 0xcf000000U) >> 0x18) < 2) && (param_1 == 0x1A)){
sub_8097FA8(0x1e);
if (param_3 != 0) {
gDungeon->unk2 = 1;
if ((param_2 == 0x31 || param_2 == 0x32) && (param_1 == 0x1A)) {
sub_8097FA8(0x1E);
if(param_3 != 0)
{
gDungeon->unk2 = 1;
}
else {
uVar1 = gDungeon->unk1356C;
if (sub_80860A8(0x36) != 0) {
JirachiWish();
}
else {
sub_808B50C();
}
gDungeon->unk1356C = uVar1;
sub_8040A84();
uVar1 = gDungeon->unk1356C;
if(sub_80860A8(0x36) != 0)
{
JirachiWish();
}
else
{
sub_808B50C();
}
gDungeon->unk1356C = uVar1;
sub_8040A84();
}
}
}
#else
NAKED
void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tlsls r1, 24\n"
"\tlsls r2, 24\n"
"\tlsrs r4, r2, 24\n"
"\tmovs r2, 0xCF\n"
"\tlsls r2, 24\n"
"\tadds r1, r2\n"
"\tlsrs r1, 24\n"
"\tcmp r1, 0x1\n"
"\tbhi _0808B44E\n"
"\tcmp r0, 0x1A\n"
"\tbne _0808B44E\n"
"\tmovs r0, 0x1E\n"
"\tbl sub_8097FA8\n"
"\tcmp r4, 0\n"
"\tbeq _0808B418\n"
"\tldr r0, _0808B414\n"
"\tldr r1, [r0]\n"
"\tmovs r0, 0x1\n"
"\tstrb r0, [r1, 0x2]\n"
"\tb _0808B44E\n"
"\t.align 2, 0\n"
"_0808B414: .4byte gDungeon\n"
"_0808B418:\n"
"\tldr r0, _0808B434\n"
"\tldr r0, [r0]\n"
"\tldr r1, _0808B438\n"
"\tadds r0, r1\n"
"\tldrb r4, [r0]\n"
"\tmovs r0, 0x36\n"
"\tbl sub_80860A8\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbeq _0808B43C\n"
"\tbl JirachiWish\n"
"\tb _0808B440\n"
"\t.align 2, 0\n"
"_0808B434: .4byte gDungeon\n"
"_0808B438: .4byte 0x0001356c\n"
"_0808B43C:\n"
"\tbl sub_808B50C\n"
"_0808B440:\n"
"\tldr r0, _0808B454\n"
"\tldr r0, [r0]\n"
"\tldr r2, _0808B458\n"
"\tadds r0, r2\n"
"\tstrb r4, [r0]\n"
"\tbl sub_8040A84\n"
"_0808B44E:\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0808B454: .4byte gDungeon\n"
"_0808B458: .4byte 0x0001356c");
}
#endif
void JirachiPreFightDialogue(void)
{
@@ -3694,15 +3620,12 @@ void JirachiWish(void)
s32 counter;
u32 direction;
s32 index;
struct Item money [9];
struct Item auStack152 [9];
struct Item itemStack [9];
struct Item strengthItems [9];
s32 local_2c;
s32 local_28;
s32 local_24;
s32 temp;
s32 temp2;
s32 temp3;
struct Position pos1;
struct Position pos2;
struct Position pos3;
JirachiEntity = GetEntityFromClientType(0x1a);
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_JIRACHI);
@@ -3749,25 +3672,20 @@ void JirachiWish(void)
DisplayDungeonDialogue(&gUnknown_810581C);
sub_803E708(10,0x46);
JirachiWishGrantDialogue(JirachiEntity);
for(counter = 0; counter < 6; counter = r8)
{
r8 = counter + 1;
for(index = 0; index < 9; index++)
{
sub_8045C28(&money[index], 0x69, 0);
sub_8045C28(&auStack152[index], ITEM_POKE, 0);
}
temp = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16);
local_2c &= 0xffff0000;
local_2c |= temp;
temp = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000;
local_2c &= 0xffff;
local_2c |= temp;
if ((GetTileSafe((s16)local_2c, local_2c >> 16)->terrainType & 3) != 0) {
pos1.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos1.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileSafe(pos1.x, pos1.y)->terrainType & 3) != 0) {
PlaySoundEffect(0x14c);
sub_808BB3C((s16 *)&local_2c);
sub_8046860(JirachiEntity,&local_2c,money,9);
sub_808BB3C(&pos1);
sub_8046860(JirachiEntity,&pos1,auStack152,9);
}
}
JirachiEntity->info->unk15D = 0;
@@ -3787,17 +3705,13 @@ void JirachiWish(void)
{
sub_8045C28(&itemStack[index], sub_803D73C(0),0);
}
temp2 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16);
local_28 &= 0xffff0000;
local_28 |= temp2;
temp2 = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000;
local_28 &= 0xffff;
local_28 |= temp2;
if ((GetTileSafe((s16)local_28, local_28 >> 16)->terrainType & 3) != 0) {
pos2.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos2.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileSafe(pos2.x, pos2.y)->terrainType & 3) != 0) {
PlaySoundEffect(400);
sub_808BB3C((s16 *)&local_28);
sub_8046860(JirachiEntity,&local_28,itemStack,9);
sub_808BB3C(&pos2);
sub_8046860(JirachiEntity,&pos2,itemStack,9);
}
}
JirachiEntity->info->unk15D = 0;
@@ -3836,25 +3750,22 @@ void JirachiWish(void)
DisplayDungeonDialogue(&gUnknown_8105BA8);
sub_803E708(10,0x46);
JirachiWishGrantDialogue(JirachiEntity);
for(counter = 0; counter < 5; counter++)
{
for(index = 0; index < 4; index++)
{
sub_8045C28(&strengthItems[index],gUnknown_81074FC[DungeonRandInt(8)],0);
}
temp3 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16);
local_24 &= 0xffff0000;
local_24 |= temp3;
temp3 = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000;
local_24 &= 0xffff;
local_24 |= temp3;
if ((GetTileSafe((s16)local_24, local_24 >> 16)->terrainType & 3) != 0) {
pos3.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1);
pos3.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1);
if ((GetTileSafe(pos3.x, pos3.y)->terrainType & 3) != 0) {
PlaySoundEffect(400);
sub_808BB3C((s16 *)&local_24);
sub_8046860(JirachiEntity,&local_24,strengthItems,4);
sub_808BB3C(&pos3);
sub_8046860(JirachiEntity,&pos3,strengthItems,4);
}
}
JirachiEntity->info->unk15D = 0;
@@ -3885,7 +3796,7 @@ void JirachiWish(void)
sub_803E708(10,0x46);
DisplayDungeonDialogue(&gUnknown_810593C);
sub_803E708(10,0x46);
sub_808BD38();
EnableJirachiWishWarpTile();
}
void JirachiReFightDialogue(void)
@@ -3931,37 +3842,27 @@ void JirachiWishGrantFlash(void)
sub_8085EB0();
}
void sub_808BB3C(s16 *param_1)
void sub_808BB3C(struct Position *param_1)
{
#ifndef NONMATCHING
register s32 iVar1 asm("r0");
#else
s32 iVar1;
#endif
s32 uVar2;
u32 local_8;
struct Position local_8;
iVar1 = param_1[0] * 0x1800 + 0xc00;
iVar1 = param_1->x * 0x1800 + 0xc00;
if (iVar1 < 0) {
iVar1 += 0xff;
}
local_8.x = iVar1 >> 8;
iVar1 = param_1->y * 0x1800 + 0x1000;
if (iVar1 < 0) {
iVar1 += 0xff;
}
iVar1 <<= 8;
iVar1 = (u16)(iVar1 >> 16);
uVar2 = (local_8 & 0xffff0000) | iVar1;
local_8 = uVar2;
iVar1 = param_1[1] * 0x1800 + 0x1000;
if (iVar1 < 0) {
iVar1 += 0xff;
}
iVar1 <<= 8;
iVar1 = (u16)(iVar1 >> 0x10);
iVar1 <<= 0x10;
local_8 = (iVar1) | (uVar2 & 0x0000ffff);
local_8.y = iVar1 >> 8;
sub_8085EC8(100,0,0,&local_8,0);
}
@@ -4027,30 +3928,31 @@ void JirachiWishGrantDialogue(struct Entity *jirachiEntity)
JirachiWishGrantFlash();
}
void sub_808BCE4(void)
// Warp Tile is created but not enabled until the Wish is done with EnableJirachiWishWarpTile
void CreateJirachiWishWarpTile(void)
{
struct Tile *puVar1;
struct Tile *tile;
puVar1 = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E);
puVar1->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
puVar1->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
puVar1->terrainType &= ~TERRAIN_TYPE_STAIRS;
tile = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E);
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainType &= ~TERRAIN_TYPE_STAIRS;
sub_8049884();
sub_8049B8C();
sub_8049ED4();
sub_8040A84();
}
void sub_808BD38(void)
void EnableJirachiWishWarpTile(void)
{
struct Tile *puVar1;
struct Tile *tile;
puVar1 = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E);
puVar1->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
puVar1->terrainType |= TERRAIN_TYPE_NORMAL;
puVar1->terrainType &= ~TERRAIN_TYPE_IMPASSABLE_WALL;
puVar1->terrainType |= TERRAIN_TYPE_STAIRS;
puVar1->unk8 = 1;
tile = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E);
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
tile->terrainType |= TERRAIN_TYPE_NORMAL;
tile->terrainType &= ~TERRAIN_TYPE_IMPASSABLE_WALL;
tile->terrainType |= TERRAIN_TYPE_STAIRS;
tile->unk8 = 1;
sub_8049884();
sub_8049B8C();
sub_8049ED4();
@@ -4472,8 +4374,7 @@ void sub_808C5C0(void)
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_CELEBI);
}
// Dummy Celebi Fight Dialogue??
void nullsub_100(u32 r0, u32 r1, u32 r2)
void nullsub_100(u8 r0, u8 r1, u32 r2)
{
}
@@ -4906,17 +4807,17 @@ void sub_808C938(void)
sub_80855E4(sub_808C9B0);
}
void sub_808C948(struct Entity *param_1, u8 param_2)
void sub_808C948(struct Entity *entity, u8 param_2)
{
bool8 flag;
s32 index;
struct Entity *iVar2;
struct Entity *pokeEntity;
if (param_2 == 0x37) {
flag = FALSE;
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++){
iVar2 = gDungeon->wildPokemon[index];
if ((iVar2 != param_1) && (EntityExists(iVar2) != 0)) {
pokeEntity = gDungeon->wildPokemon[index];
if ((pokeEntity != entity) && (EntityExists(pokeEntity))) {
flag = TRUE;
break;
}

View File

@@ -17,6 +17,8 @@
#include "item.h"
#include "moves.h"
#include "move_effects_target.h"
#include "move_util.h"
#include "number_util.h"
#include "status.h"
#include "status_actions.h"
#include "tile_types.h"
@@ -94,14 +96,12 @@ extern s16 gUnknown_80F501A[];
extern u32 sub_8055864(struct Entity *pokemon, struct Entity *target, struct Move *param_3, s32 param_4, s32 param_5);
extern void sub_80943A0(void*, s32);
s32 RoundUpFixedPoint(s32 fixedPointNumber);
extern s16 sub_8057600(struct Move*, u32);
extern void sub_806CDD4(struct Entity *, u32, u32);
extern u8 sub_8044B28(void);
extern u8 sub_803F428(struct Position *pos);
extern void IncreaseEntityPixelPos(struct Entity *, u32, u32);
extern void sub_803E46C(u32);
bool8 sub_80571F0(struct Entity * pokemon, struct Move *move);
extern void sub_807EC28(u32);
extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
void sub_8075900(struct Entity *pokemon, u8 r1);
@@ -116,11 +116,9 @@ void sub_80522F4(struct Entity *r0, struct Entity *r1, char r2[]);
extern void sub_806A6E8(struct Entity *);
extern u32 sub_8055640(struct Entity *, struct Entity *, struct Move *, u32, u32);
extern void sub_807EA30(u32);
extern bool8 sub_805727C(struct Entity *, struct Entity *, s16);
extern void sub_806ABAC(struct Entity *, struct Entity *);
extern u8 sub_807EAA0(u32, u32);
extern void sub_8045C28(struct Item *, u8 , u8);
extern u8 sub_8057308(struct Entity *, u32);
extern void sub_805A7D4(struct Entity *, struct Entity *, struct Item *, struct Position *);
extern void sub_8045394(struct Entity *, s32, s32);
extern void sub_804652C(struct Entity *, struct Entity *, struct Item *, u32, struct Position *);

View File

@@ -8,6 +8,7 @@
#include "dungeon_pokemon_attributes.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
#include "move_effects_target.h"
#include "pokemon.h"
#include "weather.h"
#include "game_options.h"
@@ -36,7 +37,6 @@ void sub_80522F4(struct Entity *r0, struct Entity *r1, const char r2[]);
extern void sub_8042900(struct Entity *r0);
extern void sub_8042968(struct Entity *r0);
extern void sub_806ABAC(struct Entity *, struct Entity *);
extern void PausedStatusTarget(struct Entity *, struct Entity *,u32,u32,u32);
void sub_8041BBC(struct Entity *r0);
extern u8 sub_8045888(struct Entity *);
extern void sub_806A2BC(struct Entity *, u8);

View File

@@ -6,16 +6,77 @@
#include "dungeon_util.h"
#include "pokemon.h"
#include "tile_types.h"
#include "random.h"
extern u8 sub_806CEBC(struct Entity *);
extern void sub_806CCB4(struct Entity *, u8);
extern void sub_803E46C(u32);
extern bool8 sub_808DA44(s32 a1_, u32 a2_);
extern u32 sub_806CF98(struct Entity *);
extern u32 sub_80687D0(s16);
void sub_80053AC(u8 *, s32, u32, u32, u32, u32, u8);
void sub_806CDD4(struct Entity *, u8, u32);
extern const u8 gUnknown_8106EEF[];
extern const u8 gDungeonWaterType[];
void sub_806CC10(void)
{
struct EntityInfo *entityInfo;
struct Entity *entity;
s32 index;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeon->allPokemon[index];
if (EntityExists(entity)) {
entityInfo = entity->info;
if ((entityInfo->unk166 != 0) && (entityInfo->unk166--, (entityInfo->unk166 & 1) == 0)) {
sub_806CDD4(entity,0, (entityInfo->action.direction - 1) & 7);
}
}
}
}
void sub_806CC70(void)
{
s32 index;
struct Entity *entity;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeon->allPokemon[index];
if(EntityExists(entity))
sub_806CCB4(entity, sub_806CEBC(entity));
}
}
void sub_806CCB4(struct Entity *entity, u8 param_2)
{
s32 sVar1;
bool8 flag;
struct EntityInfo *info;
info = entity->info;
flag = gDungeon->hallucinating;
if (entity == gDungeon->cameraTarget) {
flag = FALSE;
}
entity->unk6B = param_2;
entity->unk6A = param_2;
entity->direction2 = info->action.direction;
entity->direction = info->action.direction;
entity->unk6F = 0;
sVar1 = entity->unk68;
if ((info->waitingStatus != STATUS_DECOY) && (!flag)) {
sub_80053AC(entity->fill28,entity->unk64,entity->unk6A,entity->direction,sVar1,Rand32Bit() & 3,0);
}
else {
sub_80053AC(entity->fill28,sub_80687D0(0x1a5),entity->unk6A,entity->direction,sVar1,Rand32Bit() & 3,0);
}
entity->unk6E = 0;
}
void sub_806CD90(void)
{
s32 index;
@@ -28,22 +89,22 @@ void sub_806CD90(void)
}
}
void sub_806CDD4(struct Entity *r0, u8 r1, u32 r2)
void sub_806CDD4(struct Entity *entity, u8 r1, u32 r2)
{
if(GetEntityType(r0) == ENTITY_MONSTER)
if(GetEntityType(entity) == ENTITY_MONSTER)
{
r0->unk6A = r1;
if(r2 < NUM_DIRECTIONS) r0->direction = r2;
entity->unk6A = r1;
if(r2 < NUM_DIRECTIONS) entity->direction = r2;
}
}
void sub_806CDFC(struct Entity *r0, u8 r1, u32 r2)
void sub_806CDFC(struct Entity *entity, u8 r1, u32 r2)
{
if(GetEntityType(r0) == ENTITY_MONSTER)
if(GetEntityType(entity) == ENTITY_MONSTER)
{
if(r0->unk6B == r1)
if(entity->unk6B == r1)
{
if(r0->direction2 == r2)
if(entity->direction2 == r2)
return;
else
goto change_dir;
@@ -51,57 +112,57 @@ void sub_806CDFC(struct Entity *r0, u8 r1, u32 r2)
else
{
change_dir:
sub_806CDD4(r0, r1, r2);
sub_806CDD4(entity, r1, r2);
}
}
}
void sub_806CE34(struct Entity *r0, u32 newDir)
void sub_806CE34(struct Entity *entity, u32 newDir)
{
if(GetEntityType(r0) == ENTITY_MONSTER)
if(GetEntityType(entity) == ENTITY_MONSTER)
{
r0->unk6A = sub_806CEBC(r0);
entity->unk6A = sub_806CEBC(entity);
if(newDir < NUM_DIRECTIONS)
{
r0->info->action.direction = newDir & DIRECTION_MASK;
r0->direction = newDir & DIRECTION_MASK;
entity->info->action.direction = newDir & DIRECTION_MASK;
entity->direction = newDir & DIRECTION_MASK;
}
}
}
void sub_806CE68(struct Entity *r0, u32 newDir)
void sub_806CE68(struct Entity *entity, u32 newDir)
{
if(GetEntityType(r0) == ENTITY_MONSTER)
if(GetEntityType(entity) == ENTITY_MONSTER)
{
r0->unk6A = sub_806CEBC(r0);
entity->unk6A = sub_806CEBC(entity);
if(newDir < NUM_DIRECTIONS)
{
r0->direction = newDir;
entity->direction = newDir;
}
}
}
void sub_806CE94(struct Entity *r0, u32 newDir)
void sub_806CE94(struct Entity *entity, u32 newDir)
{
if(GetEntityType(r0) == ENTITY_MONSTER)
if(GetEntityType(entity) == ENTITY_MONSTER)
{
r0->unk6A = 6;
entity->unk6A = 6;
if(newDir < NUM_DIRECTIONS)
{
r0->direction = newDir;
entity->direction = newDir;
}
}
}
u8 sub_806CEBC(struct Entity *param_1)
u8 sub_806CEBC(struct Entity *entity)
{
u8 sleep;
struct EntityInfo * entityInfo1;
struct EntityInfo * entityInfo2;
// NOTE: copy needed to match
entityInfo1 = param_1->info;
entityInfo2 = param_1->info;
entityInfo1 = entity->info;
entityInfo2 = entity->info;
sleep = entityInfo1->sleep;
if ((sleep == STATUS_SLEEP) || (sleep == STATUS_NAPPING) || (sleep == STATUS_NIGHTMARE)) {
@@ -117,57 +178,57 @@ u8 sub_806CEBC(struct Entity *param_1)
return 0x7;
}
void sub_806CEFC(struct Entity *param_1, u32 newDir)
void sub_806CEFC(struct Entity *entity, u32 newDir)
{
param_1->info->action.direction = newDir & DIRECTION_MASK;
sub_806CE68(param_1, (newDir & DIRECTION_MASK));
entity->info->action.direction = newDir & DIRECTION_MASK;
sub_806CE68(entity, (newDir & DIRECTION_MASK));
}
void sub_806CF18(struct Entity *param_1)
void sub_806CF18(struct Entity *entity)
{
s32 index;
struct EntityInfo *entityInfo;
if (EntityExists(param_1)) {
entityInfo = param_1->info;
if (EntityExists(entity)) {
entityInfo = entity->info;
for (index = 0; index < 100; index++) {
sub_803E46C(0x21);
if (!sub_808DA44(entityInfo->apparentID, param_1->unk6B)) {
if (!sub_808DA44(entityInfo->apparentID, entity->unk6B)) {
break;
}
}
}
}
u8 sub_806CF54(struct Entity *param_1)
u8 sub_806CF54(struct Entity *entity)
{
return param_1->info->unk204;
return entity->info->unk204;
}
void sub_806CF60(void)
{
struct Entity *uVar2;
struct Entity *entity;
s32 index;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
uVar2 = gDungeon->allPokemon[index];
if (EntityExists(uVar2)) {
sub_806CF98(uVar2);
entity = gDungeon->allPokemon[index];
if (EntityExists(entity)) {
sub_806CF98(entity);
}
}
}
u32 sub_806CF98(struct Entity *param_1)
u32 sub_806CF98(struct Entity *entity)
{
struct Tile *mapTile;
u32 uVar3;
u16 terrainType;
struct EntityInfo *entityInfo;
mapTile = GetTileAtEntitySafe(param_1);
mapTile = GetTileAtEntitySafe(entity);
terrainType = mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
entityInfo = param_1->info;
entityInfo = entity->info;
uVar3 = GetShadowSize(entityInfo->apparentID);
if (terrainType == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) {
return 6;

View File

@@ -357,7 +357,6 @@ void sub_80848F0(void)
void DisplayPreFightDialogue(void)
{
switch(gDungeon->unk3A0D) {
case 0:
break;
@@ -545,10 +544,9 @@ void DisplayPreFightDialogue(void)
sub_8097FF8();
}
void sub_8084E00(struct Entity *param_1,char param_2,char param_3)
void sub_8084E00(struct Entity *entity, u8 param_2, u8 param_3)
{
if (param_2 != '\0') {
if (param_2 != 0) {
switch(gDungeon->unk3A0D) {
case 0:
break;
@@ -587,7 +585,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3)
break;
case 0x1a:
case 0x1b:
sub_8089788(param_1,param_2,gDungeon->unk3A0D);
sub_8089788(entity,param_2,gDungeon->unk3A0D);
break;
case 0x1d:
case 0x1e:
@@ -619,13 +617,13 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3)
sub_808AAF0(param_2,gDungeon->unk3A0D);
break;
case 0x2e:
sub_808AE54(param_2,gDungeon->unk3A0D,&param_1->pos.x);
sub_808AE54(param_2,gDungeon->unk3A0D,&entity->pos.x);
break;
case 0x2f:
sub_808AEC8(param_2,gDungeon->unk3A0D,&param_1->pos.x);
sub_808AEC8(param_2,gDungeon->unk3A0D,&entity->pos.x);
break;
case 0x30:
sub_808AF3C(param_2,gDungeon->unk3A0D,&param_1->pos.x);
sub_808AF3C(param_2,gDungeon->unk3A0D,&entity->pos.x);
break;
case 0x31:
case 0x32:
@@ -644,7 +642,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3)
nullsub_100(param_2,gDungeon->unk3A0D,param_3);
break;
case 0x37:
sub_808C948(param_1,gDungeon->unk3A0D);
sub_808C948(entity,gDungeon->unk3A0D);
break;
case 0x38:
case 0x39:
@@ -653,7 +651,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3)
case 0x3C:
break;
}
if ((param_3 == '\0') && (gDungeon->unk2 != '\0')) {
if ((param_3 == 0) && (gDungeon->unk2 != 0)) {
DungeonStartNewBGM(999);
}
}

View File

@@ -1,8 +1,9 @@
#include "global.h"
#include "constants/direction.h"
#include "dungeon_entity.h"
#include "dungeon_global_data.h"
#include "dungeon_util_1.h"
#include "random.h"
#include "constants/direction.h"
struct unkStruct_202F3D0
{
@@ -19,12 +20,10 @@ EWRAM_DATA struct unkStruct_202F3D0 gUnknown_202F3D0;
s8 sub_8002984(s8, u8);
void sub_803E708(u32, u32);
void sub_80869E4(struct Entity *entity, u32, u8, s8);
extern void sub_80859F0(u32);
extern void sub_803E46C(u32);
extern void sub_803E9D0(void);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern void PlaySoundEffect(u32);
extern struct Entity *xxx_call_GetLeader(void);
void SpriteLookAroundEffect(struct Entity *entity);
extern void DisplayDungeonDialogue(u32);
void sub_8086494();
@@ -40,7 +39,6 @@ extern s32 GetCameraXPos(void);
extern s32 GetCameraYPos(void);
extern void sub_803F878(u32, u32);
extern void sub_8086384(struct Entity *entity);
extern void sub_8085930(u32);
extern void IncreaseEntityPixelPos(struct Entity *, u32, u32);
extern void sub_806CE68(struct Entity *, u32);
extern void sub_806CDD4(struct Entity *, u8, u32);
@@ -60,7 +58,7 @@ void sub_80862DC(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x;
pos.y = entity->pixelPos.y + (0xE0 << 6);
pos.y = entity->pixelPos.y + 0x3800;
sub_804535C(entity, &pos);
sub_806CDD4(entity, 0, DIRECTION_NORTH);
@@ -71,7 +69,7 @@ void sub_8086310(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x;
pos.y = entity->pixelPos.y + (0x90 << 8);
pos.y = entity->pixelPos.y + 0x9000;
sub_804535C(entity, &pos);
sub_806CE68(entity, DIRECTION_SOUTH);
@@ -82,8 +80,8 @@ void sub_8086310(struct Entity *entity)
void sub_8086348(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x + (0xF0 << 7);
pos.y = entity->pixelPos.y + 0xffffe000;
pos.x = entity->pixelPos.x + 0x7800;
pos.y = entity->pixelPos.y - 0x2000;
sub_804535C(entity, &pos);
sub_806CDD4(entity, 0, DIRECTION_WEST);
@@ -93,7 +91,7 @@ void sub_8086348(struct Entity *entity)
void sub_8086384(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x + (0xF0 << 7);
pos.x = entity->pixelPos.x + 0x7800;
pos.y = entity->pixelPos.y;
sub_804535C(entity, &pos);
@@ -133,17 +131,17 @@ void sub_8086404(struct Entity *entity)
void sub_8086410(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, 0, 0xffffff00);
IncreaseEntityPixelPos(entity, 0, -0x100);
}
void sub_8086424(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, 0, 0x80 << 1);
IncreaseEntityPixelPos(entity, 0, 0x100);
}
void sub_8086434(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, 0xffffff00, 0);
IncreaseEntityPixelPos(entity, -0x100, 0);
}
void sub_8086448(void)
@@ -306,12 +304,12 @@ void sub_8086690(void)
}
void sub_80866C4(u32 entity)
void sub_80866C4(u32 dialogue)
{
SpriteLookAroundEffect(xxx_call_GetLeader());
sub_803E708(0xA, 0x46);
DisplayDungeonDialogue(entity);
DisplayDungeonDialogue(dialogue);
sub_803E708(0xA, 0x46);
sub_8086494();
gDungeon->unk2 = 1;

View File

@@ -1,22 +1,21 @@
#include "constants/monster.h"
#include "global.h"
#include "constants/bg_music.h"
#include "constants/direction.h"
#include "dungeon_entity.h"
#include "dungeon_global_data.h"
#include "dungeon_music.h"
#include "dungeon_pokemon_attributes.h"
#include "pokemon.h"
#include "dungeon_util_1.h"
#include "dungeon_util.h"
extern void LoadIQSkills(struct Entity *);
extern struct Entity *GetPartnerEntity();
extern struct Entity *xxx_call_GetLeader(void);
extern void SetDefaultIQSkills(u8 *param_1, u8 param_2);
extern void sub_8097FF8(void);
extern u8 sub_8044B28(void);
extern u8 HasRecruitedMon(u32);
extern u8 gUnknown_202E038[];
extern void sub_8085374();
extern void sub_80854D4();
extern void sub_80855E4(void *);
extern void sub_8068FE0(struct Entity *, u32, u32);
extern void sub_8097FA8(u32);
@@ -30,7 +29,18 @@ extern void SkarmoryEntry(struct Entity *);
extern void SpriteLookAroundEffect(struct Entity *);
extern void sub_8086A54(struct Entity *);
extern void sub_808563C(void *);
extern void sub_8087144();
void sub_80866C4(u8 *);
extern void sub_8072008(struct Entity *pokemon, struct Entity *r1, u32 r2, u8 r3, u32);
extern bool8 sub_8085B80(u8 *);
extern void sub_8085B4C(u8 *, void *, struct Entity **, u32);
extern void sub_803E46C(u32);
extern u8 gUnknown_810739C[];
extern u8 gUnknown_81073D4[];
extern u8 gUnknown_810740C[];
extern s16 gUnknown_80F57CC;
extern u8 gUnknown_8101440[];
extern u8 gSkarmoryPreFightDialogue_1;
extern u8 gSkarmoryPreFightDialogue_2;
extern u8 gSkarmoryPreFightDialogue_3;
@@ -43,6 +53,19 @@ extern u8 gSkarmoryPreFightDialogue_9;
extern u8 gSkarmoryReFightDialogue_1;
extern u8 gSkarmoryReFightDialogue_2;
extern u8 gSkarmoryReFightDialogue_3;
extern u8 gTeamMeaniesPreFightDialogue_1;
extern u8 gTeamMeaniesPreFightDialogue_2;
extern u8 gTeamMeaniesPreFightDialogue_3;
extern u8 gTeamMeaniesPreFightDialogue_4;
extern u8 gTeamMeaniesPreFightDialogue_5;
extern u8 gTeamMeaniesPreFightDialogue_6;
extern u8 gTeamMeaniesPreFightDialogue_7;
extern u8 gTeamMeaniesReFightDialogue_1;
extern u8 gTeamMeaniesReFightDialogue_2;
extern u8 gTeamMeaniesReFightDialogue_3;
extern u8 gTeamMeaniesReFightDialogue_4;
extern u8 gTeamMeaniesReFightDialogue_5;
extern u8 gUnknown_8100D3C;
void sub_8086A3C(struct Entity *pokemon)
@@ -117,7 +140,7 @@ void sub_8086B14(void)
sub_80855E4(sub_8086A3C);
sub_8086A3C(SkarmoryEntity);
DiglettEntity->info->unk15C = 1;
sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y + -2);
sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y - 2);
CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_DIGLETT);
CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_SKARMORY);
}
@@ -279,3 +302,186 @@ void sub_8086F00(void)
CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_GENGAR);
CopyMonsterNametoBuffer(gUnknown_202E038 + 0xA0, MONSTER_CATERPIE);
}
// From @jiangzhengwenjz:
// Matches this way for -O2 but can match w/o this hack on -O1
// https://decomp.me/scratch/BTqWo
void sub_8086F54(u8 param_1, u8 param_2)
{
struct Entity *entity;
s32 index;
u32 unk1 = 0;
if (param_2 == 4 || param_2 == 5) {
void *labels[2];
labels[0] = labels[1] = &&label;
for(index = 0; index < 0x10; index++)
{
entity = gDungeon->wildPokemon[index];
if ((EntityExists(entity)) && (entity->info->clientType != param_1)) {
return;
}
}
if(!unk1)
{
sub_8097FA8(3);
label:
gDungeon->unk2 = 1;
}
}
}
void TeamMeaniesPreFightDialogue(void)
{
struct Entity *LeaderEntity;
LeaderEntity = xxx_call_GetLeader();
sub_8086448();
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_1);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_2);
sub_803E708(10, 0x46);
sub_8087144();
DungeonStartNewBGM(MUS_THERES_TROUBLE);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_3);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_4);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_5);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_6);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_7);
sub_803E708(10, 0x46);
ShiftCameraToPosition(&LeaderEntity->pixelPos, 0x10);
}
void TeamMeaniesReFightDialogue(void)
{
struct Entity *LeaderEntity;
struct Entity *PartnerEntity;
LeaderEntity = xxx_call_GetLeader();
PartnerEntity = GetPartnerEntity();
sub_8086448();
DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_1);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_2);
sub_803E708(10, 0x46);
sub_8087144();
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_2);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_3);
sub_803E708(10, 0x46);
sub_806CDD4(LeaderEntity, 6, 4);
sub_806CDD4(PartnerEntity, 6, 4);
sub_803E708(10, 0x46);
sub_806CDD4(LeaderEntity, 7, 4);
sub_806CDD4(PartnerEntity, 7, 4);
sub_803E708(10, 0x46);
DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_4);
DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_5);
sub_803E708(10, 0x46);
ShiftCameraToPosition(&LeaderEntity->pixelPos, 0x10);
}
void sub_8087130(void)
{
sub_8086448();
sub_80866C4(gUnknown_8101440);
}
void sub_8087144(void)
{
struct Entity *iVar2;
struct Entity *iVar3;
struct Entity *iVar4;
u8 auStack_10c [56];
u8 puStack_60[56];
u8 puStack_5c[56];
u8 *puStack_64[3];
struct Entity *pEStack_58[3];
u8 auStack_4c [48];
iVar2 = GetEntityFromClientType(5);
iVar3 = GetEntityFromClientType(6);
iVar4 = GetEntityFromClientType(7);
memcpy(auStack_10c,gUnknown_810739C, 0x38);
memcpy(puStack_60, gUnknown_81073D4, 0x38);
memcpy(puStack_5c, gUnknown_810740C, 0x38);
puStack_64[0] = auStack_10c;
puStack_64[1] = puStack_60;
puStack_64[2] = puStack_5c;
pEStack_58[0] = iVar2;
pEStack_58[1] = iVar3;
pEStack_58[2] = iVar4;
DungeonStartNewBGM(MUS_THERES_TROUBLE);
sub_8086A54(iVar2);
sub_8086A54(iVar3);
sub_8086A54(iVar4);
sub_8085B4C(auStack_4c,puStack_64,pEStack_58,3);
iVar2->info->unk15F = 1;
iVar3->info->unk15F = 1;
iVar4->info->unk15F = 1;
while( TRUE ) {
if (!sub_8085B80(auStack_4c)) break;
sub_803E46C(0x46);
}
iVar2->info->unk15F = 0;
iVar3->info->unk15F = 0;
iVar4->info->unk15F = 0;
}
void sub_8087230(void)
{
struct Entity *LeaderEntity;
struct Entity *ZapdosEntity;
LeaderEntity = xxx_call_GetLeader();
ZapdosEntity = GetEntityFromClientType(0x8);
DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT);
sub_8085374();
sub_80854D4();
sub_8085930(4);
sub_80855E4(sub_8086A3C);
SetFacingDirection(ZapdosEntity, 0);
sub_8086A3C(ZapdosEntity);
sub_8085860(LeaderEntity->pos.x, LeaderEntity->pos.y - 3);
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SHIFTRY);
CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ZAPDOS);
}
void sub_808729C(void)
{
struct Entity *LeaderEntity;
struct Entity *ZapdosEntity;
LeaderEntity = xxx_call_GetLeader();
ZapdosEntity = GetEntityFromClientType(8);
sub_80854D4();
sub_8085930(4);
sub_80855E4(sub_8086A3C);
if (sub_8086AE4(0x91) != 0) {
sub_8068FE0(ZapdosEntity,0x21c,0);
}
else {
sub_8072008(ZapdosEntity,ZapdosEntity,gUnknown_80F57CC,0,0);
SetFacingDirection(ZapdosEntity,0);
sub_8086A3C(ZapdosEntity);
}
sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y - 3);
CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SHIFTRY);
CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ZAPDOS);
}
void sub_8087334(u8 param_1, u8 param_2)
{
if ((param_2 == 7 || param_2 == 8 || param_2 == 9) && (param_1 == 8)) {
sub_8097FA8(5);
gDungeon->unk2 = 1;
}
}

View File

@@ -8,15 +8,15 @@
#include "save.h"
#include "text_util.h"
extern struct unkStruct_203B480 gUnknown_2038C88;
extern struct unkStruct_203B480 *gUnknown_203B480;
extern struct unkStruct_203B484 gUnknown_2039288;
extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct unkStruct_203B48C gUnknown_20393C0;
extern struct unkStruct_203B48C *gUnknown_203B48C;
extern u32 *gUnknown_203B488;
extern u32 gUnknown_20392E8;
EWRAM_DATA_2 struct unkStruct_203B480 *gUnknown_203B480 = {0};
EWRAM_DATA_2 struct unkStruct_203B484 *gUnknown_203B484 = {0};
EWRAM_DATA_2 u32 *gUnknown_203B488 = {0};
EWRAM_DATA_2 struct unkStruct_203B48C *gUnknown_203B48C = {0};
extern struct unkStruct_203B480 gUnknown_2038C88;
extern struct unkStruct_203B484 gUnknown_2039288;
extern u32 gUnknown_20392E8;
extern struct unkStruct_203B48C gUnknown_20393C0;
extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);

View File

@@ -13,10 +13,7 @@
extern s32 GetDungeonFloorCount(u8);
extern bool8 sub_809017C(struct DungeonLocation *);
extern s16 GetBaseSpecies(s16);
extern bool8 IsInvalidItemReward(u8);
extern u8 sub_803C1D0(struct DungeonLocation *, u8);
extern bool8 IsNotMoneyOrUsedTMItem(u8);
extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 );
extern u32 GetMaxItemsAllowed(u8);
extern bool8 sub_803C0DC(s16);
extern void ResetMailboxSlot(u8);
@@ -24,7 +21,7 @@ extern void ResetPelipperBoardSlot(u8);
extern void ResetJobSlot(u8);
extern bool8 ValidateWonderMail(struct WonderMail *);
extern struct unkStruct_203B490 *gUnknown_203B490;
EWRAM_DATA_2 struct unkStruct_203B490 *gUnknown_203B490 = {0};
extern struct unkStruct_203B490 gUnknown_2039448;
void LoadMailInfo(void)

View File

@@ -1,17 +1,44 @@
#include "global.h"
#include "constants/dungeon.h"
#include "pokemon.h"
#include "wonder_mail.h"
#include "code_80958E8.h"
#include "dungeon.h"
struct MissionText
{
u8 *text;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
};
extern struct MissionText gStoryMissionText[];
extern const char gFinalScenarioText[];
extern const char gMeetNinetalesText[];
extern const char gAvoidCaptureText[];
extern const u8 gUnknown_8109CC0[];
extern const u8 gDummyScenarioText[];
extern u8 sub_80A270C();
extern void sub_8097FA8(u32);
extern void sub_8097FF8(void);
extern u8 sub_80A2728(s16);
extern bool8 sub_8001D08(u32, u32 ,s32);
extern u32 sub_8001784(u32, u32, u16);
extern void sub_800199C(u8, u8, u16, s32);
extern bool8 sub_80023E4(u32);
void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b);
void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b);
extern s32 sub_8096EB0(struct WonderMail *);
extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void sub_80015C0(u32, u32);
extern void sub_80015C0(u8, u8);
extern u32 sub_8001784(u32, u32, u16);
extern void GeneratePelipperJobs(void);
extern void sub_800199C(u32, s32, u32, s32);
s16 sub_80A26B8(s16);
extern void sub_80018D8(u8, u8, u32);
bool8 sub_8096F50(struct WonderMail *mail)
{
@@ -221,3 +248,228 @@ bool32 sub_8097384(s16 param_1)
}
return iVar1;
}
void sub_80973A8(s16 param_1,u32 param_2)
{
s32 sVar1;
s32 param_1_s32 = param_1;
u8 param_2_u32 = param_2;
if (param_1_s32 != 0xd) {
if (param_2_u32 != 0) {
sVar1 = sub_80A26B8(param_1);
sub_800199C(0,0x2b,param_1_s32,0);
if (sVar1 != -1) {
sub_80018D8(0,0x12,sVar1);
}
}
sub_800199C(0,0x2c,param_1_s32,param_2_u32);
}
}
s32 sub_80973F4(s32 param_1)
{
s32 iVar1;
s16 param_1_u16 = param_1;
if (param_1_u16 == 0xd) {
iVar1 = 0;
}
else {
s32 param_1_s32 = param_1_u16;
u16 param_1_temp = param_1_s32;
iVar1 = sub_8001784(0,0x2d,param_1_temp);
if (iVar1 != 0) {
iVar1 = 1;
}
}
return iVar1;
}
void sub_8097418(s16 index,u32 param_2)
{
int index_s32 = index;
u8 param_2_u8 = param_2;
if (index_s32 != 0xd) {
if ((param_2_u8 != 0) && (sub_800199C(0,0x2c,index_s32,0), index_s32 < 0x1f)) {
struct MissionText *mt = &gStoryMissionText[index_s32];
if (mt->unk4 != 0xFF) {
sub_8097FA8(mt->unk4);
}
if (mt->unk5 != 0xFF) {
sub_8097FA8(mt->unk5);
}
if (index_s32 == 9) {
sub_8097FA8(0x1f);
}
sub_8097FF8();
}
sub_800199C(0,0x2d,index_s32,param_2_u8);
}
}
const u8 *sub_809747C(s16 index)
{
if(index == 0xD)
{
return gDummyScenarioText;
}
else
{
return GetDungeonName1(sub_80A270C(index));
}
}
const u8 *sub_80974A0(s16 index)
{
if(index == 0xD)
{
return gDummyScenarioText;
}
else
{
return GetDungeonName1(sub_80A270C(index));
}
}
const u8 *GetCurrentMissionText(s16 index)
{
if(index < 0x1F)
{
struct MissionText *mt = &gStoryMissionText[index];
return mt->text;
}
else
{
return gUnknown_8109CC0;
}
}
void sub_80974E8(void)
{
sub_80015C0(0, 0x2E);
sub_80015C0(0, 0x2F);
}
void nullsub_208(void)
{
}
bool8 sub_8097504(s16 mazeIndex)
{
s32 mazeIndex_s32;
#ifndef NONMATCHING
register s32 mazeIndex_s32_1 asm("r1");
#else
s32 mazeIndex_s32_1;
#endif
s32 uVar3;
mazeIndex_s32 = mazeIndex;
mazeIndex_s32_1 = mazeIndex_s32;
if(mazeIndex_s32 < 17)
{
switch(mazeIndex_s32) {
case 2:
case 10:
case 11:
case 12:
uVar3 = 14;
break;
case 0:
case 1:
case 5:
case 7:
case 9:
case 14:
uVar3 = 15;
break;
case 3:
case 4:
case 6:
case 8:
return TRUE;
case 13:
uVar3 = 6;
break;
default:
return TRUE;
}
}
else
{
if (mazeIndex_s32_1 > 22) return FALSE;
if (mazeIndex_s32_1 == 22) return FALSE;
if (mazeIndex_s32_1 == 21) return FALSE;
uVar3 = 6;
}
if (!sub_80023E4(uVar3)) {
return FALSE;
}
else {
return TRUE;
}
}
// TODO: this should probably be bool8 but can't get a match just yet
bool32 IsMazeCompleted(s16 mazeIndex)
{
bool32 mazeCompletion;
mazeCompletion = sub_8001784(0, 0x2e, mazeIndex);
if (mazeCompletion) {
mazeCompletion = TRUE;
}
return mazeCompletion;
}
void sub_80975A8(s16 param_1,u8 param_2)
{
u16 param_1_u16 = param_1;
sub_800199C(0,0x2e,param_1_u16,param_2);
}
const u8 *sub_80975C4(s16 index)
{
return GetDungeonName1(sub_80A2728(index));
}
const char *sub_80975DC(u32 r0)
{
// TODO: slight hack but matches
r0 <<= 16;
if((0xffe90000 + r0) >> 16 < 2)
if(sub_8001D08(0x3, 0xE, -1))
return gMeetNinetalesText;
else
return gAvoidCaptureText;
else
return gFinalScenarioText;
}
bool8 HasCompletedAllMazes(void)
{
s32 index;
for(index = 0; index < NUM_BASIC_DUNGEON_MAZE; index++)
{
if(!(bool8)IsMazeCompleted(index))
return FALSE;
}
return TRUE;
}
bool8 sub_8097640(void)
{
if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes())
{
sub_800199C(0, 0x2E, 0x1F, 1);
return TRUE;
}
else
{
return FALSE;
}
}

View File

@@ -1,193 +0,0 @@
#include "global.h"
#include "dungeon.h"
struct MissionText
{
u8 *text;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
};
extern struct MissionText gStoryMissionText[];
extern const u8 gUnknown_8109CC0[];
extern const u8 gDummyScenarioText[];
extern const char gFinalScenarioText[];
extern const char gMeetNinetalesText[];
extern const char gAvoidCaptureText[];
extern u8 sub_80A270C();
extern void sub_80015C0(u8, u8);
extern u8 sub_80A2728(s16);
extern bool8 sub_8001D08(u32, u32 ,s32);
extern u32 sub_8001784(u32, u32, u16);
extern void sub_800199C(u32, u32, u32, u32);
extern bool8 sub_80023E4(u32);
const u8 *sub_809747C(s16 index)
{
if(index == 0xD)
{
return gDummyScenarioText;
}
else
{
return GetDungeonName1(sub_80A270C(index));
}
}
const u8 *sub_80974A0(s16 index)
{
if(index == 0xD)
{
return gDummyScenarioText;
}
else
{
return GetDungeonName1(sub_80A270C(index));
}
}
const u8 *GetCurrentMissionText(s16 index)
{
if(index < 0x1F)
{
struct MissionText *mt = &gStoryMissionText[index];
return mt->text;
}
else
{
return gUnknown_8109CC0;
}
}
void sub_80974E8(void)
{
sub_80015C0(0, 0x2E);
sub_80015C0(0, 0x2F);
}
void nullsub_208(void)
{
}
bool8 sub_8097504(s16 mazeIndex)
{
s32 mazeIndex_s32;
#ifndef NONMATCHING
register s32 mazeIndex_s32_1 asm("r1");
#else
s32 mazeIndex_s32_1;
#endif
s32 uVar3;
mazeIndex_s32 = mazeIndex;
mazeIndex_s32_1 = mazeIndex_s32;
if(mazeIndex_s32 < 17)
{
switch(mazeIndex_s32) {
case 2:
case 10:
case 11:
case 12:
uVar3 = 14;
break;
case 0:
case 1:
case 5:
case 7:
case 9:
case 14:
uVar3 = 15;
break;
case 3:
case 4:
case 6:
case 8:
return TRUE;
case 13:
uVar3 = 6;
break;
default:
return TRUE;
}
}
else
{
if (mazeIndex_s32_1 > 22) return FALSE;
if (mazeIndex_s32_1 == 22) return FALSE;
if (mazeIndex_s32_1 == 21) return FALSE;
uVar3 = 6;
}
if (!sub_80023E4(uVar3)) {
return FALSE;
}
else {
return TRUE;
}
}
// TODO: this should probably be bool8 but can't get a match just yet
bool32 IsMazeCompleted(s16 mazeIndex)
{
bool32 mazeCompletion;
mazeCompletion = sub_8001784(0, 0x2e, mazeIndex);
if (mazeCompletion) {
mazeCompletion = TRUE;
}
return mazeCompletion;
}
void sub_80975A8(s16 param_1,u8 param_2)
{
u16 param_1_u16 = param_1;
sub_800199C(0,0x2e,param_1_u16,param_2);
}
const u8 *sub_80975C4(s16 index)
{
return GetDungeonName1(sub_80A2728(index));
}
const char *sub_80975DC(u32 r0)
{
// TODO: slight hack but matches
r0 <<= 16;
if((0xffe90000 + r0) >> 16 < 2)
if(sub_8001D08(0x3, 0xE, -1))
return gMeetNinetalesText;
else
return gAvoidCaptureText;
else
return gFinalScenarioText;
}
bool8 HasCompletedAllMazes(void)
{
s32 index;
for(index = 0; index < 17; index++)
{
if(!(bool8)IsMazeCompleted(index))
return FALSE;
}
return TRUE;
}
bool8 sub_8097640(void)
{
if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes())
{
sub_800199C(0, 0x2E, 0x1F, 1);
return TRUE;
}
else
{
return FALSE;
}
}

View File

@@ -3,7 +3,7 @@
struct unkStruct_203B494
{
// size: 0xC8?
// size: 0xC4
u32 unk0; // 32 bit bitfield, I think
s32 numAdventures;
s32 unk8;
@@ -18,8 +18,8 @@ struct unkStruct_203B494
s32 unkC0;
};
extern struct unkStruct_203B494 *gUnknown_203B494;
extern struct unkStruct_203B494 gUnknown_2039778;
EWRAM_DATA_2 struct unkStruct_203B494 *gUnknown_203B494 = {0};
EWRAM_DATA struct unkStruct_203B494 gUnknown_2039778 = {0};
extern const u8 *gAdventureLogText[];
s16 GetBaseSpeciesNoUnown(s16 index);

View File

@@ -11,7 +11,7 @@
#include "text_util.h"
#include "menu_input.h"
extern struct DebugMenu *gUnknown_203B3EC;
EWRAM_DATA_2 struct DebugMenu *gUnknown_203B3EC = {0};
const struct UnkTextStruct2 gUnknown_80E7D40 =
{

156
src/dungeon_map_access_1.c Normal file
View File

@@ -0,0 +1,156 @@
#include "global.h"
#include "dungeon_map_access.h"
#include "dungeon_global_data.h"
#include "file_system.h"
#include "tile_types.h"
#include "random.h"
#include "dungeon_engine.h"
extern u16 gUnknown_202B038[4][32][32];
extern void sub_80402AC(s32, s32);
extern void sub_80098F8(u32);
void sub_804AA60(void) {
s32 i;
s32 j;
for(i = 0; i < 0x20; i++)
{
for(j = 0; j < 0x20; j++)
{
gUnknown_202B038[2][i][j] = 0;
}
}
sub_80098F8(2);
gDungeon->unk1821A = 0;
}
void sub_804AAAC(void)
{
s32 x;
s32 y;
struct Tile *tile;
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
{
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
{
tile = GetTileSafe(x,y);
tile->unk4 = 0;
}
}
}
void sub_804AAD4(void)
{
struct Tile *tile;
struct RoomData *room1;
struct RoomData *room2;
s32 roomIndex;
int x;
int y;
s32 maxRooms;
s32 index;
for(index = 0; index < 0x20; index++)
{
gDungeon->roomData[index].unk0 = 0;
gDungeon->roomData[index].unk1 = 0;
gDungeon->roomData[index].bottomRightCornerX = 9999;
gDungeon->roomData[index].bottomRightCornerY = 9999;
gDungeon->roomData[index].topLeftCornerX = 0xd8f1;
gDungeon->roomData[index].topLeftCornerY = 0xd8f1;
}
maxRooms = 0;
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
{
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
{
tile = GetTile(x,y);
roomIndex = tile->room;
if (roomIndex != CORRIDOR_ROOM) {
room1 = &gDungeon->roomData[roomIndex];
room1->unk0 = 1;
if (room1->bottomRightCornerX > x) {
room1->bottomRightCornerX = x;
}
if (room1->bottomRightCornerY > y) {
room1->bottomRightCornerY = y;
}
if (room1->topLeftCornerX < x + 1) {
room1->topLeftCornerX = x + 1;
}
if (room1->topLeftCornerY < y + 1) {
room1->topLeftCornerY = y + 1;
}
if (maxRooms < roomIndex) {
maxRooms = roomIndex;
}
}
}
}
for(index = 0; index < 0x20; index++)
{
room2 = &gDungeon->roomData[index];
if(room2 ->unk0 != 0)
{
room2->unkC = (room2->bottomRightCornerX - 1) * 24;
room2->unk10 = (room2->bottomRightCornerY - 1) * 24;
room2->unk14 = (room2->topLeftCornerX + 1) * 24;
room2->unk18 = (room2->topLeftCornerY + 1) * 24;
}
}
gDungeon->unk104C0 = maxRooms + 1;
}
void sub_804AC20(struct Position *pos)
{
s32 y;
struct Tile *tile2;
struct Tile *tile;
s32 yMax;
u32 visibilityRange;
s32 xMin;
s32 x;
s32 xMax;
s32 yMin;
s32 roomIndex;
struct RoomData *room;
tile2 = GetTile(pos->x,pos->y);
roomIndex = tile2->room;
visibilityRange = gDungeon->visibilityRange;
if (!gDungeon->blinded) {
if (visibilityRange == 0) {
visibilityRange = 2;
}
if (roomIndex == CORRIDOR_ROOM) {
xMin = pos->x - visibilityRange;
yMin = pos->y - visibilityRange;
xMax = pos->x + visibilityRange;
yMax = pos->y + visibilityRange;
}
else {
room = &gDungeon->roomData[roomIndex];
if (room->unk1 != 0) {
return;
}
room->unk1 = 1;
xMin = room->bottomRightCornerX - 1;
yMin = room->bottomRightCornerY - 1;
xMax = room->topLeftCornerX;
yMax = room->topLeftCornerY;
}
for (y = yMin; y <= yMax; y++) {
for (x = xMin; x <= xMax; x++) {
tile = GetTileSafe(x,y);
tile->unk4 = tile->unk4 | 3;
sub_80402AC(x,y);
}
}
}
}

View File

@@ -2,7 +2,9 @@
#include "dungeon_util_1.h"
#include "constants/direction.h"
#include "constants/dungeon.h"
#include "dungeon_global_data.h"
#include "dungeon_leader.h"
#include "dungeon_util.h"
#include "random.h"
@@ -21,10 +23,97 @@ extern void sub_8068FE0(struct Entity *, u32, u8 *);
extern void sub_80457DC(u8 *);
extern void sub_80861D4(struct Entity *, u32, s32 direction);
extern void sub_80694C0(struct Entity *, s32, s32, u32);
extern struct Entity *GetPartnerEntity();
typedef void (*DungeonCallback)(struct Entity *);
struct Entity *xxx_call_GetLeader(void)
{
return GetLeader();
}
struct Entity *GetPartnerEntity(void)
{
s32 counter;
struct Entity *entity;
for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++)
{
entity = gDungeon->teamPokemon[counter];
if(EntityExists(entity) && entity->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER)
{
return entity;
}
}
return GetEntityFromClientType(CLIENT_TYPE_PARTNER);
}
void sub_80854D4(void)
{
struct Entity *stack1[MAX_TEAM_MEMBERS];
struct Entity *stack2[MAX_TEAM_MEMBERS];
s32 counter = 0;
s32 index;
struct Entity *entity;
struct Entity *entity2;
struct Entity *entity3;
struct Entity *entity4;
struct Entity *entity5;
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity = gDungeon->teamPokemon[index];
if(EntityExists(entity))
{
stack1[counter] = entity;
counter++;
}
}
for(; counter < MAX_TEAM_MEMBERS; counter++)
{
stack1[counter] = NULL;
}
counter = 0;
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity2 = stack1[index];
if(entity2 != NULL && entity2->info->isTeamLeader)
{
stack1[index] = NULL;
stack2[counter] = entity2;
counter++;
}
}
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity3 = stack1[index];
if(entity3 != NULL && entity3->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER)
{
stack1[index] = NULL;
stack2[counter] = entity3;
counter++;
}
}
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity4 = stack1[index];
if(entity4 != NULL)
{
stack1[index] = NULL;
stack2[counter] = entity4;
counter++;
}
}
for(; counter < MAX_TEAM_MEMBERS; counter++)
{
stack2[counter] = NULL;
}
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity5 = stack2[index];
if(entity5 != NULL)
sub_80856C8(entity5, gDungeon->unkE220[index].x, gDungeon->unkE220[index].y);
}
}
void sub_80855E4(DungeonCallback func)
{
bool8 flag;
@@ -37,7 +126,7 @@ void sub_80855E4(DungeonCallback func)
{
entity = gDungeon->teamPokemon[index];
if (EntityExists(entity)) {
if (entity->info->joinedAt == 0x41) {
if (entity->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER) {
flag = TRUE;
}
func(entity);
@@ -116,7 +205,7 @@ void sub_8085764(void)
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
{
entity = gDungeon->wildPokemon[index];
if ((EntityExists(entity)) && (entity->info->clientType == 2)) {
if ((EntityExists(entity)) && (entity->info->clientType == CLIENT_TYPE_PARTNER)) {
sub_8068FE0(entity,0x207,auStack128);
}
}
@@ -215,7 +304,7 @@ void sub_8085930(s32 direction)
entity = gDungeon->wildPokemon[index];
if(EntityExists(entity))
{
if(entity->info->clientType == 2)
if(entity->info->clientType == CLIENT_TYPE_PARTNER)
{
if(direction >= NUM_DIRECTIONS)
{
@@ -291,7 +380,7 @@ bool8 IsMovingClient(struct Entity *pokemon)
case 0x24:
return TRUE;
case CLIENT_TYPE_NONE:
case 0x2:
case CLIENT_TYPE_PARTNER:
case CLIENT_TYPE_DONT_MOVE:
case 0xA:
case 0xB:

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "constants/dungeon.h"
#include "memory.h"
#include "text.h"
#include "input.h"
@@ -268,7 +269,7 @@ void sub_8027A5C(void)
}
static inline bool8 sub_8027A78_sub(void) {
if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == 0x44 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == 0x45)
if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE)
return TRUE;
else
return FALSE;
@@ -459,7 +460,7 @@ bool8 sub_8027D9C(struct PokemonStruct *pokeStruct)
if(!pokeStruct->isTeamLeader)
{
var1 = 0;
if(pokeStruct->dungeonLocation.id == 0x41)
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
var1 = 1;
if(var1 != 0)
{
@@ -480,7 +481,7 @@ bool8 sub_8027DCC(struct PokemonStruct *pokeStruct)
if(!pokeStruct->isTeamLeader)
{
var1 = 0;
if(pokeStruct->dungeonLocation.id == 0x41)
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
var1 = 1;
if(var1 != 0)
{

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "constants/dungeon.h"
#include "memory.h"
#include "text.h"
#include "input.h"
@@ -115,7 +116,6 @@ extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void xxx_format_and_draw(s32, s32, const u8 *, ...);
bool8 sub_8025EC4(struct PokemonStruct *);
extern u32 sub_8023A94(u32);
extern s16 sub_8023B44(void);
extern void sub_8023C60(void);
@@ -123,22 +123,6 @@ extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern s16 sub_80A5728(void);
extern u8 sub_8002658(s16);
extern bool8 sub_8024108(u32);
extern void sub_8025434(s32);
extern void sub_80259F0(void);
extern void sub_8025A84(void);
extern void sub_8025BCC(void);
extern void sub_8025BE8(void);
extern void sub_8025C04(void);
extern void sub_8025CB4(void);
extern void sub_8025D90(void);
extern void sub_8025DAC(void);
extern void sub_8025E08(void);
extern void sub_8025E24(void);
extern void sub_8025E44(void);
extern void sub_802544C(void);
extern void sub_8025518(void);
extern void sub_8025728(void);
extern void sub_802591C(void);
extern u32 sub_801B3C0(struct Item *param_1);
extern void sub_8023868(u32, u32, u32, u32);
extern void sub_801F1B0(u32, u32);
@@ -164,8 +148,7 @@ extern u32 sub_801F194(void);
extern void sub_801F214(void);
extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32);
extern void sub_801F808(u16 *);
u32 sub_801602C(u32 r0, u8 *name);
void sub_8025E68(u32 , struct BulkItem *);
extern u32 sub_801602C(u32 r0, u8 *name);
extern u32 sub_801A6E8(u32);
extern u32 sub_801A8AC(void);
extern void sub_8099690(u32);
@@ -177,10 +160,29 @@ extern u32 sub_8016080(void);
extern s32 sub_80144A4(s32 *);
extern bool8 sub_80023E4(u32);
void sub_8025434(s32);
void sub_802544C(void);
void sub_8025518(void);
void sub_8025728(void);
void sub_802591C(void);
void sub_80259F0(void);
void sub_8025A84(void);
void sub_8025BCC(void);
void sub_8025BE8(void);
void sub_8025C04(void);
void sub_8025CB4(void);
void sub_8025D90(void);
void sub_8025DAC(void);
void sub_8025E08(void);
void sub_8025E24(void);
void sub_8025E44(void);
void sub_8025E68(u32 , struct BulkItem *);
bool8 sub_8025EC4(struct PokemonStruct *);
bool8 sub_80252F0(s32 param_1)
{
if ((param_1 == 2) && (sub_8024108(4) != '\0')) {
if ((param_1 == 2) && (sub_8024108(4) != 0)) {
return FALSE;
}
else {
@@ -770,17 +772,17 @@ void sub_8025E68(u32 r0, struct BulkItem *heldItem)
sub_80073E0(r0);
}
bool8 sub_8025EC4(struct PokemonStruct *param_1)
bool8 sub_8025EC4(struct PokemonStruct *pokeStruct)
{
bool32 flag;
if (param_1->isTeamLeader)
if (pokeStruct->isTeamLeader)
{
return FALSE;
}
else
{
flag = FALSE;
if(param_1->dungeonLocation.id == 0x41)
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
flag = TRUE;
if(flag && !sub_80023E4(8))
return FALSE;

View File

@@ -1,4 +1,3 @@
#include "gba/defines.h"
#include "global.h"
#include "game_options.h"
#include "code_8092334.h"

View File

@@ -13,7 +13,7 @@ struct unkStruct_203B4B8
u32 unk0;
};
extern struct unkStruct_203B4B8 gUnknown_203B4B8;
EWRAM_DATA_2 struct unkStruct_203B4B8 gUnknown_203B4B8 = {0};
extern struct DebugLocation gUnknown_8118798;
extern struct unkStruct_80A77D0 *sub_80A77D0(s16 r0, struct DebugLocation *r1);

View File

@@ -14,11 +14,7 @@ struct Hints
struct unkStruct_203B268
{
// size: 0xA0
u32 unk0;
u8 fill4[0x1E - 0x4];
s16 helpPageIndex;
u16 unk20;
u8 fill22[0x34 - 0x22];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
@@ -28,14 +24,7 @@ struct unkStruct_203B268
struct unkStruct_203B264
{
// size: 0x9C
u32 unk0;
u8 fill4[0x18 - 0x4];
s16 unk18;
s16 unk1A;
s16 unk1C;
s16 unk1E;
u16 unk20;
u8 fill22[0x34 - 0x22];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
@@ -53,9 +42,9 @@ extern struct Hints gGameHints[MAX_HINTS];
extern u8 gUnknown_80DC0D4[MAX_HINTS];
extern void sub_801E714(void);
extern void sub_8013818(void *, u32, u32, u32);
extern bool8 sub_8013938(void *);
extern s32 GetKeyPress(void *);
extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32);
extern bool8 sub_8013938(struct MenuInputStruct *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern void sub_801E714(void);
extern void sub_801E76C(void);
@@ -63,14 +52,14 @@ extern void DisplayChosenHint(void);
extern void xxx_call_draw_string(s32, u32, u8 *, u32, u32);
extern void sub_80073E0(u32);
extern void sub_80073B8(u32);
extern s32 sub_8013800(void *, u32);
extern s32 sub_8013800(struct MenuInputStruct *, u32);
extern void sub_8008C54(u32);
void DrawHintSelectionMenu(void);
void sub_801E594(void);
void sub_8013984(void *);
void AddMenuCursorSprite(void *);
extern u8 sub_80138B8(void *, u32);
extern void sub_8013660(void *);
void sub_8013984(struct MenuInputStruct *);
void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern void sub_8013660(struct MenuInputStruct *);
extern void sub_8012D08(struct UnkTextStruct2 *, u32);
u32 sub_801E3F0(u32 r0)
@@ -84,7 +73,7 @@ u32 sub_801E3F0(u32 r0)
sub_8012D08(gUnknown_203B264->unk38, 0xA);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B264->unk3C, 1, 1);
sub_8013818(gUnknown_203B264, 0x5, 0xA, r0);
sub_8013818(&gUnknown_203B264->input, 0x5, 0xA, r0);
sub_801E594();
DrawHintSelectionMenu();
return 1;
@@ -94,10 +83,10 @@ u32 sub_801E474(u8 r0)
{
if(r0 == 0)
{
sub_8013660(gUnknown_203B264);
sub_8013660(&gUnknown_203B264->input);
return 0;
}
switch(GetKeyPress(gUnknown_203B264))
switch(GetKeyPress(&gUnknown_203B264->input))
{
case 2:
PlayMenuSoundEffect(1);
@@ -109,7 +98,7 @@ u32 sub_801E474(u8 r0)
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(gUnknown_203B264, 1))
if(sub_80138B8(&gUnknown_203B264->input, 1))
{
sub_801E594();
DrawHintSelectionMenu();
@@ -122,18 +111,18 @@ u32 sub_801E474(u8 r0)
s32 GetChosenHintIndex(void)
{
return (gUnknown_203B264->unk1E * gUnknown_203B264->unk1C) + gUnknown_203B264->unk18;
return (gUnknown_203B264->input.unk1E * gUnknown_203B264->input.unk1C) + gUnknown_203B264->input.menuIndex;
}
void CreateHintSelectionScreen(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B264->unk3C, 0, 0);
sub_8013984(gUnknown_203B264);
sub_8013984(&gUnknown_203B264->input);
sub_801E594();
DrawHintSelectionMenu();
if(r0)
AddMenuCursorSprite(gUnknown_203B264);
AddMenuCursorSprite(&gUnknown_203B264->input);
}
void sub_801E54C(void)
@@ -202,7 +191,7 @@ void DrawHintSelectionMenu(void)
xxx_call_draw_string(16, 0, gUnknown_80DC0D4, gUnknown_203B264->unk34, 0);
for(hintIndex = 0; hintIndex < MAX_HINTS; hintIndex++)
{
y = sub_8013800(gUnknown_203B264, hintIndex);
y = sub_8013800(&gUnknown_203B264->input, hintIndex);
xxx_call_draw_string(10, y, gGameHints[hintIndex].heading, gUnknown_203B264->unk34, 0);
}
sub_80073E0(gUnknown_203B264->unk34);
@@ -218,8 +207,8 @@ u32 CreateHintDisplayScreen(u32 index)
gUnknown_203B268->unk38->unk14 = gUnknown_203B268->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B268->unk3C, 1, 1);
sub_8013818(gUnknown_203B268, 5, 1, gUnknown_203B268->unk34);
gUnknown_203B268->helpPageIndex = index;
sub_8013818(&gUnknown_203B268->input, 5, 1, gUnknown_203B268->unk34);
gUnknown_203B268->input.unk1E = index;
sub_801E714();
return 1;
@@ -227,7 +216,7 @@ u32 CreateHintDisplayScreen(u32 index)
u32 HandleHintDisplayScreenInput(void)
{
switch(GetKeyPress(gUnknown_203B268))
switch(GetKeyPress(&gUnknown_203B268->input))
{
case 2:
PlayMenuSoundEffect(1);
@@ -236,7 +225,7 @@ u32 HandleHintDisplayScreenInput(void)
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_8013938(gUnknown_203B268)){
if(sub_8013938(&gUnknown_203B268->input)){
sub_801E714();
return 1;
}
@@ -265,8 +254,8 @@ void DestroyHintDisplayScreen(void)
void sub_801E76C(void)
{
gUnknown_203B268->unk9C[0] = gUnknown_203B268->unk20;
gUnknown_203B268->unk9C[1] = gUnknown_203B268->helpPageIndex;
gUnknown_203B268->unk9C[0] = gUnknown_203B268->input.unk20;
gUnknown_203B268->unk9C[1] = gUnknown_203B268->input.unk1E;
gUnknown_203B268->unk9C[2] = 0xF;
gUnknown_203B268->unk9C[3] = 0;
ResetUnusedInputStruct();
@@ -276,7 +265,7 @@ void sub_801E76C(void)
void DisplayChosenHint(void)
{
sub_80073B8(gUnknown_203B268->unk34);
xxx_call_draw_string((gUnknown_203B268->helpPageIndex << 3) + 0x10, 0, gGameHints[gUnknown_203B268->helpPageIndex].heading, gUnknown_203B268->unk34, 0);
xxx_call_draw_string(0xA, 0x14, gGameHints[gUnknown_203B268->helpPageIndex].body, gUnknown_203B268->unk34, 0);
xxx_call_draw_string((gUnknown_203B268->input.unk1E << 3) + 0x10, 0, gGameHints[gUnknown_203B268->input.unk1E].heading, gUnknown_203B268->unk34, 0);
xxx_call_draw_string(0xA, 0x14, gGameHints[gUnknown_203B268->input.unk1E].body, gUnknown_203B268->unk34, 0);
sub_80073E0(gUnknown_203B268->unk34);
}

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "constants/colors.h"
#include "file_system.h"
#include "item.h"
#include "moves.h"
@@ -703,7 +704,7 @@ u32 sub_80913E0(struct Item* slot, u32 a2, struct subStruct_203B240 ** a3)
u32 result;
InitPokemonMove(buffer8, move);
sub_80078A4(a2, 4, 82, 200, 7);
sub_80078A4(a2, 4, 82, 200, COLOR_WHITE_2);
xxx_format_and_draw(4, 84, gPtrTypeText, a2, 0);
moves_data = GetMoveType(buffer8);
typestring = GetUnformattedTypeString(moves_data);
@@ -1500,7 +1501,7 @@ void ClearAllItems_8091FB4() {
}
}
bool32 IsInvalidItemReward(u8 itemID)
bool8 IsInvalidItemReward(u8 itemID)
{
s32 index;

View File

@@ -45,7 +45,7 @@ extern void DrawTeamMoneyBox(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(void *, u32);
extern s32 sub_8013800(struct MenuInputStruct *, u32);
extern void xxx_call_draw_string(s32 x, s32, u8 *, u32, u32);
extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32);
extern s32 sub_801AED0(s32);
@@ -64,14 +64,7 @@ extern struct unkStruct_203B224 *gUnknown_203B224;
struct unkStruct_203B214
{;
// size: 0xA0
u8 fill0[0x18];
u16 unk18;
s16 unk1A;
s16 unk1C;
s16 unk1E;
s16 unk20;
u16 shopItemCount;
u8 fill24[0x34 - 0x24];
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
@@ -81,14 +74,14 @@ struct unkStruct_203B214
extern struct unkStruct_203B214 *gUnknown_203B214;
extern struct unkStruct_203B214 *gUnknown_203B21C;
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32);
extern u8 sub_8019FB0(void);
extern u8 sub_80138B8(void *, u32);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(void *);
extern void sub_8013660(void *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern void sub_8013660(struct MenuInputStruct *);
extern struct UnkTextStruct2 gUnknown_80DB8CC;
extern struct UnkTextStruct2 gUnknown_80DB8B4;
@@ -98,10 +91,10 @@ extern struct UnkTextStruct2 gUnknown_80DB95C;
extern const struct UnkTextStruct2 gUnknown_80DB914;
extern void sub_801A430(void);
extern void sub_801A4A4(void);
extern void sub_8013984(u8 *);
extern void sub_8013984(struct MenuInputStruct*);
extern void sub_801A064(void);
extern void sub_801A0D8(void);
extern void AddMenuCursorSprite(void *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 sub_801A37C(void);
extern void sub_801A010(void);
@@ -616,9 +609,9 @@ u32 sub_8019E40(u32 r0)
gUnknown_203B214->unk38->unk14 = gUnknown_203B214->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B214->unk3C, 1, 1);
sub_8013818(gUnknown_203B214, CountKecleonShopItems(), 0xA, r0);
gUnknown_203B214->unk18 = gUnknown_203B218;
sub_8013984((u8 *)gUnknown_203B214);
sub_8013818(&gUnknown_203B214->input, CountKecleonShopItems(), 0xA, r0);
gUnknown_203B214->input.menuIndex = gUnknown_203B218;
sub_8013984(&gUnknown_203B214->input);
sub_801A064();
sub_801A0D8();
return 1;
@@ -632,12 +625,12 @@ u32 sub_8019EDC(u8 r0)
if(r0 == 0)
{
sub_8013660(gUnknown_203B214);
sub_8013660(&gUnknown_203B214->input);
return 0;
}
else
{
switch(GetKeyPress(gUnknown_203B214))
switch(GetKeyPress(&gUnknown_203B214->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -659,7 +652,7 @@ u32 sub_8019EDC(u8 r0)
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(gUnknown_203B214, 1) != 0)
if(sub_80138B8(&gUnknown_203B214->input, 1) != 0)
{
sub_801A064();
sub_801A0D8();
@@ -675,26 +668,26 @@ u32 sub_8019EDC(u8 r0)
u8 sub_8019FB0(void)
{
return (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + (u8)gUnknown_203B214->unk18;
return (gUnknown_203B214->input.unk1E * gUnknown_203B214->input.unk1C) + (u8)gUnknown_203B214->input.menuIndex;
}
void sub_8019FCC(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B214->unk3C, 0, 0);
gUnknown_203B214->shopItemCount = CountKecleonShopItems();
sub_8013984((u8 *)gUnknown_203B214);
gUnknown_203B214->input.unk22 = CountKecleonShopItems();
sub_8013984(&gUnknown_203B214->input);
sub_801A064();
sub_801A0D8();
if(r0)
AddMenuCursorSprite(gUnknown_203B214);
AddMenuCursorSprite(&gUnknown_203B214->input);
}
void sub_801A010(void)
{
if(gUnknown_203B214 != NULL)
{
gUnknown_203B218 = gUnknown_203B214->unk18;
gUnknown_203B218 = gUnknown_203B214->input.menuIndex;
gUnknown_203B214->unk3C[gUnknown_203B214->unk34] = gUnknown_80DB8B4;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B214->unk3C, 1, 1);
@@ -775,18 +768,14 @@ void sub_801A0D8(void)
struct Item item;
u8 temp_calc;
// Needed for the shifts..
u32 index_shift;
u32 quantity_shift;
sub_8008C54(gUnknown_203B214->unk34);
sub_80073B8(gUnknown_203B214->unk34);
xxx_call_draw_string(gUnknown_203B214->unk1E * 8 + 10,0,gUnknown_80DB8E4,
xxx_call_draw_string(gUnknown_203B214->input.unk1E * 8 + 10,0,gUnknown_80DB8E4,
gUnknown_203B214->unk34,0);
for(index = 0; index < gUnknown_203B214->unk1A; index++)
for(index = 0; index < gUnknown_203B214->input.unk1A; index++)
{
temp_calc = (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + index;
temp_calc = (gUnknown_203B214->input.unk1E * gUnknown_203B214->input.unk1C) + index;
heldItem = GetKecleonShopItem(temp_calc);
item.id = heldItem->id;
item.quantity = heldItem->quantity;
@@ -798,12 +787,12 @@ void sub_801A0D8(void)
sub_8090E14(auStack204,&item,&local_7c);
buyPrice = GetStackBuyPrice(&item);
if (buyPrice <= gTeamInventory_203B460->teamMoney) {
y = sub_8013800(gUnknown_203B214,index);
y = sub_8013800(&gUnknown_203B214->input,index);
xxx_call_draw_string(8,y,auStack204,gUnknown_203B214->unk34,0);
}
else {
sprintfStatic(auStack112,gUnknown_80DB8EC,auStack204);
y = sub_8013800(gUnknown_203B214,index);
y = sub_8013800(&gUnknown_203B214->input,index);
xxx_call_draw_string(8,y,auStack112,gUnknown_203B214->unk34,0);
}
}
@@ -826,9 +815,9 @@ u32 sub_801A20C(u32 r0)
gUnknown_203B21C->unk38->unk14 = gUnknown_203B21C->unk9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 1, 1);
sub_8013818(gUnknown_203B21C, CountKecleonWareItems(), 0xA, r0);
gUnknown_203B21C->unk18 = gUnknown_203B220;
sub_8013984((u8 *)gUnknown_203B21C);
sub_8013818(&gUnknown_203B21C->input, CountKecleonWareItems(), 0xA, r0);
gUnknown_203B21C->input.menuIndex = gUnknown_203B220;
sub_8013984(&gUnknown_203B21C->input);
sub_801A430();
sub_801A4A4();
return 1;
@@ -842,12 +831,12 @@ u32 sub_801A2A8(u8 r0)
if(r0 == 0)
{
sub_8013660(gUnknown_203B21C);
sub_8013660(&gUnknown_203B21C->input);
return 0;
}
else
{
switch(GetKeyPress(gUnknown_203B21C))
switch(GetKeyPress(&gUnknown_203B21C->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -871,7 +860,7 @@ u32 sub_801A2A8(u8 r0)
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(gUnknown_203B21C, 1) != 0)
if(sub_80138B8(&gUnknown_203B21C->input, 1) != 0)
{
sub_801A430();
sub_801A4A4();
@@ -887,26 +876,26 @@ u32 sub_801A2A8(u8 r0)
u8 sub_801A37C(void)
{
return (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + gUnknown_203B21C->unk18;
return (gUnknown_203B21C->input.unk1E * gUnknown_203B21C->input.unk1C) + gUnknown_203B21C->input.menuIndex;
}
void sub_801A398(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 0, 0);
gUnknown_203B21C->shopItemCount = CountKecleonWareItems();
sub_8013984((u8 *)gUnknown_203B21C);
gUnknown_203B21C->input.unk22 = CountKecleonWareItems();
sub_8013984(&gUnknown_203B21C->input);
sub_801A430();
sub_801A4A4();
if(r0)
AddMenuCursorSprite(gUnknown_203B21C);
AddMenuCursorSprite(&gUnknown_203B21C->input);
}
void sub_801A3DC(void)
{
if(gUnknown_203B21C != NULL)
{
gUnknown_203B220 = gUnknown_203B21C->unk18;
gUnknown_203B220 = gUnknown_203B21C->input.menuIndex;
gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB8FC;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B21C->unk3C, 1, 1);
@@ -986,18 +975,14 @@ void sub_801A4A4(void)
struct Item item;
u8 temp_calc;
// Needed for the shifts..
u32 index_shift;
u32 quantity_shift;
sub_8008C54(gUnknown_203B21C->unk34);
sub_80073B8(gUnknown_203B21C->unk34);
xxx_call_draw_string(gUnknown_203B21C->unk1E * 8 + 10,0,gUnknown_80DB92C,
xxx_call_draw_string(gUnknown_203B21C->input.unk1E * 8 + 10,0,gUnknown_80DB92C,
gUnknown_203B21C->unk34,0);
for(index = 0; index < gUnknown_203B21C->unk1A; index++)
for(index = 0; index < gUnknown_203B21C->input.unk1A; index++)
{
temp_calc = (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + index;
temp_calc = (gUnknown_203B21C->input.unk1E * gUnknown_203B21C->input.unk1C) + index;
heldItem = GetKecleonWareItem(temp_calc);
item.id = heldItem->id;
item.quantity = heldItem->quantity;
@@ -1006,15 +991,15 @@ void sub_801A4A4(void)
local_7c.unk4 = 0;
local_7c.unk6 = 0x58;
local_7c.unk8 = 1;
sub_8090E14(buffer1,(struct Item *)&item,&local_7c);
buyPrice = GetStackBuyPrice((struct Item *)&item);
sub_8090E14(buffer1,&item,&local_7c);
buyPrice = GetStackBuyPrice(&item);
if (buyPrice <= gTeamInventory_203B460->teamMoney) {
y = sub_8013800(gUnknown_203B21C,index);
y = sub_8013800(&gUnknown_203B21C->input,index);
xxx_call_draw_string(8,y,buffer1,gUnknown_203B21C->unk34,0);
}
else {
sprintfStatic(buffer2,gUnknown_80DB934,buffer1);
y = sub_8013800(gUnknown_203B21C,index);
y = sub_8013800(&gUnknown_203B21C->input,index);
xxx_call_draw_string(8,y,buffer2,gUnknown_203B21C->unk34,0);
}
}
@@ -1049,10 +1034,10 @@ u32 sub_801A5D8(u32 param_1,int param_2,struct UnkTextStruct2_sub *param_3,u32 p
sub_8099690(1);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90,1,1);
sub_8013818(&gUnknown_203B224->unk54,GetNumberOfFilledInventorySlots(),param_4,param_2);
gUnknown_203B224->unk6C = gUnknown_203B228;
gUnknown_203B224->unk72 = gUnknown_203B22A;
sub_8013984((u8 *)&gUnknown_203B224->unk54);
sub_8013818(&gUnknown_203B224->input,GetNumberOfFilledInventorySlots(),param_4,param_2);
gUnknown_203B224->input.menuIndex = gUnknown_203B228;
gUnknown_203B224->input.unk1E = gUnknown_203B22A;
sub_8013984(&gUnknown_203B224->input);
sub_801A998();
sub_801A9E0();
return 1;
@@ -1065,10 +1050,10 @@ u32 sub_801A6E8(u8 param_1)
struct Item item;
if (param_1 == 0) {
sub_8013660(&gUnknown_203B224->unk54);
sub_8013660(&gUnknown_203B224->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B224->unk54)) {
switch(GetKeyPress(&gUnknown_203B224->input)) {
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
@@ -1110,7 +1095,7 @@ u32 sub_801A6E8(u8 param_1)
if ((gUnknown_203B224->unk4[index] != 0) || (sub_801ADA0(index) != 0)) {
PlayMenuSoundEffect(6);
gUnknown_203B224->unk4[index] ^= 1;
sub_80138B8(&gUnknown_203B224->unk54,0);
sub_80138B8(&gUnknown_203B224->input,0);
sub_801A9E0();
return 1;
}
@@ -1128,7 +1113,7 @@ u32 sub_801A6E8(u8 param_1)
// NOTE: fallthrough needed here
default:
_0801A87C:
if (sub_80138B8(&gUnknown_203B224->unk54,1) != '\0') {
if (sub_80138B8(&gUnknown_203B224->input,1) != '\0') {
sub_801A998();
sub_801A9E0();
return 1;
@@ -1142,7 +1127,7 @@ _0801A87C:
s32 sub_801A8AC(void)
{
return (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + gUnknown_203B224->unk6C;
return (gUnknown_203B224->input.unk1E * gUnknown_203B224->input.unk1C) + gUnknown_203B224->input.menuIndex;
}
void sub_801A8D0(u8 r0)
@@ -1151,20 +1136,20 @@ void sub_801A8D0(u8 r0)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B224->unk90, 0, 0);
FillInventoryGaps();
gUnknown_203B224->unk76 = GetNumberOfFilledInventorySlots();
sub_8013984((u8 *)&gUnknown_203B224->unk54);
gUnknown_203B224->input.unk22 = GetNumberOfFilledInventorySlots();
sub_8013984(&gUnknown_203B224->input);
sub_801A998();
sub_801A9E0();
if(r0)
AddMenuCursorSprite((u8 *)&gUnknown_203B224->unk54);
AddMenuCursorSprite(&gUnknown_203B224->input);
}
void sub_801A928(void)
{
if(gUnknown_203B224 != NULL)
{
gUnknown_203B228 = gUnknown_203B224->unk6C;
gUnknown_203B22A = gUnknown_203B224->unk72;
gUnknown_203B228 = gUnknown_203B224->input.menuIndex;
gUnknown_203B22A = gUnknown_203B224->input.unk1E;
gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB944;
sub_8099690(0);
ResetUnusedInputStruct();
@@ -1176,8 +1161,8 @@ void sub_801A928(void)
void sub_801A998(void)
{
gUnknown_203B224->unkF0[0] = gUnknown_203B224->unk74;
gUnknown_203B224->unkF0[1] = gUnknown_203B224->unk72;
gUnknown_203B224->unkF0[0] = gUnknown_203B224->input.unk20;
gUnknown_203B224->unkF0[1] = gUnknown_203B224->input.unk1E;
gUnknown_203B224->unkF0[2] = 0xB;
gUnknown_203B224->unkF0[3] = 0;
ResetUnusedInputStruct();
@@ -1201,21 +1186,21 @@ void sub_801A9E0(void)
sub_8008C54(gUnknown_203B224->unk88);
sub_80073B8(gUnknown_203B224->unk88);
x = gUnknown_203B224->unk72 * 8 + 10;
if (gUnknown_203B224->unk72 == 0) {
x = gUnknown_203B224->input.unk1E * 8 + 10;
if (gUnknown_203B224->input.unk1E == 0) {
xxx_call_draw_string(x,0,gTeamToolboxA,gUnknown_203B224->unk88,0);
}
else {
xxx_call_draw_string(x,0,gTeamToolboxB,gUnknown_203B224->unk88,0);
}
for(r7 = 0; r7 < gUnknown_203B224->unk6E; r7++)
for(r7 = 0; r7 < gUnknown_203B224->input.unk1A; r7++)
{
teamItemIndex = (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + r7;
teamItemIndex = (gUnknown_203B224->input.unk1E * gUnknown_203B224->input.unk1C) + r7;
item = gTeamInventory_203B460->teamItems[teamItemIndex];
switch(gUnknown_203B224->unk0) {
case 0:
sub_8090E14(buffer1,&item,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);
break;
case 1:
case 2:
@@ -1224,7 +1209,7 @@ void sub_801A9E0(void)
stack.unk8 = 1;
item.flags = 1;
sub_8090E14(buffer1,&item, &stack);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);
break;
case 3:
stack1.unk0 = 0;
@@ -1233,12 +1218,12 @@ void sub_801A9E0(void)
item.flags = 1;
sub_8090E14(buffer1,&item,&stack1);
if (gUnknown_203B224->unk4[teamItemIndex] != 0 || sub_801ADA0(teamItemIndex) != '\0'){
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);
}
else
{
strncpy(gUnknown_202DE58,buffer1,0x50);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
}
break;
case 4:
@@ -1252,15 +1237,15 @@ void sub_801A9E0(void)
if (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney > MAX_TEAM_MONEY){
// very dumb but this matches...
sprintfStatic((char *)&stack3,gUnknown_80DB9A0,buffer1);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),(u8 *)&stack3,gUnknown_203B224->unk88,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),(u8 *)&stack3,gUnknown_203B224->unk88,0);
}
else
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);;
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);;
}
else {
sub_8090E14(buffer1,&item, 0);
strncpy(gUnknown_202DE58,buffer1,0x50);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
}
break;
case 5:
@@ -1270,17 +1255,17 @@ void sub_801A9E0(void)
item.flags = 1;
sub_8090E14(buffer1,&item,&stack3);
if (IsGummiItem(item.id)) {
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);
xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);
}
else
{
strncpy(gUnknown_202DE58,buffer1,0x50);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0);
}
break;
}
if ((sub_801AED0(teamItemIndex) & 1) != 0) {
sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10);
sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->input,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10);
}
}
sub_80073E0(gUnknown_203B224->unk88);

View File

@@ -1,4 +1,3 @@
#include "gba/defines.h"
#include "global.h"
#include "constants/bg_music.h"
#include "constants/colors.h"

View File

@@ -7,22 +7,7 @@
#include "wonder_mail.h"
#include "menu_input.h"
extern u8 *gUnknown_80D4990[];
extern u8 *gUnknown_80D4970[];
extern bool8 IsMailinJobSlot(struct WonderMail *mail);
void sub_802E578(void);
void HandleMailActionMenu(void);
void HandleMailboxMenu(void);
void nullsub_133(void);
void sub_802E0A0(void);
void sub_802E1AC(void);
void sub_802E73C(void);
void sub_802E758(void);
void sub_802E774(void);
void sub_802E7D0(void);
EWRAM_DATA_2 struct unkStruct_203B304 *gUnknown_203B304 = {0};
const struct UnkTextStruct2 gUnknown_80E0284 =
{
@@ -73,11 +58,24 @@ const u8 gMailAccepted[] = "Accepted";
const u8 gUnknown_80E0324[] = "/";
static const u8 mailbox_fill[] = "pksdir0";
extern struct unkStruct_203B304 *gUnknown_203B304;
extern u8 *gUnknown_80D4990[];
extern u8 *gUnknown_80D4970[];
extern bool8 IsMailinJobSlot(struct WonderMail *mail);
void sub_802E578(void);
void HandleMailActionMenu(void);
void HandleMailboxMenu(void);
void nullsub_133(void);
void sub_802E0A0(void);
void sub_802E1AC(void);
void sub_802E73C(void);
void sub_802E758(void);
void sub_802E774(void);
void sub_802E7D0(void);
extern void sub_802E088(u32);
extern void CreateMailboxMenu(void);
extern void CreateMailActionMenu(void);
extern void sub_802BD14(u32, u32, u32);
extern void sub_802BE94(u32);
extern void CreateMailMenu(void);

View File

@@ -881,7 +881,7 @@ bool8 SetMainMenuText(void)
// Have to load the pointer before the index
preload = gUnknown_203B34C->unk4[0].menuItems;
menuChoice = preload[gUnknown_203B34C->unk4[0].menuIndex].menuAction; // chosen menu action?
menuChoice = preload[gUnknown_203B34C->unk4[0].input.menuIndex].menuAction; // chosen menu action?
if (gUnknown_203B34C->currMenuChoice == menuChoice) {
return FALSE;
}

View File

@@ -15,15 +15,7 @@ struct unkStruct_203B31C
{
// Size: 0xD0
s16 unk0[NUM_DUNGEON_MAZE];
u32 unk30;
u8 fill34[0x48 - 0x34];
s16 unk48;
s16 unk4A;
s16 unk4C;
s16 unk4E;
u16 unk50;
u16 unk52;
u8 fill54[0x64 - 0x54];
struct MenuInputStruct input;
u32 unk64;
struct UnkTextStruct2 *unk68;
struct UnkTextStruct2 unk6C[4];
@@ -72,9 +64,9 @@ extern s16 sub_80A2668(u32 r0);
extern s32 sub_8013800(void *, u32);
extern bool8 IsMazeCompleted(s32);
extern s32 sub_8030668(void);
extern void sub_8013984(u32 *);
extern void sub_8013984(void *);
extern void sub_80304C8();
extern void AddMenuCursorSprite(u32 *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern void DrawDojoCourseList(void);
extern u8 sub_80138B8(void *, u32);
@@ -201,7 +193,7 @@ bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3)
sub_8012D08(gUnknown_203B31C->unk68,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B31C->unk6C,1,1);
sub_8013818(&gUnknown_203B31C->unk30,sub_8030668(),param_3,param_1);
sub_8013818(&gUnknown_203B31C->input,sub_8030668(),param_3,param_1);
sub_80304C8();
DrawDojoCourseList();
return 1;
@@ -211,10 +203,10 @@ bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3)
u32 sub_80303AC(u8 param_1)
{
if (param_1 == 0) {
sub_8013660(&gUnknown_203B31C->unk30);
sub_8013660(&gUnknown_203B31C->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B31C->unk30))
switch(GetKeyPress(&gUnknown_203B31C->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -223,7 +215,7 @@ u32 sub_80303AC(u8 param_1)
PlayMenuSoundEffect(0);
return 3;
default:
if (sub_80138B8(&gUnknown_203B31C->unk30, 1)) {
if (sub_80138B8(&gUnknown_203B31C->input, 1)) {
sub_80304C8();
DrawDojoCourseList();
return 1;
@@ -234,16 +226,16 @@ u32 sub_80303AC(u8 param_1)
}
s16 sub_8030418(void) {
return gUnknown_203B31C->unk0[(gUnknown_203B31C->unk4E * gUnknown_203B31C->unk4C) + gUnknown_203B31C->unk48];
return gUnknown_203B31C->unk0[(gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C) + gUnknown_203B31C->input.menuIndex];
}
void sub_8030444(u8 r0) {
gUnknown_203B31C->unk52 = sub_8030668();
sub_8013984(&gUnknown_203B31C->unk30);
gUnknown_203B31C->input.unk22 = sub_8030668();
sub_8013984(&gUnknown_203B31C->input);
sub_80304C8();
DrawDojoCourseList();
if(r0)
AddMenuCursorSprite(&gUnknown_203B31C->unk30);
AddMenuCursorSprite(&gUnknown_203B31C->input);
}
void sub_8030480(void) {
@@ -331,15 +323,15 @@ void DrawDojoCourseList(void)
sub_80073B8(gUnknown_203B31C->unk64);
xxx_call_draw_string(10,0,gMakuhitaDojoHeader,gUnknown_203B31C->unk64,0); // Courses
sub_8012BC4(gUnknown_203B31C->unkCC[2] * 8 + 4,0,
gUnknown_203B31C->unk4E + 1,2,7,gUnknown_203B31C->unk64);
for (index = 0; index < gUnknown_203B31C->unk4A; index++)
gUnknown_203B31C->input.unk1E + 1,2,7,gUnknown_203B31C->unk64);
for (index = 0; index < gUnknown_203B31C->input.unk1A; index++)
{
iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->unk4E * gUnknown_203B31C->unk4C + index];
iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C + index];
dungeonIndex = sub_80A2740(iVar6);
mazeIndex = sub_80A2668(iVar6);
y = sub_8013800(&gUnknown_203B31C->unk30, index);
y = sub_8013800(&gUnknown_203B31C->input, index);
color = COLOR_WHITE_2; // COLOR_WHITE again?
if (IsMazeCompleted(mazeIndex)) {
xxx_call_draw_string(8,y,gUnknown_80E0824,gUnknown_203B31C->unk64,0); // Draw Star symbol

View File

@@ -17,28 +17,31 @@ extern struct UnkTextStruct1 gUnknown_2027370[4];
extern u8 gUnknown_80D4828[];
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(u32 *);
extern u32 sub_80137A8(u32 *);
void MoveMenuCursorUp(u32 *);
void MoveMenuCursorDown(u32 *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern u32 sub_80137A8(struct MenuInputStruct *);
void MoveMenuCursorUp(struct MenuInputStruct *);
void MoveMenuCursorDown(struct MenuInputStruct *);
extern void sub_80073B8(u32);
extern s32 sub_8008ED0(const u8 *);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
extern s32 sub_8013800(u32 *, s32);
extern s32 sub_8013800(struct MenuInputStruct *, s32);
extern void sub_80073E0(u32);
extern void sub_8013660(u32 *);
void AddMenuCursorSprite(void *);
extern void sub_8013660(struct MenuInputStruct *);
void AddMenuCursorSprite(struct MenuInputStruct *);
void AddMenuCursorSprite_(struct MenuInputStruct *, u32);
void sub_8012EBC(struct MenuStruct *param_1);
extern void sub_8013134(u32 *, u32, u32);
extern void sub_80137B0(u32 *, u32);
extern void sub_8013134(struct MenuInputStruct *, u32, u32);
extern void sub_80137B0(struct MenuInputStruct *, u32);
extern s16 sub_8009614(u32, u32);
extern u32 ReturnIntFromChar2(u8);
struct unkChar *GetCharacter(u32);
extern void xxx_call_draw_char(u32, u32, u32, u32, u32);
extern void sub_801317C(struct MenuInputStructSub *);
extern void nullsub_7(u16 *);
const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED };
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6)
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6)
{
s32 iVar1;
u32 uVar2;
@@ -74,7 +77,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6)
uVar2 = ReturnIntFromChar2(iVar1 + 0x30);
iVar3 = GetCharacter(uVar2);
total_x += iVar3->unk6;
xxx_call_draw_char(x - total_x,y,uVar2,param_5,param_6);
xxx_call_draw_char(x - total_x,y,uVar2,color,param_6);
counter++;
if (counter >= len) {
break;
@@ -83,7 +86,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6)
}
}
void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5)
void sub_8012C60(u32 x,u32 y,u32 param_3,u32 color,u32 param_5)
{
u32 add_x;
struct unkChar *iVar3;
@@ -97,7 +100,7 @@ void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5)
else {
add_x = 0;
}
xxx_call_draw_char(x + add_x,y,uVar2,param_4,param_5);
xxx_call_draw_char(x + add_x,y,uVar2,color,param_5);
}
void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2)
@@ -228,9 +231,9 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32
if (menuIndex < 0) {
menuIndex = iVar1;
}
sub_8013134(&param_1->unk14,counter,index);
param_1->menuIndex = menuIndex;
sub_80137B0(&param_1->unk14,0);
sub_8013134(&param_1->input,counter,index);
param_1->input.menuIndex = menuIndex;
sub_80137B0(&param_1->input,0);
param_1->unk4C = TRUE;
param_1->unk4D = TRUE;
param_1->unk4E = TRUE;
@@ -268,9 +271,9 @@ void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32
if (menuIndex < 0) {
menuIndex = iVar1;
}
sub_8013134(&param_1->unk14,counter,index);
param_1->menuIndex = menuIndex;
sub_80137B0(&param_1->unk14,0);
sub_8013134(&param_1->input,counter,index);
param_1->input.menuIndex = menuIndex;
sub_80137B0(&param_1->input,0);
param_1->index = index;
param_1->menuTextColorArray = colorArray;
if (colorArray == NULL) {
@@ -341,7 +344,7 @@ void sub_8012EBC(struct MenuStruct *param_1)
color = colorArray[0];
}
sprintfStatic(buffer,gUnknown_80D4828,color,textPtr);
y = sub_8013800(&param_1->unk14,counter);
y = sub_8013800(&param_1->input,counter);
xxx_format_and_draw(8,y,buffer,param_1->index,0);
menuItemsPtr++;
counter++;
@@ -352,10 +355,10 @@ void sub_8012EBC(struct MenuStruct *param_1)
}
if (param_1->unk4E) {
if (param_1->unk4C) {
AddMenuCursorSprite(&param_1->unk14);
AddMenuCursorSprite(&param_1->input);
}
else {
sub_8013660(&param_1->unk14);
sub_8013660(&param_1->input);
}
}
}
@@ -366,31 +369,31 @@ bool8 sub_8012FD8(struct MenuStruct *param_1)
s32 index;
const struct MenuItem *item;
prevMenuIndex = param_1->menuIndex;
prevMenuIndex = param_1->input.menuIndex;
if (param_1->unk4C) {
switch(GetKeyPress(&param_1->unk14))
switch(GetKeyPress(&param_1->input))
{
case INPUT_DPAD_DOWN:
MoveMenuCursorDown(&param_1->unk14);
if (prevMenuIndex != param_1->menuIndex) {
MoveMenuCursorDown(&param_1->input);
if (prevMenuIndex != param_1->input.menuIndex) {
PlayMenuSoundEffect(3);
}
break;
case INPUT_DPAD_UP:
MoveMenuCursorUp(&param_1->unk14);
if (prevMenuIndex != param_1->menuIndex) {
MoveMenuCursorUp(&param_1->input);
if (prevMenuIndex != param_1->input.menuIndex) {
PlayMenuSoundEffect(3);
}
break;
case INPUT_A_BUTTON:
index = sub_80137A8(&param_1->unk14);
index = sub_80137A8(&param_1->input);
item = &param_1->menuItems[index];
if ((-1 < item->menuAction) &&
((param_1->unkC == NULL || (param_1->unkC[index] != 1)))) {
param_1->menuAction = item->menuAction;
++param_1; --param_1;
param_1->unk4C = FALSE;
param_1->unk38 = 0;
param_1->input.unk24 = 0;
}
else
{
@@ -404,8 +407,8 @@ bool8 sub_8012FD8(struct MenuStruct *param_1)
PlayMenuSoundEffect(0);
break;
case INPUT_B_BUTTON:
if (-1 < param_1->menuItems[param_1->unk2E].menuAction) {
param_1->menuAction = param_1->menuItems[param_1->unk2E].menuAction;
if (-1 < param_1->menuItems[param_1->input.unk1A].menuAction) {
param_1->menuAction = param_1->menuItems[param_1->input.unk1A].menuAction;
param_1->unk4C = FALSE;
PlayMenuSoundEffect(1);
}
@@ -424,18 +427,18 @@ bool8 sub_80130A8(struct MenuStruct *param_1)
if (param_1->unk4C) {
switch(GetKeyPress(&param_1->unk14))
switch(GetKeyPress(&param_1->input))
{
case INPUT_A_BUTTON:
index = sub_80137A8(&param_1->unk14);
index = sub_80137A8(&param_1->input);
menuItem = &param_1->menuItems[index];
param_1->menuAction = menuItem->menuAction;
param_1->unk4C = FALSE;
param_1->unk38 = 0;
param_1->input.unk24 = 0;
PlayMenuSoundEffect(0);
break;
case INPUT_B_BUTTON:
if(menuAction = param_1->menuItems[param_1->unk2E].menuAction, -1 < menuAction) {
if(menuAction = param_1->menuItems[param_1->input.unk1A].menuAction, -1 < menuAction) {
param_1->menuAction = menuAction;
param_1->unk4C = FALSE;
PlayMenuSoundEffect(0);
@@ -457,3 +460,51 @@ bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction)
}
return FALSE;
}
void sub_8013134(struct MenuInputStruct *param_1, u32 menuItemCounter, u32 index) {
struct UnkTextStruct1 *temp;
temp = &gUnknown_2027370[index];
param_1->unk0 = index;
param_1->menuIndex = 0;
param_1->unk1A = menuItemCounter;
param_1->unk1C = menuItemCounter;
param_1->unk1E = 0;
param_1->unk4 = 0;
if(temp->unkC == 6)
{
param_1->unk6 = 0x10;
}
else
{
param_1->unk6 = 0x2;
}
param_1->unkC = 0;
param_1->unkE = 0;
param_1->unk14 = 0;
param_1->unk24 = 0;
sub_801317C(&param_1->unk28);
}
void sub_801317C(struct MenuInputStructSub *param_1)
{
param_1->unk0 = 0;
param_1->a_button = 0;
param_1->b_button = 0;
param_1->dpad_left = 0;
param_1->dpad_right = 0;
param_1->unk8 = -1;
param_1->unkA = -1;
nullsub_7(&param_1->unk8);
ResetUnusedInputStruct();
}
void AddMenuCursorSprite(struct MenuInputStruct *param_1)
{
AddMenuCursorSprite_(param_1, 0);
}

350
src/menu_input_1.c Normal file
View File

@@ -0,0 +1,350 @@
#include "global.h"
#include "constants/input.h"
#include "input.h"
#include "text.h"
extern struct UnkTextStruct1 gUnknown_2027370[4];
extern void PlayMenuSoundEffect(u32);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern void sub_8013A7C(struct MenuInputStruct *);
extern void sub_8013A54(struct MenuInputStruct *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern void MoveMenuCursorUp(struct MenuInputStruct *);
extern void MoveMenuCursorDown(struct MenuInputStruct *);
void sub_8013984(struct MenuInputStruct *);
void sub_801317C(struct MenuInputStructSub *);
void sub_80137F8(struct MenuInputStruct *, u32);
s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2);
void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1);
void sub_801332C(u16 *);
void sub_8013660(struct MenuInputStruct *param_1)
{
if (0 < param_1->unk1A)
{
UpdateMenuCursorSpriteCoords(param_1);
sub_801332C(&param_1->unk8);
}
}
void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1)
{
s32 index;
struct UnkTextStruct1 *temp;
index = param_1->unk0;
temp = &gUnknown_2027370[index];
param_1->unk8 = temp->unk0 * 8 + param_1->unk4;
param_1->unkA = temp->unk2 * 8 + sub_8013800(param_1, param_1->menuIndex);
}
void MoveMenuCursorDown(struct MenuInputStruct *param_1)
{
param_1->unk24 = 0;
if (param_1->unk1A < 1) {
param_1->menuIndex = 0;
}
else {
param_1->menuIndex++;
if (param_1->menuIndex >= param_1->unk1A) {
param_1->menuIndex = 0;
}
}
}
void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2)
{
param_1->unk24 = 0;
if (param_1->unk1A < 1) {
param_1->menuIndex = 0;
}
else {
param_1->menuIndex++;
if (param_1->menuIndex >= param_1->unk1A) {
if (param_2 != 0) {
param_1->menuIndex = 0;
}
else
{
param_1->menuIndex = param_1->unk1A - 1;
}
}
}
}
void MoveMenuCursorUp(struct MenuInputStruct *param_1)
{
param_1->unk24 = 0;
if (param_1->unk1A < 1) {
param_1->menuIndex = 0;
}
else {
param_1->menuIndex--;
if (param_1->menuIndex < 0) {
param_1->menuIndex = param_1->unk1A + -1;
}
}
}
void sub_8013744(struct MenuInputStruct *param_1, u8 param_2)
{
param_1->unk24 = 0;
if (param_1->unk1A < 1) {
param_1->menuIndex = 0;
}
else {
param_1->menuIndex--;
if (param_1->menuIndex < 0) {
if (param_2 != 0) {
param_1->menuIndex = param_1->unk1A + -1;
}
else {
param_1->menuIndex = 0;
}
}
}
}
void sub_8013780(struct MenuInputStruct *param_1, s32 param_2)
{
if (param_2 < 0) {
param_1->menuIndex = 0;
}
else if (param_2 >= param_1->unk1A) {
param_1->menuIndex = param_1->unk1A - 1;
}
else {
param_1->menuIndex = param_2;
}
param_1->unk24 = 0;
}
s32 sub_80137A8(struct MenuInputStruct *param_1)
{
return param_1->menuIndex;
}
void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2)
{
s32 iVar1;
#ifndef NONMATCHING
register s32 iVar2 asm("r0");
#else
s32 iVar2;
#endif
if (param_2 >= 1) {
iVar2 = param_2 << 8;
}
else
{
if (gUnknown_2027370[param_1->unk0].unkC == 6)
{
iVar1 = 0x10;
}
else
{
iVar1 = 0;
}
iVar2 = (gUnknown_2027370[param_1->unk0].unk6 * 8 - iVar1);
iVar2 <<= 8;
}
param_1->unk10 = iVar2 / param_1->unk1C;
}
void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2)
{
param_1->unk10 = param_2 << 8;
}
s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2)
{
s32 iVar1;
s32 iVar2;
iVar2 = param_1->unk6;
iVar1 = param_2 * param_1->unk10;
if (iVar1 < 0) {
iVar1 = iVar1 + 0xff;
}
return (iVar2 + (iVar1 >> 8));
}
void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4)
{
param_1->unk0 = param_4;
param_1->unk22 = param_2;
param_1->unk1C = param_3;
param_1->unk14 = 0;
param_1->unk24 = 0;
param_1->menuIndex = 0;
param_1->unk1E = 0;
sub_801317C(&param_1->unk28);
sub_8013984(param_1);
sub_80137F8(param_1,0xC);
}
void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4)
{
param_1->unk0 = param_4;
param_1->unk22 = param_2;
param_1->unk1C = param_3;
param_1->unk14 = 0;
param_1->unk24 = 0;
param_1->menuIndex = 0;
param_1->unk1E = 0;
sub_801317C(&param_1->unk28);
sub_8013984(param_1);
sub_80137F8(param_1,0x18);
}
void sub_8013878(struct MenuInputStruct *param_1, int param_2)
{
if (param_2 < 0) {
param_2 = 0;
}
else if (param_2 >= param_1->unk22) {
param_2 = param_1->unk22 + -1;
}
param_1->unk1E = param_2 / param_1->unk1C;
param_1->menuIndex = param_2 % param_1->unk1C;
param_1->unk24 = 0;
sub_8013984(param_1);
}
bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2)
{
s32 sVar1;
s32 oldIndex;
sVar1 = param_1->unk1E;
oldIndex = param_1->menuIndex;
AddMenuCursorSprite(param_1);
if(param_2)
{
switch(GetKeyPress(param_1))
{
case INPUT_DPAD_UP:
MoveMenuCursorUp(param_1);
if(oldIndex != param_1->menuIndex)
PlayMenuSoundEffect(3);
break;
case INPUT_DPAD_DOWN:
MoveMenuCursorDown(param_1);
if(oldIndex != param_1->menuIndex)
PlayMenuSoundEffect(3);
break;
case INPUT_DPAD_LEFT:
sub_8013A7C(param_1);
break;
case INPUT_DPAD_RIGHT:
sub_8013A54(param_1);
break;
}
}
if (sVar1 != param_1->unk1E) {
PlayMenuSoundEffect(4);
return TRUE;
}
else
{
return FALSE;
}
}
bool8 sub_8013938(struct MenuInputStruct *param_1)
{
s32 sVar1;
sVar1 = param_1->unk1E;
param_1->unk1A = 0;
param_1->unk14 = 0;
AddMenuCursorSprite(param_1);
switch(GetKeyPress(param_1))
{
case INPUT_DPAD_LEFT:
sub_8013A7C(param_1);
break;
case INPUT_DPAD_RIGHT:
sub_8013A54(param_1);
break;
}
if (sVar1 != param_1->unk1E) {
PlayMenuSoundEffect(4);
return TRUE;
}
else
{
return FALSE;
}
}
void sub_8013984(struct MenuInputStruct * param_1) {
s32 iVar2;
s32 iVar4;
struct UnkTextStruct1 *ptr;
iVar4 = param_1->unk0;
ptr = &gUnknown_2027370[iVar4];
if (param_1->unk1C == 0) {
param_1->unk1C++;
}
param_1->unk20 = param_1->unk22 / param_1->unk1C;
iVar2 = (param_1->unk22 % param_1->unk1C);
if (iVar2 != 0) {
param_1->unk20++;
}
if (param_1->unk1E > param_1->unk20 - 1) {
param_1->unk1E = param_1->unk20 - 1;
}
if ((param_1->unk1E != param_1->unk20 - 1) || (param_1->unk22 % param_1->unk1C == 0))
{
param_1->unk1A = param_1->unk1C;
}
else
{
param_1->unk1A = param_1->unk22 % param_1->unk1C;
}
if (param_1->menuIndex > param_1->unk1A - 1) {
param_1->menuIndex = param_1->unk1A - 1;
}
param_1->unk4 = 0;
if (ptr->unkC == 6) {
param_1->unk6 = 0x10;
}
else {
param_1->unk6 = 0;
}
if (param_1->unk20 < 2) {
param_1->unkC = 0;
}
else {
param_1->unkC = (ptr->unk0 + ptr->unk04 + -2) * 8;
}
param_1->unkE = ((ptr->unk2) + 1) * 8 + -2;
}
void sub_8013A54(struct MenuInputStruct *param_1)
{
if (param_1->unk1E < param_1->unk20 - 1) {
param_1->unk1E++;
}
else
{
param_1->unk1E = 0;
}
sub_8013984(param_1);
}
void sub_8013A7C(struct MenuInputStruct *param_1)
{
if (param_1->unk1E < 1) {
param_1->unk1E = param_1->unk20 - 1;
}
else
{
param_1->unk1E--;
}
sub_8013984(param_1);
}

View File

@@ -1,12 +1,12 @@
#include "constants/input.h"
#include "global.h"
#include "constants/input.h"
#include "input.h"
extern void nullsub_34(struct UnkInputStruct *r0);
extern void nullsub_34(struct MenuInputStructSub *r0);
u32 sub_8012AE8(void);
u32 sub_8012A64(struct UnkInputStruct *r0, u32 r1)
u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1)
{
if(r0 == NULL)
{
@@ -16,36 +16,39 @@ u32 sub_8012A64(struct UnkInputStruct *r0, u32 r1)
{
nullsub_34(r0);
}
if(r0->unk1 != 0)
if(r0->a_button != 0)
{
r0->unk1 = 0;
return 1;
r0->a_button = 0;
return INPUT_A_BUTTON;
}
if(r0->unk2 == 0)
else if(r0->b_button == 0)
{
return sub_8012AE8();
}
r0->unk2 = r0->unk1;
return 2;
else
{
r0->b_button = 0;
return INPUT_B_BUTTON;
}
}
u32 GetKeyPress(struct UnkInputStruct *r0)
u32 GetKeyPress(struct MenuInputStruct *r0)
{
if(r0 != NULL)
{
if(r0->a_button != 0)
if(r0->unk28.a_button != 0)
{
return INPUT_A_BUTTON;
}
if(r0->b_button != 0)
if(r0->unk28.b_button != 0)
{
return INPUT_B_BUTTON;
}
if(r0->dpad_left != 0)
if(r0->unk28.dpad_left != 0)
{
return INPUT_DPAD_LEFT;
}
if(r0->dpad_right != 0)
if(r0->unk28.dpad_right != 0)
{
return INPUT_DPAD_RIGHT;
}

View File

@@ -7,6 +7,7 @@
#include "code_809447C.h"
#include "text_util.h"
#include "constants/colors.h"
#include "constants/monster.h"
#include "file_system.h"
#include "code_800D090.h"
@@ -1451,7 +1452,7 @@ void unk_MovePrintData(struct Move* move, int y) {
s32 power;
const char* text;
sub_80078A4(y, 4, 72, 200, 7);
sub_80078A4(y, 4, 72, 200, COLOR_WHITE_2);
sub_8092D54(gAvailablePokemonNames, move);
xxx_format_and_draw(4, 74, gUnknown_810CF00, y, 0);
xxx_format_and_draw(4, 86, gPtrTypeText, y, 0);

View File

@@ -1,5 +1,6 @@
#include "global.h"
#include "constants/input.h"
#include "constants/colors.h"
#include "input.h"
#include "memory.h"
#include "text.h"
@@ -662,17 +663,17 @@ void CreateOptionsMenu(void)
case WINDOW_COLOR_BLUE:
length = sub_8008ED0(gWindowBGBlueString);
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50,
y + 0xA,length,7);
y + 0xA,length,COLOR_WHITE_2);
break;
case WINDOW_COLOR_RED:
length = sub_8008ED0(gWindowBGRedString);
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50,
y + 0xA,length,7);
y + 0xA,length,COLOR_WHITE_2);
break;
case WINDOW_COLOR_GREEN:
length = sub_8008ED0(gWindowBGGreenString);
sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50,
y + 0xA,length,7);
y + 0xA,length,COLOR_WHITE_2);
break;
}
sub_80073E0(gUnknown_203B260->unk44);

View File

@@ -1,4 +1,3 @@
#include "gba/defines.h"
#include "global.h"
#include "constants/dungeon.h"
#include "item.h"

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "input.h"
#include "personality_test.h"
#include "constants/emotions.h"
#include "constants/input.h"
@@ -6,7 +7,6 @@
#include "random.h"
#include "file_system.h"
#include "pokemon.h"
#include "input.h"
#include "save.h"
#include "memory.h"
#include "game_options.h"
@@ -62,16 +62,16 @@ extern void sub_800836C(u32, u8 *r0, u32);
extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray);
extern void RedrawPartnerSelectionMenu(void);
extern void sub_8013818(struct UnkInputStruct **r0, s32, u32, u32);
extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32);
extern u32 GetKeyPress(struct UnkInputStruct **r0);
extern u8 sub_80138B8(struct UnkInputStruct **r0, u32);
extern u32 GetKeyPress(struct MenuInputStruct *r0);
extern u8 sub_80138B8(struct MenuInputStruct *r0, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(struct UnkInputStruct **r0);
u32 sub_8013800(struct UnkInputStruct **r0, u32);
extern void AddMenuCursorSprite(struct UnkInputStruct **r0);
extern void sub_8013984(struct MenuInputStruct *r0);
u32 sub_8013800(struct MenuInputStruct *r0, u32);
extern void AddMenuCursorSprite(struct MenuInputStruct *r0);
extern void xxx_call_draw_string(u32 x, u32 y, const char *text, u32, u32);
extern u32 sub_80095E4(s16, u32);
@@ -791,7 +791,7 @@ void CreatePartnerSelectionMenu(s16 starterID)
gUnknown_203B404->unkb4[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B404->unk54, 1, 1);
sub_8013818(&gUnknown_203B404->unk18, GetValidPartners(), 0xA, gUnknown_203B404->unk4C);
sub_8013818(&gUnknown_203B404->input, GetValidPartners(), 0xA, gUnknown_203B404->unk4C);
RedrawPartnerSelectionMenu();
PersonalityTest_DisplayPartnerSprite();
}
@@ -801,17 +801,17 @@ u16 HandlePartnerSelectionInput(void)
{
s32 partnerID;
partnerID = gUnknown_203B404->currPartnerSelection;
partnerID = gUnknown_203B404->input.menuIndex;
gUnknown_203B404->unk16 = 0;
if (GetKeyPress(&gUnknown_203B404->unk18) == INPUT_A_BUTTON) {
if (GetKeyPress(&gUnknown_203B404->input) == INPUT_A_BUTTON) {
PlayMenuSoundEffect(0);
return gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection];
return gUnknown_203B404->PartnerArray[gUnknown_203B404->input.menuIndex];
}
else {
if (sub_80138B8(&gUnknown_203B404->unk18, 1) != '\0') {
if (sub_80138B8(&gUnknown_203B404->input, 1) != '\0') {
RedrawPartnerSelectionMenu();
}
if (partnerID != gUnknown_203B404->currPartnerSelection) {
if (partnerID != gUnknown_203B404->input.menuIndex) {
PersonalityTest_DisplayPartnerSprite();
}
if (gUnknown_203B404->unk16 != '\0') {
@@ -825,12 +825,12 @@ u16 HandlePartnerSelectionInput(void)
void sub_803CE34(u8 param_1)
{
gUnknown_203B404->numPartners = GetValidPartners();
sub_8013984(&gUnknown_203B404->unk18);
gUnknown_203B404->input.unk22 = GetValidPartners();
sub_8013984(&gUnknown_203B404->input);
RedrawPartnerSelectionMenu();
PersonalityTest_DisplayPartnerSprite();
if (param_1 != 0) {
AddMenuCursorSprite(&gUnknown_203B404->unk18);
AddMenuCursorSprite(&gUnknown_203B404->input);
}
}
@@ -1006,7 +1006,7 @@ void PersonalityTest_DisplayPartnerSprite(void)
u8 *r6;
u32 faceIndex;
partnerID = gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection];
partnerID = gUnknown_203B404->PartnerArray[gUnknown_203B404->input.menuIndex];
sub_8008C54(1);
sub_80073B8(1);
faceFile = GetDialogueSpriteDataPtr(partnerID);

View File

@@ -192,7 +192,7 @@ s32 GetBaseSpecies(s16 index) {
return index;
}
s32 GetBaseSpeciesNoUnown(s16 index) {
s16 GetBaseSpeciesNoUnown(s16 index) {
register s32 a1_ asm("r2") = index;
if (index == MONSTER_CASTFORM_SNOWY) {
return MONSTER_CASTFORM;

View File

@@ -246,20 +246,21 @@ void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index)
sprintfStatic(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // {COLOR_2 CYAN}%s{END_COLOR_TEXT_2}
}
void sub_808D930(u8 *buffer, s16 index)
void sub_808D930(u8 *buffer, s32 index)
{
char *unownString;
s32 unownIndex;
const char *preload;
s16 index_s16 = index;
if (GetBaseSpecies(index) == MONSTER_UNOWN) {
if (GetBaseSpecies(index_s16) == MONSTER_UNOWN) {
preload = gUnknown_8107630; // %s%c
unownString = GetMonSpecies(MONSTER_UNOWN);
unownIndex = GetUnownIndex(index);
unownIndex = GetUnownIndex(index_s16);
sprintfStatic(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!?
}
else {
sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index].species); // %s
sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index_s16].species); // %s
}
}
@@ -376,9 +377,10 @@ u32 GetSize(s16 index)
return gMonsterParameters[index].size;
}
u8 GetFriendArea(s16 index)
u8 GetFriendArea(s32 index)
{
return gMonsterParameters[index].friendArea;
s16 index_s32 = index;
return gMonsterParameters[index_s32].friendArea;
}
u16 GetBaseHP(s16 index)
@@ -422,9 +424,10 @@ u8 GetPokemonAbility(s16 index, u32 abilityIndex)
return gMonsterParameters[index].abilities[abilityIndex];
}
s16 GetDexInternalNo(s16 index, u32 r1)
s16 GetDexInternalNo(s32 index, u32 r1)
{
return gMonsterParameters[index].dexInternal[r1];
s16 index_s16 = index;
return gMonsterParameters[index_s16].dexInternal[r1];
}
s16 GetRecruitRate(s16 index)
@@ -617,7 +620,7 @@ void sub_808DFDC(s32 a1, struct PokemonStruct2* a2)
}
}
void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 a3)
void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 level)
{
u8 buffer[12];
s32 id = _id;
@@ -633,11 +636,11 @@ void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 a3)
DecompressATFile((char*)gLevelCurrentData, 0, file);
CloseFile(file);
}
a3 -= 1;
if ( a3 < 0 )
a3 = 0;
level -= 1;
if ( level < 0 )
level = 0;
*a1 = gLevelCurrentData[a3];
*a1 = gLevelCurrentData[level];
}
u8* DecompressMoveID(u8* a1, u16* moveID)

View File

@@ -14,22 +14,8 @@ struct unkStruct_203B2CC
{
// size: 0xD4;
u8 receivedNewsletters[NUM_POKEMON_NEWS];
u32 unk38;
u8 fill3C[0x50 - 0x3C];
s16 unk50;
s16 unk52;
s16 unk54;
s16 unk56;
u16 unk58;
u16 numPKMNNews;
u8 fill5C[0x6C - 0x5C];
struct MenuInputStruct input;
u32 unk6C;
struct UnkTextStruct2 *unk70;
struct UnkTextStruct2 unk74[4];
};
@@ -55,15 +41,7 @@ struct unkStruct_203B2D8
{
// size: 0xA4
u8 unk0[4];
u32 unk4;
u8 fill8[0x1C - 0x8];
s16 unk1C;
s16 unk1E;
s16 unk20;
s16 unk22;
s16 fill24;
/* 0x26 */ s16 emptyMailSlots;
u8 fill28[0x38 - 0x28];
struct MenuInputStruct input;
u32 unk38;
struct UnkTextStruct2 *unk3C;
struct UnkTextStruct2 unk40[4];
@@ -180,9 +158,9 @@ extern void CreatePKMNNewsMenu(void);
extern void sub_8013818(void *, u32, u32, u32);
extern u8 sub_80138B8(void *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(u32 *);
extern void sub_8013660(u32 *);
extern void AddMenuCursorSprite(u32 *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern void sub_8013660(struct MenuInputStruct *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern void sub_802BCC4(void);
extern void sub_802BB14(u32);
extern void sub_801317C(u32 *);
@@ -190,7 +168,7 @@ extern u8 HasNoMailinMailbox(void);
extern void sub_802BF30(void);
extern void CreateMailMenu(void);
extern s32 CountEmptyMailSlots(void);
extern void sub_8013848(u32 *, s32, u32, u32);
extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32);
void sub_802BB28(void);
extern void sub_802BB98(void);
extern void sub_802BC08(void);
@@ -206,8 +184,8 @@ extern void sub_80073E0(u32);
extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
extern void sub_803B6B0(u32, u32, u32, u32);
extern s32 sub_8013800(u32 *, s32);
extern void sub_8013984(u32 *);
extern s32 sub_8013800(struct MenuInputStruct *, s32);
extern void sub_8013984(struct MenuInputStruct *);
extern struct PokemonStruct *sub_808D3BC(void);
extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);
@@ -240,12 +218,12 @@ u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2CC->unk74, 1, 1);
sub_8013818(&gUnknown_203B2CC->unk38, GetNumPKMNNews(), r2, r0);
sub_8013818(&gUnknown_203B2CC->input, GetNumPKMNNews(), r2, r0);
gUnknown_203B2CC->unk50 = gUnknown_203B2D0;
gUnknown_203B2CC->unk56 = gUnknown_203B2D2;
gUnknown_203B2CC->input.menuIndex = gUnknown_203B2D0;
gUnknown_203B2CC->input.unk1E = gUnknown_203B2D2;
sub_8013984(&gUnknown_203B2CC->unk38);
sub_8013984(&gUnknown_203B2CC->input);
sub_802B880();
CreatePKMNNewsMenu();
@@ -257,12 +235,12 @@ u32 sub_802B720(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B2CC->unk38);
sub_8013660(&gUnknown_203B2CC->input);
return 0;
}
else
{
switch(GetKeyPress(&gUnknown_203B2CC->unk38))
switch(GetKeyPress(&gUnknown_203B2CC->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -274,7 +252,7 @@ u32 sub_802B720(u8 r0)
PlayMenuSoundEffect(4);
return 4;
}
if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0)
if(sub_80138B8(&gUnknown_203B2CC->input, 1) != 0)
{
sub_802B880();
CreatePKMNNewsMenu();
@@ -287,7 +265,7 @@ u32 sub_802B720(u8 r0)
u8 GetPokemonNewsIndex(void)
{
return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50];
return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + gUnknown_203B2CC->input.menuIndex];
}
void sub_802B7D0(u8 r0)
@@ -295,14 +273,14 @@ void sub_802B7D0(u8 r0)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2CC->unk74, 0, 0);
gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews();
sub_8013984(&gUnknown_203B2CC->unk38);
gUnknown_203B2CC->input.unk22 = GetNumPKMNNews();
sub_8013984(&gUnknown_203B2CC->input);
sub_802B880();
CreatePKMNNewsMenu();
if(r0 != 0)
{
AddMenuCursorSprite(&gUnknown_203B2CC->unk38);
AddMenuCursorSprite(&gUnknown_203B2CC->input);
}
}
@@ -310,9 +288,9 @@ void sub_802B81C(void)
{
if(gUnknown_203B2CC != NULL)
{
gUnknown_203B2D0 = gUnknown_203B2CC->unk50;
gUnknown_203B2D0 = gUnknown_203B2CC->input.menuIndex;
gUnknown_203B2D2 = gUnknown_203B2CC->unk56;
gUnknown_203B2D2 = gUnknown_203B2CC->input.unk1E;
gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0;
@@ -380,11 +358,11 @@ void CreatePKMNNewsMenu(void)
sub_8008C54(gUnknown_203B2CC->unk6C);
sub_80073B8(gUnknown_203B2CC->unk6C);
xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0);
sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C);
for(index = 0; index < gUnknown_203B2CC->unk52; index++)
sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->input.unk1E + 1, 2, 7, gUnknown_203B2CC->unk6C);
for(index = 0; index < gUnknown_203B2CC->input.unk1A; index++)
{
y = sub_8013800(&gUnknown_203B2CC->unk38, index);
new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + index;
y = sub_8013800(&gUnknown_203B2CC->input, index);
new_index = (gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + index;
mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index];
sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C);
sub_802BC7C();
@@ -607,9 +585,9 @@ u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3)
sub_8012D34(gUnknown_203B2D8->unk3C,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40,1,1);
sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1);
gUnknown_203B2D8->unk1C = gUnknown_203B2DC;
sub_8013984(&gUnknown_203B2D8->unk4);
sub_8013848(&gUnknown_203B2D8->input,CountEmptyMailSlots(),param_3,param_1);
gUnknown_203B2D8->input.menuIndex = gUnknown_203B2DC;
sub_8013984(&gUnknown_203B2D8->input);
sub_802BF30();
CreateMailMenu();
return 1;
@@ -620,10 +598,10 @@ u32 sub_802BDEC(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B2D8->unk4);
sub_8013660(&gUnknown_203B2D8->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B2D8->unk4))
switch(GetKeyPress(&gUnknown_203B2D8->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -635,7 +613,7 @@ u32 sub_802BDEC(u8 r0)
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0)
if(sub_80138B8(&gUnknown_203B2D8->input, 1) != 0)
{
sub_802BF30();
CreateMailMenu();
@@ -647,7 +625,7 @@ u32 sub_802BDEC(u8 r0)
}
u8 sub_802BE74(void) {
return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C];
return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + gUnknown_203B2D8->input.menuIndex];
}
void sub_802BE94(u8 r0)
@@ -655,14 +633,14 @@ void sub_802BE94(u8 r0)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 0, 0);
gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots();
sub_8013984(&gUnknown_203B2D8->unk4);
gUnknown_203B2D8->input.unk22 = CountEmptyMailSlots();
sub_8013984(&gUnknown_203B2D8->input);
sub_802BF30();
CreateMailMenu();
if(r0 != 0)
{
AddMenuCursorSprite(&gUnknown_203B2D8->unk4);
AddMenuCursorSprite(&gUnknown_203B2D8->input);
}
}
@@ -670,7 +648,7 @@ void sub_802BEDC(void)
{
if(gUnknown_203B2D8 != NULL)
{
gUnknown_203B2DC = gUnknown_203B2D8->unk1C;
gUnknown_203B2DC = gUnknown_203B2D8->input.menuIndex;
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 1, 1);

View File

@@ -29,8 +29,7 @@ EWRAM_DATA_2 struct PostOfficeHelper *gPostOfficeHelper = {0};
struct unkStruct_203B330
{
// size: 0x78
struct UnkInputStruct *unk0;
u8 fill4[0x8];
struct MenuInputStructSub input;
u8 unkC;
u8 dungeonIndex;
u8 fillE[2];
@@ -179,7 +178,7 @@ extern u8 gAvailablePokemonNames[];
extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32);
extern u32 sub_8012A64(struct UnkInputStruct**, u32);
extern u32 sub_8012A64(struct MenuInputStructSub *, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8031A84();
extern void DisplayMissionObjectives();
@@ -536,7 +535,7 @@ u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3)
gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8);
gUnknown_203B330->unkC = param_1;
gUnknown_203B330->dungeonIndex = dungeon;
sub_801317C(&gUnknown_203B330->unk0);
sub_801317C(&gUnknown_203B330->input);
gUnknown_203B330->unk10 = param_3;
gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3];
sub_8031A2C();
@@ -545,7 +544,7 @@ u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3)
u32 sub_80319F8(void)
{
switch(sub_8012A64(&gUnknown_203B330->unk0, gUnknown_203B330->unk10))
switch(sub_8012A64(&gUnknown_203B330->input, gUnknown_203B330->unk10))
{
case 2:
PlayMenuSoundEffect(1);

View File

@@ -273,7 +273,6 @@ extern struct MainMenu *GetMainMenu(void);
extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32);
extern void sub_8035CF4(struct MenuStruct *r0, u32, u32);
bool8 IsInvalidItemReward(u8);
bool8 sub_8095298(s32);
bool8 sub_803D204(u8 *, struct unkStruct_203B480 *);
extern s32 GetDungeonFloorCount(u8);

View File

@@ -1,4 +1,3 @@
#include "gba/defines.h"
#include "global.h"
#include "input.h"
#include "menu.h"

View File

@@ -1030,7 +1030,7 @@ bool8 TrapbustOrbAction(struct Entity * pokemon,struct Entity * target)
}
else
{
if (tile->room == 0xFF) {
if (tile->room == CORRIDOR_ROOM) {
bottomRightCornerX = target->pos.x - gDungeon->visibilityRange;
bottomRightCornerY = target->pos.y - gDungeon->visibilityRange;
topLeftCornerX = bottomRightCornerX + gDungeon->visibilityRange;

View File

@@ -98,23 +98,23 @@ extern void sub_802CAA4(void);
extern u8 IsJobSlotEmpty(u8);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_8013C68(u32 *);
extern void sub_8013C68(struct MenuInputStruct*);
extern void sub_80073E0(u32);
extern struct WonderMail* GetJobSlotInfo(u8);
extern s32 sub_8013800(void *, u32);
extern s32 sub_8013800(struct MenuInputStruct*, u32);
extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
extern void CreateRescueTitle(struct unkStruct_802C39C *);
extern void sub_8013984(u32 *);
extern void sub_8013984(struct MenuInputStruct*);
extern void sub_802C6DC(void);
extern void DrawJobListMenu(void);
extern void AddMenuCursorSprite(u32 *);
extern u8 sub_80138B8(void *, u32);
extern s32 GetKeyPress(void *);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
extern u8 sub_80138B8(struct MenuInputStruct*, u32);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013660(void *);
extern void sub_8013848(u32 *, s32, u32, u32);
extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32);
extern bool8 IsPelipperBoardSlotEmpty(u8);
extern void SetJobListState(u32);
extern void sub_802CC00(void);
@@ -176,9 +176,9 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3)
sub_8012D34(gUnknown_203B2E8->unk40,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E8->unk44,1,1);
sub_8013848(&gUnknown_203B2E8->unk8,CountAcceptedJobs(),param_3,param_1);
gUnknown_203B2E8->unk20 = gUnknown_203B2EC;
sub_8013984(&gUnknown_203B2E8->unk8);
sub_8013848(&gUnknown_203B2E8->input,CountAcceptedJobs(),param_3,param_1);
gUnknown_203B2E8->input.menuIndex = gUnknown_203B2EC;
sub_8013984(&gUnknown_203B2E8->input);
sub_802C6DC();
DrawJobListMenu();
return TRUE;
@@ -188,11 +188,11 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3)
u32 sub_802C598(u8 param_1)
{
if (param_1 == '\0') {
sub_8013660(&gUnknown_203B2E8->unk8);
sub_8013660(&gUnknown_203B2E8->input);
return 0;
}
else {
switch(GetKeyPress(&gUnknown_203B2E8->unk8))
switch(GetKeyPress(&gUnknown_203B2E8->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -204,7 +204,7 @@ u32 sub_802C598(u8 param_1)
PlayMenuSoundEffect(4);
return 4;
}
if (sub_80138B8(&gUnknown_203B2E8->unk8, 1) != '\0') {
if (sub_80138B8(&gUnknown_203B2E8->input, 1) != '\0') {
sub_802C6DC();
DrawJobListMenu();
return 1;
@@ -217,26 +217,26 @@ u32 sub_802C598(u8 param_1)
u8 GetPelipperBoardSlotIndex(void)
{
return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20];
return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C + gUnknown_203B2E8->input.menuIndex];
}
void sub_802C640(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E8->unk44, 0, 0);
gUnknown_203B2E8->acceptedJobs = CountAcceptedJobs();
sub_8013984(&gUnknown_203B2E8->unk8);
gUnknown_203B2E8->input.unk22 = CountAcceptedJobs();
sub_8013984(&gUnknown_203B2E8->input);
sub_802C6DC();
DrawJobListMenu();
if(r0)
AddMenuCursorSprite(&gUnknown_203B2E8->unk8);
AddMenuCursorSprite(&gUnknown_203B2E8->input);
}
void sub_802C688(void)
{
if(gUnknown_203B2E8 != NULL)
{
gUnknown_203B2EC = gUnknown_203B2E8->unk20;
gUnknown_203B2EC = gUnknown_203B2E8->input.menuIndex;
gUnknown_203B2E8->unk44[gUnknown_203B2E8->unk3C] = gUnknown_80DFCE4;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E8->unk44, 1, 1);
@@ -315,19 +315,19 @@ void DrawJobListMenu(void)
sub_8008C54(gUnknown_203B2E8->unk3C);
sub_80073B8(gUnknown_203B2E8->unk3C);
r4 = gUnknown_203B2E8->unk26 * 8;
r4 = gUnknown_203B2E8->input.unk1E * 8;
r5 = r4;
r5 += 10;
xxx_call_draw_string(r5,0,gUnknown_80DFD14,gUnknown_203B2E8->unk3C,0); // "Job List"
r4 += 4;
r5 = r4 + gUnknown_203B2E8->unkA4[2] * 8;
sub_8012BC4(r5,0,gUnknown_203B2E8->unk26 + 1,2,7,gUnknown_203B2E8->unk3C);
sub_8012BC4(r5,0,gUnknown_203B2E8->input.unk1E + 1,2,7,gUnknown_203B2E8->unk3C);
for(index = 0; index < gUnknown_203B2E8->unk22; index++)
for(index = 0; index < gUnknown_203B2E8->input.unk1A; index++)
{
mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]);
mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C + index]);
local.unk0[0] = gUnknown_203B2E8->unk3C;
local.y = sub_8013800(&gUnknown_203B2E8->unk8,index);
local.y = sub_8013800(&gUnknown_203B2E8->input,index);
sub_803B35C(mail,&local);
CreateRescueTitle(&local);
}

View File

@@ -12,21 +12,21 @@
bool8 IsMailSlotEmpty(u8);
extern void sub_8013984(void *);
extern void sub_8013848(u32 *, s32, u32, u32);
extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32);
extern s32 CountPelipperBoardSlots(void);
extern void sub_802C328(void);
extern void DrawPelipperBoardJobMenu(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013660(u32 *);
extern s32 GetKeyPress(u32 *);
extern bool8 sub_80138B8(u32 *, u32);
extern void AddMenuCursorSprite(u32 *);
extern void sub_8013660(struct MenuInputStruct *);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern bool8 sub_80138B8(struct MenuInputStruct *, u32);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 HasNoPelipperBoardJobs(void);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(u32 *, s32);
extern s32 sub_8013800(struct MenuInputStruct *, s32);
extern struct WonderMail *GetPelipperBoardSlotInfo(u32);
extern void sub_803B35C(struct WonderMail *, u32 *);
extern u8 gBulletinBoardText[];
@@ -39,37 +39,20 @@ struct unkStruct_203B2D8
{
// size: 0xA4
u8 unk0[4];
u32 unk4;
u8 fill8[0x1C - 0x8];
s16 unk1C;
s16 unk1E;
s16 unk20;
s16 unk22;
s16 fill24;
/* 0x26 */ s16 emptyMailSlots;
u8 fill28[0x38 - 0x28];
struct MenuInputStruct input;
u32 unk38;
struct UnkTextStruct2 *unk3C;
struct UnkTextStruct2 unk40[4];
u8 unkA0[4];
};
extern struct unkStruct_203B2D8 *gUnknown_203B2D8;
struct unkStruct_203B2E0
{
// size: 0xA8
u8 unk0[0x8];
u32 unk8;
u8 unkC[0x20 - 0xC];
s16 unk20;
s16 unk22;
s16 unk24;
s16 unk26;
s16 unk28;
s16 pelipperBoardSlots;
u8 fill22[0x3C - 0x2C];
struct MenuInputStruct input;
s32 unk3C;
struct UnkTextStruct2 *unk40;
struct UnkTextStruct2 unk44[4];
@@ -99,13 +82,13 @@ void CreateMailMenu(void)
sub_8008C54(gUnknown_203B2D8->unk38);
sub_80073B8(gUnknown_203B2D8->unk38);
xxx_call_draw_string(gUnknown_203B2D8->unk22 * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0);
for (index = 0; index < gUnknown_203B2D8->unk1E; index++) {
mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + index]);
xxx_call_draw_string(gUnknown_203B2D8->input.unk1E * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0);
for (index = 0; index < gUnknown_203B2D8->input.unk1A; index++) {
mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + index]);
local.unk0[0] = gUnknown_203B2D8->unk38;
local.y = sub_8013800(&gUnknown_203B2D8->unk4, index);
local.y = sub_8013800(&gUnknown_203B2D8->input, index);
if (mail->mailType == MAIL_TYPE_UNK1) {
y = sub_8013800(&gUnknown_203B2D8->unk4, index);
y = sub_8013800(&gUnknown_203B2D8->input, index);
sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38);
PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct());
sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeon.floor), gAvailablePokemonNames);
@@ -173,9 +156,9 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3)
sub_8012D34(gUnknown_203B2E0->unk40,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E0->unk44,1,1);
sub_8013848(&gUnknown_203B2E0->unk8,CountPelipperBoardSlots(),param_3,param_1);
gUnknown_203B2E0->unk20 = gUnknown_203B2E4;
sub_8013984(&gUnknown_203B2E0->unk8);
sub_8013848(&gUnknown_203B2E0->input,CountPelipperBoardSlots(),param_3,param_1);
gUnknown_203B2E0->input.menuIndex = gUnknown_203B2E4;
sub_8013984(&gUnknown_203B2E0->input);
sub_802C328();
DrawPelipperBoardJobMenu();
return TRUE;
@@ -185,11 +168,11 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3)
u32 sub_802C1E4(u8 param_1)
{
if (param_1 == '\0') {
sub_8013660(&gUnknown_203B2E0->unk8);
sub_8013660(&gUnknown_203B2E0->input);
return 0;
}
else {
switch(GetKeyPress(&gUnknown_203B2E0->unk8))
switch(GetKeyPress(&gUnknown_203B2E0->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -201,7 +184,7 @@ u32 sub_802C1E4(u8 param_1)
PlayMenuSoundEffect(4);
return 4;
default:
if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) {
if (sub_80138B8(&gUnknown_203B2E0->input,1)) {
sub_802C328();
DrawPelipperBoardJobMenu();
return 1;
@@ -215,26 +198,26 @@ u32 sub_802C1E4(u8 param_1)
u8 sub_802C26C(void)
{
return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24) + gUnknown_203B2E0->unk20];
return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C) + gUnknown_203B2E0->input.menuIndex];
}
void sub_802C28C(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E0->unk44, 0, 0);
gUnknown_203B2E0->pelipperBoardSlots = CountPelipperBoardSlots();
sub_8013984(&gUnknown_203B2E0->unk8);
gUnknown_203B2E0->input.unk22 = CountPelipperBoardSlots();
sub_8013984(&gUnknown_203B2E0->input);
sub_802C328();
DrawPelipperBoardJobMenu();
if(r0)
AddMenuCursorSprite(&gUnknown_203B2E0->unk8);
AddMenuCursorSprite(&gUnknown_203B2E0->input);
}
void sub_802C2D4(void)
{
if(gUnknown_203B2E0 != NULL)
{
gUnknown_203B2E4 = gUnknown_203B2E0->unk20;
gUnknown_203B2E4 = gUnknown_203B2E0->input.menuIndex;
gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFC9C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E0->unk44, 1, 1);
@@ -314,20 +297,20 @@ void DrawPelipperBoardJobMenu(void)
sub_8008C54(gUnknown_203B2E0->unk3C);
sub_80073B8(gUnknown_203B2E0->unk3C);
iVar4 = gUnknown_203B2E0->unk26 * 8;
iVar4 = gUnknown_203B2E0->input.unk1E * 8;
x = iVar4;
x += 10;
xxx_call_draw_string(x,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0);
iVar4 += 4;
x = iVar4 + gUnknown_203B2E0->unkA4[2] * 8;
sub_8012BC4(x,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C);
sub_8012BC4(x,0,gUnknown_203B2E0->input.unk1E + 1,2,7,gUnknown_203B2E0->unk3C);
for(index = 0; index < gUnknown_203B2E0->unk22; index++)
for(index = 0; index < gUnknown_203B2E0->input.unk1A; index++)
{
slotIndex = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24 + index]);
slotIndex = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C + index]);
mail = GetPelipperBoardSlotInfo(slotIndex);
local.unk0[0] = gUnknown_203B2E0->unk3C;
local.y = sub_8013800(&gUnknown_203B2E0->unk8,index);
local.y = sub_8013800(&gUnknown_203B2E0->input,index);
sub_803B35C(mail,local.unk0);
if (IsMailinJobSlot(GetPelipperBoardSlotInfo(slotIndex))) {
local.unk43 = 2;

View File

@@ -154,17 +154,17 @@ extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void CreateRescueTitle(struct unkStruct_802C39C *);
extern s32 sub_8013800(void *, u32);
extern s32 sub_8013800(struct MenuInputStruct *, u32);
extern u8 gUnknown_80DFDBC[];
extern void sub_802CF5C(void);
extern void sub_802CFD0(void);
extern void sub_8013984(void *);
extern void AddMenuCursorSprite(void *);
extern u8 sub_80138B8(void *, u32);
extern void sub_8013660(void *);
extern u32 GetKeyPress(void *);
extern void sub_8013984(struct MenuInputStruct *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern void sub_8013660(struct MenuInputStruct *);
extern u32 GetKeyPress(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013848(void *, s32, u32, u32);
extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32);
extern void sub_802DF24(void);
extern void SetJobListState(u32);
@@ -375,7 +375,7 @@ bool8 sub_802CDD4(u32 r0)
sub_8012D34(gUnknown_203B2F4->unk38, 4);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2F4->unk3C, 1, 1);
sub_8013848(gUnknown_203B2F4, 5, 4, r0);
sub_8013848(&gUnknown_203B2F4->input, 5, 4, r0);
sub_802CF5C();
sub_802CFD0();
return TRUE;
@@ -385,12 +385,12 @@ u32 sub_802CE5C(u8 r0)
{
if(r0 == 0)
{
sub_8013660(gUnknown_203B2F4);
sub_8013660(&gUnknown_203B2F4->input);
return 0;
}
else
{
switch(GetKeyPress(gUnknown_203B2F4))
switch(GetKeyPress(&gUnknown_203B2F4->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -398,7 +398,7 @@ u32 sub_802CE5C(u8 r0)
case INPUT_A_BUTTON:
return 3;
default:
if(sub_80138B8(gUnknown_203B2F4, 1) != 0)
if(sub_80138B8(&gUnknown_203B2F4->input, 1) != 0)
{
sub_802CF5C();
sub_802CFD0();
@@ -414,18 +414,18 @@ u32 sub_802CE5C(u8 r0)
u8 sub_802CEBC(void)
{
return (gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C) + gUnknown_203B2F4->unk18;
return (gUnknown_203B2F4->input.unk1E * gUnknown_203B2F4->input.unk1C) + gUnknown_203B2F4->input.menuIndex;
}
void sub_802CED8(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2F4->unk3C, 0, 0);
sub_8013984(gUnknown_203B2F4);
sub_8013984(&gUnknown_203B2F4->input);
sub_802CF5C();
sub_802CFD0();
if(r0)
AddMenuCursorSprite(gUnknown_203B2F4);
AddMenuCursorSprite(&gUnknown_203B2F4->input);
}
void sub_802CF14(void)
@@ -510,17 +510,17 @@ void sub_802CFD0(void)
sub_8008C54(gUnknown_203B2F4->unk34);
sub_80073B8(gUnknown_203B2F4->unk34);
r5 = r4 = gUnknown_203B2F4->unk1E * 8 + 10;
r5 = r4 = gUnknown_203B2F4->input.unk1E * 8 + 10;
xxx_call_draw_string(r5,0,gUnknown_80DFDBC,gUnknown_203B2F4->unk34,0); // RESCUE EVENT
r4 -= 6;
r5 = r4 + (gUnknown_203B2F4->unk9C[2] * 8);
sub_8012BC4(r5,0,gUnknown_203B2F4->unk1E + 1,2,7,gUnknown_203B2F4->unk34);
sub_8012BC4(r5,0,gUnknown_203B2F4->input.unk1E + 1,2,7,gUnknown_203B2F4->unk34);
for(r5 = 0; r5 < gUnknown_203B2F4->unk1A; r5++)
for(r5 = 0; r5 < gUnknown_203B2F4->input.unk1A; r5++)
{
iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5);
iVar1 = sub_803B344(gUnknown_203B2F4->input.unk1E * gUnknown_203B2F4->input.unk1C + r5);
local.unk0[0] = gUnknown_203B2F4->unk34;
local.y = sub_8013800(gUnknown_203B2F4, r5);
local.y = sub_8013800(&gUnknown_203B2F4->input, r5);
sub_803B35C(&iVar1->mail,&local);
local.unk43 = 1;
local.unk4C = iVar1->unk14;

View File

@@ -69,15 +69,7 @@ struct unkStruct_203B314
u8 unkB9;
u8 unkBA;
u8 unkBB;
u32 unkBC;
u8 fillC0[0xD4 - 0xC0];
s16 unkD4;
s16 unkD6;
s16 unkD8;
s16 unkDA;
s16 unkDC;
s16 unkDE;
u8 fillDF[0xF0 - 0xE0];
struct MenuInputStruct input;
u32 unkF0;
struct UnkTextStruct2 *unkF4;
struct UnkTextStruct2 unkF8[4];
@@ -103,12 +95,12 @@ enum FriendRewardStates {
extern u8 sub_802FCF0(u32);
extern void sub_802F9C0(void);
extern void sub_802FA50(void);
extern void sub_8013818(u32 *, u32, u32, u32);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern u32 sub_802FBF4(void);
extern void sub_8013878(u32 *, s32);
extern void sub_8013878(struct MenuInputStruct *, s32);
extern void AddMenuCursorSprite(u32 *);
extern void sub_8013984(u32 *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern void sub_8013984(struct MenuInputStruct *);
extern void SetRewardSceneState(u32);
extern void sub_802EFEC(u32);
extern void sub_802F148(void);
@@ -134,9 +126,9 @@ extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern void sub_802F6FC(void);
extern void ProceedToNextRewardSceneState(void);
extern u8 sub_80138B8(u32 *, u32);
extern void sub_8013660(u32 *);
extern u32 GetKeyPress(u32 *);
extern u8 sub_80138B8(struct MenuInputStruct*, u32);
extern void sub_8013660(struct MenuInputStruct *);
extern u32 GetKeyPress(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern void sub_802F300(void);
extern void PlaySound(u32);
@@ -145,7 +137,7 @@ extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32);
extern u32 sub_801B60C(u32, u8, u8);
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
void HandleMissionReward(void);
extern s32 sub_8013800(u32 *, s32);
extern s32 sub_8013800(struct MenuInputStruct *, s32);
extern void xxx_call_draw_string(s32, s32, const u8 *, s32, s32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
@@ -754,7 +746,7 @@ u32 sub_802F73C(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2, u8 r3)
sub_8012D08(gUnknown_203B314->unkF4, r2);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B314->unkF8, 1, 1);
sub_8013818(&gUnknown_203B314->unkBC, sub_802FBF4(), r2, r0);
sub_8013818(&gUnknown_203B314->input, sub_802FBF4(), r2, r0);
sub_802F9C0();
sub_802FA50();
return 1;
@@ -768,15 +760,15 @@ u32 sub_802F848(s16 param_1)
param_1_32 = param_1; // cast needed
for( index = 0; index < gUnknown_203B314->unkDE; index++ ) {
for( index = 0; index < gUnknown_203B314->input.unk22; index++ ) {
if (gUnknown_203B314->unk0[index] == param_1_32) {
sub_8013878(&gUnknown_203B314->unkBC,index);
sub_8013878(&gUnknown_203B314->input,index);
sub_802F9C0();
sub_802FA50();
return 1;
}
}
sub_8013878(&gUnknown_203B314->unkBC,0);
sub_8013878(&gUnknown_203B314->input,0);
return 0;
}
@@ -784,12 +776,12 @@ u32 sub_802F8A0(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B314->unkBC);
sub_8013660(&gUnknown_203B314->input);
return 0;
}
else
{
switch(GetKeyPress(&gUnknown_203B314->unkBC))
switch(GetKeyPress(&gUnknown_203B314->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
@@ -798,7 +790,7 @@ u32 sub_802F8A0(u8 r0)
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_80138B8(&gUnknown_203B314->unkBC, 1) != 0)
if(sub_80138B8(&gUnknown_203B314->input, 1) != 0)
{
sub_802F9C0();
sub_802FA50();
@@ -814,18 +806,18 @@ u32 sub_802F8A0(u8 r0)
s16 sub_802F90C(void)
{
return gUnknown_203B314->unk0[(gUnknown_203B314->unkDA * gUnknown_203B314->unkD8) + gUnknown_203B314->unkD4];
return gUnknown_203B314->unk0[(gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C) + gUnknown_203B314->input.menuIndex];
}
void sub_802F938(u8 r0)
{
gUnknown_203B314->unkDE = sub_802FBF4();
sub_8013984(&gUnknown_203B314->unkBC);
gUnknown_203B314->input.unk22 = sub_802FBF4();
sub_8013984(&gUnknown_203B314->input);
sub_802F9C0();
sub_802FA50();
if(r0 != 0)
AddMenuCursorSprite(&gUnknown_203B314->unkBC);
AddMenuCursorSprite(&gUnknown_203B314->input);
}
void sub_802F974(void)
@@ -925,12 +917,12 @@ void sub_802FA50(void)
sub_8008C54(gUnknown_203B314->unkF0);
sub_80073B8(gUnknown_203B314->unkF0);
xxx_call_draw_string(10,0,gUnknown_80E0744,gUnknown_203B314->unkF0,0);
sub_8012BC4(gUnknown_203B314->unk158[2] * 8 + 4,0,gUnknown_203B314->unkDA + 1,2,7,gUnknown_203B314->unkF0);
sub_8012BC4(gUnknown_203B314->unk158[2] * 8 + 4,0,gUnknown_203B314->input.unk1E + 1,2,7,gUnknown_203B314->unkF0);
if (gUnknown_203B314->unkB8 != 0) {
for(counter = 0; counter < gUnknown_203B314->unkD6; counter++)
for(counter = 0; counter < gUnknown_203B314->input.unk1A; counter++)
{
y = sub_8013800(&gUnknown_203B314->unkBC,counter);
index = gUnknown_203B314->unkDA * gUnknown_203B314->unkD8 + counter;
y = sub_8013800(&gUnknown_203B314->input,counter);
index = gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C + counter;
sVar1 = gUnknown_203B314->unk0[index];
if (gUnknown_203B314->unk5C[index] != 0) {
xxx_call_draw_string(10,y,gUnknown_80E0750,gUnknown_203B314->unkF0,0);
@@ -942,10 +934,10 @@ void sub_802FA50(void)
}
}
else {
for(counter = 0; counter < gUnknown_203B314->unkD6; counter++)
for(counter = 0; counter < gUnknown_203B314->input.unk1A; counter++)
{
y2 = sub_8013800(&gUnknown_203B314->unkBC,counter);
text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->unkDA * gUnknown_203B314->unkD8 + counter]);
y2 = sub_8013800(&gUnknown_203B314->input,counter);
text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C + counter]);
xxx_call_draw_string(8,y2,text,gUnknown_203B314->unkF0,0);
}
}

View File

@@ -15,15 +15,7 @@ struct unkStruct_203B320
// size: 0xC4
u8 unk0[0x20];
u32 wonderMailType;
u32 unk24;
u8 fill28[0x3C - 0x28];
s16 unk3C;
s16 unk3E;
s16 unk40;
s16 unk42;
s16 unk44;
s16 unk46;
u8 fill48[0x58 - 0x48];
struct MenuInputStruct input;
u32 unk58;
struct UnkTextStruct2 *unk5C;
struct UnkTextStruct2 unk60[4];
@@ -88,15 +80,15 @@ extern s32 sub_8030A74(void);
extern void sub_80308A0(void);
extern void sub_803092C(void);
extern void sub_8012D08(struct UnkTextStruct2 *, s32);
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern u8 sub_80138B8(u32 *, u32);
extern void sub_8013660(u32 *);
extern s32 GetKeyPress(u32 *);
extern u8 sub_80138B8(struct MenuInputStruct*, u32);
extern void sub_8013660(struct MenuInputStruct*);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(u32 *);
extern void AddMenuCursorSprite(u32 *);
extern s32 sub_8013800(void *, u32);
extern void sub_8013984(struct MenuInputStruct*);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
extern s32 sub_8013800(struct MenuInputStruct*, u32);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
@@ -126,7 +118,7 @@ u32 sub_80306A8(u32 wonderMailType, u32 r1, struct UnkTextStruct2_sub *r2, u32 r
sub_8012D08(gUnknown_203B320->unk5C, r3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B320->unk60, 1, 1);
sub_8013818(&gUnknown_203B320->unk24, sub_8030A74(), r3, r1);
sub_8013818(&gUnknown_203B320->input, sub_8030A74(), r3, r1);
sub_80308A0();
sub_803092C();
return 1;
@@ -136,10 +128,10 @@ u32 sub_8030768(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B320->unk24);
sub_8013660(&gUnknown_203B320->input);
return 0;
}
switch(GetKeyPress(&gUnknown_203B320->unk24))
switch(GetKeyPress(&gUnknown_203B320->input))
{
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
@@ -151,7 +143,7 @@ u32 sub_8030768(u8 r0)
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_80138B8(&gUnknown_203B320->unk24, 1) != 0)
if(sub_80138B8(&gUnknown_203B320->input, 1) != 0)
{
sub_80308A0();
sub_803092C();
@@ -164,18 +156,18 @@ u32 sub_8030768(u8 r0)
u8 sub_80307EC(void)
{
return gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + gUnknown_203B320->unk3C];
return gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + gUnknown_203B320->input.menuIndex];
}
void sub_8030810(u8 r0)
{
gUnknown_203B320->unk46 = sub_8030A74();
sub_8013984(&gUnknown_203B320->unk24);
gUnknown_203B320->input.unk22 = sub_8030A74();
sub_8013984(&gUnknown_203B320->input);
sub_80308A0();
sub_803092C();
if(r0 != 0)
AddMenuCursorSprite(&gUnknown_203B320->unk24);
AddMenuCursorSprite(&gUnknown_203B320->input);
}
void sub_803084C()
@@ -275,18 +267,18 @@ void sub_803092C(void)
sub_8008C54(gUnknown_203B320->unk58);
sub_80073B8(gUnknown_203B320->unk58);
r4 = gUnknown_203B320->unk42 * 8;
r4 = gUnknown_203B320->input.unk1E * 8;
r5 = r4;
r5 += 10;
xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->wonderMailType],gUnknown_203B320->unk58,0);
r4 += 4;
r5 = r4 + gUnknown_203B320->unkC0[2] * 8;
sub_8012BC4(r5,0,gUnknown_203B320->unk42 + 1,1,7,gUnknown_203B320->unk58);
sub_8012BC4(r5,0,gUnknown_203B320->input.unk1E + 1,1,7,gUnknown_203B320->unk58);
for (index = 0; index < gUnknown_203B320->unk3E; index++) {
mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + index]);
for (index = 0; index < gUnknown_203B320->input.unk1A; index++) {
mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + index]);
local.unk0[0] = gUnknown_203B320->unk58;
local.y = sub_8013800(&gUnknown_203B320->unk24,index);
local.y = sub_8013800(&gUnknown_203B320->input,index);
local.unk40 = 7;
local.unk42 = 0;
local.unk44 = 0;

View File

@@ -118,7 +118,7 @@ struct unkStruct_203B3E8
bool8 wonderMailAccepted;
};
EWRAM_DATA struct unkStruct_203B3E8 *gUnknown_203B3E8;
EWRAM_DATA_2 struct unkStruct_203B3E8 *gUnknown_203B3E8 = {0};
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);

View File

@@ -167,10 +167,7 @@ gUnknown_202B034: /* 202B034 */
.space 0x4
gUnknown_202B038: /* 202B038 */
.space 0x2
gUnknown_202B03A: /* 202B03A */
.space 0x7FE
.space 0x800
gUnknown_202B838: /* 202B838 */
.space 0x800
@@ -829,9 +826,8 @@ gUnknown_20393C0: /* 20393C0 */
gUnknown_2039448: /* 2039448 */
.space 0x330
gUnknown_2039778: /* 2039778 */
.space 0xC8
.include "src/code_8097670.o"
.space 0x4
.include "src/exclusive_pokemon.o"
.space 0x4

View File

@@ -341,9 +341,7 @@ gUnknown_203B2FC: /* 203B2FC */
gUnknown_203B300: /* 203B300 */
.space 0x4
gUnknown_203B304: /* 203B304 */
.space 0x4
.include "src/mailbox.o"
.include "src/pelipper_board.o"
gUnknown_203B30C: /* 203B30C */
@@ -371,10 +369,7 @@ gUnknown_203B328: /* 203B328 */
.space 0x4
.include "src/post_office_guide.o"
gUnknown_203B334: /* 203B334 */
.space 0x4
.include "src/code_8031D70.o"
.include "src/adventure_log.o"
.include "src/friend_rescue.o"
@@ -398,14 +393,9 @@ gUnknown_203B364: /* 203B364 */
.space 0x4
.include "src/rescue_password_menu.o"
.include "src/load_screen.o"
gUnknown_203B3E8: /* 203B3E8 */
.space 0x4
gUnknown_203B3EC: /* 203B3EC */
.space 0x4
.include "src/wonder_mail_main_menu.o"
.include "src/debug_menu.o"
gUnknown_203B3F0: /* 203B3F0 */
.space 0x4
@@ -484,27 +474,10 @@ gUnknown_203B474: /* 203B474 */
.space 0x8
.include "src/play_time.o"
gUnknown_203B480: /* 203B480 */
.space 0x4
gUnknown_203B484: /* 203B484 */
.space 0x4
gUnknown_203B488: /* 203B488 */
.space 0x4
gUnknown_203B48C: /* 203B48C */
.space 0x4
gUnknown_203B490: /* 203B490 */
.space 0x4
gUnknown_203B494: /* 203B494 */
.space 0x4
.include "src/code_8094F88.o"
.include "src/code_80958E8.o"
.include "src/code_8097670.o"
.include "src/exclusive_pokemon.o"
.include "src/ground_main.o"
.space 0x2
@@ -520,5 +493,4 @@ gUnknown_203B4B0: /* 203B4B0 */
gUnknown_203B4B4: /* 203B4B4 */
.space 0x4
gUnknown_203B4B8: /* 203B4B8 */
.space 0x4
.include "src/ground_link.o"