Merge pull request #425 from SethBarberee/sub_803B050
Some checks failed
GithubCI / build (push) Has been cancelled

sub_803B050
This commit is contained in:
AnonymousRandomPerson
2025-07-21 18:43:20 -04:00
committed by GitHub
17 changed files with 587 additions and 1046 deletions

View File

@@ -1,867 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_803B050
sub_803B050:
push {r4-r7,lr}
ldr r4, _0803B0F4
movs r0, 0xF4
lsls r0, 2
movs r1, 0x8
bl MemoryAlloc
str r0, [r4]
movs r1, 0x3
str r1, [r0, 0x34]
adds r1, r0, 0
adds r1, 0x84
str r1, [r0, 0x38]
adds r0, 0x3C
bl RestoreSavedWindows
ldr r1, [r4]
ldr r2, [r1, 0x34]
lsls r0, r2, 1
adds r0, r2
lsls r0, 3
adds r1, r0
adds r1, 0x3C
ldr r0, _0803B0F8
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldr r0, [r4]
ldr r1, [r0, 0x38]
adds r0, 0x9C
str r0, [r1, 0x14]
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x3C
movs r1, 0x1
movs r2, 0x1
bl ShowWindows
movs r2, 0
movs r3, 0
movs r7, 0xCB
lsls r7, 1
movs r6, 0x80
lsls r6, 9
movs r5, 0
_0803B0AE:
ldr r0, _0803B0FC
adds r0, r5, r0
movs r1, 0x2
ldrsh r0, [r0, r1]
ldr r4, _0803B0F4
cmp r0, 0xA
bne _0803B0C8
ldr r0, [r4]
lsls r1, r2, 1
adds r0, 0xA0
adds r0, r1
strh r3, [r0]
adds r2, 0x1
_0803B0C8:
adds r0, r6, 0
movs r3, 0x80
lsls r3, 9
adds r6, r3
adds r5, 0xC
asrs r3, r0, 16
cmp r3, r7
ble _0803B0AE
ldr r0, [r4]
ldr r3, [r0, 0x34]
adds r1, r2, 0
movs r2, 0xA
bl CreateMenuOnWindow
bl sub_803B204
bl sub_803B284
movs r0, 0x1
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803B0F4: .4byte gUnknown_203B3FC
_0803B0F8: .4byte gUnknown_80E7F54
_0803B0FC: .4byte gFunctionScriptTable
thumb_func_end sub_803B050
thumb_func_start sub_803B100
sub_803B100:
push {lr}
adds r1, r0, 0
lsls r1, 16
asrs r1, 16
ldr r0, _0803B11C
ldr r0, [r0]
bl MoveMenuToEntryId
bl sub_803B204
bl sub_803B284
pop {r0}
bx r0
.align 2, 0
_0803B11C: .4byte gUnknown_203B3FC
thumb_func_end sub_803B100
thumb_func_start sub_803B120
sub_803B120:
push {r4,lr}
ldr r4, _0803B13C
ldr r0, [r4]
bl GetKeyPress
cmp r0, 0x1
beq _0803B140
cmp r0, 0x2
bne _0803B144
movs r0, 0x1
bl PlayMenuSoundEffect
movs r0, 0x2
b _0803B160
.align 2, 0
_0803B13C: .4byte gUnknown_203B3FC
_0803B140:
movs r0, 0x3
b _0803B160
_0803B144:
ldr r0, [r4]
movs r1, 0x1
bl MenuCursorUpdate
lsls r0, 24
cmp r0, 0
bne _0803B156
movs r0, 0
b _0803B160
_0803B156:
bl sub_803B204
bl sub_803B284
movs r0, 0x1
_0803B160:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_803B120
thumb_func_start sub_803B168
sub_803B168:
ldr r0, _0803B188
ldr r0, [r0]
movs r1, 0x1E
ldrsh r2, [r0, r1]
movs r3, 0x1C
ldrsh r1, [r0, r3]
muls r1, r2
movs r3, 0x18
ldrsh r2, [r0, r3]
adds r1, r2
lsls r1, 1
adds r0, 0xA0
adds r0, r1
movs r1, 0
ldrsh r0, [r0, r1]
bx lr
.align 2, 0
_0803B188: .4byte gUnknown_203B3FC
thumb_func_end sub_803B168
thumb_func_start sub_803B18C
sub_803B18C:
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldr r5, _0803B1B8
ldr r0, [r5]
movs r1, 0xE5
strh r1, [r0, 0x22]
bl MenuUpdatePagesData
bl sub_803B204
bl sub_803B284
cmp r4, 0
beq _0803B1B2
ldr r0, [r5]
bl AddMenuCursorSprite
_0803B1B2:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803B1B8: .4byte gUnknown_203B3FC
thumb_func_end sub_803B18C
thumb_func_start sub_803B1BC
sub_803B1BC:
push {r4,r5,lr}
ldr r4, _0803B1FC
ldr r2, [r4]
cmp r2, 0
beq _0803B1F6
ldr r0, [r2, 0x34]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, r2, r1
adds r1, 0x3C
ldr r0, _0803B200
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldm r0!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x3C
movs r1, 0x1
movs r2, 0x1
bl ShowWindows
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
_0803B1F6:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803B1FC: .4byte gUnknown_203B3FC
_0803B200: .4byte gUnknown_80E7F3C
thumb_func_end sub_803B1BC
thumb_func_start sub_803B204
sub_803B204:
push {r4,lr}
ldr r4, _0803B280
ldr r0, [r4]
adds r0, 0x9C
movs r2, 0
movs r1, 0x1
strb r1, [r0]
ldr r0, [r4]
adds r0, 0x9D
strb r2, [r0]
ldr r0, [r4]
adds r0, 0x9E
movs r1, 0x8
strb r1, [r0]
ldr r0, [r4]
adds r0, 0x9F
strb r2, [r0]
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x3C
movs r1, 0x1
movs r2, 0x1
bl ShowWindows
ldr r0, [r4]
movs r1, 0x1A
ldrsh r0, [r0, r1]
movs r1, 0xC
bl CalcEntriesTotalHeight
adds r0, 0x2
lsls r0, 16
ldr r2, [r4]
ldr r3, [r2, 0x34]
lsls r1, r3, 1
adds r1, r3
lsls r1, 3
adds r1, r2, r1
adds r1, 0x4A
asrs r3, r0, 16
lsrs r0, 16
strh r0, [r1]
ldr r1, [r2, 0x34]
lsls r0, r1, 1
adds r0, r1
lsls r0, 3
adds r2, r0
adds r3, 0x2
adds r2, 0x4C
strh r3, [r2]
bl ResetUnusedInputStruct
ldr r0, [r4]
adds r0, 0x3C
movs r1, 0x1
movs r2, 0x1
bl ShowWindows
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0803B280: .4byte gUnknown_203B3FC
thumb_func_end sub_803B204
thumb_func_start sub_803B284
sub_803B284:
push {r4-r6,lr}
sub sp, 0x8
ldr r6, _0803B338
ldr r0, [r6]
ldr r0, [r0, 0x34]
bl CallPrepareTextbox_8008C54
ldr r0, [r6]
ldr r0, [r0, 0x34]
bl sub_80073B8
ldr r2, _0803B33C
ldr r0, [r6]
ldr r3, [r0, 0x34]
movs r0, 0
str r0, [sp]
movs r0, 0xA
movs r1, 0
bl PrintStringOnWindow
ldr r1, [r6]
adds r0, r1, 0
adds r0, 0x9E
ldrb r4, [r0]
lsls r4, 3
subs r4, 0x2
movs r0, 0x1E
ldrsh r2, [r1, r0]
adds r2, 0x1
movs r0, 0x7
str r0, [sp]
ldr r0, [r1, 0x34]
str r0, [sp, 0x4]
adds r0, r4, 0
movs r1, 0
movs r3, 0x2
bl PrintNumOnWindow
movs r5, 0
ldr r0, [r6]
movs r1, 0x1A
ldrsh r0, [r0, r1]
cmp r5, r0
bge _0803B324
_0803B2DC:
ldr r0, [r6]
movs r3, 0x1E
ldrsh r2, [r0, r3]
movs r3, 0x1C
ldrsh r1, [r0, r3]
muls r2, r1
adds r2, r5
lsls r2, 1
adds r1, r0, 0
adds r1, 0xA0
adds r1, r2
movs r2, 0
ldrsh r1, [r1, r2]
lsls r4, r1, 1
adds r4, r1
lsls r4, 2
ldr r1, _0803B340
adds r4, r1
adds r1, r5, 0
bl GetMenuEntryYCoord
adds r1, r0, 0
ldr r2, [r4, 0x4]
ldr r0, [r6]
ldr r3, [r0, 0x34]
movs r0, 0
str r0, [sp]
movs r0, 0x8
bl PrintStringOnWindow
adds r5, 0x1
ldr r0, [r6]
movs r3, 0x1A
ldrsh r0, [r0, r3]
cmp r5, r0
blt _0803B2DC
_0803B324:
ldr r0, _0803B338
ldr r0, [r0]
ldr r0, [r0, 0x34]
bl sub_80073E0
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0803B338: .4byte gUnknown_203B3FC
_0803B33C: .4byte gUnknown_80E7F6C
_0803B340: .4byte gFunctionScriptTable
thumb_func_end sub_803B284
thumb_func_start sub_803B344
sub_803B344:
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
ldr r1, _0803B358
adds r0, r1
bx lr
.align 2, 0
_0803B358: .4byte gUnknown_80E7F94
thumb_func_end sub_803B344
thumb_func_start sub_803B35C
sub_803B35C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r1, 0x18
bl sub_803C21C
ldrb r0, [r5, 0x2]
subs r0, 0x1
cmp r0, 0x8
bls _0803B372
b _0803B4FA
_0803B372:
lsls r0, 2
ldr r1, _0803B37C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803B37C: .4byte _0803B380
.align 2, 0
_0803B380:
.4byte _0803B3A4
.4byte _0803B3BE
.4byte _0803B3D8
.4byte _0803B3F2
.4byte _0803B414
.4byte _0803B442
.4byte _0803B470
.4byte _0803B49E
.4byte _0803B4CC
_0803B3A4:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3BE:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x1
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3D8:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x2
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
subs r1, 0x14
movs r0, 0x5
b _0803B576
_0803B3F2:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0x3
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x6
strb r0, [r1]
bl sub_8096DD8
str r0, [r4, 0x4C]
bl sub_8096DE8
str r0, [r4, 0x50]
b _0803B578
_0803B414:
ldrb r0, [r5, 0x1]
cmp r0, 0x3
bne _0803B42A
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xB
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x1
b _0803B438
_0803B42A:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xC
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x2
_0803B438:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x4
b _0803B576
_0803B442:
ldrb r0, [r5, 0x1]
cmp r0, 0x3
bne _0803B458
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xB
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x1
b _0803B466
_0803B458:
adds r0, r4, 0
adds r0, 0x40
movs r1, 0xC
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x42
movs r0, 0x2
_0803B466:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x5
b _0803B576
_0803B470:
adds r0, r5, 0
bl sub_803B600
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B488
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
b _0803B48E
_0803B488:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x4
_0803B48E:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x6
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B49E:
adds r0, r5, 0
bl sub_803B628
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B4B6
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
b _0803B4BC
_0803B4B6:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x5
_0803B4BC:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x7
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B4CC:
adds r0, r5, 0
bl sub_803B66C
str r0, [r4, 0x4]
movs r1, 0x1
negs r1, r1
cmp r0, r1
bne _0803B4E4
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xA
b _0803B4EA
_0803B4E4:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x6
_0803B4EA:
strb r0, [r1]
adds r1, r4, 0
adds r1, 0x41
movs r0, 0x8
strb r0, [r1]
adds r1, 0x1
movs r0, 0x5
b _0803B576
_0803B4FA:
ldrb r0, [r5, 0x1]
cmp r0, 0x2
beq _0803B528
cmp r0, 0x2
bgt _0803B50A
cmp r0, 0x1
beq _0803B514
b _0803B564
_0803B50A:
cmp r0, 0x3
beq _0803B53C
cmp r0, 0x4
beq _0803B550
b _0803B564
_0803B514:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x9
strb r0, [r1]
adds r1, 0x1
movs r0, 0xD
strb r0, [r1]
adds r1, 0x1
movs r0, 0x4
b _0803B576
_0803B528:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xA
strb r0, [r1]
adds r1, 0x1
movs r0, 0xE
strb r0, [r1]
adds r1, 0x1
movs r0, 0x5
b _0803B576
_0803B53C:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xB
strb r0, [r1]
adds r1, 0x1
movs r0, 0xF
strb r0, [r1]
adds r1, 0x1
movs r0, 0x1
b _0803B576
_0803B550:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0xC
strb r0, [r1]
adds r1, 0x1
movs r0, 0x10
strb r0, [r1]
adds r1, 0x1
movs r0, 0x2
b _0803B576
_0803B564:
adds r1, r4, 0
adds r1, 0x40
movs r0, 0x8
strb r0, [r1]
adds r1, 0x1
movs r0, 0xC
strb r0, [r1]
adds r1, 0x1
movs r0, 0x3
_0803B576:
strb r0, [r1]
_0803B578:
adds r0, r5, 0x4
str r0, [r4, 0x8]
movs r0, 0
str r0, [r4, 0xC]
ldrh r0, [r5, 0xC]
movs r1, 0
strh r0, [r4, 0x10]
ldrh r0, [r5, 0xE]
strh r0, [r4, 0x12]
ldrb r0, [r5, 0x10]
strb r0, [r4, 0x14]
ldrb r0, [r5]
subs r0, 0x2
cmp r0, 0x7
bhi _0803B5EC
lsls r0, 2
ldr r1, _0803B5A0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803B5A0: .4byte _0803B5A4
.align 2, 0
_0803B5A4:
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5C4
.4byte _0803B5DC
.4byte _0803B5CC
.4byte _0803B5DC
.4byte _0803B5DC
_0803B5C4:
adds r0, r4, 0
adds r0, 0x43
movs r1, 0x1
b _0803B5F0
_0803B5CC:
adds r1, r4, 0
adds r1, 0x43
movs r0, 0
strb r0, [r1]
adds r1, 0x1
movs r0, 0x3
strb r0, [r1]
b _0803B5F6
_0803B5DC:
adds r1, r4, 0
adds r1, 0x43
movs r0, 0x3
strb r0, [r1]
adds r1, 0x1
movs r0, 0x2
strb r0, [r1]
b _0803B5F6
_0803B5EC:
adds r0, r4, 0
adds r0, 0x43
_0803B5F0:
strb r1, [r0]
adds r0, 0x1
strb r1, [r0]
_0803B5F6:
str r5, [r4, 0x54]
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_803B35C
thumb_func_start sub_803B600
sub_803B600:
push {lr}
ldr r2, _0803B614
movs r1, 0
ldr r3, [r0, 0xC]
_0803B608:
ldr r0, [r2]
cmp r0, r3
bne _0803B618
adds r0, r1, 0
b _0803B624
.align 2, 0
_0803B614: .4byte gUnknown_80E9920
_0803B618:
adds r2, 0x8
adds r1, 0x1
cmp r1, 0x14
ble _0803B608
movs r0, 0x1
negs r0, r0
_0803B624:
pop {r1}
bx r1
thumb_func_end sub_803B600
thumb_func_start sub_803B628
sub_803B628:
push {r4,r5,lr}
adds r4, r0, 0
ldr r2, _0803B654
movs r3, 0
_0803B630:
ldr r1, [r2]
ldr r0, [r4, 0xC]
cmp r1, r0
beq _0803B650
movs r0, 0x2
ldrsh r1, [r2, r0]
movs r5, 0xC
ldrsh r0, [r4, r5]
cmp r1, r0
bne _0803B658
movs r0, 0
ldrsh r1, [r2, r0]
movs r5, 0xE
ldrsh r0, [r4, r5]
cmp r1, r0
bne _0803B658
_0803B650:
adds r0, r3, 0
b _0803B664
.align 2, 0
_0803B654: .4byte gUnknown_80E9F8C
_0803B658:
adds r2, 0xC
adds r3, 0x1
cmp r3, 0x2C
ble _0803B630
movs r0, 0x1
negs r0, r0
_0803B664:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_803B628
thumb_func_start sub_803B66C
sub_803B66C:
push {r4,r5,lr}
adds r4, r0, 0
ldr r2, _0803B698
movs r3, 0
_0803B674:
ldr r1, [r2]
ldr r0, [r4, 0xC]
cmp r1, r0
beq _0803B694
movs r0, 0x2
ldrsh r1, [r2, r0]
movs r5, 0xC
ldrsh r0, [r4, r5]
cmp r1, r0
bne _0803B69C
movs r0, 0
ldrsh r1, [r2, r0]
movs r5, 0xE
ldrsh r0, [r4, r5]
cmp r1, r0
bne _0803B69C
_0803B694:
adds r0, r3, 0
b _0803B6A8
.align 2, 0
_0803B698: .4byte gUnknown_80E8168
_0803B69C:
adds r2, 0x4
adds r3, 0x1
cmp r3, 0x5
ble _0803B674
movs r0, 0x1
negs r0, r0
_0803B6A8:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_803B66C
.align 2,0

