cereader_tool and ereader_helpers

This commit is contained in:
PikalaxALT
2019-06-14 18:23:27 -04:00
parent 308bf88e60
commit e07368e90b
18 changed files with 673 additions and 1381 deletions
-196
View File
@@ -1,196 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_815D654
sub_815D654: @ 815D654
push {lr}
ldr r0, _0815D674 @ =gSaveBlock1Ptr
ldr r0, [r0]
ldr r1, _0815D678 @ =0x00003d41
adds r0, r1
ldrb r1, [r0]
adds r2, r1, 0x1
adds r0, r2, 0
asrs r0, 8
lsls r0, 8
subs r0, r2, r0
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_0815D674: .4byte gSaveBlock1Ptr
_0815D678: .4byte 0x00003d41
thumb_func_end sub_815D654
thumb_func_start sub_815D67C
sub_815D67C: @ 815D67C
push {r4,r5,lr}
adds r5, r0, 0
ldrb r0, [r5, 0x1]
subs r0, 0x1
lsls r0, 24
lsrs r0, 24
cmp r0, 0x7
bhi _0815D6AA
ldrb r0, [r5, 0x2]
cmp r0, 0x2
bhi _0815D6AA
movs r4, 0xF7
lsls r4, 2
adds r0, r5, 0
adds r1, r4, 0
bl CalcByteArraySum
adds r4, r5, r4
ldr r1, [r4]
cmp r0, r1
bne _0815D6AA
movs r0, 0x1
b _0815D6AC
_0815D6AA:
movs r0, 0
_0815D6AC:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_815D67C
thumb_func_start sub_815D6B4
sub_815D6B4: @ 815D6B4
push {r4-r7,lr}
adds r7, r0, 0
ldrb r6, [r7]
subs r0, r6, 0x1
cmp r0, 0x7
bhi _0815D6F8
movs r5, 0
cmp r5, r6
bcs _0815D6E0
adds r4, r7, 0
adds r4, 0x8
_0815D6CA:
adds r0, r4, 0
bl sub_815D67C
cmp r0, 0
beq _0815D6F8
movs r0, 0xF8
lsls r0, 2
adds r4, r0
adds r5, 0x1
cmp r5, r6
bcc _0815D6CA
_0815D6E0:
adds r0, r7, 0
adds r0, 0x8
lsls r1, r6, 5
subs r1, r6
lsls r1, 5
bl CalcByteArraySum
ldr r1, [r7, 0x4]
cmp r0, r1
bne _0815D6F8
movs r0, 0x1
b _0815D6FA
_0815D6F8:
movs r0, 0
_0815D6FA:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_815D6B4
thumb_func_start sub_815D700
sub_815D700: @ 815D700
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrh r0, [r5, 0x2]
cmp r0, 0
beq _0815D718
ldr r0, _0815D77C @ =gUnknown_8479CD8 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c"
ldr r2, _0815D780 @ =gUnknown_8479D10 "ttdata->dummy == 0"
movs r1, 0xC6
movs r3, 0x1
bl AGBAssert
_0815D718:
ldrb r0, [r5, 0x1]
cmp r0, 0
beq _0815D72A
ldr r0, _0815D77C @ =gUnknown_8479CD8 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c"
ldr r2, _0815D784 @ =gUnknown_8479D24 "ttdata->id == 0"
movs r1, 0xC7
movs r3, 0x1
bl AGBAssert
_0815D72A:
movs r6, 0x80
lsls r6, 5
adds r0, r4, 0
movs r1, 0
adds r2, r6, 0
bl memset
ldr r2, _0815D788 @ =0x00000f88
adds r0, r4, 0
adds r1, r5, 0
bl memcpy
bl sub_815D654
strb r0, [r4, 0x1]
movs r0, 0x1E
adds r1, r4, 0
bl sub_80DA5E0
cmp r0, 0x1
bne _0815D78C
adds r0, r4, 0
movs r1, 0
adds r2, r6, 0
bl memset
ldr r0, _0815D788 @ =0x00000f88
adds r1, r5, r0
movs r2, 0xF8
lsls r2, 4
adds r0, r4, 0
bl memcpy
movs r0, 0x1F
adds r1, r4, 0
bl sub_80DA5E0
cmp r0, 0x1
bne _0815D78C
movs r0, 0x1
b _0815D78E
.align 2, 0
_0815D77C: .4byte gUnknown_8479CD8
_0815D780: .4byte gUnknown_8479D10
_0815D784: .4byte gUnknown_8479D24
_0815D788: .4byte 0x00000f88
_0815D78C:
movs r0, 0
_0815D78E:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_815D700
thumb_func_start sub_815D794
sub_815D794: @ 815D794
push {r4,r5,lr}
adds r4, r0, 0
movs r0, 0x80
lsls r0, 5
bl AllocZeroed
adds r5, r0, 0
adds r0, r4, 0
adds r1, r5, 0
bl sub_815D700
adds r4, r0, 0
adds r0, r5, 0
bl Free
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_815D794
.align 2, 0 @ Don't pad with nop.
-920
View File
@@ -1,920 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_815C27C
sub_815C27C: @ 815C27C
push {r4-r7,lr}
sub sp, 0x4
adds r6, r0, 0
adds r5, r1, 0
bl sub_815C8C8
movs r7, 0x2
ldr r4, _0815C2BC @ =gUnknown_3003F84
_0815C28C:
bl sub_815C898
ldr r0, _0815C2C0 @ =gUnknown_3002062
ldrh r1, [r0]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _0815C29E
strb r7, [r4]
_0815C29E:
movs r0, 0x1
adds r1, r6, 0
adds r2, r5, 0
movs r3, 0
bl sub_815C498
adds r1, r0, 0
ldr r0, _0815C2C4 @ =gUnknown_3002064
strh r1, [r0]
movs r0, 0x13
ands r0, r1
cmp r0, 0x10
bne _0815C2C8
movs r4, 0
b _0815C2EA
.align 2, 0
_0815C2BC: .4byte gUnknown_3003F84
_0815C2C0: .4byte gUnknown_3002062
_0815C2C4: .4byte gUnknown_3002064
_0815C2C8:
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _0815C2D4
movs r4, 0x1
b _0815C2EA
_0815C2D4:
movs r0, 0x4
ands r0, r1
lsls r0, 16
lsrs r0, 16
cmp r0, 0
bne _0815C2E8
strb r0, [r4]
bl VBlankIntrWait
b _0815C28C
_0815C2E8:
movs r4, 0x2
_0815C2EA:
movs r0, 0
str r0, [sp]
ldr r1, _0815C308 @ =gUnknown_3002048
ldr r2, _0815C30C @ =0x05000006
mov r0, sp
bl CpuSet
bl sub_815C91C
adds r0, r4, 0
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0815C308: .4byte gUnknown_3002048
_0815C30C: .4byte 0x05000006
thumb_func_end sub_815C27C
thumb_func_start sub_815C310
sub_815C310: @ 815C310
push {r4-r6,lr}
sub sp, 0x4
adds r5, r0, 0
bl sub_815C8C8
movs r6, 0x2
ldr r4, _0815C350 @ =gUnknown_3003F84
_0815C31E:
bl sub_815C898
ldr r0, _0815C354 @ =gUnknown_3002062
ldrh r1, [r0]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _0815C330
strb r6, [r4]
_0815C330:
movs r0, 0
movs r1, 0
movs r2, 0
adds r3, r5, 0
bl sub_815C498
adds r1, r0, 0
ldr r0, _0815C358 @ =gUnknown_3002064
strh r1, [r0]
movs r0, 0x13
ands r0, r1
cmp r0, 0x10
bne _0815C35C
movs r4, 0
b _0815C37E
.align 2, 0
_0815C350: .4byte gUnknown_3003F84
_0815C354: .4byte gUnknown_3002062
_0815C358: .4byte gUnknown_3002064
_0815C35C:
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _0815C368
movs r4, 0x1
b _0815C37E
_0815C368:
movs r0, 0x4
ands r0, r1
lsls r0, 16
lsrs r0, 16
cmp r0, 0
bne _0815C37C
strb r0, [r4]
bl VBlankIntrWait
b _0815C31E
_0815C37C:
movs r4, 0x2
_0815C37E:
movs r0, 0
str r0, [sp]
ldr r1, _0815C39C @ =gUnknown_3002048
ldr r2, _0815C3A0 @ =0x05000006
mov r0, sp
bl CpuSet
bl sub_815C91C
adds r0, r4, 0
add sp, 0x4
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0815C39C: .4byte gUnknown_3002048
_0815C3A0: .4byte 0x05000006
thumb_func_end sub_815C310
thumb_func_start sub_815C3A4
sub_815C3A4: @ 815C3A4
push {r4,lr}
ldr r4, _0815C3D0 @ =0x04000208
movs r3, 0
strh r3, [r4]
ldr r2, _0815C3D4 @ =0x04000200
ldrh r1, [r2]
ldr r0, _0815C3D8 @ =0x0000ff3f
ands r0, r1
strh r0, [r2]
movs r0, 0x1
strh r0, [r4]
ldr r0, _0815C3DC @ =0x04000128
strh r3, [r0]
subs r0, 0x1A
strh r3, [r0]
ldr r1, _0815C3E0 @ =0x04000202
movs r0, 0xC0
strh r0, [r1]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815C3D0: .4byte 0x04000208
_0815C3D4: .4byte 0x04000200
_0815C3D8: .4byte 0x0000ff3f
_0815C3DC: .4byte 0x04000128
_0815C3E0: .4byte 0x04000202
thumb_func_end sub_815C3A4
thumb_func_start sub_815C3E4
sub_815C3E4: @ 815C3E4
push {r4-r7,lr}
sub sp, 0x4
ldr r5, _0815C43C @ =0x04000208
movs r4, 0
strh r4, [r5]
ldr r3, _0815C440 @ =0x04000200
ldrh r1, [r3]
ldr r0, _0815C444 @ =0x0000ff3f
ands r0, r1
strh r0, [r3]
movs r6, 0x1
strh r6, [r5]
ldr r0, _0815C448 @ =0x04000134
strh r4, [r0]
ldr r2, _0815C44C @ =0x04000128
movs r1, 0x80
lsls r1, 6
adds r0, r1, 0
strh r0, [r2]
ldrh r0, [r2]
ldr r7, _0815C450 @ =0x00004003
adds r1, r7, 0
orrs r0, r1
strh r0, [r2]
strh r4, [r5]
ldrh r0, [r3]
movs r1, 0x80
orrs r0, r1
strh r0, [r3]
strh r6, [r5]
ldr r1, _0815C454 @ =gUnknown_3002048
ldrb r0, [r1, 0x1]
cmp r0, 0
bne _0815C432
str r0, [sp]
ldr r2, _0815C458 @ =0x05000006
mov r0, sp
bl CpuSet
_0815C432:
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0815C43C: .4byte 0x04000208
_0815C440: .4byte 0x04000200
_0815C444: .4byte 0x0000ff3f
_0815C448: .4byte 0x04000134
_0815C44C: .4byte 0x04000128
_0815C450: .4byte 0x00004003
_0815C454: .4byte gUnknown_3002048
_0815C458: .4byte 0x05000006
thumb_func_end sub_815C3E4
thumb_func_start sub_815C45C
sub_815C45C: @ 815C45C
ldr r0, _0815C484 @ =0x04000134
movs r3, 0
strh r3, [r0]
ldr r2, _0815C488 @ =0x04000128
movs r1, 0xA0
lsls r1, 7
adds r0, r1, 0
strh r0, [r2]
ldrh r0, [r2]
movs r1, 0x8
orrs r0, r1
strh r0, [r2]
ldr r0, _0815C48C @ =gUnknown_3003F84
strb r3, [r0]
ldr r0, _0815C490 @ =gUnknown_3002066
strh r3, [r0]
ldr r1, _0815C494 @ =gUnknown_3002068
movs r0, 0
str r0, [r1]
bx lr
.align 2, 0
_0815C484: .4byte 0x04000134
_0815C488: .4byte 0x04000128
_0815C48C: .4byte gUnknown_3003F84
_0815C490: .4byte gUnknown_3002066
_0815C494: .4byte gUnknown_3002068
thumb_func_end sub_815C45C
thumb_func_start sub_815C498
sub_815C498: @ 815C498
push {r4-r6,lr}
adds r4, r1, 0
adds r5, r2, 0
adds r6, r3, 0
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _0815C4B8 @ =gUnknown_3002048
ldrb r0, [r0, 0x1]
cmp r0, 0x6
bls _0815C4AE
b _0815C5F4
_0815C4AE:
lsls r0, 2
ldr r1, _0815C4BC @ =_0815C4C0
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0815C4B8: .4byte gUnknown_3002048
_0815C4BC: .4byte _0815C4C0
.align 2, 0
_0815C4C0:
.4byte _0815C4DC
.4byte _0815C4F0
.4byte _0815C510
.4byte _0815C524
.4byte _0815C59C
.4byte _0815C5AC
.4byte _0815C5E4
_0815C4DC:
bl sub_815C3E4
ldr r1, _0815C4EC @ =gUnknown_3002048
movs r0, 0x1
strb r0, [r1, 0x2]
strb r0, [r1, 0x1]
b _0815C5F4
.align 2, 0
_0815C4EC: .4byte gUnknown_3002048
_0815C4F0:
adds r0, r2, 0
bl sub_815C610
lsls r0, 16
cmp r0, 0
beq _0815C500
bl sub_815C864
_0815C500:
ldr r0, _0815C50C @ =gUnknown_3003F84
ldrb r0, [r0]
cmp r0, 0x2
beq _0815C50A
b _0815C5F4
_0815C50A:
b _0815C52C
.align 2, 0
_0815C50C: .4byte gUnknown_3003F84
_0815C510:
bl sub_815C45C
adds r0, r4, 0
adds r1, r5, 0
adds r2, r6, 0
bl sub_815C644
ldr r1, _0815C538 @ =gUnknown_3002048
movs r0, 0x3
strb r0, [r1, 0x1]
_0815C524:
ldr r0, _0815C53C @ =gUnknown_3003F84
ldrb r0, [r0]
cmp r0, 0x2
bne _0815C540
_0815C52C:
ldr r1, _0815C538 @ =gUnknown_3002048
strb r0, [r1, 0x4]
movs r0, 0x6
strb r0, [r1, 0x1]
b _0815C5F4
.align 2, 0
_0815C538: .4byte gUnknown_3002048
_0815C53C: .4byte gUnknown_3003F84
_0815C540:
ldr r2, _0815C580 @ =gUnknown_3002066
ldrh r0, [r2]
adds r0, 0x1
strh r0, [r2]
ldr r1, _0815C584 @ =gUnknown_3002068
ldr r0, [r1]
adds r3, r0, 0x1
str r3, [r1]
ldr r1, _0815C588 @ =gUnknown_3002048
ldrb r0, [r1]
cmp r0, 0
bne _0815C564
cmp r3, 0x3C
bls _0815C564
movs r0, 0x1
strb r0, [r1, 0x4]
movs r0, 0x6
strb r0, [r1, 0x1]
_0815C564:
ldr r4, _0815C588 @ =gUnknown_3002048
ldrb r0, [r4, 0x2]
cmp r0, 0x2
beq _0815C5F4
ldrb r0, [r4]
cmp r0, 0
beq _0815C58C
ldrh r0, [r2]
cmp r0, 0x2
bls _0815C58C
bl sub_815C864
movs r0, 0x2
b _0815C5F2
.align 2, 0
_0815C580: .4byte gUnknown_3002066
_0815C584: .4byte gUnknown_3002068
_0815C588: .4byte gUnknown_3002048
_0815C58C:
bl sub_815C864
ldr r1, _0815C598 @ =gUnknown_3002048
movs r0, 0x2
strb r0, [r1, 0x2]
b _0815C5F4
.align 2, 0
_0815C598: .4byte gUnknown_3002048
_0815C59C:
bl sub_815C3E4
ldr r1, _0815C5A8 @ =gUnknown_3002048
movs r0, 0x5
strb r0, [r1, 0x1]
b _0815C5F4
.align 2, 0
_0815C5A8: .4byte gUnknown_3002048
_0815C5AC:
ldr r0, _0815C5DC @ =gUnknown_3002048
ldrb r0, [r0]
cmp r0, 0x1
bne _0815C5C0
ldr r0, _0815C5E0 @ =gUnknown_3002066
ldrh r0, [r0]
cmp r0, 0x2
bls _0815C5C0
bl sub_815C864
_0815C5C0:
ldr r1, _0815C5E0 @ =gUnknown_3002066
ldrh r0, [r1]
adds r0, 0x1
strh r0, [r1]
lsls r0, 16
lsrs r0, 16
cmp r0, 0x3C
bls _0815C5F4
ldr r0, _0815C5DC @ =gUnknown_3002048
movs r1, 0x1
strb r1, [r0, 0x4]
movs r1, 0x6
strb r1, [r0, 0x1]
b _0815C5F4
.align 2, 0
_0815C5DC: .4byte gUnknown_3002048
_0815C5E0: .4byte gUnknown_3002066
_0815C5E4:
ldr r4, _0815C60C @ =gUnknown_3002048
ldrb r0, [r4, 0x2]
cmp r0, 0
beq _0815C5F4
bl sub_815C3A4
movs r0, 0
_0815C5F2:
strb r0, [r4, 0x2]
_0815C5F4:
ldr r2, _0815C60C @ =gUnknown_3002048
ldrb r0, [r2, 0x2]
ldrb r1, [r2, 0x4]
lsls r1, 2
orrs r0, r1
ldrb r1, [r2, 0x3]
lsls r1, 4
orrs r0, r1
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0815C60C: .4byte gUnknown_3002048
thumb_func_end sub_815C498
thumb_func_start sub_815C610
sub_815C610: @ 815C610
push {lr}
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _0815C62C @ =0x04000128
ldr r0, [r0]
movs r1, 0xC
ands r0, r1
cmp r0, 0x8
bne _0815C634
cmp r2, 0
beq _0815C634
ldr r1, _0815C630 @ =gUnknown_3002048
movs r0, 0x1
b _0815C638
.align 2, 0
_0815C62C: .4byte 0x04000128
_0815C630: .4byte gUnknown_3002048
_0815C634:
ldr r1, _0815C640 @ =gUnknown_3002048
movs r0, 0
_0815C638:
strb r0, [r1]
pop {r1}
bx r1
.align 2, 0
_0815C640: .4byte gUnknown_3002048
thumb_func_end sub_815C610
thumb_func_start sub_815C644
sub_815C644: @ 815C644
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
ldr r3, _0815C670 @ =gUnknown_3002048
ldrb r0, [r3]
cmp r0, 0
beq _0815C67C
ldr r2, _0815C674 @ =0x04000128
ldrh r0, [r2]
movs r1, 0x1
orrs r0, r1
strh r0, [r2]
str r5, [r3, 0x8]
ldr r0, _0815C678 @ =0x04000120
str r4, [r0]
lsrs r0, r4, 2
adds r0, 0x1
str r0, [r3, 0x10]
bl sub_815C690
b _0815C684
.align 2, 0
_0815C670: .4byte gUnknown_3002048
_0815C674: .4byte 0x04000128
_0815C678: .4byte 0x04000120
_0815C67C:
ldr r1, _0815C68C @ =0x04000128
ldrh r0, [r1]
strh r0, [r1]
str r2, [r3, 0x8]
_0815C684:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0815C68C: .4byte 0x04000128
thumb_func_end sub_815C644
thumb_func_start sub_815C690
sub_815C690: @ 815C690
ldr r1, _0815C6B4 @ =0x0400010c
ldr r2, _0815C6B8 @ =0x0000fda7
adds r0, r2, 0
strh r0, [r1]
ldr r0, _0815C6BC @ =0x0400010e
movs r2, 0x40
strh r2, [r0]
ldr r3, _0815C6C0 @ =0x04000208
movs r0, 0
strh r0, [r3]
adds r1, 0xF4
ldrh r0, [r1]
orrs r0, r2
strh r0, [r1]
movs r0, 0x1
strh r0, [r3]
bx lr
.align 2, 0
_0815C6B4: .4byte 0x0400010c
_0815C6B8: .4byte 0x0000fda7
_0815C6BC: .4byte 0x0400010e
_0815C6C0: .4byte 0x04000208
thumb_func_end sub_815C690
thumb_func_start sub_815C6C4
sub_815C6C4: @ 815C6C4
push {lr}
bl sub_815C874
bl sub_815C864
pop {r0}
bx r0
thumb_func_end sub_815C6C4
thumb_func_start sub_815C6D4
sub_815C6D4: @ 815C6D4
push {r4-r6,lr}
sub sp, 0x8
ldr r2, _0815C6EC @ =gUnknown_3002048
ldrb r0, [r2, 0x1]
adds r3, r2, 0
cmp r0, 0x3
beq _0815C75C
cmp r0, 0x3
bgt _0815C6F0
cmp r0, 0x1
beq _0815C6F8
b _0815C852
.align 2, 0
_0815C6EC: .4byte gUnknown_3002048
_0815C6F0:
cmp r0, 0x5
bne _0815C6F6
b _0815C824
_0815C6F6:
b _0815C852
_0815C6F8:
ldr r1, _0815C728 @ =0x0400012a
ldr r2, _0815C72C @ =0x0000ccd0
adds r0, r2, 0
strh r0, [r1]
ldr r0, _0815C730 @ =0x04000120
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
movs r1, 0
movs r2, 0
movs r4, 0
ldr r6, _0815C72C @ =0x0000ccd0
ldr r5, _0815C734 @ =0x0000ffff
_0815C714:
lsls r0, r1, 1
add r0, sp
ldrh r0, [r0]
cmp r0, r6
bne _0815C738
adds r0, r2, 0x1
lsls r0, 16
lsrs r2, r0, 16
b _0815C742
.align 2, 0
_0815C728: .4byte 0x0400012a
_0815C72C: .4byte 0x0000ccd0
_0815C730: .4byte 0x04000120
_0815C734: .4byte 0x0000ffff
_0815C738:
cmp r0, r5
beq _0815C742
adds r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
_0815C742:
adds r0, r1, 0x1
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0x3
bls _0815C714
cmp r2, 0x2
beq _0815C752
b _0815C852
_0815C752:
cmp r4, 0
beq _0815C758
b _0815C852
_0815C758:
strb r2, [r3, 0x1]
b _0815C852
_0815C75C:
ldr r0, _0815C798 @ =0x04000120
ldr r4, [r0]
ldr r0, [r2, 0xC]
cmp r0, 0
bne _0815C772
ldrb r0, [r2]
cmp r0, 0
bne _0815C772
lsrs r0, r4, 2
adds r0, 0x1
str r0, [r2, 0x10]
_0815C772:
ldrb r0, [r3]
cmp r0, 0x1
bne _0815C7A8
ldr r1, [r3, 0xC]
ldr r0, [r3, 0x10]
cmp r1, r0
bge _0815C79C
ldr r2, _0815C798 @ =0x04000120
ldr r0, [r3, 0x8]
lsls r1, 2
adds r1, r0
ldr r0, [r1]
str r0, [r2]
ldr r0, [r3, 0x14]
ldr r1, [r1]
adds r0, r1
str r0, [r3, 0x14]
b _0815C7E2
.align 2, 0
_0815C798: .4byte 0x04000120
_0815C79C:
ldr r1, _0815C7A4 @ =0x04000120
ldr r0, [r3, 0x14]
b _0815C7E0
.align 2, 0
_0815C7A4: .4byte 0x04000120
_0815C7A8:
ldr r1, [r3, 0xC]
cmp r1, 0
ble _0815C7C8
ldr r0, [r3, 0x10]
adds r0, 0x1
cmp r1, r0
bge _0815C7C8
ldr r0, [r3, 0x8]
lsls r1, 2
adds r1, r0
subs r1, 0x4
str r4, [r1]
ldr r0, [r3, 0x14]
adds r0, r4
str r0, [r3, 0x14]
b _0815C7DC
_0815C7C8:
ldr r0, [r3, 0xC]
cmp r0, 0
beq _0815C7DC
ldr r0, [r3, 0x14]
cmp r0, r4
bne _0815C7D8
movs r0, 0x1
b _0815C7DA
_0815C7D8:
movs r0, 0x2
_0815C7DA:
strb r0, [r3, 0x3]
_0815C7DC:
ldr r1, _0815C804 @ =gUnknown_3002068
movs r0, 0
_0815C7E0:
str r0, [r1]
_0815C7E2:
ldr r1, [r3, 0xC]
adds r1, 0x1
str r1, [r3, 0xC]
ldr r0, [r3, 0x10]
adds r0, 0x2
cmp r1, r0
bge _0815C812
ldrb r0, [r3]
cmp r0, 0
beq _0815C80C
ldr r0, _0815C808 @ =0x0400010e
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
strh r1, [r0]
b _0815C852
.align 2, 0
_0815C804: .4byte gUnknown_3002068
_0815C808: .4byte 0x0400010e
_0815C80C:
bl sub_815C864
b _0815C852
_0815C812:
movs r0, 0
movs r1, 0x4
strb r1, [r3, 0x1]
ldr r1, _0815C820 @ =gUnknown_3002066
strh r0, [r1]
b _0815C852
.align 2, 0
_0815C820: .4byte gUnknown_3002066
_0815C824:
ldrb r3, [r2]
cmp r3, 0
bne _0815C830
ldr r1, _0815C85C @ =0x0400012a
ldrb r0, [r2, 0x3]
strh r0, [r1]
_0815C830:
ldr r0, _0815C860 @ =0x04000120
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
mov r0, sp
ldrh r1, [r0, 0x2]
subs r0, r1, 0x1
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bhi _0815C852
cmp r3, 0x1
bne _0815C84E
strb r1, [r2, 0x3]
_0815C84E:
movs r0, 0x6
strb r0, [r2, 0x1]
_0815C852:
add sp, 0x8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0815C85C: .4byte 0x0400012a
_0815C860: .4byte 0x04000120
thumb_func_end sub_815C6D4
thumb_func_start sub_815C864
sub_815C864: @ 815C864
ldr r0, _0815C870 @ =0x04000128
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
strh r1, [r0]
bx lr
.align 2, 0
_0815C870: .4byte 0x04000128
thumb_func_end sub_815C864
thumb_func_start sub_815C874
sub_815C874: @ 815C874
ldr r2, _0815C888 @ =0x0400010e
ldrh r1, [r2]
ldr r0, _0815C88C @ =0x0000ff7f
ands r0, r1
strh r0, [r2]
ldr r1, _0815C890 @ =0x0400010c
ldr r2, _0815C894 @ =0x0000fda7
adds r0, r2, 0
strh r0, [r1]
bx lr
.align 2, 0
_0815C888: .4byte 0x0400010e
_0815C88C: .4byte 0x0000ff7f
_0815C890: .4byte 0x0400010c
_0815C894: .4byte 0x0000fda7
thumb_func_end sub_815C874
thumb_func_start sub_815C898
sub_815C898: @ 815C898
push {r4,lr}
ldr r0, _0815C8B8 @ =0x04000130
ldrh r0, [r0]
ldr r2, _0815C8BC @ =0x000003ff
adds r1, r2, 0
eors r1, r0
ldr r4, _0815C8C0 @ =gUnknown_3002062
ldr r3, _0815C8C4 @ =gUnknown_3002060
ldrh r2, [r3]
adds r0, r1, 0
bics r0, r2
strh r0, [r4]
strh r1, [r3]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0815C8B8: .4byte 0x04000130
_0815C8BC: .4byte 0x000003ff
_0815C8C0: .4byte gUnknown_3002062
_0815C8C4: .4byte gUnknown_3002060
thumb_func_end sub_815C898
thumb_func_start sub_815C8C8
sub_815C8C8: @ 815C8C8
ldr r1, _0815C8F4 @ =gUnknown_300206C
ldr r0, _0815C8F8 @ =0x04000208
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _0815C8FC @ =gUnknown_300206E
ldr r0, _0815C900 @ =0x04000200
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _0815C904 @ =gUnknown_3002070
ldr r0, _0815C908 @ =0x0400010e
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _0815C90C @ =gUnknown_3002072
ldr r0, _0815C910 @ =0x04000128
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _0815C914 @ =gUnknown_3002074
ldr r0, _0815C918 @ =0x04000134
ldrh r0, [r0]
strh r0, [r1]
bx lr
.align 2, 0
_0815C8F4: .4byte gUnknown_300206C
_0815C8F8: .4byte 0x04000208
_0815C8FC: .4byte gUnknown_300206E
_0815C900: .4byte 0x04000200
_0815C904: .4byte gUnknown_3002070
_0815C908: .4byte 0x0400010e
_0815C90C: .4byte gUnknown_3002072
_0815C910: .4byte 0x04000128
_0815C914: .4byte gUnknown_3002074
_0815C918: .4byte 0x04000134
thumb_func_end sub_815C8C8
thumb_func_start sub_815C91C
sub_815C91C: @ 815C91C
ldr r1, _0815C948 @ =0x04000208
ldr r0, _0815C94C @ =gUnknown_300206C
ldrh r0, [r0]
strh r0, [r1]
subs r1, 0x8
ldr r0, _0815C950 @ =gUnknown_300206E
ldrh r0, [r0]
strh r0, [r1]
subs r1, 0xF2
ldr r0, _0815C954 @ =gUnknown_3002070
ldrh r0, [r0]
strh r0, [r1]
adds r1, 0x1A
ldr r0, _0815C958 @ =gUnknown_3002072
ldrh r0, [r0]
strh r0, [r1]
adds r1, 0xC
ldr r0, _0815C95C @ =gUnknown_3002074
ldrh r0, [r0]
strh r0, [r1]
bx lr
.align 2, 0
_0815C948: .4byte 0x04000208
_0815C94C: .4byte gUnknown_300206C
_0815C950: .4byte gUnknown_300206E
_0815C954: .4byte gUnknown_3002070
_0815C958: .4byte gUnknown_3002072
_0815C95C: .4byte gUnknown_3002074
thumb_func_end sub_815C91C
thumb_func_start sub_815C960
sub_815C960: @ 815C960
push {lr}
sub sp, 0x4
movs r0, 0
str r0, [sp]
ldr r1, _0815C978 @ =gUnknown_3002048
ldr r2, _0815C97C @ =0x05000006
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_0815C978: .4byte gUnknown_3002048
_0815C97C: .4byte 0x05000006
thumb_func_end sub_815C960
.align 2, 0 @ Don't pad with nop.
+2 -2
View File
@@ -4686,7 +4686,7 @@ _0800B85C:
_0800B860:
adds r0, r2, 0
strh r0, [r1]
ldr r2, _0800B8BC @ =gUnknown_3003FB4
ldr r2, _0800B8BC @ =gSioMlt_Recv
ldr r3, _0800B8C0 @ =0x04000120
ldr r0, [r3]
ldr r1, [r3, 0x4]
@@ -4731,7 +4731,7 @@ _0800B8A0:
.align 2, 0
_0800B8B4: .4byte 0x0400012a
_0800B8B8: .4byte 0x0000b9a0
_0800B8BC: .4byte gUnknown_3003FB4
_0800B8BC: .4byte gSioMlt_Recv
_0800B8C0: .4byte 0x04000120
_0800B8C4: .4byte gUnknown_3000E6B
_0800B8C8: .4byte 0x00008fff
-8
View File
@@ -1,8 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
.align 2, 0 @ Don't pad with nop.
-18
View File
@@ -227,24 +227,6 @@ gUnknown_8479688::
gUnknown_8479748::
.incbin "graphics/misc/unk_8479748.4bpp.lz"
.section .rodata.cereader_tool
// cereader_tool
.align 2
gUnknown_8479CD8:: @ 8479CD8
.asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c"
.align 2
gUnknown_8479D10:: @ 8479D10
.asciz "ttdata->dummy == 0"
.align 2
gUnknown_8479D24:: @ 8479D24
.asciz "ttdata->id == 0"
// trainer_tower
.section .rodata.after_trainer_tower
// unk_815F138
+40 -2
View File
@@ -3,7 +3,45 @@
#include "global.h"
bool32 sub_815D794(u8 *);
bool32 sub_815D6B4(u8 *);
struct TrainerTowerTrainer_004
{
/* 0x000 */ u8 unk_000[11];
/* 0x00B */ u8 unk_00B;
/* 0x00C */ u8 unk_00C;
/* 0x00E */ u16 unk_00E[6];
/* 0x01A */ u16 unk_01A[6];
/* 0x026 */ u16 unk_026[6];
/* 0x032 */ u16 unk_032[6];
/* 0x040 */ struct BattleTowerPokemon unk_040[PARTY_SIZE];
}; // size: 328
struct TrainerTowerTrainer
{
/* 0x000 */ u8 unk_000;
/* 0x000 */ u8 unk_001;
/* 0x002 */ u8 unk_002;
/* 0x003 */ u8 unk_003;
/* 0x004 */ struct TrainerTowerTrainer_004 unk_004[3];
/* 0x3DC */ u32 checksum;
};
struct Unk_203F458_Header
{
u8 unk0;
u8 unk1;
u32 unk4;
};
struct TrainerTowerData
{
u8 count;
u8 id;
u16 dummy;
u32 checksum;
struct TrainerTowerTrainer trainers[8];
};
bool32 ValidateTrainerTowerData(struct TrainerTowerData * a0);
bool32 CEReaderTool_SaveTrainerTower(struct TrainerTowerData * a0);
#endif //GUARD_CEREADER_TOOL_H
+1 -1
View File
@@ -147,7 +147,7 @@ extern bool8 gReceivedRemoteLinkPlayers;
extern bool8 gLinkVSyncDisabled;
extern u8 gUnknown_3003F84;
extern u64 gUnknown_3003FB4;
extern u64 gSioMlt_Recv;
void Task_DestroySelf(u8);
void OpenLink(void);
+3 -3
View File
@@ -23,9 +23,9 @@ struct MEventStruct_Unk1442CC
struct MEvent_Str_1
{
u16 unk_000;
size_t unk_004;
const void * unk_008;
u16 status;
size_t size;
const void * data;
};
struct MEvent_Str_2
+1 -1
View File
@@ -121,7 +121,7 @@ u8 Save_LoadGameData(u8 a1);
u32 TryCopySpecialSaveSection(u8 sector, u8* dst);
u32 sub_8153634(u8 sector, u8* src);
void sub_8153688(u8 taskId);
u32 sub_80DA5E0(u8 sector, u8* src);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_80DA634(u8 taskId);
#endif // GUARD_SAVE_H
+6 -6
View File
@@ -1,11 +1,11 @@
#ifndef GUARD_UNK_815C27C_H
#define GUARD_UNK_815C27C_H
void sub_815C6D4(void);
void sub_815C6C4(void);
void sub_815C8C8(void);
void sub_815C960(void);
void sub_815C91C(void);
u16 sub_815C498(u8, size_t, const void *, u8);
void EReaderHelper_SerialCallback(void);
void EReaderHelper_Timer3Callback(void);
void EReaderHelper_SaveRegsState(void);
void EReaderHelper_ClearsSendRecvMgr(void);
void EReaderHelper_RestoreRegsState(void);
u16 EReaderHandleTransfer(u8, size_t, const void *, void *);
#endif //GUARD_UNK_815C27C_H
+3 -4
View File
@@ -278,11 +278,10 @@ SECTIONS {
src/dodrio_berry_picking_2.o(.text);
asm/dodrio_berry_picking_2.o(.text);
src/teachy_tv.o(.text);
asm/ereader_helpers.o(.text);
src/ereader_helpers.o(.text);
src/unk_815C980.o(.text);
src/ss_anne.o(.text);
asm/ss_anne.o(.text);
asm/cereader_tool.o(.text);
src/cereader_tool.o(.text);
src/trainer_tower.o(.text);
asm/unk_815EDDC.o(.text);
asm/unk_815F138.o(.text);
@@ -456,7 +455,7 @@ SECTIONS {
src/unk_815C980.o(.rodata);
data/data_8471F00.o(.rodata.8479668);
src/ss_anne.o(.rodata);
data/data_8471F00.o(.rodata.cereader_tool);
src/cereader_tool.o(.rodata);
src/trainer_tower.o(.rodata);
data/data_8471F00.o(.rodata.after_trainer_tower);
src/mystery_event_msg.o(.rodata);
+88
View File
@@ -0,0 +1,88 @@
#include "global.h"
#include "util.h"
#include "save.h"
#include "malloc.h"
#include "cereader_tool.h"
u8 sub_815D654(void)
{
return (gSaveBlock1Ptr->unkArray[0].unk9 + 1) % 256;
}
static bool32 ValidateTrainerTowerTrainer(struct TrainerTowerTrainer * trainer)
{
if (trainer->unk_001 < 1 || trainer->unk_001 > 8)
return FALSE;
if (trainer->unk_002 > 2)
return FALSE;
if (CalcByteArraySum((const u8 *)trainer, offsetof(typeof(*trainer), checksum)) != trainer->checksum)
return FALSE;
return TRUE;
}
bool32 ValidateTrainerTowerData(struct TrainerTowerData * ttdata)
{
u32 count = ttdata->count;
s32 i;
if (count < 1 || count > 8)
return FALSE;
for (i = 0; i < count; i++)
{
if (!ValidateTrainerTowerTrainer(&ttdata->trainers[i]))
return FALSE;
}
if (CalcByteArraySum((const u8 *)ttdata->trainers, count * sizeof(ttdata->trainers[0])) != ttdata->checksum)
return FALSE;
return TRUE;
}
#define SEC30_SIZE (offsetof(struct TrainerTowerData, trainers[4]))
#define SEC31_SIZE (sizeof(struct TrainerTowerData) - SEC30_SIZE)
static bool32 CEReaderTool_SaveTrainerTower_r(struct TrainerTowerData * ttdata, u8 * buffer)
{
AGB_ASSERT_EX(ttdata->dummy == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 198);
AGB_ASSERT_EX(ttdata->id == 0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/cereader_tool.c", 199)
memset(buffer, 0, 0x1000);
memcpy(buffer, ttdata, SEC30_SIZE);
buffer[1] = sub_815D654();
if (TryWriteSpecialSaveSection(30, buffer) != TRUE)
return FALSE;
memset(buffer, 0, 0x1000);
memcpy(buffer, (u8 *)ttdata + SEC30_SIZE, SEC31_SIZE);
if (TryWriteSpecialSaveSection(31, buffer) != TRUE)
return FALSE;
return TRUE;
}
bool32 CEReaderTool_SaveTrainerTower(struct TrainerTowerData * ttdata)
{
u8 * buffer = AllocZeroed(0x1000);
bool32 result = CEReaderTool_SaveTrainerTower_r(ttdata, buffer);
Free(buffer);
return result;
}
static bool32 CEReaderTool_LoadTrainerTower_r(struct TrainerTowerData * ttdata, void * buffer)
{
if (TryCopySpecialSaveSection(30, buffer) != 1)
return FALSE;
memcpy(ttdata + 0x000, buffer, SEC30_SIZE);
if (TryCopySpecialSaveSection(31, buffer) != 1)
return FALSE;
memcpy((u8 *)ttdata + SEC30_SIZE, buffer, SEC31_SIZE);
if (!ValidateTrainerTowerData(ttdata))
return FALSE;
return TRUE;
}
bool32 CEReaderTool_LoadTrainerTower(struct TrainerTowerData * ttdata)
{
void * buffer = AllocZeroed(0x1000);
bool32 success = CEReaderTool_LoadTrainerTower_r(ttdata, buffer);
Free(buffer);
return success;
}
+397
View File
@@ -0,0 +1,397 @@
#include "global.h"
#include "link.h"
#include "unk_815c27c.h"
enum {
EREADER_XFR_STATE_INIT,
EREADER_XFR_STATE_HANDSHAKE,
EREADER_XFR_STATE_START,
EREADER_XFR_STATE_TRANSFER,
};
struct SendRecvMgr
{
u8 sendOrRecv;
u8 state;
u8 field_02;
u8 field_03;
u8 field_04;
u32 * dataptr;
int cursor;
int size;
u32 checksum;
};
static bool16 DetermineSendRecvState(u8);
static void SetUpTransferManager(size_t, const void *, void *);
static void StartTm3(void);
static void EnableSio(void);
static void DisableTm3(void);
static void GetKeyInput(void);
static struct SendRecvMgr sSendRecvMgr;
static u16 sJoyNewOrRepeated;
static u16 sJoyNew;
static u16 sSendRecvStatus;
static u16 sCounter1;
static u32 sCounter2;
static u16 sSavedIme;
static u16 sSavedIe;
static u16 sSavedTm3Cnt;
static u16 sSavedSioCnt;
static u16 sSavedSioCnt;
static u16 sSavedRCnt;
int EReader_Send(size_t r6, const void * r5)
{
int result;
EReaderHelper_SaveRegsState();
while (1)
{
GetKeyInput();
if (TEST_BUTTON(sJoyNew, B_BUTTON))
gUnknown_3003F84 = 2;
sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL);
if ((sSendRecvStatus & 0x13) == 0x10)
{
result = 0;
break;
}
else if (sSendRecvStatus & 8)
{
result = 1;
break;
}
else if (sSendRecvStatus & 4)
{
result = 2;
break;
}
else
{
gUnknown_3003F84 = 0;
VBlankIntrWait();
}
}
CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
EReaderHelper_RestoreRegsState();
return result;
}
int EReader_Recv(void * r5)
{
int result;
EReaderHelper_SaveRegsState();
while (1)
{
GetKeyInput();
if (TEST_BUTTON(sJoyNew, B_BUTTON))
gUnknown_3003F84 = 2;
sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5);
if ((sSendRecvStatus & 0x13) == 0x10)
{
result = 0;
break;
}
else if (sSendRecvStatus & 8)
{
result = 1;
break;
}
else if (sSendRecvStatus & 4)
{
result = 2;
break;
}
else
{
gUnknown_3003F84 = 0;
VBlankIntrWait();
}
}
CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
EReaderHelper_RestoreRegsState();
return result;
}
static void CloseSerial(void)
{
REG_IME = 0;
REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
REG_IME = 1;
REG_SIOCNT = 0;
REG_TM3CNT_H = 0;
REG_IF = INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL;
}
static void OpenSerialMulti(void)
{
REG_IME = 0;
REG_IE &= ~(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
REG_IME = 1;
REG_RCNT = 0;
REG_SIOCNT = SIO_MULTI_MODE;
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_115200_BPS;
REG_IME = 0;
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = 1;
if (sSendRecvMgr.state == 0)
CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
}
static void OpenSerial32(void)
{
REG_RCNT = 0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE;
REG_SIOCNT |= SIO_MULTI_SD;
gUnknown_3003F84 = 0;
sCounter1 = 0;
sCounter2 = 0;
}
u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBuffer)
{
switch (sSendRecvMgr.state)
{
case 0:
OpenSerialMulti();
sSendRecvMgr.field_02 = 1;
sSendRecvMgr.state = 1;
break;
case 1:
if (DetermineSendRecvState(mode))
EnableSio();
if (gUnknown_3003F84 == 2)
{
sSendRecvMgr.field_04 = 2;
sSendRecvMgr.state = 6;
}
break;
case 2:
OpenSerial32();
SetUpTransferManager(size, data, recvBuffer);
sSendRecvMgr.state = 3;
// fallthrough
case 3:
if (gUnknown_3003F84 == 2)
{
sSendRecvMgr.field_04 = 2;
sSendRecvMgr.state = 6;
}
else
{
sCounter1++;
sCounter2++;
if (sSendRecvMgr.sendOrRecv == 0 && sCounter2 > 60)
{
sSendRecvMgr.field_04 = 1;
sSendRecvMgr.state = 6;
}
if (sSendRecvMgr.field_02 != 2)
{
if (sSendRecvMgr.sendOrRecv != 0 && sCounter1 > 2)
{
EnableSio();
sSendRecvMgr.field_02 = 2;
}
else
{
EnableSio();
sSendRecvMgr.field_02 = 2;
}
}
}
break;
case 4:
OpenSerialMulti();
sSendRecvMgr.state = 5;
break;
case 5:
if (sSendRecvMgr.sendOrRecv == 1 && sCounter1 > 2)
EnableSio();
if (++sCounter1 > 60)
{
sSendRecvMgr.field_04 = 1;
sSendRecvMgr.state = 6;
}
break;
case 6:
if (sSendRecvMgr.field_02 != 0)
{
CloseSerial();
sSendRecvMgr.field_02 = 0;
}
break;
}
return sSendRecvMgr.field_02 | (sSendRecvMgr.field_04 << 2) | (sSendRecvMgr.field_03 << 4);
}
static bool16 DetermineSendRecvState(u8 mode)
{
bool16 resp;
if ((*(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SI | SIO_MULTI_SD)) == SIO_MULTI_SD && mode)
resp = sSendRecvMgr.sendOrRecv = TRUE;
else
resp = sSendRecvMgr.sendOrRecv = FALSE;
return resp;
}
static void SetUpTransferManager(size_t size, const void * data, void * recvBuffer)
{
if (sSendRecvMgr.sendOrRecv)
{
REG_SIOCNT |= SIO_38400_BPS;
sSendRecvMgr.dataptr = (void *)data;
REG_SIODATA32 = size;
sSendRecvMgr.size = size / 4 + 1;
StartTm3();
}
else
{
REG_SIOCNT |= SIO_9600_BPS;
sSendRecvMgr.dataptr = recvBuffer;
}
}
static void StartTm3(void)
{
REG_TM3CNT_L = -601;
REG_TM3CNT_H = TIMER_INTR_ENABLE;
REG_IME = 0;
REG_IE |= INTR_FLAG_TIMER3;
REG_IME = 1;
}
void EReaderHelper_Timer3Callback(void)
{
DisableTm3();
EnableSio();
}
void EReaderHelper_SerialCallback(void)
{
u16 recv[4];
u16 i;
u16 cnt1;
u16 cnt2;
u32 recv32;
switch (sSendRecvMgr.state)
{
case 1:
REG_SIOMLT_SEND = 0xCCD0;
*(u64 *)recv = REG_SIOMLT_RECV;
for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++)
{
if (recv[i] == 0xCCD0)
cnt1++;
else if (recv[i] != 0xFFFF)
cnt2++;
}
if (cnt1 == 2 && cnt2 == 0)
sSendRecvMgr.state = 2;
break;
case 3:
recv32 = REG_SIODATA32;
if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.sendOrRecv == 0)
sSendRecvMgr.size = recv32 / 4 + 1;
if (sSendRecvMgr.sendOrRecv == 1)
{
if (sSendRecvMgr.cursor < sSendRecvMgr.size)
{
REG_SIODATA32 = sSendRecvMgr.dataptr[sSendRecvMgr.cursor];
sSendRecvMgr.checksum += sSendRecvMgr.dataptr[sSendRecvMgr.cursor];
}
else
REG_SIODATA32 = sSendRecvMgr.checksum;
}
else
{
if (sSendRecvMgr.cursor > 0 && sSendRecvMgr.cursor < sSendRecvMgr.size + 1)
{
sSendRecvMgr.dataptr[sSendRecvMgr.cursor - 1] = recv32;
sSendRecvMgr.checksum += recv32;
}
else if (sSendRecvMgr.cursor != 0)
{
if (sSendRecvMgr.checksum == recv32)
sSendRecvMgr.field_03 = 1;
else
sSendRecvMgr.field_03 = 2;
}
sCounter2 = 0;
}
sSendRecvMgr.cursor++;
if (sSendRecvMgr.cursor < sSendRecvMgr.size + 2)
{
if (sSendRecvMgr.sendOrRecv != 0)
REG_TM3CNT_H |= TIMER_ENABLE;
else
EnableSio();
}
else
{
sSendRecvMgr.state = 4;
sCounter1 = 0;
}
break;
case 5:
if (sSendRecvMgr.sendOrRecv == 0)
REG_SIODATA8 = sSendRecvMgr.field_03;
*(vu64 *)recv = REG_SIOMLT_RECV;
if (recv[1] == 1 || recv[1] == 2)
{
if (sSendRecvMgr.sendOrRecv == 1)
sSendRecvMgr.field_03 = recv[1];
sSendRecvMgr.state = 6;
}
break;
}
}
static void EnableSio(void)
{
REG_SIOCNT |= SIO_ENABLE;
}
static void DisableTm3(void)
{
REG_TM3CNT_H &= ~TIMER_ENABLE;
REG_TM3CNT_L = -601;
}
static void GetKeyInput(void)
{
u16 rawKeys = REG_KEYINPUT ^ 0x3FF;
sJoyNew = rawKeys & ~sJoyNewOrRepeated;
sJoyNewOrRepeated = rawKeys;
}
void EReaderHelper_SaveRegsState(void)
{
sSavedIme = REG_IME;
sSavedIe = REG_IE;
sSavedTm3Cnt = REG_TM3CNT_H;
sSavedSioCnt = REG_SIOCNT;
sSavedRCnt = REG_RCNT;
}
void EReaderHelper_RestoreRegsState(void)
{
REG_IME = sSavedIme;
REG_IE = sSavedIe;
REG_TM3CNT_H = sSavedTm3Cnt;
REG_SIOCNT = sSavedSioCnt;
REG_RCNT = sSavedRCnt;
}
void EReaderHelper_ClearsSendRecvMgr(void)
{
CpuFill32(0, &sSendRecvMgr, sizeof(sSendRecvMgr));
}
+80 -80
View File
@@ -28,7 +28,7 @@ struct MEventTaskData1
u16 t02;
u16 t04;
u16 t06;
u8 t08;
u8 state;
u8 t09;
u8 t0A;
u8 t0B;
@@ -91,46 +91,46 @@ struct MEvent_Str_1 gUnknown_3005ED0;
static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE;
void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2)
void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data)
{
vu16 imeBak = REG_IME;
REG_IME = 0;
gIntrTable[1] = sub_815C6D4;
gIntrTable[2] = sub_815C6C4;
sub_815C8C8();
sub_815C960();
gIntrTable[1] = EReaderHelper_SerialCallback;
gIntrTable[2] = EReaderHelper_Timer3Callback;
EReaderHelper_SaveRegsState();
EReaderHelper_ClearsSendRecvMgr();
REG_IE |= INTR_FLAG_VCOUNT;
REG_IME = imeBak;
a0->unk_000 = 0;
a0->unk_004 = a1;
a0->unk_008 = a2;
mgr->status = 0;
mgr->size = size;
mgr->data = data;
}
void sub_8143644(struct MEvent_Str_1 *unused)
{
vu16 imeBak = REG_IME;
REG_IME = 0;
sub_815C960();
sub_815C91C();
EReaderHelper_ClearsSendRecvMgr();
EReaderHelper_RestoreRegsState();
RestoreSerialTimer3IntrHandlers();
REG_IME = imeBak;
}
u8 sub_8143674(struct MEvent_Str_1 *a0)
u8 sub_8143674(struct MEvent_Str_1 *mgr)
{
u8 resp = 0;
a0->unk_000 = sub_815C498(1, a0->unk_004, a0->unk_008, 0);
if ((a0->unk_000 & 0x13) == 0x10)
mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0);
if ((mgr->status & 0x13) == 0x10)
resp = 1;
if (a0->unk_000 & 8)
if (mgr->status & 8)
resp = 2;
if (a0->unk_000 & 4)
if (mgr->status & 4)
resp = 3;
gUnknown_3003F84 = 0;
return resp;
}
void sub_81436BC(void)
static void ResetTTDataBuffer(void)
{
memset(gDecompressionBuffer, 0, 0x2000);
gLinkType = 0x5502;
@@ -143,7 +143,7 @@ bool32 sub_81436EC(void)
vu16 imeBak = REG_IME;
u16 data[4];
REG_IME = 0;
*(u64 *)data = gUnknown_3003FB4;
*(u64 *)data = gSioMlt_Recv;
REG_IME = imeBak;
if ( data[0] == 0xB9A0
&& data[1] == 0xCCD0
@@ -154,7 +154,7 @@ bool32 sub_81436EC(void)
return FALSE;
}
bool32 sub_814374C(void)
static bool32 IsEReaderConnectionSane(void)
{
if (sub_800AA48() && GetLinkPlayerCount_2() == 2)
return TRUE;
@@ -244,7 +244,7 @@ void task_add_00_ereader(void)
{
u8 taskId = CreateTask(sub_8143910, 0);
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
data->t08 = 0;
data->state = 0;
data->t09 = 0;
data->t0A = 0;
data->t0B = 0;
@@ -258,12 +258,12 @@ void task_add_00_ereader(void)
data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2));
}
void sub_81438E8(u16 *a0)
static void ResetDelayTimer(u16 *a0)
{
*a0 = 0;
}
bool32 sub_81438F0(u16 * a0, u16 a1)
static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1)
{
if (++(*a0) > a1)
{
@@ -276,49 +276,49 @@ bool32 sub_81438F0(u16 * a0, u16 a1)
void sub_8143910(u8 taskId)
{
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
switch (data->t08)
switch (data->state)
{
case 0:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE52))
data->t08 = 1;
data->state = 1;
break;
case 1:
sub_81436BC();
sub_81438E8(&data->t00);
data->t08 = 2;
ResetTTDataBuffer();
ResetDelayTimer(&data->t00);
data->state = 2;
break;
case 2:
if (sub_81438F0(&data->t00, 10))
data->t08 = 3;
if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
data->state = 3;
break;
case 3:
if (!sub_814374C())
if (!IsEReaderConnectionSane())
{
CloseLink();
data->t08 = 4;
data->state = 4;
}
else
data->t08 = 13;
data->state = 13;
break;
case 4:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE53))
{
AddTextPrinterToWindow1(gUnknown_841DE54);
sub_81438E8(&data->t00);
data->t08 = 5;
ResetDelayTimer(&data->t00);
data->state = 5;
}
break;
case 5:
if (sub_81438F0(&data->t00, 90))
if (AdvanceDelayTimerCheckTimeout(&data->t00, 90))
{
sub_81436BC();
data->t08 = 6;
ResetTTDataBuffer();
data->state = 6;
}
else if (JOY_NEW(B_BUTTON))
{
sub_81438E8(&data->t00);
ResetDelayTimer(&data->t00);
PlaySE(SE_SELECT);
data->t08 = 23;
data->state = 23;
}
break;
case 6:
@@ -326,64 +326,64 @@ void sub_8143910(u8 taskId)
{
PlaySE(SE_SELECT);
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 23;
ResetDelayTimer(&data->t00);
data->state = 23;
}
else if (GetLinkPlayerCount_2() > 1)
{
sub_81438E8(&data->t00);
ResetDelayTimer(&data->t00);
CloseLink();
data->t08 = 7;
data->state = 7;
}
else if (sub_81436EC())
{
PlaySE(SE_SELECT);
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 8;
ResetDelayTimer(&data->t00);
data->state = 8;
}
else if (sub_81438F0(&data->t00, 10))
else if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
{
CloseLink();
sub_81436BC();
sub_81438E8(&data->t00);
ResetTTDataBuffer();
ResetDelayTimer(&data->t00);
}
break;
case 7:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7C))
data->t08 = 4;
data->state = 4;
break;
case 8:
AddTextPrinterToWindow1(gUnknown_841DE95);
sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start);
data->t08 = 9;
data->state = 9;
break;
case 9:
data->t0E = sub_8143674(&gUnknown_3005ED0);
if (data->t0E != 0)
data->t08 = 10;
data->state = 10;
break;
case 10:
sub_8143644(&gUnknown_3005ED0);
if (data->t0E == 3)
data->t08 = 20;
data->state = 20;
else if (data->t0E == 1)
{
sub_81438E8(&data->t00);
ResetDelayTimer(&data->t00);
AddTextPrinterToWindow1(gUnknown_841DE9B);
data->t08 = 11;
data->state = 11;
}
else
data->t08 = 0;
data->state = 0;
break;
case 11:
if (sub_81438F0(&data->t00, 840))
data->t08 = 12;
if (AdvanceDelayTimerCheckTimeout(&data->t00, 840))
data->state = 12;
break;
case 12:
sub_81436BC();
ResetTTDataBuffer();
AddTextPrinterToWindow1(gUnknown_841DE98);
data->t08 = 13;
data->state = 13;
break;
case 13:
switch (sub_8143770(&data->t09, &data->t00))
@@ -392,21 +392,21 @@ void sub_8143910(u8 taskId)
break;
case 2:
AddTextPrinterToWindow1(gUnknown_841DE95);
data->t08 = 14;
data->state = 14;
break;
case 1:
PlaySE(SE_SELECT);
CloseLink();
data->t08 = 23;
data->state = 23;
break;
case 5:
CloseLink();
data->t08 = 21;
data->state = 21;
break;
case 3:
case 4:
CloseLink();
data->t08 = 20;
data->state = 20;
break;
}
break;
@@ -414,65 +414,65 @@ void sub_8143910(u8 taskId)
if (HasLinkErrorOccurred())
{
CloseLink();
data->t08 = 20;
data->state = 20;
}
else if (GetBlockReceivedStatus())
{
ResetBlockReceivedFlags();
data->t08 = 15;
data->state = 15;
}
break;
case 15:
data->t0E = sub_815D6B4(gDecompressionBuffer);
data->t0E = ValidateTrainerTowerData((struct TrainerTowerData *)gDecompressionBuffer);
sub_800AA80(data->t0E);
data->t08 = 16;
data->state = 16;
break;
case 16:
if (!gReceivedRemoteLinkPlayers)
{
if (data->t0E == 1)
data->t08 = 17;
data->state = 17;
else
data->t08 = 20;
data->state = 20;
}
break;
case 17:
if (sub_815D794(gDecompressionBuffer))
if (CEReaderTool_SaveTrainerTower((struct TrainerTowerData *)gDecompressionBuffer))
{
AddTextPrinterToWindow1(gUnknown_841DE99);
sub_81438E8(&data->t00);
data->t08 = 18;
ResetDelayTimer(&data->t00);
data->state = 18;
}
else
data->t08 = 22;
data->state = 22;
break;
case 18:
if (sub_81438F0(&data->t00, 120))
if (AdvanceDelayTimerCheckTimeout(&data->t00, 120))
{
AddTextPrinterToWindow1(gUnknown_841DE9A);
PlayFanfare(258);
data->t08 = 19;
data->state = 19;
}
break;
case 19:
if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON))
data->t08 = 26;
data->state = 26;
break;
case 23:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7D))
data->t08 = 26;
data->state = 26;
break;
case 20:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE96))
data->t08 = 0;
data->state = 0;
break;
case 21:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE97))
data->t08 = 0;
data->state = 0;
break;
case 22:
if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE9C))
data->t08 = 0;
data->state = 0;
break;
case 26:
sub_812B484();
+1 -1
View File
@@ -828,7 +828,7 @@ u32 TryCopySpecialSaveSection(u8 sector, u8* dst)
return 1;
}
u32 sub_80DA5E0(u8 sector, u8* src)
u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
{
s32 i;
s32 size;
+48 -106
View File
@@ -35,45 +35,10 @@ struct UnkStruct_8479D34
u8 flags3[8];
};
struct UnkSubstruct_203F458_000C_004
{
/* 0x000 */ u8 unk_000[11];
/* 0x00B */ u8 unk_00B;
/* 0x00C */ u8 unk_00C;
/* 0x00E */ u16 unk_00E[6];
/* 0x01A */ u16 unk_01A[6];
/* 0x026 */ u16 unk_026[6];
/* 0x032 */ u16 unk_032[6];
/* 0x040 */ struct BattleTowerPokemon unk_040[PARTY_SIZE];
}; // size: 328
struct UnkSubstruct_203F458_000C
{
/* 0x000 */ u8 unk_000;
/* 0x000 */ u8 unk_001;
/* 0x002 */ u8 unk_002;
/* 0x003 */ u8 unk_003;
/* 0x004 */ struct UnkSubstruct_203F458_000C_004 unk_004[3];
/* 0x3DC */ u8 filler_3DC[4];
};
struct Unk_203F458_Header
{
u8 unk0;
u8 unk1;
u32 unk4;
};
struct UnkStruct_203F458_SaveBlock
{
struct Unk_203F458_Header unk_0000;
struct UnkSubstruct_203F458_000C unk_0008[8];
};
struct UnkStruct_203F458
{
/* 0x0000 */ u8 unk_0000;
/* 0x0004 */ struct UnkStruct_203F458_SaveBlock unk_0004;
/* 0x0004 */ struct TrainerTowerData unk_0004;
};
struct UnkStruct_203F45C
@@ -563,30 +528,7 @@ const u8 gUnknown_847A30E[][3] = {
};
extern const struct Unk_203F458_Header gUnknown_84827AC;
extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8];
bool32 sub_815D7BC(void * dest, void * buffer)
{
if (TryCopySpecialSaveSection(30, buffer) != 1)
return FALSE;
memcpy(dest + 0x000, buffer, 0xF88);
if (TryCopySpecialSaveSection(31, buffer) != 1)
return FALSE;
memcpy(dest + 0xF88, buffer, 0xF80);
if (!sub_815D6B4(dest))
return FALSE;
return TRUE;
}
bool32 sub_815D80C(void * dest)
{
void * buffer = AllocZeroed(0x1000);
bool32 success = sub_815D7BC(dest, buffer);
Free(buffer);
return success;
}
extern const struct TrainerTowerTrainer *const gUnknown_84827B4[][8];
bool32 sub_815D834(void)
{
@@ -696,23 +638,23 @@ void sub_815DA54(void)
sub_815DC8C();
gUnknown_203F45C = AllocZeroed(sizeof(*gUnknown_203F45C));
r10 = VarGet(VAR_0x4001);
StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11);
StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11);
for (r9 = 0; r9 < 6; r9++)
{
gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9];
gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9];
gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9];
gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9];
if (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002 == 1)
if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1)
{
gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9];
gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9];
gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9];
gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9];
}
}
gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002;
gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B;
gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C;
gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002;
gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B;
gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C;
SetVBlankCounter1Ptr(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
sub_815DD2C();
}
@@ -750,12 +692,12 @@ void sub_815DC8C(void) // fakematching
{
u32 whichTimer = gSaveBlock1Ptr->unkArrayIdx;
s32 r4;
const struct UnkSubstruct_203F458_000C *const * r7;
const struct TrainerTowerTrainer *const * r7;
gUnknown_203F458 = AllocZeroed(sizeof(*gUnknown_203F458));
gUnknown_203F458->unk_0000 = gMapHeader.mapDataId - 0x2A;
if (sub_815D834() == TRUE)
sub_815D80C(&gUnknown_203F458->unk_0004);
CEReaderTool_LoadTrainerTower(&gUnknown_203F458->unk_0004);
else
{
struct UnkStruct_203F458 * r0_ = gUnknown_203F458;
@@ -767,12 +709,12 @@ void sub_815DC8C(void) // fakematching
for (r4 = 0; r4 < 8; r4++)
{
void * r0 = gUnknown_203F458;
r0 = r4 * sizeof(struct UnkSubstruct_203F458_000C) + r0;
r0 += offsetof(struct UnkStruct_203F458, unk_0004.unk_0008);
memcpy(r0, r7[r4], sizeof(struct UnkSubstruct_203F458_000C));
r0 = r4 * sizeof(struct TrainerTowerTrainer) + r0;
r0 += offsetof(struct UnkStruct_203F458, unk_0004.trainers);
memcpy(r0, r7[r4], sizeof(struct TrainerTowerTrainer));
// r0[r4] = *r7[r4];
}
gUnknown_203F458->unk_0004.unk_0000.unk4 = CalcByteArraySum((void *)gUnknown_203F458->unk_0004.unk_0008, sizeof(gUnknown_203F458->unk_0004.unk_0008));
gUnknown_203F458->unk_0004.unk4 = CalcByteArraySum((void *)gUnknown_203F458->unk_0004.trainers, sizeof(gUnknown_203F458->unk_0004.trainers));
sub_815EC0C();
}
}
@@ -799,7 +741,7 @@ void sub_815DC8C(void)
"\tbne _0815DCD0\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x4\n"
"\tbl sub_815D80C\n"
"\tbl CEReaderTool_LoadTrainerTower\n"
"\tb _0815DD18\n"
"\t.align 2, 0\n"
"_0815DCBC: .4byte gSaveBlock1Ptr\n"
@@ -860,14 +802,14 @@ void sub_815DD2C(void)
void sub_815DD44(void)
{
if (gMapHeader.mapDataId - 0x129 > gUnknown_203F458->unk_0004.unk_0000.unk0)
if (gMapHeader.mapDataId - 0x129 > gUnknown_203F458->unk_0004.count)
{
gSpecialVar_Result = 3;
SetCurrentMapLayout(0x132);
}
else
{
gSpecialVar_Result = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002;
gSpecialVar_Result = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002;
SetCurrentMapLayout(gUnknown_847A284[gUnknown_203F458->unk_0000][gSpecialVar_Result]);
sub_815DDB0();
}
@@ -877,10 +819,10 @@ void sub_815DDB0(void)
{
s32 r3, r4;
u8 r1, r2, r4_;
switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002)
switch (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002)
{
case 0:
r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B;
r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_00B;
for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++)
{
if (gUnknown_8479ED8[r3].unk1 == r2)
@@ -893,7 +835,7 @@ void sub_815DDB0(void)
VarSet(VAR_0x4011, r1);
break;
case 1:
r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B;
r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_00B;
for (r3 = 0; r3 < NELEMS(gUnknown_847A024); r3++)
{
if (gUnknown_847A024[r3].unk2 == r2)
@@ -915,7 +857,7 @@ void sub_815DDB0(void)
case 2:
for (r4 = 0; r4 < 3; r4++)
{
r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00B;
r2 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_00B;
for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++)
{
if (gUnknown_8479ED8[r3].unk1 == r2)
@@ -962,25 +904,25 @@ void sub_815DF54(void)
{
u16 r4 = gSpecialVar_0x8006;
u8 r1;
u8 r5 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002;
u8 r5 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002;
// HOW DO I MATCH THIS CONTROL FLOW?!?!
r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r5 == 1 ? 0 : r4].unk_00B;
r1 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r5 == 1 ? 0 : r4].unk_00B;
switch (gSpecialVar_0x8005)
{
case 2:
sub_815E068(r5, r1);
sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00E, gStringVar4);
sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_00E, gStringVar4);
break;
case 3:
sub_815E068(r5, r1);
sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_01A, gStringVar4);
sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_01A, gStringVar4);
break;
case 4:
sub_815E068(r5, r1);
sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_026, gStringVar4);
sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_026, gStringVar4);
break;
case 5:
sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_032, gStringVar4);
sub_815DEFC(gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_032, gStringVar4);
break;
}
}
@@ -1180,7 +1122,7 @@ void sub_815E124(u8 taskId)
void sub_815E160(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_FACTORY;
if (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002 == 1)
if (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002 == 1)
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
gTrainerBattleOpponent_A = 0;
sub_815E9FC();
@@ -1192,7 +1134,7 @@ void sub_815E160(void)
void sub_815E1C0(void)
{
if (!gSpecialVar_0x8005)
gSpecialVar_Result = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002;
gSpecialVar_Result = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002;
}
void sub_815E1F0(void)
@@ -1203,7 +1145,7 @@ void sub_815E1F0(void)
void sub_815E218(void)
{
u16 mapDataId = gMapHeader.mapDataId;
if (mapDataId - 0x12A == gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 && mapDataId - 0x129 <= gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_001)
if (mapDataId - 0x12A == gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 && mapDataId - 0x129 <= gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_001)
gSpecialVar_Result = FALSE;
else
gSpecialVar_Result = TRUE;
@@ -1239,7 +1181,7 @@ void sub_815E394(void)
void sub_815E408(void)
{
u16 itemId = gUnknown_847A2B4[gUnknown_203F458->unk_0004.unk_0008->unk_003];
u16 itemId = gUnknown_847A2B4[gUnknown_203F458->unk_0004.trainers->unk_003];
if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0)
gSpecialVar_Result = 2;
else if (AddBagItem(itemId, 1) == 1)
@@ -1367,9 +1309,9 @@ void sub_815E8B4(void)
void sub_815E8CC(void)
{
if (gUnknown_203F458->unk_0004.unk_0000.unk0 != gUnknown_203F458->unk_0004.unk_0008[0].unk_001)
if (gUnknown_203F458->unk_0004.count != gUnknown_203F458->unk_0004.trainers[0].unk_001)
{
ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.unk_0000.unk0, STR_CONV_MODE_LEFT_ALIGN, 1);
ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.count, STR_CONV_MODE_LEFT_ALIGN, 1);
gSpecialVar_Result = TRUE;
}
else
@@ -1394,7 +1336,7 @@ void sub_815E948(void)
{
s32 i;
u16 var_4001 = VarGet(VAR_0x4001);
u8 r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B;
u8 r1 = gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B;
for (i = 0; i < NELEMS(gUnknown_847A074); i++)
{
@@ -1427,29 +1369,29 @@ void sub_815E9FC(void)
ZeroEnemyPartyMons();
switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002)
switch (gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_002)
{
case 0:
default:
for (r6 = 0; r6 < 2; r6++)
{
r2 = gUnknown_847A2EE[r5][r6];
gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[r6], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]);
gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[r6], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]);
}
break;
case 1:
r2 = gUnknown_847A2FE[r5][0];
gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2]);
gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2]);
r2 = gUnknown_847A2FE[r5][1];
gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[1], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2]);
gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[1], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2]);
break;
case 2:
r2 = gUnknown_847A30E[r5][r4];
gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]);
gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9;
sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.trainers[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]);
break;
}
}
@@ -1474,9 +1416,9 @@ static s32 GetPartyMaxLevel(void)
void sub_815EC0C(void)
{
if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != gUnknown_203F458->unk_0004.unk_0000.unk1)
if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != gUnknown_203F458->unk_0004.id)
{
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = gUnknown_203F458->unk_0004.unk_0000.unk1;
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = gUnknown_203F458->unk_0004.id;
sub_815EDF4(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4, 215999);
gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 = FALSE;
}
+2 -32
View File
@@ -197,38 +197,8 @@ gUnknown_3002040: @ 3002040
gUnknown_3002044: @ 3002044
.space 0x4
gUnknown_3002048: @ 3002048
.space 0x18
gUnknown_3002060: @ 3002060
.space 0x2
gUnknown_3002062: @ 3002062
.space 0x2
gUnknown_3002064: @ 3002064
.space 0x2
gUnknown_3002066: @ 3002066
.space 0x2
gUnknown_3002068: @ 3002068
.space 0x4
gUnknown_300206C: @ 300206C
.space 0x2
gUnknown_300206E: @ 300206E
.space 0x2
gUnknown_3002070: @ 3002070
.space 0x2
gUnknown_3002072: @ 3002072
.space 0x2
gUnknown_3002074: @ 3002074
.space 0x4
.align 3
.include "src/ereader_helpers.o"
.align 3
.include "src/unk_815C980.o"
+1 -1
View File
@@ -96,7 +96,7 @@ gUnknown_3003FA0: @ 3003FA0
gUnknown_3003FB0: @ 3003FB0
.space 0x4
gUnknown_3003FB4: @ 3003FB4
gSioMlt_Recv: @ 3003FB4
.space 0xFBC
gUnknown_3004F70: @ 3004F70