Merge pull request #144 from SethBarberee/july_2023

July 2023
This commit is contained in:
Seth Barberee
2023-08-01 22:11:20 -07:00
committed by GitHub
100 changed files with 6901 additions and 12215 deletions

File diff suppressed because it is too large Load Diff

382
asm/code_8023144.s Normal file
View File

@@ -0,0 +1,382 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8022A10
sub_8022A10:
push {r4-r7,lr}
sub sp, 0x8
ldr r1, _08022A2C
ldr r0, [r1]
ldr r0, [r0]
adds r4, r1, 0
cmp r0, 0x16
bls _08022A22
b _08022D1E
_08022A22:
lsls r0, 2
ldr r1, _08022A30
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022A2C: .4byte gUnknown_203B294
_08022A30: .4byte _08022A34
.align 2, 0
_08022A34:
.4byte _08022A90
.4byte _08022AAA
.4byte _08022AB2
.4byte _08022AE0
.4byte _08022B10
.4byte _08022B1A
.4byte _08022B24
.4byte _08022B34
.4byte _08022B44
.4byte _08022B54
.4byte _08022B64
.4byte _08022C28
.4byte _08022CA0
.4byte _08022CA8
.4byte _08022CB0
.4byte _08022CB8
.4byte _08022CC0
.4byte _08022CC8
.4byte _08022CD8
.4byte _08022CE8
.4byte _08022CF8
.4byte _08022D14
.4byte _08022D1E
_08022A90:
ldr r0, [r4]
ldr r0, [r0, 0x48]
cmp r0, 0
beq _08022A9C
movs r0, 0x5
b _08022A9E
_08022A9C:
movs r0, 0x1
_08022A9E:
movs r1, 0x3
movs r2, 0
movs r3, 0xA
bl sub_801A5D8
b _08022D22
_08022AAA:
movs r0, 0x1
bl sub_801A8D0
b _08022D22
_08022AB2:
bl sub_801A9E0
ldr r0, _08022ADC
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x54
adds r1, r2, 0
adds r1, 0xF8
movs r4, 0x9C
lsls r4, 1
adds r3, r2, r4
adds r2, 0xF4
ldr r2, [r2]
str r2, [sp]
movs r2, 0x2
str r2, [sp, 0x4]
movs r2, 0
bl sub_8012D60
b _08022D22
.align 2, 0
_08022ADC: .4byte gUnknown_203B294
_08022AE0:
bl sub_801A9E0
ldr r4, _08022B08
ldr r0, [r4]
adds r0, 0x54
movs r1, 0
bl sub_8012EA4
ldr r0, [r4]
adds r0, 0xA4
ldr r1, _08022B0C
movs r2, 0x3
str r2, [sp]
movs r2, 0x1
str r2, [sp, 0x4]
movs r2, 0
movs r3, 0
bl sub_8012D60
b _08022D22
.align 2, 0
_08022B08: .4byte gUnknown_203B294
_08022B0C: .4byte gUnknown_80DC584
_08022B10:
ldr r0, [r4]
adds r0, 0x50
bl sub_801B3C0
b _08022D22
_08022B1A:
ldr r0, _08022B20
b _08022D00
.align 2, 0
_08022B20: .4byte gUnknown_80DC5F4
_08022B24:
ldr r0, _08022B2C
ldr r3, _08022B30
b _08022D02
.align 2, 0
_08022B2C: .4byte gUnknown_80DC618
_08022B30: .4byte 0x00000101
_08022B34:
ldr r0, _08022B3C
ldr r3, _08022B40
b _08022D02
.align 2, 0
_08022B3C: .4byte gUnknown_80DC674
_08022B40: .4byte 0x00000101
_08022B44:
ldr r0, _08022B4C
ldr r3, _08022B50
b _08022D02
.align 2, 0
_08022B4C: .4byte gUnknown_80DC6CC
_08022B50: .4byte 0x00000101
_08022B54:
ldr r0, _08022B5C
ldr r3, _08022B60
b _08022D02
.align 2, 0
_08022B5C: .4byte gUnknown_80DC728
_08022B60: .4byte 0x00000101
_08022B64:
ldr r7, _08022B68
b _08022B78
.align 2, 0
_08022B68: .4byte gUnknown_203B294
_08022B6C:
ldr r1, [r4]
ldr r0, [r1, 0x40]
adds r0, 0x1
str r0, [r1, 0x40]
cmp r0, 0x17
bgt _08022C10
_08022B78:
movs r5, 0
movs r6, 0
movs r3, 0
ldr r2, [r4]
ldr r0, [r2, 0x38]
cmp r5, r0
bge _08022BA4
ldrb r1, [r2, 0x8]
b _08022B9C
_08022B8A:
adds r3, 0x1
ldr r2, [r4]
ldr r0, [r2, 0x38]
cmp r3, r0
bge _08022BA4
adds r0, r2, 0
adds r0, 0x8
adds r0, r3
ldrb r1, [r0]
_08022B9C:
ldr r0, [r2, 0x40]
cmp r1, r0
bne _08022B8A
movs r5, 0x1
_08022BA4:
movs r3, 0
ldr r2, [r4]
ldr r0, [r2, 0x3C]
cmp r3, r0
bge _08022BCE
adds r0, r2, 0
adds r0, 0x20
b _08022BC4
_08022BB4:
adds r3, 0x1
ldr r2, [r4]
ldr r0, [r2, 0x3C]
cmp r3, r0
bge _08022BCE
adds r0, r2, 0
adds r0, 0x20
adds r0, r3
_08022BC4:
ldrb r1, [r0]
ldr r0, [r2, 0x40]
cmp r1, r0
bne _08022BB4
movs r6, 0x1
_08022BCE:
cmp r5, r6
beq _08022B6C
ldr r1, [r7]
movs r0, 0xA
str r0, [r1, 0x4]
ldr r0, [r1, 0x40]
lsls r0, 24
lsrs r0, 24
bl GetIQSkillName
adds r1, r0, 0
ldr r0, _08022C18
bl strcpy
movs r0, 0xCB
bl PlaySound
ldr r0, _08022C1C
movs r1, 0
movs r2, 0
ldr r3, _08022C20
bl sub_80141B4
ldr r1, [r7]
ldr r0, [r1, 0x40]
adds r0, 0x1
str r0, [r1, 0x40]
ldr r0, _08022C24
ldr r0, [r0]
ldr r0, [r0, 0x40]
cmp r0, 0x17
bgt _08022C10
b _08022D22
_08022C10:
movs r0, 0xB
bl sub_8022924
b _08022D22
.align 2, 0
_08022C18: .4byte gUnknown_202DEA8
_08022C1C: .4byte gUnknown_80DC788
_08022C20: .4byte 0x00000101
_08022C24: .4byte gUnknown_203B294
_08022C28:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
bl nullsub_104
ldr r0, [r4]
adds r0, 0x46
ldrh r0, [r0]
cmp r0, 0x8
bhi _08022C98
lsls r0, 2
ldr r1, _08022C48
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022C48: .4byte _08022C4C
.align 2, 0
_08022C4C:
.4byte _08022C70
.4byte _08022C78
.4byte _08022C80
.4byte _08022C98
.4byte _08022C88
.4byte _08022C98
.4byte _08022C98
.4byte _08022C98
.4byte _08022C90
_08022C70:
movs r0, 0x16
bl sub_8022924
b _08022D22
_08022C78:
movs r0, 0xD
bl sub_8022924
b _08022D22
_08022C80:
movs r0, 0xE
bl sub_8022924
b _08022D22
_08022C88:
movs r0, 0xF
bl sub_8022924
b _08022D22
_08022C90:
movs r0, 0x10
bl sub_8022924
b _08022D22
_08022C98:
movs r0, 0xC
bl sub_8022924
b _08022D22
_08022CA0:
ldr r0, _08022CA4
b _08022D00
.align 2, 0
_08022CA4: .4byte gUnknown_80DC7B4
_08022CA8:
ldr r0, _08022CAC
b _08022D00
.align 2, 0
_08022CAC: .4byte gUnknown_80DC7FC
_08022CB0:
ldr r0, _08022CB4
b _08022D00
.align 2, 0
_08022CB4: .4byte gUnknown_80DC81C
_08022CB8:
ldr r0, _08022CBC
b _08022D00
.align 2, 0
_08022CBC: .4byte gUnknown_80DC844
_08022CC0:
ldr r0, _08022CC4
b _08022D00
.align 2, 0
_08022CC4: .4byte gUnknown_80DC864
_08022CC8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CD4
b _08022D00
.align 2, 0
_08022CD4: .4byte gUnknown_80DC88C
_08022CD8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CE4
b _08022D00
.align 2, 0
_08022CE4: .4byte gUnknown_80DC8AC
_08022CE8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CF4
b _08022D00
.align 2, 0
_08022CF4: .4byte gUnknown_80DC8C8
_08022CF8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022D0C
_08022D00:
ldr r3, _08022D10
_08022D02:
movs r1, 0
movs r2, 0
bl sub_80141B4
b _08022D22
.align 2, 0
_08022D0C: .4byte gUnknown_80DC8DC
_08022D10: .4byte 0x00000301
_08022D14:
ldr r0, [r4]
ldr r0, [r0, 0x4C]
bl sub_801AFA4
b _08022D22
_08022D1E:
bl sub_801A928
_08022D22:
add sp, 0x8
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8022A10
.align 2,0

View File

@@ -1,335 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8094558
sub_8094558:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0xCC
adds r7, r0, 0
adds r4, r1, 0
adds r6, r2, 0
bl sub_80073B8
movs r5, 0
str r5, [sp]
movs r0, 0x10
movs r1, 0
adds r2, r4, 0
adds r3, r7, 0
bl xxx_format_and_draw
ldr r4, _080945D0
adds r1, r6, 0
adds r1, 0x18
adds r0, r4, 0
bl PrintYellowDungeonNametoBuffer
ldr r0, _080945D4
ldr r2, [r0]
str r5, [sp]
movs r0, 0x4
movs r1, 0x10
adds r3, r7, 0
bl xxx_format_and_draw
movs r5, 0x1A
adds r0, r4, 0
adds r1, r6, 0
movs r2, 0xA
bl sub_80922B4
adds r4, 0x50
adds r1, r6, 0
adds r1, 0xA
adds r0, r4, 0
movs r2, 0xA
bl sub_80922B4
movs r1, 0x14
ldrsh r0, [r6, r1]
bl sub_8094528
lsls r0, 24
cmp r0, 0
beq _080945DC
ldr r0, _080945D8
ldr r0, [r0]
add r2, sp, 0xCC
add r1, sp, 0x4
movs r3, 0
bl xxx_format_string
b _080945EA
.align 2, 0
_080945D0: .4byte gAvailablePokemonNames
_080945D4: .4byte gUnknown_8113850
_080945D8: .4byte gUnknown_8113868
_080945DC:
ldr r0, _0809465C
ldr r0, [r0]
add r2, sp, 0xCC
add r1, sp, 0x4
movs r3, 0
bl xxx_format_string
_080945EA:
add r0, sp, 0x4
bl sub_8008ED0
movs r4, 0xB0
subs r0, r4, r0
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
movs r1, 0
mov r8, r1
str r1, [sp]
adds r1, r5, 0
add r2, sp, 0x4
adds r3, r7, 0
bl xxx_format_and_draw
adds r5, 0xA
movs r1, 0x14
ldrsh r0, [r6, r1]
add r1, sp, 0x4
bl sub_80944BC
add r0, sp, 0x4
bl sub_8008ED0
subs r4, r0
lsrs r0, r4, 31
adds r4, r0
asrs r0, r4, 1
mov r1, r8
str r1, [sp]
adds r1, r5, 0
add r2, sp, 0x4
adds r3, r7, 0
bl xxx_format_and_draw
adds r5, 0x10
ldr r1, _08094660
ldr r0, [r6, 0x20]
str r0, [r1]
adds r0, r6, 0
adds r0, 0x2A
ldrb r0, [r0]
str r0, [r1, 0x4]
cmp r0, 0x63
ble _08094668
ldr r0, _08094664
ldr r2, [r0]
mov r0, r8
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
b _0809467A
.align 2, 0
_0809465C: .4byte gUnknown_8113870
_08094660: .4byte gUnknown_202DE30
_08094664: .4byte gUnknown_81138C0
_08094668:
ldr r0, _080946CC
ldr r2, [r0]
mov r1, r8
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
_0809467A:
adds r5, 0xA
ldr r4, _080946D0
movs r1, 0x24
ldrsh r0, [r6, r1]
str r0, [r4]
ldr r0, _080946D4
ldr r2, [r0]
movs r0, 0
mov r8, r0
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
adds r5, 0xA
adds r0, r6, 0
adds r0, 0x26
ldrb r2, [r0]
str r2, [r4]
adds r0, 0x2
ldrb r0, [r0]
str r0, [r4, 0x4]
adds r0, r6, 0
adds r0, 0x2B
ldrb r1, [r0]
cmp r1, 0
beq _080946DC
adds r0, r1, 0
adds r0, r2, r0
str r0, [r4]
ldr r0, _080946D8
ldr r2, [r0]
mov r1, r8
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
b _080946EC
.align 2, 0
_080946CC: .4byte gUnknown_8113898
_080946D0: .4byte gUnknown_202DE30
_080946D4: .4byte gUnknown_81138D0
_080946D8: .4byte gUnknown_8113950
_080946DC:
ldr r0, _08094714
ldr r2, [r0]
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
_080946EC:
adds r0, r6, 0
adds r0, 0x2D
ldrb r1, [r0]
cmp r1, 0
beq _08094720
ldr r2, _08094718
ldr r0, [r2, 0x4]
adds r0, r1
str r0, [r2, 0x4]
ldr r0, _0809471C
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
b _08094730
.align 2, 0
_08094714: .4byte gUnknown_81138E4
_08094718: .4byte gUnknown_202DE30
_0809471C: .4byte gUnknown_8113974
_08094720:
ldr r0, _08094768
ldr r2, [r0]
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
_08094730:
adds r5, 0xA
ldr r2, _0809476C
adds r0, r6, 0
adds r0, 0x27
ldrb r3, [r0]
str r3, [r2]
adds r0, 0x2
ldrb r0, [r0]
str r0, [r2, 0x4]
adds r0, r6, 0
adds r0, 0x2C
ldrb r1, [r0]
cmp r1, 0
beq _08094774
adds r0, r1, 0
adds r0, r3, r0
str r0, [r2]
ldr r0, _08094770
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
b _08094784
.align 2, 0
_08094768: .4byte gUnknown_8113900
_0809476C: .4byte gUnknown_202DE30
_08094770: .4byte gUnknown_8113990
_08094774:
ldr r0, _080947AC
ldr r2, [r0]
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
_08094784:
adds r0, r6, 0
adds r0, 0x2E
ldrb r1, [r0]
cmp r1, 0
beq _080947B8
ldr r2, _080947B0
ldr r0, [r2, 0x4]
adds r0, r1
str r0, [r2, 0x4]
ldr r0, _080947B4
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
b _080947C8
.align 2, 0
_080947AC: .4byte gUnknown_8113918
_080947B0: .4byte gUnknown_202DE30
_080947B4: .4byte gUnknown_81139B4
_080947B8:
ldr r0, _080947E4
ldr r2, [r0]
str r1, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
_080947C8:
adds r5, 0x10
adds r2, r6, 0
adds r2, 0x1C
ldrb r1, [r6, 0x1C]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _080947EC
ldr r0, _080947E8
adds r1, r2, 0
movs r2, 0
bl sub_8090E14
b _080947F6
.align 2, 0
_080947E4: .4byte gUnknown_8113934
_080947E8: .4byte gUnknown_202DE58
_080947EC:
ldr r0, _0809481C
ldr r1, _08094820
ldr r1, [r1]
bl strcpy
_080947F6:
ldr r0, _08094824
ldr r2, [r0]
movs r0, 0
str r0, [sp]
movs r0, 0x4
adds r1, r5, 0
adds r3, r7, 0
bl xxx_format_and_draw
adds r0, r7, 0
bl sub_80073E0
add sp, 0xCC
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0809481C: .4byte gUnknown_202DE58
_08094820: .4byte gUnknown_81139B8
_08094824: .4byte gUnknown_81139CC
thumb_func_end sub_8094558
.align 2,0

View File

@@ -5573,7 +5573,7 @@ _0809BC26:
lsrs r4, 31
bl sub_809B294
adds r0, r4, 0
bl DisplayKangaskhanDialogueSprite
bl CreateKangaskhanStorage
lsls r0, 24
cmp r0, 0
beq _0809BC5C

View File

@@ -1,45 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8002658
sub_8002658:
push {r4,r5,lr}
lsls r0, 16
asrs r4, r0, 16
ldr r1, _0800267C
ldrh r2, [r1]
movs r3, 0
ldrsh r0, [r1, r3]
movs r3, 0x1
negs r3, r3
cmp r0, r3
beq _0800268C
_0800266E:
lsls r0, r2, 16
asrs r0, 16
cmp r0, r4
bne _08002680
ldrb r0, [r1, 0x2]
b _0800268E
.align 2, 0
_0800267C: .4byte gUnknown_80B71E4
_08002680:
adds r1, 0x4
ldrh r2, [r1]
movs r5, 0
ldrsh r0, [r1, r5]
cmp r0, r3
bne _0800266E
_0800268C:
movs r0, 0
_0800268E:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8002658
.align 2,0

View File

@@ -1,341 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8097FA8
sub_8097FA8:
lsls r0, 24
ldr r1, _08097FCC
ldr r3, [r1]
lsrs r1, r0, 29
lsls r1, 2
adds r3, 0x48
adds r3, r1
movs r1, 0xF8
lsls r1, 21
ands r1, r0
lsrs r1, 24
movs r2, 0x1
lsls r2, r1
ldr r0, [r3]
orrs r0, r2
str r0, [r3]
bx lr
.align 2, 0
_08097FCC: .4byte gUnknown_203B498
thumb_func_end sub_8097FA8
thumb_func_start sub_8097FD0
sub_8097FD0:
lsls r0, 24
ldr r1, _08097FF4
ldr r3, [r1]
lsrs r1, r0, 29
lsls r1, 2
adds r3, 0x3C
adds r3, r1
movs r1, 0xF8
lsls r1, 21
ands r1, r0
lsrs r1, 24
movs r2, 0x1
lsls r2, r1
ldr r0, [r3]
orrs r0, r2
str r0, [r3]
bx lr
.align 2, 0
_08097FF4: .4byte gUnknown_203B498
thumb_func_end sub_8097FD0
thumb_func_start sub_8097FF8
sub_8097FF8:
push {r4-r7,lr}
movs r4, 0
ldr r6, _08098040
movs r7, 0x1
_08098000:
ldr r5, [r6]
adds r0, r4, 0
cmp r4, 0
bge _0809800A
adds r0, 0x1F
_0809800A:
asrs r0, 5
lsls r3, r0, 2
adds r1, r5, 0
adds r1, 0x48
adds r1, r3
lsls r0, 5
subs r0, r4, r0
adds r2, r7, 0
lsls r2, r0
ldr r0, [r1]
ands r0, r2
cmp r0, 0
beq _08098030
adds r1, r5, 0
adds r1, 0x3C
adds r1, r3
ldr r0, [r1]
orrs r0, r2
str r0, [r1]
_08098030:
adds r4, 0x1
cmp r4, 0x3F
ble _08098000
bl sub_8098080
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08098040: .4byte gUnknown_203B498
thumb_func_end sub_8097FF8
thumb_func_start sub_8098044
sub_8098044:
push {r4,r5,lr}
lsls r0, 24
ldr r1, _0809807C
ldr r3, [r1]
lsrs r5, r0, 29
lsls r5, 2
adds r4, r3, 0
adds r4, 0x3C
adds r4, r5
movs r1, 0xF8
lsls r1, 21
ands r1, r0
lsrs r1, 24
movs r2, 0x1
lsls r2, r1
mvns r2, r2
ldr r0, [r4]
ands r0, r2
str r0, [r4]
adds r3, 0x48
adds r3, r5
ldr r0, [r3]
ands r0, r2
str r0, [r3]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0809807C: .4byte gUnknown_203B498
thumb_func_end sub_8098044
thumb_func_start sub_8098080
sub_8098080:
push {r4,lr}
movs r2, 0
ldr r4, _080980A0
movs r3, 0
_08098088:
ldr r0, [r4]
lsls r1, r2, 2
adds r0, 0x48
adds r0, r1
str r3, [r0]
adds r2, 0x1
cmp r2, 0x2
ble _08098088
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080980A0: .4byte gUnknown_203B498
thumb_func_end sub_8098080
thumb_func_start sub_80980A4
sub_80980A4:
ldr r0, _080980B0
ldr r2, [r0]
ldrb r0, [r2]
movs r1, 0x1
strb r1, [r2]
bx lr
.align 2, 0
_080980B0: .4byte gUnknown_203B498
thumb_func_end sub_80980A4
thumb_func_start sub_80980B4
sub_80980B4:
push {lr}
lsls r0, 16
asrs r1, r0, 16
adds r3, r1, 0
ldr r0, _080980F8
cmp r1, r0
beq _080980F4
adds r0, 0x1
cmp r1, r0
beq _080980F4
adds r0, 0x1
cmp r1, r0
beq _080980F4
ldr r0, _080980FC
ldr r2, [r0]
adds r0, r1, 0
cmp r1, 0
bge _080980DA
adds r0, 0x1F
_080980DA:
asrs r0, 5
lsls r1, r0, 2
adds r2, 0x4
adds r2, r1
lsls r0, 5
subs r0, r3, r0
lsls r0, 16
asrs r0, 16
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
orrs r0, r1
str r0, [r2]
_080980F4:
pop {r0}
bx r0
.align 2, 0
_080980F8: .4byte 0x000001a5
_080980FC: .4byte gUnknown_203B498
thumb_func_end sub_80980B4
thumb_func_start sub_8098100
sub_8098100:
push {lr}
lsls r1, r0, 24
lsrs r3, r1, 24
cmp r3, 0x3F
bls _0809810E
movs r0, 0
b _0809812C
_0809810E:
ldr r0, _08098130
ldr r2, [r0]
lsrs r0, r1, 29
lsls r0, 2
adds r2, 0x3C
adds r2, r0
movs r0, 0x1F
ands r0, r3
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
ands r0, r1
cmp r0, 0
beq _0809812C
movs r0, 0x1
_0809812C:
pop {r1}
bx r1
.align 2, 0
_08098130: .4byte gUnknown_203B498
thumb_func_end sub_8098100
thumb_func_start sub_8098134
sub_8098134:
push {lr}
lsls r0, 16
asrs r1, r0, 16
adds r3, r1, 0
ldr r0, _0809816C
ldr r2, [r0]
adds r0, r1, 0
cmp r1, 0
bge _08098148
adds r0, 0x1F
_08098148:
asrs r0, 5
lsls r1, r0, 2
adds r2, 0x4
adds r2, r1
lsls r0, 5
subs r0, r3, r0
lsls r0, 16
asrs r0, 16
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
ands r0, r1
cmp r0, 0
beq _08098166
movs r0, 0x1
_08098166:
pop {r1}
bx r1
.align 2, 0
_0809816C: .4byte gUnknown_203B498
thumb_func_end sub_8098134
thumb_func_start sub_8098170
sub_8098170:
push {lr}
adds r3, r0, 0
ldr r0, _0809819C
ldr r2, [r0]
adds r0, r3, 0
cmp r3, 0
bge _08098180
adds r0, 0x1F
_08098180:
asrs r0, 5
lsls r1, r0, 2
adds r2, 0x54
adds r2, r1
lsls r0, 5
subs r0, r3, r0
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
orrs r0, r1
str r0, [r2]
pop {r0}
bx r0
.align 2, 0
_0809819C: .4byte gUnknown_203B498
thumb_func_end sub_8098170
thumb_func_start sub_80981A0
sub_80981A0:
push {lr}
adds r3, r0, 0
cmp r3, 0x1E
ble _080981AC
movs r0, 0
b _080981D4
_080981AC:
ldr r0, _080981D8
ldr r2, [r0]
adds r1, r3, 0
cmp r3, 0
bge _080981B8
adds r1, 0x1F
_080981B8:
asrs r1, 5
lsls r0, r1, 2
adds r2, 0x54
adds r2, r0
lsls r1, 5
subs r1, r3, r1
movs r0, 0x1
lsls r0, r1
ldr r2, [r2]
ands r2, r0
cmp r2, 0
beq _080981D2
movs r2, 0x1
_080981D2:
adds r0, r2, 0
_080981D4:
pop {r1}
bx r1
.align 2, 0
_080981D8: .4byte gUnknown_203B498
thumb_func_end sub_80981A0
.align 2,0

View File

@@ -3,111 +3,7 @@
.syntax unified
.text
thumb_func_start sub_8092638
sub_8092638:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r4, r1, 0
lsls r0, 24
lsrs r5, r0, 24
lsls r2, 24
lsrs r2, 24
mov r12, r2
lsls r3, 24
lsrs r3, 24
mov r8, r3
movs r6, 0
movs r3, 0
ldr r2, _080926DC
cmp r3, r5
bge _0809266E
ldr r1, _080926E0
adds r3, r5, 0
_0809265E:
movs r7, 0
ldrsh r0, [r1, r7]
adds r6, r0
adds r1, 0x8
subs r3, 0x1
cmp r3, 0
bne _0809265E
adds r3, r5, 0
_0809266E:
str r6, [r4, 0x8]
ldr r0, [r2]
adds r0, r3
ldrb r0, [r0]
strb r0, [r4, 0x4]
lsls r0, 24
lsrs r0, 24
cmp r0, 0
beq _080926E8
movs r0, 0
strh r0, [r4, 0x2]
ldr r1, _080926E0
lsls r0, r3, 3
adds r0, r1
ldrh r0, [r0]
strh r0, [r4]
movs r3, 0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r3, r0
bge _080926EC
ldr r5, _080926E4
_0809269A:
movs r0, 0x58
adds r1, r6, 0
muls r1, r0
ldr r0, [r5]
adds r2, r0, r1
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _080926CC
mov r7, r12
cmp r7, 0
beq _080926BA
ldrb r0, [r2, 0x2]
cmp r0, 0
bne _080926CC
_080926BA:
mov r0, r8
cmp r0, 0
beq _080926C6
ldrb r0, [r2, 0x4]
cmp r0, 0x41
beq _080926CC
_080926C6:
ldrh r0, [r4, 0x2]
adds r0, 0x1
strh r0, [r4, 0x2]
_080926CC:
adds r3, 0x1
adds r6, 0x1
movs r1, 0
ldrsh r0, [r4, r1]
cmp r3, r0
blt _0809269A
b _080926EC
.align 2, 0
_080926DC: .4byte gFriendAreas
_080926E0: .4byte gFriendAreaSettings
_080926E4: .4byte gRecruitedPokemonRef
_080926E8:
strh r0, [r4, 0x2]
strh r0, [r4]
_080926EC:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8092638
.text
thumb_func_start sub_80926F8
sub_80926F8:

View File