View File

@@ -1,87 +1,36 @@
.section .rodata
@ code_803B050 #1
.align 2,0
.string "pksdir0\0"
.global gUnknown_80E7F3C
gUnknown_80E7F3C: @ 80E7F3C
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x03, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80E7F54
gUnknown_80E7F54: @ 80E7F54
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x06, 0x00, 0x00, 0x00
.byte 0x02, 0x00, 0x02, 0x00
.byte 0x18, 0x00, 0x11, 0x00
.byte 0x11, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_80E7F6C
gUnknown_80E7F6C: @ 80E7F6C
.string "Script\0"
@ code_803B050 #2
.align 2,0
.string "pksdir0\0"
@ code_803B050 #3
.align 2,0
.string "pksdir0\0"
@ code_803B050 #4
.align 2,0
.string "pksdir0\0"
@ code_803B050 #5
.align 2,0
.string "pksdir0\0"
.align 2,0
.global gUnknown_80E7F94
gUnknown_80E7F94: @ 80E7F94
.macro st_80E7F94 a, b, c, e, f, g, h, i, j, k, m, n
.byte \a, \b, \c
.align 2, 0
.4byte \e, \f
.2byte \g, \h
.byte \i, \j, \k
.align 2, 0
.4byte \m, \n
.endm
st_80E7F94 5, 1, 4, 0xC2B, 0x123456, 0x19, 0x182, 0x38, 8, 0x3A, sUnknown_80E8088, sUnknown_80E8070
st_80E7F94 5, 1, 4, 0x112C, 0x123456, 4, 0x115, 0x38, 8, 0x3A, sUnknown_80E8060, sUnknown_80E8048
st_80E7F94 5, 1, 4, 0x112D, 0x123456, 1, 0x118, 0x38, 8, 0x3A, sUnknown_80E8038, sUnknown_80E8020
st_80E7F94 5, 1, 0, 0x1B2E, 0x123456, 7, 0x9B, 0x38, 8, 0x3A, 0, 0
st_80E7F94 5, 1, 0, 0x903, 0x123456, 0x98, 0x9E, 0x38, 8, 0x3A, 0, 0
@ code_803B344
.global sUnknown_80E8020
sUnknown_80E8020: @ 80E8020
.string "SHOW RESCUE 00\n"
.string " EVENT02\0"
.align 2, 0
.global sUnknown_80E8038
sUnknown_80E8038: @ 80E8038
.string "SHOW TITLE02\0"
.align 2, 0
.global sUnknown_80E8048
sUnknown_80E8048: @ 80E8048
.string "SHOW RESCUE 00\n"
.string " EVENT01\0"
.align 2, 0
.global sUnknown_80E8060
sUnknown_80E8060: @ 80E8060
.string "SHOW TITLE01\0"
.align 2, 0
.global sUnknown_80E8070
sUnknown_80E8070: @ 80E8070
.string "SHOW RESCUE 00\n"
.string " EVENT00\0"
.align 2, 0
.global sUnknown_80E8088
sUnknown_80E8088: @ 80E8088
.string "SHOW TITLE00\0"
.align 2, 0
.align 2, 0

