Merge pull request #37 from PikalaxALT/berry_fix_program
Berry fix program
This commit is contained in:
commit
ed9e0e2054
21 changed files with 782 additions and 777 deletions
|
@ -5,588 +5,4 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start sub_81BF384
|
|
||||||
sub_81BF384: @ 81BF384
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r0, =0x0000ffff
|
|
||||||
bl DisableInterrupts
|
|
||||||
movs r0, 0x1
|
|
||||||
bl EnableInterrupts
|
|
||||||
bl m4aSoundVSyncOff
|
|
||||||
movs r0, 0
|
|
||||||
bl SetVBlankCallback
|
|
||||||
bl ResetSpriteData
|
|
||||||
bl ResetTasks
|
|
||||||
bl remove_some_task
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
ldr r4, =gUnknown_030012B8
|
|
||||||
movs r0, 0x50
|
|
||||||
bl AllocZeroed
|
|
||||||
str r0, [r4]
|
|
||||||
movs r1, 0
|
|
||||||
strb r1, [r0]
|
|
||||||
ldr r1, [r4]
|
|
||||||
movs r0, 0x6
|
|
||||||
strb r0, [r1, 0x1]
|
|
||||||
ldr r0, =sub_81BF3DC
|
|
||||||
bl SetMainCallback2
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81BF384
|
|
||||||
|
|
||||||
thumb_func_start sub_81BF3DC
|
|
||||||
sub_81BF3DC: @ 81BF3DC
|
|
||||||
push {r4,r5,lr}
|
|
||||||
sub sp, 0x4
|
|
||||||
ldr r1, =gUnknown_030012B8
|
|
||||||
ldr r0, [r1]
|
|
||||||
ldrb r0, [r0]
|
|
||||||
adds r5, r1, 0
|
|
||||||
cmp r0, 0x7
|
|
||||||
bls _081BF3EE
|
|
||||||
b _081BF592
|
|
||||||
_081BF3EE:
|
|
||||||
lsls r0, 2
|
|
||||||
ldr r1, =_081BF400
|
|
||||||
adds r0, r1
|
|
||||||
ldr r0, [r0]
|
|
||||||
mov pc, r0
|
|
||||||
.pool
|
|
||||||
.align 2, 0
|
|
||||||
_081BF400:
|
|
||||||
.4byte _081BF420
|
|
||||||
.4byte _081BF430
|
|
||||||
.4byte _081BF45C
|
|
||||||
.4byte _081BF488
|
|
||||||
.4byte _081BF4BC
|
|
||||||
.4byte _081BF514
|
|
||||||
.4byte _081BF552
|
|
||||||
.4byte _081BF574
|
|
||||||
_081BF420:
|
|
||||||
bl sub_81BF5A4
|
|
||||||
ldr r0, =gUnknown_030012B8
|
|
||||||
ldr r1, [r0]
|
|
||||||
movs r0, 0x1
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF430:
|
|
||||||
movs r0, 0x5
|
|
||||||
bl sub_81BF7A4
|
|
||||||
cmp r0, 0x5
|
|
||||||
beq _081BF43C
|
|
||||||
b _081BF592
|
|
||||||
_081BF43C:
|
|
||||||
ldr r0, =gMain
|
|
||||||
ldrh r1, [r0, 0x2E]
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081BF44A
|
|
||||||
b _081BF592
|
|
||||||
_081BF44A:
|
|
||||||
ldr r0, =gUnknown_030012B8
|
|
||||||
ldr r1, [r0]
|
|
||||||
movs r0, 0x2
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF45C:
|
|
||||||
movs r0, 0
|
|
||||||
bl sub_81BF7A4
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081BF468
|
|
||||||
b _081BF592
|
|
||||||
_081BF468:
|
|
||||||
ldr r0, =gMain
|
|
||||||
ldrh r1, [r0, 0x2E]
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081BF476
|
|
||||||
b _081BF592
|
|
||||||
_081BF476:
|
|
||||||
ldr r0, =gUnknown_030012B8
|
|
||||||
ldr r1, [r0]
|
|
||||||
movs r0, 0x3
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF488:
|
|
||||||
movs r0, 0x1
|
|
||||||
bl sub_81BF7A4
|
|
||||||
cmp r0, 0x1
|
|
||||||
beq _081BF494
|
|
||||||
b _081BF592
|
|
||||||
_081BF494:
|
|
||||||
ldr r4, =gUnknown_030012B8
|
|
||||||
ldr r0, [r4]
|
|
||||||
ldr r1, =gUnknown_089A6550
|
|
||||||
str r1, [r0, 0x2C]
|
|
||||||
adds r0, 0x4F
|
|
||||||
movs r5, 0
|
|
||||||
strb r5, [r0]
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0x4
|
|
||||||
bl MultiBootInit
|
|
||||||
ldr r1, [r4]
|
|
||||||
strh r5, [r1, 0x2]
|
|
||||||
movs r0, 0x4
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF4BC:
|
|
||||||
adds r4, r5, 0
|
|
||||||
ldr r0, [r4]
|
|
||||||
adds r0, 0x4
|
|
||||||
bl MultiBootMain
|
|
||||||
ldr r4, [r4]
|
|
||||||
ldrb r0, [r4, 0x1C]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _081BF4D8
|
|
||||||
ldr r0, [r4, 0x20]
|
|
||||||
ldr r1, =0x00020200
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, r1
|
|
||||||
beq _081BF4E4
|
|
||||||
_081BF4D8:
|
|
||||||
movs r0, 0
|
|
||||||
strh r0, [r4, 0x2]
|
|
||||||
b _081BF592
|
|
||||||
.pool
|
|
||||||
_081BF4E4:
|
|
||||||
ldrh r0, [r4, 0x2]
|
|
||||||
adds r0, 0x1
|
|
||||||
strh r0, [r4, 0x2]
|
|
||||||
lsls r0, 16
|
|
||||||
lsrs r0, 16
|
|
||||||
cmp r0, 0xB4
|
|
||||||
bls _081BF592
|
|
||||||
adds r0, r4, 0x4
|
|
||||||
ldr r1, =gMultiBootProgram_BerryGlitchFix_Start
|
|
||||||
ldr r2, =gMultiBootProgram_BerryGlitchFix_End
|
|
||||||
subs r2, r1
|
|
||||||
movs r3, 0x1
|
|
||||||
str r3, [sp]
|
|
||||||
movs r3, 0x4
|
|
||||||
bl MultiBootStartMaster
|
|
||||||
ldr r1, [r5]
|
|
||||||
movs r0, 0x5
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF514:
|
|
||||||
movs r0, 0x2
|
|
||||||
bl sub_81BF7A4
|
|
||||||
adds r4, r0, 0
|
|
||||||
cmp r4, 0x2
|
|
||||||
bne _081BF592
|
|
||||||
ldr r5, =gUnknown_030012B8
|
|
||||||
ldr r0, [r5]
|
|
||||||
adds r0, 0x4
|
|
||||||
bl MultiBootMain
|
|
||||||
ldr r0, [r5]
|
|
||||||
adds r0, 0x4
|
|
||||||
bl MultiBootCheckComplete
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081BF540
|
|
||||||
ldr r1, [r5]
|
|
||||||
movs r0, 0x6
|
|
||||||
b _081BF590
|
|
||||||
.pool
|
|
||||||
_081BF540:
|
|
||||||
ldr r1, [r5]
|
|
||||||
adds r0, r1, 0
|
|
||||||
adds r0, 0x22
|
|
||||||
ldrb r0, [r0]
|
|
||||||
ands r4, r0
|
|
||||||
cmp r4, 0
|
|
||||||
bne _081BF592
|
|
||||||
movs r0, 0x7
|
|
||||||
b _081BF590
|
|
||||||
_081BF552:
|
|
||||||
movs r0, 0x3
|
|
||||||
bl sub_81BF7A4
|
|
||||||
cmp r0, 0x3
|
|
||||||
bne _081BF592
|
|
||||||
ldr r0, =gMain
|
|
||||||
ldrh r1, [r0, 0x2E]
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081BF592
|
|
||||||
bl DoSoftReset
|
|
||||||
b _081BF592
|
|
||||||
.pool
|
|
||||||
_081BF574:
|
|
||||||
movs r0, 0x4
|
|
||||||
bl sub_81BF7A4
|
|
||||||
cmp r0, 0x4
|
|
||||||
bne _081BF592
|
|
||||||
ldr r0, =gMain
|
|
||||||
ldrh r1, [r0, 0x2E]
|
|
||||||
movs r0, 0x1
|
|
||||||
ands r0, r1
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081BF592
|
|
||||||
ldr r0, =gUnknown_030012B8
|
|
||||||
ldr r1, [r0]
|
|
||||||
movs r0, 0x1
|
|
||||||
_081BF590:
|
|
||||||
strb r0, [r1]
|
|
||||||
_081BF592:
|
|
||||||
add sp, 0x4
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81BF3DC
|
|
||||||
|
|
||||||
thumb_func_start sub_81BF5A4
|
|
||||||
sub_81BF5A4: @ 81BF5A4
|
|
||||||
push {r4-r6,lr}
|
|
||||||
mov r6, r8
|
|
||||||
push {r6}
|
|
||||||
sub sp, 0x10
|
|
||||||
movs r0, 0x8
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0xA
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x10
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x12
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x14
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x16
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x50
|
|
||||||
movs r1, 0
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r1, 0
|
|
||||||
str r1, [sp, 0xC]
|
|
||||||
ldr r4, =0x040000d4
|
|
||||||
add r0, sp, 0xC
|
|
||||||
str r0, [r4]
|
|
||||||
movs r0, 0xC0
|
|
||||||
lsls r0, 19
|
|
||||||
str r0, [r4, 0x4]
|
|
||||||
ldr r0, =0x85006000
|
|
||||||
str r0, [r4, 0x8]
|
|
||||||
ldr r0, [r4, 0x8]
|
|
||||||
str r1, [sp, 0xC]
|
|
||||||
add r0, sp, 0xC
|
|
||||||
str r0, [r4]
|
|
||||||
movs r0, 0xE0
|
|
||||||
lsls r0, 19
|
|
||||||
str r0, [r4, 0x4]
|
|
||||||
ldr r2, =0x85000100
|
|
||||||
str r2, [r4, 0x8]
|
|
||||||
ldr r0, [r4, 0x8]
|
|
||||||
str r1, [sp, 0xC]
|
|
||||||
add r0, sp, 0xC
|
|
||||||
str r0, [r4]
|
|
||||||
movs r0, 0xA0
|
|
||||||
lsls r0, 19
|
|
||||||
str r0, [r4, 0x4]
|
|
||||||
str r2, [r4, 0x8]
|
|
||||||
ldr r0, [r4, 0x8]
|
|
||||||
movs r0, 0
|
|
||||||
bl ResetBgsAndClearDma3BusyFlags
|
|
||||||
ldr r1, =gUnknown_08618108
|
|
||||||
movs r0, 0
|
|
||||||
movs r2, 0x2
|
|
||||||
bl InitBgsFromTemplates
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl ChangeBgX
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl ChangeBgY
|
|
||||||
movs r0, 0x1
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl ChangeBgX
|
|
||||||
movs r0, 0x1
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl ChangeBgY
|
|
||||||
ldr r0, =gUnknown_08618110
|
|
||||||
bl InitWindows
|
|
||||||
bl DeactivateAllTextPrinters
|
|
||||||
ldr r0, =gUnknown_08618138
|
|
||||||
str r0, [r4]
|
|
||||||
ldr r0, =0x050001e0
|
|
||||||
str r0, [r4, 0x4]
|
|
||||||
ldr r0, =0x84000008
|
|
||||||
str r0, [r4, 0x8]
|
|
||||||
ldr r0, [r4, 0x8]
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0x40
|
|
||||||
bl SetGpuReg
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0
|
|
||||||
bl FillWindowPixelBuffer
|
|
||||||
movs r0, 0x3
|
|
||||||
movs r1, 0
|
|
||||||
bl FillWindowPixelBuffer
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0xAA
|
|
||||||
bl FillWindowPixelBuffer
|
|
||||||
ldr r5, =gUnknown_08617E9B
|
|
||||||
movs r0, 0
|
|
||||||
adds r1, r5, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl GetStringWidth
|
|
||||||
adds r1, r0, 0
|
|
||||||
movs r4, 0x78
|
|
||||||
subs r0, r4, r1
|
|
||||||
lsrs r1, r0, 31
|
|
||||||
adds r0, r1
|
|
||||||
asrs r0, 1
|
|
||||||
lsls r2, r0, 24
|
|
||||||
lsrs r2, 24
|
|
||||||
ldr r6, =gUnknown_0861815B
|
|
||||||
str r6, [sp]
|
|
||||||
movs r0, 0x1
|
|
||||||
negs r0, r0
|
|
||||||
mov r8, r0
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
str r5, [sp, 0x8]
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0
|
|
||||||
movs r3, 0x3
|
|
||||||
bl box_print
|
|
||||||
ldr r5, =gUnknown_08617E8D
|
|
||||||
movs r0, 0
|
|
||||||
adds r1, r5, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl GetStringWidth
|
|
||||||
adds r1, r0, 0
|
|
||||||
subs r4, r1
|
|
||||||
lsrs r0, r4, 31
|
|
||||||
adds r4, r0
|
|
||||||
asrs r4, 1
|
|
||||||
adds r0, r4, 0
|
|
||||||
adds r0, 0x78
|
|
||||||
lsls r2, r0, 24
|
|
||||||
lsrs r2, 24
|
|
||||||
str r6, [sp]
|
|
||||||
mov r0, r8
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
str r5, [sp, 0x8]
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0
|
|
||||||
movs r3, 0x3
|
|
||||||
bl box_print
|
|
||||||
movs r0, 0
|
|
||||||
adds r1, r5, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl GetStringWidth
|
|
||||||
adds r1, r0, 0
|
|
||||||
movs r0, 0x70
|
|
||||||
subs r0, r1
|
|
||||||
lsrs r1, r0, 31
|
|
||||||
adds r0, r1
|
|
||||||
asrs r0, 1
|
|
||||||
lsls r2, r0, 24
|
|
||||||
lsrs r2, 24
|
|
||||||
str r6, [sp]
|
|
||||||
mov r0, r8
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
str r5, [sp, 0x8]
|
|
||||||
movs r0, 0x3
|
|
||||||
movs r1, 0
|
|
||||||
movs r3, 0
|
|
||||||
bl box_print
|
|
||||||
ldr r4, =gUnknown_08617E78
|
|
||||||
movs r0, 0x1
|
|
||||||
adds r1, r4, 0
|
|
||||||
movs r2, 0
|
|
||||||
bl GetStringWidth
|
|
||||||
adds r1, r0, 0
|
|
||||||
movs r0, 0xD0
|
|
||||||
subs r0, r1
|
|
||||||
lsrs r1, r0, 31
|
|
||||||
adds r0, r1
|
|
||||||
asrs r0, 1
|
|
||||||
lsls r2, r0, 24
|
|
||||||
lsrs r2, 24
|
|
||||||
ldr r0, =gUnknown_08618158
|
|
||||||
str r0, [sp]
|
|
||||||
mov r0, r8
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
str r4, [sp, 0x8]
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0x1
|
|
||||||
movs r3, 0x2
|
|
||||||
bl box_print
|
|
||||||
movs r0, 0x2
|
|
||||||
movs r1, 0x2
|
|
||||||
bl CopyWindowToVram
|
|
||||||
movs r0, 0x3
|
|
||||||
movs r1, 0x2
|
|
||||||
bl CopyWindowToVram
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0x2
|
|
||||||
bl CopyWindowToVram
|
|
||||||
add sp, 0x10
|
|
||||||
pop {r3}
|
|
||||||
mov r8, r3
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81BF5A4
|
|
||||||
|
|
||||||
thumb_func_start sub_81BF7A4
|
|
||||||
sub_81BF7A4: @ 81BF7A4
|
|
||||||
push {r4,r5,lr}
|
|
||||||
adds r4, r0, 0
|
|
||||||
ldr r5, =gUnknown_030012B8
|
|
||||||
ldr r0, [r5]
|
|
||||||
ldrb r0, [r0, 0x1]
|
|
||||||
cmp r0, r4
|
|
||||||
bne _081BF7BC
|
|
||||||
adds r0, r4, 0
|
|
||||||
b _081BF7DC
|
|
||||||
.pool
|
|
||||||
_081BF7BC:
|
|
||||||
cmp r0, 0x6
|
|
||||||
bne _081BF7CC
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl sub_81BF7E8
|
|
||||||
ldr r0, [r5]
|
|
||||||
strb r4, [r0, 0x1]
|
|
||||||
b _081BF7D6
|
|
||||||
_081BF7CC:
|
|
||||||
bl sub_81BF8D8
|
|
||||||
ldr r1, [r5]
|
|
||||||
movs r0, 0x6
|
|
||||||
strb r0, [r1, 0x1]
|
|
||||||
_081BF7D6:
|
|
||||||
ldr r0, =gUnknown_030012B8
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldrb r0, [r0, 0x1]
|
|
||||||
_081BF7DC:
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81BF7A4
|
|
||||||
|
|
||||||
thumb_func_start sub_81BF7E8
|
|
||||||
sub_81BF7E8: @ 81BF7E8
|
|
||||||
push {r4-r6,lr}
|
|
||||||
sub sp, 0xC
|
|
||||||
adds r6, r0, 0
|
|
||||||
movs r0, 0x20
|
|
||||||
str r0, [sp]
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
movs r0, 0
|
|
||||||
movs r1, 0
|
|
||||||
movs r2, 0
|
|
||||||
movs r3, 0
|
|
||||||
bl FillBgTilemapBufferRect_Palette0
|
|
||||||
movs r0, 0x1
|
|
||||||
movs r1, 0xAA
|
|
||||||
bl FillWindowPixelBuffer
|
|
||||||
ldr r0, =gUnknown_08618158
|
|
||||||
str r0, [sp]
|
|
||||||
movs r0, 0x1
|
|
||||||
negs r0, r0
|
|
||||||
str r0, [sp, 0x4]
|
|
||||||
ldr r0, =gUnknown_08618160
|
|
||||||
lsls r4, r6, 2
|
|
||||||
adds r0, r4, r0
|
|
||||||
ldr r0, [r0]
|
|
||||||
str r0, [sp, 0x8]
|
|
||||||
movs r0, 0x1
|
|
||||||
movs r1, 0x1
|
|
||||||
movs r2, 0
|
|
||||||
movs r3, 0
|
|
||||||
bl box_print
|
|
||||||
movs r0, 0x1
|
|
||||||
bl PutWindowTilemap
|
|
||||||
movs r0, 0x1
|
|
||||||
movs r1, 0x2
|
|
||||||
bl CopyWindowToVram
|
|
||||||
cmp r6, 0x5
|
|
||||||
bhi _081BF87E
|
|
||||||
ldr r0, =_081BF850
|
|
||||||
adds r0, r4, r0
|
|
||||||
ldr r0, [r0]
|
|
||||||
mov pc, r0
|
|
||||||
.pool
|
|
||||||
.align 2, 0
|
|
||||||
_081BF850:
|
|
||||||
.4byte _081BF868
|
|
||||||
.4byte _081BF870
|
|
||||||
.4byte _081BF868
|
|
||||||
.4byte _081BF868
|
|
||||||
.4byte _081BF868
|
|
||||||
.4byte _081BF878
|
|
||||||
_081BF868:
|
|
||||||
movs r0, 0x2
|
|
||||||
bl PutWindowTilemap
|
|
||||||
b _081BF87E
|
|
||||||
_081BF870:
|
|
||||||
movs r0, 0x3
|
|
||||||
bl PutWindowTilemap
|
|
||||||
b _081BF87E
|
|
||||||
_081BF878:
|
|
||||||
movs r0, 0
|
|
||||||
bl PutWindowTilemap
|
|
||||||
_081BF87E:
|
|
||||||
movs r0, 0
|
|
||||||
bl CopyBgTilemapBufferToVram
|
|
||||||
ldr r5, =gUnknown_08618178
|
|
||||||
lsls r4, r6, 1
|
|
||||||
adds r4, r6
|
|
||||||
lsls r4, 2
|
|
||||||
adds r0, r4, r5
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldr r1, =0x06004000
|
|
||||||
bl LZ77UnCompVram
|
|
||||||
adds r0, r5, 0x4
|
|
||||||
adds r0, r4, r0
|
|
||||||
ldr r0, [r0]
|
|
||||||
ldr r1, =0x0600f800
|
|
||||||
bl LZ77UnCompVram
|
|
||||||
adds r5, 0x8
|
|
||||||
adds r4, r5
|
|
||||||
ldr r0, [r4]
|
|
||||||
movs r1, 0xA0
|
|
||||||
lsls r1, 19
|
|
||||||
ldr r2, =0x04000040
|
|
||||||
bl CpuSet
|
|
||||||
movs r0, 0
|
|
||||||
bl ShowBg
|
|
||||||
movs r0, 0x1
|
|
||||||
bl ShowBg
|
|
||||||
add sp, 0xC
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end sub_81BF7E8
|
|
||||||
|
|
||||||
thumb_func_start sub_81BF8D8
|
|
||||||
sub_81BF8D8: @ 81BF8D8
|
|
||||||
push {lr}
|
|
||||||
movs r0, 0
|
|
||||||
bl HideBg
|
|
||||||
movs r0, 0x1
|
|
||||||
bl HideBg
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_81BF8D8
|
|
||||||
|
|
||||||
.align 2, 0 @ Don't pad with nop.
|
.align 2, 0 @ Don't pad with nop.
|
||||||
|
|
|
@ -1259,7 +1259,7 @@ c2_berry_program_update_screen_1: @ 80AAF28
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
bne _080AAF3E
|
bne _080AAF3E
|
||||||
bl m4aMPlayAllStop
|
bl m4aMPlayAllStop
|
||||||
ldr r0, =sub_81BF384
|
ldr r0, =InitBerryFixProgram
|
||||||
bl SetMainCallback2
|
bl SetMainCallback2
|
||||||
_080AAF3E:
|
_080AAF3E:
|
||||||
pop {r0}
|
pop {r0}
|
||||||
|
|
|
@ -2,68 +2,6 @@
|
||||||
.include "constants/constants.inc"
|
.include "constants/constants.inc"
|
||||||
|
|
||||||
.section .rodata
|
.section .rodata
|
||||||
|
|
||||||
|
|
||||||
gUnknown_08617274:: @ 8617274
|
|
||||||
.incbin "baserom.gba", 0x617274, 0x920
|
|
||||||
|
|
||||||
gUnknown_08617B94:: @ 8617B94
|
|
||||||
.incbin "baserom.gba", 0x617b94, 0xb0
|
|
||||||
|
|
||||||
gUnknown_08617C44:: @ 8617C44
|
|
||||||
.incbin "baserom.gba", 0x617c44, 0x120
|
|
||||||
|
|
||||||
gUnknown_08617D64:: @ 8617D64
|
|
||||||
.incbin "baserom.gba", 0x617d64, 0x30
|
|
||||||
|
|
||||||
gUnknown_08617D94:: @ 8617D94
|
|
||||||
.incbin "baserom.gba", 0x617d94, 0x10
|
|
||||||
|
|
||||||
gUnknown_08617DA4:: @ 8617DA4
|
|
||||||
.incbin "baserom.gba", 0x617da4, 0x5c
|
|
||||||
|
|
||||||
gUnknown_08617E00:: @ 8617E00
|
|
||||||
.incbin "baserom.gba", 0x617e00, 0x18
|
|
||||||
|
|
||||||
gUnknown_08617E18:: @ 8617E18
|
|
||||||
.incbin "baserom.gba", 0x617e18, 0x1c
|
|
||||||
|
|
||||||
gUnknown_08617E34:: @ 8617E34
|
|
||||||
.incbin "baserom.gba", 0x617e34, 0x2c
|
|
||||||
|
|
||||||
gUnknown_08617E60:: @ 8617E60
|
|
||||||
.incbin "baserom.gba", 0x617e60, 0x18
|
|
||||||
|
|
||||||
gUnknown_08617E78:: @ 8617E78
|
|
||||||
.incbin "baserom.gba", 0x617e78, 0x15
|
|
||||||
|
|
||||||
gUnknown_08617E8D:: @ 8617E8D
|
|
||||||
.incbin "baserom.gba", 0x617e8d, 0xe
|
|
||||||
|
|
||||||
gUnknown_08617E9B:: @ 8617E9B
|
|
||||||
.incbin "baserom.gba", 0x617e9b, 0x26d
|
|
||||||
|
|
||||||
gUnknown_08618108:: @ 8618108
|
|
||||||
.incbin "baserom.gba", 0x618108, 0x8
|
|
||||||
|
|
||||||
gUnknown_08618110:: @ 8618110
|
|
||||||
.incbin "baserom.gba", 0x618110, 0x28
|
|
||||||
|
|
||||||
gUnknown_08618138:: @ 8618138
|
|
||||||
.incbin "baserom.gba", 0x618138, 0x20
|
|
||||||
|
|
||||||
gUnknown_08618158:: @ 8618158
|
|
||||||
.incbin "baserom.gba", 0x618158, 0x3
|
|
||||||
|
|
||||||
gUnknown_0861815B:: @ 861815B
|
|
||||||
.incbin "baserom.gba", 0x61815b, 0x5
|
|
||||||
|
|
||||||
gUnknown_08618160:: @ 8618160
|
|
||||||
.incbin "baserom.gba", 0x618160, 0x18
|
|
||||||
|
|
||||||
gUnknown_08618178:: @ 8618178
|
|
||||||
.incbin "baserom.gba", 0x618178, 0x49
|
|
||||||
|
|
||||||
@ 86181C1
|
@ 86181C1
|
||||||
.include "data/text/move_descriptions.inc"
|
.include "data/text/move_descriptions.inc"
|
||||||
|
|
||||||
|
|
35
data/data_emerald2pre1.s
Normal file
35
data/data_emerald2pre1.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
.include "asm/macros.inc"
|
||||||
|
.include "constants/constants.inc"
|
||||||
|
|
||||||
|
.section .rodata
|
||||||
|
|
||||||
|
|
||||||
|
gUnknown_08617274:: @ 8617274
|
||||||
|
.incbin "baserom.gba", 0x617274, 0x920
|
||||||
|
|
||||||
|
gUnknown_08617B94:: @ 8617B94
|
||||||
|
.incbin "baserom.gba", 0x617b94, 0xb0
|
||||||
|
|
||||||
|
gUnknown_08617C44:: @ 8617C44
|
||||||
|
.incbin "baserom.gba", 0x617c44, 0x120
|
||||||
|
|
||||||
|
gUnknown_08617D64:: @ 8617D64
|
||||||
|
.incbin "baserom.gba", 0x617d64, 0x30
|
||||||
|
|
||||||
|
gUnknown_08617D94:: @ 8617D94
|
||||||
|
.incbin "baserom.gba", 0x617d94, 0x10
|
||||||
|
|
||||||
|
gUnknown_08617DA4:: @ 8617DA4
|
||||||
|
.incbin "baserom.gba", 0x617da4, 0x5c
|
||||||
|
|
||||||
|
gUnknown_08617E00:: @ 8617E00
|
||||||
|
.incbin "baserom.gba", 0x617e00, 0x18
|
||||||
|
|
||||||
|
gUnknown_08617E18:: @ 8617E18
|
||||||
|
.incbin "baserom.gba", 0x617e18, 0x1c
|
||||||
|
|
||||||
|
gUnknown_08617E34:: @ 8617E34
|
||||||
|
.incbin "baserom.gba", 0x617e34, 0x2c
|
||||||
|
|
||||||
|
gUnknown_08617E60:: @ 8617E60
|
||||||
|
.incbin "baserom.gba", 0x617e60, 0x18
|
|
@ -959,7 +959,7 @@ gUnknown_08DD4BF0:: @ 8DD4BF0
|
||||||
|
|
||||||
gUnknown_08DD4C4C:: @ 8DD4C4C
|
gUnknown_08DD4C4C:: @ 8DD4C4C
|
||||||
.incbin "baserom.gba", 0xdd4c4c, 0xac
|
.incbin "baserom.gba", 0xdd4c4c, 0xac
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_08DD4CF8:: @ 8DD4CF8
|
gUnknown_08DD4CF8:: @ 8DD4CF8
|
||||||
.incbin "graphics/interface/unk_change_case.4bpp.lz"
|
.incbin "graphics/interface/unk_change_case.4bpp.lz"
|
||||||
|
@ -994,7 +994,61 @@ gUnknown_08DD7300:: @ 8DD7300
|
||||||
.incbin "baserom.gba", 0xdd7300, 0x60
|
.incbin "baserom.gba", 0xdd7300, 0x60
|
||||||
|
|
||||||
gUnknown_08DD7360:: @ 8DD7360
|
gUnknown_08DD7360:: @ 8DD7360
|
||||||
.incbin "baserom.gba", 0xdd7360, 0x4084
|
.incbin "baserom.gba", 0xdd7360, 0x1420
|
||||||
|
|
||||||
|
gUnknown_08DD8780:: @ 8DD8780
|
||||||
|
.incbin "baserom.gba", 0xdd8780, 0x40
|
||||||
|
|
||||||
|
gUnknown_08DD87C0:: @ 8DD87C0
|
||||||
|
.incbin "baserom.gba", 0xdd87c0, 0x720
|
||||||
|
|
||||||
|
gUnknown_08DD8EE0:: @ 8DD8EE0
|
||||||
|
.incbin "baserom.gba", 0xdd8ee0, 0x1a0
|
||||||
|
|
||||||
|
gUnknown_08DD9080:: @ 8DD9080
|
||||||
|
.incbin "baserom.gba", 0xdd9080, 0x60
|
||||||
|
|
||||||
|
gUnknown_08DD90E0:: @ 8DD90E0
|
||||||
|
.incbin "baserom.gba", 0xdd90e0, 0x638
|
||||||
|
|
||||||
|
gUnknown_08DD9718:: @ 8DD9718
|
||||||
|
.incbin "baserom.gba", 0xdd9718, 0x15c
|
||||||
|
|
||||||
|
gUnknown_08DD9874:: @ 8DD9874
|
||||||
|
.incbin "baserom.gba", 0xdd9874, 0x40
|
||||||
|
|
||||||
|
gUnknown_08DD98B4:: @ 8DD98B4
|
||||||
|
.incbin "baserom.gba", 0xdd98b4, 0x5a4
|
||||||
|
|
||||||
|
gUnknown_08DD9E58:: @ 8DD9E58
|
||||||
|
.incbin "baserom.gba", 0xdd9e58, 0x194
|
||||||
|
|
||||||
|
gUnknown_08DD9FEC:: @ 8DD9FEC
|
||||||
|
.incbin "baserom.gba", 0xdd9fec, 0x40
|
||||||
|
|
||||||
|
gUnknown_08DDA02C:: @ 8DDA02C
|
||||||
|
.incbin "baserom.gba", 0xdda02c, 0x610
|
||||||
|
|
||||||
|
gUnknown_08DDA63C:: @ 8DDA63C
|
||||||
|
.incbin "baserom.gba", 0xdda63c, 0x1c4
|
||||||
|
|
||||||
|
gUnknown_08DDA800:: @ 8DDA800
|
||||||
|
.incbin "baserom.gba", 0xdda800, 0x40
|
||||||
|
|
||||||
|
gUnknown_08DDA840:: @ 8DDA840
|
||||||
|
.incbin "baserom.gba", 0xdda840, 0x600
|
||||||
|
|
||||||
|
gUnknown_08DDAE40:: @ 8DDAE40
|
||||||
|
.incbin "baserom.gba", 0xddae40, 0x1a0
|
||||||
|
|
||||||
|
gUnknown_08DDAFE0:: @ 8DDAFE0
|
||||||
|
.incbin "baserom.gba", 0xddafe0, 0x40
|
||||||
|
|
||||||
|
gUnknown_08DDB020:: @ 8DDB020
|
||||||
|
.incbin "baserom.gba", 0xddb020, 0x2a4
|
||||||
|
|
||||||
|
gUnknown_08DDB2C4:: @ 8DDB2C4
|
||||||
|
.incbin "baserom.gba", 0xddb2c4, 0x120
|
||||||
|
|
||||||
gUnknown_08DDB3E4:: @ 8DDB3E4
|
gUnknown_08DDB3E4:: @ 8DDB3E4
|
||||||
.incbin "baserom.gba", 0xddb3e4, 0x80
|
.incbin "baserom.gba", 0xddb3e4, 0x80
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
gNullMoveDescription:: @ 86181C0
|
||||||
|
.string "$"
|
||||||
|
|
||||||
gPoundMoveDescription:: @ 86181C1
|
gPoundMoveDescription:: @ 86181C1
|
||||||
.string "Pounds the foe with\nforelegs or tail.$"
|
.string "Pounds the foe with\nforelegs or tail.$"
|
||||||
|
|
||||||
|
|
23
include/bg.h
Normal file
23
include/bg.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef GUARD_bg_H
|
||||||
|
#define GUARD_bg_H
|
||||||
|
|
||||||
|
struct BgTemplate {
|
||||||
|
u32 bg:2;
|
||||||
|
u32 charBaseIndex:2;
|
||||||
|
u32 mapBaseIndex:5;
|
||||||
|
u32 screenSize:2;
|
||||||
|
u32 paletteMode:1;
|
||||||
|
u32 priority:2;
|
||||||
|
u32 baseTile:10;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ResetBgsAndClearDma3BusyFlags(u32);
|
||||||
|
void InitBgsFromTemplates(u8, const struct BgTemplate *, u8);
|
||||||
|
u32 ChangeBgX(u8, u32, u8);
|
||||||
|
u32 ChangeBgY(u8, u32, u8);
|
||||||
|
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
|
||||||
|
void ShowBg(u8);
|
||||||
|
void HideBg(u8);
|
||||||
|
void CopyBgTilemapBufferToVram(u8);
|
||||||
|
|
||||||
|
#endif //GUARD_bg_H
|
|
@ -8,19 +8,19 @@
|
||||||
|
|
||||||
struct MultiBootParam
|
struct MultiBootParam
|
||||||
{
|
{
|
||||||
u32 system_work[5];
|
u32 system_work[5]; // 00
|
||||||
u8 handshake_data;
|
u8 handshake_data; // 14
|
||||||
u8 padding;
|
u8 padding; // 15
|
||||||
u16 handshake_timeout;
|
u16 handshake_timeout; // 16
|
||||||
u8 probe_count;
|
u8 probe_count; // 18
|
||||||
u8 client_data[MULTIBOOT_NCHILD];
|
u8 client_data[MULTIBOOT_NCHILD]; // 19
|
||||||
u8 palette_data;
|
u8 palette_data; // 1c
|
||||||
u8 response_bit;
|
u8 response_bit; // 1d
|
||||||
u8 client_bit;
|
u8 client_bit; // 1e
|
||||||
u8 reserved1;
|
u8 reserved1; // 1f
|
||||||
u8 *boot_srcp;
|
const u8 *boot_srcp; // 20
|
||||||
u8 *boot_endp;
|
const u8 *boot_endp; // 24
|
||||||
u8 *masterp;
|
const u8 *masterp;
|
||||||
u8 *reserved2[MULTIBOOT_NCHILD];
|
u8 *reserved2[MULTIBOOT_NCHILD];
|
||||||
u32 system_work2[4];
|
u32 system_work2[4];
|
||||||
u8 sendflag;
|
u8 sendflag;
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
//
|
|
||||||
// Created by scott on 9/15/2017.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef GUARD_GPU_REGS_H
|
#ifndef GUARD_GPU_REGS_H
|
||||||
#define GUARD_GPU_REGS_H
|
#define GUARD_GPU_REGS_H
|
||||||
|
@ -10,6 +7,9 @@
|
||||||
// Exported RAM declarations
|
// Exported RAM declarations
|
||||||
|
|
||||||
// Exported ROM declarations
|
// Exported ROM declarations
|
||||||
|
void DisableInterrupts(u16);
|
||||||
|
void EnableInterrupts(u16);
|
||||||
|
void SetGpuReg(u8, u16);
|
||||||
void ClearGpuRegBits(u8 regOffset, u16 mask);
|
void ClearGpuRegBits(u8 regOffset, u16 mask);
|
||||||
|
|
||||||
#endif //GUARD_GPU_REGS_H
|
#endif //GUARD_GPU_REGS_H
|
||||||
|
|
|
@ -15,4 +15,6 @@ struct MenuAction2
|
||||||
void (*func)(u8);
|
void (*func)(u8);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void box_print(u8, u8, u8, u8, const void *, s8, const u8 *);
|
||||||
|
|
||||||
#endif // GUARD_MENU_H
|
#endif // GUARD_MENU_H
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
void MultiBootInit(struct MultiBootParam *mp);
|
void MultiBootInit(struct MultiBootParam *mp);
|
||||||
int MultiBootMain(struct MultiBootParam *mp);
|
int MultiBootMain(struct MultiBootParam *mp);
|
||||||
void MultiBootStartProbe(struct MultiBootParam *mp);
|
void MultiBootStartProbe(struct MultiBootParam *mp);
|
||||||
void MultiBootStartMaster(struct MultiBootParam *mp, u8 *srcp, int length, u8 palette_color, s8 palette_speed);
|
void MultiBootStartMaster(struct MultiBootParam *mp, const u8 *srcp, int length, u8 palette_color, s8 palette_speed);
|
||||||
int MultiBootCheckComplete(struct MultiBootParam *mp);
|
int MultiBootCheckComplete(struct MultiBootParam *mp);
|
||||||
|
|
||||||
#endif // GUARD_MULTIBOOT_H
|
#endif // GUARD_MULTIBOOT_H
|
||||||
|
|
|
@ -186,9 +186,9 @@ bool8 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter);
|
||||||
bool8 TextPrinterWait(struct TextPrinter *textPrinter);
|
bool8 TextPrinterWait(struct TextPrinter *textPrinter);
|
||||||
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex);
|
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex);
|
||||||
u16 RenderText(struct TextPrinter *textPrinter);
|
u16 RenderText(struct TextPrinter *textPrinter);
|
||||||
u32 GetStringWidthFixedWidthFont(u8 *str, u8 fontId, u8 letterSpacing);
|
u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
|
||||||
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
|
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
|
||||||
s32 GetStringWidth(u8 fontId, u8 *str, s16 letterSpacing);
|
u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
|
||||||
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
|
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
|
||||||
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
|
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
|
||||||
u8 GetKeypadIconTileOffset(u8 keypadIconId);
|
u8 GetKeypadIconTileOffset(u8 keypadIconId);
|
||||||
|
|
11
include/unknown_task.h
Normal file
11
include/unknown_task.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef GUARD_unknown_task_H
|
||||||
|
#define GUARD_unknown_task_H
|
||||||
|
|
||||||
|
// Exported type declarations
|
||||||
|
|
||||||
|
// Exported RAM declarations
|
||||||
|
|
||||||
|
// Exported ROM declarations
|
||||||
|
void remove_some_task(void);
|
||||||
|
|
||||||
|
#endif //GUARD_unknown_task_H
|
|
@ -30,7 +30,7 @@ struct Window
|
||||||
u8 *tileData;
|
u8 *tileData;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool16 InitWindows(struct WindowTemplate *templates);
|
bool16 InitWindows(const struct WindowTemplate *templates);
|
||||||
u16 AddWindow(const struct WindowTemplate *template);
|
u16 AddWindow(const struct WindowTemplate *template);
|
||||||
int AddWindowWithoutTileMap(struct WindowTemplate *template);
|
int AddWindowWithoutTileMap(struct WindowTemplate *template);
|
||||||
void RemoveWindow(u8 windowId);
|
void RemoveWindow(u8 windowId);
|
||||||
|
|
|
@ -259,7 +259,7 @@ SECTIONS {
|
||||||
asm/battle_controller_player_partner.o(.text);
|
asm/battle_controller_player_partner.o(.text);
|
||||||
asm/fldeff_groundshake.o(.text);
|
asm/fldeff_groundshake.o(.text);
|
||||||
asm/fossil_specials.o(.text);
|
asm/fossil_specials.o(.text);
|
||||||
asm/berry_fix_program.o(.text);
|
src/berry_fix_program.o(.text);
|
||||||
asm/pokemon_summary_screen.o(.text);
|
asm/pokemon_summary_screen.o(.text);
|
||||||
asm/pokenav.o(.text);
|
asm/pokenav.o(.text);
|
||||||
asm/rayquaza_scene.o(.text);
|
asm/rayquaza_scene.o(.text);
|
||||||
|
@ -382,6 +382,8 @@ SECTIONS {
|
||||||
src/lilycove_lady.o(.rodata);
|
src/lilycove_lady.o(.rodata);
|
||||||
data/data_emerald.o(.rodata);
|
data/data_emerald.o(.rodata);
|
||||||
data/battle_controller_player_partner.o(.rodata);
|
data/battle_controller_player_partner.o(.rodata);
|
||||||
|
data/data_emerald2pre1.o(.rodata);
|
||||||
|
src/berry_fix_program.o(.rodata);
|
||||||
data/data_emerald2.o(.rodata);
|
data/data_emerald2.o(.rodata);
|
||||||
data/fonts.o(.rodata);
|
data/fonts.o(.rodata);
|
||||||
data/mystery_event_msg.o(.rodata);
|
data/mystery_event_msg.o(.rodata);
|
||||||
|
|
531
src/berry_fix_program.c
Normal file
531
src/berry_fix_program.c
Normal file
|
@ -0,0 +1,531 @@
|
||||||
|
|
||||||
|
// Includes
|
||||||
|
#include "global.h"
|
||||||
|
#include "gpu_regs.h"
|
||||||
|
#include "multiboot.h"
|
||||||
|
#include "malloc.h"
|
||||||
|
#include "bg.h"
|
||||||
|
#include "main.h"
|
||||||
|
#include "sprite.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "unknown_task.h"
|
||||||
|
#include "window.h"
|
||||||
|
#include "menu.h"
|
||||||
|
#include "m4a.h"
|
||||||
|
|
||||||
|
// Static type declarations
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
u8 state;
|
||||||
|
u8 unk1;
|
||||||
|
u16 unk2;
|
||||||
|
struct MultiBootParam mb;
|
||||||
|
} berryfix_t;
|
||||||
|
|
||||||
|
// Static RAM declarations
|
||||||
|
|
||||||
|
static berryfix_t *berry_fix_mb_manager;
|
||||||
|
|
||||||
|
// Static ROM declarations
|
||||||
|
|
||||||
|
static void berry_fix_main(void);
|
||||||
|
static void berry_fix_gpu_set(void);
|
||||||
|
static int berry_fix_text_update(int);
|
||||||
|
static void berry_fix_text_print(int);
|
||||||
|
static void berry_fix_bg_hide(void);
|
||||||
|
|
||||||
|
// .rodata
|
||||||
|
|
||||||
|
static const u8 gUnknown_08617E78[] = _("Berry Program Update");
|
||||||
|
static const u8 gUnknown_08617E8D[] = _("Ruby/Sapphire");
|
||||||
|
static const u8 gUnknown_08617E9B[] = _("Emerald");
|
||||||
|
|
||||||
|
static const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button.");
|
||||||
|
static const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again.");
|
||||||
|
static const u8 Unknown_08617F97[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears.");
|
||||||
|
static const u8 Unknown_08618020[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable.");
|
||||||
|
static const u8 Unknown_08618092[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen.");
|
||||||
|
static const u8 Unknown_086180D7[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again.");
|
||||||
|
|
||||||
|
static const struct BgTemplate gUnknown_08618108[] = {
|
||||||
|
{
|
||||||
|
0, 0, 30, 0, 0, 0
|
||||||
|
}, {
|
||||||
|
1, 1, 31, 0, 0, 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct WindowTemplate gUnknown_08618110[] = {
|
||||||
|
{0, 2, 4, 26, 2, 15, 0x001},
|
||||||
|
{0, 1, 11, 28, 8, 15, 0x035},
|
||||||
|
{0, 0, 8, 30, 2, 15, 0x115},
|
||||||
|
{0, 8, 0, 14, 2, 15, 0x151},
|
||||||
|
{-1}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 gUnknown_08618138[] = {
|
||||||
|
0x7fff, 0x7fff, 0x318c, 0x675a,
|
||||||
|
0x043c, 0x3aff, 0x0664, 0x4bd2,
|
||||||
|
0x6546, 0x7b14, 0x7fff, 0x318c,
|
||||||
|
0x675a, 0x0000, 0x0000, 0x0000
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u8 gUnknown_08618158[] = {10, 11, 12};
|
||||||
|
static const u8 gUnknown_0861815B[] = { 0, 10, 13};
|
||||||
|
|
||||||
|
static const u8 *const gUnknown_08618160[] = {
|
||||||
|
Unknown_08617F07,
|
||||||
|
Unknown_08617F97,
|
||||||
|
Unknown_08618020,
|
||||||
|
Unknown_08618092,
|
||||||
|
Unknown_086180D7,
|
||||||
|
Unknown_08617EA3
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const u8 gUnknown_08DD87C0[];
|
||||||
|
extern const u8 gUnknown_08DD8EE0[];
|
||||||
|
extern const u8 gUnknown_08DD8780[];
|
||||||
|
extern const u8 gUnknown_08DD90E0[];
|
||||||
|
extern const u8 gUnknown_08DD9718[];
|
||||||
|
extern const u8 gUnknown_08DD9080[];
|
||||||
|
extern const u8 gUnknown_08DD98B4[];
|
||||||
|
extern const u8 gUnknown_08DD9E58[];
|
||||||
|
extern const u8 gUnknown_08DD9874[];
|
||||||
|
extern const u8 gUnknown_08DDA02C[];
|
||||||
|
extern const u8 gUnknown_08DDA63C[];
|
||||||
|
extern const u8 gUnknown_08DD9FEC[];
|
||||||
|
extern const u8 gUnknown_08DDA840[];
|
||||||
|
extern const u8 gUnknown_08DDAE40[];
|
||||||
|
extern const u8 gUnknown_08DDA800[];
|
||||||
|
extern const u8 gUnknown_08DDB020[];
|
||||||
|
extern const u8 gUnknown_08DDB2C4[];
|
||||||
|
extern const u8 gUnknown_08DDAFE0[];
|
||||||
|
|
||||||
|
static const u8 *const gUnknown_08618178[][3] = {
|
||||||
|
{
|
||||||
|
gUnknown_08DD87C0,
|
||||||
|
gUnknown_08DD8EE0,
|
||||||
|
gUnknown_08DD8780
|
||||||
|
}, {
|
||||||
|
gUnknown_08DD90E0,
|
||||||
|
gUnknown_08DD9718,
|
||||||
|
gUnknown_08DD9080
|
||||||
|
}, {
|
||||||
|
gUnknown_08DD98B4,
|
||||||
|
gUnknown_08DD9E58,
|
||||||
|
gUnknown_08DD9874
|
||||||
|
}, {
|
||||||
|
gUnknown_08DDA02C,
|
||||||
|
gUnknown_08DDA63C,
|
||||||
|
gUnknown_08DD9FEC
|
||||||
|
}, {
|
||||||
|
gUnknown_08DDA840,
|
||||||
|
gUnknown_08DDAE40,
|
||||||
|
gUnknown_08DDA800
|
||||||
|
}, {
|
||||||
|
gUnknown_08DDB020,
|
||||||
|
gUnknown_08DDB2C4,
|
||||||
|
gUnknown_08DDAFE0
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
extern const u8 gUnknown_089A6550[0xC0];
|
||||||
|
extern const u8 gMultiBootProgram_BerryGlitchFix_Start[0x3b34];
|
||||||
|
extern const u8 gMultiBootProgram_BerryGlitchFix_End[];
|
||||||
|
|
||||||
|
// .text
|
||||||
|
|
||||||
|
void InitBerryFixProgram(void)
|
||||||
|
{
|
||||||
|
DisableInterrupts(0xFFFF);
|
||||||
|
EnableInterrupts(0x0001);
|
||||||
|
m4aSoundVSyncOff();
|
||||||
|
SetVBlankCallback(NULL);
|
||||||
|
ResetSpriteData();
|
||||||
|
ResetTasks();
|
||||||
|
remove_some_task();
|
||||||
|
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
|
||||||
|
berry_fix_mb_manager = AllocZeroed(0x50);
|
||||||
|
berry_fix_mb_manager->state = 0;
|
||||||
|
berry_fix_mb_manager->unk1 = 6;
|
||||||
|
SetMainCallback2(berry_fix_main);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void berry_fix_main(void)
|
||||||
|
{
|
||||||
|
switch (berry_fix_mb_manager->state)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
berry_fix_gpu_set();
|
||||||
|
berry_fix_mb_manager->state = 1;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (berry_fix_text_update(5) == 5 && (gMain.newKeys & A_BUTTON))
|
||||||
|
{
|
||||||
|
berry_fix_mb_manager->state = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (berry_fix_text_update(0) == 0 && (gMain.newKeys & A_BUTTON))
|
||||||
|
{
|
||||||
|
berry_fix_mb_manager->state = 3;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (berry_fix_text_update(1) == 1)
|
||||||
|
{
|
||||||
|
berry_fix_mb_manager->mb.masterp = gUnknown_089A6550;
|
||||||
|
berry_fix_mb_manager->mb.server_type = 0;
|
||||||
|
MultiBootInit(&berry_fix_mb_manager->mb);
|
||||||
|
berry_fix_mb_manager->unk2 = 0;
|
||||||
|
berry_fix_mb_manager->state = 4;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
MultiBootMain(&berry_fix_mb_manager->mb);
|
||||||
|
if (berry_fix_mb_manager->mb.probe_count != 0 || (!(berry_fix_mb_manager->mb.response_bit & 2) || !(berry_fix_mb_manager->mb.client_bit & 2)))
|
||||||
|
{
|
||||||
|
berry_fix_mb_manager->unk2 = 0;
|
||||||
|
}
|
||||||
|
else if (++ berry_fix_mb_manager->unk2 > 180)
|
||||||
|
{
|
||||||
|
MultiBootStartMaster(&berry_fix_mb_manager->mb, gMultiBootProgram_BerryGlitchFix_Start, (u32)(gMultiBootProgram_BerryGlitchFix_End - gMultiBootProgram_BerryGlitchFix_Start), 4, 1);
|
||||||
|
berry_fix_mb_manager->state = 5;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if (berry_fix_text_update(2) == 2) {
|
||||||
|
MultiBootMain(&berry_fix_mb_manager->mb);
|
||||||
|
if (MultiBootCheckComplete(&berry_fix_mb_manager->mb)) {
|
||||||
|
berry_fix_mb_manager->state = 6;
|
||||||
|
}
|
||||||
|
else if (!(berry_fix_mb_manager->mb.client_bit & 2)) {
|
||||||
|
berry_fix_mb_manager->state = 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (berry_fix_text_update(3) == 3 && gMain.newKeys & A_BUTTON)
|
||||||
|
{
|
||||||
|
DoSoftReset();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if (berry_fix_text_update(4) == 4 && gMain.newKeys & A_BUTTON)
|
||||||
|
{
|
||||||
|
berry_fix_mb_manager->state = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NONMATCHING
|
||||||
|
static void berry_fix_gpu_set(void)
|
||||||
|
{
|
||||||
|
s32 width;
|
||||||
|
|
||||||
|
SetGpuReg(REG_OFFSET_BG0CNT, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BG1CNT, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
|
||||||
|
|
||||||
|
DmaFill32(3, 0, VRAM, VRAM_SIZE);
|
||||||
|
DmaFill32(3, 0, OAM, OAM_SIZE);
|
||||||
|
DmaFill32(3, 0, PLTT, PLTT_SIZE);
|
||||||
|
ResetBgsAndClearDma3BusyFlags(0);
|
||||||
|
|
||||||
|
InitBgsFromTemplates(0, gUnknown_08618108, ARRAY_COUNT(gUnknown_08618108));
|
||||||
|
ChangeBgX(0, 0, 0);
|
||||||
|
ChangeBgY(0, 0, 0);
|
||||||
|
ChangeBgX(1, 0, 0);
|
||||||
|
ChangeBgY(1, 0, 0);
|
||||||
|
InitWindows(gUnknown_08618110);
|
||||||
|
DeactivateAllTextPrinters();
|
||||||
|
|
||||||
|
DmaCopy32(3, gUnknown_08618138, BG_PLTT + 0x1E0, 0x20);
|
||||||
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
|
||||||
|
FillWindowPixelBuffer(2, 0);
|
||||||
|
FillWindowPixelBuffer(3, 0);
|
||||||
|
FillWindowPixelBuffer(0, 0xAA);
|
||||||
|
|
||||||
|
// This block is a meme among memes
|
||||||
|
width = (0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2;
|
||||||
|
box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E9B);
|
||||||
|
width = (s32)(0x78 - GetStringWidth(0, gUnknown_08617E9B, 0)) / 2 + 0x78;
|
||||||
|
box_print(2, 0, width, 3, gUnknown_0861815B, -1, gUnknown_08617E8D);
|
||||||
|
width = (0x70 - GetStringWidth(0, gUnknown_08617E8D, 0)) / 2;
|
||||||
|
box_print(3, 0, width, 0, gUnknown_0861815B, -1, gUnknown_08617E8D);
|
||||||
|
width = (0xd0 - GetStringWidth(1, gUnknown_08617E78, 0)) / 2;
|
||||||
|
box_print(0, 1, width, 2, gUnknown_08618158, -1, gUnknown_08617E78);
|
||||||
|
|
||||||
|
CopyWindowToVram(2, 2);
|
||||||
|
CopyWindowToVram(3, 2);
|
||||||
|
CopyWindowToVram(0, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
__attribute__((naked)) static void berry_fix_gpu_set(void)
|
||||||
|
{
|
||||||
|
asm(".syntax unified\n"
|
||||||
|
"\tpush {r4-r6,lr}\n"
|
||||||
|
"\tmov r6, r8\n"
|
||||||
|
"\tpush {r6}\n"
|
||||||
|
"\tsub sp, 0x10\n"
|
||||||
|
"\tmovs r0, 0x8\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0xA\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x10\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x12\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x14\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x16\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x50\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tstr r1, [sp, 0xC]\n"
|
||||||
|
"\tldr r4, =0x040000d4\n"
|
||||||
|
"\tadd r0, sp, 0xC\n"
|
||||||
|
"\tstr r0, [r4]\n"
|
||||||
|
"\tmovs r0, 0xC0\n"
|
||||||
|
"\tlsls r0, 19\n"
|
||||||
|
"\tstr r0, [r4, 0x4]\n"
|
||||||
|
"\tldr r0, =0x85006000\n"
|
||||||
|
"\tstr r0, [r4, 0x8]\n"
|
||||||
|
"\tldr r0, [r4, 0x8]\n"
|
||||||
|
"\tstr r1, [sp, 0xC]\n"
|
||||||
|
"\tadd r0, sp, 0xC\n"
|
||||||
|
"\tstr r0, [r4]\n"
|
||||||
|
"\tmovs r0, 0xE0\n"
|
||||||
|
"\tlsls r0, 19\n"
|
||||||
|
"\tstr r0, [r4, 0x4]\n"
|
||||||
|
"\tldr r2, =0x85000100\n"
|
||||||
|
"\tstr r2, [r4, 0x8]\n"
|
||||||
|
"\tldr r0, [r4, 0x8]\n"
|
||||||
|
"\tstr r1, [sp, 0xC]\n"
|
||||||
|
"\tadd r0, sp, 0xC\n"
|
||||||
|
"\tstr r0, [r4]\n"
|
||||||
|
"\tmovs r0, 0xA0\n"
|
||||||
|
"\tlsls r0, 19\n"
|
||||||
|
"\tstr r0, [r4, 0x4]\n"
|
||||||
|
"\tstr r2, [r4, 0x8]\n"
|
||||||
|
"\tldr r0, [r4, 0x8]\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tbl ResetBgsAndClearDma3BusyFlags\n"
|
||||||
|
"\tldr r1, =gUnknown_08618108\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r2, 0x2\n"
|
||||||
|
"\tbl InitBgsFromTemplates\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl ChangeBgX\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl ChangeBgY\n"
|
||||||
|
"\tmovs r0, 0x1\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl ChangeBgX\n"
|
||||||
|
"\tmovs r0, 0x1\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl ChangeBgY\n"
|
||||||
|
"\tldr r0, =gUnknown_08618110\n"
|
||||||
|
"\tbl InitWindows\n"
|
||||||
|
"\tbl DeactivateAllTextPrinters\n"
|
||||||
|
"\tldr r0, =gUnknown_08618138\n"
|
||||||
|
"\tstr r0, [r4]\n"
|
||||||
|
"\tldr r0, =0x050001e0\n"
|
||||||
|
"\tstr r0, [r4, 0x4]\n"
|
||||||
|
"\tldr r0, =0x84000008\n"
|
||||||
|
"\tstr r0, [r4, 0x8]\n"
|
||||||
|
"\tldr r0, [r4, 0x8]\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0x40\n"
|
||||||
|
"\tbl SetGpuReg\n"
|
||||||
|
"\tmovs r0, 0x2\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl FillWindowPixelBuffer\n"
|
||||||
|
"\tmovs r0, 0x3\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tbl FillWindowPixelBuffer\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0xAA\n"
|
||||||
|
"\tbl FillWindowPixelBuffer\n"
|
||||||
|
"\tldr r5, =gUnknown_08617E9B\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tadds r1, r5, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl GetStringWidth\n"
|
||||||
|
"\tadds r1, r0, 0\n"
|
||||||
|
"\tmovs r4, 0x78\n"
|
||||||
|
"\tsubs r0, r4, r1\n"
|
||||||
|
"\tlsrs r1, r0, 31\n"
|
||||||
|
"\tadds r0, r1\n"
|
||||||
|
"\tasrs r0, 1\n"
|
||||||
|
"\tlsls r2, r0, 24\n"
|
||||||
|
"\tlsrs r2, 24\n"
|
||||||
|
"\tldr r6, =gUnknown_0861815B\n"
|
||||||
|
"\tstr r6, [sp]\n"
|
||||||
|
"\tmovs r0, 0x1\n"
|
||||||
|
"\tnegs r0, r0\n"
|
||||||
|
"\tmov r8, r0\n"
|
||||||
|
"\tstr r0, [sp, 0x4]\n"
|
||||||
|
"\tstr r5, [sp, 0x8]\n"
|
||||||
|
"\tmovs r0, 0x2\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r3, 0x3\n"
|
||||||
|
"\tbl box_print\n"
|
||||||
|
"\tldr r5, =gUnknown_08617E8D\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tadds r1, r5, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl GetStringWidth\n"
|
||||||
|
"\tadds r1, r0, 0\n"
|
||||||
|
"\tsubs r4, r1\n"
|
||||||
|
"\tlsrs r0, r4, 31\n"
|
||||||
|
"\tadds r4, r0\n"
|
||||||
|
"\tasrs r4, 1\n"
|
||||||
|
"\tadds r0, r4, 0\n"
|
||||||
|
"\tadds r0, 0x78\n"
|
||||||
|
"\tlsls r2, r0, 24\n"
|
||||||
|
"\tlsrs r2, 24\n"
|
||||||
|
"\tstr r6, [sp]\n"
|
||||||
|
"\tmov r0, r8\n"
|
||||||
|
"\tstr r0, [sp, 0x4]\n"
|
||||||
|
"\tstr r5, [sp, 0x8]\n"
|
||||||
|
"\tmovs r0, 0x2\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r3, 0x3\n"
|
||||||
|
"\tbl box_print\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tadds r1, r5, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl GetStringWidth\n"
|
||||||
|
"\tadds r1, r0, 0\n"
|
||||||
|
"\tmovs r0, 0x70\n"
|
||||||
|
"\tsubs r0, r1\n"
|
||||||
|
"\tlsrs r1, r0, 31\n"
|
||||||
|
"\tadds r0, r1\n"
|
||||||
|
"\tasrs r0, 1\n"
|
||||||
|
"\tlsls r2, r0, 24\n"
|
||||||
|
"\tlsrs r2, 24\n"
|
||||||
|
"\tstr r6, [sp]\n"
|
||||||
|
"\tmov r0, r8\n"
|
||||||
|
"\tstr r0, [sp, 0x4]\n"
|
||||||
|
"\tstr r5, [sp, 0x8]\n"
|
||||||
|
"\tmovs r0, 0x3\n"
|
||||||
|
"\tmovs r1, 0\n"
|
||||||
|
"\tmovs r3, 0\n"
|
||||||
|
"\tbl box_print\n"
|
||||||
|
"\tldr r4, =gUnknown_08617E78\n"
|
||||||
|
"\tmovs r0, 0x1\n"
|
||||||
|
"\tadds r1, r4, 0\n"
|
||||||
|
"\tmovs r2, 0\n"
|
||||||
|
"\tbl GetStringWidth\n"
|
||||||
|
"\tadds r1, r0, 0\n"
|
||||||
|
"\tmovs r0, 0xD0\n"
|
||||||
|
"\tsubs r0, r1\n"
|
||||||
|
"\tlsrs r1, r0, 31\n"
|
||||||
|
"\tadds r0, r1\n"
|
||||||
|
"\tasrs r0, 1\n"
|
||||||
|
"\tlsls r2, r0, 24\n"
|
||||||
|
"\tlsrs r2, 24\n"
|
||||||
|
"\tldr r0, =gUnknown_08618158\n"
|
||||||
|
"\tstr r0, [sp]\n"
|
||||||
|
"\tmov r0, r8\n"
|
||||||
|
"\tstr r0, [sp, 0x4]\n"
|
||||||
|
"\tstr r4, [sp, 0x8]\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0x1\n"
|
||||||
|
"\tmovs r3, 0x2\n"
|
||||||
|
"\tbl box_print\n"
|
||||||
|
"\tmovs r0, 0x2\n"
|
||||||
|
"\tmovs r1, 0x2\n"
|
||||||
|
"\tbl CopyWindowToVram\n"
|
||||||
|
"\tmovs r0, 0x3\n"
|
||||||
|
"\tmovs r1, 0x2\n"
|
||||||
|
"\tbl CopyWindowToVram\n"
|
||||||
|
"\tmovs r0, 0\n"
|
||||||
|
"\tmovs r1, 0x2\n"
|
||||||
|
"\tbl CopyWindowToVram\n"
|
||||||
|
"\tadd sp, 0x10\n"
|
||||||
|
"\tpop {r3}\n"
|
||||||
|
"\tmov r8, r3\n"
|
||||||
|
"\tpop {r4-r6}\n"
|
||||||
|
"\tpop {r0}\n"
|
||||||
|
"\tbx r0\n"
|
||||||
|
"\t.pool\n"
|
||||||
|
".syntax divided");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int berry_fix_text_update(int checkval)
|
||||||
|
{
|
||||||
|
if (berry_fix_mb_manager->unk1 == checkval)
|
||||||
|
{
|
||||||
|
return checkval;
|
||||||
|
}
|
||||||
|
if (berry_fix_mb_manager->unk1 == 6)
|
||||||
|
{
|
||||||
|
berry_fix_text_print(checkval);
|
||||||
|
berry_fix_mb_manager->unk1 = checkval;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
berry_fix_bg_hide();
|
||||||
|
berry_fix_mb_manager->unk1 = 6;
|
||||||
|
}
|
||||||
|
return berry_fix_mb_manager->unk1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void berry_fix_text_print(int scene)
|
||||||
|
{
|
||||||
|
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
|
||||||
|
FillWindowPixelBuffer(1, 0xAA);
|
||||||
|
box_print(1, 1, 0, 0, gUnknown_08618158, -1, gUnknown_08618160[scene]);
|
||||||
|
PutWindowTilemap(1);
|
||||||
|
CopyWindowToVram(1, 2);
|
||||||
|
switch (scene)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
PutWindowTilemap(2);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
PutWindowTilemap(3);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
PutWindowTilemap(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CopyBgTilemapBufferToVram(0);
|
||||||
|
LZ77UnCompVram(gUnknown_08618178[scene][0], (void *)BG_CHAR_ADDR(1));
|
||||||
|
LZ77UnCompVram(gUnknown_08618178[scene][1], (void *)BG_SCREEN_ADDR(31));
|
||||||
|
CpuCopy32(gUnknown_08618178[scene][2], (void *)BG_PLTT, 0x100);
|
||||||
|
ShowBg(0);
|
||||||
|
ShowBg(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void berry_fix_bg_hide()
|
||||||
|
{
|
||||||
|
HideBg(0);
|
||||||
|
HideBg(1);
|
||||||
|
}
|
189
src/bg.c
189
src/bg.c
|
@ -1,5 +1,6 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "dma3.h"
|
#include "dma3.h"
|
||||||
|
#include "bg.h"
|
||||||
|
|
||||||
#define DISPCNT_ALL_BG_AND_MODE_BITS 0x0F07
|
#define DISPCNT_ALL_BG_AND_MODE_BITS 0x0F07
|
||||||
|
|
||||||
|
@ -22,33 +23,23 @@ struct BgControl {
|
||||||
u16 priority:2;
|
u16 priority:2;
|
||||||
u16 mosaic:1;
|
u16 mosaic:1;
|
||||||
u16 wraparound:1;
|
u16 wraparound:1;
|
||||||
|
|
||||||
u16 charBaseIndex:2;
|
u16 charBaseIndex:2;
|
||||||
u16 mapBaseIndex:5;
|
u16 mapBaseIndex:5;
|
||||||
u16 paletteMode:1;
|
u16 paletteMode:1;
|
||||||
|
|
||||||
u8 unknown_2;
|
u8 unknown_2;
|
||||||
u8 unknown_3;
|
u8 unknown_3;
|
||||||
} configs[4];
|
} configs[4];
|
||||||
|
|
||||||
u16 bgVisibilityAndMode;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BgTemplate {
|
u16 bgVisibilityAndMode;
|
||||||
u32 bg:2;
|
|
||||||
u32 charBaseIndex:2;
|
|
||||||
u32 mapBaseIndex:5;
|
|
||||||
u32 screenSize:2;
|
|
||||||
u32 paletteMode:1;
|
|
||||||
u32 priority:2;
|
|
||||||
u32 baseTile:10;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BgConfig2 {
|
struct BgConfig2 {
|
||||||
u32 baseTile:10;
|
u32 baseTile:10;
|
||||||
u32 basePalette:4;
|
u32 basePalette:4;
|
||||||
u32 unk_3:18;
|
u32 unk_3:18;
|
||||||
|
|
||||||
void* tilemap;
|
void* tilemap;
|
||||||
u32 bg_x;
|
u32 bg_x;
|
||||||
u32 bg_y;
|
u32 bg_y;
|
||||||
|
@ -103,7 +94,7 @@ void ResetBgControlStructs(void)
|
||||||
struct BgConfig* bgConfigs = &gGpuBgConfigs.configs[0];
|
struct BgConfig* bgConfigs = &gGpuBgConfigs.configs[0];
|
||||||
struct BgConfig zeroedConfig = gZeroedBgControlStruct;
|
struct BgConfig zeroedConfig = gZeroedBgControlStruct;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
bgConfigs[i] = zeroedConfig;
|
bgConfigs[i] = zeroedConfig;
|
||||||
|
@ -126,40 +117,40 @@ void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenS
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].charBaseIndex = charBaseIndex & 0x3;
|
gGpuBgConfigs.configs[bg].charBaseIndex = charBaseIndex & 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapBaseIndex != 0xFF)
|
if (mapBaseIndex != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].mapBaseIndex = mapBaseIndex & 0x1F;
|
gGpuBgConfigs.configs[bg].mapBaseIndex = mapBaseIndex & 0x1F;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (screenSize != 0xFF)
|
if (screenSize != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].screenSize = screenSize & 0x3;
|
gGpuBgConfigs.configs[bg].screenSize = screenSize & 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paletteMode != 0xFF)
|
if (paletteMode != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].paletteMode = paletteMode;
|
gGpuBgConfigs.configs[bg].paletteMode = paletteMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priority != 0xFF)
|
if (priority != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].priority = priority & 0x3;
|
gGpuBgConfigs.configs[bg].priority = priority & 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mosaic != 0xFF)
|
if (mosaic != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].mosaic = mosaic & 0x1;
|
gGpuBgConfigs.configs[bg].mosaic = mosaic & 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wraparound != 0xFF)
|
if (wraparound != 0xFF)
|
||||||
{
|
{
|
||||||
gGpuBgConfigs.configs[bg].wraparound = wraparound;
|
gGpuBgConfigs.configs[bg].wraparound = wraparound;
|
||||||
}
|
}
|
||||||
|
|
||||||
gGpuBgConfigs.configs[bg].unknown_2 = 0;
|
gGpuBgConfigs.configs[bg].unknown_2 = 0;
|
||||||
gGpuBgConfigs.configs[bg].unknown_3 = 0;
|
gGpuBgConfigs.configs[bg].unknown_3 = 0;
|
||||||
|
|
||||||
gGpuBgConfigs.configs[bg].visible = 1;
|
gGpuBgConfigs.configs[bg].visible = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -188,7 +179,7 @@ u16 GetBgControlAttribute(u8 bg, u8 attributeId)
|
||||||
return gGpuBgConfigs.configs[bg].wraparound;
|
return gGpuBgConfigs.configs[bg].wraparound;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0xFF;
|
return 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +187,7 @@ u8 LoadBgVram(u8 bg, void *src, u16 size, u16 destOffset, u8 mode)
|
||||||
{
|
{
|
||||||
u16 offset;
|
u16 offset;
|
||||||
s8 cursor;
|
s8 cursor;
|
||||||
|
|
||||||
if (IsInvalidBg(bg) == FALSE && gGpuBgConfigs.configs[bg].visible != FALSE)
|
if (IsInvalidBg(bg) == FALSE && gGpuBgConfigs.configs[bg].visible != FALSE)
|
||||||
{
|
{
|
||||||
switch (mode)
|
switch (mode)
|
||||||
|
@ -211,11 +202,11 @@ u8 LoadBgVram(u8 bg, void *src, u16 size, u16 destOffset, u8 mode)
|
||||||
cursor = -1;
|
cursor = -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = destOffset + offset;
|
offset = destOffset + offset;
|
||||||
|
|
||||||
cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
|
cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
|
||||||
|
|
||||||
if (cursor == -1)
|
if (cursor == -1)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -225,7 +216,7 @@ u8 LoadBgVram(u8 bg, void *src, u16 size, u16 destOffset, u8 mode)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
@ -242,9 +233,9 @@ void ShowBgInternal(u8 bg)
|
||||||
(gGpuBgConfigs.configs[bg].mapBaseIndex << 8) |
|
(gGpuBgConfigs.configs[bg].mapBaseIndex << 8) |
|
||||||
(gGpuBgConfigs.configs[bg].wraparound << 13) |
|
(gGpuBgConfigs.configs[bg].wraparound << 13) |
|
||||||
(gGpuBgConfigs.configs[bg].screenSize << 14);
|
(gGpuBgConfigs.configs[bg].screenSize << 14);
|
||||||
|
|
||||||
SetGpuReg((bg << 1) + 0x8, value);
|
SetGpuReg((bg << 1) + 0x8, value);
|
||||||
|
|
||||||
gGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8);
|
gGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8);
|
||||||
gGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS;
|
gGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS;
|
||||||
}
|
}
|
||||||
|
@ -273,7 +264,7 @@ void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX,
|
||||||
{
|
{
|
||||||
struct BgAffineSrcData src;
|
struct BgAffineSrcData src;
|
||||||
struct BgAffineDstData dest;
|
struct BgAffineDstData dest;
|
||||||
|
|
||||||
switch (gGpuBgConfigs.bgVisibilityAndMode & 0x7)
|
switch (gGpuBgConfigs.bgVisibilityAndMode & 0x7)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -288,7 +279,7 @@ void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX,
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
src.texX = srcCenterX;
|
src.texX = srcCenterX;
|
||||||
src.texY = srcCenterY;
|
src.texY = srcCenterY;
|
||||||
src.scrX = dispCenterX;
|
src.scrX = dispCenterX;
|
||||||
|
@ -296,7 +287,7 @@ void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX,
|
||||||
src.sx = scaleX;
|
src.sx = scaleX;
|
||||||
src.sy = scaleY;
|
src.sy = scaleY;
|
||||||
src.alpha = rotationAngle;
|
src.alpha = rotationAngle;
|
||||||
|
|
||||||
BgAffineSet(&src, &dest, 1);
|
BgAffineSet(&src, &dest, 1);
|
||||||
|
|
||||||
SetGpuReg(REG_OFFSET_BG2PA, dest.pa);
|
SetGpuReg(REG_OFFSET_BG2PA, dest.pa);
|
||||||
|
@ -326,20 +317,20 @@ void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
ResetBgs();
|
ResetBgs();
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
gDmaBusyBitfield[i] = 0;
|
gDmaBusyBitfield[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable;
|
gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitBgsFromTemplates(u8 bgMode, struct BgTemplate *templates, u8 numTemplates)
|
void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
u8 bg;
|
u8 bg;
|
||||||
|
|
||||||
SetBgModeInternal(bgMode);
|
SetBgModeInternal(bgMode);
|
||||||
ResetBgControlStructs();
|
ResetBgControlStructs();
|
||||||
|
|
||||||
|
@ -355,11 +346,11 @@ void InitBgsFromTemplates(u8 bgMode, struct BgTemplate *templates, u8 numTemplat
|
||||||
templates[i].priority,
|
templates[i].priority,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
gGpuBgConfigs2[bg].baseTile = templates[i].baseTile;
|
gGpuBgConfigs2[bg].baseTile = templates[i].baseTile;
|
||||||
gGpuBgConfigs2[bg].basePalette = 0;
|
gGpuBgConfigs2[bg].basePalette = 0;
|
||||||
gGpuBgConfigs2[bg].unk_3 = 0;
|
gGpuBgConfigs2[bg].unk_3 = 0;
|
||||||
|
|
||||||
gGpuBgConfigs2[bg].tilemap = NULL;
|
gGpuBgConfigs2[bg].tilemap = NULL;
|
||||||
gGpuBgConfigs2[bg].bg_x = 0;
|
gGpuBgConfigs2[bg].bg_x = 0;
|
||||||
gGpuBgConfigs2[bg].bg_y = 0;
|
gGpuBgConfigs2[bg].bg_y = 0;
|
||||||
|
@ -367,10 +358,10 @@ void InitBgsFromTemplates(u8 bgMode, struct BgTemplate *templates, u8 numTemplat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitBgFromTemplate(struct BgTemplate *template)
|
void InitBgFromTemplate(const struct BgTemplate *template)
|
||||||
{
|
{
|
||||||
u8 bg = template->bg;
|
u8 bg = template->bg;
|
||||||
|
|
||||||
if (bg < 4)
|
if (bg < 4)
|
||||||
{
|
{
|
||||||
SetBgControlAttributes(bg,
|
SetBgControlAttributes(bg,
|
||||||
|
@ -381,11 +372,11 @@ void InitBgFromTemplate(struct BgTemplate *template)
|
||||||
template->priority,
|
template->priority,
|
||||||
0,
|
0,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
gGpuBgConfigs2[bg].baseTile = template->baseTile;
|
gGpuBgConfigs2[bg].baseTile = template->baseTile;
|
||||||
gGpuBgConfigs2[bg].basePalette = 0;
|
gGpuBgConfigs2[bg].basePalette = 0;
|
||||||
gGpuBgConfigs2[bg].unk_3 = 0;
|
gGpuBgConfigs2[bg].unk_3 = 0;
|
||||||
|
|
||||||
gGpuBgConfigs2[bg].tilemap = NULL;
|
gGpuBgConfigs2[bg].tilemap = NULL;
|
||||||
gGpuBgConfigs2[bg].bg_x = 0;
|
gGpuBgConfigs2[bg].bg_x = 0;
|
||||||
gGpuBgConfigs2[bg].bg_y = 0;
|
gGpuBgConfigs2[bg].bg_y = 0;
|
||||||
|
@ -401,7 +392,7 @@ u16 LoadBgTiles(u8 bg, void* src, u16 size, u16 destOffset)
|
||||||
{
|
{
|
||||||
u16 tileOffset;
|
u16 tileOffset;
|
||||||
u8 cursor;
|
u8 cursor;
|
||||||
|
|
||||||
if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0)
|
if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0)
|
||||||
{
|
{
|
||||||
tileOffset = (gGpuBgConfigs2[bg].baseTile + destOffset) * 0x20;
|
tileOffset = (gGpuBgConfigs2[bg].baseTile + destOffset) * 0x20;
|
||||||
|
@ -410,37 +401,37 @@ u16 LoadBgTiles(u8 bg, void* src, u16 size, u16 destOffset)
|
||||||
{
|
{
|
||||||
tileOffset = (gGpuBgConfigs2[bg].baseTile + destOffset) * 0x40;
|
tileOffset = (gGpuBgConfigs2[bg].baseTile + destOffset) * 0x40;
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor = LoadBgVram(bg, src, size, tileOffset, DISPCNT_MODE_1);
|
cursor = LoadBgVram(bg, src, size, tileOffset, DISPCNT_MODE_1);
|
||||||
|
|
||||||
if (cursor == 0xFF)
|
if (cursor == 0xFF)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
|
gDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
|
||||||
|
|
||||||
if (gUnneededFireRedVariable == 1)
|
if (gUnneededFireRedVariable == 1)
|
||||||
{
|
{
|
||||||
DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1);
|
DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 LoadBgTilemap(u8 bg, void *src, u16 size, u16 destOffset)
|
u16 LoadBgTilemap(u8 bg, void *src, u16 size, u16 destOffset)
|
||||||
{
|
{
|
||||||
u8 cursor;
|
u8 cursor;
|
||||||
|
|
||||||
cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2);
|
cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2);
|
||||||
|
|
||||||
if (cursor == 0xFF)
|
if (cursor == 0xFF)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
|
gDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
|
||||||
|
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,12 +439,12 @@ u16 Unused_LoadBgPalette(u8 bg, void *src, u16 size, u16 destOffset)
|
||||||
{
|
{
|
||||||
u16 paletteOffset;
|
u16 paletteOffset;
|
||||||
s8 cursor;
|
s8 cursor;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE)
|
||||||
{
|
{
|
||||||
paletteOffset = (gGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
|
paletteOffset = (gGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
|
||||||
cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0);
|
cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0);
|
||||||
|
|
||||||
if (cursor == -1)
|
if (cursor == -1)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -475,14 +466,14 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
|
||||||
u8 mod;
|
u8 mod;
|
||||||
u8 div;
|
u8 div;
|
||||||
s8 reqSpace;
|
s8 reqSpace;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 0x80; i++)
|
for (i = 0; i < 0x80; i++)
|
||||||
{
|
{
|
||||||
div = i / 0x20;
|
div = i / 0x20;
|
||||||
mod = i % 0x20;
|
mod = i % 0x20;
|
||||||
|
|
||||||
if ((gDmaBusyBitfield[div] & (1 << mod)) != FALSE)
|
if ((gDmaBusyBitfield[div] & (1 << mod)) != FALSE)
|
||||||
{
|
{
|
||||||
reqSpace = CheckForSpaceForDma3Request(i);
|
reqSpace = CheckForSpaceForDma3Request(i);
|
||||||
|
@ -490,7 +481,7 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gDmaBusyBitfield[div] &= ~(1 << mod);
|
gDmaBusyBitfield[div] &= ~(1 << mod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -634,12 +625,12 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
|
||||||
u8 mode;
|
u8 mode;
|
||||||
u16 temp1;
|
u16 temp1;
|
||||||
u16 temp2;
|
u16 temp2;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -653,9 +644,9 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
|
||||||
gGpuBgConfigs2[bg].bg_x -= value;
|
gGpuBgConfigs2[bg].bg_x -= value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = GetBgMode();
|
mode = GetBgMode();
|
||||||
|
|
||||||
switch (bg)
|
switch (bg)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -695,7 +686,7 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gGpuBgConfigs2[bg].bg_x;
|
return gGpuBgConfigs2[bg].bg_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,12 +704,12 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
|
||||||
u8 mode;
|
u8 mode;
|
||||||
u16 temp1;
|
u16 temp1;
|
||||||
u16 temp2;
|
u16 temp2;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -732,9 +723,9 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
|
||||||
gGpuBgConfigs2[bg].bg_y -= value;
|
gGpuBgConfigs2[bg].bg_y -= value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = GetBgMode();
|
mode = GetBgMode();
|
||||||
|
|
||||||
switch (bg)
|
switch (bg)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -774,7 +765,7 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gGpuBgConfigs2[bg].bg_y;
|
return gGpuBgConfigs2[bg].bg_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,12 +774,12 @@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
|
||||||
u8 mode;
|
u8 mode;
|
||||||
u16 temp1;
|
u16 temp1;
|
||||||
u16 temp2;
|
u16 temp2;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
if (IsInvalidBg32(bg) != FALSE || GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -802,9 +793,9 @@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
|
||||||
gGpuBgConfigs2[bg].bg_y -= value;
|
gGpuBgConfigs2[bg].bg_y -= value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = GetBgMode();
|
mode = GetBgMode();
|
||||||
|
|
||||||
switch (bg)
|
switch (bg)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -820,7 +811,7 @@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
|
||||||
{
|
{
|
||||||
temp1 = gGpuBgConfigs2[2].bg_y >> 0x8;
|
temp1 = gGpuBgConfigs2[2].bg_y >> 0x8;
|
||||||
SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1);
|
SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -845,7 +836,7 @@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gGpuBgConfigs2[bg].bg_y;
|
return gGpuBgConfigs2[bg].bg_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -868,13 +859,13 @@ u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
|
||||||
u16 result;
|
u16 result;
|
||||||
s16 test1;
|
s16 test1;
|
||||||
s16 test2;
|
s16 test2;
|
||||||
|
|
||||||
result = GetGpuReg(REG_OFFSET_MOSAIC);
|
result = GetGpuReg(REG_OFFSET_MOSAIC);
|
||||||
|
|
||||||
test1 = result & 0xF;
|
test1 = result & 0xF;
|
||||||
test2 = (result >> 4) & 0xF;
|
test2 = (result >> 4) & 0xF;
|
||||||
result &= 0xFF00;
|
result &= 0xFF00;
|
||||||
|
|
||||||
switch (a2)
|
switch (a2)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -929,12 +920,12 @@ u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
result |= ((test2 << 0x4) & 0xF0);
|
result |= ((test2 << 0x4) & 0xF0);
|
||||||
result |= (test1 & 0xF);
|
result |= (test1 & 0xF);
|
||||||
|
|
||||||
SetGpuReg(REG_OFFSET_MOSAIC, result);
|
SetGpuReg(REG_OFFSET_MOSAIC, result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -981,7 +972,7 @@ void CopyToBgTilemapBuffer(u8 bg, void *src, u16 mode, u16 destOffset)
|
||||||
void CopyBgTilemapBufferToVram(u8 bg)
|
void CopyBgTilemapBufferToVram(u8 bg)
|
||||||
{
|
{
|
||||||
u16 sizeToLoad;
|
u16 sizeToLoad;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
||||||
{
|
{
|
||||||
switch (GetBgType(bg))
|
switch (GetBgType(bg))
|
||||||
|
@ -1006,7 +997,7 @@ void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u
|
||||||
u16 destX16;
|
u16 destX16;
|
||||||
u16 destY16;
|
u16 destY16;
|
||||||
u16 mode;
|
u16 mode;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
||||||
{
|
{
|
||||||
switch (GetBgType(bg))
|
switch (GetBgType(bg))
|
||||||
|
@ -1047,11 +1038,11 @@ void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWid
|
||||||
u16 attribute;
|
u16 attribute;
|
||||||
u16 mode;
|
u16 mode;
|
||||||
u16 mode2;
|
u16 mode2;
|
||||||
|
|
||||||
void* srcCopy;
|
void* srcCopy;
|
||||||
u16 destX16;
|
u16 destX16;
|
||||||
u16 destY16;
|
u16 destY16;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
||||||
{
|
{
|
||||||
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
||||||
|
@ -1336,7 +1327,7 @@ void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width,
|
||||||
u16 x16;
|
u16 x16;
|
||||||
u16 y16;
|
u16 y16;
|
||||||
u16 mode;
|
u16 mode;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
||||||
{
|
{
|
||||||
switch (GetBgType(bg))
|
switch (GetBgType(bg))
|
||||||
|
@ -1375,10 +1366,10 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
|
||||||
u16 mode2;
|
u16 mode2;
|
||||||
u16 attribute;
|
u16 attribute;
|
||||||
u16 mode3;
|
u16 mode3;
|
||||||
|
|
||||||
u16 x16;
|
u16 x16;
|
||||||
u16 y16;
|
u16 y16;
|
||||||
|
|
||||||
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
|
||||||
{
|
{
|
||||||
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
||||||
|
@ -1414,9 +1405,9 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
|
||||||
u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
|
u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
|
||||||
{
|
{
|
||||||
u8 attribute;
|
u8 attribute;
|
||||||
|
|
||||||
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
||||||
|
|
||||||
switch (whichMetric)
|
switch (whichMetric)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1462,9 +1453,9 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
|
||||||
u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
|
u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
|
||||||
{
|
{
|
||||||
u8 attribute;
|
u8 attribute;
|
||||||
|
|
||||||
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
|
||||||
|
|
||||||
switch (whichMetric)
|
switch (whichMetric)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1491,7 +1482,7 @@ u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32
|
||||||
{
|
{
|
||||||
x = x & (screenWidth - 1);
|
x = x & (screenWidth - 1);
|
||||||
y = y & (screenHeight - 1);
|
y = y & (screenHeight - 1);
|
||||||
|
|
||||||
switch (screenSize)
|
switch (screenSize)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1526,7 +1517,7 @@ void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 pal
|
||||||
test = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
|
test = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dest = test;
|
*dest = test;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1586,10 +1577,10 @@ _08002B3C:\n\
|
||||||
u32 GetBgType(u8 bg)
|
u32 GetBgType(u8 bg)
|
||||||
{
|
{
|
||||||
u8 mode;
|
u8 mode;
|
||||||
|
|
||||||
mode = GetBgMode();
|
mode = GetBgMode();
|
||||||
|
|
||||||
|
|
||||||
switch (bg)
|
switch (bg)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1621,7 +1612,7 @@ u32 GetBgType(u8 bg)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0xFFFF;
|
return 0xFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ void MultiBootStartProbe(struct MultiBootParam *mp)
|
||||||
mp->probe_count = 1;
|
mp->probe_count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiBootStartMaster(struct MultiBootParam *mp, u8 *srcp, int length, u8 palette_color, s8 palette_speed)
|
void MultiBootStartMaster(struct MultiBootParam *mp, const u8 *srcp, int length, u8 palette_color, s8 palette_speed)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
|
|
@ -2779,7 +2779,7 @@ _08005D6E:\n\
|
||||||
bx r1");
|
bx r1");
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 GetStringWidthFixedWidthFont(u8 *str, u8 fontId, u8 letterSpacing)
|
u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
u8 width;
|
u8 width;
|
||||||
|
@ -2788,7 +2788,7 @@ u32 GetStringWidthFixedWidthFont(u8 *str, u8 fontId, u8 letterSpacing)
|
||||||
u8 line;
|
u8 line;
|
||||||
int strPos;
|
int strPos;
|
||||||
u8 lineWidths[8];
|
u8 lineWidths[8];
|
||||||
u8 *strLocal;
|
const u8 *strLocal;
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
|
@ -2883,7 +2883,7 @@ u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 GetStringWidth(u8 fontId, u8 *str, s16 letterSpacing)
|
u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
|
||||||
{
|
{
|
||||||
bool8 isJapanese;
|
bool8 isJapanese;
|
||||||
int minGlyphWidth;
|
int minGlyphWidth;
|
||||||
|
|
|
@ -35,7 +35,7 @@ static void nullsub_8(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool16 InitWindows(struct WindowTemplate *templates)
|
bool16 InitWindows(const struct WindowTemplate *templates)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *bgTilemapBuffer;
|
void *bgTilemapBuffer;
|
||||||
|
|
|
@ -129,7 +129,7 @@ gUnknown_03000E06: @ 3000E06
|
||||||
.space 0x2
|
.space 0x2
|
||||||
|
|
||||||
.include "src/play_time.o"
|
.include "src/play_time.o"
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
|
|
||||||
gUnknown_03000E0C: @ 3000E0C
|
gUnknown_03000E0C: @ 3000E0C
|
||||||
|
@ -376,8 +376,7 @@ gUnknown_03001298: @ 3001298
|
||||||
gUnknown_030012A8: @ 30012A8
|
gUnknown_030012A8: @ 30012A8
|
||||||
.space 0x10
|
.space 0x10
|
||||||
|
|
||||||
gUnknown_030012B8: @ 30012B8
|
.include "src/berry_fix_program.o"
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_030012BC: @ 30012BC
|
gUnknown_030012BC: @ 30012BC
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
Loading…
Reference in a new issue