@@ -1,685 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8016FF8
sub_8016FF8:
push {r4,r5,lr}
sub sp, 0x14
ldr r1, _08017014
ldr r0, [r1]
ldr r0, [r0, 0x4]
adds r4, r1, 0
cmp r0, 0x1D
bls _0801700A
b _08017584
_0801700A:
lsls r0, 2
ldr r1, _08017018
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08017014: .4byte gUnknown_203B208
_08017018: .4byte _0801701C
.align 2, 0
_0801701C:
.4byte _08017094
.4byte _080170BC
.4byte _0801710C
.4byte _0801713C
.4byte _08017584
.4byte _0801715C
.4byte _0801718C
.4byte _080171BC
.4byte _080171EC
.4byte _0801721C
.4byte _0801724C
.4byte _0801726C
.4byte _0801728C
.4byte _080172AC
.4byte _080172BA
.4byte _080172C2
.4byte _080174A8
.4byte _080172E4
.4byte _0801731C
.4byte _08017344
.4byte _08017394
.4byte _080173B4
.4byte _080173E8
.4byte _080173F6
.4byte _08017404
.4byte _08017474
.4byte _080174A8
.4byte _080174B2
.4byte _080174E8
.4byte _08017530
_08017094:
bl sub_80175FC
ldr r2, _080170B4
ldr r0, [r2]
adds r0, 0xE4
movs r4, 0
movs r1, 0x1
strb r1, [r0]
ldr r3, _080170B8
ldr r5, [r2]
ldr r1, [r5]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r0, r3
b _080170DA
.align 2, 0
_080170B4: .4byte gUnknown_203B208
_080170B8: .4byte gKangaskhanStorageDialogue
_080170BC:
bl sub_80175FC
ldr r1, _08017104
ldr r0, [r1]
adds r0, 0xE4
movs r4, 0
strb r4, [r0]
ldr r2, _08017108
ldr r5, [r1]
ldr r1, [r5]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x4
adds r0, r2
_080170DA:
ldr r0, [r0]
ldr r2, [r5, 0x18]
adds r3, r5, 0
adds r3, 0x24
adds r1, r5, 0
adds r1, 0x4C
str r1, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r4, [sp, 0x8]
adds r1, r5, 0
adds r1, 0xE8
ldr r1, [r1]
str r1, [sp, 0xC]
movs r1, 0xC
str r1, [sp, 0x10]
movs r1, 0
bl sub_8014248
b _08017584
.align 2, 0
_08017104: .4byte gUnknown_203B208
_08017108: .4byte gKangaskhanStorageDialogue
_0801710C:
ldr r0, [r4]
movs r1, 0x1
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017134
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x4C
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _08017138
b _080173D8
.align 2, 0
_08017134: .4byte gKangaskhanStorageDialogue
_08017138: .4byte 0x0000010d
_0801713C:
ldr r0, [r4]
movs r1, 0x4
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0x1
strb r1, [r0]
ldr r2, _08017158
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x8
b _080173CE
.align 2, 0
_08017158: .4byte gKangaskhanStorageDialogue
_0801715C:
ldr r0, [r4]
movs r1, 0x1
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017184
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x34
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _08017188
b _080173D8
.align 2, 0
_08017184: .4byte gKangaskhanStorageDialogue
_08017188: .4byte 0x0000010d
_0801718C:
ldr r0, [r4]
movs r1, 0x1
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _080171B4
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x38
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _080171B8
b _080173D8
.align 2, 0
_080171B4: .4byte gKangaskhanStorageDialogue
_080171B8: .4byte 0x0000010d
_080171BC:
ldr r0, [r4]
movs r1, 0x1
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _080171E4
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x3C
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _080171E8
b _080173D8
.align 2, 0
_080171E4: .4byte gKangaskhanStorageDialogue
_080171E8: .4byte 0x0000010d
_080171EC:
ldr r0, [r4]
movs r1, 0x1
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017214
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x48
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _08017218
b _080173D8
.align 2, 0
_08017214: .4byte gKangaskhanStorageDialogue
_08017218: .4byte 0x0000010d
_0801721C:
ldr r0, _08017244
ldr r1, [r4]
adds r1, 0xC
movs r2, 0
bl sub_8090E14
ldr r0, [r4]
movs r1, 0xE
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017248
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x40
b _080173CE
.align 2, 0
_08017244: .4byte gUnknown_202DE58
_08017248: .4byte gKangaskhanStorageDialogue
_0801724C:
ldr r0, [r4]
movs r1, 0xE
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017268
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x44
b _080173CE
.align 2, 0
_08017268: .4byte gKangaskhanStorageDialogue
_0801726C:
ldr r0, [r4]
movs r1, 0xD
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _08017288
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0xC
b _080173CE
.align 2, 0
_08017288: .4byte gKangaskhanStorageDialogue
_0801728C:
ldr r0, [r4]
movs r1, 0xE
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _080172A8
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x10
b _080173CE
.align 2, 0
_080172A8: .4byte gKangaskhanStorageDialogue
_080172AC:
movs r0, 0x3
movs r1, 0x3
movs r2, 0
movs r3, 0xA
bl sub_801A5D8
b _08017584
_080172BA:
movs r0, 0x1
bl sub_801A8D0
b _08017584
_080172C2:
bl sub_801A9E0
bl sub_80176B8
ldr r0, _080172E0
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x58
adds r1, r2, 0
adds r1, 0x24
adds r3, r2, 0
adds r3, 0x4C
ldr r2, [r2, 0x1C]
b _08017494
.align 2, 0
_080172E0: .4byte gUnknown_203B208
_080172E4:
bl sub_80177F8
ldr r0, _08017310
ldr r4, _08017314
ldr r1, [r4]
adds r1, 0xC
movs r2, 0
bl sub_8090E14
ldr r0, [r4]
adds r0, 0xE4
movs r5, 0
strb r5, [r0]
ldr r2, _08017318
ldr r4, [r4]
ldr r1, [r4]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x14
b _08017504
.align 2, 0
_08017310: .4byte gUnknown_202DE58
_08017314: .4byte gUnknown_203B208
_08017318: .4byte gKangaskhanStorageDialogue
_0801731C:
bl sub_80177F8
ldr r1, _0801733C
ldr r0, [r1]
adds r0, 0xE4
movs r5, 0
strb r5, [r0]
ldr r2, _08017340
ldr r4, [r1]
ldr r1, [r4]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x18
b _08017504
.align 2, 0
_0801733C: .4byte gUnknown_203B208
_08017340: .4byte gKangaskhanStorageDialogue
_08017344:
bl GetNumberOfFilledInventorySlots
cmp r0, 0
bne _0801735C
bl sub_801A928
ldr r0, _08017358
ldr r1, [r0]
movs r0, 0x1
b _08017362
.align 2, 0
_08017358: .4byte gUnknown_203B208
_0801735C:
ldr r0, _08017388
ldr r1, [r0]
movs r0, 0xC
_08017362:
str r0, [r1, 0x8]
ldr r3, _08017388
ldr r0, [r3]
adds r0, 0xE4
movs r1, 0x1
strb r1, [r0]
ldr r2, _0801738C
ldr r3, [r3]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x1C
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _08017390
b _080173D8
.align 2, 0
_08017388: .4byte gUnknown_203B208
_0801738C: .4byte gKangaskhanStorageDialogue
_08017390: .4byte 0x0000010d
_08017394:
ldr r0, [r4]
movs r1, 0x16
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _080173B0
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x20
b _080173CE
.align 2, 0
_080173B0: .4byte gKangaskhanStorageDialogue
_080173B4:
ldr r0, [r4]
movs r1, 0x17
str r1, [r0, 0x8]
adds r0, 0xE4
movs r1, 0
strb r1, [r0]
ldr r2, _080173E0
ldr r3, [r4]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x24
_080173CE:
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _080173E4
_080173D8:
movs r1, 0
bl sub_80141B4
b _08017584
.align 2, 0
_080173E0: .4byte gKangaskhanStorageDialogue
_080173E4: .4byte 0x0000030d
_080173E8:
movs r0, 0x1
movs r1, 0x3
movs r2, 0
movs r3, 0xA
bl sub_801C8C4
b _080173FC
_080173F6:
movs r0, 0x1
bl sub_801CB5C
_080173FC:
movs r0, 0
bl sub_801AD34
b _08017584
_08017404:
ldr r2, [r4]
adds r1, r2, 0
adds r1, 0xB8
movs r0, 0x2
str r0, [r1]
subs r1, 0x8
movs r0, 0x1
str r0, [r1]
ldr r0, _08017430
ldr r1, [r0]
ldrb r0, [r2, 0xE]
lsls r0, 1
adds r1, 0x50
adds r3, r1, r0
ldrh r0, [r3]
cmp r0, 0x63
bls _08017434
adds r1, r2, 0
adds r1, 0xB4
movs r0, 0x63
b _0801743A
.align 2, 0
_08017430: .4byte gTeamInventory_203B460
_08017434:
adds r1, r2, 0
adds r1, 0xB4
ldrh r0, [r3]
_0801743A:
str r0, [r1]
ldr r2, [r4]
adds r1, r2, 0
adds r1, 0xAC
adds r0, r2, 0
adds r0, 0xB4
ldr r0, [r0]
str r0, [r1]
adds r1, 0x10
movs r0, 0x1
str r0, [r1]
adds r1, 0x4
movs r3, 0x82
lsls r3, 1
adds r0, r2, r3
str r0, [r1]
adds r1, 0x4
movs r0, 0x28
str r0, [r1]
adds r1, 0x4
movs r0, 0x12
str r0, [r1]
adds r0, r2, 0
adds r0, 0xA8
bl sub_8013AA0
bl sub_8017598
b _08017584
_08017474:
bl sub_801CCD8
movs r0, 0
bl sub_801AD34
bl sub_8017758
ldr r0, _080174A4
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x58
adds r1, r2, 0
adds r1, 0x24
adds r3, r2, 0
adds r3, 0x4C
ldr r2, [r2, 0x20]
_08017494:
str r2, [sp]
movs r2, 0x2
str r2, [sp, 0x4]
movs r2, 0
bl sub_8012D60
b _08017584
.align 2, 0
_080174A4: .4byte gUnknown_203B208
_080174A8:
ldr r0, [r4]
adds r0, 0xC
bl sub_801B3C0
b _08017584
_080174B2:
bl sub_80177F8
ldr r0, _080174DC
ldr r4, _080174E0
ldr r1, [r4]
adds r1, 0xC
movs r2, 0
bl sub_8090E14
ldr r0, [r4]
adds r0, 0xE4
movs r5, 0
strb r5, [r0]
ldr r2, _080174E4
ldr r4, [r4]
ldr r1, [r4]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x28
b _08017504
.align 2, 0
_080174DC: .4byte gUnknown_202DE58
_080174E0: .4byte gUnknown_203B208
_080174E4: .4byte gKangaskhanStorageDialogue
_080174E8:
bl sub_80177F8
ldr r1, _08017528
ldr r0, [r1]
adds r0, 0xE4
movs r5, 0
strb r5, [r0]
ldr r2, _0801752C
ldr r4, [r1]
ldr r1, [r4]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x2C
_08017504:
adds r0, r2
ldr r0, [r0]
adds r3, r4, 0
adds r3, 0x24
str r5, [sp]
movs r1, 0x4
str r1, [sp, 0x4]
str r5, [sp, 0x8]
adds r4, 0xE8
ldr r1, [r4]
str r1, [sp, 0xC]
movs r1, 0xC
str r1, [sp, 0x10]
movs r1, 0
movs r2, 0x4
bl sub_8014248
b _08017584
.align 2, 0
_08017528: .4byte gUnknown_203B208
_0801752C: .4byte gKangaskhanStorageDialogue
_08017530:
movs r0, 0x1
bl sub_801CF14
lsls r0, 24
cmp r0, 0
bne _08017544
bl GetNumberOfFilledInventorySlots
cmp r0, 0x13
ble _08017554
_08017544:
bl sub_801CBB8
ldr r0, _08017550
ldr r1, [r0]
movs r0, 0x1
b _0801755A
.align 2, 0
_08017550: .4byte gUnknown_203B208
_08017554:
ldr r0, _0801758C
ldr r1, [r0]
movs r0, 0x15
_0801755A:
str r0, [r1, 0x8]
ldr r3, _0801758C
ldr r0, [r3]
adds r0, 0xE4
movs r1, 0x1
strb r1, [r0]
ldr r2, _08017590
ldr r3, [r3]
ldr r1, [r3]
lsls r0, r1, 2
adds r0, r1
lsls r0, 4
adds r2, 0x30
adds r0, r2
ldr r0, [r0]
adds r3, 0xE8
ldr r2, [r3]
ldr r3, _08017594
movs r1, 0
bl sub_80141B4
_08017584:
add sp, 0x14
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0801758C: .4byte gUnknown_203B208
_08017590: .4byte gKangaskhanStorageDialogue
_08017594: .4byte 0x0000010d
thumb_func_end sub_8016FF8
.align 2,0

File diff suppressed because it is too large Load Diff

View File

@@ -6975,45 +6975,4 @@ _080097A8: .4byte 0x06017e00
_080097AC: .4byte gUnknown_80B88C0
thumb_func_end InitGraphics
thumb_func_start sub_80097B0
sub_80097B0:
push {r4-r6,lr}
ldr r0, _080097F8
ldr r1, _080097FC
bl OpenFileAndGetFileDataPtr
adds r6, r0, 0
ldr r4, _08009800
ldr r1, [r6, 0x4]
movs r2, 0x80
lsls r2, 2
adds r0, r4, 0
bl CpuCopy
bl sub_80063B0
adds r5, r4, 0
adds r5, 0x40
cmp r0, 0x1
bne _080097D8
adds r5, r4, 0
_080097D8:
movs r4, 0
_080097DA:
adds r0, r4, 0
adds r0, 0xF0
adds r1, r5, 0
bl SetBGPaletteBufferColorArray
adds r5, 0x4
adds r4, 0x1
cmp r4, 0xF
ble _080097DA
adds r0, r6, 0
bl CloseFile
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080097F8: .4byte gUnknown_80B88CC
_080097FC: .4byte gSystemFileArchive
_08009800: .4byte gUnknown_202D038
thumb_func_end sub_80097B0
.align 2, 0 @ Don't pad with nop.

View File

@@ -17,7 +17,7 @@ struct unkStruct_203B270
u32 unk50;
u32 unk54;
struct UnkTextStruct2 unk58[4];
u8 *unkB8;
u8 *text;
};
#endif

27
include/code_8023144.h Normal file
View File

@@ -0,0 +1,27 @@
#ifndef GUARD_CODE_8023144_H
#define GUARD_CODE_8023144_H
struct unkStruct_203B294
{
// size: 0x1A8
/* 0x0 */ s32 state;
/* 0x4 */ s32 fallbackState;
u8 iqSkillPreGummi[NUM_IQ_SKILLS];
u8 iqSkillPostGummi[NUM_IQ_SKILLS];
u32 availIQSkillPreGummi;
u32 availIQSkillPostGummi;
u32 unk40; // Gummi eaten flag?
struct Gummi gummi;
/* 0x48 */ struct PokemonStruct *pokeStruct;
u32 itemIndex;
struct Item item;
struct MenuStruct unk54;
struct MenuStruct unkA4;
u32 menuAction;
struct MenuItem unkF8[0x8];
u16 unk138[0x8];
struct UnkTextStruct2 unk148[4];
};
#endif // GUARD_CODE_8023144_H

View File

@@ -17,13 +17,12 @@ struct unkStruct_203B480
u32 unk10;
u16 unk10_u16;
} unk10;
/* 0x14 */ u8 playerName[0x20 - 0x14];;
struct Item unk20;
/* 0x14 */ u8 playerName[0x20 - 0x14];
struct Item item;
u32 unk24;
u32 unk28;
/* 0x2C */ s8 rescuesAllowed;
u8 unk2D;
u8 padding4[0x30 - 0x2E];
};
// size: 0x5C

View File

@@ -39,7 +39,9 @@ const u8 *GetDungeonName1(u8 dungeon);
u32 sub_80908D8(struct DungeonLocation *dungeon);
u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2);
bool8 sub_809095C(u8 dungeon);
u32 GetMaxItemsAllowed(u8 dungeon);
s8 GetRescuesAllowed(u8 dungeon);
bool8 HasCheckpoint(u8 dungeon);
s32 GetDungeonFloorCount(u8 dungeon);
#endif //GUARD_DUNGEON_H

View File

@@ -34,8 +34,8 @@ struct unkDungeonGlobal_unk1CE98_sub
{
/* 0x0 */ u8 buffer1[10];
/* 0xA */ u8 buffer2[10];
s16 unk14;
u8 fill16[0x18 - 0x16];
/* 0x14 */ s16 moveID;
/* 0x16 */ u8 fill16[0x2];
/* 0x18 */ struct DungeonLocation dungeonLocation;
/* 0x1C */ struct Item heldItem;
/* 0x20 */ u32 exp;
@@ -109,7 +109,7 @@ struct Dungeon
u8 unk66F;
u8 unk670;
/* 0x671 */ bool8 monsterHouseTriggered;
/* 0x672 */ u8 unk672;
/* 0x672 */ bool8 monsterHouseTriggeredEvent;
u8 unk673;
u8 unk674;
u8 unk675;

View File

@@ -4,14 +4,32 @@
struct UnkEventStruct
{
/* 0x0 */ s16 *unk0;
/* 0x4 */ u32 *unk4;
/* 0x4 */ u8 *unk4;
};
void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3);
void ScenarioCalc(s16 param_1, s32 param_2, s32 param_3);
bool8 sub_8001CC4(s16 param_1, u32 param_2, s32 param_3);
bool8 sub_8001D08(s16 param_1, u32 param_2, s32 param_3);
bool8 sub_8001D44(s16 param_1, u32 param_2, s32 param_3);
void sub_8001D88(void);
u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation);
u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation);
u32 FlagCalc(s32 r0, s32 r1, u32 operation);
void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation);
void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation);
u8 FlagJudge(s32 r0, s32 r1, u32 operation);
u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation);
u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation);
bool8 sub_80023E4(u32 param_1);
u8 sub_8002658(s16 param_1);
s16 sub_8002694(u8 param_1);
bool8 sub_80026CC(s16 r0);
void sub_80026E8(s16 r0);
bool8 sub_8002700(void *r0);
bool8 sub_8002718(u8 *r0);
void sub_8002758(u32 *r0);
void sub_8002758(s32 r0);
u8 sub_800276C(void);
#endif // GUARD_EVENT_FLAG_H

View File

@@ -15,8 +15,13 @@ struct ExclusivePokemon
struct ExclusivePokemonData
{
u8 fill0[0x48];
u32 unk48[4];
u8 unk0;
u32 unk4[1];
u8 fill8[0x3C - 8];
u32 unk3C[1];
u8 fill40[8];
u32 unk48[3];
u32 unk54[1];
/* 0x58 */ bool8 Exclusives[NUM_EXCLUSIVE_POKEMON];
};
@@ -39,6 +44,17 @@ extern struct ExclusivePokemonData *gUnknown_203B498;
void LoadExclusivePokemon(void);
struct ExclusivePokemonData *GetExclusivePokemon(void);
void InitializeExclusivePokemon(void);
void sub_8097FA8(u8 param_1);
void sub_8097FD0(u8 param_1);
void sub_8097FF8(void);
void sub_8098044(u8 param_1);
void sub_8098080(void);
u32 sub_80980A4(void);
void sub_80980B4(s16 pokeID);
bool8 sub_8098100(u8 param_1);
bool8 sub_8098134(s16 pokeID);
void sub_8098170(s32 param_1);
bool32 sub_80981A0(s32 param_1);
bool8 IsExclusivePokemonUnlocked(s16 pokeID);
void UnlockExclusivePokemon(s16 pokeID);
void WriteExclusivePokemon(struct unkStruct_8094924 *r0);

View File

@@ -8,6 +8,15 @@ struct FriendAreaSettings
u32 price;
};
struct unkStruct_8092638
{
/* 0x0 */ s16 numPokemon;
s16 unk2;
/* 0x4 */ bool8 hasFriendArea;
u8 fill5[3];
s32 unk8;
};
void LoadFriendAreas(void);
bool8 *GetBoughtFriendAreas(void);
void InitializeFriendAreas(void);
@@ -15,10 +24,11 @@ u8 sub_80923D4(s32 target);
bool8 HasAllFriendAreas(void);
bool8 GetFriendAreaStatus(u8 index);
void UnlockFriendArea(u8 index);
u32 GetFriendAreaDescription(u8 index);
u8 *GetFriendAreaDescription(u8 index);
u8 GetFriendAreaUnlockCondition(u8 index);
u32 GetFriendAreaPrice(u8 index);
s32 GetFriendAreaPrice(u8 index);
const char *GetFriendAreaName(u8 index);
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4);
u32 SaveFriendAreas(u8 *r0, u32 r1);
u32 ReadSavedFriendAreas(u8 *r0, s32 r1);

View File

@@ -33,5 +33,6 @@ struct GulpinShopWork
u32 CreateGulpinShop(s32 isAsleep, s16 pokeSpecies, struct Move *moves);
void DestroyGulpinShop(void);
bool8 GulpinIsNextMoveLinked(void);
#endif

View File

@@ -60,7 +60,8 @@ struct unkStruct_8090F58
enum ItemFlag
{
ITEM_FLAG_EXISTS = 1 << 0,
ITEM_FLAG_IN_SHOP = 1 << 1,
ITEM_FLAG_IN_SHOP = 1 << 1, // in a Kecleon shop
ITEM_FLAG_UNPAID = 1 << 2, // Picked up in Kecleon shop but not paid for yet
ITEM_FLAG_STICKY = 1 << 3,
ITEM_FLAG_SET = 1 << 4 // This item can be thrown by pressing L+R instead of having to go to the bag menu.
};

View File

@@ -8,7 +8,7 @@
struct unkStruct_203B208
{
// size: 0x14C
u32 unk0;
bool32 isAsleep;
u32 currState;
u32 fallbackState;
struct Item storedItem;
@@ -21,9 +21,15 @@ struct unkStruct_203B208
u16 unk4C[5];
struct MenuStruct unk58;
u32 unkA8;
u8 unkAC[0xBC - 0xAC];
u32 unkAC;
u32 unkB0;
u32 unkB4;
u32 unkB8;
u32 unkBC;
u8 unkC0[0xD4 - 0xC0];
struct UnkTextStruct2 *unkC0;
u32 unkC4;
u32 unkC8;
u8 unkCC[0xD4 - 0xCC];
u32 unkD4;
struct OpenedFile *faceFile;
u8 *faceData;

View File

@@ -40,7 +40,7 @@ struct unkStruct_8035D94
u8 itemIndex_u8;
u32 itemIndex_u32;
} itemIndex;
u32 numItems;
s32 numItems;
};
struct MainMenuSub

View File

@@ -1,5 +1,8 @@
#include "menu.h"
u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1);
s32 GetKeyPress(struct MenuInputStruct *r0);
s32 sub_8012AE8(void);
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);
@@ -12,3 +15,24 @@ void sub_8012EBC(struct MenuStruct *param_1);
bool8 sub_8012FD8(struct MenuStruct *param_1);
bool8 sub_80130A8(struct MenuStruct *param_1);
bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction);
void sub_801317C(struct MenuInputStructSub *param_1);
void AddMenuCursorSprite(struct MenuInputStruct *param_1);
void sub_8013660(struct MenuInputStruct *param_1);
void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1);
void MoveMenuCursorDown(struct MenuInputStruct *param_1);
void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2);
void MoveMenuCursorUp(struct MenuInputStruct *param_1);
void sub_8013744(struct MenuInputStruct *param_1, u8 param_2);
void sub_8013780(struct MenuInputStruct *param_1, s32 param_2);
s32 sub_80137A8(struct MenuInputStruct *param_1);
void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2);
void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2);
s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2);
void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4);
void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4);
void sub_8013878(struct MenuInputStruct *param_1, s32 param_2);
bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2);
bool8 sub_8013938(struct MenuInputStruct *param_1);
void sub_8013984(struct MenuInputStruct * param_1);
void sub_8013A54(struct MenuInputStruct *param_1);
void sub_8013A7C(struct MenuInputStruct *param_1);

View File

@@ -57,5 +57,14 @@ void unk_LinkedSequencesToMoves8(struct Move* moves, struct Move linkedSequences
int unk_FindMarkedMoveInLinkedSequences88_v2(struct Move linkedSequences[8][8]);
void unk_LinkedSequencesToMoves8_v2(struct Move* moves, struct Move linkedSequences[8][8]);
bool8 IsMoveSet(int index, struct Move* struct_ptr);
bool8 IsMoveEnabled(int index, struct Move* struct_ptr);
bool8 TryLinkMovesAfter(int index, struct Move* moves);
bool8 UnlinkMovesAfter(int index, struct Move* moves);
bool8 ToggleSetMove(int index, struct Move* moves);
void UnSetMove(int index, struct Move* moves);
bool8 ToggleMoveEnabled(int index, struct Move* moves);
bool8 sub_8093318(int param_1, void* src_struct);
bool8 sub_809333C(int param_1, void* src_struct);
#endif // GUARD_MOVES_H

View File

@@ -2,6 +2,7 @@
#define GUARD_PERSONALITY_TEST_H
#include "constants/personality_test.h"
#include "input.h"
#include "text.h"
// Definitely wrong but need to figure out better structure later
@@ -38,9 +39,7 @@ struct PersonalityTestTracker
/* 0x44 */ s32 NatureTotals[NUM_PERSONALITIES];
/* 0x78 */ u8 QuestionTracker[NUM_QUIZ_QUESTIONS];
/* 0xB0 */ u32 playerGender; // 1 = Female, 0 = Male
u32 unkb4;
u32 unkb8;
u32 unkbc;
/* 0xB4 */ struct MenuInputStructSub input;
};
struct PersonalityStruct_203B404

View File

@@ -196,6 +196,7 @@ void CopyMonsterNametoBuffer(u8 * buffer, s16 index);
void CopyYellowMonsterNametoBuffer(u8 *buffer, s16 index);
void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index);
void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum);
void sub_808D930(u8 *buffer, s32 index);
void sub_808D9DC(u8 *buffer, struct PokemonStruct2 *param_2, s32 colorNum);
void sub_808DA0C(u8 *buffer, struct PokemonStruct2 *param_2);
void PeekPokemonItem(s16 index_, struct BulkItem* item);

View File

@@ -1,7 +1,7 @@
#ifndef GUARD_TEXT_UTIL_H
#define GUARD_TEXT_UTIL_H
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
void sub_80922B4(u8 *buffer, const u8 *string, s32 size);
u32 sub_80922E4(u32 r0);
void CopyStringtoBuffer(u8 *buffer, u8 *string);
void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);

68
include/wigglytuff_shop.h Normal file
View File

@@ -0,0 +1,68 @@
#ifndef GUARD_WIGGLYTUFF_SHOP_H
#define GUARD_WIGGLYTUFF_SHOP_H
struct WigglytuffShop
{
// size: 0x138
bool32 isAsleep;
s32 state;
s32 fallbackState;
s32 friendAreaPrice;
u8 chosenFriendArea;
s16 chosenSpecies;
u32 menuAction1;
u32 menuAction2;
struct MenuItem unk1C[8];
u16 unk5C[0x8];
struct MenuStruct unk6C;
/* 0xBC */ struct OpenedFile *faceFile;
/* 0xC0 */ u8 *faceData;
u16 unkC4;
u16 unkC6;
u8 unkC8;
u8 unkC9;
u8 unkCA;
u8 fillCB;
u8 *unkCC;
struct UnkTextStruct2 unkD0[4];
u32 unk130;
u32 unk134;
};
extern struct WigglytuffShop *gWigglytuffShop;
enum WigglytuffStates
{
WIGGLYTUFF_INIT = 0,
WIGGLYTUFF_MAIN_MENU = 1,
WIGGLYTUFF_INFO = 2,
WIGGLYTUFF_PRE_EXIT = 3,
WIGGLYTUFF_EXIT = 4,
WIGGLYTUFF_CANT_ADD_FRIEND_AREA = 5,
NO_MONEY = 6,
FRIEND_AREA_SELECT_BUY = 7,
FRIEND_AREA_SELECT_BUY_AGAIN = 8,
WIGGLYTUFF_UNK9 = 9,
WIGGLYTUFF_UNKA = 0xA,
WIGGLYTUFF_UNKB = 0xB,
CONFIRM_BUY_FRIEND_AREA = 0xC,
WIGGLYTUFF_UNKD = 0xD,
WIGGLYTUFF_UNKE = 0xE,
FRIEND_AREA_UNLOCKED = 0xF,
FRIEND_AREA_INFO = 0x10,
BUY_FRIEND_AREA = 0x11,
NO_FRIEND_AREAS = 0x12,
NOT_ENOUGH_MONEY = 0x13,
WIGGLYTUFF_CHECK = 0x14,
WIGGLYTUFF_CHECK_AGAIN = 0x15,
WIGGLYTUFF_UNK16 = 0x16,
WIGGLYTUFF_UNK17 = 0x17,
DISPLAY_POKEMON_FRIEND_AREA_INFO = 0x18,
WIGGLYTUFF_CHECK_HAS_FRIEND_AREA = 0x19,
WIGGLYTUFF_CHECK_POST_GAME = 0x1A,
WIGGLYTUFF_CHECK_WONDER_MAIL = 0x1B,
WIGGLYTUFF_CHECK_LEGENDARY = 0x1C,
};
#endif // GUARD_WIGGLYTUFF_SHOP_H

View File

@@ -47,8 +47,6 @@ SECTIONS {
asm/code_2.o(.text);
src/code.o(.text);
asm/event_flag.o(.text);
src/event_flag_1.o(.text);
asm/event_flag_1.o(.text);
src/event_flag.o(.text);
asm/code_8002774.o(.text);
src/memory.o(.text);
@@ -92,7 +90,6 @@ SECTIONS {
src/debug.o(.text);
src/save.o(.text);
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);
@@ -100,8 +97,6 @@ SECTIONS {
src/code_8012A18_1.o(.text);
src/felicity_bank.o(.text);
src/kangaskhan_storage.o(.text);
asm/kangaskhan_storage.o(.text);
src/kangaskhan_storage_1.o(.text);
src/kecleon_items.o(.text);
asm/kecleon_items.o(.text);
src/kecleon_items_1.o(.text);
@@ -117,7 +112,13 @@ SECTIONS {
src/code_801EE10.o(.text);
asm/code_801EE10.o(.text);
src/code_801EE10_mid.o(.text);
src/gulpin_shop_1.o(.text);
src/code_8021774_pre.o(.text);
asm/code_801EE10_mid.o(.text);
src/code_8021774.o(.text);
src/wigglytuff_shop.o(.text);
src/code_8023144_pre.o(.text);
asm/code_8023144.o(.text);
src/code_8023144.o(.text);
asm/code_801EE10_1.o(.text);
src/code_801EE10_1.o(.text);
@@ -155,6 +156,7 @@ SECTIONS {
src/trade_items_menu.o(.text);
src/other_menus.o(.text);
asm/other_menus.o(.text);
src/other_menus_1.o(.text);
src/adventure_log_menu.o(.text);
src/unk_menu_203B360.o(.text);
src/save_menu.o(.text);
@@ -284,7 +286,6 @@ SECTIONS {
asm/code_8094148.o(.text);
src/number_util.o(.text);
src/code_809447C.o(.text);
asm/code_809447C.o(.text);
src/code_8092334.o(.text);
src/game_options.o(.text);
asm/code_8094D28.o(.text);
@@ -304,8 +305,6 @@ SECTIONS {
asm/code_8097DD0.o(.text);
src/code_8097F40.o(.text);
src/exclusive_pokemon.o(.text);
asm/exclusive_pokemon.o(.text);
src/exclusive_pokemon_1.o(.text);
src/position_util.o(.text);
asm/code_8098468.o(.text);
src/ground_main.o(.text);

View File

@@ -41,11 +41,7 @@ const u8 fill_adven[] = "pksdir0";
void sub_8032084();
void DisplayAdventureLog();
extern void sub_8013818(void *, u32, u32, u32);
extern bool8 sub_8013938(struct MenuInputStruct *);
extern void sub_8013660(struct MenuInputStruct *);
extern void PlayMenuSoundEffect(u32);
extern u32 GetKeyPress(struct MenuInputStruct *);
extern bool8 sub_8097710(u8);
extern s16 sub_80978B8();
@@ -59,7 +55,6 @@ extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void xxx_format_and_draw(u32, u32, const char *, u32, u32);
const u8 *GetAdventureLogLine(u8 index);
extern s32 sub_8013800(void *, s32);
extern u32 gUnknown_202DE30;
u32 CreateAdventureLogScreen(u32 param_1)
@@ -73,7 +68,7 @@ u32 CreateAdventureLogScreen(u32 param_1)
ResetUnusedInputStruct();
sub_800641C(gAdventureLog->unk3C,1,1);
sub_8013818(gAdventureLog,0x20,8,param_1);
sub_8013818(&gAdventureLog->input,0x20,8,param_1);
sub_8032084();
DisplayAdventureLog();
return 1;
@@ -227,41 +222,41 @@ void DisplayAdventureLog(void)
case 0xc:
v1 = sub_80978B8();
gUnknown_202DE30 = (s16)v1;
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
case 7:
v2 = sub_8097880();
gUnknown_202DE30 = (s16)v2;
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
case 0xb:
v3 = sub_8097838();
gUnknown_202DE30 = (s16)v3;
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
case 8:
v4 = sub_80977B8();
gUnknown_202DE30 = v4;
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
case 9:
v5 = sub_80977F8();
gUnknown_202DE30 = v5;
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
case 10:
v6 = sub_8097870();
gUnknown_202DE30 = (s16)v6;
// fallthrough
default:
xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
xxx_format_and_draw(8, sub_8013800(&gAdventureLog->input, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
break;
}
}
else
{
// Draw the ?????????? across the row
xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0);
xxx_call_draw_string(8, sub_8013800(&gAdventureLog->input, counter), gAdventureLogTextPlaceholder, gAdventureLog->unk34, 0);
}
}
sub_80073E0(gAdventureLog->unk34);

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "event_flag.h"
extern void xxx_dungeon_8042F6C(u32 r0);
extern void NDS_LoadOverlay_GroundMain();
@@ -49,7 +50,6 @@ struct unkStruct_80B7394
};
extern struct unkStruct_80B7394 gUnknown_80B7394[];
void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3);
extern void sub_80015C0(u32, u32);
extern void sub_800199C(u32, s32, u32, s32);
extern void sub_80018D8(u32, u32, u32);

View File

@@ -1,9 +1,11 @@
#include "global.h"
#include "file_system.h"
extern u8 gUnknown_202D238[4];
extern s32 gUnknown_202D23C;
extern u16 gUnknown_202B038[4][32][32];
extern u8 gUnknown_80B88CC[];
extern struct FileArchive gSystemFileArchive;
struct unkStruct_202D240
{
@@ -16,16 +18,37 @@ extern struct unkStruct_202D240 gUnknown_202D240[8];
struct unkStruct_202D038
{
// size: 0x40
u32 unk0;
u32 unk4;
u8 fill[0x40 - 0x8];
u32 unk0[0x10];
};
extern struct unkStruct_202D038 gUnknown_202D038[8];
extern void CpuCopy(void* dest, void *src, s32 size);
extern void SetBGPaletteBufferColorArray(s32 index, void *colorArray);
extern void sub_8009A1C(u32);
u32 sub_80063B0(void);
void sub_80097B0(void)
{
struct OpenedFile *fontpalFile;
s32 index;
u32 *ptr;
fontpalFile = OpenFileAndGetFileDataPtr(gUnknown_80B88CC,&gSystemFileArchive); // fontpal
CpuCopy(gUnknown_202D038, fontpalFile->data, sizeof(gUnknown_202D038));
if (sub_80063B0() == 1) {
ptr = &gUnknown_202D038[0].unk0[0];
}
else
{
ptr = &gUnknown_202D038[1].unk0[0];
}
for(index = 0; index < 0x10; ptr++, index++)
{
SetBGPaletteBufferColorArray(index + 0xf0, ptr);
}
CloseFile(fontpalFile);
}
void vram_related_8009804(void)
{
@@ -131,7 +154,7 @@ void sub_80099F0(u32 r0)
s32 iVar2;
for(iVar2 = 0; iVar2 < 8; iVar2++)
{
gUnknown_202D038[iVar2].unk4 = r0;
gUnknown_202D038[iVar2].unk0[1] = r0;
}
}

View File

@@ -4,6 +4,7 @@
#include "memory.h"
#include "input.h"
#include "text.h"
#include "text_util.h"
struct unkStruct_203B200
{
@@ -34,7 +35,6 @@ extern void sub_80160F4(u32);
bool8 IsNameEmpty(void);
extern u32 sub_80154F0(void);
extern void sub_80155F0(void);
extern void sub_80922B4(u8 *, u8 *, s32);
void nullsub_36(void);
void sub_8016110(void);

View File

@@ -23,9 +23,7 @@ struct unkStruct_203B230
u32 unk20;
u32 unk24;
struct UnkTextStruct2 unk28[4];
u32 unk88;
u32 unk8C;
u32 unk90;
struct MenuInputStructSub unk88;
};
extern struct unkStruct_203B230 *gUnknown_203B230;
@@ -93,7 +91,6 @@ extern void sub_80073B8(u32);
extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013F84(void);
extern u32 sub_8012A64(u32 *, u32);
extern s32 sub_80913E0(struct Item *, u32, struct subStruct_203B240 **);
extern void sub_80141B4(u8 *, u32, u32 *, u32);
extern void sub_801BB20(void);
@@ -102,7 +99,6 @@ extern void sub_801A9E0(void);
extern void sub_801BC24(void);
extern void sub_801A5D8(u32, u32, u32, u32);
extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
extern void sub_801317C(u32 *);
extern void sub_80140B4(struct UnkTextStruct2 *);
extern void sub_801B46C(u32);
extern void ResetSprites(u32);

View File

@@ -56,9 +56,7 @@ struct unkStruct_203B240
u32 unk20;
u32 unk24;
struct UnkTextStruct2 unk28[4];
u32 unk88;
u32 unk8C;
u32 unk90;
struct MenuInputStructSub unk88;
};
struct unkStruct_203B244
@@ -143,20 +141,16 @@ extern u8 *gUnknown_80D4970[];
void sub_8007B7C(s32, s32, s32, s32, s32);
extern bool8 sub_801CF14(s32);
extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32);
extern u32 sub_801CE58(void);
extern void sub_8013984(struct MenuInputStruct *);
extern void sub_801CC38(void);
extern void sub_801CCD8(void);
extern void sub_801CF94(void);
extern void ResetSprites(u32);
extern void sub_801317C(u32 *);
extern void sub_80140B4(struct UnkTextStruct2 *);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
extern u32 sub_8012A64(u32 *, u32);
extern void sub_8013F84();
extern void PlayMenuSoundEffect(u32);
extern char * GetIQSkillDescription(u8 r0);
@@ -164,14 +158,9 @@ extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ);
extern void sub_8013C68(u32 *);
extern char * GetIQSkillName(u8 r0);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
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(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);