View File

@@ -3,8 +3,13 @@
#include "structs/str_802C39C.h"
// code_803B050.s
extern unkStruct_803B344 *sub_803B344(u8);
extern void sub_803B35C(WonderMail *, unkStruct_802C39C *);
bool8 sub_803B050(void);
void sub_803B100(s32 _id);
u32 sub_803B120(void);
s16 sub_803B168(void);
void sub_803B1BC(void);
#endif // GUARD_CODE_803B050_H
unkStruct_803B344 *sub_803B344(u8 r0);
void sub_803B35C(WonderMail *mail, unkStruct_802C39C *param_2);
#endif // GUARD_CODE_803B050_H

View File

@@ -17,8 +17,8 @@ typedef struct subStruct_203B490
struct unkStruct_8096AF8
{
bool8 unk0;
/* 0x2 */ u16 clientSpecies;
/* 0x4 */ u16 targetSpecies;
/* 0x2 */ s16 clientSpecies;
/* 0x4 */ s16 targetSpecies;
};
// size: 0x32C?

View File

@@ -2,6 +2,7 @@
#define POKEMON_MAIL_H
#include "structs/str_802C39C.h"
#include "pokemon_mail_pre.h"
// size: 0x8
typedef struct PokemonMail
@@ -21,8 +22,7 @@ typedef struct unkStruct_80E9920
// size: 0xC
typedef struct unkStruct_80E9F8C
{
/* 0x0 */ s16 speciesA;
/* 0x2 */ s16 speciesB;
/* 0x0 */ struct PokemonPair species;
/* 0x4 */ const u8 *headline;
/* 0x8 */ const u8 *text;
} unkStruct_80E9F8C;

