unk_815F138
This commit is contained in:
@@ -1,753 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_815F138
|
||||
sub_815F138: @ 815F138
|
||||
push {r4-r6,lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
sub sp, 0x4
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
adds r6, r2, 0
|
||||
ldr r0, [sp, 0x18]
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
lsls r5, 16
|
||||
lsrs r5, 16
|
||||
lsls r6, 16
|
||||
lsrs r6, 16
|
||||
lsls r3, 16
|
||||
lsrs r3, 16
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r8, r0
|
||||
ldr r0, _0815F190 @ =sub_815F1AC
|
||||
movs r1, 0x50
|
||||
str r3, [sp]
|
||||
bl CreateTask
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
ldr r2, _0815F194 @ =gTasks
|
||||
lsls r1, r0, 2
|
||||
adds r1, r0
|
||||
lsls r1, 3
|
||||
adds r1, r2
|
||||
strh r4, [r1, 0xC]
|
||||
strh r5, [r1, 0xE]
|
||||
strh r6, [r1, 0x10]
|
||||
ldr r3, [sp]
|
||||
strh r3, [r1, 0x12]
|
||||
mov r0, r8
|
||||
strh r0, [r1, 0x14]
|
||||
add sp, 0x4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F190: .4byte sub_815F1AC
|
||||
_0815F194: .4byte gTasks
|
||||
thumb_func_end sub_815F138
|
||||
|
||||
thumb_func_start sub_815F198
|
||||
sub_815F198: @ 815F198
|
||||
push {lr}
|
||||
ldr r0, _0815F1A8 @ =sub_815F1AC
|
||||
bl FuncIsActiveTask
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0815F1A8: .4byte sub_815F1AC
|
||||
thumb_func_end sub_815F198
|
||||
|
||||
thumb_func_start sub_815F1AC
|
||||
sub_815F1AC: @ 815F1AC
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0xC
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
lsls r0, r6, 2
|
||||
adds r0, r6
|
||||
lsls r0, 3
|
||||
ldr r1, _0815F1D0 @ =gTasks+0x8
|
||||
adds r5, r0, r1
|
||||
movs r1, 0
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, 0x1
|
||||
beq _0815F21C
|
||||
cmp r0, 0x1
|
||||
bgt _0815F1D4
|
||||
cmp r0, 0
|
||||
beq _0815F1DA
|
||||
b _0815F29E
|
||||
.align 2, 0
|
||||
_0815F1D0: .4byte gTasks+0x8
|
||||
_0815F1D4:
|
||||
cmp r0, 0x2
|
||||
beq _0815F260
|
||||
b _0815F29E
|
||||
_0815F1DA:
|
||||
ldrh r0, [r5, 0x4]
|
||||
ldrh r1, [r5, 0x6]
|
||||
bl sub_815F564
|
||||
ldrh r0, [r5, 0x4]
|
||||
ldrh r1, [r5, 0x6]
|
||||
movs r3, 0x8
|
||||
ldrsh r2, [r5, r3]
|
||||
movs r4, 0xA
|
||||
ldrsh r3, [r5, r4]
|
||||
ldrb r4, [r5, 0xC]
|
||||
str r4, [sp]
|
||||
bl sub_815F5BC
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
strh r0, [r5, 0xE]
|
||||
ldrh r0, [r5, 0x4]
|
||||
ldrh r1, [r5, 0x6]
|
||||
movs r3, 0x8
|
||||
ldrsh r2, [r5, r3]
|
||||
movs r4, 0xA
|
||||
ldrsh r3, [r5, r4]
|
||||
ldrb r4, [r5, 0xC]
|
||||
str r4, [sp]
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x10
|
||||
str r4, [sp, 0x4]
|
||||
adds r4, 0x2
|
||||
str r4, [sp, 0x8]
|
||||
bl sub_815F610
|
||||
b _0815F252
|
||||
_0815F21C:
|
||||
ldrb r0, [r5, 0xE]
|
||||
bl sub_815F2AC
|
||||
cmp r0, 0
|
||||
bne _0815F29E
|
||||
ldrb r0, [r5, 0xE]
|
||||
ldrb r1, [r5, 0x10]
|
||||
ldrb r2, [r5, 0x12]
|
||||
bl sub_815F3E0
|
||||
movs r0, 0xE
|
||||
ldrsh r1, [r5, r0]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
ldr r4, _0815F25C @ =gSprites
|
||||
adds r0, r4
|
||||
bl FreeSpriteOamMatrix
|
||||
movs r3, 0xE
|
||||
ldrsh r1, [r5, r3]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r4
|
||||
bl DestroySprite
|
||||
_0815F252:
|
||||
ldrh r0, [r5]
|
||||
adds r0, 0x1
|
||||
strh r0, [r5]
|
||||
b _0815F29E
|
||||
.align 2, 0
|
||||
_0815F25C: .4byte gSprites
|
||||
_0815F260:
|
||||
ldrb r0, [r5, 0x10]
|
||||
bl sub_815F444
|
||||
cmp r0, 0
|
||||
bne _0815F29E
|
||||
movs r4, 0x10
|
||||
ldrsh r1, [r5, r4]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
ldr r4, _0815F2A8 @ =gSprites
|
||||
adds r0, r4
|
||||
bl DestroySprite
|
||||
movs r0, 0x12
|
||||
ldrsh r1, [r5, r0]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r4
|
||||
bl DestroySprite
|
||||
ldrh r0, [r5, 0x4]
|
||||
bl FreeSpriteTilesByTag
|
||||
ldrh r0, [r5, 0x6]
|
||||
bl FreeSpritePaletteByTag
|
||||
adds r0, r6, 0
|
||||
bl DestroyTask
|
||||
_0815F29E:
|
||||
add sp, 0xC
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F2A8: .4byte gSprites
|
||||
thumb_func_end sub_815F1AC
|
||||
|
||||
thumb_func_start sub_815F2AC
|
||||
sub_815F2AC: @ 815F2AC
|
||||
push {r4,lr}
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
lsls r1, r0, 4
|
||||
adds r1, r0
|
||||
lsls r1, 2
|
||||
ldr r0, _0815F2D0 @ =gSprites
|
||||
adds r4, r1, r0
|
||||
movs r1, 0x2E
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, 0x7
|
||||
bls _0815F2C6
|
||||
b _0815F3D8
|
||||
_0815F2C6:
|
||||
lsls r0, 2
|
||||
ldr r1, _0815F2D4 @ =_0815F2D8
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0815F2D0: .4byte gSprites
|
||||
_0815F2D4: .4byte _0815F2D8
|
||||
.align 2, 0
|
||||
_0815F2D8:
|
||||
.4byte _0815F2F8
|
||||
.4byte _0815F30A
|
||||
.4byte _0815F330
|
||||
.4byte _0815F340
|
||||
.4byte _0815F362
|
||||
.4byte _0815F39A
|
||||
.4byte _0815F3C0
|
||||
.4byte _0815F396
|
||||
_0815F2F8:
|
||||
movs r1, 0x80
|
||||
lsls r1, 4
|
||||
adds r0, r4, 0
|
||||
movs r2, 0x1A
|
||||
bl sub_8007FFC
|
||||
ldrh r0, [r4, 0x2E]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x2E]
|
||||
_0815F30A:
|
||||
movs r2, 0x32
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r0, 0
|
||||
bne _0815F318
|
||||
movs r0, 0x32
|
||||
bl PlaySE
|
||||
_0815F318:
|
||||
ldrh r0, [r4, 0x32]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x32]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x13
|
||||
ble _0815F3D8
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x32]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x1
|
||||
b _0815F3B6
|
||||
_0815F330:
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x3F
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x20
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0815F3D8
|
||||
b _0815F3BA
|
||||
_0815F340:
|
||||
ldrh r0, [r4, 0x32]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x32]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x3
|
||||
ble _0815F3D8
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x32]
|
||||
ldrh r0, [r4, 0x2E]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x2E]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x2
|
||||
bl StartSpriteAffineAnim
|
||||
b _0815F3D8
|
||||
_0815F362:
|
||||
ldrh r0, [r4, 0x22]
|
||||
subs r0, 0x4
|
||||
strh r0, [r4, 0x22]
|
||||
ldrh r0, [r4, 0x32]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x32]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7
|
||||
ble _0815F3D8
|
||||
ldrh r1, [r4, 0x36]
|
||||
movs r2, 0x36
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r0, 0x1
|
||||
bgt _0815F392
|
||||
adds r1, 0x1
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
adds r0, r4, 0
|
||||
bl StartSpriteAnim
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x32]
|
||||
b _0815F3BA
|
||||
_0815F392:
|
||||
movs r0, 0x7
|
||||
strh r0, [r4, 0x2E]
|
||||
_0815F396:
|
||||
movs r0, 0
|
||||
b _0815F3DA
|
||||
_0815F39A:
|
||||
ldrh r0, [r4, 0x22]
|
||||
adds r0, 0x4
|
||||
strh r0, [r4, 0x22]
|
||||
ldrh r0, [r4, 0x32]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x32]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7
|
||||
ble _0815F3D8
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x32]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x3
|
||||
_0815F3B6:
|
||||
bl StartSpriteAffineAnim
|
||||
_0815F3BA:
|
||||
ldrh r0, [r4, 0x2E]
|
||||
adds r0, 0x1
|
||||
b _0815F3D6
|
||||
_0815F3C0:
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x3F
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x20
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0815F3D8
|
||||
ldrh r0, [r4, 0x36]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x36]
|
||||
movs r0, 0x1
|
||||
_0815F3D6:
|
||||
strh r0, [r4, 0x2E]
|
||||
_0815F3D8:
|
||||
movs r0, 0x1
|
||||
_0815F3DA:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_815F2AC
|
||||
|
||||
thumb_func_start sub_815F3E0
|
||||
sub_815F3E0: @ 815F3E0
|
||||
push {r4-r6,lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
lsls r2, 24
|
||||
lsrs r2, 24
|
||||
ldr r0, _0815F438 @ =gSprites
|
||||
mov r8, r0
|
||||
lsls r4, r1, 4
|
||||
adds r4, r1
|
||||
lsls r4, 2
|
||||
adds r5, r4, r0
|
||||
ldr r0, _0815F43C @ =0x0000ffd8
|
||||
strh r0, [r5, 0x26]
|
||||
lsls r3, r2, 4
|
||||
adds r3, r2
|
||||
lsls r3, 2
|
||||
mov r1, r8
|
||||
adds r2, r3, r1
|
||||
strh r0, [r2, 0x26]
|
||||
adds r5, 0x3E
|
||||
ldrb r6, [r5]
|
||||
movs r1, 0x5
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
ands r0, r6
|
||||
strb r0, [r5]
|
||||
adds r2, 0x3E
|
||||
ldrb r0, [r2]
|
||||
ands r1, r0
|
||||
strb r1, [r2]
|
||||
movs r0, 0x1C
|
||||
add r8, r0
|
||||
add r4, r8
|
||||
ldr r0, _0815F440 @ =sub_815F470
|
||||
str r0, [r4]
|
||||
add r3, r8
|
||||
str r0, [r3]
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F438: .4byte gSprites
|
||||
_0815F43C: .4byte 0x0000ffd8
|
||||
_0815F440: .4byte sub_815F470
|
||||
thumb_func_end sub_815F3E0
|
||||
|
||||
thumb_func_start sub_815F444
|
||||
sub_815F444: @ 815F444
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
movs r3, 0
|
||||
ldr r2, _0815F468 @ =gSprites
|
||||
lsls r1, r0, 4
|
||||
adds r1, r0
|
||||
lsls r1, 2
|
||||
adds r2, 0x1C
|
||||
adds r1, r2
|
||||
ldr r1, [r1]
|
||||
ldr r0, _0815F46C @ =sub_815F470
|
||||
cmp r1, r0
|
||||
bne _0815F462
|
||||
movs r3, 0x1
|
||||
_0815F462:
|
||||
adds r0, r3, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0815F468: .4byte gSprites
|
||||
_0815F46C: .4byte sub_815F470
|
||||
thumb_func_end sub_815F444
|
||||
|
||||
thumb_func_start sub_815F470
|
||||
sub_815F470: @ 815F470
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r5, 0
|
||||
adds r4, 0x2E
|
||||
movs r1, 0x2E
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, 0x4
|
||||
bhi _0815F55A
|
||||
lsls r0, 2
|
||||
ldr r1, _0815F48C @ =_0815F490
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0815F48C: .4byte _0815F490
|
||||
.align 2, 0
|
||||
_0815F490:
|
||||
.4byte _0815F4A4
|
||||
.4byte _0815F4B4
|
||||
.4byte _0815F4DC
|
||||
.4byte _0815F510
|
||||
.4byte _0815F548
|
||||
_0815F4A4:
|
||||
movs r0, 0x40
|
||||
strh r0, [r4, 0x8]
|
||||
ldrh r0, [r5, 0x26]
|
||||
lsls r0, 4
|
||||
strh r0, [r4, 0xA]
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4]
|
||||
_0815F4B4:
|
||||
ldrh r1, [r4, 0x8]
|
||||
ldrh r2, [r4, 0xA]
|
||||
adds r0, r1, r2
|
||||
strh r0, [r4, 0xA]
|
||||
adds r1, 0x1
|
||||
strh r1, [r4, 0x8]
|
||||
lsls r0, 16
|
||||
asrs r0, 20
|
||||
strh r0, [r5, 0x26]
|
||||
cmp r0, 0
|
||||
blt _0815F55A
|
||||
movs r0, 0x32
|
||||
bl PlaySE
|
||||
movs r0, 0
|
||||
strh r0, [r5, 0x26]
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4]
|
||||
b _0815F55A
|
||||
_0815F4DC:
|
||||
ldrh r0, [r4, 0x2]
|
||||
adds r0, 0xC
|
||||
strh r0, [r4, 0x2]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7F
|
||||
ble _0815F4FA
|
||||
movs r0, 0x32
|
||||
bl PlaySE
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x2]
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4]
|
||||
_0815F4FA:
|
||||
ldr r0, _0815F50C @ =gSineTable
|
||||
movs r2, 0x2
|
||||
ldrsh r1, [r4, r2]
|
||||
lsls r1, 1
|
||||
adds r1, r0
|
||||
movs r2, 0
|
||||
ldrsh r0, [r1, r2]
|
||||
asrs r0, 4
|
||||
b _0815F53E
|
||||
.align 2, 0
|
||||
_0815F50C: .4byte gSineTable
|
||||
_0815F510:
|
||||
ldrh r0, [r4, 0x2]
|
||||
adds r0, 0x10
|
||||
strh r0, [r4, 0x2]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x7F
|
||||
ble _0815F52E
|
||||
movs r0, 0x32
|
||||
bl PlaySE
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x2]
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4]
|
||||
_0815F52E:
|
||||
ldr r1, _0815F544 @ =gSineTable
|
||||
movs r2, 0x2
|
||||
ldrsh r0, [r4, r2]
|
||||
lsls r0, 1
|
||||
adds r0, r1
|
||||
ldrh r0, [r0]
|
||||
lsls r0, 16
|
||||
asrs r0, 21
|
||||
_0815F53E:
|
||||
negs r0, r0
|
||||
strh r0, [r5, 0x26]
|
||||
b _0815F55A
|
||||
.align 2, 0
|
||||
_0815F544: .4byte gSineTable
|
||||
_0815F548:
|
||||
ldrh r0, [r4, 0x2]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x2]
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r0, 0x28
|
||||
ble _0815F55A
|
||||
ldr r0, _0815F560 @ =SpriteCallbackDummy
|
||||
str r0, [r5, 0x1C]
|
||||
_0815F55A:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F560: .4byte SpriteCallbackDummy
|
||||
thumb_func_end sub_815F470
|
||||
|
||||
thumb_func_start sub_815F564
|
||||
sub_815F564: @ 815F564
|
||||
push {r4,lr}
|
||||
sub sp, 0x10
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
ldr r2, _0815F5AC @ =gUnknown_847A79C
|
||||
ldr r3, [r2, 0x4]
|
||||
ldr r2, [r2]
|
||||
str r2, [sp]
|
||||
str r3, [sp, 0x4]
|
||||
ldr r2, _0815F5B0 @ =gUnknown_847A7A4
|
||||
ldr r3, [r2, 0x4]
|
||||
ldr r2, [r2]
|
||||
str r2, [sp, 0x8]
|
||||
str r3, [sp, 0xC]
|
||||
lsls r0, 16
|
||||
ldr r3, _0815F5B4 @ =0x0000ffff
|
||||
ldr r2, [sp, 0x4]
|
||||
ands r2, r3
|
||||
orrs r2, r0
|
||||
str r2, [sp, 0x4]
|
||||
ldr r2, _0815F5B8 @ =0xffff0000
|
||||
add r4, sp, 0x8
|
||||
ldr r0, [r4, 0x4]
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
str r0, [r4, 0x4]
|
||||
mov r0, sp
|
||||
bl LoadCompressedObjectPic
|
||||
adds r0, r4, 0
|
||||
bl LoadSpritePalette
|
||||
add sp, 0x10
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F5AC: .4byte gUnknown_847A79C
|
||||
_0815F5B0: .4byte gUnknown_847A7A4
|
||||
_0815F5B4: .4byte 0x0000ffff
|
||||
_0815F5B8: .4byte 0xffff0000
|
||||
thumb_func_end sub_815F564
|
||||
|
||||
thumb_func_start sub_815F5BC
|
||||
sub_815F5BC: @ 815F5BC
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x18
|
||||
mov r12, r3
|
||||
ldr r3, [sp, 0x30]
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
lsls r3, 24
|
||||
lsrs r3, 24
|
||||
mov r8, r3
|
||||
mov r5, sp
|
||||
ldr r4, _0815F60C @ =gUnknown_847A860
|
||||
ldm r4!, {r3,r6,r7}
|
||||
stm r5!, {r3,r6,r7}
|
||||
ldm r4!, {r3,r6,r7}
|
||||
stm r5!, {r3,r6,r7}
|
||||
mov r4, sp
|
||||
strh r0, [r4]
|
||||
mov r0, sp
|
||||
strh r1, [r0, 0x2]
|
||||
lsls r2, 16
|
||||
asrs r2, 16
|
||||
mov r0, r12
|
||||
lsls r6, r0, 16
|
||||
asrs r6, 16
|
||||
mov r0, sp
|
||||
adds r1, r2, 0
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl CreateSprite
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
add sp, 0x18
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0815F60C: .4byte gUnknown_847A860
|
||||
thumb_func_end sub_815F5BC
|
||||
|
||||
thumb_func_start sub_815F610
|
||||
sub_815F610: @ 815F610
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x18
|
||||
mov r12, r3
|
||||
ldr r6, [sp, 0x38]
|
||||
ldr r3, [sp, 0x3C]
|
||||
mov r9, r3
|
||||
ldr r4, [sp, 0x40]
|
||||
mov r8, r4
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
lsls r6, 24
|
||||
lsrs r6, 24
|
||||
mov r10, r6
|
||||
mov r4, sp
|
||||
ldr r3, _0815F6D4 @ =gUnknown_847A878
|
||||
ldm r3!, {r5-r7}
|
||||
stm r4!, {r5-r7}
|
||||
ldm r3!, {r5-r7}
|
||||
stm r4!, {r5-r7}
|
||||
mov r3, sp
|
||||
strh r0, [r3]
|
||||
mov r0, sp
|
||||
strh r1, [r0, 0x2]
|
||||
lsls r2, 16
|
||||
asrs r4, r2, 16
|
||||
ldr r0, _0815F6D8 @ =0xffe00000
|
||||
adds r2, r0
|
||||
asrs r2, 16
|
||||
mov r1, r12
|
||||
lsls r5, r1, 16
|
||||
asrs r5, 16
|
||||
mov r0, sp
|
||||
adds r1, r2, 0
|
||||
adds r2, r5, 0
|
||||
mov r3, r10
|
||||
bl CreateSprite
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r3, r9
|
||||
strh r0, [r3]
|
||||
adds r4, 0x20
|
||||
lsls r4, 16
|
||||
asrs r4, 16
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
adds r2, r5, 0
|
||||
mov r3, r10
|
||||
bl CreateSprite
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
mov r4, r8
|
||||
strh r0, [r4]
|
||||
ldr r2, _0815F6DC @ =gSprites
|
||||
mov r5, r9
|
||||
movs r6, 0
|
||||
ldrsh r1, [r5, r6]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r2
|
||||
adds r0, 0x3E
|
||||
ldrb r1, [r0]
|
||||
movs r3, 0x4
|
||||
orrs r1, r3
|
||||
strb r1, [r0]
|
||||
movs r7, 0
|
||||
ldrsh r1, [r4, r7]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r2
|
||||
adds r0, 0x3E
|
||||
ldrb r1, [r0]
|
||||
orrs r1, r3
|
||||
strb r1, [r0]
|
||||
movs r0, 0
|
||||
ldrsh r1, [r4, r0]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r2
|
||||
movs r1, 0x1
|
||||
bl StartSpriteAnim
|
||||
add sp, 0x18
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0815F6D4: .4byte gUnknown_847A878
|
||||
_0815F6D8: .4byte 0xffe00000
|
||||
_0815F6DC: .4byte gSprites
|
||||
thumb_func_end sub_815F610
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
@@ -229,86 +229,6 @@ gUnknown_8479748::
|
||||
|
||||
.section .rodata.after_trainer_tower
|
||||
|
||||
// unk_815F138
|
||||
|
||||
gUnknown_847A328::
|
||||
.incbin "data/graphics/unk_847a348.gbapal"
|
||||
|
||||
gUnknown_847A348::
|
||||
.incbin "data/graphics/unk_847a348.4bpp.lz"
|
||||
|
||||
gUnknown_847A79C:: @ 847A79C
|
||||
obj_tiles gUnknown_847A348, 0xE00, 0
|
||||
|
||||
gUnknown_847A7A4:: @ 847A7A4
|
||||
obj_pal gUnknown_847A328, 0
|
||||
|
||||
gOamData_847A7AC::
|
||||
.4byte 0x80000300, 0x00000000
|
||||
|
||||
gOamData_847A7B4::
|
||||
.4byte 0xc0004000, 0x00000000
|
||||
|
||||
gUnknown_847A7BC::
|
||||
obj_image_anim_frame 0, 1
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_847A7C4::
|
||||
obj_image_anim_frame 16, 1
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_847A7CC::
|
||||
obj_image_anim_frame 32, 1
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_847A7D4::
|
||||
.4byte gUnknown_847A7BC
|
||||
.4byte gUnknown_847A7C4
|
||||
.4byte gUnknown_847A7CC
|
||||
|
||||
gUnknown_847A7E0::
|
||||
obj_image_anim_frame 48, 1
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_847A7E8::
|
||||
obj_image_anim_frame 80, 1
|
||||
obj_image_anim_end
|
||||
|
||||
gUnknown_847A7F0::
|
||||
.4byte gUnknown_847A7E0
|
||||
.4byte gUnknown_847A7E8
|
||||
|
||||
gUnknown_847A7F8::
|
||||
obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_847A808::
|
||||
obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
|
||||
obj_rot_scal_anim_frame 0x10, -0x10, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_847A820::
|
||||
obj_rot_scal_anim_frame -0x12, 0x12, 0, 8
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_847A830::
|
||||
obj_rot_scal_anim_frame 0x6, -0x6, 0, 8
|
||||
obj_rot_scal_anim_frame -0x4, 0x4, 0, 8
|
||||
obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
|
||||
obj_rot_scal_anim_end
|
||||
|
||||
gUnknown_847A850::
|
||||
.4byte gUnknown_847A7F8
|
||||
.4byte gUnknown_847A808
|
||||
.4byte gUnknown_847A820
|
||||
.4byte gUnknown_847A830
|
||||
|
||||
gUnknown_847A860:: @ 847A860
|
||||
spr_template 0, 0, gOamData_847A7AC, gUnknown_847A7D4, NULL, gUnknown_847A850, SpriteCallbackDummy
|
||||
|
||||
gUnknown_847A878:: @ 847A878
|
||||
spr_template 0, 0, gOamData_847A7B4, gUnknown_847A7F0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
|
||||
// berry_fix_program
|
||||
|
||||
gUnknown_847A890:: @ 847A890
|
||||
|
||||
@@ -302,5 +302,6 @@ void CopyFromSprites(u8 *dest);
|
||||
u8 SpriteTileAllocBitmapOp(u16 bit, u8 op);
|
||||
void ClearSpriteCopyRequests(void);
|
||||
void ResetAffineAnimData(void);
|
||||
void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3);
|
||||
|
||||
#endif //GUARD_SPRITE_H
|
||||
|
||||
+2
-1
@@ -284,7 +284,7 @@ SECTIONS {
|
||||
src/cereader_tool.o(.text);
|
||||
src/trainer_tower.o(.text);
|
||||
src/unk_815EDDC.o(.text);
|
||||
asm/unk_815F138.o(.text);
|
||||
src/unk_815F138.o(.text);
|
||||
asm/berry_fix_program.o(.text);
|
||||
} =0
|
||||
|
||||
@@ -457,6 +457,7 @@ SECTIONS {
|
||||
src/ss_anne.o(.rodata);
|
||||
src/cereader_tool.o(.rodata);
|
||||
src/trainer_tower.o(.rodata);
|
||||
src/unk_815F138.o(.rodata);
|
||||
data/data_8471F00.o(.rodata.after_trainer_tower);
|
||||
src/mystery_event_msg.o(.rodata);
|
||||
data/mystery_event_msg.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,322 @@
|
||||
#include "global.h"
|
||||
#include "decompress.h"
|
||||
#include "sound.h"
|
||||
#include "task.h"
|
||||
#include "trig.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
void sub_815F1AC(u8 taskId);
|
||||
bool32 sub_815F2AC(u8 spriteId);
|
||||
void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3);
|
||||
bool32 sub_815F444(u8 spriteId);
|
||||
void sub_815F470(struct Sprite * sprite);
|
||||
void sub_815F564(u16 tilesTag, u16 palTag);
|
||||
u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
|
||||
void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p);
|
||||
|
||||
void sub_815F138(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_815F1AC, 80);
|
||||
gTasks[taskId].data[2] = tilesTag;
|
||||
gTasks[taskId].data[3] = palTag;
|
||||
gTasks[taskId].data[4] = x;
|
||||
gTasks[taskId].data[5] = y;
|
||||
gTasks[taskId].data[6] = subpriority;
|
||||
}
|
||||
|
||||
bool8 sub_815F198(void)
|
||||
{
|
||||
return FuncIsActiveTask(sub_815F1AC);
|
||||
}
|
||||
|
||||
void sub_815F1AC(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_815F564(data[2], data[3]);
|
||||
data[7] = sub_815F5BC(data[2], data[3], data[4], data[5], data[6]);
|
||||
sub_815F610(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]);
|
||||
data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
if (!sub_815F2AC(data[7]))
|
||||
{
|
||||
sub_815F3E0(data[7], data[8], data[9]);
|
||||
FreeSpriteOamMatrix(&gSprites[data[7]]);
|
||||
DestroySprite(&gSprites[data[7]]);
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (!sub_815F444(data[8]))
|
||||
{
|
||||
DestroySprite(&gSprites[data[8]]);
|
||||
DestroySprite(&gSprites[data[9]]);
|
||||
FreeSpriteTilesByTag(data[2]);
|
||||
FreeSpritePaletteByTag(data[3]);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_815F2AC(u8 spriteId)
|
||||
{
|
||||
struct Sprite * sprite = &gSprites[spriteId];
|
||||
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_8007FFC(sprite, 0x800, 0x1A);
|
||||
sprite->data[0]++;
|
||||
// fallthrough
|
||||
case 1:
|
||||
if (sprite->data[2] == 0)
|
||||
PlaySE(SE_TRACK_STOP);
|
||||
if (++sprite->data[2] >= 20)
|
||||
{
|
||||
sprite->data[2] = 0;
|
||||
StartSpriteAffineAnim(sprite, 1);
|
||||
sprite->data[0]++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (sprite->affineAnimEnded)
|
||||
sprite->data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
if (++sprite->data[2] >= 4)
|
||||
{
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[0]++;
|
||||
StartSpriteAffineAnim(sprite, 2);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
sprite->pos1.y -= 4;
|
||||
if (++sprite->data[2] >= 8)
|
||||
{
|
||||
if (sprite->data[4] < 2)
|
||||
{
|
||||
StartSpriteAnim(sprite, sprite->data[4] + 1);
|
||||
sprite->data[2] = 0;
|
||||
sprite->data[0]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->data[0] = 7;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
sprite->pos1.y += 4;
|
||||
if (++sprite->data[2] >= 8)
|
||||
{
|
||||
sprite->data[2] = 0;
|
||||
StartSpriteAffineAnim(sprite, 3);
|
||||
sprite->data[0]++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (sprite->affineAnimEnded)
|
||||
{
|
||||
sprite->data[4]++;
|
||||
sprite->data[0] = 1;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3)
|
||||
{
|
||||
gSprites[spriteId2].pos2.y = -40;
|
||||
gSprites[spriteId3].pos2.y = -40;
|
||||
gSprites[spriteId2].invisible = FALSE;
|
||||
gSprites[spriteId3].invisible = FALSE;
|
||||
gSprites[spriteId2].callback = sub_815F470;
|
||||
gSprites[spriteId3].callback = sub_815F470;
|
||||
}
|
||||
|
||||
bool32 sub_815F444(u8 spriteId)
|
||||
{
|
||||
return gSprites[spriteId].callback == sub_815F470;
|
||||
}
|
||||
|
||||
void sub_815F470(struct Sprite * sprite)
|
||||
{
|
||||
s16 * data = sprite->data;
|
||||
s32 y;
|
||||
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
data[4] = 64;
|
||||
data[5] = sprite->pos2.y << 4;
|
||||
data[0]++;
|
||||
//fallthrough
|
||||
case 1:
|
||||
data[5] += data[4];
|
||||
data[4]++;
|
||||
sprite->pos2.y = data[5] >> 4;
|
||||
if (sprite->pos2.y >= 0)
|
||||
{
|
||||
PlaySE(SE_TRACK_STOP);
|
||||
sprite->pos2.y = 0;
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
data[1] += 12;
|
||||
if (data[1] >= 128)
|
||||
{
|
||||
PlaySE(SE_TRACK_STOP);
|
||||
data[1] = 0;
|
||||
data[0]++;
|
||||
}
|
||||
y = gSineTable[data[1]];
|
||||
sprite->pos2.y = -(y >> 4);
|
||||
break;
|
||||
case 3:
|
||||
data[1] += 16;
|
||||
if (data[1] >= 128)
|
||||
{
|
||||
PlaySE(SE_TRACK_STOP);
|
||||
data[1] = 0;
|
||||
data[0]++;
|
||||
}
|
||||
sprite->pos2.y = -(gSineTable[data[1]] >> 5);
|
||||
break;
|
||||
case 4:
|
||||
if (++data[1] > 40)
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const u16 gUnknown_847A328[] = INCBIN_U16("data/graphics/unk_847a348.gbapal");
|
||||
const u16 gUnknown_847A348[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz");
|
||||
|
||||
void sub_815F564(u16 tilesTag, u16 palTag)
|
||||
{
|
||||
struct CompressedSpriteSheet spriteSheet = {(const void *)gUnknown_847A348, 0xE00};
|
||||
struct SpritePalette spritePalette = {gUnknown_847A328};
|
||||
spriteSheet.tag = tilesTag;
|
||||
spritePalette.tag = palTag;
|
||||
LoadCompressedObjectPic(&spriteSheet);
|
||||
LoadSpritePalette(&spritePalette);
|
||||
}
|
||||
|
||||
const struct OamData gOamData_847A7AC = {
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
.shape = ST_OAM_SQUARE,
|
||||
.size = 2
|
||||
};
|
||||
|
||||
const struct OamData gOamData_847A7B4 = {
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
.size = 3
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7BC[] = {
|
||||
ANIMCMD_FRAME( 0, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7C4[] = {
|
||||
ANIMCMD_FRAME(16, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7CC[] = {
|
||||
ANIMCMD_FRAME(32, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_847A7D4[] = {
|
||||
gUnknown_847A7BC,
|
||||
gUnknown_847A7C4,
|
||||
gUnknown_847A7CC
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7E0[] = {
|
||||
ANIMCMD_FRAME(48, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7E8[] = {
|
||||
ANIMCMD_FRAME(80, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_847A7F0[] = {
|
||||
gUnknown_847A7E0,
|
||||
gUnknown_847A7E8
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A7F8[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A808[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_FRAME( 0x10, -0x10, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A820[] = {
|
||||
AFFINEANIMCMD_FRAME(-0x12, 0x12, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A830[] = {
|
||||
AFFINEANIMCMD_FRAME( 0x6, -0x6, 0, 8),
|
||||
AFFINEANIMCMD_FRAME( -0x4, 0x4, 0, 8),
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_847A850[] = {
|
||||
gUnknown_847A7F8,
|
||||
gUnknown_847A808,
|
||||
gUnknown_847A820,
|
||||
gUnknown_847A830
|
||||
};
|
||||
|
||||
u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
struct SpriteTemplate spriteTemplate = {
|
||||
.oam = &gOamData_847A7AC,
|
||||
.anims = gUnknown_847A7D4,
|
||||
.affineAnims = gUnknown_847A850,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
spriteTemplate.tileTag = tilesTag;
|
||||
spriteTemplate.paletteTag = palTag;
|
||||
return CreateSprite(&spriteTemplate, x, y, subpriority);
|
||||
}
|
||||
|
||||
void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p)
|
||||
{
|
||||
struct SpriteTemplate spriteTemplate = {
|
||||
.oam = &gOamData_847A7B4,
|
||||
.anims = gUnknown_847A7F0,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
spriteTemplate.tileTag = tilesTag;
|
||||
spriteTemplate.paletteTag = palTag;
|
||||
*spriteId2_p = CreateSprite(&spriteTemplate, x - 32, y, subpriority);
|
||||
*spriteId3_p = CreateSprite(&spriteTemplate, x + 32, y, subpriority);
|
||||
gSprites[*spriteId2_p].invisible = TRUE;
|
||||
gSprites[*spriteId3_p].invisible = TRUE;
|
||||
StartSpriteAnim(&gSprites[*spriteId3_p], 1);
|
||||
}
|
||||
Reference in New Issue
Block a user