View File

@@ -29,15 +29,9 @@ extern struct unkStruct_203B258 *gUnknown_203B258;
extern struct UnkTextStruct2 gUnknown_80DBF88;
extern struct UnkTextStruct2 gUnknown_80DBF70;
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(struct MenuInputStruct *);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u32 sub_801BF48(void);
extern void sub_801BF98(void);

View File

@@ -4,19 +4,17 @@
#include "memory.h"
#include "input.h"
#include "code_801EE10.h"
#include "menu_input.h"
extern struct unkStruct_203B270 *gUnknown_203B270;
extern struct UnkTextStruct2 gUnknown_80DC25C;
extern struct UnkTextStruct2 gUnknown_80DC274;
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(struct MenuInputStruct*, u32);
void sub_801F280(u32);
u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_5,u32 param_6)
u8 sub_801EE10(u32 param_1, s16 species, struct Move *moves, u32 param_4, u8 *text, u32 param_6)
{
s32 iVar5;
s32 iVar8;
@@ -24,7 +22,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_
u8 param_4_u8;
s32 four;
species_s32 = species;
species_s32 = species;
param_4_u8 = param_4;
gUnknown_203B270 = MemoryAlloc(sizeof(struct unkStruct_203B270), 8);
gUnknown_203B270->unk4 = param_4_u8;
@@ -47,7 +45,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_
gUnknown_203B270->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
gUnknown_203B270->isTeamLeader = gUnknown_203B270->pokeStruct->isTeamLeader;
gUnknown_203B270->moves = moves;
gUnknown_203B270->unkB8 = param_5;
gUnknown_203B270->text = text;
iVar8 = iVar5 = sub_801F3F8();
four = 4;
if (iVar8 < four) {
@@ -56,7 +54,7 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_
sub_8006518(gUnknown_203B270->unk58);
gUnknown_203B270->unk50 = param_6;
gUnknown_203B270->unk58[param_6] = gUnknown_80DC25C;
if (gUnknown_203B270->unkB8 != 0) {
if (gUnknown_203B270->text != NULL) {
gUnknown_203B270->unk54 = sub_8006544(param_6);
gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC274;
}

View File

@@ -5,6 +5,8 @@
#include "input.h"
#include "memory.h"
#include "text.h"
#include "text_util.h"
#include "menu_input.h"
struct unkStruct_203B2AC
{
@@ -45,16 +47,11 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60;
extern struct UnkTextStruct2 gUnknown_80DC9B0;
extern struct UnkTextStruct2 gUnknown_80DC9C8;
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(struct MenuInputStruct*);
extern bool8 sub_8013938(struct MenuInputStruct*);
extern void sub_802452C(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(struct MenuInputStruct*);
void sub_80922B4(u8 *buffer, u8 *string, s32 size);
bool8 ComparePokemonNames(s16 a1, s16 a2);
void sub_8024588(void);

View File

@@ -6,6 +6,8 @@
#include "code_800D090.h"
#include "moves.h"
#include "code_801EE10.h"
#include "menu_input.h"
#include "subStruct_203B240.h"
extern struct unkStruct_203B270 *gUnknown_203B270;
@@ -22,22 +24,50 @@ struct unkStruct_203B274
u8 unk3E4[4];
};
extern struct unkStruct_203B274 *gUnknown_203B274;
struct unkStruct_203B278
{
s32 state;
u16 *moveIDs;
u16 unk8;
u16 fillA;
s32 unkC;
s32 unk10;
struct subStruct_203B240 *unk14[4];
u32 unk24;
struct MenuInputStruct unk28;
u32 unk5C;
struct UnkTextStruct2 *unk60;
struct UnkTextStruct2 unk64[4];
u8 unkC4[4];
struct MenuInputStructSub unkC8;
};
extern struct unkStruct_203B278 *gUnknown_203B278;
extern struct UnkTextStruct2 gUnknown_80DC2C4;
extern struct UnkTextStruct2 gUnknown_80DC2AC;
extern struct UnkTextStruct2 gUnknown_80DC2F8;
extern u8 gAvailablePokemonNames[];
extern u8 gUnknown_80DC310[];
extern u8 gUnknown_80DC2DC[];
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(struct MenuInputStruct*);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(struct MenuInputStruct*, s32);
extern void ResetSprites(u32);
extern void sub_80140B4(struct UnkTextStruct2 *);
extern void sub_801F918(s32);
extern void sub_801FA58(void);
extern void sub_801FAD4(void);
extern void sub_801F930(void);
extern void sub_801F9A4(void);
int unk_MoveIDPrintMoveDescription(int a1, u16 moveID, int a3, struct subStruct_203B240** a4);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
void sub_8013F84(void);
u32 sub_801F7E4(void);
void sub_801F690(void);
@@ -80,7 +110,7 @@ bool8 sub_801F428(s16 index, s32 param_2) {
sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2);
sub_801F690();
sub_801F700();
return 1;
return TRUE;
}
u32 sub_801F520(u8 param_1)
@@ -224,3 +254,178 @@ u32 sub_801F7E4(void)
sub_808E218(gUnknown_203B274->unk4, gUnknown_203B274->pokeStruct);
return gUnknown_203B274->unk4->count;
}
bool8 sub_801F808(u16 *moveIDs)
{
s32 index;
ResetSprites(1);
gUnknown_203B278 = MemoryAlloc(sizeof(struct unkStruct_203B278), 8);
gUnknown_203B278->unk5C = 0;
gUnknown_203B278->unk60 = gUnknown_203B278->unk64;
sub_80140B4(gUnknown_203B278->unk64);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B278->unk64,1,1);
gUnknown_203B278->moveIDs = moveIDs;
for(index = 4; index > 1; index--)
{
if(gUnknown_203B278->moveIDs[index - 1] != 0) break;
}
sub_8013818(&gUnknown_203B278->unk28,index,1,gUnknown_203B278->unk5C);
sub_801317C(&gUnknown_203B278->unkC8);
sub_801F918(0);
return 1;
}
s32 sub_801F890(void)
{
switch(gUnknown_203B278->state)
{
case 0:
sub_801FA58();
break;
case 1:
sub_801FAD4();
break;
case 3:
return 3;
default:
case 2:
return 2;
}
return 0;
}
void sub_801F8D0(void)
{
if(gUnknown_203B278)
{
gUnknown_203B278->unk64[gUnknown_203B278->unk5C] = gUnknown_80DC2F8;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B278->unk64, 1, 1);
MemoryFree(gUnknown_203B278);
gUnknown_203B278 = NULL;
}
}
void sub_801F918(s32 newState)
{
gUnknown_203B278->state = newState;
sub_801F930();
sub_801F9A4();
}
void sub_801F930(void)
{
sub_80140B4(gUnknown_203B278->unk64);
switch(gUnknown_203B278->state)
{
case 0:
gUnknown_203B278->unk60->unk14 = gUnknown_203B278->unkC4;
gUnknown_203B278->unkC4[0] = gUnknown_203B278->unk28.unk20;
gUnknown_203B278->unkC4[1] = gUnknown_203B278->unk28.unk1E;
gUnknown_203B278->unkC4[2] = 0x10;
gUnknown_203B278->unkC4[3] = 0;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B278->unk64, 1, 1);
break;
case 1:
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B278->unk64, 1, 1);
break;
default:
break;
}
}
void sub_801F9A4(void)
{
char **name;
switch(gUnknown_203B278->state)
{
case 0:
sub_8008C54(gUnknown_203B278->unk5C);
gUnknown_203B278->unk8 = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E];
gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->unk8,gUnknown_203B278->unk5C,gUnknown_203B278->unk14);
gUnknown_203B278->unk24 = 0;
break;
case 1:
sub_8008C54(gUnknown_203B278->unk5C);
sub_80073B8(gUnknown_203B278->unk5C);
name = &(gUnknown_203B278->unk14[gUnknown_203B278->unkC]->pokeName);
strcpy(gAvailablePokemonNames, *name);
xxx_format_and_draw(0x10,0,gUnknown_80DC310,gUnknown_203B278->unk5C,0); // $m0
xxx_format_and_draw(4,0x10,gUnknown_203B278->unk14[gUnknown_203B278->unkC]->unk4,gUnknown_203B278->unk5C,0);
sub_80073E0(gUnknown_203B278->unk5C);
break;
case 2:
break;
}
}
void sub_801FA58(void)
{
if(gUnknown_203B278->unk10 != 0)
{
if(gUnknown_203B278->unk24 & 8)
{
sub_8013F84();
}
gUnknown_203B278->unk24++;
}
switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B278->unk10 != 0)
{
gUnknown_203B278->unkC = 0;
sub_801F918(1);
}
else
{
sub_801F918(3);
}
break;
case 2:
PlayMenuSoundEffect(1);
sub_801F918(2);
break;
default:
if(sub_8013938(&gUnknown_203B278->unk28))
{
sub_801F918(0);
}
}
}
void sub_801FAD4(void)
{
if(gUnknown_203B278->unkC < gUnknown_203B278->unk10 - 1)
{
if(gUnknown_203B278->unk24 & 8)
{
sub_8013F84();
}
gUnknown_203B278->unk24++;
}
switch(sub_8012A64(&gUnknown_203B278->unkC8, gUnknown_203B278->unk5C))
{
case 1:
PlayMenuSoundEffect(0);
gUnknown_203B278->unkC++;
if(gUnknown_203B278->unkC < gUnknown_203B278->unk10)
{
sub_801F918(1);
}
else {
sub_801F918(0);
}
break;
case 2:
PlayMenuSoundEffect(1);
sub_801F918(2);
break;
}
}

448
src/code_8021774.c Normal file
View File

@@ -0,0 +1,448 @@
#include "constants/friend_area.h"
#include "global.h"
#include "input.h"
#include "memory.h"
#include "text.h"
#include "pokemon.h"
#include "exclusive_pokemon.h"
#include "friend_area.h"
#include "code_800D090.h"
#include "menu_input.h"
struct unkStruct_203B28C
{
struct MenuInputStructSub unk0;
u8 friendArea;
u8 unkD;
s16 unkE[0x10];
u32 unk30[0x10];
s32 unk70;
s32 unk74;
struct UnkTextStruct2 *unk78;
struct UnkTextStruct2 unk7C[4];
u8 unkDC[4];
};
extern struct unkStruct_203B28C *gUnknown_203B28C;
struct unkStruct_203B280
{
u8 unk0[NUM_FRIEND_AREAS];
u32 unk3C;
struct MenuInputStruct unk40;
s32 unk74;
struct UnkTextStruct2 *unk78;
struct UnkTextStruct2 unk7C[4];
u8 unkDC[4];
};
extern struct unkStruct_203B280 *gUnknown_203B280;
extern struct UnkTextStruct2 gUnknown_80DC4BC;
extern struct UnkTextStruct2 gUnknown_80DC4D8;
s16 GetBaseSpeciesNoUnown(s16 index);
s32 sub_8021B58(s16 param_1);
extern u8 gUnknown_80DC518[];
extern u8 gUnknown_80DC4F0[];
extern u8 *gUnknown_80D49BC[];
extern u8 gUnknown_80DC524[];
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
void sub_800792C(u32, u32, u32, u32, u32);
void sub_8007A78(u32, u32, u32, u32, u32);
extern void sub_8021878(void);
extern void sub_8021894(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8021A60(void);
void sub_8021820(void);
extern u8 *gFriendAreas;
u8 sub_80023E4(u32);
s32 sub_8021664(void)
{
s32 index;
s32 counter;
counter = 0;
switch(gUnknown_203B280->unk3C)
{
case 0:
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
{
gUnknown_203B280->unk0[counter] = index;
counter++;
}
break;
case 1:
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
{
if(gFriendAreas[index])
{
gUnknown_203B280->unk0[counter] = index;
counter++;
}
}
break;
case 2:
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
{
if (gFriendAreas[index] == 0) {
switch(GetFriendAreaUnlockCondition(index))
{
case UNLOCK_SHOP_STORY:
gUnknown_203B280->unk0[counter] = index;
counter++;
break;
case UNLOCK_SHOP_POST_GAME:
if(sub_80023E4(6) != 0) {
gUnknown_203B280->unk0[counter] = index;
counter++;
}
break;
}
}
}
break;
}
return counter;
}
u8 sub_8021700(u32 mode)
{
s32 index;
switch(mode)
{
case 0:
return FALSE;
case 1:
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
{
if (gFriendAreas[index] != 0) {
return FALSE;
}
}
break;
case 2:
for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++)
{
if (gFriendAreas[index] == 0) {
switch(GetFriendAreaUnlockCondition(index))
{
case UNLOCK_SHOP_STORY:
return FALSE;
case UNLOCK_SHOP_POST_GAME:
if(sub_80023E4(6) != 0) {
return FALSE;
}
break;
}
}
}
break;
}
return TRUE;
}
bool8 sub_8021774(u8 friendArea, u8 param_2, s32 param_3)
{
gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8);
gUnknown_203B28C->friendArea = friendArea;
gUnknown_203B28C->unkD = param_2;
sub_801317C(&gUnknown_203B28C->unk0);
sub_8021A60();
gUnknown_203B28C->unk74 = param_3;
gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3];
sub_8006518(gUnknown_203B28C->unk7C);
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8;
sub_8021820();
return TRUE;
}
u32 sub_80217EC(void)
{
switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
default:
return 0;
}
}
void sub_8021820(void)
{
sub_8021878();
sub_8021894();
}
void sub_8021830(void)
{
if(gUnknown_203B28C)
{
gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
MemoryFree(gUnknown_203B28C);
gUnknown_203B28C = NULL;
}
}
void sub_8021878(void)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B28C->unk7C, 1, 1);
}
void sub_8021894(void)
{
u8 *string;
s32 iVar1;
u32 y;
u32 x;
s32 index;
u8 buffer1 [256];
u8 buffer2 [100];
sub_80073B8(gUnknown_203B28C->unk74);
sub_8092578(buffer1,gUnknown_203B28C->friendArea,0);
xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0);
string = GetFriendAreaDescription(gUnknown_203B28C->friendArea);
xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0);
if (gUnknown_203B28C->unkD != 0) {
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0);
}
else {
xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants
}
sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4);
if (gUnknown_203B28C->unkD != 0) {
sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4);
}
else {
sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4);
}
sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4);
sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4);
sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4);
for(index = 0; index < gUnknown_203B28C->unk70; index++)
{
iVar1 = index % 3;
x = iVar1 * 0x3f + 7;
iVar1 = index / 3;
y = iVar1 * 0xc + 0x47;
sub_808D930(buffer2, gUnknown_203B28C->unkE[index]);
switch(gUnknown_203B28C->unk30[index])
{
case 0:
xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ???
break;
case 1:
xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s
break;
case 2:
sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR}
xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0);
break;
}
}
sub_80073E0(gUnknown_203B28C->unk74);
}
// https://decomp.me/scratch/P2BiC
// 99.40% matching (Seth)
#ifndef NONMATCHING
NAKED
void sub_8021A60(void)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tldr r2, _08021B4C\n"
"\tldr r1, [r2]\n"
"\tmovs r0, 0\n"
"\tstr r0, [r1, 0x70]\n"
"\tmovs r6, 0\n"
"\tadds r4, r2, 0\n"
"\tmovs r3, 0\n"
"_08021A70:\n"
"\tldr r1, [r4]\n"
"\tlsls r2, r6, 1\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xE\n"
"\tadds r0, r2\n"
"\tstrh r3, [r0]\n"
"\tlsls r0, r6, 2\n"
"\tadds r1, 0x30\n"
"\tadds r1, r0\n"
"\tstr r3, [r1]\n"
"\tadds r6, 0x1\n"
"\tcmp r6, 0xF\n"
"\tble _08021A70\n"
"\tmovs r6, 0\n"
"\tldr r7, _08021B4C\n"
"_08021A8E:\n"
"\tlsls r0, r6, 16\n"
"\tasrs r5, r0, 16\n"
"\tldr r4, [r7]\n"
"\tadds r0, r5, 0\n"
"\tbl GetFriendArea\n"
"\tldrb r1, [r4, 0xC]\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r1, r0\n"
"\tbne _08021AC4\n"
"\tadds r0, r5, 0\n"
"\tbl GetBaseSpeciesNoUnown\n"
"\tlsls r0, 16\n"
"\tasrs r0, 16\n"
"\tcmp r5, r0\n"
"\tbne _08021AC4\n"
"\tldr r3, [r7]\n"
"\tldr r1, [r3, 0x70]\n"
"\tlsls r2, r1, 1\n"
"\tadds r0, r3, 0\n"
"\tadds r0, 0xE\n"
"\tadds r0, r2\n"
"\tstrh r5, [r0]\n"
"\tadds r1, 0x1\n"
"\tstr r1, [r3, 0x70]\n"
"_08021AC4:\n"
"\tadds r6, 0x1\n"
"\tldr r0, _08021B50\n"
"\tcmp r6, r0\n"
"\tble _08021A8E\n"
"\tmovs r6, 0\n"
"_08021ACE:\n"
"\tlsls r0, r6, 16\n"
"\tasrs r4, r0, 16\n"
"\tadds r0, r4, 0\n"
"\tbl sub_8098134\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbeq _08021AFC\n"
"\tadds r0, r4, 0\n"
"\tbl sub_8021B58\n"
"\tadds r2, r0, 0\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tcmp r2, r0\n"
"\tbeq _08021AFC\n"
"\tldr r0, _08021B4C\n"
"\tldr r1, [r0]\n"
"\tlsls r0, r2, 2\n"
"\tadds r1, 0x30\n"
"\tadds r1, r0\n"
"\tmovs r0, 0x1\n"
"\tstr r0, [r1]\n"
"_08021AFC:\n"
"\tadds r6, 0x1\n"
"\tldr r0, _08021B50\n"
"\tcmp r6, r0\n"
"\tble _08021ACE\n"
"\tmovs r6, 0\n"
"\tldr r4, _08021B54\n"
"_08021B08:\n"
"\tmovs r0, 0x58\n"
"\tadds r1, r6, 0\n"
"\tmuls r1, r0\n"
"\tldr r0, [r4]\n"
"\tadds r2, r0, r1\n"
"\tldrb r1, [r2]\n"
"\tmovs r0, 0x1\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbeq _08021B3C\n"
"\tmovs r1, 0x8\n"
"\tldrsh r0, [r2, r1]\n"
"\tbl sub_8021B58\n"
"\tadds r2, r0, 0\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tcmp r2, r0\n"
"\tbeq _08021B3C\n"
"\tldr r0, _08021B4C\n"
"\tldr r1, [r0]\n"
"\tlsls r0, r2, 2\n"
"\tadds r1, 0x30\n"
"\tadds r1, r0\n"
"\tmovs r0, 0x2\n"
"\tstr r0, [r1]\n"
"_08021B3C:\n"
"\tadds r6, 0x1\n"
"\tmovs r0, 0xCE\n"
"\tlsls r0, 1\n"
"\tcmp r6, r0\n"
"\tble _08021B08\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08021B4C: .4byte gUnknown_203B28C\n"
"_08021B50: .4byte 0x000001a7\n"
"_08021B54: .4byte gRecruitedPokemonRef");
}
#else
void sub_8021A60(void)
{
s32 sVar4;
s32 iVar6;
s32 index;
struct PokemonStruct *pokeStruct;
gUnknown_203B28C->unk70 = 0;
for(index = 0; index < 0x10; index++)
{
gUnknown_203B28C->unkE[index] = 0;
gUnknown_203B28C->unk30[index] = 0;
}
for(index = 0; index < 0x1A8; index++)
{
if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) &&
((s16)index == GetBaseSpeciesNoUnown(index))) {
iVar6 = gUnknown_203B28C->unk70;
gUnknown_203B28C->unkE[iVar6] = index;
gUnknown_203B28C->unk70 = iVar6 + 1;
}
}
for(index = 0; index < 0x1A8; index++)
{
if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) {
gUnknown_203B28C->unk30[sVar4] = 1;
}
}
for(index = 0; index < 0x19d; index++)
{
pokeStruct = &gRecruitedPokemonRef->pokemon[index];
if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) &&
(sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) {
gUnknown_203B28C->unk30[sVar4] = 2;
}
}
return;
}
#endif
s32 sub_8021B58(s16 species)
{
s32 baseSpecies;
int index;
baseSpecies = GetBaseSpeciesNoUnown(species);
for(index = 0; index < gUnknown_203B28C->unk70; index++)
{
if (baseSpecies == gUnknown_203B28C->unkE[index]) return index;
}
return -1;
}

133
src/code_8021774_pre.c Normal file
View File

@@ -0,0 +1,133 @@
#include "global.h"
#include "constants/friend_area.h"
#include "constants/input.h"
#include "friend_area.h"
#include "input.h"
#include "memory.h"
#include "text.h"
#include "item.h"
#include "team_inventory.h"
#include "menu_input.h"
struct unkStruct_203B280
{
u8 unk0[NUM_FRIEND_AREAS];
u32 unk3C;
struct MenuInputStruct unk40;
s32 unk74;
struct UnkTextStruct2 *unk78;
struct UnkTextStruct2 unk7C[4];
u8 unkDC[4];
};
extern struct unkStruct_203B280 *gUnknown_203B280;
extern u32 gUnknown_203B284;
extern u16 gUnknown_203B288;
extern u16 gUnknown_203B28A;
extern struct UnkTextStruct2 gUnknown_80DC47C;
extern struct UnkTextStruct2 gUnknown_80DC464;
u8 sub_8021700(u32 mode);
s32 sub_8021664(void);
extern u8 sub_802132C(void);
extern void sub_8021410(void);
extern void sub_8021494(void);
extern void PlayMenuSoundEffect(u32);
bool8 sub_80211AC(u32 param_1, u32 param_2)
{
if(sub_8021700(param_1))
{
return FALSE;
}
else {
gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8);
gUnknown_203B280->unk3C = param_1;
gUnknown_203B280->unk74 = param_2;
gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74];
sub_8006518(gUnknown_203B280->unk7C);
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C;
gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2);
if(gUnknown_203B284 == gUnknown_203B280->unk3C)
{
gUnknown_203B280->unk40.menuIndex = gUnknown_203B288;
gUnknown_203B280->unk40.unk1E = gUnknown_203B28A;
sub_8013984(&gUnknown_203B280->unk40);
}
sub_8021410();
sub_8021494();
return TRUE;
}
}
u32 sub_8021274(u8 param_1)
{
if (param_1 == 0) {
sub_8013660(&gUnknown_203B280->unk40);
return 0;
}
switch(GetKeyPress(&gUnknown_203B280->unk40))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
if ((gUnknown_203B280->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventory_203B460->teamMoney))
{
PlayMenuSoundEffect(2);
}
else
{
PlayMenuSoundEffect(0);
}
return 3;
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
return 4;
default:
if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) {
sub_8021410();
sub_8021494();
return 1;
}
else {
return 0;
}
}
}
u8 sub_802132C(void)
{
return gUnknown_203B280->unk0[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex];
}
void sub_8021354(u8 param_1)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B280->unk7C,0,0);
gUnknown_203B280->unk40.unk22 = sub_8021664();
sub_8013984(&gUnknown_203B280->unk40);
sub_8021410();
sub_8021494();
if (param_1) {
AddMenuCursorSprite(&gUnknown_203B280->unk40);
}
}
void sub_80213A0(void)
{
if(gUnknown_203B280)
{
gUnknown_203B284 = gUnknown_203B280->unk3C;
gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex;
gUnknown_203B28A = gUnknown_203B280->unk40.unk1E;
gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B280->unk7C, 1, 1);
MemoryFree(gUnknown_203B280);
gUnknown_203B280 = NULL;
}
}

View File

@@ -1,5 +1,6 @@
#include "constants/input.h"
#include "global.h"
#include "constants/colors.h"
#include "constants/input.h"
#include "constants/iq_skill.h"
#include "memory.h"
#include "menu.h"
@@ -10,6 +11,9 @@
#include "input.h"
#include "item.h"
#include "menu_input.h"
#include "code_8023144.h"
#include "code_800D090.h"
#include "friend_area.h"
struct unkStruct_3001B5C
{
@@ -30,6 +34,7 @@ struct unkStruct_3001B5C
};
IWRAM_DATA struct unkStruct_3001B5C *gUnknown_3001B5C;
struct unkStruct_203B294 *gUnknown_203B294;
extern u32 gUnknown_203B298;
extern u16 gUnknown_203B29C;
@@ -42,39 +47,11 @@ void sub_80237E0(void);
extern bool8 sub_8098134(s32);
extern void sub_8023730(void);
extern u8 sub_8023704(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(struct MenuInputStruct*, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(struct MenuInputStruct*);
extern void sub_8013660(struct MenuInputStruct*);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
struct unkStruct_203B294
{
// size: 0x1A8
/* 0x0 */ u32 state;
/* 0x4 */ u32 fallbackState;
u8 iqSkillPreGummi[NUM_IQ_SKILLS];
u8 iqSkillPostGummi[NUM_IQ_SKILLS];
u32 availIQSkillPreGummi;
u32 availIQSkillPostGummi;
u32 unk40; // Gummi eaten flag?
struct Gummi gummi;
/* 0x48 */ struct PokemonStruct *pokeStruct;
u32 itemIndex;
struct Item item;
struct MenuStruct unk54;
struct MenuStruct unkA4;
u32 menuAction;
struct MenuItem unkF8[0x8];
u16 unk138[0x8];
};
struct unkStruct_203B294 *gUnknown_203B294;
extern u8 gUnknown_80DC5EC[];
extern u8 gUnknown_202DE58[];
@@ -343,70 +320,70 @@ bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 pa
u8 sub_8023278(u8 param_1)
{
s32 iVar3;
u32 temp;
if (param_1 == 0) {
sub_8013660(&gUnknown_3001B5C->input);
return 0;
}
switch(GetKeyPress(&gUnknown_3001B5C->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case INPUT_SELECT_BUTTON:
PlayMenuSoundEffect(5);
if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) {
iVar3 = temp + 1;
}
gUnknown_3001B5C->unk4 = iVar3;
sub_80236A4();
break;
default:
if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) {
return 0;
}
break;
}
sub_8023420();
sub_80234BC();
return 1;
s32 iVar3;
u32 temp;
if (param_1 == 0) {
sub_8013660(&gUnknown_3001B5C->input);
return 0;
}
switch(GetKeyPress(&gUnknown_3001B5C->input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case INPUT_SELECT_BUTTON:
PlayMenuSoundEffect(5);
if (temp = gUnknown_3001B5C->unk4, iVar3 = 1, temp < 2) {
iVar3 = temp + 1;
}
gUnknown_3001B5C->unk4 = iVar3;
sub_80236A4();
break;
default:
if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) {
return 0;
}
break;
}
sub_8023420();
sub_80234BC();
return 1;
}
s16 sub_802331C(void)
{
return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex];
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->input);
sub_8023420();
sub_80234BC();
if (param_1 != 0) {
AddMenuCursorSprite(&gUnknown_3001B5C->input);
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_3001B5C->unk398,0,0);
sub_8013984(&gUnknown_3001B5C->input);
sub_8023420();
sub_80234BC();
if (param_1 != 0) {
AddMenuCursorSprite(&gUnknown_3001B5C->input);
}
}
void sub_80233A0(void)
{
if (gUnknown_3001B5C != NULL) {
gUnknown_203B298 = gUnknown_3001B5C->unk4;
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);
MemoryFree(gUnknown_3001B5C);
gUnknown_3001B5C = NULL;
}
if (gUnknown_3001B5C != NULL) {
gUnknown_203B298 = gUnknown_3001B5C->unk4;
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);
MemoryFree(gUnknown_3001B5C);
gUnknown_3001B5C = NULL;
}
}
NAKED
@@ -487,100 +464,85 @@ void sub_8023420(void)
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 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);
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 = COLOR_WHITE_2;
if (auStack_2c.hasFriendArea) {
color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN;
}
}
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);
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;
s32 index;
gUnknown_3001B5C->unk8 = 0;
for(index = 0; index < 0x1a8; index++)
{
if ((sub_8098134((s16)index)) &&
((s16)index == GetBaseSpeciesNoUnown(index))) {
gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8++] = index;
}
}
}
sub_8023730();
return gUnknown_3001B5C->unk8;
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;
s32 index;
for(index = 0; index < 0x1a8; index++)
{
if (sub_8098134((s16)index))
return FALSE;
}
return TRUE;
}
void sub_8023730(void)

141
src/code_8023144_pre.c Normal file
View File