View File

@@ -12,15 +12,10 @@ typedef struct unkStruct_802C39C
/* 0x10 */ s16 clientSpecies;
/* 0x12 */ s16 targetSpecies;
/* 0x14 */ u8 targetItem;
/* 0x15 */ u8 fill15[0x2E - 0x15];
/* 0x2E */ u8 rewardType;
u8 *unk30;
/* 0x34 */ u8 rewardItem;
u8 fill35[0x38 - 0x35];
/* 0x38 */ u8 unk38[0x40 - 0x38];
u8 mailTitleType;
u8 mailDescriptionType;
u8 mailMissionType;
/* 0x18 */ unkStruct_802F204 unk18;
/* 0x40 */ u8 mailTitleType;
/* 0x41 */ u8 mailDescriptionType;
/* 0x42 */ u8 mailMissionType;
u8 unk43;
u8 mailStatus; // mail status (suspend / take job / done)
/* 0x48 */ u32 y;

View File

@@ -186,7 +186,8 @@ SECTIONS {
src/debug_menu2.o(.text);
src/debug_menu3.o(.text);
src/debug_menu4.o(.text);
asm/code_803B050.o(.text);
src/code_803B050.o(.text);
src/code_803B344.o(.text);
src/pokemon_mail.o(.text);
src/code_803C1B4.o(.text);
src/personality_test1.o(.text);
@@ -562,6 +563,11 @@ SECTIONS {
src/debug_menu2.o(.rodata);
src/debug_menu3.o(.rodata);
src/debug_menu4.o(.rodata);
src/code_803B050.o(.rodata);
src/code_803B050_unused1.o(.rodata);
src/code_803B050_unused2.o(.rodata);
src/code_803B050_unused3.o(.rodata);
src/code_803B344.o(.rodata);
data/data_80E7D40.o(.rodata);
src/pokemon_mail_pre.o(.rodata);
src/pokemon_mail.o(.rodata);

View File

@@ -1,3 +1,225 @@
#include "global.h"
#include "globaldata.h"
#include "structs/str_ground_script.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "music_util.h"
#include "text_1.h"
#include "text_2.h"
#include "text_3.h"
EWRAM_INIT void *gUnknown_203B3FC = NULL;
struct unkStruct_203B3FC
{
// size: 0x3D0
MenuHeaderWindow mh;
s16 unkA0[10];
};
EWRAM_INIT struct unkStruct_203B3FC *gUnknown_203B3FC = NULL;
const WindowTemplate gUnknown_80E7F3C =
{
0,
0x03,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const WindowTemplate gUnknown_80E7F54 =
{
0,
0x06,
0x02, 0x02,
0x18, 0x11,
0x11, 0x00,
NULL
};
static void sub_803B204(void);
static void sub_803B284(void);
// https://decomp.me/scratch/xx1GB - 91.35% matched (Seth)
NAKED
bool8 sub_803B050(void)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tldr r4, _0803B0F4\n"
"\tmovs r0, 0xF4\n"
"\tlsls r0, 2\n"
"\tmovs r1, 0x8\n"
"\tbl MemoryAlloc\n"
"\tstr r0, [r4]\n"
"\tmovs r1, 0x3\n"
"\tstr r1, [r0, 0x34]\n"
"\tadds r1, r0, 0\n"
"\tadds r1, 0x84\n"
"\tstr r1, [r0, 0x38]\n"
"\tadds r0, 0x3C\n"
"\tbl RestoreSavedWindows\n"
"\tldr r1, [r4]\n"
"\tldr r2, [r1, 0x34]\n"
"\tlsls r0, r2, 1\n"
"\tadds r0, r2\n"
"\tlsls r0, 3\n"
"\tadds r1, r0\n"
"\tadds r1, 0x3C\n"
"\tldr r0, _0803B0F8\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldr r0, [r4]\n"
"\tldr r1, [r0, 0x38]\n"
"\tadds r0, 0x9C\n"
"\tstr r0, [r1, 0x14]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl ShowWindows\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0\n"
"\tmovs r7, 0xCB\n"
"\tlsls r7, 1\n"
"\tmovs r6, 0x80\n"
"\tlsls r6, 9\n"
"\tmovs r5, 0\n"
"_0803B0AE:\n"
"\tldr r0, _0803B0FC\n"
"\tadds r0, r5, r0\n"
"\tmovs r1, 0x2\n"
"\tldrsh r0, [r0, r1]\n"
"\tldr r4, _0803B0F4\n"
"\tcmp r0, 0xA\n"
"\tbne _0803B0C8\n"
"\tldr r0, [r4]\n"
"\tlsls r1, r2, 1\n"
"\tadds r0, 0xA0\n"
"\tadds r0, r1\n"
"\tstrh r3, [r0]\n"
"\tadds r2, 0x1\n"
"_0803B0C8:\n"
"\tadds r0, r6, 0\n"
"\tmovs r3, 0x80\n"
"\tlsls r3, 9\n"
"\tadds r6, r3\n"
"\tadds r5, 0xC\n"
"\tasrs r3, r0, 16\n"
"\tcmp r3, r7\n"
"\tble _0803B0AE\n"
"\tldr r0, [r4]\n"
"\tldr r3, [r0, 0x34]\n"
"\tadds r1, r2, 0\n"
"\tmovs r2, 0xA\n"
"\tbl CreateMenuOnWindow\n"
"\tbl sub_803B204\n"
"\tbl sub_803B284\n"
"\tmovs r0, 0x1\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1\n"
"\t.align 2, 0\n"
"_0803B0F4: .4byte gUnknown_203B3FC\n"
"_0803B0F8: .4byte gUnknown_80E7F54\n"
"_0803B0FC: .4byte gFunctionScriptTable");
}
void sub_803B100(s32 _id)
{
s32 id = (s16)_id;
MoveMenuToEntryId(&gUnknown_203B3FC->mh.m.input, id);
sub_803B204();
sub_803B284();
}
u32 sub_803B120(void)
{
switch(GetKeyPress(&gUnknown_203B3FC->mh.m.input))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
return 3;
default:
break;
}
if((MenuCursorUpdate(&gUnknown_203B3FC->mh.m.input, TRUE) != FALSE))
{
sub_803B204();
sub_803B284();
return 1;
}
else
return 0;
}
s16 sub_803B168(void)
{
return gUnknown_203B3FC->unkA0[GET_CURRENT_MENU_ENTRY(gUnknown_203B3FC->mh.m.input)];
}
UNUSED static void sub_803B18C(u8 r0)
{
gUnknown_203B3FC->mh.m.input.totalEntriesCount = 0xE5;
MenuUpdatePagesData(&gUnknown_203B3FC->mh.m.input);
sub_803B204();
sub_803B284();
if(r0)
AddMenuCursorSprite(&gUnknown_203B3FC->mh.m.input);
}
void sub_803B1BC(void)
{
if(gUnknown_203B3FC)
{
gUnknown_203B3FC->mh.m.windows.id[gUnknown_203B3FC->mh.m.menuWinId] = gUnknown_80E7F3C;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B3FC->mh.m.windows, TRUE, TRUE);
MemoryFree(gUnknown_203B3FC);
gUnknown_203B3FC = NULL;
}
}
static void sub_803B204(void)
{
gUnknown_203B3FC->mh.header.count = 1;
gUnknown_203B3FC->mh.header.currId = 0;
gUnknown_203B3FC->mh.header.width = 8;
gUnknown_203B3FC->mh.header.f3 = 0;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B3FC->mh.m.windows, TRUE, TRUE);
UPDATE_MENU_WINDOW_HEIGHT(gUnknown_203B3FC->mh.m);
}
static void sub_803B284(void)
{
s32 x, y, i;
s32 pageNum;
const ScriptRef *ptr;
CallPrepareTextbox_8008C54(gUnknown_203B3FC->mh.m.menuWinId);
sub_80073B8(gUnknown_203B3FC->mh.m.menuWinId);
PrintStringOnWindow(0xA, 0, "Script", gUnknown_203B3FC->mh.m.menuWinId, 0);
x = (gUnknown_203B3FC->mh.header.width * 8) - 2;
pageNum = gUnknown_203B3FC->mh.m.input.currPage + 1;
PrintNumOnWindow(x, 0, pageNum, 2, 7, gUnknown_203B3FC->mh.m.menuWinId);
// This line has no real effect. It's a magic 'fakematch' to fool agb into generating the same asm. It can be removed if you don't care about matching.
if (x) { i = 0; }
for (i = 0; i < gUnknown_203B3FC->mh.m.input.currPageEntries; i++) {
ptr = &gFunctionScriptTable[gUnknown_203B3FC->unkA0[(gUnknown_203B3FC->mh.m.input.currPage * gUnknown_203B3FC->mh.m.input.entriesPerPage) + i]];
y = GetMenuEntryYCoord(&gUnknown_203B3FC->mh.m.input, i);
PrintStringOnWindow(8, y, ptr->name, gUnknown_203B3FC->mh.m.menuWinId, 0);
}
sub_80073E0(gUnknown_203B3FC->mh.m.menuWinId);
}