@@ -0,0 +1,141 @@
#include "global.h"
#include "constants/colors.h"
#include "constants/input.h"
#include "constants/iq_skill.h"
#include "memory.h"
#include "menu.h"
#include "pokemon.h"
#include "pokemon_3.h"
#include "team_inventory.h"
#include "text.h"
#include "input.h"
#include "item.h"
#include "menu_input.h"
#include "code_8023144.h"
#include "text.h"
struct unkStruct_203B294 *gUnknown_203B294;
extern u8 gAvailablePokemonNames[];
extern u8 gUnknown_80DC5EC[];
extern u8 HasGummiItem(void);
extern void sub_8022924(s32);
extern void sub_8022E78(void);
extern void sub_8022EF4(void);
extern void sub_8023068(void);
extern void sub_80230E8(void);
extern void sub_8023120(void);
extern void sub_8023104(void);
extern void sub_802293C(void);
extern void sub_8022A10(void);
extern void sub_8022D2C(void);
extern struct UnkTextStruct2 gUnknown_80DC5A4;
extern struct UnkTextStruct2 gUnknown_80DC5D4;
extern struct UnkTextStruct2 gUnknown_80DC5BC;
bool8 sub_80227B8(struct PokemonStruct *pokeStruct)
{
ResetUnusedInputStruct();
sub_800641C(NULL, 1, 1);
gUnknown_203B294 = MemoryAlloc(sizeof(struct unkStruct_203B294), 8);
gUnknown_203B294->menuAction = 0;
gUnknown_203B294->pokeStruct = pokeStruct;
if(pokeStruct != NULL)
{
PrintColoredPokeNameToBuffer(gAvailablePokemonNames, pokeStruct, COLOR_WHITE_2);
PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50, pokeStruct, COLOR_YELLOW);
if(HasGummiItem())
{
sub_8022924(0x0);
}
else
{
sub_8022924(0x11);
}
}
else {
strcpy(gAvailablePokemonNames, gUnknown_80DC5EC);
strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DC5EC);
if(GetNumberOfFilledInventorySlots() == 0)
{
sub_8022924(0x12);
}
else {
sub_8022924(0x0);
}
}
return TRUE;
}
u32 sub_8022860(void)
{
switch(gUnknown_203B294->state) {
case 0:
case 1:
sub_8022E78();
break;
case 2:
sub_8022EF4();
break;
case 3:
sub_8023068();
break;
case 4:
sub_80230E8();
break;
case 0x15:
sub_8023104();
break;
case 0x16:
return 3;
default:
sub_8023120();
break;
}
return 0;
}
void sub_8022908(void)
{
if(gUnknown_203B294)
{
MemoryFree(gUnknown_203B294);
gUnknown_203B294 = NULL;
}
}
void sub_8022924(s32 newState)
{
gUnknown_203B294->state = newState;
sub_802293C();
sub_8022A10();
}
void sub_802293C(void) {
s32 index;
sub_8006518(gUnknown_203B294->unk148);
switch(gUnknown_203B294->state)
{
case 2:
sub_8022D2C();
gUnknown_203B294->unk148[2] = gUnknown_80DC5BC;
sub_8012CAC(&gUnknown_203B294->unk148[2], gUnknown_203B294->unkF8);
gUnknown_203B294->unk148[2].unkC = 6;
break;
case 3:
gUnknown_203B294->unk148[1] = gUnknown_80DC5D4;
break;
default:
for(index = 0; index < 4; index++)
{
gUnknown_203B294->unk148[index] = gUnknown_80DC5A4;
}
break;
case 0xA ... 0x10:
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B294->unk148, 1, 1);
}

View File

@@ -13,8 +13,7 @@ struct unkStruct_203B334
{
// size: 0x7C
u32 mailIndex;
u32 unk4;
u8 fill8[0x10 - 0x8];
struct MenuInputStructSub unk4;
u32 unk10;
struct UnkTextStruct2 *unk14;
struct UnkTextStruct2 unk18[4];
@@ -52,8 +51,6 @@ 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);

View File

@@ -14,6 +14,7 @@
#include "item.h"
#include "pokemon.h"
#include "position_util.h"
#include "exclusive_pokemon.h"
extern u32 gUnknown_202EDC8;
extern u8 gUnknown_202E038[0x50];
@@ -380,7 +381,6 @@ extern void DisplayDungeonDialogue(u32 *r0);
extern void SpriteShockEffect(struct Entity *);
extern u32 sub_80861F8(u32, struct Entity *, u32);
extern void sub_8097FA8(u32);
extern void JirachiWish();
extern void JirachiSpinEffect(struct Entity *);
@@ -393,14 +393,12 @@ extern u8 sub_80860A8(u32);
extern void sub_8049ED4();
extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
extern void sub_8052D44(s16 *, struct Entity *, struct Entity *);
extern void sub_8097FD0(u32);
extern void SetMessageArgument(u8 *, struct Entity *, u32);
extern struct Entity *GetLeader();
extern void sub_80421C0(struct Entity *, u32);
extern void sub_8046D20();
extern void sub_808B1CC(u8);
extern void sub_80464C8(struct Entity *, u32 *, struct Item *);
extern void sub_8098044(u32);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern void sub_803E46C(u32);
extern void sub_80866C4(u32 *);
@@ -418,7 +416,6 @@ extern void sub_80426C8(u32, u32);
extern void sub_807EAA0(u32, u32);
extern void CreateJirachiWishWarpTile(void);
extern u8 sub_8098100(u32);
extern void sub_8086794();
void EnteiScreenFlash(void);

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "constants/ability.h"
#include "constants/move_id.h"
#include "constants/status.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_entity.h"
@@ -43,7 +44,6 @@ extern void sub_806A2BC(struct Entity *, u8);
extern void sub_804178C(u32);
extern void sub_803F508(struct Entity *);
extern void sub_804AC20(struct Position *);
extern u8 sub_8092364(u8);
extern void sub_803E46C(u32);
extern void sub_803E708(u32 r0, u32 r1);
@@ -211,7 +211,7 @@ void sub_806A120(struct Entity * pokemon, struct Entity * target, struct Move* m
struct EntityInfo *entityInfo;
if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target))
&& (entityInfo = target->info, entityInfo->protectionStatus == 0xC)) {
&& (entityInfo = target->info, entityInfo->protectionStatus == STATUS_CONVERSION2)) {
moveType = GetMoveTypeForMonster(pokemon, move);
uVar2_u32 = sub_8092364(moveType);
if (uVar2_u32 != TYPE_NONE) {

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "dungeon_global_data.h"
#include "dungeon_music.h"
#include "exclusive_pokemon.h"
extern void SkarmoryPreFightDialogue();
extern void SkarmoryReFightDialogue();
@@ -62,7 +63,6 @@ extern void SmeargleRescueDialogue();
extern void sub_808CD9C();
extern void sub_8085764();
extern void sub_80857B8();
extern void sub_8097FF8();
extern void sub_8086BDC(u32,u8);
extern void sub_8086F54(u32,u8);
@@ -143,10 +143,7 @@ extern void sub_808C9C4(void);
extern void sub_808CB5C(void);
extern void sub_808CBB0(void);
extern void sub_808CD44(void);
extern void sub_8097FF8(void);
extern u8 sub_8098100(u8);
extern void sub_8097FA8(void);
extern void sub_807E5E4(u32);
void sub_8084854(u8 *param_1)
@@ -168,7 +165,7 @@ void sub_8084854(u8 *param_1)
{
gDungeon->unk3A0D = param_1[1];
if (param_1[2] != 0x40) {
sub_8097FA8();
sub_8097FA8(param_1[2]);
}
}
}

View File

@@ -9,16 +9,15 @@
#include "pokemon.h"
#include "dungeon_util_1.h"
#include "dungeon_util.h"
#include "exclusive_pokemon.h"
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_80855E4(void *);
extern void sub_8068FE0(struct Entity *, u32, u32);
extern void sub_8097FA8(u32);
extern void DisplayDungeonDialogue(u8 *);
extern void sub_806CDD4(struct Entity *, u32, u32);
extern void sub_80869E4(struct Entity *, u32, u32, u32);

View File

@@ -3,20 +3,46 @@
#include "code_809447C.h"
#include "item.h"
#include "moves.h"
#include "dungeon_global_data.h"
#include "text_util.h"
struct unkStruct_8113080
{
u8 unk0;
u8 *unk4; // some string
u8 *text;
};
extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[];
extern s32 gUnknown_202DE30[2];
extern u8 *gUnknown_811383C[];
extern u8 *gUnknown_8113850[];
extern u8 *gUnknown_8113868[];
extern u8 *gUnknown_8113898[];
extern u8 *gUnknown_81138C0[];
extern u8 *gUnknown_81138D0[];
extern u8 *gUnknown_81138E4[];
extern u8 *gUnknown_8113950[];
extern u8 *gUnknown_8113900[];
extern u8 *gUnknown_8113974[];
extern u8 *gUnknown_8113918[];
extern u8 *gUnknown_8113990[];
extern u8 *gUnknown_8113934[];
extern u8 *gUnknown_81139B4[];
extern u8 *gUnknown_81139B8[];
extern u8 *gUnknown_81139CC[];
extern u8 *gUnknown_8113870[];
extern struct unkStruct_8113080 gUnknown_8113080[];
void sub_80928C0(u8 *buffer, struct Move *move, struct unkStruct_80928C0 *param_3);
extern void xxx_format_string(const char *, u8 *, void *, u32);
void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation);
extern void sub_80073B8(u32);
extern void xxx_format_and_draw(s32, s32, const u8 *, ...);
extern s32 sub_8008ED0(u8 *);
extern void sub_80073E0(u32);
void sub_809447C(struct unkStruct_8094924 *r0, u8 *r1)
{
@@ -30,24 +56,24 @@ void sub_809449C(struct unkStruct_8094924 *r0, u8 *r1)
SaveIntegerBits(r0, r1 + 2, 0x10);
}
void sub_80944BC(s16 moveID, u8 *arg2)
static void sub_80944BC(s16 moveID, u8 *buffer)
{
u16 moveID_u16;
s32 moveID_s32 = moveID;
struct Move stack;
struct Move move;
if (moveID_s32 < 0x1F4) {
// Needed this cast/variable to match
moveID_u16 = moveID_s32;
sub_8092AA8(&stack, moveID_u16);
sub_80928C0(gUnknown_202DE58, &stack, NULL);
xxx_format_string(*gUnknown_811383C, arg2, arg2 + 200, 0);
sub_8092AA8(&move, moveID_u16);
sub_80928C0(gUnknown_202DE58, &move, NULL);
xxx_format_string(*gUnknown_811383C, buffer, buffer + 200, 0); // $m0's $i0
} else {
strncpy(arg2, gUnknown_8113080[moveID - 0x1F4].unk4, 200);
strncpy(buffer, gUnknown_8113080[moveID - 0x1F4].text, 200);
}
}
u8 sub_8094528(s16 moveID)
static u8 sub_8094528(s16 moveID)
{
if(moveID < 0x1F4)
{
@@ -59,3 +85,95 @@ u8 sub_8094528(s16 moveID)
}
}
void sub_8094558(u32 param_1,u8 *param_2,struct unkDungeonGlobal_unk1CE98_sub *param_3)
{
int iVar2;
u8 buffer [200];
s32 y;
struct Item *item;
s32 var;
sub_80073B8(param_1);
xxx_format_and_draw(0x10,0,param_2,param_1,0);
PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &param_3->dungeonLocation);
xxx_format_and_draw(4,0x10,*gUnknown_8113850,param_1,0); // #+Place: $m0
y = 0x1A;
sub_80922B4(gAvailablePokemonNames, param_3->buffer1, POKEMON_NAME_LENGTH);
sub_80922B4(gAvailablePokemonNames + 0x50, param_3->buffer2, POKEMON_NAME_LENGTH);
if (sub_8094528(param_3->moveID) != 0) {
// $m1 was defeated by
xxx_format_string(*gUnknown_8113868,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack
}
else {
// $m1
xxx_format_string(*gUnknown_8113870,buffer,(u32 **)&buffer + 50,0); // TODO: fix this hack
}
iVar2 = sub_8008ED0(buffer);
xxx_format_and_draw(((0xb0 - iVar2) / 2),y,buffer,param_1,0);
y += 0xA;
sub_80944BC(param_3->moveID, buffer);
#ifndef NONMATCHING
var = 0xb0 - sub_8008ED0(buffer);
var += (var < 0);
xxx_format_and_draw(var >> 1,y,buffer,param_1,0);
asm(""::"r"(var));
#else
xxx_format_and_draw((0xb0 - sub_8008ED0(buffer) / 2),y,buffer,param_1,0);
#endif
y += 0x10;
gUnknown_202DE30[0] = param_3->exp;
gUnknown_202DE30[1] = param_3->level;
if (gUnknown_202DE30[1] >= 100) {
xxx_format_and_draw(4,y,*gUnknown_81138C0,param_1,0);
}
else {
xxx_format_and_draw(4,y,*gUnknown_8113898,param_1,0);
}
y += 0xA;
gUnknown_202DE30[0] = param_3->maxHPStat;
xxx_format_and_draw(4,y,*gUnknown_81138D0,param_1,0);
y += 0xA;
gUnknown_202DE30[0] = param_3->atk;
gUnknown_202DE30[1] = param_3->def;
if (param_3->attBoost) {
gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->attBoost;
xxx_format_and_draw(4,y,*gUnknown_8113950,param_1,0);
}
else {
xxx_format_and_draw(4,y,*gUnknown_81138E4,param_1,0);
}
if (param_3->defBoost) {
gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->defBoost;
xxx_format_and_draw(4,y,*gUnknown_8113974,param_1,0);
}
else {
xxx_format_and_draw(4,y,*gUnknown_8113900,param_1,0);
}
y += 0xA;
gUnknown_202DE30[0] = param_3->spAtk;
gUnknown_202DE30[1] = param_3->spDef;
if (param_3->spAttBoost) {
gUnknown_202DE30[0] = gUnknown_202DE30[0] + param_3->spAttBoost;
xxx_format_and_draw(4,y,*gUnknown_8113990,param_1,0);
}
else {
xxx_format_and_draw(4,y,*gUnknown_8113918,param_1,0);
}
if (param_3->spDefBoost) {
gUnknown_202DE30[1] = gUnknown_202DE30[1] + param_3->spDefBoost;
xxx_format_and_draw(4,y,*gUnknown_81139B4,param_1,0);
}
else {
xxx_format_and_draw(4,y,*gUnknown_8113934,param_1,0);
}
y += 0x10;
item = &(param_3->heldItem);
if ((param_3->heldItem.flags & ITEM_FLAG_EXISTS)) {
sub_8090E14(gUnknown_202DE58,item,0);
}
else {
strcpy(gUnknown_202DE58,*gUnknown_81139B8);
}
xxx_format_and_draw(4,y,*gUnknown_81139CC,param_1,0);
sub_80073E0(param_1);
}

View File

@@ -13,10 +13,11 @@ 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;
EWRAM_DATA struct unkStruct_203B480 gUnknown_2038C88[0x20] = {0};
EWRAM_DATA struct unkStruct_203B484 gUnknown_2039288 = {0};
EWRAM_DATA UNUSED static u32 fill0 = {0}; // 203B484 is size 0x5C and I need to fill a gap of 0x4
EWRAM_DATA u32 gUnknown_20392E8[0x36] = {0};
EWRAM_DATA struct unkStruct_203B48C gUnknown_20393C0 = {0};
extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
@@ -32,15 +33,15 @@ extern void sub_8094D28(s32);
void sub_80950BC(void)
{
gUnknown_203B480 = &gUnknown_2038C88;
gUnknown_203B480 = gUnknown_2038C88;
gUnknown_203B484 = &gUnknown_2039288;
gUnknown_203B488 = &gUnknown_20392E8;
gUnknown_203B488 = gUnknown_20392E8;
gUnknown_203B48C = &gUnknown_20393C0;
}
struct unkStruct_203B480 *sub_80950F8(void)
{
return &gUnknown_2038C88;
return gUnknown_2038C88;
}
struct unkStruct_203B484 *sub_8095100(void)
@@ -50,7 +51,7 @@ struct unkStruct_203B484 *sub_8095100(void)
u32 *sub_8095108(void)
{
return &gUnknown_20392E8;
return gUnknown_20392E8;
}
struct unkStruct_203B48C *sub_8095110(void)
@@ -72,7 +73,7 @@ void sub_8095118(void)
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].mailType = WONDER_MAIL_TYPE_NONE;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].unk20.id = ITEM_NOTHING;
gUnknown_203B480[index].item.id = ITEM_NOTHING;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].unk2D = 0;
}
@@ -152,7 +153,7 @@ void DeleteMailAtIndex(u8 index)
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].mailType = 0;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].unk20.id = 0;
gUnknown_203B480[index].item.id = 0;
}
void sub_8095274(u32 param_1)
@@ -424,9 +425,9 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
RestoreIntegerBits(a, &b->clientSpecies, 0x9);
RestoreIntegerBits(a, &b->unk10.unk10, 0x20);
RestoreIntegerBits(a, &b->playerName, 0x50);
RestoreIntegerBits(a, &b->unk20.flags, 0x8);
RestoreIntegerBits(a, &b->unk20.quantity, 0x8);
RestoreIntegerBits(a, &b->unk20.id, 0x8);
RestoreIntegerBits(a, &b->item.flags, 0x8);
RestoreIntegerBits(a, &b->item.quantity, 0x8);
RestoreIntegerBits(a, &b->item.id, 0x8);
RestoreIntegerBits(a, &b->unk24, 0x20);
RestoreIntegerBits(a, &b->unk28, 0x20);
RestoreIntegerBits(a, &b->rescuesAllowed, 0x8);
@@ -449,9 +450,9 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
SaveIntegerBits(a, &b->clientSpecies, 0x9);
SaveIntegerBits(a, &b->unk10.unk10, 0x20);
SaveIntegerBits(a, &b->playerName, 0x50);
SaveIntegerBits(a, &b->unk20.flags, 0x8);
SaveIntegerBits(a, &b->unk20.quantity, 0x8);
SaveIntegerBits(a, &b->unk20.id, 0x8);
SaveIntegerBits(a, &b->item.flags, 0x8);
SaveIntegerBits(a, &b->item.quantity, 0x8);
SaveIntegerBits(a, &b->item.id, 0x8);
SaveIntegerBits(a, &b->unk24, 0x20);
SaveIntegerBits(a, &b->unk28, 0x20);
SaveIntegerBits(a, &b->rescuesAllowed, 0x8);

View File

@@ -10,11 +10,9 @@
#include "pokemon.h"
#include "code_8094F88.h"
extern s32 GetDungeonFloorCount(u8);
extern bool8 sub_809017C(struct DungeonLocation *);
extern s16 GetBaseSpecies(s16);
extern u8 sub_803C1D0(struct DungeonLocation *, u8);
extern u32 GetMaxItemsAllowed(u8);
extern bool8 sub_803C0DC(s16);
extern void ResetMailboxSlot(u8);
extern void ResetPelipperBoardSlot(u8);
@@ -22,7 +20,7 @@ extern void ResetJobSlot(u8);
extern bool8 ValidateWonderMail(struct WonderMail *);
EWRAM_DATA_2 struct unkStruct_203B490 *gUnknown_203B490 = {0};
extern struct unkStruct_203B490 gUnknown_2039448;
EWRAM_DATA struct unkStruct_203B490 gUnknown_2039448 = {0};
void LoadMailInfo(void)
{

View File

@@ -4,6 +4,8 @@
#include "wonder_mail.h"
#include "code_80958E8.h"
#include "dungeon.h"
#include "exclusive_pokemon.h"
#include "event_flag.h"
struct MissionText
{
@@ -19,15 +21,10 @@ extern const char gMeetNinetalesText[];
extern const char gAvoidCaptureText[];
extern const u8 gUnknown_8109CC0[];
extern const u8 gDummyScenarioText[];
extern u8 sub_80A270C();
extern u8 sub_80A270C(s16);
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);

View File

@@ -28,8 +28,8 @@ struct CreditsData
/* 0x8 */ u8 *text;
};
extern struct unkCreditsStruct_203B340 *gUnknown_203B340;
extern struct unkCreditsStruct_203B344 *gUnknown_203B344;
EWRAM_DATA_2 struct unkCreditsStruct_203B340 *gUnknown_203B340 = {0};
EWRAM_DATA_2 struct unkCreditsStruct_203B344 *gUnknown_203B344 = {0};
extern struct UnkTextStruct2 gUnknown_80E4A10;
extern struct UnkTextStruct2 gUnknown_80E4A28;
@@ -244,4 +244,4 @@ void sub_8035758(void)
MemoryFree(gUnknown_203B344);
gUnknown_203B344 = NULL;
}
}
}

View File

@@ -50,7 +50,7 @@ bool8 IsLevelResetTo1(u8 dungeon)
return gDungeons[dungeon].levelResetTo1;
}
u8 GetMaxItemsAllowed(u8 dungeon)
u32 GetMaxItemsAllowed(u8 dungeon)
{
return gDungeons[dungeon].maxItemsAllowed;
}

View File

@@ -147,7 +147,7 @@ void sub_8075900(struct Entity *pokemon, u8 r1)
{
// It's a monster house!
SendMessage(GetLeader(), gPtrItsaMonsterHouseMessage);
gDungeon->unk672 = 1;
gDungeon->monsterHouseTriggeredEvent = TRUE;
sub_807AB38(pokemon, r1);
sub_8041888(0);
if(sub_803F428(&pokemon->pos.x) != 0)

View File

@@ -61,7 +61,7 @@ void sub_8083AB0(s16 param_0, struct Entity * target, struct Entity * entity)
}
sub_80709C8(buffer,entityInfo);
CopyStringtoBuffer(temp->buffer2, buffer);
temp->unk14 = param_0_s32;
temp->moveID = param_0_s32;
temp->heldItem = entityInfo->heldItem;
temp->exp = entityInfo->exp;
temp->level = entityInfo->level;
@@ -108,7 +108,7 @@ bool8 sub_8083C24(void)
temp = &gDungeon->unk1CE98;
if (temp->unk14 < 0x226) {
if (temp->moveID < 0x226) {
return TRUE;
}
else {
@@ -122,7 +122,7 @@ bool8 sub_8083C50(void)
temp = &gDungeon->unk1CE98;
if ((temp->unk14 == 0x227) || (temp->unk14 == 0x22A) || (temp->unk14 == 0x228)) {
if ((temp->moveID == 0x227) || (temp->moveID == 0x22A) || (temp->moveID == 0x228)) {
return TRUE;
}
else {
@@ -138,7 +138,7 @@ bool8 sub_8083C88(u8 param_1)
if ((!HasCheckpoint(gDungeon->dungeonLocation.id) &&
((gDungeon->unk65C != 0) || (param_1 != 0))) ||
(temp->unk14 != 0x227)) {
(temp->moveID != 0x227)) {
return TRUE;
}
else {
@@ -197,7 +197,7 @@ void PlayDungeonFailBGM(void)
{
DungeonStartNewBGM(MUS_DUNGEON_FAIL);
gDungeon->unk66F = 0;
gDungeon->unk672 = 0;
gDungeon->monsterHouseTriggeredEvent = FALSE;
gDungeon->unk699 = 0;
gDungeon->bossSongIndex = STOP_BGM;
}
@@ -206,7 +206,7 @@ void PlayDungeonCompleteBGM(void)
{
DungeonStartNewBGM(MUS_DUNGEON_COMPLETE);
gDungeon->unk66F = 0;
gDungeon->unk672 = 0;
gDungeon->monsterHouseTriggeredEvent = FALSE;
gDungeon->unk699 = 0;
gDungeon->bossSongIndex = STOP_BGM;
}
@@ -296,7 +296,7 @@ void UpdateDungeonMusic(void)
if (gDungeon->unk66F != 0) {
newSongIndex = MUS_STOP_THIEF;
}
else if (gDungeon->unk672 != 0) {
else if (gDungeon->monsterHouseTriggeredEvent) {
newSongIndex = MUS_MONSTER_HOUSE;
}
else if (gDungeon->unk699 != 0) {

View File

@@ -1,11 +1,18 @@
#include "global.h"
#include "constants/friend_area.h"
#include "constants/item.h"
#include "item.h"
#include "event_flag.h"
#include "debug.h"
#include "memory.h"
#include "friend_area.h"
#include "rescue_team_info.h"
#include "other_random.h"
#include "friend_area.h"
#include "team_inventory.h"
extern void sub_800226C(u8 r0, u8 r1, u32* r2, u8 u3);
extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2);
extern u8 sub_8002658(s16);
extern u8 gUnknown_2000A88[0x400];
struct unkEventStruct
{
@@ -16,7 +23,557 @@ struct unkEventStruct
extern struct unkEventStruct gUnknown_80B71E4[58];
extern u8 gUnknown_2000A88[0x400];
struct unkStruct_80B6D90
{
u8 *text;
s32 num;
};
extern struct unkStruct_80B6D90 gUnknown_80B6D90[];
extern u8 gUnknown_80B7144[];
extern u8 *gUnknown_80B714C[];
extern u8 *gUnknown_80B71A0[];
extern u8 gUnknown_80B72CC[];
extern struct DebugLocation gUnknown_80B7318;
extern u8 gUnknown_80B7324[];
extern struct DebugLocation gUnknown_80B7350;
extern u8 gUnknown_80B735C[];
extern u8 gUnknown_80B7378[];
extern u8 gUnknown_80B7388[];
void FatalError(struct DebugLocation *, const char *, ...) __attribute__((noreturn));
extern u8 sub_80973F4(u32);
extern bool8 HasCompletedAllMazes(void);
extern void sub_8097418(u32, u32);
extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2);
extern u8 sub_8002658(s16);
extern u32 sub_8001658(u32, s32);
extern void sub_80018D8(u32, u32, u32);
extern void sub_809733C(u32, u32);
extern void sub_80973A8(u32, u32);
extern u8 HasRecruitedMon(u32);
extern void sub_80976F8(u32);
extern void sub_800199C(u32, s32, u32, s32);
extern s32 sub_8001784(u32, s32, u16);
u8 *sub_8001A74(s16 param_1)
{
struct UnkEventStruct local_1c;
sub_800160C(&local_1c,0,param_1);
return local_1c.unk4;
}
s16 sub_8001A90(s16 param_1)
{
struct UnkEventStruct local_1c;
sub_800160C(&local_1c,0,param_1);
return local_1c.unk0[4];
}
s32 sub_8001AB0(s32 param_1, s16 param_2)
{
s32 counter;
s32 total;
struct UnkEventStruct local_1c;
s32 param_2_s32;
param_2_s32 = param_2;
total = 0;
sub_800160C(&local_1c, 0, param_2_s32);
for(counter = 0; counter < local_1c.unk0[4]; counter++)
{
total += sub_8001784(param_1, param_2_s32, counter);
}
return total;
}
void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3)
{
u8 *r1;
s32 r2;
u8 r0;
struct UnkEventStruct local_10;
sub_800160C(&local_10,0,param_1);
for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) {
r0 = *r1;
if (*r1++ == 0) break;
*param_2 = r0;
param_2++;
}
*param_2 = 0;
}
void sub_8001B34(s16 param_1,u32 param_2,s32 param_3)
{
u8 *r1;
s32 r2;
u8 r0;
struct UnkEventStruct local_10;
sub_800160C(&local_10,0,param_1);
for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) {
r0 = *r1;
if (*r1++ == 0) break;
*r1 = r0;
}
if (r2 < local_10.unk0[4]) {
for(; r2 < local_10.unk0[4]; r1++, r2++)
{
*r1 = 0;
}
}
}
void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3)
{
*param_2 = sub_8001784(0, (s16)param_1, 0);
*param_3 = sub_8001784(0, (s16)param_1, 1);
}
void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3)
{
s32 param_1_s32;
u32 local_18;
u32 local_14;
param_1_s32 = param_1;
sub_8001B88(param_1_s32,&local_18,&local_14);
Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d
if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) {
sub_80018D8(0,0x19,0);
}
sub_800199C(0,param_1_s32,0,param_2);
sub_800199C(0,param_1_s32,1,param_3);
switch(param_1_s32)
{
case 3:
if (((u32)(param_2 - 1) < 0x1b)) {
if (sub_8001D44(3,8,-1)) {
sub_80976F8(0);
}
if (sub_8001D44(3,0xb,3)) {
sub_80976F8(1);
}
if (sub_8001D44(3,0x11,0)) {
sub_80976F8(2);
}
}
break;
case 4:
if (sub_8001CC4(4,0x1f,0) == 0) {
sub_80976F8(4);
}
if (sub_8001CC4(4,0x20,0) == 0) {
sub_80976F8(5);
}
break;
case 0xC:
if(sub_8001CC4(0xc,0x37,2) == 0) {
sub_80976F8(3);
}
break;
}
}
bool8 sub_8001CC4(s16 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0,param_1,0);
iVar2 = sub_8001784(0,param_1,1);
if ((uVar1 != 0x3a) &&
(uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) {
return TRUE;
}
else {
return FALSE;
}
}
bool8 sub_8001D08(s16 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0, param_1, 0);
iVar2 = sub_8001784(0, param_1, 1);
if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) {
return TRUE;
}
else {
return FALSE;
}
}
bool8 sub_8001D44(s16 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0, param_1, 0);
iVar2 = sub_8001784(0, param_1, 1);
if ((uVar1 != 0x3a) &&
((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) {
return TRUE;
}
else {
return FALSE;
}
}
void sub_8001D88(void)
{
u32 local_c;
u32 auStack8;
sub_8001B88(3, &auStack8, &local_c);
if (auStack8 - 1 < 0x1b) {
if (sub_8001CC4(4,0x1f,0) != 0) {
if (sub_8001D44(3,0xf,7) != 0) {
ScenarioCalc(4,0x1f,0);
sub_8097418(0xe,1);
sub_80018D8(0,0x28,2);
}
else {
if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) {
ScenarioCalc(4,0x1d,1);
}
}
}
if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) {
ScenarioCalc(4,0x1f,1);
sub_809733C(0xf,1);
}
if (auStack8 > 0x11) {
sub_80973A8(0x25,1);
if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) ||
(sub_8001D44(5,0x21,3) != 0)) {
sub_80973A8(0x22,1);
}
if (GetFriendAreaStatus(FURNACE_DESERT) != 0) {
sub_80973A8(0x1f,1);
}
if (GetFriendAreaStatus(BOULDER_CAVE)) {
sub_80973A8(0x20,1);
}
if (GetFriendAreaStatus(DRAGON_CAVE)) {
sub_80973A8(0x21,1);
}
if (GetFriendAreaStatus(SECRETIVE_FOREST)) {
sub_80973A8(0x23,1);
}
if (GetFriendAreaStatus(SERENE_SEA)) {
sub_80973A8(0x24,1);
sub_80973A8(0x28,1);
}
if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) {
sub_80973A8(0x26,1);
}
if (sub_8001D08(5,0,0)) {
ScenarioCalc(5,0x21,1);
}
if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) {
if (sub_8001D08(7,0,0)) {
ScenarioCalc(7,0x26,1);
}
if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) {
ScenarioCalc(9,0x2e,1);
}
}
if (!sub_8001CC4(9,0x30,0)) {
if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) {
ScenarioCalc(5,0x22,1);
}
if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) &&
(GetFriendAreaStatus(SKY_BLUE_PLAINS))) {
ScenarioCalc(0xb,0x33,1);
}
if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) {
sub_80973A8(0x27,1);
}
if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) {
sub_80973A8(0x29,1);
}
}
if (!sub_8001CC4(5,0x22,0)) {
if (sub_8001D08(10,0,0)) {
ScenarioCalc(10,0x31,1);
sub_809733C(0x1b,1);
}
if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) {
ScenarioCalc(0xc,0x35,1);
}
}
if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) {
ScenarioCalc(6,0x24,1);
}
if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) {
ScenarioCalc(8,0x2c,1);
}
}
}
}
u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation)
{
switch(operation) {
case 0:
return param_2;
case 1:
return param_1 - param_2;
case 2:
return param_1 + param_2;
case 3:
return param_1 * param_2;
case 4:
return param_1 / param_2;
case 5:
return param_1 % param_2;
case 6:
return param_1 & param_2;
case 7:
return param_1 | param_2;
case 8:
return param_1 ^ param_2;
case 9:
return (1 << param_2) | param_1;
case 10:
return param_1 & ~(1 << param_2);
case 0xb:
return OtherRandInt(param_2);
default:
FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d
}
}
u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation)
{
switch(operation) {
case 0:
return 1;
case 1:
return 0;
case 2:
return param_1 == param_2;
case 7:
return param_1 != param_2;
case 3:
return param_1 > param_2;
case 5:
return param_1 >= param_2;
case 4:
return param_1 < param_2;
case 6:
return param_1 <= param_2;
case 8:
return (param_1 & param_2) != 0;
case 9:
return (param_1 ^ param_2) != 0;
case 10:
return param_1 >> (param_2) & 1;
default:
FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d
}
}
u32 FlagCalc(s32 r0, s32 r1, u32 operation)
{
return _FlagCalc(r0, r1, operation);
}
void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation)
{
u32 uVar1;
u32 uVar3;
uVar1 = sub_8001658(param_1,param_2);
uVar3 = _FlagCalc(uVar1,param_3,operation);
sub_80018D8(param_1,param_2,uVar3);
}
void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation)
{
s32 uVar1;
s32 uVar2;
s32 uVar3;
s32 param_2_s32 = param_2;
s32 param_3_s32 = param_3;
uVar1 = sub_8001658(param_1,param_2_s32);
uVar2 = sub_8001658(param_1,param_3_s32);
uVar3 = _FlagCalc(uVar1,uVar2,operation);
sub_80018D8(param_1,param_2_s32,uVar3);
}
u8 FlagJudge(s32 r0, s32 r1, u32 operation)
{
return _FlagJudge(r0, r1, operation);
}
u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation)
{
s32 uVar1;
uVar1 = sub_8001658(param_1, param_2);
return _FlagJudge(uVar1,param_3,operation);
}
u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation)
{
s32 uVar1;
s32 uVar2;
s32 param_2_s32 = param_2;
s32 param_3_s32 = param_3;
uVar1 = sub_8001658(param_1,param_2_s32);
uVar2 = sub_8001658(param_1,param_3_s32);
return _FlagJudge(uVar1,uVar2,operation);
}
s32 sub_8002354(u32 param_1)
{
if (param_1 < 0x3b) {
return gUnknown_80B6D90[param_1].num;
}
else {
return -1;
}
}
u8 *sub_8002374(u32 param_1)
{
if (param_1 < 0x3b) {
return gUnknown_80B6D90[param_1].text;
}
else {
return gUnknown_80B7378; // error number
}
}
// Unused
u8 *sub_8002394(u32 param_1)
{
if (param_1 - 0x12 < 9) {
return gUnknown_80B714C[param_1 - 0x12];
}
else if (param_1 == 0xf) {
return gUnknown_80B7388; // 1-1
}
else {
return gUnknown_80B7144; // NONE
}
}
// Unused
u8 *sub_80023C4(u32 param_1)
{
if (param_1 < 4) {
return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND
}
else {
return gUnknown_80B7144; // NONE
}
}
bool8 sub_80023E4(u32 param_1)
{
switch(param_1) {
case 0:
return sub_8001D44(3,2,-1);
case 1:
return sub_8001D44(3,3,3);
case 2:
return sub_8001D44(3,4,3);
case 3:
return sub_8001D44(3,5,0);
case 4:
return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0));
case 5:
return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0));
case 6:
return sub_8001D44(3,0x11,-1);
case 7:
return sub_8001D44(3,0x12,2);
case 8:
return sub_8001D44(3,0x12,3);
case 9:
return sub_8001D44(3,0x12,-1);
case 10:
return sub_8001D44(3,5,4);
case 0xb:
return sub_8001D44(3,5,4);
case 0xc:
return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3));
case 0xd:
return sub_8001D08(3,0x10,2);
case 0xe:
return !sub_8001CC4(3,5,7);
case 0xf:
return !sub_8001CC4(3,0xf,0);
case 0x10:
return sub_8001D44(3,7,-1);
case 0x11:
return sub_8001D44(3,0xc,-1);
case 0x12:
return sub_8001D44(3,0xd,-1);
case 0x13:
return sub_8001D44(3,0xf,-1);
case 0x14:
return sub_8001D44(3,0x10,-1);
case 0x15:
return sub_8001D44(5,0x21,-1);
case 0x16:
return sub_8001D44(5,0x22,-1);
case 0x17:
return sub_8001D44(6,0x24,-1);
case 0x18:
return sub_8001D44(7,0x2a,-1);
case 0x19:
return sub_8001D44(8,0x2c,-1);
case 0x1a:
return sub_8001D44(10,0x31,-1);
case 0x1b:
return sub_80973F4(0x29);
case 0x1c:
return GetRescueTeamRank() == LUCARIO_RANK;
case 0x1d:
return HasCompletedAllMazes();
default:
return FALSE;
}
}
u8 sub_8002658(s16 param_1)
{
short sVar1;
s32 param_1_s32;
struct unkEventStruct *ptr;
param_1_s32 = param_1;
ptr = gUnknown_80B71E4;
sVar1 = gUnknown_80B71E4[0].unk0;
if (sVar1 != -1) {
do {
if (sVar1 == param_1_s32) {
return ptr->unk2;
}
ptr++;
sVar1 = ptr->unk0;
} while (sVar1 != -1);
}
return 0;
}
s16 sub_8002694(u8 param_1)
{
@@ -54,12 +611,12 @@ bool8 sub_8002718(u8 *r0)
struct UnkEventStruct temp;
sub_800160C(&temp, 0, 0);
MemoryCopy8(gUnknown_2000A88, r0, 0x400);
if (temp.unk0[5] != temp.unk4[0])
if (temp.unk0[5] != *(u32 *)temp.unk4)
return 0;
return 1;
}
void sub_8002758(u32 *r0)
void sub_8002758(s32 r0)
{
sub_800226C(0, 0x1, r0, 0x9);
}

View File

@@ -1,569 +0,0 @@
#include "global.h"
#include "constants/friend_area.h"
#include "friend_area.h"
#include "item.h"
#include "debug.h"
#include "other_random.h"
#include "rescue_team_info.h"
#include "team_inventory.h"
extern bool8 HasCompletedAllMazes(void);
extern u8 sub_80973F4(u32);
extern u8 _FlagJudge(s32, s32, u32);
extern u32 sub_8001658(u32, s32);
extern u32 _FlagCalc(s32, s32, u32);
extern void sub_80018D8(u32, u32, u32);
extern u8 HasRecruitedMon(u32);
extern void sub_809733C(u32, u32);
extern void sub_80973A8(u32, u32);
extern void sub_8097418(u32, u32);
extern s32 sub_8001784(u32, s32, u16);
extern u8 gUnknown_80B7144[];
extern u8 *gUnknown_80B71A0[];
extern u8 *gUnknown_80B714C[];
extern u8 gUnknown_80B7388[];
extern u8 gUnknown_80B7378[];
struct unkStruct_80B6D90
{
u8 *text;
s32 num;
};
extern struct unkStruct_80B6D90 gUnknown_80B6D90[];
extern u8 gUnknown_80B735C[];
extern u32 gUnknown_80B7350;
extern u8 gUnknown_80B7324[];
extern u32 gUnknown_80B7318;
extern u8 gUnknown_80B72CC[];
extern void sub_80976F8(u32);
extern void sub_800199C(u32, s32, u32, s32);
bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3);
bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3);
void FatalError(u32 *, const char *, ...) __attribute__((noreturn));
// TODO: rectify with UnkEventStruct
struct UnkEventStruct2_sub
{
/* 0x0 */ s16 *unk0;
u32 fill4;
s16 unk8;
};
struct UnkEventStruct2
{
/* 0x0 */ struct UnkEventStruct2_sub *unk0;
/* 0x4 */ u8 *unk4;
};
extern void sub_800160C(struct UnkEventStruct2 *r0, u32 r1, s32 r2);
u8 *sub_8001A74(s16 param_1)
{
struct UnkEventStruct2 local_1c;
sub_800160C(&local_1c,0,param_1);
return local_1c.unk4;
}
s16 sub_8001A90(s16 param_1)
{
struct UnkEventStruct2 local_1c;
sub_800160C(&local_1c,0,param_1);
return local_1c.unk0->unk8;
}
s32 sub_8001AB0(s32 param_1,s16 param_2)
{
s32 iVar1;
s32 counter;
s32 total;
struct UnkEventStruct2 local_1c;
s32 param_2_s32;
param_2_s32 = param_2;
total = 0;
sub_800160C(&local_1c,0,param_2_s32);
counter = 0;
if (counter < local_1c.unk0->unk8) {
for(; counter < local_1c.unk0->unk8; counter++)
{
iVar1 = sub_8001784(param_1, param_2_s32, counter);
total += iVar1;
}
}
return total;
}
void sub_8001AF8(s16 param_1, u8 *param_2, s32 param_3)
{
u8 *r1;
s32 r2;
u8 r0;
struct UnkEventStruct2 local_10;
sub_800160C(&local_10,0,param_1);
for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r2++) {
r0 = *r1;
if (*r1++ == 0) break;
*param_2 = r0;
param_2++;
}
*param_2 = 0;
}
void sub_8001B34(s16 param_1,u32 param_2,s32 param_3)
{
u8 *r1;
s32 r2;
u8 r0;
struct UnkEventStruct2 local_10;
sub_800160C(&local_10,0,param_1);
for (r1 = local_10.unk4, r2 = 0; r2 < param_3; r1++, r2++) {
r0 = *r1;
if (*r1++ == 0) break;
*r1 = r0;
}
if (r2 < local_10.unk0->unk8) {
for(; r2 < local_10.unk0->unk8; r1++, r2++)
{
*r1 = 0;
}
}
}
void sub_8001B88(s32 param_1,u32 *param_2,u32 *param_3)
{
*param_2 = sub_8001784(0, (s16)param_1, 0);
*param_3 = sub_8001784(0, (s16)param_1, 1);
}
void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3)
{
s32 param_1_s32;
u32 local_18;
u32 local_14;
param_1_s32 = param_1;
sub_8001B88(param_1_s32,&local_18,&local_14);
Log(6,gUnknown_80B72CC,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d
if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) {
sub_80018D8(0,0x19,0);
}
sub_800199C(0,param_1_s32,0,param_2);
sub_800199C(0,param_1_s32,1,param_3);
switch(param_1_s32)
{
case 3:
if (((u32)(param_2 - 1) < 0x1b)) {
if (sub_8001D44(3,8,-1)) {
sub_80976F8(0);
}
if (sub_8001D44(3,0xb,3)) {
sub_80976F8(1);
}
if (sub_8001D44(3,0x11,0)) {
sub_80976F8(2);
}
}
break;
case 4:
if (sub_8001CC4(4,0x1f,0) == 0) {
sub_80976F8(4);
}
if (sub_8001CC4(4,0x20,0) == 0) {
sub_80976F8(5);
}
break;
case 0xC:
if(sub_8001CC4(0xc,0x37,2) == 0) {
sub_80976F8(3);
}
break;
}
}
bool8 sub_8001CC4(u32 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0,(s16)param_1,0);
iVar2 = sub_8001784(0,(s16)param_1,1);
if ((uVar1 != 0x3a) &&
(uVar1 < param_2 || (param_3 >= 0 && (uVar1 == param_2) && (iVar2 < param_3)))) {
return TRUE;
}
else {
return FALSE;
}
}
bool8 sub_8001D08(u32 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0, (s16)param_1, 0);
iVar2 = sub_8001784(0, (s16)param_1, 1);
if (((uVar1 == param_2 && (((param_3 < 0) || (iVar2 == param_3)))))) {
return TRUE;
}
else {
return FALSE;
}
}
bool8 sub_8001D44(u32 param_1,u32 param_2,s32 param_3)
{
s32 uVar1;
s32 iVar2;
uVar1 = sub_8001784(0, (s16)param_1, 0);
iVar2 = sub_8001784(0, (s16)param_1, 1);
if ((uVar1 != 0x3a) &&
((uVar1 > param_2 || (((param_3 >= 0 && (uVar1 == param_2)) && (iVar2 > param_3)))))) {
return TRUE;
}
else {
return FALSE;
}
}
void sub_8001D88(void)
{
u32 local_c;
u32 auStack8;
sub_8001B88(3, &auStack8, &local_c);
if (auStack8 - 1 < 0x1b) {
if (sub_8001CC4(4,0x1f,0) != 0) {
if (sub_8001D44(3,0xf,7) != 0) {
ScenarioCalc(4,0x1f,0);
sub_8097418(0xe,1);
sub_80018D8(0,0x28,2);
}
else {
if ((sub_8001D08(4,0,0)) && (sub_8001D44(3,0xf,3))) {
ScenarioCalc(4,0x1d,1);
}
}
}
if ((sub_8001D08(4,0x1f,0)) && (GetFriendAreaStatus(SKY_BLUE_PLAINS))) {
ScenarioCalc(4,0x1f,1);
sub_809733C(0xf,1);
}
if (auStack8 > 0x11) {
sub_80973A8(0x25,1);
if (((FindItemInInventory(ITEM_HM_DIVE) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_DIVE] != 0)) ||
(sub_8001D44(5,0x21,3) != 0)) {
sub_80973A8(0x22,1);
}
if (GetFriendAreaStatus(FURNACE_DESERT) != 0) {
sub_80973A8(0x1f,1);
}
if (GetFriendAreaStatus(BOULDER_CAVE)) {
sub_80973A8(0x20,1);
}
if (GetFriendAreaStatus(DRAGON_CAVE)) {
sub_80973A8(0x21,1);
}
if (GetFriendAreaStatus(SECRETIVE_FOREST)) {
sub_80973A8(0x23,1);
}
if (GetFriendAreaStatus(SERENE_SEA)) {
sub_80973A8(0x24,1);
sub_80973A8(0x28,1);
}
if ((GetFriendAreaStatus(AGED_CHAMBER_AN)) && (GetFriendAreaStatus(AGED_CHAMBER_O_EXCLAIM))) {
sub_80973A8(0x26,1);
}
if (sub_8001D08(5,0,0)) {
ScenarioCalc(5,0x21,1);
}
if ((FindItemInInventory(ITEM_HM_SURF) != -1) || (gTeamInventory_203B460->teamStorage[ITEM_HM_SURF] != 0)) {
if (sub_8001D08(7,0,0)) {
ScenarioCalc(7,0x26,1);
}
if ((sub_8001D08(9,0,0)) && (GetFriendAreaStatus(SOUTHERN_ISLAND))) {
ScenarioCalc(9,0x2e,1);
}
}
if (!sub_8001CC4(9,0x30,0)) {
if ((sub_8001D08(5,0x22,0)) && HasRecruitedMon(MONSTER_ARTICUNO) && HasRecruitedMon(MONSTER_ZAPDOS) && HasRecruitedMon(MONSTER_MOLTRES)) {
ScenarioCalc(5,0x22,1);
}
if (((sub_8001D08(0xb,0,0)) && (sub_8001D44(5,0x21,3) != 0)) &&
(GetFriendAreaStatus(SKY_BLUE_PLAINS))) {
ScenarioCalc(0xb,0x33,1);
}
if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) {
sub_80973A8(0x27,1);
}
if (GetFriendAreaStatus(SKY_BLUE_PLAINS)) {
sub_80973A8(0x29,1);
}
}
if (!sub_8001CC4(5,0x22,0)) {
if (sub_8001D08(10,0,0)) {
ScenarioCalc(10,0x31,1);
sub_809733C(0x1b,1);
}
if ((sub_8001D08(0xc,0,0)) && (!sub_8001CC4(0xb,0x34,0))) {
ScenarioCalc(0xc,0x35,1);
}
}
if ((sub_8001D08(6,0,0)) && (HasRecruitedMon(MONSTER_LUGIA))) {
ScenarioCalc(6,0x24,1);
}
if ((sub_8001D08(8,0,0)) && (HasRecruitedMon(MONSTER_HO_OH))) {
ScenarioCalc(8,0x2c,1);
}
}
}
}
u32 _FlagCalc(s32 param_1, s32 param_2, u32 operation)
{
switch(operation) {
case 0:
return param_2;
case 1:
return param_1 - param_2;
case 2:
return param_1 + param_2;
case 3:
return param_1 * param_2;
case 4:
return param_1 / param_2;
case 5:
return param_1 % param_2;
case 6:
return param_1 & param_2;
case 7:
return param_1 | param_2;
case 8:
return param_1 ^ param_2;
case 9:
return (1 << param_2) | param_1;
case 10:
return param_1 & ~(1 << param_2);
case 0xb:
return OtherRandInt(param_2);
default:
FatalError(&gUnknown_80B7318,gUnknown_80B7324, operation); // event flag expansion error %d
}
}
u8 _FlagJudge(s32 param_1, s32 param_2, u32 operation)
{
switch(operation) {
case 0:
return 1;
case 1:
return 0;
case 2:
return param_1 == param_2;
case 7:
return param_1 != param_2;
case 3:
return param_1 > param_2;
case 5:
return param_1 >= param_2;
case 4:
return param_1 < param_2;
case 6:
return param_1 <= param_2;
case 8:
return (param_1 & param_2) != 0;
case 9:
return (param_1 ^ param_2) != 0;
case 10:
return param_1 >> (param_2) & 1;
default:
FatalError(&gUnknown_80B7350,gUnknown_80B735C, operation); // event flag rule error %d
}
}
u32 FlagCalc(u32 r0, u32 r1, u32 operation)
{
return _FlagCalc(r0, r1, operation);
}
void sub_800226C(u32 param_1, s16 param_2, s32 param_3, u32 operation)
{
u32 uVar1;
u32 uVar3;
s32 param_2_s32 = param_2;
uVar1 = sub_8001658(param_1,param_2_s32);
uVar3 = _FlagCalc(uVar1,param_3,operation);
sub_80018D8(param_1,param_2_s32,uVar3);
}
void sub_80022A0(u32 param_1, s16 param_2, s16 param_3, u32 operation)
{
s32 uVar1;
s32 uVar2;
s32 uVar3;
s32 param_2_s32 = param_2;
s32 param_3_s32 = param_3;
uVar1 = sub_8001658(param_1,param_2_s32);
uVar2 = sub_8001658(param_1,param_3_s32);
uVar3 = _FlagCalc(uVar1,uVar2,operation);
sub_80018D8(param_1,param_2_s32,uVar3);
}
u8 FlagJudge(s32 r0, s32 r1, u32 operation)
{
return _FlagJudge(r0, r1, operation);
}
u8 sub_80022F8(u32 param_1, s16 param_2, s32 param_3, u32 operation)
{
s32 uVar1;
uVar1 = sub_8001658(param_1, param_2);
return _FlagJudge(uVar1,param_3,operation);
}
u8 sub_8002318(u32 param_1, s16 param_2, s16 param_3, u32 operation)
{
s32 uVar1;
s32 uVar2;
s32 param_2_s32 = param_2;
s32 param_3_s32 = param_3;
uVar1 = sub_8001658(param_1,param_2_s32);
uVar2 = sub_8001658(param_1,param_3_s32);
return _FlagJudge(uVar1,uVar2,operation);
}
s32 sub_8002354(u32 param_1)
{
if (param_1 < 0x3b) {
return gUnknown_80B6D90[param_1].num;
}
else {
return -1;
}
}
u8 *sub_8002374(u32 param_1)
{
if (param_1 < 0x3b) {
return gUnknown_80B6D90[param_1].text;
}
else {
return gUnknown_80B7378;
}
}
// Unused
u8 *sub_8002394(u32 param_1)
{
if (param_1 - 0x12 < 9) {
return gUnknown_80B714C[param_1 - 0x12U];
}
else if (param_1 == 0xf) {
return gUnknown_80B7388; // 1-1
}
else {
return gUnknown_80B7144; // NONE
}
}
// Unused
u8 *sub_80023C4(u32 param_1)
{
if (param_1 < 4) {
return gUnknown_80B71A0[param_1]; // CISTART, CECONTINUE, CNLAST, CWEND
}
else {
return gUnknown_80B7144; // NONE
}
}
bool8 sub_80023E4(u32 param_1)
{
switch(param_1) {
case 0:
return sub_8001D44(3,2,-1);
case 1:
return sub_8001D44(3,3,3);
case 2:
return sub_8001D44(3,4,3);
case 3:
return sub_8001D44(3,5,0);
case 4:
return (sub_8001D44(3,0xb,0) && sub_8001CC4(3,0xd,0));
case 5:
return (sub_8001D44(3,0xb,3) && sub_8001CC4(3,0xf,0));
case 6:
return sub_8001D44(3,0x11,-1);
case 7:
return sub_8001D44(3,0x12,2);
case 8:
return sub_8001D44(3,0x12,3);
case 9:
return sub_8001D44(3,0x12,-1);
case 10:
return sub_8001D44(3,5,4);
case 0xb:
return sub_8001D44(3,5,4);
case 0xc:
return (!sub_8001D08(3,0xb,2) && !sub_8001D08(3,0xb,3));
case 0xd:
return sub_8001D08(3,0x10,2);
case 0xe:
return !sub_8001CC4(3,5,7);
case 0xf:
return !sub_8001CC4(3,0xf,0);
case 0x10:
return sub_8001D44(3,7,-1);
case 0x11:
return sub_8001D44(3,0xc,-1);
case 0x12:
return sub_8001D44(3,0xd,-1);
case 0x13:
return sub_8001D44(3,0xf,-1);
case 0x14:
return sub_8001D44(3,0x10,-1);
case 0x15:
return sub_8001D44(5,0x21,-1);
case 0x16:
return sub_8001D44(5,0x22,-1);
case 0x17:
return sub_8001D44(6,0x24,-1);
case 0x18:
return sub_8001D44(7,0x2a,-1);
case 0x19:
return sub_8001D44(8,0x2c,-1);
case 0x1a:
return sub_8001D44(10,0x31,-1);
case 0x1b:
return sub_80973F4(0x29);
case 0x1c:
return GetRescueTeamRank() == LUCARIO_RANK;
case 0x1d:
return HasCompletedAllMazes();
default:
return FALSE;
}
}

View File

@@ -29,7 +29,6 @@ const u8 filler_ex1[8] =
EWRAM_DATA_2 struct ExclusivePokemonData *gUnknown_203B498 = {0};
EWRAM_DATA struct ExclusivePokemonData gExclusivePokemonInfo = {0};
void LoadExclusivePokemon(void)
{
gUnknown_203B498 = &gExclusivePokemonInfo;
@@ -49,3 +48,269 @@ void InitializeExclusivePokemon(void)
gUnknown_203B498->Exclusives[counter] = gExclusivePokemon[counter].in_rrt;
}
}
void sub_8097FA8(u8 param_1)
{
gUnknown_203B498->unk48[param_1 >> 5] |= 1 << ((param_1 & 0x1f));
}
void sub_8097FD0(u8 param_1)
{
gUnknown_203B498->unk3C[param_1 >> 5] |= 1 << ((param_1 & 0x1f));
}
void sub_8097FF8(void)
{
s32 iVar1;
s32 index;
struct ExclusivePokemonData *ptr;
for(index = 0; index < 0x40; index++)
{
ptr = gUnknown_203B498;
if (index < 0) {
iVar1 = index + 0x1f;
}
else
{
iVar1 = index;
}
if ((ptr->unk48[iVar1 >> 5] & (1 << (index - ((iVar1 >> 5) * 0x20)))) != 0) {
ptr->unk3C[iVar1 >> 5] |= (1 << (index - ((iVar1 >> 5) * 0x20)));
}
}
sub_8098080();
}
void sub_8098044(u8 param_1)
{
gUnknown_203B498->unk3C[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f))));
gUnknown_203B498->unk48[param_1 >> 5] &= ~(1 << (((param_1 & 0x1f))));
}
void sub_8098080(void)
{
s32 index;
for(index = 0; index < 0x3; index++)
{
gUnknown_203B498->unk48[index] = 0;
}
}
u32 sub_80980A4(void)
{
u32 temp = gUnknown_203B498->unk0;
gUnknown_203B498->unk0 = 1;
return temp;
}
void sub_80980B4(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
s32 pokeID_s32_1;
struct ExclusivePokemonData *ptr;
pokeID_s32 = pokeID;
pokeID_s32_1 = pokeID_s32;
if (pokeID_s32 != MONSTER_DECOY)
{
if(pokeID_s32 != MONSTER_STATUE)
{
if(pokeID_s32 != MONSTER_RAYQUAZA_CUTSCENE) {
ptr = gUnknown_203B498;
index = pokeID_s32;
if (pokeID_s32 < 0) {
index = pokeID_s32 + 0x1f;
}
ptr->unk4[index >> 5] |= 1 << (s16)((pokeID_s32_1 - (index >> 5) * 0x20));
}
}
}
}
bool8 sub_8098100(u8 param_1)
{
u32 index = param_1;
if (index > 0x3f) {
return FALSE;
}
else
{
return (gUnknown_203B498->unk3C[param_1 >> 0x5] & (1 << (index & 0x1f))) ? TRUE : FALSE;
}
}
bool8 sub_8098134(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
s32 pokeID_s32_1;
struct ExclusivePokemonData *ptr;
pokeID_s32 = pokeID;
pokeID_s32_1 = pokeID_s32;
ptr = gUnknown_203B498;
if (pokeID < 0) {
index = pokeID_s32 + 0x1f;
}
else
{
index = pokeID_s32;
}
return ((ptr->unk4[(index >> 5)] & (1 << (s16)(pokeID_s32_1 - ((index >> 5) * 0x20)))) != 0) ? TRUE : FALSE;
}
void sub_8098170(s32 param_1)
{
s32 index;
struct ExclusivePokemonData *ptr;
ptr = gUnknown_203B498;
if (param_1 < 0) {
index = param_1 + 0x1f;
}
else
{
index = param_1;
}
ptr->unk54[(index >> 5)] |= 1 << (param_1 - ((index >> 5) * 0x20));
}
bool32 sub_80981A0(s32 param_1)
{
s32 index;
bool32 flag;
struct ExclusivePokemonData *ptr;
if (param_1 > 0x1e) {
return FALSE;
}
else {
ptr = gUnknown_203B498;
if (param_1 < 0) {
index = param_1 + 0x1f;
}
else
{
index = param_1;
}
flag = ptr->unk54[(index >> 5)] & 1 << (param_1 - ((index >> 5) * 0x20));
if (flag != 0) {
flag = TRUE;
}
return flag;
}
}
bool8 IsExclusivePokemonUnlocked(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
pokeID_s32 = pokeID;
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gExclusivePokemon[index].poke_id == pokeID_s32)
return gUnknown_203B498->Exclusives[index];
}
return TRUE;
}
void UnlockExclusivePokemon(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
pokeID_s32 = pokeID;
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gExclusivePokemon[index].poke_id == pokeID_s32)
gUnknown_203B498->Exclusives[index] = TRUE;
}
}
void WriteExclusivePokemon(struct unkStruct_8094924 *r0)
{
s32 index;
u8 *puVar2;
u8 stack_0;
u8 stack_1;
u8 stack_2;
u8 neg_1;
u8 zero;
neg_1 = -1;
zero = 0;
SaveIntegerBits(r0, gUnknown_203B498, 1);
for(index = 0; index < 424; index++)
{
stack_0 = sub_8098134(index);
SaveIntegerBits(r0, &stack_0, 1);
}
for(index = 0; index < 64; index++)
{
stack_1 = sub_8098100(index);
SaveIntegerBits(r0, &stack_1, 1);
}
for(index = 0; index < 31; index++)
{
stack_2 = sub_80981A0(index);
SaveIntegerBits(r0, &stack_2, 1);
}
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gUnknown_203B498->Exclusives[index])
puVar2 = &neg_1;
else
puVar2 = &zero;
SaveIntegerBits(r0, puVar2, 1);
}
}
void ReadExclusivePokemon(struct unkStruct_8094924 *r0)
{
s32 index;
u8 stack_0;
u8 stack_1;
u8 stack_2;
u8 stack_3;
memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData));
RestoreIntegerBits(r0, gUnknown_203B498, 1);
for(index = 0; index < 424; index++)
{
RestoreIntegerBits(r0, &stack_0, 1);
if(stack_0)
sub_80980B4(index);
}
for(index = 0; index < 64; index++)
{
RestoreIntegerBits(r0, &stack_1, 1);
if(stack_1)
sub_8097FA8(index);
}
for(index = 0; index < 31; index++)
{
RestoreIntegerBits(r0, &stack_2, 1);
if(stack_2)
sub_8098170(index);
}
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
RestoreIntegerBits(r0, &stack_3, 1);
do; while(0); // do/while needed for matching - jiang
gUnknown_203B498->Exclusives[index] = 1 & stack_3;
}
sub_8097FF8();
}

View File

@@ -1,123 +0,0 @@
#include "global.h"
#include "exclusive_pokemon.h"
extern struct ExclusivePokemonData *gUnknown_203B498;
extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON];
void sub_80980B4(s16);
void sub_8097FA8(u8);
void sub_8098170(s32);
void sub_8097FF8(void);
u8 sub_8098100(u8);
u8 sub_8098134(s16);
u8 sub_80981A0(s32);
bool8 IsExclusivePokemonUnlocked(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
pokeID_s32 = pokeID;
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gExclusivePokemon[index].poke_id == pokeID_s32)
return gUnknown_203B498->Exclusives[index];
}
return TRUE;
}
void UnlockExclusivePokemon(s16 pokeID)
{
s32 index;
s32 pokeID_s32;
pokeID_s32 = pokeID;
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gExclusivePokemon[index].poke_id == pokeID_s32)
gUnknown_203B498->Exclusives[index] = TRUE;
}
}
void WriteExclusivePokemon(struct unkStruct_8094924 *r0)
{
s32 index;
u8 *puVar2;
u8 stack_0;
u8 stack_1;
u8 stack_2;
u8 neg_1;
u8 zero;
neg_1 = -1;
zero = 0;
SaveIntegerBits(r0, gUnknown_203B498, 1);
for(index = 0; index < 424; index++)
{
stack_0 = sub_8098134(index);
SaveIntegerBits(r0, &stack_0, 1);
}
for(index = 0; index < 64; index++)
{
stack_1 = sub_8098100(index);
SaveIntegerBits(r0, &stack_1, 1);
}
for(index = 0; index < 31; index++)
{
stack_2 = sub_80981A0(index);
SaveIntegerBits(r0, &stack_2, 1);
}
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
if(gUnknown_203B498->Exclusives[index])
puVar2 = &neg_1;
else
puVar2 = &zero;
SaveIntegerBits(r0, puVar2, 1);
}
}
void ReadExclusivePokemon(struct unkStruct_8094924 *r0)
{
s32 index;
u8 stack_0;
u8 stack_1;
u8 stack_2;
u8 stack_3;
memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData));
RestoreIntegerBits(r0, gUnknown_203B498, 1);
for(index = 0; index < 424; index++)
{
RestoreIntegerBits(r0, &stack_0, 1);
if(stack_0)
sub_80980B4(index);
}
for(index = 0; index < 64; index++)
{
RestoreIntegerBits(r0, &stack_1, 1);
if(stack_1)
sub_8097FA8(index);
}
for(index = 0; index < 31; index++)
{
RestoreIntegerBits(r0, &stack_2, 1);
if(stack_2)
sub_8098170(index);
}
for(index = 0; index < NUM_EXCLUSIVE_POKEMON; index++)
{
RestoreIntegerBits(r0, &stack_3, 1);
do; while(0); // do/while needed for matching - jiang
gUnknown_203B498->Exclusives[index] = 1 & stack_3;
}
sub_8097FF8();
}

View File

@@ -8,6 +8,8 @@
#include "text.h"
#include "menu_input.h"
EWRAM_DATA_2 struct FelicityBankWork *gFelicityBankWork = {0};
extern u32 gUnknown_202DE30;
extern u8 gUnknown_202E1C8[];
extern u8 gUnknown_202E5D8[];
@@ -421,4 +423,4 @@ void DrawTeamMoneyBox(u32 param_1)
xxx_call_draw_string(6, 0, &gUnknown_80DB738, param_1, 0); // Money
sub_8012BC4(42, 12, gTeamInventory_203B460->teamMoney, 5, 5, param_1);
sub_80073E0(param_1);
}
}

View File