View File

@@ -0,0 +1,2 @@
#include "global.h"
#include "globaldata.h"

View File

@@ -0,0 +1,2 @@
#include "global.h"
#include "globaldata.h"

View File

@@ -0,0 +1,2 @@
#include "global.h"
#include "globaldata.h"

273
src/code_803B344.c Normal file
View File

@@ -0,0 +1,273 @@
#include "global.h"
#include "globaldata.h"
#include "constants/dungeon.h"
#include "constants/friend_area.h"
#include "constants/item.h"
#include "constants/monster.h"
#include "constants/wonder_mail.h"
#include "structs/str_802C39C.h"
#include "code_803C1D0.h"
#include "code_80958E8.h"
#include "pokemon_mail.h"
static s32 sub_803B600(WonderMail *);
extern s32 sub_803B628(WonderMail *);
extern s32 sub_803B66C(WonderMail *);
typedef struct unkStruct_80E7F94
{
/* 0x0 */ WonderMail mail;
u8 *unk14;
u8 *unk18;
} unkStruct_80E7F94;
extern u8 sUnknown_80E8020[];
extern u8 sUnknown_80E8038[];
extern u8 sUnknown_80E8048[];
extern u8 sUnknown_80E8060[];
extern u8 sUnknown_80E8070[];
extern u8 sUnknown_80E8088[];
const unkStruct_80E7F94 gUnknown_80E7F94[5] = {
{
{0x5, MISSION_TYPE_FIND_ITEM, 0x4, DUNGEON_ODDITY_CAVE, 0xC, 0x123456, MONSTER_PIKACHU, MONSTER_CHIMECHO, ITEM_SITRUS_BERRY, ITEM1_EXTRA, ITEM_REVIVER_SEED, FRIEND_AREA_NONE},
sUnknown_80E8088,
sUnknown_80E8070,
},
{
{0x5, MISSION_TYPE_FIND_ITEM, 0x4, DUNGEON_REMAINS_ISLAND, 0x11, 0x123456,MONSTER_CHARMANDER, MONSTER_TREECKO, ITEM_SITRUS_BERRY, ITEM1_EXTRA, ITEM_REVIVER_SEED, FRIEND_AREA_NONE},
sUnknown_80E8060,
sUnknown_80E8048,
},
{
{0x5, MISSION_TYPE_FIND_ITEM, 0x4, DUNGEON_MARVELOUS_SEA, 0x11, 0x123456,MONSTER_BULBASAUR, MONSTER_TORCHIC, ITEM_SITRUS_BERRY, ITEM1_EXTRA, ITEM_REVIVER_SEED, FRIEND_AREA_NONE},
sUnknown_80E8038,
sUnknown_80E8020,
},
{
{0x5, MISSION_TYPE_FIND_ITEM, 0x0, DUNGEON_FANTASY_STRAIT, 0x1B, 0x123456, MONSTER_SQUIRTLE, MONSTER_CYNDAQUIL, ITEM_SITRUS_BERRY, ITEM1_EXTRA, ITEM_REVIVER_SEED, FRIEND_AREA_NONE},
NULL,
NULL,
},
{
{0x5, MISSION_TYPE_FIND_ITEM, 0x0, DUNGEON_SINISTER_WOODS, 0x9, 0x123456, MONSTER_CHIKORITA, MONSTER_TOTODILE, ITEM_SITRUS_BERRY, ITEM1_EXTRA, ITEM_REVIVER_SEED, FRIEND_AREA_NONE},
NULL,
NULL,
},
};
// TODO: unkStruct_803B344 isn't what we thought it is
const unkStruct_80E7F94 *sub_803B344(s32 _r0)
{
u32 r0 = (u8)_r0;
return &gUnknown_80E7F94[r0];
}
void sub_803B35C(WonderMail *mail, unkStruct_802C39C *param_2)
{
u8 uVar2;
sub_803C21C(mail, &param_2->unk18);
switch(mail->unk2) {
case '\x01':
param_2->mailTitleType = 0;
param_2->mailDescriptionType = 0;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x02':
param_2->mailTitleType = 1;
param_2->mailDescriptionType = 1;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x03':
param_2->mailTitleType = 2;
param_2->mailDescriptionType = 2;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk18.rewardType = 5;
break;
case '\x04':
param_2->mailTitleType = 3;
param_2->mailDescriptionType = 3;
param_2->mailMissionType = MISSION_TYPE_SPECIAL_MISSION;
param_2->unk4C = sub_8096DD8();
param_2->unk50 = sub_8096DE8();
break;
case '\x05':
if (mail->missionType == MISSION_TYPE_RESCUE_CLIENT) {
param_2->mailTitleType = '\v';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
}
else {
param_2->mailTitleType = '\f';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
}
param_2->mailDescriptionType = 4;
break;
case '\x06':
if (mail->missionType == 3) {
param_2->mailTitleType = '\v';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
}
else {
param_2->mailTitleType = '\f';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
}
param_2->mailDescriptionType = 5;
break;
case '\a':
param_2->unk0[1] = sub_803B600(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 9;
}
else {
param_2->mailTitleType = 4;
}
param_2->mailDescriptionType = 6;
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case '\b':
param_2->unk0[1] = sub_803B628(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 9;
}
else {
param_2->mailTitleType = 5;
}
param_2->mailDescriptionType = 7;
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case '\t':
param_2->unk0[1] = sub_803B66C(mail);
if (param_2->unk0[1] == -1) {
param_2->mailTitleType = 0xA;
}
else {
param_2->mailTitleType = 6;
}
param_2->mailDescriptionType = '\b';
param_2->mailMissionType = MISSION_TYPE_ESCORT_CLIENT;
break;
default:
switch(mail->missionType)
{
case 1:
param_2->mailTitleType = '\t';
param_2->mailDescriptionType = '\r';
param_2->mailMissionType = MISSION_TYPE_RESCUE_TARGET;
break;
case 2:
param_2->mailTitleType = '\n';
param_2->mailDescriptionType = '\x0e';
param_2->mailMissionType = MISSION_TYPE_ESCORT_CLIENT;
break;
case 3:
param_2->mailTitleType = '\v';
param_2->mailDescriptionType = '\x0f';
param_2->mailMissionType = MISSION_TYPE_FIND_ITEM;
break;
case 4:
param_2->mailTitleType = '\f';
param_2->mailDescriptionType = '\x10';
param_2->mailMissionType = MISSION_TYPE_DELIVER_ITEM;
break;
default:
param_2->mailTitleType = 8;
param_2->mailDescriptionType = 0xC;
param_2->mailMissionType = MISSION_TYPE_RESCUE_CLIENT;
break;
}
break;
}
param_2->dungeonSeed = &mail->dungeonSeed;
param_2->playerName = NULL;
uVar2 = 0;
param_2->clientSpecies = mail->clientSpecies;
param_2->targetSpecies = mail->targetSpecies;
param_2->targetItem = mail->targetItem;
switch(mail->mailType) {
case 2:
case 3:
case 4:
case 5:
param_2->unk43 = 1;
param_2->mailStatus = 1;
break;
case 7:
param_2->unk43 = 0;
param_2->mailStatus = 3;
break;
case 6:
case 8:
case 9:
param_2->unk43 = 3;
param_2->mailStatus = 2;
break;
default:
param_2->unk43 = uVar2;
param_2->mailStatus = uVar2;
break;
}
param_2->mail = mail;
return;
}
static s32 sub_803B600(WonderMail *mail)
{
s32 index;
const unkStruct_80E9920 *ptr;
for(ptr = &gUnknown_80E9920[0], index = 0; index < ARRAY_COUNT_INT(gUnknown_80E9920); ptr++, index++)
{
if ((ptr->parentSpecies == mail->clientSpecies) && (ptr->childSpecies == mail->targetSpecies)) {
return index;
}
}
return -1;
}
s32 sub_803B628(WonderMail *param_1)
{
const unkStruct_80E9F8C *ptr;
int i;
ptr = &gUnknown_80E9F8C[0];
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80E9F8C); ptr++, i++) {
if (ptr->species.speciesA == param_1->clientSpecies && ptr->species.speciesB == param_1->targetSpecies)
return i;
if (ptr->species.speciesB == param_1->clientSpecies && ptr->species.speciesA == param_1->targetSpecies)
return i;
}
return -1;
}
s32 sub_803B66C(WonderMail *param_1)
{
const struct PokemonPair *ptr;
int i;
ptr = &gUnknown_80E8168[0];
for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80E8168); ptr++, i++) {
if (ptr->speciesA == param_1->clientSpecies && ptr->speciesB == param_1->targetSpecies)
return i;
if (ptr->speciesB == param_1->clientSpecies && ptr->speciesA == param_1->targetSpecies)
return i;
}
return -1;
}

View File

@@ -176,7 +176,7 @@ bool8 sub_803C45C(WonderMail *mail)
counter = 0;
ptr = &gUnknown_80E9F8C[0];
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E9F8C); ptr++, id++) {
if (sub_803C110(ptr->speciesA) && sub_803C110(ptr->speciesB)) {
if (sub_803C110(ptr->species.speciesA) && sub_803C110(ptr->species.speciesB)) {
stack[counter++] = id;
}
}
@@ -186,12 +186,12 @@ bool8 sub_803C45C(WonderMail *mail)
ptr = &gUnknown_80E9F8C[id];
if ((Rand32Bit() & 0x10)) {
mail->clientSpecies = ptr->speciesA;
mail->targetSpecies = ptr->speciesB;
mail->clientSpecies = ptr->species.speciesA;
mail->targetSpecies = ptr->species.speciesB;
}
else {
mail->clientSpecies = ptr->speciesB;
mail->targetSpecies = ptr->speciesA;
mail->clientSpecies = ptr->species.speciesB;
mail->targetSpecies = ptr->species.speciesA;
}
mail->unk2 = 8;

View File

@@ -334,26 +334,26 @@ void CreateRescueDescription(unkStruct_802C39C *param_1)
y += 12;
PrintStringOnWindow(10, y, gRewardText, param_1->unk0[0], 0);
switch (param_1->rewardType) {
switch (param_1->unk18.rewardType) {
case MONEY:
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], param_1->unk18.moneyReward);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case MONEY_EXTRA:
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], param_1->unk18.moneyReward);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case ITEM: // Item
case ITEM_EXTRA: // Item + ?
BufferItemName(gFormatBuffer_Items[0], param_1->rewardItem, NULL);
sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], gFormatBuffer_Items[0]);
BufferItemName(gFormatBuffer_Items[0], param_1->unk18.itemRewards[0], NULL);
sprintfStatic(buf_1, gMissionRewardText[param_1->unk18.rewardType], gFormatBuffer_Items[0]);
PrintStringOnWindow(68, y, buf_1, param_1->unk0[0], 0);
break;
case 4: // Friend Area
PrintStringOnWindow(68, y, gMissionRewardText[param_1->rewardType], param_1->unk0[0], 0);
PrintStringOnWindow(68, y, gMissionRewardText[param_1->unk18.rewardType], param_1->unk0[0], 0);
break;
default:
PrintStringOnWindow(68, y, gMissionRewardText[param_1->rewardType], param_1->unk0[0], 0);
PrintStringOnWindow(68, y, gMissionRewardText[param_1->unk18.rewardType], param_1->unk0[0], 0);
break;
}