@@ -11,7 +11,7 @@ EWRAM_DATA_2 bool8 *gFriendAreas = {0};
extern bool8 *gFriendAreas;
extern u32 gFriendAreaDescriptions[];
extern u8 *gFriendAreaDescriptions[];
extern const char *gFriendAreaNames[];
extern const char gUnknown_81098A4;
extern const char gUnknown_81098AC;
@@ -504,7 +504,7 @@ u8 GetFriendAreaUnlockCondition(u8 index)
return gFriendAreaSettings[index].unlock_condition;
}
u32 GetFriendAreaPrice(u8 index)
s32 GetFriendAreaPrice(u8 index)
{
return gFriendAreaSettings[index].price;
}
@@ -530,7 +530,7 @@ void sub_8092578(u8 *buffer, u8 index, u8 r2)
}
}
u32 GetFriendAreaDescription(u8 index)
u8 *GetFriendAreaDescription(u8 index)
{
return gFriendAreaDescriptions[index];
}
@@ -558,3 +558,38 @@ bool8 HasAllFriendAreas(void)
return TRUE;
}
void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4)
{
struct PokemonStruct *pokeStruct;
s32 counter;
s32 iVar4;
iVar4 = 0;
for(counter = 0; counter < friendArea; counter++)
{
iVar4 += gFriendAreaSettings[counter].num_pokemon;
}
param_2->unk8 = iVar4;
param_2->hasFriendArea = gFriendAreas[counter];
if (param_2->hasFriendArea != 0) {
param_2->unk2 = 0;
param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon;
for(counter = 0; counter < param_2->numPokemon; counter++, iVar4++)
{
pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4];
if (((((u8)pokeStruct->unk0 & 1) != 0) &&
((param_3 == 0 || (!pokeStruct->isTeamLeader)))) &&
((param_4 == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) {
param_2->unk2++;
}
}
}
else {
param_2->unk2 = 0;
param_2->numPokemon = 0;
}
}

View File

@@ -3,6 +3,7 @@
#include "constants/monster.h"
#include "constants/wonder_mail.h"
#include "text.h"
#include "text_util.h"
#include "input.h"
#include "item.h"
#include "team_inventory.h"
@@ -316,7 +317,6 @@ extern void sub_8035CF4(struct MenuStruct *, u32, u32);
extern s32 sub_8037B28(u32);
extern s32 sub_8037D64(u32, void *, void *);
extern s32 sub_80381F4(u32, void *, void *);
extern void sub_80922B4(u8 *buffer, u8 *string, s32 size);
extern s32 CountMailType(u8 mailType);
extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32);
@@ -1188,8 +1188,8 @@ void sub_8032828(void)
gUnknown_203B33C->unk53C.moneyReward = 0;
mail = GetMailatIndex(GetMailIndex(6, gUnknown_203B33C->unk420));
// ABSOLUTELY GENIUS
if (mail->unk20.id != ITEM_NOTHING)
gUnknown_203B33C->unk53C.itemRewards[0] = mail->unk20.id;
if (mail->item.id != ITEM_NOTHING)
gUnknown_203B33C->unk53C.itemRewards[0] = mail->item.id;
else
gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING;
gUnknown_203B33C->unk53C.quantity = 1;
@@ -2691,7 +2691,7 @@ void sub_8034F88(void)
case 6:
mail = GetMailatIndex(gUnknown_203B33C->unk218);
if(gUnknown_203B33C->item.id != ITEM_NOTHING)
mail->unk20 = gUnknown_203B33C->item;
mail->item = gUnknown_203B33C->item;
gTeamInventory_203B460->teamStorage[gUnknown_203B33C->item.id]--;
SetFriendRescueMenuState(0x75);
break;
@@ -2892,7 +2892,7 @@ void sub_8035210(void)
if(gUnknown_203B33C->unk528 == 0x13)
{
mail = GetMailatIndex(GetFirstIndexofMailType(5));
if(mail->unk20.id != ITEM_NOTHING)
if(mail->item.id != ITEM_NOTHING)
SetFriendRescueMenuState(0x53);
else
SetFriendRescueMenuState(0x55);
@@ -3034,4 +3034,4 @@ void nullsub_50(void)
void nullsub_51(void)
{
}
}

View File

@@ -3,17 +3,20 @@
#include "input.h"
#include "debug.h"
#include "code_80A26CC.h"
#include "event_flag.h"
extern u32 gUnknown_20398A8;
extern u32 gUnknown_20398AC;
extern u32 gUnknown_20398B0;
extern u32 gUnknown_20398B4;
extern u8 gUnknown_20398B8;
extern u8 gUnknown_20398B9;
extern u8 gUnknown_20398BA;
extern u16 gUnknown_20398BE;
extern u32 gUnknown_20398C0;
extern s16 gUnknown_20398C4;
EWRAM_DATA u32 gUnknown_20398A8 = {0};
EWRAM_DATA u32 gUnknown_20398AC = {0};
EWRAM_DATA u32 gUnknown_20398B0 = {0};
EWRAM_DATA u32 gUnknown_20398B4 = {0};
EWRAM_DATA u8 gUnknown_20398B8 = {0};
EWRAM_DATA u8 gUnknown_20398B9 = {0};
EWRAM_DATA u8 gUnknown_20398BA = {0};
EWRAM_DATA UNUSED static u8 gUnknown_20398BB = {0}; // NOTE: Needed for matching but not used
EWRAM_DATA u16 gUnknown_20398BC = {0};
EWRAM_DATA u16 gUnknown_20398BE = {0};
EWRAM_DATA u32 gUnknown_20398C0 = {0};
EWRAM_DATA s16 gUnknown_20398C4 = {0};
EWRAM_DATA_2 u8 gUnknown_203B49C = {0};
EWRAM_DATA_2 u8 gUnknown_203B49D = {0};
@@ -66,7 +69,6 @@ extern void GroundEffect_Action();
extern s32 sub_8001658(u8, u8);
extern s32 sub_8001784(u8, u8, u8);
extern void sub_809CB8C();
extern void sub_8001D88();
extern void sub_80015C0(u8, u8);
extern void sub_80018D8(u8, u8, u32);
extern void sub_800199C(u8, u8, u8, s32);
@@ -75,13 +77,10 @@ extern void GeneratePelipperJobs();
extern void sub_80961B4();
extern void ClearAllItems_8091FB4();
extern const char *sub_80A2B18(s16);
extern bool8 sub_8001CC4(u8, u8, u8);
extern void ChooseKecleonShopInventory(u32);
extern bool8 sub_80023E4(u32);
extern void FadeOutAllMusic(u16);
extern u8 sub_809C730();
extern s16 sub_80A2750(s16);
extern u8 sub_8001D44(u32, u32, s32);
void sub_8098BDC(void)
{

View File

@@ -151,7 +151,7 @@ void sub_801EA28(void)
{
switch (gGulpinShopWork->state) {
case 0:
sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, &gUnknown_80DC164, 0);
sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, gUnknown_80DC164, 0);
break;
case 1:
sub_801F1B0(1, 0);
@@ -331,4 +331,4 @@ void sub_801EDC0(void)
break;
}
}
}
}

1175
src/gulpin_shop_1.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,7 @@
#include "memory.h"
#include "text.h"
#include "input.h"
#include "menu_input.h"
#define MAX_HINTS 5
@@ -42,24 +43,15 @@ extern struct Hints gGameHints[MAX_HINTS];
extern u8 gUnknown_80DC0D4[MAX_HINTS];
extern void sub_801E714(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);
extern void DisplayChosenHint(void);
extern void sub_80073E0(u32);
extern void sub_80073B8(u32);
extern s32 sub_8013800(struct MenuInputStruct *, u32);
extern void sub_8008C54(u32);
void DrawHintSelectionMenu(void);
void sub_801E594(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)
{

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -11,11 +11,26 @@
#include "menu_input.h"
#include "text.h"
struct unkStruct_203B214
{
// size: 0xA0
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
u8 unk9C[4];
};
extern struct unkStruct_203B210 *gUnknown_203B210;
extern struct unkStruct_203B214 *gUnknown_203B214;
extern u16 gUnknown_203B218;
extern struct unkStruct_203B214 *gUnknown_203B21C;
extern u16 gUnknown_203B220;
extern struct unkStruct_203B224 *gUnknown_203B224;
extern u16 gUnknown_203B228;
extern u16 gUnknown_203B22A;
extern u8 gUnknown_80DB8E4[];
extern u8 gUnknown_80DB8EC[];
extern u8 gUnknown_80DB92C[];
@@ -46,7 +61,6 @@ extern void DrawTeamMoneyBox(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8013800(struct MenuInputStruct *, u32);
extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32);
extern s32 sub_801AED0(s32);
void sub_8007B7C(s32, s32, s32, s32, s32);
@@ -59,29 +73,9 @@ extern s32 sub_801AEA8(void);
s32 sub_801AE24(u32);
extern struct unkStruct_203B224 *gUnknown_203B224;
struct unkStruct_203B214
{;
// size: 0xA0
struct MenuInputStruct input;
u32 unk34;
struct UnkTextStruct2 *unk38;
struct UnkTextStruct2 unk3C[4];
u8 unk9C[4];
};
extern struct unkStruct_203B214 *gUnknown_203B214;
extern struct unkStruct_203B214 *gUnknown_203B21C;
extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32);
extern u8 sub_8019FB0(void);
extern u8 sub_80138B8(struct MenuInputStruct *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(struct MenuInputStruct *);
extern void sub_8013660(struct MenuInputStruct *);
extern struct UnkTextStruct2 gUnknown_80DB8CC;
extern struct UnkTextStruct2 gUnknown_80DB8B4;
@@ -91,10 +85,8 @@ 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(struct MenuInputStruct*);
extern void sub_801A064(void);
extern void sub_801A0D8(void);
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern u8 sub_801A37C(void);
extern void sub_801A010(void);

View File

@@ -7,6 +7,7 @@
#include "memory.h"
#include "menu.h"
#include "text.h"
#include "text_util.h"
#include "pokemon.h"
#include "save.h"
#include "code_800D090.h"
@@ -50,13 +51,11 @@ extern u8 *sub_8098FB4();
extern u8 *GetDungeonLocationInfo(void);
extern u32 GetNumAdventures(void);
extern void PrintDungeonLocationtoBuffer(u8 *, u8 *);
extern void sub_80922B4(u8 *, const u8 *, u32);
extern u32 sub_8001658(u32, u32);
extern void sub_80073E0(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_808D930(u8 *, s16);
extern void xxx_format_string(u8 *, u8 *, u8 *, u32);
extern void SetBGPaletteBufferColorArray(s32, s32);

View File

@@ -8,6 +8,7 @@
#include "pokemon.h"
#include "random.h"
#include "text.h"
#include "text_util.h"
#include "team_inventory.h"
#include "menu_input.h"
@@ -201,7 +202,6 @@ void sub_8024DBC(void);
void sub_8024E30(void);
void sub_801AEE4(u32, u32);
void sub_808F734(struct PokemonStruct *, s16);
void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
u32 sub_801602C(u32 r0, u8 *name);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801A6E8(u32);

View File

@@ -60,19 +60,12 @@ extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern u8 sub_80A2740(s32 r0);
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(void *);
extern void sub_80304C8();
extern void AddMenuCursorSprite(struct MenuInputStruct *);
extern void DrawDojoCourseList(void);
extern u8 sub_80138B8(void *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(void *);
extern void sub_8013660(void *);
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_803053C(void);
extern u8 sub_80306A4(void);
extern s32 sub_80144A4(s32 *);
@@ -355,4 +348,4 @@ s32 sub_8030668(void)
bool8 sub_80306A4(void)
{
return FALSE;
}
}

View File

@@ -17,30 +17,128 @@ extern struct UnkTextStruct1 gUnknown_2027370[4];
extern u8 gUnknown_80D4828[];
extern void PlayMenuSoundEffect(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(struct MenuInputStruct *, s32);
extern void sub_80073E0(u32);
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(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 *);
extern void nullsub_34(struct MenuInputStructSub *r0);
const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED };
u32 sub_8012A64(struct MenuInputStructSub *r0, s32 r1)
{
if(r0 == NULL)
{
return sub_8012AE8();
}
if(r1 != -1)
{
nullsub_34(r0);
}
if(r0->a_button != 0)
{
r0->a_button = 0;
return INPUT_A_BUTTON;
}
else if(r0->b_button == 0)
{
return sub_8012AE8();
}
else
{
r0->b_button = 0;
return INPUT_B_BUTTON;
}
}
s32 GetKeyPress(struct MenuInputStruct *r0)
{
if(r0 != NULL)
{
if(r0->unk28.a_button != 0)
{
return INPUT_A_BUTTON;
}
if(r0->unk28.b_button != 0)
{
return INPUT_B_BUTTON;
}
if(r0->unk28.dpad_left != 0)
{
return INPUT_DPAD_LEFT;
}
if(r0->unk28.dpad_right != 0)
{
return INPUT_DPAD_RIGHT;
}
}
return sub_8012AE8();
}
s32 sub_8012AE8(void)
{
if ((gRealInputs.held & R_BUTTON) != 0) {
if ((gRealInputs.pressed & A_BUTTON) != 0) {
return INPUT_R_A_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_UP) != 0) {
return INPUT_R_DPAD_UP_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_DOWN) != 0) {
return INPUT_R_DPAD_DOWN_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_LEFT) != 0) {
return INPUT_R_DPAD_LEFT_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_RIGHT) != 0) {
return INPUT_R_DPAD_RIGHT_BUTTONS;
}
if ((gRealInputs.repeated & R_BUTTON) != 0) {
return INPUT_R_BUTTON;
}
}
else
{
if ((gRealInputs.pressed & A_BUTTON) != 0) {
return INPUT_A_BUTTON;
}
if ((gRealInputs.pressed & B_BUTTON) != 0) {
return INPUT_B_BUTTON;
}
if ((gRealInputs.pressed & SELECT_BUTTON) != 0) {
return INPUT_SELECT_BUTTON;
}
if ((gRealInputs.pressed & START_BUTTON) != 0) {
return INPUT_START_BUTTON;
}
if ((gRealInputs.repeated & DPAD_UP) != 0) {
return INPUT_DPAD_UP;
}
if ((gRealInputs.repeated & DPAD_DOWN) != 0) {
return INPUT_DPAD_DOWN;
}
if ((gRealInputs.repeated & DPAD_LEFT) != 0) {
return INPUT_DPAD_LEFT;
}
if ((gRealInputs.repeated & DPAD_RIGHT) != 0) {
return INPUT_DPAD_RIGHT;
}
if ((gRealInputs.repeated & L_BUTTON) != 0) {
return INPUT_L_BUTTON;
}
}
return INPUT_NONE;
}
void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6)
{
s32 iVar1;

View File

@@ -2,20 +2,10 @@
#include "constants/input.h"
#include "input.h"
#include "text.h"
#include "menu_input.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)
@@ -170,7 +160,7 @@ s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2)
return (iVar2 + (iVar1 >> 8));
}
void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4)
void sub_8013818(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4)
{
param_1->unk0 = param_4;
param_1->unk22 = param_2;
@@ -185,7 +175,7 @@ void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3
}
void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4)
void sub_8013848(struct MenuInputStruct *param_1, s32 param_2, u32 param_3, s32 param_4)
{
param_1->unk0 = param_4;
param_1->unk22 = param_2;
@@ -199,7 +189,7 @@ void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s3
sub_80137F8(param_1,0x18);
}
void sub_8013878(struct MenuInputStruct *param_1, int param_2)
void sub_8013878(struct MenuInputStruct *param_1, s32 param_2)
{
if (param_2 < 0) {
param_2 = 0;
@@ -280,7 +270,8 @@ bool8 sub_8013938(struct MenuInputStruct *param_1)
}
}
void sub_8013984(struct MenuInputStruct * param_1) {
void sub_8013984(struct MenuInputStruct * param_1)
{
s32 iVar2;
s32 iVar4;
struct UnkTextStruct1 *ptr;

View File

@@ -1,113 +0,0 @@
#include "global.h"
#include "constants/input.h"
#include "input.h"
extern void nullsub_34(struct MenuInputStructSub *r0);
u32 sub_8012AE8(void);
u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1)
{
if(r0 == NULL)
{
return sub_8012AE8();
}
if(r1 != -1)
{
nullsub_34(r0);
}
if(r0->a_button != 0)
{
r0->a_button = 0;
return INPUT_A_BUTTON;
}
else if(r0->b_button == 0)
{
return sub_8012AE8();
}
else
{
r0->b_button = 0;
return INPUT_B_BUTTON;
}
}
u32 GetKeyPress(struct MenuInputStruct *r0)
{
if(r0 != NULL)
{
if(r0->unk28.a_button != 0)
{
return INPUT_A_BUTTON;
}
if(r0->unk28.b_button != 0)
{
return INPUT_B_BUTTON;
}
if(r0->unk28.dpad_left != 0)
{
return INPUT_DPAD_LEFT;
}
if(r0->unk28.dpad_right != 0)
{
return INPUT_DPAD_RIGHT;
}
}
return sub_8012AE8();
}
u32 sub_8012AE8(void)
{
if ((gRealInputs.held & R_BUTTON) != 0) {
if ((gRealInputs.pressed & A_BUTTON) != 0) {
return INPUT_R_A_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_UP) != 0) {
return INPUT_R_DPAD_UP_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_DOWN) != 0) {
return INPUT_R_DPAD_DOWN_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_LEFT) != 0) {
return INPUT_R_DPAD_LEFT_BUTTONS;
}
if ((gRealInputs.repeated & DPAD_RIGHT) != 0) {
return INPUT_R_DPAD_RIGHT_BUTTONS;
}
if ((gRealInputs.repeated & R_BUTTON) != 0) {
return INPUT_R_BUTTON;
}
}
else
{
if ((gRealInputs.pressed & A_BUTTON) != 0) {
return INPUT_A_BUTTON;
}
if ((gRealInputs.pressed & B_BUTTON) != 0) {
return INPUT_B_BUTTON;
}
if ((gRealInputs.pressed & SELECT_BUTTON) != 0) {
return INPUT_SELECT_BUTTON;
}
if ((gRealInputs.pressed & START_BUTTON) != 0) {
return INPUT_START_BUTTON;
}
if ((gRealInputs.repeated & DPAD_UP) != 0) {
return INPUT_DPAD_UP;
}
if ((gRealInputs.repeated & DPAD_DOWN) != 0) {
return INPUT_DPAD_DOWN;
}
if ((gRealInputs.repeated & DPAD_LEFT) != 0) {
return INPUT_DPAD_LEFT;
}
if ((gRealInputs.repeated & DPAD_RIGHT) != 0) {
return INPUT_DPAD_RIGHT;
}
if ((gRealInputs.repeated & L_BUTTON) != 0) {
return INPUT_L_BUTTON;
}
}
return INPUT_NONE;
}

View File

@@ -14,7 +14,7 @@ struct unkStruct_203B25C
u32 chosenHintIndex;
struct GameOptions newOptions;
u32 menuAction;
struct MenuStruct unk1C;
struct MenuStruct menu;
struct MenuItem menuItems[8];
u16 unkAC[8];
struct UnkTextStruct2 unkBC[4];
@@ -23,13 +23,8 @@ struct unkStruct_203B25C
struct unkStruct_203B260
{
struct GameOptions *optionsMenu;
u32 unk4;
u8 unk8;
u8 fill9[0x10 - 0x9];
u32 unk10;
u8 fill14[0x28 - 0x14];
s16 unk28;
u8 fill2A[0x44 - 0x2A];
struct MenuInputStructSub unk4;
struct MenuInputStruct input;
u32 unk44;
struct UnkTextStruct2 * unk48;
struct UnkTextStruct2 unk4C[4];
@@ -60,13 +55,9 @@ extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern s32 sub_8008ED0(u8 *);
extern s32 sub_8013800(u32 *, u32);
extern void CreateOthersMenu(void);
extern void sub_80078A4(u32, u32, u32, u32, u32);
extern u8 sub_80138B8(u32 *, u32);
void PlayMenuSoundEffect(u32);
s32 sub_8012AE8(void);
void sub_801317C(u32 *);
extern void sub_8013818(void *, u32, u32, u32);
void CreateOptionsMenu(void);
void nullsub_38(void);
extern void SetOptionsMenuState(u32);
@@ -166,235 +157,58 @@ void SetOptionsMenuState(u32 newState)
sub_801DED0();
}
#ifdef NONMATCHING
void sub_801DD84(void)
{
s32 iVar3;
s32 index;
sub_8006518(gUnknown_203B25C->unkBC);
switch(gUnknown_203B25C->state)
{
case 0:
case OPTIONS_MENU_INIT:
CreateOthersMenu();
// TODO probably could be cleaned up to actually match
iVar3 = 0;
if (gUnknown_203B25C->unkAC[iVar3] == 0) {
gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction;
}
else {
do {
iVar3++;
if(iVar3 > 7)
break;
if(gUnknown_203B25C->unkAC[iVar3] == 0){
gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction;
break;
}
} while (iVar3 < 8);
}
for(iVar3 = 0; iVar3 < 4; iVar3++)
for(index = 0; index < 8; index++)
{
gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFCC;
if(gUnknown_203B25C->unkAC[index] == 0)
{
gUnknown_203B25C->menuAction = gUnknown_203B25C->menuItems[index].menuAction;
break;
}
}
gUnknown_203B25C->unkBC[0] = gUnknown_80DBFB0;
sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems);
gUnknown_203B25C->unkBC[0].unk0c = 0xA;
break;
case 1:
CreateOthersMenu();
for(iVar3 = 0; iVar3 < 4; iVar3++)
for(index = 0; index < 4; index++)
{
gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0;
gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0;
}
gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC;
sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems);
gUnknown_203B25C->unkBC[0].unk0c = 0xA;
gUnknown_203B25C->unkBC[0].unkC = 0xA;
break;
case OPTIONS_MENU_MAIN:
CreateOthersMenu();
for(index = 0; index < 4; index++)
{
gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0;
}
gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC;
sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems);
gUnknown_203B25C->unkBC[0].unkC = 0xA;
break;
default:
for(iVar3 = 0; iVar3 < 4; iVar3++)
for(index = 0; index < 4; index++)
{
gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0;
gUnknown_203B25C->unkBC[index] = gUnknown_80DBFB0;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B25C->unkBC, 1, 1);
}
#else
NAKED
void sub_801DD84(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
"\tmov r6, r8\n"
"\tpush {r6,r7}\n"
"\tldr r4, _0801DDAC\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xBC\n"
"\tbl sub_8006518\n"
"\tldr r0, [r4]\n"
"\tldr r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbeq _0801DDB4\n"
"\tcmp r0, 0x1\n"
"\tbeq _0801DE38\n"
"\tmovs r3, 0\n"
"\tadds r7, r4, 0\n"
"\tldr r2, _0801DDB0\n"
"\tb _0801DE90\n"
"\t.align 2, 0\n"
"_0801DDAC: .4byte gUnknown_203B25C\n"
"_0801DDB0: .4byte gUnknown_80DBFB0\n"
"_0801DDB4:\n"
"\tbl CreateOthersMenu\n"
"\tmovs r3, 0\n"
"\tldr r1, [r4]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xAC\n"
"\tldrh r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbne _0801DDCE\n"
"\tldr r0, [r1, 0x70]\n"
"\tstr r0, [r1, 0x18]\n"
"\tadds r7, r4, 0\n"
"\tb _0801DDF2\n"
"_0801DDCE:\n"
"\tadds r3, 0x1\n"
"\tldr r7, _0801DE2C\n"
"\tcmp r3, 0x7\n"
"\tbgt _0801DDF2\n"
"\tldr r2, [r7]\n"
"\tlsls r0, r3, 1\n"
"\tadds r1, r2, 0\n"
"\tadds r1, 0xAC\n"
"\tadds r1, r0\n"
"\tldrh r0, [r1]\n"
"\tcmp r0, 0\n"
"\tbne _0801DDCE\n"
"\tlsls r0, r3, 3\n"
"\tadds r1, r2, 0\n"
"\tadds r1, 0x70\n"
"\tadds r1, r0\n"
"\tldr r0, [r1]\n"
"\tstr r0, [r2, 0x18]\n"
"_0801DDF2:\n"
"\tldr r0, _0801DE30\n"
"\tmov r9, r0\n"
"\tldr r2, _0801DE2C\n"
"\tmov r12, r2\n"
"\tldr r3, _0801DE34\n"
"\tmov r8, r3\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0x3\n"
"_0801DE02:\n"
"\tmov r4, r12\n"
"\tldr r1, [r4]\n"
"\tadds r1, r2\n"
"\tadds r1, 0xBC\n"
"\tmov r0, r8\n"
"\tldm r0!, {r4-r6}\n"
"\tstm r1!, {r4-r6}\n"
"\tldm r0!, {r4-r6}\n"
"\tstm r1!, {r4-r6}\n"
"\tadds r2, 0x18\n"
"\tsubs r3, 0x1\n"
"\tcmp r3, 0\n"
"\tbge _0801DE02\n"
"\tldr r1, [r7]\n"
"\tadds r1, 0xBC\n"
"\tmov r0, r9\n"
"\tldm r0!, {r2,r5,r6}\n"
"\tstm r1!, {r2,r5,r6}\n"
"\tldm r0!, {r3-r5}\n"
"\tstm r1!, {r3-r5}\n"
"\tb _0801DE70\n"
"\t.align 2, 0\n"
"_0801DE2C: .4byte gUnknown_203B25C\n"
"_0801DE30: .4byte gUnknown_80DBFCC\n"
"_0801DE34: .4byte gUnknown_80DBFB0\n"
"_0801DE38:\n"
"\tbl CreateOthersMenu\n"
"\tmov r8, r4\n"
"\tldr r6, _0801DE88\n"
"\tmov r12, r6\n"
"\tmov r7, r8\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0x3\n"
"_0801DE48:\n"
"\tmov r0, r8\n"
"\tldr r1, [r0]\n"
"\tadds r1, r2\n"
"\tadds r1, 0xBC\n"
"\tmov r0, r12\n"
"\tldm r0!, {r4-r6}\n"
"\tstm r1!, {r4-r6}\n"
"\tldm r0!, {r4-r6}\n"
"\tstm r1!, {r4-r6}\n"
"\tadds r2, 0x18\n"
"\tsubs r3, 0x1\n"
"\tcmp r3, 0\n"
"\tbge _0801DE48\n"
"\tldr r1, [r7]\n"
"\tadds r1, 0xBC\n"
"\tldr r0, _0801DE8C\n"
"\tldm r0!, {r2-r4}\n"
"\tstm r1!, {r2-r4}\n"
"\tldm r0!, {r2,r5,r6}\n"
"\tstm r1!, {r2,r5,r6}\n"
"_0801DE70:\n"
"\tldr r1, [r7]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0xBC\n"
"\tadds r1, 0x6C\n"
"\tbl sub_8012CAC\n"
"\tldr r0, [r7]\n"
"\tadds r0, 0xC8\n"
"\tmovs r1, 0xA\n"
"\tstrh r1, [r0]\n"
"\tb _0801DEAC\n"
"\t.align 2, 0\n"
"_0801DE88: .4byte gUnknown_80DBFB0\n"
"_0801DE8C: .4byte gUnknown_80DBFCC\n"
"_0801DE90:\n"
"\tldr r0, [r7]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r0, r1\n"
"\tadds r0, 0xBC\n"
"\tadds r1, r2, 0\n"
"\tldm r1!, {r4-r6}\n"
"\tstm r0!, {r4-r6}\n"
"\tldm r1!, {r4-r6}\n"
"\tstm r0!, {r4-r6}\n"
"\tadds r3, 0x1\n"
"\tcmp r3, 0x3\n"
"\tble _0801DE90\n"
"_0801DEAC:\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, _0801DECC\n"
"\tldr r0, [r0]\n"
"\tadds r0, 0xBC\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r3,r4}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0801DECC: .4byte gUnknown_203B25C");
}
#endif
void sub_801DED0(void)
{
switch(gUnknown_203B25C->state) {
case OPTIONS_MENU_INIT:
case OPTIONS_MENU_MAIN:
gUnknown_203B25C->unk1C.unk0 = gOthers_MenuOption;
sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0);
gUnknown_203B25C->menu.unk0 = gOthers_MenuOption;
sub_8012D60(&gUnknown_203B25C->menu,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->menuAction,0);
break;
case OPTIONS_MENU_PRE_HINT_SELECTION:
sub_801E3F0(0);
@@ -458,8 +272,8 @@ void HandleOthersMenu(void)
s32 menuAction;
menuAction = 0;
if (sub_8012FD8(&gUnknown_203B25C->unk1C) == '\0') {
sub_8013114(&gUnknown_203B25C->unk1C,&menuAction);
if (sub_8012FD8(&gUnknown_203B25C->menu) == '\0') {
sub_8013114(&gUnknown_203B25C->menu,&menuAction);
gUnknown_203B25C->menuAction = menuAction;
}
switch(menuAction)
@@ -570,7 +384,7 @@ bool8 sub_801E198(struct GameOptions *optionsMenu)
sub_8012D08(gUnknown_203B260->unk48,1);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B260->unk4C,1,1);
sub_8013818(&gUnknown_203B260->unk10,1,1,gUnknown_203B260->unk44);
sub_8013818(&gUnknown_203B260->input,1,1,gUnknown_203B260->unk44);
nullsub_38();
CreateOptionsMenu();
return TRUE;
@@ -591,7 +405,7 @@ u32 sub_801E218(void)
PlayMenuSoundEffect(0);
return 3;
case INPUT_DPAD_LEFT:
if (gUnknown_203B260->unk28 == 0)
if (gUnknown_203B260->input.menuIndex == 0)
{
if (gUnknown_203B260->optionsMenu->windowColor == WINDOW_COLOR_BLUE) {
gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_GREEN;
@@ -604,7 +418,7 @@ u32 sub_801E218(void)
}
break;
case INPUT_DPAD_RIGHT:
if(gUnknown_203B260->unk28 == 0)
if(gUnknown_203B260->input.menuIndex == 0)
{
if (gUnknown_203B260->optionsMenu->windowColor > WINDOW_COLOR_RED) {
gUnknown_203B260->optionsMenu->windowColor = WINDOW_COLOR_BLUE;
@@ -618,7 +432,7 @@ u32 sub_801E218(void)
}
// == 1 is needed for matching
if ((sub_80138B8(&gUnknown_203B260->unk10,1) != 0) || (flag == TRUE)) {
if ((sub_80138B8(&gUnknown_203B260->input,1) != 0) || (flag == TRUE)) {
nullsub_38();
CreateOptionsMenu();
return 1;
@@ -654,7 +468,7 @@ void CreateOptionsMenu(void)
sub_8008C54(gUnknown_203B260->unk44);
sub_80073B8(gUnknown_203B260->unk44);
xxx_call_draw_string(0x10,0,gWindowBGTitle,gUnknown_203B260->unk44,0);
y = sub_8013800(&gUnknown_203B260->unk10,0);
y = sub_8013800(&gUnknown_203B260->input,0);
xxx_call_draw_string(8,y,gUnknown_80DC064,gUnknown_203B260->unk44,0);
switch(gUnknown_203B260->optionsMenu->windowColor)

View File

@@ -8,6 +8,18 @@
#include "memory.h"
#include "text.h"
#include "menu_input.h"
#include "dungeon_global_data.h"
#include "pokemon.h"
#include "code_8094F88.h"
struct unkSprite
{
u16 unk0;
u16 unk2;
u16 unk4;
u16 unk6;
};
struct unkStruct_203B35C
{
@@ -15,13 +27,26 @@ struct unkStruct_203B35C
u32 unk0;
u32 linkStatus;
u32 state;
u8 fillC[0x1C - 0xC];
struct unkSprite unkC;
u32 unk14;
u8 fill18[0x1C - 0x18];
struct MenuStruct unk1C[4];
struct UnkTextStruct2 unk15C[4];
u8 unk1BC[4];
u32 unk1C0[9];
struct unkStruct_8035D94 unk1BC[2];
struct unkStruct_203B480 unk1CC;
struct unkStruct_203B480 unk1FC;
struct unkStruct_203B480 unk22C;
struct unkStruct_203B480 unk25C;
struct unkStruct_203B480 unk28C;
struct PokemonStruct unk2BC;
struct unkStruct_203B480 unk314;
struct PokemonStruct unk344;
s32 unk39C;
u8 fill3A0[0x450 - 0x3A0];
s32 unk450;
};
extern struct unkStruct_203B35C *gUnknown_203B35C;
EWRAM_DATA_2 struct unkStruct_203B35C *gUnknown_203B35C = {0};
const struct UnkTextStruct2 gUnknown_80E653C = {
0x00, 0x00, 0x00, 0x00,
@@ -440,13 +465,21 @@ extern void TransferBGPaletteBuffer();
extern void xxx_call_update_bg_vram();
extern void sub_8009908();
extern void xxx_call_update_bg_sound_input();
extern s32 sub_8037D64(u32 mode, void *, void *);
extern s32 sub_80381F4(u32 mode, void *, void *);
extern void sub_8037810(void);
extern void sub_8011830(void);
extern s32 sub_8037B28(u32);
s32 sub_8035D3C(void);
extern s32 sub_8035D74(void);
extern void xxx_call_start_bg_music(void);
extern void xxx_draw_string_80144C4(void);
extern void AddSprite(struct unkSprite *, u32, u32, u32);
#ifdef NONMATCHING
void sub_8036FDC(s32 param_1)
{
int iVar3;
int iVar4;
int index1;
int index2;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
@@ -457,143 +490,22 @@ void sub_8036FDC(s32 param_1)
}
gUnknown_203B35C->unk0 = param_1;
gUnknown_203B35C->linkStatus = 0;
gUnknown_203B35C->linkStatus = COMMS_GOOD;
gUnknown_203B35C->state = 0;
iVar3 = 0;
do {
gUnknown_203B35C->unk1C0[iVar3 * 2] = 0;
// Add statements of index flip but ends in same result
gUnknown_203B35C->unk1BC[iVar3 * 8] = 0;
iVar3 = iVar3 + 1;
} while (iVar3 < 2);
for(iVar4 = 0; iVar4 < 4; iVar4++){
gUnknown_203B35C->unk15C[iVar4] = gUnknown_80E653C;
for(index1 = 0; index1 < 2; index1++)
{
gUnknown_203B35C->unk1BC[index1].numItems = 0;
gUnknown_203B35C->unk1BC[index1].itemIndex.itemIndex_u8 = ITEM_NOTHING;
}
for(index2 = 0; index2 < 4; index2++){
gUnknown_203B35C->unk15C[index2] = gUnknown_80E653C;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B35C->unk15C,1,1);
SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0,
6,0);
SetMenuItems(gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0,6,0);
sub_8035CF4(gUnknown_203B35C->unk1C,0,1);
sub_80376CC();
}
#else
NAKED
void sub_8036FDC(s32 param_1)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r8\n"
"\tpush {r7}\n"
"\tsub sp, 0x10\n"
"\tadds r6, r0, 0\n"
"\tbl ResetUnusedInputStruct\n"
"\tmovs r0, 0\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tmovs r0, 0\n"
"\tbl ResetSprites\n"
"\tldr r5, _080370C0\n"
"\tldr r0, [r5]\n"
"\tcmp r0, 0\n"
"\tbne _08037016\n"
"\tldr r4, _080370C4\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0x8\n"
"\tbl MemoryAlloc\n"
"\tstr r0, [r5]\n"
"\tmovs r1, 0\n"
"\tadds r2, r4, 0\n"
"\tbl MemoryFill8\n"
"_08037016:\n"
"\tldr r0, [r5]\n"
"\tstr r6, [r0]\n"
"\tmovs r1, 0\n"
"\tstr r1, [r0, 0x4]\n"
"\tstr r1, [r0, 0x8]\n"
"\tmovs r3, 0\n"
"\tadds r7, r5, 0\n"
"\tmovs r6, 0xE0\n"
"\tlsls r6, 1\n"
"\tmovs r4, 0\n"
"\tmovs r5, 0xDE\n"
"\tlsls r5, 1\n"
"_0803702E:\n"
"\tldr r0, [r7]\n"
"\tlsls r2, r3, 3\n"
"\tadds r1, r0, r6\n"
"\tadds r1, r2\n"
"\tstr r4, [r1]\n"
"\tadds r0, r2\n"
"\tadds r0, r5\n"
"\tstrb r4, [r0]\n"
"\tadds r3, 0x1\n"
"\tcmp r3, 0x1\n"
"\tble _0803702E\n"
"\tldr r0, _080370C0\n"
"\tmov r12, r0\n"
"\tmovs r5, 0xAE\n"
"\tlsls r5, 1\n"
"\tmov r8, r5\n"
"\tldr r4, _080370C8\n"
"\tmovs r3, 0\n"
"\tmovs r2, 0x3\n"
"_08037054:\n"
"\tmov r6, r12\n"
"\tldr r1, [r6]\n"
"\tadds r1, r3\n"
"\tadd r1, r8\n"
"\tadds r0, r4, 0\n"
"\tldm r0!, {r5-r7}\n"
"\tstm r1!, {r5-r7}\n"
"\tldm r0!, {r5-r7}\n"
"\tstm r1!, {r5-r7}\n"
"\tadds r3, 0x18\n"
"\tsubs r2, 0x1\n"
"\tcmp r2, 0\n"
"\tbge _08037054\n"
"\tmovs r6, 0\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r5, _080370C0\n"
"\tldr r0, [r5]\n"
"\tmovs r4, 0xAE\n"
"\tlsls r4, 1\n"
"\tadds r0, r4\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tldr r1, [r5]\n"
"\tadds r0, r1, 0\n"
"\tadds r0, 0x1C\n"
"\tadds r1, r4\n"
"\tldr r3, _080370CC\n"
"\tldr r2, _080370D0\n"
"\tstr r2, [sp]\n"
"\tstr r6, [sp, 0x4]\n"
"\tmovs r2, 0x6\n"
"\tstr r2, [sp, 0x8]\n"
"\tstr r6, [sp, 0xC]\n"
"\tmovs r2, 0\n"
"\tbl SetMenuItems\n"
"\tldr r0, [r5]\n"
"\tadds r0, 0x1C\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0x1\n"
"\tbl sub_8035CF4\n"
"\tbl sub_80376CC\n"
"\tadd sp, 0x10\n"
"\tpop {r3}\n"
"\tmov r8, r3\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_080370C0: .4byte gUnknown_203B35C\n"
"_080370C4: .4byte 0x00000504\n"
"_080370C8: .4byte gUnknown_80E653C\n"
"_080370CC: .4byte gUnknown_80E6CD0\n"
"_080370D0: .4byte gUnknown_80E6CE8");
}
#endif
void sub_80370D4(void)
{
@@ -753,3 +665,209 @@ struct unkStruct_203B35C *sub_80373F4(void)
{
return gUnknown_203B35C;
}
void sub_8037400(void)
{
u8 mailIndex;
void *r5;
void *r6;
s32 species;
struct unkStruct_8035D94 *puVar5;
struct unkStruct_8035D94 *puVar6;
r6 = NULL;
r5 = NULL;
sub_8037810();
sub_8011830();
gUnknown_203B35C->linkStatus = sub_8037B28(gUnknown_203B35C->unk0);
if (gUnknown_203B35C->linkStatus == COMMS_GOOD)
{
switch(gUnknown_203B35C->unk0) {
case 10:
r6 = &gUnknown_203B35C->unk39C;
r5 = &gUnknown_203B35C->unk450;
break;
case 9:
r6 = &gUnknown_203B35C->unk39C;
r5 = &gUnknown_203B35C->unk450;
break;
case 0:
{
#ifndef NONMATCING
register u32 temp1 asm("r1");
#else
u32 temp1;
#endif
puVar5 = sub_8035D94();
puVar6 = &gUnknown_203B35C->unk1BC[0];
temp1 = puVar5->numItems;
puVar6->itemIndex.itemIndex_u32 = puVar5->itemIndex.itemIndex_u32;
puVar6->numItems = temp1;
}
r6 = &gUnknown_203B35C->unk1BC[0];
r5 = &gUnknown_203B35C->unk1BC[1];
break;
case 1:
r6 = &gUnknown_203B35C->unk1BC[0];
r5 = &gUnknown_203B35C->unk1BC[1];
break;
case 7:
r6 = &gUnknown_203B35C->unk1CC;
r5 = &gUnknown_203B35C->unk1FC;
break;
case 6:
mailIndex = sub_8035D74();
gUnknown_203B35C->unk1CC = *GetMailatIndex(mailIndex);
r6 = &gUnknown_203B35C->unk1CC;
r5 = &gUnknown_203B35C->unk1FC;
break;
case 3:
r6 = &gUnknown_203B35C->unk22C;
r5 = &gUnknown_203B35C->unk25C;
break;
case 2:
mailIndex = sub_8035D74();
gUnknown_203B35C->unk22C = *GetMailatIndex(mailIndex);
r6 = &gUnknown_203B35C->unk22C;
r5 = &gUnknown_203B35C->unk25C;
break;
case 4:
mailIndex = sub_8035D74();
gUnknown_203B35C->unk28C = *GetMailatIndex(mailIndex);
if( sub_8035D3C() << 0x10 != 0xffff0000)
{
species = sub_8035D3C();
gUnknown_203B35C->unk2BC = gRecruitedPokemonRef->pokemon[(s16)species];
}
r6 = &gUnknown_203B35C->unk28C;
r5 = &gUnknown_203B35C->unk314;
break;
case 5:
r6 = &gUnknown_203B35C->unk28C;
r5 = &gUnknown_203B35C->unk314;
break;
}
gUnknown_203B35C->linkStatus = sub_8037D64(gUnknown_203B35C->unk0, r6, r5);
if (gUnknown_203B35C->linkStatus == COMMS_GOOD)
{
switch(gUnknown_203B35C->unk0) {
case 0:
case 1:
r6 = &gUnknown_203B35C->unk1BC[0];
r5 = &gUnknown_203B35C->unk1BC[1];
break;
case 2:
case 3:
r6 = &gUnknown_203B35C->unk22C;
r5 = &gUnknown_203B35C->unk25C;
break;
case 4:
case 5:
r6 = &gUnknown_203B35C->unk28C;
r5 = &gUnknown_203B35C->unk314;
break;
case 6:
case 7:
r6 = &gUnknown_203B35C->unk1CC;
r5 = &gUnknown_203B35C->unk1FC;
break;
case 9:
case 10:
r6 = &gUnknown_203B35C->unk39C;
r5 = &gUnknown_203B35C->unk450;
break;
}
gUnknown_203B35C->linkStatus = sub_80381F4(gUnknown_203B35C->unk0, r6, r5);
}
}
xxx_call_start_bg_music();
}
void sub_80376CC(void)
{
#ifdef NONMATCHING
u32 r0;
u32 r2;
#else
register u32 r0 asm("r0");
register u32 r2 asm("r2");
#endif
u32 r1;
u32 r4;
r1 = gUnknown_203B35C->unkC.unk0;
r0 = 0xfeff;
r0 &= r1;
r0 &= 0xfdff;
r0 &= 0xf3ff;
r0 &= 0xefff;
r0 &= 0xdfff;
r2 = 0x4000;
r0 &= 0x3fff;
r0 |= r2;
gUnknown_203B35C->unkC.unk0 = r0;
r2 = 0x3F0;
r1 = gUnknown_203B35C->unkC.unk4;
r0 = 0xFC00;
r0 &= r1;
r0 |= r2;
r0 &= 0xf3ff;
r2 = 0xF;
r4 = 0xF000;
r0 &= 0xfff;
r0 |= r4;
gUnknown_203B35C->unkC.unk4 = r0;
r0 = 0;
gUnknown_203B35C->unkC.unk2 = r0;
r1 = 0xC00;
r0 = gUnknown_203B35C->unkC.unk6;
r2 &= r0;
r2 |= r1;
gUnknown_203B35C->unkC.unk6 = r2;
}
void sub_8037748(void)
{
u32 temp2;
gUnknown_203B35C->unkC.unk2 = (gUnknown_203B35C->unkC.unk2 & 0xfe00) | 0x70;
temp2 = 0x680;
gUnknown_203B35C->unkC.unk6 = (gUnknown_203B35C->unkC.unk6 & 0xf) | temp2;
if ((gUnknown_203B35C->unk14 & 8) != 0) {
AddSprite(&gUnknown_203B35C->unkC,0x100,0,0x0);
}
xxx_draw_string_80144C4();
gUnknown_203B35C->unk14++;
}
u32 sub_8037798(void)
{
u32 nextMenu = MENU_NO_SCREEN_CHANGE;
switch(gUnknown_203B35C->unk0) {
case 0:
case 1:
nextMenu = MENU_MAIN_SCREEN;
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2A : MENU_MAIN_SCREEN;
break;
case 9:
case 10:
nextMenu = (gUnknown_203B35C->linkStatus == COMMS_GOOD) ? 0x2B : MENU_WONDER_MAIL;
break;
}
return nextMenu;
}

477
src/other_menus_1.c Normal file
View File

@@ -0,0 +1,477 @@
#include "global.h"
#include "constants/communication_error_codes.h"
#include "constants/dungeon.h"
#include "dungeon_global_data.h"
#include "pokemon.h"
#include "code_8094F88.h"
#include "save.h"
#include "team_inventory.h"
#include "main_menu.h"
#include "memory.h"
extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected
extern s32 gUnknown_202EC48;
extern u32 gUnknown_202EC40[2];
extern void sub_800D494(void);
extern s32 sub_800D33C(void);
extern void sub_800D520(void);
extern u8 sub_800D600(void);
extern void sub_80373C4(void);
extern void sub_800D59C(s32 *, u32);
extern void sub_800D570(void);
extern void sub_800D510(void);
extern u8 sub_800D588(void);
extern struct UnkStruct_203B184 *gUnknown_203B184;
extern void sub_800D670(u32, s32 *, u32);
extern void sub_800D68C(u32);
u32 sub_8037C10(u8 param_1)
{
u32 ret;
if (param_1 != 0)
{
if (sub_800D588())
{
ret = gUnknown_202EC40[0];
}
else
{
ret = gUnknown_202EC40[1];
}
}
else if (sub_800D588())
{
ret = gUnknown_202EC40[1];
}
else
{
ret = gUnknown_202EC40[0];
}
return ret;
}
void sub_8037C44(s32 mode, void *data)
{
s32 index;
for(index = 0; index < 2; index++)
{
sub_800D68C(index);
}
switch(mode) {
case 0:
case 1:
sub_800D59C(data, sizeof(struct unkStruct_8035D94));
break;
case 2:
case 3:
case 6:
case 7:
sub_800D59C(data, sizeof(struct unkStruct_203B480));
break;
case 4:
case 5:
sub_800D59C(data, sizeof(struct WonderMailStruct_203B2C0_sub));
break;
case 9:
case 10:
sub_800D59C(data, 0xb4);
break;
}
}
void sub_8037CC4(s32 mode, void *param_2, void *param_3)
{
switch(mode)
{
case 0:
case 1:
sub_800D670(0, param_2, sizeof(struct unkStruct_8035D94));
sub_800D670(1, param_3, sizeof(struct unkStruct_8035D94));
break;
case 2:
case 3:
case 6:
case 7:
sub_800D670(0, param_2, sizeof(struct unkStruct_203B480));
sub_800D670(1, param_3, sizeof(struct unkStruct_203B480));
break;
case 4:
case 5:
sub_800D670(0, param_2, sizeof(struct WonderMailStruct_203B2C0_sub));
sub_800D670(1, param_3, sizeof(struct WonderMailStruct_203B2C0_sub));
break;
case 9:
case 10:
sub_800D670(0, param_2, 0xb4);
sub_800D670(1, param_3, 0xb4);
break;
}
}
// TODO: same as sub_80381F4
s32 sub_8037D64(u32 mode, void * param_2, void * param_3)
{
u32 iVar2;
s32 linkStatus;
iVar2 = 0;
linkStatus = COMMS_GOOD;
gUnknown_202EC48 = 0;
sub_800D494();
sub_8037C44(mode, param_2);
goto _first;
_start:
while (iVar2 - 3 > 2) {
if (99 < gUnknown_202EC48) {
sub_800D520();
sub_800D510();
return COMMS_NOT_READY;
}
gUnknown_202EC48++;
_first:
sub_80373C4();
iVar2 = sub_800D33C();
sub_800D570();
if (iVar2 == 2) {
if (sub_800D600() == 0) {
sub_800D520();
sub_800D510();
linkStatus = 5;
}
else {
linkStatus = COMMS_GOOD;
}
goto _end;
}
else
goto _start;
}
sub_800D520();
sub_800D510();
return 1;
_end:
sub_8037CC4(mode, param_2, param_3);
return linkStatus;
}
s32 sub_8037DF0(void)
{
s32 linkStatus;
s32 iStack_10;
s32 iStack_c;
linkStatus = COMMS_GOOD;
sub_800D670(0,&iStack_10,4);
sub_800D670(1,&iStack_c,4);
if ((iStack_10 != 0) || (iStack_c != 0)) {
linkStatus = (!sub_800D588()) ? iStack_c : iStack_10;
if (linkStatus == COMMS_GOOD) {
linkStatus = 0xe;
}
}
return linkStatus;
}
void sub_8037E38(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2)
{
struct unkStruct_8035D94 *r3;
struct unkStruct_8035D94 *r4;
u32 load;
r4 = sub_800D588() == 0 ? param_2 : param_1;
r3 = sub_800D588() == 0 ? param_1 : param_2;
if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) {
load = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8];
load += r3->numItems;
gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8] = load;
}
else {
load = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8];
load += r3->numItems;
gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8] = load;
}
}
void sub_8037E90(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2)
{
if(sub_800D588() == 0)
{
param_2 = param_1;
}
param_2->mailType = 2;
sub_80951BC(param_2);
sub_8095274(param_2->unk10.unk10);
}
void nullsub_53(void *param_1, void *param_2)
{}
void sub_8037EBC(struct WonderMailStruct_203B2C0_sub *param_1, struct WonderMailStruct_203B2C0_sub *param_2) {
struct unkStruct_203B480 *mail;
struct WonderMailStruct_203B2C0_sub *puVar2;
if(sub_800D588() == 0)
{
puVar2 = param_1;
}
else
{
puVar2 = param_2;
}
mail = GetMailatIndex(GetMailIndex(1, (puVar2->mail).unk10.unk10));
*mail = (*puVar2).mail;
mail->mailType = 5;
sub_80951FC(mail);
mail->mailType = 7;
if(puVar2->pokemon.speciesNum != MONSTER_NONE)
{
gUnknown_203B484->unk0 = puVar2->mail.unk10.unk10;
gUnknown_203B484->unk4 = puVar2->pokemon;
gUnknown_203B484->unk4.dungeonLocation.id = DUNGEON_UNKNOWN_WORLD;
gUnknown_203B484->unk4.dungeonLocation.floor = 1;
}
else
{
MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
gUnknown_203B484->unk4.speciesNum = MONSTER_NONE;
}
}
void sub_8037F4C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2)
{
struct unkStruct_203B480 *mail;
struct MainMenu *mainMenu;
if(sub_800D588() == 0)
{
param_2 = param_1;
}
mail = GetMailatIndex(GetMailIndex(4, param_2->unk10.unk10));
*mail = *param_2;
mail->mailType = 6;
mainMenu = GetMainMenu();
if(mainMenu)
{
mainMenu->unk3A = 1;
}
}
void sub_8037F9C(u32 mode, void *param_2, void *param_3)
{
switch(mode)
{
case 0:
case 1:
sub_8037E38(param_2, param_3);
break;
case 7:
sub_8037F4C(param_2, param_3);
break;
case 3:
sub_8037E90(param_2, param_3);
break;
case 5:
sub_8037EBC(param_2, param_3);
break;
case 10:
nullsub_53(param_2, param_3);
break;
}
}
s32 sub_8038014(struct unkStruct_8035D94 *param_1,struct unkStruct_8035D94 *param_2)
{
s32 linkStatus;
s32 r2;
struct unkStruct_8035D94 *r3;
struct unkStruct_8035D94 *r4;
r4 = sub_800D588() == 0 ? param_2 : param_1;
r3 = sub_800D588() == 0 ? param_1 : param_2;
if ((r4->itemIndex).itemIndex_u8 == (r3->itemIndex).itemIndex_u8) {
r2 = gTeamInventory_203B460->teamStorage[r4->itemIndex.itemIndex_u8];
r2 += r3->numItems;
if (r2 > 999) {
linkStatus = COMMS_NO_ROOM_STORAGE;
}
else
linkStatus = COMMS_GOOD;
}
else {
r2 = gTeamInventory_203B460->teamStorage[r3->itemIndex.itemIndex_u8];
r2 += r3->numItems;
if (r2 > 999) {
linkStatus = COMMS_NO_ROOM_STORAGE;
}
else
linkStatus = COMMS_GOOD;
}
return linkStatus;
}
s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
{
u32 uVar2;
u32 uVar3;
if (sub_800D588() == 0) {
param_2 = param_1;
}
uVar3 = (param_2->unk10).unk10;
if (gUnknown_203B184 != NULL) {
uVar2 = gUnknown_203B184->unk050;
}
else {
uVar2 = sub_8011C34();
}
if (HasMail(4,uVar3) && (param_2->unk28 == uVar2)) {
return COMMS_GOOD;
}
else {
return COMMS_NOT_ELIGIBLE_2;
}
}
s32 sub_80380C4(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
{
u32 uVar2;
struct unkStruct_203B480 *mail;
if (sub_800D588() == 0) {
mail = param_1;
}
else
mail = param_2;
uVar2 = mail->unk10.unk10;
if (HasMail(2,uVar2) || HasMail(4,uVar2) || HasMail(6,uVar2))
{
return COMMS_DUPLICATE_MAIL;
}
if(sub_8095298(mail->unk10.unk10))
{
return COMMS_DUPLICATE_MAIL;
}
else if (FindOpenMailSlot() == -1)
{
return COMMS_NO_ROOM_MAIL;
}
else
{
return COMMS_GOOD;
}
}
s32 sub_803812C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2)
{
if (sub_800D588() == 0) {
param_2 = param_1;
}
if (HasMail(1, (param_2->unk10).unk10)) {
return COMMS_GOOD;
}
else {
return COMMS_NOT_ELIGIBLE_1;
}
}
s32 sub_8038158(void *param_1, void *param_2)
{
return COMMS_GOOD;
}
s32 sub_803815C(u32 mode, void *param_2, void *param_3)
{
s32 linkStatus;
linkStatus = COMMS_GOOD;
switch(mode) {
case 0:
case 1:
linkStatus = sub_8038014(param_2, param_3);
break;
case 7:
linkStatus = sub_8038078(param_2, param_3);
break;
case 3:
linkStatus = sub_80380C4(param_2, param_3);
break;
case 5:
linkStatus = sub_803812C(param_2, param_3);
break;
case 10:
linkStatus = sub_8038158(param_2, param_3);
break;
}
return linkStatus;
}
void sub_80381DC(u32 mode, void * param_2, void * param_3)
{
sub_8037F9C(mode, param_2, param_3);
}
s32 sub_80381E8(u32 mode, void * param_2, void * param_3)
{
return sub_803815C(mode, param_2, param_3);
}
// TODO: clean this up
s32 sub_80381F4(u32 mode, void * param_2, void * param_3)
{
u32 iVar2;
s32 linkStatus;
iVar2 = 0;
linkStatus = sub_803815C(mode, param_2, param_3);
gCommsTimeout = 0;
sub_800D494();
sub_800D59C(&linkStatus, 4);
goto _first;
_start:
while (iVar2 - 3 > 2) {
if (99 < gCommsTimeout) {
sub_800D520();
sub_800D510();
return COMMS_NOT_READY;
}
gCommsTimeout++;
_first:
sub_80373C4();
iVar2 = sub_800D33C();
sub_800D570();
if (iVar2 == 2) {
if (sub_800D600() != 0) {
linkStatus = sub_8037DF0();
}
else {
sub_800D520();
sub_800D510();
linkStatus = 5;
}
if (linkStatus != COMMS_GOOD) {
sub_800D520();
sub_800D510();
}
else {
sub_8037F9C(mode, param_2, param_3);
}
goto _end;
}
else
goto _start;
}
sub_800D520();
sub_800D510();
return 1;
_end:
sub_800D520();
return linkStatus;
}

View File

@@ -6,6 +6,7 @@
#include "memory.h"
#include "pokemon.h"
#include "text.h"
#include "text_util.h"
#include "team_inventory.h"
#include "constants/move.h"
#include "code_800D090.h"
@@ -171,8 +172,6 @@ extern u32 sub_801EF38(u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void sub_80922B4(u8 *, const u8 *, u32);
extern void sub_808D930(u8 *, s16);
extern s32 sub_8008ED0(u8 *);
extern void xxx_format_and_draw(s32, s32, const u8 *, ...);
extern s32 sub_80144A4(s32 *);

View File

@@ -13,6 +13,7 @@
#include "text.h"
#include "text_util.h"
#include "menu.h"
#include "menu_input.h"
enum
{
@@ -37,7 +38,6 @@ enum
EWRAM_DATA_2 struct PersonalityTestTracker *gPersonalityTestTracker = {0};
EWRAM_DATA_2 struct PersonalityStruct_203B404 *gUnknown_203B404 = {0};
extern void sub_801317C(u32 *);
extern void sub_8001024(u32 *);
extern s32 sub_8094E4C(void);
extern void sub_8094D28(s32);
@@ -61,16 +61,9 @@ extern void sub_800836C(u32, u8 *r0, u32);
extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray);
extern void RedrawPartnerSelectionMenu(void);
extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32);
extern u32 GetKeyPress(struct MenuInputStruct *r0);
extern u8 sub_80138B8(struct MenuInputStruct *r0, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(struct MenuInputStruct *r0);
u32 sub_8013800(struct MenuInputStruct *r0, u32);
extern void AddMenuCursorSprite(struct MenuInputStruct *r0);
extern u32 sub_80095E4(s16, u32);
extern struct GameOptions *gGameOptionsRef;
@@ -410,7 +403,7 @@ const char personality_test_fill[] = "pksdir0";
u8 CreateTestTracker(void)
{
gPersonalityTestTracker = MemoryAlloc(sizeof(struct PersonalityTestTracker),8);
sub_801317C(&gPersonalityTestTracker->unkb4);
sub_801317C(&gPersonalityTestTracker->input);
InitializeTestStats();
sub_8099690(1);
return 1;

View File

@@ -7,6 +7,7 @@
#include "constants/colors.h"
#include "constants/move_id.h"
#include "code_800D090.h"
#include "text_util.h"
extern struct MonsterDataEntry *gMonsterParameters;
extern const char gUnknown_8107600[];
@@ -29,10 +30,8 @@ extern struct LevelData gLevelCurrentData[];
extern s16 GetBaseSpecies(s16);
extern void sub_80922B4(u8 *, u8 *, s32);
extern int sprintf(char *, const char *, ...);
extern u32 ReturnIntFromChar(u8 r0);
extern void CopyStringtoBuffer(char *r0, char *r1);
extern void CopyAndResetMoves(void*, void*);
extern void sub_80943A0(void*, s32);
extern void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct*, struct PokemonStruct2*);

View File

@@ -32,8 +32,7 @@ struct unkStruct_203B2D4
u32 unk20;
u32 unk24;
struct UnkTextStruct2 unk28[4];
u32 unk88;
u8 fill8C[0x94 - 0x8C];
struct MenuInputStructSub unk88;
};
extern struct unkStruct_203B2D4 *gUnknown_203B2D4;
@@ -155,26 +154,18 @@ extern u16 gUnknown_203B2DC;
extern s32 GetNumPKMNNews(void);
extern void sub_802B880(void);
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(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 *);
extern u8 HasNoMailinMailbox(void);
extern void sub_802BF30(void);
extern void CreateMailMenu(void);
extern s32 CountEmptyMailSlots(void);
extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32);
void sub_802BB28(void);
extern void sub_802BB98(void);
extern void sub_802BC08(void);
extern void sub_802BB28(void);
extern void sub_8013E54(void);
extern s32 sub_8012A64(u32 *, u32);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
extern void sub_8008C54(u32);
@@ -183,8 +174,6 @@ extern void sub_802BC7C(void);
extern void sub_80073E0(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(struct MenuInputStruct *, s32);
extern void sub_8013984(struct MenuInputStruct *);
extern struct PokemonStruct *sub_808D3BC(void);
extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);

View File

@@ -7,7 +7,9 @@
#include "memory.h"
#include "text.h"
#include "wonder_mail.h"
#include "code_800D090.h"
#include "code_8094F88.h"
#include "menu_input.h"
struct PostOfficeHelper
{
@@ -178,7 +180,6 @@ 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 MenuInputStructSub *, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8031A84();
extern void DisplayMissionObjectives();
@@ -189,13 +190,11 @@ extern u8 sub_8099394(volatile u8 *);
extern struct WonderMail *GetJobSlotInfo(u8);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void sprintfStatic(char *buffer, const char *text, ...);
extern void sub_803B6B0(u32, u32, u32, u32);
extern s16 sub_80A2688(u8 r0);
extern u8 sub_80992E0(s16 *, s16 *);
extern void sub_8031A2C(void);
extern void sub_801317C(void *);
void UpdateHelperPelipperState(u8);
void HandlePostOfficeHelpStartMenuSelection();
@@ -208,8 +207,6 @@ extern void HandlePostOfficeHelpGetHelpMenuSelection();
extern void ReturnToGetHelpMenu();
extern s32 sub_80144A4(s32 *);
extern s32 CountJobsinDungeon(u8);
extern void sub_8012D08(struct UnkTextStruct2 *, s32);
u32 CreateHelperPelipperMenu(s16 speciesID)
{

View File

@@ -11,10 +11,12 @@
#include "code_8094F88.h"
#include "wonder_mail.h"
#include "menu_input.h"
#include "dungeon.h"
#include "main_menu.h"
#define RESCUE_PASSWORD_SIZE 0x36
EWRAM_DATA u32 gUnknown_202EC4C = {0};
EWRAM_DATA s32 gCommsTimeout = {0};
EWRAM_DATA u8 gRescuePasswordBuffer[RESCUE_PASSWORD_SIZE] = {0};
extern struct unkStruct_203B484 *gUnknown_203B484;
@@ -243,32 +245,23 @@ static const u8 fill0[] = "pksdir0";
extern s32 sub_8035D74(void);
extern void sub_80151C0(u32, u8 *);
extern void sub_8031D70(u32, u32);
extern u32 ConvertMenutoRescuePasswordState(u32);
extern void sub_8039174(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
extern void DisplayPasswordAcceptScreen(void);
extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0);
extern u32 sub_80154F0(void);
extern u32 sub_8031DCC(void);
extern void sub_80391F8(void);
extern void sub_8031E00();
extern void DisplayRescuePasswordError(u32);
extern struct MainMenu *GetMainMenu(void);
extern void sub_8031E00(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 sub_8095298(s32);
bool8 sub_803D204(u8 *, struct unkStruct_203B480 *);
extern s32 GetDungeonFloorCount(u8);
extern void AddSprite(struct unkSprite *, u32, u32, u32);
extern void xxx_draw_string_80144C4(void);
void DisplayRescuePasswordError(u32 error);
void sub_8039174(void);
void DisplayPasswordAcceptScreen(void);
u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0);
void sub_80391F8(void);
bool8 sub_803D204(u8 *, struct unkStruct_203B480 *);
u32 ConvertMenutoRescuePasswordState(u32);
void CreateRescuePasswordMenu(u32 currMenu)
{
@@ -314,7 +307,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
temp = GetMailatIndex(0x1F);
MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_203B480));
temp->mailType = 2;
temp->unk20.id = ITEM_NOTHING;
temp->item.id = ITEM_NOTHING;
sub_8031D70(0x1F, 0);
break;
case MENU_RESCUE_PASSWORD_ENTRY:
@@ -647,7 +640,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para
if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) ||
(param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) ||
(param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) ||
(IsInvalidItemReward(param_3->unk20.id))) {
(IsInvalidItemReward(param_3->item.id))) {
return PASSWORD_ENTRY_INCORRECT_PASSWORD;
}
else
@@ -760,4 +753,4 @@ void sub_80391F8(void)
}
xxx_draw_string_80144C4();
gRescuePasswordMenu->unk210 += 1;
}
}