View File

@@ -5,8 +5,17 @@
#include "constants/monster.h"
#include "code_800558C.h"
#include "code_800D090.h"
#include "code_801602C.h"
#include "code_801B60C.h"
#include "code_802DB28.h"
#include "code_80958E8.h"
#include "code_80A26CC.h"
#include "luminous_cave.h"
#include "makuhita_dojo1.h"
#include "makuhita_dojo2.h"
#include "music_util.h"
#include "code_801D014.h"
#include "code_803B050.h"
#include "code_8099360.h"
#include "credits2.h"
#include "event_flag.h"
@@ -24,9 +33,11 @@
#include "kecleon_bros4.h"
#include "main_loops.h"
#include "memory.h"
#include "palette_util.h"
#include "personality_test1.h"
#include "portrait_placement.h"
#include "pokemon.h"
#include "save_write.h"
#include "string_format.h"
#include "text_1.h"
#include "text_2.h"
@@ -102,91 +113,36 @@ static IWRAM_INIT struct Textbox *sTextbox = { NULL };
extern bool8 sub_802FCF0(void);
bool8 IsTextboxOpen_809B40C(struct TextboxText *);
extern s32 sub_803B168(void);
extern void sub_803B1BC(void);
struct unkStruct_8096AF8
{
bool8 unk0;
/* 0x2 */ s16 clientSpecies;
/* 0x4 */ s16 targetSpecies;
};
extern void sub_80A8EC0(u8 *, u32);
Pokemon *sub_808D3BC(void);
Pokemon *sub_808D3F8(void);
Pokemon *sub_80A8D54(s16);
void sub_80A7DDC(s16 *, s16*);
u8 IsStarterMonster(s16);
s16 sub_80A8BFC(s32);
void sub_809B028(const MenuItem *, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text);
bool8 sub_809B18C(s32 *sp);
extern void sub_8099A34(s32 a0);
extern void sub_8099A48(s32 a0);
extern void GroundScriptLock(s16 index, s32 r1);
extern void GroundScriptLockJumpZero(s16 index);
extern u8 sub_802B2D4(void);
extern void sub_802B3B8(void);
extern u32 sub_802B358(void);
void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon);
u8 sub_802DB28(u8, u8);
void sub_8096BD0();
void ScenarioCalc(s16 varId, s32 main, s32 sub);
void MakuhitaDojo_Delete();
u32 HandleMakuhitaDojoState();
s16 sub_802FED0();
u8 sub_801FB50();
s32 sub_80160D8();
s32 sub_801A8AC();
void sub_801A928();
s32 sub_8016080();
void CleanConfirmNameMenu();
u32 CreateConfirmNameMenu(u32 mode, u8 *name);
void sub_8096BD0(void);
bool8 DrawCredits(s32 creditsCategoryIndex, s32);
u32 sub_8035574();
void sub_803565C();
u8 sub_8094D14();
void sub_802465C();
s32 sub_80246F0();
s32 GetScriptVarValue(u8 *localVarBuf, s32 varId);
bool8 HasEvolutionCompleted();
void GroundMap_ExecuteEvent();
void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val);
void CleanLuminousCave();
u8 sub_80023E4();
u8 CreateFriendListMenu();
void PlayMenuSoundEffect();
void sub_803565C(void);
u8 sub_8094D14(void);
void GroundMap_ExecuteEvent(s16, u32);
bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems);
s32 sub_801516C();
void sub_80151A4();
s32 sub_8015198();
u8 sub_80211AC();
void sub_80213A0();
u8 sub_802132C();
u8 MakuhitaDojo_New();
u8 sub_803B050();
void sub_803B100();
u8 sub_801B60C();
u8 CreateKecleonBros();
s16 sub_80A2654(s16);
u8 sub_802F73C();
u8 sub_802F848();
s32 sub_802F8A0();
void sub_802F974();
s16 sub_802F90C();
s16 sub_80A26B8();
u8 sub_80302E8();
s32 sub_80303AC();
void sub_8030480();
s16 sub_8030418();
void PrepareSavePakWrite();
u8 WriteSavePak();
void FinishWriteSavePak();
u8 CreateKangaskhanStorage();
void sub_8011C28();
u8 CreateHelperPelipperMenu();
u8 CreateWigglytuffShop();
u8 sub_8099328();
void sub_8011C28(u32);
bool8 CreateHelperPelipperMenu(s16);
u32 sub_802E90C();
void sub_802E918();
u32 sub_80282DC(u8 *r0);
@@ -198,27 +154,15 @@ extern u8 sub_802DFB0(void);
extern void CleanThankYouMailPelipper(void);
extern void CleanHelperPelipper(void);
extern void sub_802E06C(void);
extern void sub_802DC00(void);
extern void sub_801B72C(void);
extern u32 ThankYouMailPelipperCallback(void);
extern u32 HelperPelipperCallback(void);
extern u32 sub_802E890(void);
extern u32 sub_802DFD8(void);
extern u32 sub_802DBD4(void);
extern u32 sub_803B120(void);
extern u32 sub_801B6AC(void);
u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2);
bool8 sub_809B648(void);
void sub_809B57C(void);
bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3);
void sub_809C39C(void);
void sub_809C3D8(void);
void sub_809C504(void);
void sub_809C464(void);
void sub_809C478(void);
void sub_809C414(void);
void sub_809C4B0(void);
void sub_809C550(void);
u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2);
bool8 sub_809B648(void);
#define TEXTBOX_FLAG_UNUSED_x2 0x2 // Unused, but set for almost all flag sets
#define TEXTBOX_FLAG_INSTANT_TEXT 0x20
@@ -305,6 +249,14 @@ static void ResetAllTextboxPortraits(void);
static bool8 ScriptPrintTextInternal(struct TextboxText *ptr, u32 flags_, s32 a2_, const char *text);
static u32 SetTextboxType(u32 textboxType, bool8 unused);
static void ResetTextbox(void);
static void sub_809C39C(void);
static void sub_809C3D8(void);
static void sub_809C504(void);
static void sub_809C464(void);
static void sub_809C478(void);
static void sub_809C414(void);
static void sub_809C4B0(void);
static void sub_809C550(void);
void TextboxInit(void)
{
@@ -1980,7 +1932,7 @@ bool8 sub_809B648(void)
return 0;
}
void sub_809C39C(void)
static void sub_809C39C(void)
{
sTextbox->unk430 = sub_801D178();
if(sTextbox->unk430 == 3)
@@ -1988,7 +1940,7 @@ void sub_809C39C(void)
sub_801D1E0();
}
void sub_809C3D8(void)
static void sub_809C3D8(void)
{
sTextbox->unk430 = sub_801D178();
if(sTextbox->unk430 == 3)
@@ -1996,7 +1948,7 @@ void sub_809C3D8(void)
sub_801D1E0();
}
void sub_809C414(void)
static void sub_809C414(void)
{
u8 val;
@@ -2015,14 +1967,14 @@ void sub_809C414(void)
}
void sub_809C464(void)
static void sub_809C464(void)
{
DeleteTestTracker();
sub_8001064();
sub_809965C();
}
void sub_809C478(void)
static void sub_809C478(void)
{
s32 temp;
s32 temp1;
@@ -2040,13 +1992,13 @@ void sub_809C478(void)
sub_80993C0(0);
}
void sub_809C4B0(void)
static void sub_809C4B0(void)
{
s16 scriptIndex_s16;
s32 scriptIndex = -1;
if (sTextbox->unk430 == 0) {
scriptIndex = (s16) sub_803B168();
scriptIndex = sub_803B168();
ASM_MATCH_TRICK(sTextbox->unk5A4);
scriptIndex_s16 = scriptIndex;
@@ -2064,7 +2016,7 @@ void sub_809C4B0(void)
GroundMap_ExecuteEvent(scriptIndex, 0);
}
void sub_809C504(void)
static void sub_809C504(void)
{
u8 temp;
@@ -2080,7 +2032,7 @@ void sub_809C504(void)
sub_80282FC();
}
void sub_809C550(void)
static void sub_809C550(void)
{
u32 ret;
s32 val;

View File

@@ -212,7 +212,7 @@ void sub_803092C(void)
local.clientSpecies = mail->clientSpecies;
local.targetSpecies = mail->clientSpecies;
local.targetItem = ITEM_NOTHING;
local.rewardType = MONEY1;
local.unk18.rewardType = MONEY1;
switch(mail->mailType)
{

View File

@@ -129,11 +129,11 @@ void sub_8030E48(void)
stack.targetSpecies = mail->clientSpecies;
stack.targetItem = ITEM_NOTHING;
if (mail->item.id == ITEM_NOTHING) {
stack.rewardType = MONEY1;
stack.unk18.rewardType = MONEY1;
}
else {
stack.rewardType = ITEM;
stack.rewardItem = mail->item.id;
stack.unk18.rewardType = ITEM;
stack.unk18.itemRewards[0] = mail->item.id;
}
switch(mail->mailType)
{