View File

@@ -1,16 +1,16 @@
#include "global.h"
#include "rescue_team_info.h"
#include "code_8092334.h"
#include "text_util.h"
EWRAM_DATA_2 struct RescueTeamData *gRescueTeamInfoRef = {0};
EWRAM_DATA struct RescueTeamData gRescueTeamInfo = {0};
extern bool8 sub_80023E4(u32);
extern void sub_80922B4(u8 *buffer, u8 *string, s32 size);
extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
extern const u8 *gRescueTeamRanks[];
extern s32 gRescueRankMaxPoints[7];
extern s32 gRescueRankMaxPoints[MAX_TEAM_RANKS];
extern u8 gTeamNamePlaceholder[0x8]; // Pokemon
void LoadRescueTeamInfo(void)

View File

@@ -26,7 +26,7 @@ struct unkStruct_203B360
u32 unk1B0; // Sprite count?
};
extern struct unkStruct_203B360 *gUnknown_203B364;
EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B364 = {0};
const struct UnkTextStruct2 gUnknown_80E6F20 =
{

View File

@@ -11,6 +11,7 @@
#include "input.h"
#include "rescue_password_menu.h"
#include "text.h"
#include "text_util.h"
#include "team_inventory.h"
#include "code_800D090.h"
#include "menu_input.h"
@@ -218,7 +219,6 @@ extern u32 sub_80144A4(s32 *r0);
extern void SetThankYouMailMenuState(u32);
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
extern void SetMenuItems(struct MenuStruct *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32);
extern void sub_80922B4(u8 *, u8 *, u32);
extern void sub_802F204(struct unkStruct_802F204 *, u32);
extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
@@ -288,7 +288,7 @@ u32 CreateThankYouMailPelipper(void)
index = GetFirstIndexofMailType(6);
if (index != -1) {
mail = GetMailatIndex(index);
gUnknown_203B2C4->unk41C = mail->unk20;
gUnknown_203B2C4->unk41C = mail->item;
gUnknown_203B2C4->mailIndex = index;
gUnknown_203B2C4->unk430 = mail->unk10.unk10;
SetThankYouMailMenuState(5);
@@ -957,7 +957,7 @@ void HandleConfirmItemtoSendMenu(void)
mail = GetMailatIndex(gUnknown_203B2C4->mailIndex);
if(gUnknown_203B2C4->unk41C.id != ITEM_NOTHING)
{
mail->unk20 = gUnknown_203B2C4->unk41C;
mail->item = gUnknown_203B2C4->unk41C;
}
gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.id]--;
SetThankYouMailMenuState(0x29);
@@ -1144,7 +1144,7 @@ void HandleMailCommunicationMenu(void)
{
case WONDER_MAIL_MODE_SEND:
mail = GetMailatIndex(GetFirstIndexofMailType(WONDER_MAIL_TYPE_THANK_YOU));
if(mail->unk20.id != ITEM_NOTHING)
if(mail->item.id != ITEM_NOTHING)
{
SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL);
}
@@ -1409,7 +1409,7 @@ void UpdateThankYouMailText(void)
gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554
mailIndex = GetMailIndex(6,gUnknown_203B2C4->unk430);
mail = GetMailatIndex(mailIndex);
itemIndex = mail->unk20.id;
itemIndex = mail->item.id;
if (itemIndex != ITEM_NOTHING)
gUnknown_203B2C4->unk53C.itemRewards[0] = itemIndex; // unk558
else

View File

@@ -26,7 +26,7 @@ struct unkStruct_203B360
u32 unk1B0; // sprite count?
};
extern struct unkStruct_203B360 *gUnknown_203B360;
EWRAM_DATA_2 struct unkStruct_203B360 *gUnknown_203B360 = {0};
const struct UnkTextStruct2 gUnknown_80E6E7C = {
0x00, 0x00, 0x00, 0x00,
0x03,

642
src/wigglytuff_shop.c Normal file
View File

@@ -0,0 +1,642 @@
#include "global.h"
#include "constants/friend_area.h"
#include "file_system.h"
#include "menu.h"
#include "pokemon.h"
#include "input.h"
#include "team_inventory.h"
#include "text.h"
#include "memory.h"
#include "menu_input.h"
#include "friend_area.h"
#include "wigglytuff_shop.h"
extern struct UnkTextStruct2 gUnknown_80DC534;
extern struct UnkTextStruct2 gUnknown_80DC564;
extern struct UnkTextStruct2 gUnknown_80DC54C;
extern struct UnkTextStruct2 gUnknown_80DC534;
EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0};
extern u8 gUnknown_202E628[];
extern u32 gUnknown_202DE30[2];
extern u8 gUnknown_202E5D8[];
extern u8 gUnknown_202E1C8[];
extern u8 gAvailablePokemonNames[];
extern u8 *gWigglytuffDialogue[2][20];
extern u8 *gWigglytuffCheck[];
extern u8 *gUnknown_80D4920[];
extern u8 *gUnknown_80D4928[];
extern u8 *gUnknown_80D4934[];
extern u8 *gUnknown_80D4970[];
extern u8 *gUnknown_80D4978[];
s32 sub_80144A4(s32 *);
u8 sub_8021700(u32);
void sub_8092578(u8 *buffer, u8 index, u8 r2);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32,u8 *r5, u32);
extern void sub_80141B4(const u8 *, u32, u8*, u32);
extern void DrawTeamMoneyBox(u32);
extern void sub_80211AC(u32, u32);
extern void sub_8021354(u32);
extern void sub_8021494();
extern void sub_803AA34();
extern void sub_8021774(u8,u32, u32);
extern void sub_809249C(u8, u32);
extern void sub_8021830(void);
extern u32 sub_80217EC(void);
extern u8 sub_803ABC8(void);
extern u32 sub_8021274(u32);
extern u8 sub_802132C(void);
extern void sub_80213A0(void);
extern void sub_8022380(void);
extern void PlaySound(u32);
bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4);
void sub_8023354(u8 param_1);
extern bool8 sub_80023E4(u32);
extern void CreateWigglytuffConfirmFriendAreaMenu(void);
extern u8 sub_8099B94(void);
extern void sub_8099AFC(u32, u32, u32);
extern void sub_8099A5C(u32, u32, u32);
extern u32 sub_8023278(u32);
void sub_80233A0(void);
s16 sub_802331C(void);
void sub_8022460(void);
void sub_8022538(void);
void sub_80225C8(void);
void HandleWigglytuffConfirmFriendAreaMenu(void);
void sub_80226F0(void);
void sub_8022790(void);
void sub_8022668(void);
void sub_8022684(void);
void sub_80226CC(void);
void sub_80222C8(void);
void SetWigglytuffState(s32);
void sub_8021D5C(void);
void UpdateWigglytuffDialogue(void);
bool8 CreateWigglytuffShop(bool32 isAsleep)
{
char *string;
struct OpenedFile *file;
ResetUnusedInputStruct();
sub_800641C(0, 1, 1);
gWigglytuffShop = MemoryAlloc(sizeof(struct WigglytuffShop), 8);
gWigglytuffShop->menuAction1 = 0;
gWigglytuffShop->menuAction2 = 0;
gWigglytuffShop->isAsleep = isAsleep;
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_WIGGLYTUFF);
CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_WIGGLYTUFF);
string = GetMonSpecies(MONSTER_WIGGLYTUFF);
strcpy(gUnknown_202E1C8 - 0x50, string);
if (gWigglytuffShop->isAsleep == TRUE) {
gWigglytuffShop->unkCC = NULL;
}
else {
gWigglytuffShop->unkCC = (u8 *)&gWigglytuffShop->faceFile;
}
file = GetDialogueSpriteDataPtr(MONSTER_WIGGLYTUFF);
gWigglytuffShop->faceFile = file;
gWigglytuffShop->faceData = file->data;
gWigglytuffShop->unkC8 = 0;
gWigglytuffShop->unkC9 = 0;
gWigglytuffShop->unkCA = 0;
gWigglytuffShop->unkC4 = 2;
gWigglytuffShop->unkC6 = 8;
SetWigglytuffState(WIGGLYTUFF_INIT);
return TRUE;
}
u32 sub_8021C5C(void)
{
switch(gWigglytuffShop->state)
{
case WIGGLYTUFF_INIT:
case WIGGLYTUFF_MAIN_MENU:
sub_8022460();
break;
case WIGGLYTUFF_UNK9:
case WIGGLYTUFF_UNKA:
sub_8022538();
break;
case WIGGLYTUFF_UNKB:
sub_80225C8();
break;
case BUY_FRIEND_AREA:
HandleWigglytuffConfirmFriendAreaMenu();
break;
case WIGGLYTUFF_UNKD:
sub_80226F0();
break;
case WIGGLYTUFF_UNKE:
sub_8022790();
break;
case FRIEND_AREA_INFO:
sub_8022668();
break;
case WIGGLYTUFF_UNK16:
case WIGGLYTUFF_UNK17:
sub_8022684();
break;
case WIGGLYTUFF_EXIT:
return 3;
default:
sub_80226CC();
break;
}
return 0;
}
void sub_8021D1C(void)
{
if(gWigglytuffShop)
{
CloseFile(gWigglytuffShop->faceFile);
MemoryFree(gWigglytuffShop);
gWigglytuffShop = NULL;
}
}
void SetWigglytuffState(s32 newState)
{
gWigglytuffShop->state = newState;
sub_8021D5C();
UpdateWigglytuffDialogue();
}
void sub_8021D5C(void)
{
s32 index;
sub_8006518(gWigglytuffShop->unkD0);
switch(gWigglytuffShop->state)
{
case WIGGLYTUFF_UNK9:
case WIGGLYTUFF_UNKA:
gWigglytuffShop->unkD0[0] = gUnknown_80DC534;
gWigglytuffShop->unkD0[2] = gUnknown_80DC534;
gWigglytuffShop->unkD0[1] = gUnknown_80DC564;
break;
case WIGGLYTUFF_UNKB:
gWigglytuffShop->unkD0[2] = gUnknown_80DC54C;
break;
default:
for(index = 0; index < 4; index++)
{
gWigglytuffShop->unkD0[index] = gUnknown_80DC534;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gWigglytuffShop->unkD0, 1, 1);
}
void UpdateWigglytuffDialogue(void)
{
char *string;
struct unkStruct_8092638 uStack_14;
switch(gWigglytuffShop->state)
{
case WIGGLYTUFF_INIT:
sub_80222C8();
sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][0],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc);
break;
case WIGGLYTUFF_MAIN_MENU:
sub_80222C8();
sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][1],0,gWigglytuffShop->menuAction1,gWigglytuffShop->unk1C,gWigglytuffShop->unk5C,4,0,gWigglytuffShop->unkCC,0xc);
break;
case FRIEND_AREA_SELECT_BUY:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK9;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][3],0,gWigglytuffShop->unkCC,0x10d);
break;
case FRIEND_AREA_SELECT_BUY_AGAIN:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][4],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_INFO:
gWigglytuffShop->fallbackState = WIGGLYTUFF_MAIN_MENU;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][19],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_PRE_EXIT:
gWigglytuffShop->fallbackState = WIGGLYTUFF_EXIT;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][2],0,gWigglytuffShop->unkCC,0x30d);
break;
default:
break;
case WIGGLYTUFF_CANT_ADD_FRIEND_AREA:
gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][8],0,gWigglytuffShop->unkCC,0x10d);
break;
case NO_MONEY:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][9],0,gWigglytuffShop->unkCC,0x10d);
break;
case NO_FRIEND_AREAS:
gWigglytuffShop->fallbackState = WIGGLYTUFF_PRE_EXIT;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][10],0,gWigglytuffShop->unkCC,0x10d);
break;
case NOT_ENOUGH_MONEY:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKA;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][11],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_UNK9:
sub_80211AC(2,3);
DrawTeamMoneyBox(1);
break;
case WIGGLYTUFF_UNKA:
sub_8021354(1);
DrawTeamMoneyBox(1);
break;
case WIGGLYTUFF_UNKB:
sub_8021494();
DrawTeamMoneyBox(1);
sub_8022380();
sub_8012D60(&gWigglytuffShop->unk6C,gWigglytuffShop->unk1C,0,gWigglytuffShop->unk5C, gWigglytuffShop->menuAction2,2);
break;
case BUY_FRIEND_AREA:
CreateWigglytuffConfirmFriendAreaMenu();
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice;
sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc);
break;
case FRIEND_AREA_INFO:
sub_8021774(gWigglytuffShop->chosenFriendArea,0,2);
break;
case CONFIRM_BUY_FRIEND_AREA:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD;
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_UNKD:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKE;
PlaySound(0x25b);
gWigglytuffShop->unk130 = 1;
break;
case WIGGLYTUFF_UNKE:
gWigglytuffShop->fallbackState = FRIEND_AREA_UNLOCKED;
gWigglytuffShop->unk134 = 30;
break;
case FRIEND_AREA_UNLOCKED:
if (sub_8021700(2) != 0) {
sub_80213A0();
gWigglytuffShop->fallbackState = NO_FRIEND_AREAS;
}
else {
gWigglytuffShop->fallbackState = FRIEND_AREA_SELECT_BUY_AGAIN;
}
PlaySound(0xce);
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][7],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK16;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][12],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK_AGAIN:
gWigglytuffShop->fallbackState = WIGGLYTUFF_UNK17;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][13],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_UNK16:
sub_8023144(0,3,0,10);
break;
case WIGGLYTUFF_UNK17:
sub_8023354(1);
break;
case DISPLAY_POKEMON_FRIEND_AREA_INFO:
sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0);
if (uStack_14.hasFriendArea) {
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_HAS_FRIEND_AREA;
}
else
{
switch(GetFriendAreaUnlockCondition(gWigglytuffShop->chosenFriendArea))
{
case UNLOCK_SHOP_POST_GAME:
if (sub_80023E4(6) != 0) {
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
}
else {
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_POST_GAME;
}
break;
case UNLOCK_WONDER_MAIL:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_WONDER_MAIL;
break;
case UNLOCK_LEGENDARY_REQUEST:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_LEGENDARY;
break;
default:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
break;
}
}
string = GetMonSpecies(gWigglytuffShop->chosenSpecies);
strcpy(gAvailablePokemonNames,string);
sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0);
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][15],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK_POST_GAME:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][16],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK_WONDER_MAIL:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][17],0,gWigglytuffShop->unkCC,0x10d);
break;
case WIGGLYTUFF_CHECK_LEGENDARY:
gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_AGAIN;
sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][18],0,gWigglytuffShop->unkCC,0x10d);
break;
}
}
void sub_80222C8(void)
{
s32 i;
s32 index = 0;
MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C));
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy
gWigglytuffShop->unk1C[index].menuAction = 2;
index++;
gWigglytuffShop->unk1C[index].text = *gWigglytuffCheck; // Check
gWigglytuffShop->unk1C[index].menuAction = 3;
index++;
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info
gWigglytuffShop->unk1C[index].menuAction = 4;
index++;
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4934; // Cancel
gWigglytuffShop->unk1C[index].menuAction = 1;
index++;
gWigglytuffShop->unk1C[index].text = NULL;
gWigglytuffShop->unk1C[index].menuAction = 1;
for(i = 0; i < index; i++)
{
if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction1)
return;
}
for(i = 0; i < index; i++)
{
if(gWigglytuffShop->unk5C[i] == 0)
{
gWigglytuffShop->menuAction1 = gWigglytuffShop->unk1C[i].menuAction;
break;
}
}
}
void sub_8022380(void)
{
s32 i;
s32 index = 0;
MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C));
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4978; // Buy
gWigglytuffShop->unk1C[index].menuAction = 2;
index++;
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4970; // Info
gWigglytuffShop->unk1C[index].menuAction = 4;
index++;
gWigglytuffShop->unk1C[index].text = NULL;
gWigglytuffShop->unk1C[index].menuAction = 1;
for(i = 0; i < index; i++)
{
if(gWigglytuffShop->unk5C[i] == 0 && gWigglytuffShop->unk1C[i].menuAction == gWigglytuffShop->menuAction2)
return;
}
for(i = 0; i < index; i++)
{
if(gWigglytuffShop->unk5C[i] == 0)
{
gWigglytuffShop->menuAction2 = gWigglytuffShop->unk1C[i].menuAction;
break;
}
}
}
void CreateWigglytuffConfirmFriendAreaMenu(void)
{
s32 index = 0;
MemoryFill16(gWigglytuffShop->unk5C, 0, sizeof(gWigglytuffShop->unk5C));
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4920;
gWigglytuffShop->unk1C[index].menuAction = 5;
index++;
gWigglytuffShop->unk1C[index].text = *gUnknown_80D4928;
gWigglytuffShop->unk1C[index].menuAction = 6;
index++;
gWigglytuffShop->unk1C[index].text = NULL;
gWigglytuffShop->unk1C[index].menuAction = 1;
}
void sub_8022460(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0)
{
if (menuAction != 1) {
gWigglytuffShop->menuAction1 = menuAction;
}
switch(menuAction)
{
case 2:
if (sub_8021700(2) != 0) {
SetWigglytuffState(WIGGLYTUFF_CANT_ADD_FRIEND_AREA);
}
else {
SetWigglytuffState(FRIEND_AREA_SELECT_BUY);
}
break;
case 3:
SetWigglytuffState(WIGGLYTUFF_CHECK);
break;
case 4:
SetWigglytuffState(WIGGLYTUFF_INFO);
break;
case 1:
SetWigglytuffState(WIGGLYTUFF_PRE_EXIT);
break;
}
}
}
void HandleWigglytuffConfirmFriendAreaMenu(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
switch(menuAction)
{
case 5:
gTeamInventory_203B460->teamMoney -= gWigglytuffShop->friendAreaPrice;
UnlockFriendArea(gWigglytuffShop->chosenFriendArea);
PlaySound(0x14C);
SetWigglytuffState(CONFIRM_BUY_FRIEND_AREA);
break;
case 1:
case 6:
SetWigglytuffState(WIGGLYTUFF_UNKA);
break;
}
}
}
void sub_8022538(void)
{
switch(sub_8021274(1))
{
case 3:
gWigglytuffShop->chosenFriendArea = sub_802132C();
gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea);
SetWigglytuffState(WIGGLYTUFF_UNKB);
break;
case 4:
gWigglytuffShop->chosenFriendArea = sub_802132C();
gWigglytuffShop->friendAreaPrice = GetFriendAreaPrice(gWigglytuffShop->chosenFriendArea);
SetWigglytuffState(FRIEND_AREA_INFO);
break;
case 0:
break;
case 2:
sub_80213A0();
SetWigglytuffState(WIGGLYTUFF_MAIN_MENU);
break;
case 1:
default:
DrawTeamMoneyBox(1);
break;
}
}
void sub_80225C8(void)
{
s32 menuAction = 0;
sub_8021274(0);
if(sub_8012FD8(&gWigglytuffShop->unk6C) == 0)
{
sub_8013114(&gWigglytuffShop->unk6C, &menuAction);
if(menuAction != 1) gWigglytuffShop->menuAction2 = menuAction;
}
switch(menuAction)
{
case 2:
if(gTeamInventory_203B460->teamMoney == 0)
{
SetWigglytuffState(NO_MONEY);
}
else if(gWigglytuffShop->friendAreaPrice > gTeamInventory_203B460->teamMoney)
{
SetWigglytuffState(NOT_ENOUGH_MONEY);
}
else
{
SetWigglytuffState(BUY_FRIEND_AREA);
}
break;
case 4:
SetWigglytuffState(FRIEND_AREA_INFO);
break;
case 1:
SetWigglytuffState(WIGGLYTUFF_UNKA);
break;
}
}
void sub_8022668(void)
{
switch(sub_80217EC())
{
case 2:
case 3:
sub_8021830();
SetWigglytuffState(WIGGLYTUFF_UNKA);
break;
case 0:
case 1:
break;
}
}
void sub_8022684(void)
{
switch(sub_8023278(1))
{
case 3:
gWigglytuffShop->chosenSpecies = sub_802331C();
gWigglytuffShop->chosenFriendArea = GetFriendArea(gWigglytuffShop->chosenSpecies);
SetWigglytuffState(DISPLAY_POKEMON_FRIEND_AREA_INFO);
break;
case 2:
sub_80233A0();
SetWigglytuffState(WIGGLYTUFF_MAIN_MENU);
break;
case 0:
case 1:
break;
}
}
void sub_80226CC(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0)
{
SetWigglytuffState(gWigglytuffShop->fallbackState);
}
}
void sub_80226F0(void)
{
union {
vu32 a;
vu8 b[4];
} temp;
vu8 *ptr = temp.b;
u32 r2 = 0;
ptr[0] = 0x80;
ptr[1] = 0x80;
ptr[2] = 0x10;
ptr[3] = r2;
if(sub_8099B94() == 0)
{
switch(gWigglytuffShop->unk130)
{
case 1:
case 3:
sub_8099AFC(5, 2, temp.a);
break;
case 2:
case 4:
sub_8099A5C(5, 2, temp.a);
break;
case 0:
default:
SetWigglytuffState(gWigglytuffShop->fallbackState);
gWigglytuffShop->unk130 = 0;
break;
}
gWigglytuffShop->unk130++;
}
}
void sub_8022790(void)
{
if(gWigglytuffShop->unk134 != 0)
{
gWigglytuffShop->unk134--;
}
else {
SetWigglytuffState(gWigglytuffShop->fallbackState);
}
}

View File

@@ -98,22 +98,14 @@ extern void sub_802CAA4(void);
extern u8 IsJobSlotEmpty(u8);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_8013C68(struct MenuInputStruct*);
extern void sub_80073E0(u32);
extern struct WonderMail* GetJobSlotInfo(u8);
extern s32 sub_8013800(struct MenuInputStruct*, u32);
extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *);
extern void CreateRescueTitle(struct unkStruct_802C39C *);
extern void sub_8013984(struct MenuInputStruct*);
extern void sub_802C6DC(void);
extern void DrawJobListMenu(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(struct MenuInputStruct*, s32, u32, u32);
extern bool8 IsPelipperBoardSlotEmpty(u8);
extern void SetJobListState(u32);
extern void sub_802CC00(void);

View File

@@ -11,22 +11,15 @@
#include "menu_input.h"
bool8 IsMailSlotEmpty(u8);
extern void sub_8013984(void *);
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(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(struct MenuInputStruct *, s32);
extern struct WonderMail *GetPelipperBoardSlotInfo(u32);
extern void sub_803B35C(struct WonderMail *, u32 *);
extern u8 gBulletinBoardText[];

View File

@@ -153,17 +153,10 @@ 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(struct MenuInputStruct *, u32);
extern u8 gUnknown_80DFDBC[];
extern void sub_802CF5C(void);
extern void sub_802CFD0(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(struct MenuInputStruct *, s32, u32, u32);
extern void sub_802DF24(void);
extern void SetJobListState(u32);

View File

@@ -95,12 +95,8 @@ enum FriendRewardStates {
extern u8 sub_802FCF0(u32);
extern void sub_802F9C0(void);
extern void sub_802FA50(void);
extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32);
extern u32 sub_802FBF4(void);
extern void sub_8013878(struct MenuInputStruct *, s32);
extern s32 sub_802FBF4(void);
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);
@@ -126,9 +122,6 @@ 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(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);
@@ -137,7 +130,6 @@ 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(struct MenuInputStruct *, s32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);

View File

@@ -78,16 +78,8 @@ extern bool8 HasNoWonderMailType(u32);
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(struct MenuInputStruct*, u32, u32, 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(struct MenuInputStruct*);
extern void AddMenuCursorSprite(struct MenuInputStruct*);
extern s32 sub_8013800(struct MenuInputStruct*, u32);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);

View File

@@ -8,11 +8,12 @@
#include "code_8094F88.h"
#include "code_800D090.h"
#include "code_802C39C.h"
#include "menu_input.h"
struct unkStruct_203B324
{
// size: 0x78
u8 fill0[0xC];
struct MenuInputStructSub unk0;
u8 mailIndex;
u32 unk10;
struct UnkTextStruct2 *unk14;
@@ -47,9 +48,7 @@ const u8 gUnknown_80E0938[] = "%-4d";
static const u8 wonder_mail_fill[] = "pksdir0";
extern void sub_8030DD4(void);
extern void sub_801317C(void *);
extern void PlayMenuSoundEffect(u32);
extern u32 sub_8012A64(void *, u32);
extern void CreateRescueDescription(struct unkStruct_802C39C *);
extern void sub_80073E0(u32);
extern void sub_80073B8(u32);
@@ -61,7 +60,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2)
{
gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8);
gUnknown_203B324->mailIndex = mailIndex;
sub_801317C(gUnknown_203B324);
sub_801317C(&gUnknown_203B324->unk0);
gUnknown_203B324->unk10 = param_2;
gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[param_2];
sub_8006518(gUnknown_203B324->unk18);
@@ -72,7 +71,7 @@ bool8 sub_8030D40(u8 mailIndex, s32 param_2)
u8 sub_8030DA0(void)
{
switch(sub_8012A64(gUnknown_203B324, gUnknown_203B324->unk10))
switch(sub_8012A64(&gUnknown_203B324->unk0, gUnknown_203B324->unk10))
{
case 2:
PlayMenuSoundEffect(1);
@@ -127,12 +126,12 @@ void sub_8030E48(void)
stack.clientSpecies = mail->clientSpecies;
stack.targetSpecies = mail->clientSpecies;
stack.targetItem = ITEM_NOTHING;
if (mail->unk20.id == ITEM_NOTHING) {
if (mail->item.id == ITEM_NOTHING) {
stack.unk2E = 5;
}
else {
stack.unk2E = 2;
stack.unk34 = mail->unk20.id;
stack.unk34 = mail->item.id;
}
switch(mail->mailType)
{

View File

@@ -323,7 +323,7 @@ void sub_80313D8(u32 state)
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].mailType = 0;
unused = &gUnknown_203B480[index];
gUnknown_203B480[index].unk20.id = ITEM_NOTHING;
gUnknown_203B480[index].item.id = ITEM_NOTHING;
}
break;
}

View File

@@ -4,6 +4,7 @@
#include "memory.h"
#include "code_802C39C.h"
#include "wonder_mail.h"
#include "menu_input.h"
struct unkStruct_203B2FC
{
@@ -33,7 +34,7 @@ extern struct unkStruct_203B2FC *gUnknown_203B2FC;
struct unkStruct_203B300
{
// size: 0x7C
u8 fill0[0xC];
struct MenuInputStructSub unk0;
struct unkStruct_802C39C *unkC;
u32 unk10;
struct UnkTextStruct2 *unk14;
@@ -104,7 +105,6 @@ extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void CreateRescueDescription(struct unkStruct_802C39C *);
extern void PlayMenuSoundEffect(u32);
extern s32 sub_8012A64(void *, u32);
extern s32 sub_80144A4(s32 *);
extern void sub_802DC28(u32);
extern void sub_802F2C0(void);
@@ -129,7 +129,6 @@ void sub_802DE60(void);
void sub_802DF6C(void);
void sub_802DF88(void);
void sub_802DF14(void);
void sub_801317C(void);
void sub_802D1A0(u32);
u32 sub_802DEE0(void);
void sub_802DF24(void);
@@ -313,7 +312,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0)
{
gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8);
gUnknown_203B300->unkC = r0;
sub_801317C();
sub_801317C(&gUnknown_203B300->unk0);
gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0];
gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10];
sub_8006518(gUnknown_203B300->unk18);
@@ -324,7 +323,7 @@ u32 sub_802DE84(struct unkStruct_802C39C *r0)
u32 sub_802DEE0(void)
{
switch(sub_8012A64(gUnknown_203B300, gUnknown_203B300->unk10))
switch(sub_8012A64(&gUnknown_203B300->unk0, gUnknown_203B300->unk10))
{
case 2:
PlayMenuSoundEffect(1);

View File

@@ -811,58 +811,16 @@ gMoveLearnsets: /* 2038C6C */
.include "src/game_options.o"
.include "src/play_time.o"
gUnknown_2038C88: /* 2038C88 */
.space 0x600
gUnknown_2039288: /* 2039288 */
.space 0x60
gUnknown_20392E8: /* 20392E8 */
.space 0xD8
gUnknown_20393C0: /* 20393C0 */
.space 0x88
gUnknown_2039448: /* 2039448 */
.space 0x330
.include "src/code_8097670.o"
.space 0x4
.include "src/exclusive_pokemon.o"
.space 0x4
gUnknown_20398A8: /* 20398A8 */
.space 0x4
gUnknown_20398AC: /* 20398AC */
.space 0x4
gUnknown_20398B0: /* 20398B0 */
.space 0x4
gUnknown_20398B4: /* 20398B4 */
.space 0x4
gUnknown_20398B8: /* 20398B8 */
.space 0x1
gUnknown_20398B9: /* 20398B9 */
.space 0x1
gUnknown_20398BA: /* 20398BA */
.space 0x2
gUnknown_20398BC: /* 20398BC */
.space 0x2
gUnknown_20398BE: /* 20398BE */
.space 0x2
gUnknown_20398C0: /* 20398C0 */
.space 0x4
gUnknown_20398C4: /* 20398C4 */
.space 0x4
.include "src/code_8094F88.o"
.space 0x4
.include "src/code_80958E8.o"
.space 0x4
.include "src/code_8097670.o"
.space 0x4
.include "src/exclusive_pokemon.o"
.space 0x4
.include "src/ground_main.o"
.space 0x2
gUnknown_20398C8: /* 20398C8 */
.space 0x10

View File

@@ -136,14 +136,8 @@ gUnknown_203B1FC: /* 203B1FC */
gUnknown_203B200: /* 203B200 */
.space 0x4
gFelicityBankWork: /* 203B204 */
.space 0x4
gUnknown_203B208: /* 203B208 */
.space 0x4
gUnknown_203B20C: /* 203B20C */
.space 0x4
.include "src/felicity_bank.o"
.include "src/kangaskhan_storage.o"
gUnknown_203B210: /* 203B210 */
.space 0x4
@@ -232,8 +226,7 @@ gUnknown_203B274: /* 203B274 */
gUnknown_203B278: /* 203B278 */
.space 0x4
gUnknown_203B27C: /* 203B27C */
.space 0x4
.include "src/gulpin_shop_1.o"
gUnknown_203B280: /* 203B280 */
.space 0x4
@@ -250,8 +243,7 @@ gUnknown_203B28A: /* 203B28A */
gUnknown_203B28C: /* 203B28C */
.space 0x4
gUnknown_203B290: /* 203B290 */
.space 0x4
.include "src/wigglytuff_shop.o"
gUnknown_203B294: /* 203B294 */
.space 0x4
@@ -372,26 +364,12 @@ gUnknown_203B328: /* 203B328 */
.include "src/code_8031D70.o"
.include "src/adventure_log.o"
.include "src/friend_rescue.o"
gUnknown_203B340: /* 203B340 */
.space 0x4
gUnknown_203B344: /* 203B344 */
.space 0x4
.include "src/credits.o"
.include "src/main_menu.o"
.include "src/trade_items_menu.o"
gUnknown_203B35C: /* 203B35C */
.space 0x4
gUnknown_203B360: /* 203B360 */
.space 0x4
gUnknown_203B364: /* 203B364 */
.space 0x4
.include "src/other_menus.o"
.include "src/unk_menu_203B360.o"
.include "src/save_menu.o"
.include "src/rescue_password_menu.o"
.include "src/load_screen.o"
.include "src/wonder_mail_main_menu.o"