Merge branch 'master' into tilemap-docs

This commit is contained in:
octorock
2023-12-28 14:59:23 +01:00
495 changed files with 14619 additions and 16191 deletions
+1 -1
View File
@@ -462,7 +462,7 @@
.2byte \s
.endm
.macro _0807E9F0
.macro UpdateFusion
.2byte 0x0456
.endm
-131
View File
@@ -1,131 +0,0 @@
.syntax unified
ldr r3, _08016DF0 @ =gScreen
ldrh r1, [r3]
ldrh r0, [r3, #6]
ands r0, r1
movs r1, #0x80
lsls r1, r1, #0x13
strh r0, [r1]
adds r1, #8
ldrh r0, [r3, #8]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x14]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x20]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x2c]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0xa]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0xc]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x16]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x18]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x22]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x24]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x2e]
strh r0, [r1]
adds r1, #2
ldrh r0, [r3, #0x30]
strh r0, [r1]
adds r1, r3, #0
adds r1, #0x38
ldr r2, _08016DF4 @ =0x04000020
ldrh r0, [r3, #0x38]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #2]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #4]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #6]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #8]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xa]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xc]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xe]
strh r0, [r2]
adds r1, #0x10
adds r2, #2
ldrh r0, [r1]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #2]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #4]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #6]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #8]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xa]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xc]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xe]
strh r0, [r2]
adds r1, #0x10
adds r2, #2
ldrh r0, [r1]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #2]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #4]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #6]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #8]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xa]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0xc]
strh r0, [r2]
adds r2, #4
ldrh r0, [r1, #0xe]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0x10]
strh r0, [r2]
adds r2, #2
ldrh r0, [r1, #0x12]
strh r0, [r2]
bx lr
.align 2, 0
_08016DF0: .4byte gScreen
_08016DF4: .4byte 0x04000020
.syntax divided
@@ -1,454 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0
mov sl, r1
cmp r6, #0
bne _0801A58C
ldr r0, _0801A588 @ =0x0000FFFF
b _0801A8C2
.align 2, 0
_0801A588: .4byte 0x0000FFFF
_0801A58C:
adds r4, r6, #0
adds r4, #0x38
ldrb r0, [r4]
bl GetLayerByIndex
mov r8, r0
ldr r0, _0801A668 @ =0x00005004
add r0, r8
mov ip, r0
movs r5, #4
movs r7, #2
ldrb r0, [r6, #0x14]
lsrs r0, r0, #1
mov sb, r4
cmp r0, #1
beq _0801A678
cmp r0, #1
ble _0801A5BC
cmp r0, #2
bne _0801A5B6
b _0801A73C
_0801A5B6:
cmp r0, #3
bne _0801A5BC
b _0801A7FC
_0801A5BC:
movs r1, #0x2e
ldrsh r0, [r6, r1]
ldr r2, _0801A66C @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r2, #8]
adds r1, #0xa
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
movs r3, #0xdc
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A5EA:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
beq _0801A600
subs r1, #2
subs r4, #1
subs r5, #1
cmp r5, #0
bne _0801A5EA
_0801A600:
subs r4, #0x40
movs r3, #0xdd
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A60A:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A620
adds r7, #1
subs r1, #0x80
subs r4, #0x40
cmp r7, #3
bls _0801A60A
_0801A620:
mov r2, sl
cmp r2, #0
bne _0801A628
b _0801A8C0
_0801A628:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetMetaTileType
adds r5, r0, #0
ldr r1, _0801A670 @ =0xFFFFFC97
adds r0, r5, r1
cmp r0, #1
bls _0801A63E
b _0801A8B4
_0801A63E:
ldr r2, _0801A674 @ =0x00001FC4
adds r0, r4, r2
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
blo _0801A64E
b _0801A8B6
_0801A64E:
ldrb r0, [r1]
cmp r0, #0
beq _0801A656
b _0801A8B4
_0801A656:
adds r5, #1
cmp r5, r7
blo _0801A65E
b _0801A8B6
_0801A65E:
adds r0, r1, r5
ldrb r0, [r0]
cmp r0, #0
beq _0801A656
b _0801A8B4
.align 2, 0
_0801A668: .4byte 0x00005004
_0801A66C: .4byte gRoomControls
_0801A670: .4byte 0xFFFFFC97
_0801A674: .4byte 0x00001FC4
_0801A678:
movs r0, #0x2e
ldrsh r1, [r6, r0]
ldr r3, _0801A730 @ =gRoomControls
ldrh r0, [r3, #6]
subs r0, #0xa
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
movs r6, #0xdc
lsls r6, r6, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A6A8:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A6BE
adds r1, #0x80
adds r4, #0x40
subs r5, #1
cmp r5, #0
bne _0801A6A8
_0801A6BE:
subs r4, #0x40
movs r3, #0xdd
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A6C8:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A6DE
adds r7, #1
subs r1, #0x80
subs r4, #0x40
cmp r7, #3
bls _0801A6C8
_0801A6DE:
mov r2, sl
cmp r2, #0
bne _0801A6E6
b _0801A8C0
_0801A6E6:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetMetaTileType
adds r5, r0, #0
ldr r0, _0801A734 @ =0x00000369
cmp r5, r0
beq _0801A700
adds r0, #4
cmp r5, r0
beq _0801A700
b _0801A8B4
_0801A700:
adds r0, r4, r7
ldr r1, _0801A738 @ =0x00002004
adds r0, r0, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
blo _0801A712
b _0801A8B6
_0801A712:
ldrb r0, [r1]
cmp r0, #0
beq _0801A71A
b _0801A8B4
_0801A71A:
adds r5, #1
cmp r5, r7
blo _0801A722
b _0801A8B6
_0801A722:
lsls r0, r5, #6
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0
beq _0801A71A
b _0801A8B4
.align 2, 0
_0801A730: .4byte gRoomControls
_0801A734: .4byte 0x00000369
_0801A738: .4byte 0x00002004
_0801A73C:
movs r1, #0x2e
ldrsh r0, [r6, r1]
ldr r2, _0801A7E8 @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r2, #8]
subs r1, #0xa
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
ldr r6, _0801A7EC @ =0x0000036F
lsls r0, r4, #1
adds r1, r0, r2
_0801A76A:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A780
adds r1, #2
adds r4, #1
subs r5, #1
cmp r5, #0
bne _0801A76A
_0801A780:
subs r4, #1
ldr r3, _0801A7F0 @ =0x00000372
lsls r0, r4, #1
adds r1, r0, r2
_0801A788:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A79E
adds r7, #1
subs r1, #2
subs r4, #1
cmp r7, #3
bls _0801A788
_0801A79E:
mov r2, sl
cmp r2, #0
bne _0801A7A6
b _0801A8C0
_0801A7A6:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetMetaTileType
adds r5, r0, #0
ldr r0, _0801A7F4 @ =0x00000369
cmp r5, r0
beq _0801A7BE
adds r0, #2
cmp r5, r0
bne _0801A8B4
_0801A7BE:
lsls r0, r7, #6
adds r0, r4, r0
ldr r1, _0801A7F8 @ =0x00002004
adds r0, r0, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
bhs _0801A8B6
ldrb r0, [r1]
cmp r0, #0
bne _0801A8B4
_0801A7D6:
adds r5, #1
cmp r5, r7
bhs _0801A8B6
adds r0, r1, r5
ldrb r0, [r0]
cmp r0, #0
beq _0801A7D6
b _0801A8B4
.align 2, 0
_0801A7E8: .4byte gRoomControls
_0801A7EC: .4byte 0x0000036F
_0801A7F0: .4byte 0x00000372
_0801A7F4: .4byte 0x00000369
_0801A7F8: .4byte 0x00002004
_0801A7FC:
movs r0, #0x2e
ldrsh r1, [r6, r0]
ldr r3, _0801A890 @ =gRoomControls
ldrh r0, [r3, #6]
adds r0, #0xa
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
ldr r6, _0801A894 @ =0x0000036F
lsls r0, r4, #1
adds r1, r0, r2
_0801A82A:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A840
subs r1, #0x80
subs r4, #0x40
subs r5, #1
cmp r5, #0
bne _0801A82A
_0801A840:
subs r4, #1
ldr r3, _0801A898 @ =0x00000372
lsls r0, r4, #1
adds r1, r0, r2
_0801A848:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A85E
adds r7, #1
subs r1, #2
subs r4, #1
cmp r7, #3
bls _0801A848
_0801A85E:
mov r2, sl
cmp r2, #0
beq _0801A8C0
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetMetaTileType
adds r5, r0, #0
ldr r0, _0801A89C @ =0x00000369
cmp r5, r0
beq _0801A87C
adds r0, #3
cmp r5, r0
bne _0801A8B4
_0801A87C:
ldr r1, _0801A8A0 @ =0x00002003
adds r0, r4, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
bhs _0801A8B6
ldrb r0, [r1]
b _0801A8B0
.align 2, 0
_0801A890: .4byte gRoomControls
_0801A894: .4byte 0x0000036F
_0801A898: .4byte 0x00000372
_0801A89C: .4byte 0x00000369
_0801A8A0: .4byte 0x00002003
_0801A8A4:
adds r5, #1
cmp r5, r7
bhs _0801A8B6
lsls r0, r5, #6
adds r0, r0, r1
ldrb r0, [r0]
_0801A8B0:
cmp r0, #0
beq _0801A8A4
_0801A8B4:
ldr r4, _0801A8CC @ =0x0000FFFF
_0801A8B6:
mov r0, sl
cmp r0, #0
beq _0801A8C0
lsls r0, r7, #0xc
orrs r4, r0
_0801A8C0:
adds r0, r4, #0
_0801A8C2:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801A8CC: .4byte 0x0000FFFF
.syntax divided
@@ -1,264 +0,0 @@
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r6, r0, #0
adds r5, r1, #0
ldr r1, _0807D2B0 @ =gRoomControls
movs r0, #0xa
ldrsh r2, [r1, r0]
ldrh r0, [r1, #6]
subs r3, r2, r0
movs r0, #0xc
ldrsh r2, [r1, r0]
ldrh r0, [r1, #8]
subs r4, r2, r0
ldrb r0, [r1, #0x10]
mov r8, r1
cmp r0, #1
beq _0807D330
cmp r0, #1
bgt _0807D2B4
cmp r0, #0
beq _0807D2BA
b _0807D404
.align 2, 0
_0807D2B0: .4byte gRoomControls
_0807D2B4:
cmp r0, #2
beq _0807D3A0
b _0807D404
_0807D2BA:
mov r2, r8
ldrh r1, [r2, #0x18]
movs r0, #3
ands r0, r1
cmp r0, #1
beq _0807D2C8
b _0807D462
_0807D2C8:
movs r2, #0x1c
asrs r3, r3, #4
mov sb, r3
movs r3, #0x40
adds r3, r3, r5
mov ip, r3
ldr r4, _0807D328 @ =0x040000D4
ldr r7, _0807D32C @ =0x80000020
movs r0, #0xe8
lsls r0, r0, #3
adds r3, r5, r0
subs r0, #0x80
adds r1, r5, r0
_0807D2E2:
str r1, [r4]
str r3, [r4, #4]
str r7, [r4, #8]
ldr r0, [r4, #8]
subs r3, #0x40
subs r1, #0x40
subs r2, #1
cmp r2, #0
bgt _0807D2E2
mov r1, r8
ldrh r0, [r1, #0x20]
lsrs r0, r0, #4
subs r0, #1
ldrh r1, [r1, #0x18]
lsrs r1, r1, #2
subs r0, r0, r1
lsls r0, r0, #8
mov r2, sb
lsls r1, r2, #1
adds r0, r0, r1
lsls r0, r0, #1
adds r6, r6, r0
ldr r0, _0807D328 @ =0x040000D4
str r6, [r0]
str r5, [r0, #4]
ldr r2, _0807D32C @ =0x80000020
str r2, [r0, #8]
ldr r1, [r0, #8]
movs r3, #0x80
lsls r3, r3, #1
adds r1, r6, r3
str r1, [r0]
mov r1, ip
b _0807D3F0
.align 2, 0
_0807D328: .4byte 0x040000D4
_0807D32C: .4byte 0x80000020
_0807D330:
mov r2, r8
ldrh r3, [r2, #0x18]
movs r0, #3
ands r0, r3
cmp r0, #0
beq _0807D33E
b _0807D462
_0807D33E:
asrs r7, r4, #4
movs r0, #0x3c
adds r0, r0, r5
mov sb, r0
cmp r3, #0
beq _0807D36A
ldr r4, _0807D398 @ =0x040000D4
ldr r1, _0807D39C @ =0x8000001E
mov ip, r1
adds r3, r5, #4
adds r1, r5, #0
movs r2, #0x15
_0807D356:
str r3, [r4]
str r1, [r4, #4]
mov r0, ip
str r0, [r4, #8]
ldr r0, [r4, #8]
adds r3, #0x40
adds r1, #0x40
subs r2, #1
cmp r2, #0
bge _0807D356
_0807D36A:
lsls r1, r7, #8
mov r2, r8
ldrh r0, [r2, #0x18]
lsrs r0, r0, #2
lsls r0, r0, #1
adds r1, r1, r0
lsls r1, r1, #1
adds r6, r6, r1
mov r5, sb
movs r1, #0x80
lsls r1, r1, #1
movs r2, #0x15
_0807D382:
ldrh r0, [r6]
strh r0, [r5]
ldrh r0, [r6, #2]
strh r0, [r5, #2]
adds r5, #0x40
adds r6, r6, r1
subs r2, #1
cmp r2, #0
bge _0807D382
b _0807D462
.align 2, 0
_0807D398: .4byte 0x040000D4
_0807D39C: .4byte 0x8000001E
_0807D3A0:
mov r0, r8
ldrh r1, [r0, #0x18]
movs r0, #3
ands r0, r1
cmp r0, #0
bne _0807D462
lsls r2, r1, #0x10
cmp r2, #0
beq _0807D3C2
ldr r1, _0807D3F8 @ =0x040000D4
adds r0, r5, #0
adds r0, #0x80
str r0, [r1]
str r5, [r1, #4]
ldr r0, _0807D3FC @ =0x800003C0
str r0, [r1, #8]
ldr r0, [r1, #8]
_0807D3C2:
lsrs r0, r2, #0x12
lsls r0, r0, #8
asrs r1, r3, #4
lsls r1, r1, #1
adds r0, r0, r1
lsls r0, r0, #1
adds r6, r6, r0
ldr r0, _0807D3F8 @ =0x040000D4
str r6, [r0]
movs r2, #0xa0
lsls r2, r2, #3
adds r1, r5, r2
str r1, [r0, #4]
ldr r2, _0807D400 @ =0x80000020
str r2, [r0, #8]
ldr r1, [r0, #8]
movs r3, #0x80
lsls r3, r3, #1
adds r1, r6, r3
str r1, [r0]
movs r3, #0xa8
lsls r3, r3, #3
adds r1, r5, r3
_0807D3F0:
str r1, [r0, #4]
str r2, [r0, #8]
ldr r0, [r0, #8]
b _0807D462
.align 2, 0
_0807D3F8: .4byte 0x040000D4
_0807D3FC: .4byte 0x800003C0
_0807D400: .4byte 0x80000020
_0807D404:
mov r0, r8
ldrh r1, [r0, #0x18]
movs r0, #3
ands r0, r1
cmp r0, #1
bne _0807D462
movs r2, #0
asrs r7, r4, #4
mov ip, r5
_0807D416:
movs r1, #0x1d
mov r3, ip
adds r3, #0x3a
_0807D41C:
ldrh r0, [r3]
strh r0, [r3, #4]
subs r3, #2
subs r1, #1
cmp r1, #0
bge _0807D41C
movs r1, #0x40
add ip, r1
adds r2, #1
cmp r2, #0x15
ble _0807D416
lsls r0, r7, #8
mov r2, r8
ldrh r1, [r2, #0x1e]
lsrs r1, r1, #4
subs r1, #1
ldrh r2, [r2, #0x18]
lsrs r2, r2, #2
subs r1, r1, r2
lsls r1, r1, #1
adds r0, r0, r1
lsls r0, r0, #1
adds r6, r6, r0
movs r1, #0x80
lsls r1, r1, #1
movs r2, #0x15
_0807D450:
ldrh r0, [r6]
strh r0, [r5]
ldrh r0, [r6, #2]
strh r0, [r5, #2]
adds r5, #0x40
adds r6, r6, r1
subs r2, #1
cmp r2, #0
bge _0807D450
_0807D462:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,346 +0,0 @@
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
str r0, [sp]
str r1, [sp, #4]
ldr r0, _0807D494 @ =gRoomControls
ldrb r2, [r0, #0x10]
mov sb, r0
cmp r2, #1
bne _0807D488
b _0807D5C4
_0807D488:
cmp r2, #1
bgt _0807D498
cmp r2, #0
beq _0807D4A4
b _0807D6CC
.align 2, 0
_0807D494: .4byte gRoomControls
_0807D498:
cmp r2, #2
beq _0807D4A4
cmp r2, #3
bne _0807D4A2
b _0807D5C4
_0807D4A2:
b _0807D6CC
_0807D4A4:
mov r1, sb
movs r2, #0xa
ldrsh r0, [r1, r2]
ldrh r1, [r1, #6]
subs r5, r0, r1
cmp r5, #7
ble _0807D4B4
subs r5, #8
_0807D4B4:
mov r3, sb
ldr r0, [r3, #0x30]
movs r2, #0x2e
ldrsh r0, [r0, r2]
subs r0, r0, r1
subs r3, r0, #4
mov r8, r3
cmp r3, #7
ble _0807D4CA
subs r0, #0xc
mov r8, r0
_0807D4CA:
mov r0, sb
movs r2, #0xc
ldrsh r1, [r0, r2]
ldrh r0, [r0, #8]
subs r1, r1, r0
mov ip, r1
cmp r1, #7
ble _0807D4E0
movs r3, #8
rsbs r3, r3, #0
add ip, r3
_0807D4E0:
mov r1, sb
ldrh r0, [r1, #0x18]
lsls r0, r0, #3
mov r2, r8
subs r0, r2, r0
adds r7, r5, #0
adds r7, #0xf8
cmp r0, r5
blt _0807D548
mov r1, ip
asrs r3, r1, #3
lsls r1, r3, #8
ldr r2, [sp]
adds r1, r2, r1
asrs r0, r0, #3
lsls r2, r0, #1
adds r4, r1, r2
movs r1, #0x1f
ands r0, r1
lsls r0, r0, #1
ldr r2, [sp, #4]
adds r6, r2, r0
ands r3, r1
lsls r2, r3, #5
mov r3, sb
ldrh r0, [r3, #0x20]
lsls r1, r0, #0x10
lsrs r0, r1, #0x10
cmp r0, #0xaf
bhi _0807D520
lsrs r3, r1, #0x13
b _0807D522
_0807D520:
movs r3, #0x16
_0807D522:
adds r7, r5, #0
adds r7, #0xf8
cmp r3, #0
ble _0807D548
ldr r0, _0807D55C @ =0x000003FF
mov sl, r0
_0807D52E:
lsls r0, r2, #1
adds r0, r0, r6
ldrh r1, [r4]
strh r1, [r0]
movs r1, #0x80
lsls r1, r1, #1
adds r4, r4, r1
adds r2, #0x20
mov r0, sl
ands r2, r0
subs r3, #1
cmp r3, #0
bgt _0807D52E
_0807D548:
mov r1, sb
ldrh r0, [r1, #0x18]
adds r0, #1
lsls r0, r0, #3
add r0, r8
ldrh r2, [r1, #0x1e]
cmp r7, r2
blt _0807D560
adds r1, r7, #0
b _0807D566
.align 2, 0
_0807D55C: .4byte 0x000003FF
_0807D560:
movs r3, #0x80
lsls r3, r3, #1
adds r1, r5, r3
_0807D566:
cmp r0, r1
blt _0807D56C
b _0807D6CC
_0807D56C:
mov r1, ip
asrs r3, r1, #3
lsls r1, r3, #8
ldr r2, [sp]
adds r1, r2, r1
asrs r0, r0, #3
lsls r2, r0, #1
adds r4, r1, r2
movs r1, #0x1f
ands r0, r1
lsls r0, r0, #1
ldr r2, [sp, #4]
adds r6, r2, r0
ands r3, r1
lsls r2, r3, #5
mov r3, sb
ldrh r0, [r3, #0x20]
lsls r1, r0, #0x10
lsrs r0, r1, #0x10
cmp r0, #0xaf
bhi _0807D59A
lsrs r3, r1, #0x13
b _0807D59C
_0807D59A:
movs r3, #0x16
_0807D59C:
cmp r3, #0
bgt _0807D5A2
b _0807D6CC
_0807D5A2:
movs r7, #0x80
lsls r7, r7, #1
ldr r5, _0807D5C0 @ =0x000003FF
_0807D5A8:
lsls r0, r2, #1
adds r0, r0, r6
ldrh r1, [r4]
strh r1, [r0]
adds r4, r4, r7
adds r2, #0x20
ands r2, r5
subs r3, #1
cmp r3, #0
bgt _0807D5A8
b _0807D6CC
.align 2, 0
_0807D5C0: .4byte 0x000003FF
_0807D5C4:
mov r1, sb
movs r2, #0xc
ldrsh r0, [r1, r2]
ldrh r2, [r1, #8]
subs r5, r0, r2
cmp r5, #7
ble _0807D5D4
subs r5, #8
_0807D5D4:
mov r3, sb
movs r0, #0xa
ldrsh r1, [r3, r0]
ldrh r0, [r3, #6]
subs r1, r1, r0
mov r8, r1
cmp r1, #7
ble _0807D5EA
movs r1, #8
rsbs r1, r1, #0
add r8, r1
_0807D5EA:
mov r3, sb
ldr r0, [r3, #0x30]
movs r1, #0x32
ldrsh r0, [r0, r1]
subs r0, r0, r2
subs r2, r0, #4
mov ip, r2
cmp r2, #7
ble _0807D600
subs r0, #0xc
mov ip, r0
_0807D600:
mov r3, sb
ldrh r0, [r3, #0x18]
lsls r0, r0, #3
mov r1, ip
subs r0, r1, r0
adds r7, r5, #0
adds r7, #0xa8
movs r2, #0xb0
adds r2, r2, r5
mov sl, r2
cmp r0, r5
blt _0807D66A
asrs r2, r0, #3
lsls r0, r2, #8
ldr r3, [sp]
adds r0, r3, r0
mov r1, r8
asrs r3, r1, #3
lsls r1, r3, #1
adds r4, r0, r1
movs r0, #0x1f
ands r2, r0
lsls r2, r2, #6
ldr r1, [sp, #4]
adds r6, r1, r2
adds r2, r0, #0
ands r2, r3
mov r3, sb
ldrh r0, [r3, #0x1e]
lsls r1, r0, #0x10
lsrs r0, r1, #0x10
cmp r0, #0xff
bhi _0807D646
lsrs r3, r1, #0x13
b _0807D648
_0807D646:
movs r3, #0x20
_0807D648:
adds r7, r5, #0
adds r7, #0xa8
adds r5, #0xb0
mov sl, r5
cmp r3, #0
ble _0807D66A
movs r5, #0x1f
_0807D656:
lsls r0, r2, #1
adds r0, r0, r6
ldrh r1, [r4]
strh r1, [r0]
adds r4, #2
adds r2, #1
ands r2, r5
subs r3, #1
cmp r3, #0
bgt _0807D656
_0807D66A:
mov r1, sb
ldrh r0, [r1, #0x18]
adds r0, #1
lsls r0, r0, #3
add r0, ip
mov r2, sl
ldrh r1, [r1, #0x20]
cmp r7, r1
blt _0807D67E
adds r2, r7, #0
_0807D67E:
cmp r0, r2
bge _0807D6CC
asrs r2, r0, #3
lsls r0, r2, #8
ldr r1, [sp]
adds r0, r1, r0
mov r1, r8
asrs r3, r1, #3
lsls r1, r3, #1
adds r4, r0, r1
movs r0, #0x1f
ands r2, r0
lsls r2, r2, #6
ldr r1, [sp, #4]
adds r6, r1, r2
adds r2, r0, #0
ands r2, r3
mov r3, sb
ldrh r0, [r3, #0x1e]
lsls r1, r0, #0x10
lsrs r0, r1, #0x10
cmp r0, #0xff
bhi _0807D6B0
lsrs r3, r1, #0x13
b _0807D6B2
_0807D6B0:
movs r3, #0x20
_0807D6B2:
cmp r3, #0
ble _0807D6CC
movs r5, #0x1f
_0807D6B8:
lsls r0, r2, #1
adds r0, r0, r6
ldrh r1, [r4]
strh r1, [r0]
adds r4, #2
adds r2, #1
ands r2, r5
subs r3, #1
cmp r3, #0
bgt _0807D6B8
_0807D6CC:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -1,482 +0,0 @@
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x44
str r0, [sp]
str r1, [sp, #4]
ldr r5, _0807D8BC @ =gRoomControls
ldrh r0, [r5, #0x18]
cmp r0, #0
bne _0807D6F2
b _0807DA62
_0807D6F2:
ldrh r0, [r5, #0x1a]
cmp r0, #0
bne _0807D6FA
b _0807DA62
_0807D6FA:
movs r1, #0xa
ldrsh r0, [r5, r1]
ldrh r1, [r5, #6]
subs r0, r0, r1
movs r4, #0x10
rsbs r4, r4, #0
ands r0, r4
str r0, [sp, #0x24]
ldr r3, [r5, #0x30]
movs r2, #0x2e
ldrsh r0, [r3, r2]
subs r0, r0, r1
movs r2, #8
rsbs r2, r2, #0
ands r0, r2
str r0, [sp, #0x14]
ldr r1, [sp, #0x24]
subs r0, r0, r1
str r0, [sp, #0x1c]
movs r1, #0xc
ldrsh r0, [r5, r1]
ldrh r1, [r5, #8]
subs r0, r0, r1
ands r0, r4
str r0, [sp, #0x28]
movs r4, #0x32
ldrsh r0, [r3, r4]
subs r0, r0, r1
ands r0, r2
str r0, [sp, #0x18]
ldr r1, [sp, #0x28]
subs r0, r0, r1
str r0, [sp, #0x20]
ldrh r0, [r5, #0x18]
adds r2, r0, #0
muls r2, r0, r2
str r2, [sp, #0xc]
ldrh r3, [r5, #0x1a]
str r3, [sp, #8]
adds r4, r3, #0
muls r4, r3, r4
str r4, [sp, #0x10]
adds r4, r0, #0
movs r0, #0
mov sb, r0
lsls r0, r4, #1
rsbs r0, r0, #0
adds r0, #1
ldr r1, [sp, #0x10]
muls r0, r1, r0
lsls r6, r2, #1
adds r7, r0, r6
adds r2, r4, #0
muls r2, r1, r2
mov r8, r2
mov r0, r8
ldr r1, [sp, #0xc]
bl __divsi3
mov ip, r0
cmp sb, ip
ble _0807D778
b _0807D8D8
_0807D778:
mov sl, r5
ldr r3, [sp, #0xc]
adds r0, r6, r3
lsls r0, r0, #1
str r0, [sp, #0x3c]
mov r0, r8
str r0, [sp, #0x40]
ldr r1, [sp, #0x14]
subs r1, r1, r4
mov r8, r1
ldr r2, [sp, #0x14]
adds r6, r4, r2
movs r0, #0x80
lsls r0, r0, #1
ldr r3, [sp, #0x24]
adds r0, r3, r0
str r0, [sp, #0x2c]
_0807D79A:
ldr r0, [sp, #0x28]
adds r0, #0xb0
ldr r1, [sp, #0x18]
add r1, sb
cmp r0, r1
ble _0807D812
ldr r0, [sp, #0x20]
add r0, sb
asrs r0, r0, #3
movs r5, #0x1f
ands r0, r5
cmp r0, #0x1f
beq _0807D812
lsls r0, r0, #6
ldr r3, [sp, #4]
adds r2, r3, r0
asrs r0, r1, #3
lsls r0, r0, #8
ldr r1, [sp]
adds r3, r1, r0
ldr r0, [sp, #0x2c]
cmp r0, r6
ble _0807D7EA
ldr r0, [sp, #0x1c]
adds r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
asrs r0, r6, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r1, sl
ldrh r0, [r1, #0x1c]
movs r1, #1
orrs r0, r1
mov r1, sl
strh r0, [r1, #0x1c]
_0807D7EA:
ldr r0, [sp, #0x24]
cmp r0, r8
bge _0807D812
ldr r0, [sp, #0x1c]
subs r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
mov r2, r8
asrs r0, r2, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r3, sl
ldrh r0, [r3, #0x1c]
movs r1, #2
orrs r0, r1
strh r0, [r3, #0x1c]
_0807D812:
ldr r0, [sp, #0x18]
mov r2, sb
subs r1, r0, r2
adds r0, r1, #0
adds r0, #8
ldr r3, [sp, #0x28]
cmp r3, r0
bge _0807D88E
ldr r3, [sp, #0x20]
subs r0, r3, r2
asrs r0, r0, #3
movs r5, #0x1f
ands r0, r5
cmp r0, #0x1f
beq _0807D88E
lsls r0, r0, #6
ldr r3, [sp, #4]
adds r2, r3, r0
asrs r0, r1, #3
lsls r0, r0, #8
ldr r1, [sp]
adds r3, r1, r0
ldr r0, [sp, #0x2c]
cmp r0, r6
ble _0807D866
ldr r0, [sp, #0x1c]
adds r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
asrs r0, r6, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r1, sl
ldrh r0, [r1, #0x1c]
movs r1, #4
orrs r0, r1
mov r1, sl
strh r0, [r1, #0x1c]
_0807D866:
ldr r0, [sp, #0x24]
cmp r0, r8
bge _0807D88E
ldr r0, [sp, #0x1c]
subs r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
mov r2, r8
asrs r0, r2, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r3, sl
ldrh r0, [r3, #0x1c]
movs r1, #8
orrs r0, r1
strh r0, [r3, #0x1c]
_0807D88E:
cmp r7, #0
ble _0807D8C0
lsls r0, r4, #2
rsbs r0, r0, #0
adds r0, #4
ldr r1, [sp, #0x10]
muls r0, r1, r0
ldr r2, [sp, #0x3c]
adds r0, r0, r2
adds r7, r7, r0
ldr r3, [sp, #0x40]
subs r3, r3, r1
str r3, [sp, #0x40]
movs r0, #1
add r8, r0
subs r6, #1
subs r4, #1
adds r0, r3, #0
ldr r1, [sp, #0xc]
bl __divsi3
mov ip, r0
b _0807D8C4
.align 2, 0
_0807D8BC: .4byte gRoomControls
_0807D8C0:
ldr r1, [sp, #0x3c]
adds r7, r7, r1
_0807D8C4:
ldr r2, [sp, #0xc]
lsls r0, r2, #2
ldr r3, [sp, #0x3c]
adds r3, r3, r0
str r3, [sp, #0x3c]
movs r0, #1
add sb, r0
cmp sb, ip
bgt _0807D8D8
b _0807D79A
_0807D8D8:
movs r4, #0
ldr r1, [sp, #8]
mov sb, r1
ldr r2, [sp, #0x10]
lsls r6, r2, #1
lsls r0, r1, #1
rsbs r0, r0, #0
adds r0, #1
ldr r3, [sp, #0xc]
muls r0, r3, r0
adds r7, r6, r0
mov r5, sb
muls r5, r3, r5
adds r0, r5, #0
adds r1, r2, #0
bl __divsi3
mov ip, r0
cmp r4, ip
ble _0807D902
b _0807DA62
_0807D902:
ldr r0, _0807DA40 @ =gRoomControls
mov sl, r0
ldr r1, [sp, #0x10]
adds r0, r6, r1
lsls r0, r0, #1
str r0, [sp, #0x34]
ldr r6, [sp, #0x14]
mov r8, r6
str r5, [sp, #0x38]
movs r3, #0x80
lsls r3, r3, #1
ldr r2, [sp, #0x24]
adds r3, r2, r3
str r3, [sp, #0x30]
_0807D91E:
ldr r0, [sp, #0x28]
adds r0, #0xb0
ldr r1, [sp, #0x18]
add r1, sb
cmp r0, r1
ble _0807D996
ldr r0, [sp, #0x20]
add r0, sb
asrs r0, r0, #3
movs r5, #0x1f
ands r0, r5
cmp r0, #0x1f
beq _0807D996
lsls r0, r0, #6
ldr r3, [sp, #4]
adds r2, r3, r0
asrs r0, r1, #3
lsls r0, r0, #8
ldr r1, [sp]
adds r3, r1, r0
ldr r0, [sp, #0x30]
cmp r0, r6
ble _0807D96E
ldr r0, [sp, #0x1c]
adds r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
asrs r0, r6, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r1, sl
ldrh r0, [r1, #0x1c]
movs r1, #0x10
orrs r0, r1
mov r1, sl
strh r0, [r1, #0x1c]
_0807D96E:
ldr r0, [sp, #0x24]
cmp r0, r8
bge _0807D996
ldr r0, [sp, #0x1c]
subs r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
mov r2, r8
asrs r0, r2, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r3, sl
ldrh r0, [r3, #0x1c]
movs r1, #0x20
orrs r0, r1
strh r0, [r3, #0x1c]
_0807D996:
ldr r0, [sp, #0x18]
mov r2, sb
subs r1, r0, r2
adds r0, r1, #0
adds r0, #8
ldr r3, [sp, #0x28]
cmp r3, r0
bge _0807DA12
ldr r3, [sp, #0x20]
subs r0, r3, r2
asrs r0, r0, #3
movs r5, #0x1f
ands r0, r5
cmp r0, #0x1f
beq _0807DA12
lsls r0, r0, #6
ldr r3, [sp, #4]
adds r2, r3, r0
asrs r0, r1, #3
lsls r0, r0, #8
ldr r1, [sp]
adds r3, r1, r0
ldr r0, [sp, #0x30]
cmp r0, r6
ble _0807D9EA
ldr r0, [sp, #0x1c]
adds r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
asrs r0, r6, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r1, sl
ldrh r0, [r1, #0x1c]
movs r1, #0x40
orrs r0, r1
mov r1, sl
strh r0, [r1, #0x1c]
_0807D9EA:
ldr r0, [sp, #0x24]
cmp r0, r8
bge _0807DA12
ldr r0, [sp, #0x1c]
subs r1, r0, r4
asrs r1, r1, #3
ands r1, r5
lsls r1, r1, #1
adds r1, r1, r2
mov r2, r8
asrs r0, r2, #3
lsls r0, r0, #1
adds r0, r0, r3
ldrh r0, [r0]
strh r0, [r1]
mov r3, sl
ldrh r0, [r3, #0x1c]
movs r1, #0x80
orrs r0, r1
strh r0, [r3, #0x1c]
_0807DA12:
cmp r7, #0
ble _0807DA44
mov r1, sb
lsls r0, r1, #2
rsbs r0, r0, #0
adds r0, #4
ldr r2, [sp, #0xc]
muls r0, r2, r0
ldr r3, [sp, #0x34]
adds r0, r3, r0
adds r7, r7, r0
ldr r0, [sp, #0x38]
subs r0, r0, r2
str r0, [sp, #0x38]
movs r1, #1
rsbs r1, r1, #0
add sb, r1
ldr r1, [sp, #0x10]
bl __divsi3
mov ip, r0
b _0807DA48
.align 2, 0
_0807DA40: .4byte gRoomControls
_0807DA44:
ldr r2, [sp, #0x34]
adds r7, r7, r2
_0807DA48:
ldr r3, [sp, #0x10]
lsls r0, r3, #2
ldr r1, [sp, #0x34]
adds r1, r1, r0
str r1, [sp, #0x34]
movs r2, #1
rsbs r2, r2, #0
add r8, r2
adds r6, #1
adds r4, #1
cmp r4, ip
bgt _0807DA62
b _0807D91E
_0807DA62:
add sp, #0x44
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-189
View File
@@ -1,189 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x20
str r0, [sp]
str r1, [sp, #4]
mov sl, r2
mov sb, r3
ldr r0, _0801E3AC @ =gUnk_03003DE4
ldrb r1, [r0]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r1, _0801E3B0 @ =gUnk_02017AA0
adds r0, r0, r1
movs r1, #0xa0
lsls r1, r1, #4
bl MemClear
cmp sl, sb
bge _0801E3DC
movs r6, #0
mov r8, sl
mov r7, r8
mov r0, r8
lsls r1, r0, #1
movs r0, #3
subs r5, r0, r1
cmp r6, r8
ble _0801E35E
b _0801E45E
_0801E35E:
mov r1, r8
lsls r0, r1, #2
ldr r4, _0801E3B4 @ =gUnk_02018EE0
adds r0, r0, r4
str r0, [sp, #0x10]
mov r1, sb
mov r0, r8
muls r0, r1, r0
str r0, [sp, #0x14]
movs r3, #0
_0801E372:
adds r0, r3, #0
mov r1, sl
str r3, [sp, #0x18]
bl Div
adds r4, r0, #0
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
str r4, [sp, #0x1c]
ldr r0, [sp, #0x14]
mov r1, sl
bl Div
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
lsls r2, r6, #2
ldr r4, _0801E3B4 @ =gUnk_02018EE0
adds r1, r2, r4
str r0, [r1]
ldr r0, [sp, #0x1c]
ldr r1, [sp, #0x10]
str r0, [r1]
ldr r3, [sp, #0x18]
cmp r5, #0
bge _0801E3B8
adds r0, r5, #6
adds r5, r0, r2
b _0801E3D2
.align 2, 0
_0801E3AC: .4byte gUnk_03003DE4
_0801E3B0: .4byte gUnk_02017AA0
_0801E3B4: .4byte gUnk_02018EE0
_0801E3B8:
adds r1, r5, #0
adds r1, #0xa
subs r0, r6, r7
lsls r0, r0, #2
adds r5, r1, r0
ldr r4, [sp, #0x10]
subs r4, #4
str r4, [sp, #0x10]
ldr r0, [sp, #0x14]
mov r1, sb
subs r0, r0, r1
str r0, [sp, #0x14]
subs r7, #1
_0801E3D2:
add r3, sb
adds r6, #1
cmp r6, r7
ble _0801E372
b _0801E45E
_0801E3DC:
movs r6, #0
mov r8, sb
mov r7, r8
mov r4, r8
lsls r1, r4, #1
movs r0, #3
subs r5, r0, r1
cmp r6, r8
bgt _0801E45E
lsls r0, r4, #2
ldr r1, _0801E438 @ =gUnk_02018EE0
adds r0, r0, r1
str r0, [sp, #8]
mov r0, sl
mov r4, r8
muls r4, r0, r4
str r4, [sp, #0xc]
movs r3, #0
_0801E400:
adds r0, r3, #0
mov r1, sb
str r3, [sp, #0x18]
bl Div
adds r4, r0, #0
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
str r4, [sp, #0x1c]
ldr r0, [sp, #0xc]
mov r1, sb
bl Div
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
lsls r2, r6, #2
ldr r4, _0801E438 @ =gUnk_02018EE0
adds r1, r2, r4
str r0, [r1]
ldr r0, [sp, #0x1c]
ldr r1, [sp, #8]
str r0, [r1]
ldr r3, [sp, #0x18]
cmp r5, #0
bge _0801E43C
adds r0, r5, #6
adds r5, r0, r2
b _0801E456
.align 2, 0
_0801E438: .4byte gUnk_02018EE0
_0801E43C:
adds r1, r5, #0
adds r1, #0xa
subs r0, r6, r7
lsls r0, r0, #2
adds r5, r1, r0
ldr r4, [sp, #8]
subs r4, #4
str r4, [sp, #8]
ldr r0, [sp, #0xc]
mov r1, sl
subs r0, r0, r1
str r0, [sp, #0xc]
subs r7, #1
_0801E456:
add r3, sl
adds r6, #1
cmp r6, r7
ble _0801E400
_0801E45E:
ldr r0, [sp]
ldr r1, [sp, #4]
mov r2, r8
bl sub_0801E290
ldr r0, _0801E48C @ =gUnk_03003DE4
ldrb r1, [r0]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r1, _0801E490 @ =gUnk_02017AA0
adds r0, r0, r1
ldr r1, _0801E494 @ =0x04000040
ldr r2, _0801E498 @ =0xA2600001
bl SetVBlankDMA
add sp, #0x20
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801E48C: .4byte gUnk_03003DE4
_0801E490: .4byte gUnk_02017AA0
_0801E494: .4byte 0x04000040
_0801E498: .4byte 0xA2600001
.syntax divided
-211
View File
@@ -1,211 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov r8, r0
str r1, [sp, #4]
mov sb, r2
adds r5, r3, #0
ldr r0, _0801E5E4 @ =0x0000FFFF
movs r2, #0xf0
lsls r2, r2, #3
ldr r1, _0801E5E8 @ =gUnk_02018EE0
bl MemFill16
adds r3, r5, #0
subs r3, #0x40
movs r2, #0xff
ands r3, r2
ldr r1, _0801E5EC @ =gSineTable
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r4, #0
ldrsh r0, [r0, r4]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
mov r4, r8
adds r7, r4, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
ldr r3, [sp, #4]
adds r3, r3, r0
mov sl, r3
adds r3, r5, #0
adds r3, #0x68
ands r3, r2
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r4, #0
ldrsh r0, [r0, r4]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
mov r4, r8
adds r6, r4, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r4, sb
muls r4, r0, r4
adds r0, r4, #0
asrs r0, r0, #8
ldr r3, [sp, #4]
adds r4, r3, r0
adds r3, r5, #0
subs r3, #0xe8
ands r3, r2
adds r0, r3, #0
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
mov r2, sb
muls r2, r0, r2
adds r0, r2, #0
asrs r0, r0, #8
mov r2, r8
adds r5, r2, r0
lsls r0, r3, #1
adds r0, r0, r1
movs r3, #0
ldrsh r0, [r0, r3]
mov r1, sb
muls r1, r0, r1
adds r0, r1, #0
asrs r0, r0, #8
ldr r2, [sp, #4]
adds r2, r2, r0
mov r8, r2
movs r0, #0
str r0, [sp]
adds r0, r7, #0
mov r1, sl
adds r2, r6, #0
adds r3, r4, #0
bl sub_0801E64C
movs r0, #1
str r0, [sp]
adds r0, r7, #0
mov r1, sl
adds r2, r5, #0
mov r3, r8
bl sub_0801E64C
movs r0, #2
str r0, [sp]
adds r0, r6, #0
adds r1, r4, #0
adds r2, r5, #0
mov r3, r8
bl sub_0801E64C
ldr r5, _0801E5F0 @ =gUnk_03003DE4
ldrb r1, [r5]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r6, _0801E5F4 @ =gUnk_02017AA0
adds r0, r0, r6
movs r1, #0xa0
lsls r1, r1, #4
bl MemClear
ldr r2, _0801E5E8 @ =gUnk_02018EE0
ldrb r1, [r5]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
adds r1, r0, r6
movs r3, #0xa0
mov sl, r3
_0801E5B0:
ldr r7, [r2]
ldr r6, [r2, #4]
ldr r5, [r2, #8]
adds r2, #0xc
cmp r7, r6
ble _0801E5C2
adds r4, r7, #0
adds r7, r6, #0
adds r6, r4, #0
_0801E5C2:
cmp r7, r5
ble _0801E5CC
adds r4, r7, #0
adds r7, r5, #0
adds r5, r4, #0
_0801E5CC:
cmp r6, r5
ble _0801E5D6
adds r4, r6, #0
adds r6, r5, #0
adds r5, r4, #0
_0801E5D6:
movs r0, #1
rsbs r0, r0, #0
cmp r7, r0
beq _0801E5F8
strb r5, [r1]
strb r7, [r1, #1]
b _0801E60A
.align 2, 0
_0801E5E4: .4byte 0x0000FFFF
_0801E5E8: .4byte gUnk_02018EE0
_0801E5EC: .4byte gSineTable
_0801E5F0: .4byte gUnk_03003DE4
_0801E5F4: .4byte gUnk_02017AA0
_0801E5F8:
cmp r6, r7
beq _0801E602
strb r5, [r1]
strb r6, [r1, #1]
b _0801E60A
_0801E602:
cmp r5, r7
beq _0801E60A
strb r7, [r1, #1]
strb r7, [r1]
_0801E60A:
movs r4, #1
rsbs r4, r4, #0
add sl, r4
adds r1, #2
mov r0, sl
cmp r0, #0
bgt _0801E5B0
ldr r0, _0801E63C @ =gUnk_03003DE4
ldrb r1, [r0]
lsls r0, r1, #2
adds r0, r0, r1
lsls r0, r0, #9
ldr r1, _0801E640 @ =gUnk_02017AA0
adds r0, r0, r1
ldr r1, _0801E644 @ =0x04000040
ldr r2, _0801E648 @ =0xA2600001
bl SetVBlankDMA
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801E63C: .4byte gUnk_03003DE4
_0801E640: .4byte gUnk_02017AA0
_0801E644: .4byte 0x04000040
_0801E648: .4byte 0xA2600001
.syntax divided
-171
View File
@@ -1,171 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov ip, r0
movs r0, #3
add ip, r0
subs r0, #7
mov r1, ip
ands r1, r0
mov ip, r1
ldr r6, _0801D90C @ =gzHeap
mov sb, r6
ldrh r7, [r6]
movs r5, #1
movs r3, #0x80
lsls r3, r3, #5
add r3, sb
subs r4, r3, r1
movs r2, #0
b _0801D926
.align 2, 0
_0801D90C: .4byte gzHeap
_0801D910:
cmp r1, r4
bhi _0801D918
cmp r3, r0
bls _0801D952
_0801D918:
cmp r4, r1
bhi _0801D920
cmp r0, r3
bls _0801D952
_0801D920:
adds r0, r2, #1
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
_0801D926:
cmp r2, r7
bhs _0801D94A
lsls r0, r2, #2
add r0, sb
ldrh r1, [r0, #2]
ldr r6, _0801D95C @ =gzHeap
adds r1, r1, r6
ldrh r0, [r0, #4]
adds r0, r0, r6
cmp r1, r4
bhi _0801D940
cmp r4, r0
bls _0801D952
_0801D940:
cmp r1, r3
bhi _0801D910
cmp r3, r0
bhi _0801D910
movs r5, #0
_0801D94A:
lsls r0, r7, #2
mov sl, r0
cmp r5, #0
bne _0801D9D8
_0801D952:
movs r1, #0
mov r8, r1
lsls r6, r7, #2
mov sl, r6
b _0801D970
.align 2, 0
_0801D95C: .4byte gzHeap
_0801D960:
movs r5, #0
_0801D962:
mov r0, r8
adds r0, #1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r0
cmp r8, r7
bhs _0801D9D4
_0801D970:
mov r1, r8
lsls r0, r1, #2
add r0, sb
ldrh r0, [r0, #2]
ldr r6, _0801D994 @ =gzHeap
adds r3, r0, r6
mov r0, ip
subs r4, r3, r0
movs r5, #0
mov r0, sl
adds r0, #2
add r0, sb
adds r0, #4
cmp r4, r0
blo _0801D962
movs r5, #1
movs r2, #0
b _0801D9AE
.align 2, 0
_0801D994: .4byte gzHeap
_0801D998:
cmp r1, r4
bhi _0801D9A0
cmp r3, r0
bls _0801D960
_0801D9A0:
cmp r4, r1
bhi _0801D9A8
cmp r0, r3
bls _0801D960
_0801D9A8:
adds r0, r2, #1
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
_0801D9AE:
cmp r2, r7
bhs _0801D9D0
lsls r0, r2, #2
add r0, sb
ldrh r1, [r0, #2]
adds r1, r1, r6
ldrh r0, [r0, #4]
adds r0, r0, r6
cmp r1, r4
bhi _0801D9C6
cmp r4, r0
blo _0801D960
_0801D9C6:
cmp r1, r3
bhs _0801D998
cmp r3, r0
bhi _0801D998
movs r5, #0
_0801D9D0:
cmp r5, #0
beq _0801D962
_0801D9D4:
cmp r5, #0
beq _0801DA00
_0801D9D8:
ldr r0, _0801D9FC @ =gUnk_02035542
mov r1, sl
adds r2, r1, r0
subs r3, r0, #2
subs r1, r4, r3
strh r1, [r2]
adds r0, #2
add r0, sl
add r1, ip
strh r1, [r0]
adds r0, r7, #1
strh r0, [r3]
adds r0, r4, #0
mov r1, ip
bl MemClear
adds r0, r4, #0
b _0801DA02
.align 2, 0
_0801D9FC: .4byte gUnk_02035542
_0801DA00:
movs r0, #0
_0801DA02:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -1,365 +0,0 @@
.syntax unified
.ifdef JP
push {r4, lr}
adds r2, r0, #0
lsls r1, r1, #3
ldr r0, _08087FB0 @ =gUnk_080FC3E4
adds r1, r1, r0
movs r4, #0
adds r0, r2, #0
adds r0, #0x7c
ldrb r0, [r0]
ldrb r3, [r1, #6]
cmp r0, r3
bhs _08088068
ldrb r0, [r1, #6]
cmp r0, #0x10
beq _08087FC6
cmp r0, #0x10
bgt _08087FB4
cmp r0, #8
beq _08087FBC
b _0808806A
.align 2, 0
_08087FB0: .4byte gUnk_080FC3E4
_08087FB4:
cmp r0, #0x20
beq _08087FCA
cmp r0, #0x40
bne _0808806A
_08087FBC:
ldr r0, [r1]
ldrh r1, [r1, #4]
bl CheckLocalFlagByBank
b _08088064EU
_08087FC6:
ldrh r0, [r1, #4]
b _08088060EU
_08087FCA:
ldrh r0, [r1, #4]
cmp r0, #4
bhi _0808806A
lsls r0, r0, #2
ldr r1, _08087FDC @ =_08087FE0
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08087FDC: .4byte _08087FE0
_08087FE0: @ jump table
.4byte _08087FF4 @ case 0
.4byte _0808800C @ case 1
.4byte _0808801A @ case 2
.4byte _08088032 @ case 3
.4byte _0808804A @ case 4
_08087FF4:
movs r0, #0x20
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x10
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x19
b _08088060EU
_0808800C:
adds r0, r2, #0
adds r0, #0x7c
ldrb r0, [r0]
cmp r0, #4
bls _0808806A
movs r0, #0x28
b _08088060EU
_0808801A:
movs r0, #0x54
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x56
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x3d
b _08088060EU
_08088032:
movs r0, #0x3b
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x4a
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0xd
b _08088060EU
_0808804A:
movs r0, #0x49
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x55
bl CheckKinstoneFused
cmp r0, #0
bne _08088068
movs r0, #0x3c
_08088060EU:
bl CheckKinstoneFused
_08088064EU:
cmp r0, #0
beq _0808806A
_08088068:
movs r4, #1
_0808806A:
adds r0, r4, #0
pop {r4, pc}
.align 2, 0
.else
.ifdef EU
push {r4, lr}
adds r2, r0, #0
lsls r1, r1, #3
ldr r0, _08087B44 @ =gUnk_080FC3E4
adds r1, r1, r0
movs r4, #0
adds r0, r2, #0
adds r0, #0x7d
ldrb r0, [r0]
ldrb r3, [r1, #6]
cmp r0, r3
bhs _08087BFC
ldrb r0, [r1, #6]
cmp r0, #0x10
beq _08087B5A
cmp r0, #0x10
bgt _08087B48
cmp r0, #8
beq _08087B50
b _08087BFE
.align 2, 0
_08087B44: .4byte gUnk_080FC3E4
_08087B48:
cmp r0, #0x20
beq _08087B5E
cmp r0, #0x40
bne _08087BFE
_08087B50:
ldr r0, [r1]
ldrh r1, [r1, #4]
bl CheckLocalFlagByBank
b _08087BF8
_08087B5A:
ldrh r0, [r1, #4]
b _08087BF4
_08087B5E:
ldrh r0, [r1, #4]
cmp r0, #4
bhi _08087BFE
lsls r0, r0, #2
ldr r1, _08087B70 @ =_08087B74
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08087B70: .4byte _08087B74
_08087B74: @ jump table
.4byte _08087B88 @ case 0
.4byte _08087BA0 @ case 1
.4byte _08087BAE @ case 2
.4byte _08087BC6 @ case 3
.4byte _08087BDE @ case 4
_08087B88:
movs r0, #0x20
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x10
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x19
b _08087BF4
_08087BA0:
adds r0, r2, #0
adds r0, #0x7d
ldrb r0, [r0]
cmp r0, #4
bls _08087BFE
movs r0, #0x28
b _08087BF4
_08087BAE:
movs r0, #0x54
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x56
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x3d
b _08087BF4
_08087BC6:
movs r0, #0x3b
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x4a
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0xd
b _08087BF4
_08087BDE:
movs r0, #0x49
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x55
bl CheckKinstoneFused
cmp r0, #0
bne _08087BFC
movs r0, #0x3c
_08087BF4:
bl CheckKinstoneFused
_08087BF8:
cmp r0, #0
beq _08087BFE
_08087BFC:
movs r4, #1
_08087BFE:
adds r0, r4, #0
pop {r4, pc}
.align 2, 0
.else
push {r4, lr}
adds r2, r0, #0
lsls r1, r1, #3
ldr r0, _08088188 @ =gUnk_080FC3E4
adds r1, r1, r0
movs r4, #0
adds r0, r2, #0
adds r0, #0x7c
ldrb r0, [r0]
ldrb r3, [r1, #6]
cmp r0, r3
bhs _08088266
ldrb r0, [r1, #6]
cmp r0, #0x10
beq _0808819E
cmp r0, #0x10
bgt _0808818C
cmp r0, #8
beq _08088194
b _08088268
.align 2, 0
_08088188: .4byte gUnk_080FC3E4
_0808818C:
cmp r0, #0x20
beq _080881A6
cmp r0, #0x40
bne _08088268
_08088194:
ldr r0, [r1]
ldrh r1, [r1, #4]
bl CheckLocalFlagByBank
b _08088262
_0808819E:
ldrh r0, [r1, #4]
.ifndef JP
bl CheckKinstoneFused
.endif
b _08088262
_080881A6:
ldrh r0, [r1, #4]
cmp r0, #5
bhi _08088268
lsls r0, r0, #2
ldr r1, _080881B8 @ =_080881BC
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080881B8: .4byte _080881BC
_080881BC: @ jump table
.4byte _080881D4 @ case 0
.4byte _080881F0 @ case 1
.4byte _080881FE @ case 2
.4byte _0808821A @ case 3
.4byte _08088236 @ case 4
.4byte _08088252 @ case 5
_080881D4:
movs r0, #0x20
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x10
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x19
_080881EA:
bl CheckKinstoneFused
b _08088262
_080881F0:
adds r0, r2, #0
adds r0, #0x7c
ldrb r0, [r0]
cmp r0, #4
bls _08088268
movs r0, #0x28
b _080881EA
_080881FE:
movs r0, #0x54
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x56
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x3d
bl CheckKinstoneFused
b _08088262
_0808821A:
movs r0, #0x3b
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x4a
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0xd
bl CheckKinstoneFused
b _08088262
_08088236:
movs r0, #0x49
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x55
bl CheckKinstoneFused
cmp r0, #0
bne _08088266
movs r0, #0x3c
bl CheckKinstoneFused
b _08088262
_08088252:
adds r0, r2, #0
adds r0, #0x7c
ldrb r0, [r0]
cmp r0, #1
bls _08088268
movs r0, #0x12
bl CheckGlobalFlag
_08088262:
cmp r0, #0
beq _08088268
_08088266:
movs r4, #1
_08088268:
adds r0, r4, #0
pop {r4, pc}
.endif
.endif
.syntax divided
@@ -1,219 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r6, r1, #0
ldr r4, _08076334 @ =gPlayerState
ldrb r0, [r4, #5]
movs r1, #0xcf
ands r1, r0
strb r1, [r4, #5]
adds r0, r5, #0
adds r1, r6, #0
bl PlayerTryDropObject
cmp r0, #0
bne _080762F6
b _08076486
_080762F6:
ldr r0, _08076338 @ =gPlayerEntity
adds r1, r0, #0
adds r1, #0x3d
ldrb r1, [r1]
lsls r1, r1, #0x18
asrs r1, r1, #0x18
adds r3, r0, #0
cmp r1, #8
bgt _0807636C
adds r0, #0x42
ldrb r0, [r0]
cmp r0, #0
bne _0807636C
ldr r2, [r5, #0x18]
cmp r2, #0
beq _08076340
ldrh r1, [r2, #0xc]
ldr r0, _0807633C @ =0x00000502
cmp r1, r0
bne _08076376
adds r0, r4, #0
adds r0, #0x90
ldrh r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
bne _08076340
movs r0, #6
strb r0, [r2, #0xd]
b _08076376
.align 2, 0
_08076334: .4byte gPlayerState
_08076338: .4byte gPlayerEntity
_0807633C: .4byte 0x00000502
_08076340:
ldr r2, _08076364 @ =gPlayerState
adds r1, r2, #0
adds r1, #0xa8
movs r0, #5
strb r0, [r1]
ldr r0, _08076368 @ =gHUD
adds r0, #0x2e
movs r1, #8
strb r1, [r0]
ldrb r0, [r2, #2]
cmp r0, #0
beq _0807635A
b _0807647E
_0807635A:
ldrb r0, [r2, #5]
cmp r0, #1
bne _08076394
b _08076380
.align 2, 0
_08076364: .4byte gPlayerState
_08076368: .4byte gHUD
_0807636C:
ldr r1, [r5, #0x18]
cmp r1, #0
beq _08076376
movs r0, #6
strb r0, [r1, #0xd]
_08076376:
adds r0, r5, #0
adds r1, r6, #0
bl PlayerCancelHoldItem
b _08076486
_08076380:
adds r0, r3, #0
movs r1, #6
adds r2, r5, #0
bl sub_0800875A
cmp r0, #0
beq _08076394
adds r0, r5, #0
movs r1, #0
b _080763EC
_08076394:
ldr r1, _080763F4 @ =gUnk_0811BE38
ldr r7, _080763F8 @ =gPlayerEntity
ldrb r0, [r7, #0x14]
lsrs r0, r0, #1
lsls r3, r0, #1
adds r1, r3, r1
ldr r4, _080763FC @ =gPlayerState
adds r2, r4, #0
adds r2, #0x90
ldrh r0, [r1]
ldrh r2, [r2]
ands r0, r2
cmp r0, #0
beq _08076400
adds r0, r5, #0
bl UpdateItemAnim
ldr r0, [r4, #0x30]
movs r1, #8
ands r0, r1
movs r1, #0x94
lsls r1, r1, #4
cmp r0, #0
bne _080763C8
movs r1, #0xd0
lsls r1, r1, #2
_080763C8:
ldrh r0, [r5, #0x10]
cmp r1, r0
beq _080763D4
adds r0, r5, #0
bl SetItemAnim
_080763D4:
ldrb r0, [r4, #5]
movs r1, #0x10
orrs r1, r0
strb r1, [r4, #5]
adds r2, r4, #0
adds r2, #0xa8
movs r0, #0x1a
strb r0, [r2]
cmp r1, #1
beq _08076486
ldr r1, [r5, #0x18]
adds r0, r5, #0
_080763EC:
adds r2, r6, #0
bl sub_08076088
b _08076486
.align 2, 0
_080763F4: .4byte gUnk_0811BE38
_080763F8: .4byte gPlayerEntity
_080763FC: .4byte gPlayerState
_08076400:
ldr r0, _08076418 @ =gUnk_0811BE40
adds r0, r3, r0
ldrh r0, [r0]
ands r0, r2
cmp r0, #0
beq _08076460
ldrb r0, [r7, #0xf]
cmp r0, #5
bhi _0807641C
adds r0, #1
strb r0, [r7, #0xf]
b _08076486
.align 2, 0
_08076418: .4byte gUnk_0811BE40
_0807641C:
ldrb r0, [r5, #0xa]
adds r1, r4, #0
adds r1, #0x35
strb r0, [r1]
ldrb r0, [r4, #6]
movs r1, #0x80
orrs r0, r1
strb r0, [r4, #6]
ldrb r1, [r4, #5]
movs r0, #0x20
orrs r0, r1
strb r0, [r4, #5]
adds r1, r4, #0
adds r1, #0xa8
movs r0, #0x19
strb r0, [r1]
ldr r0, [r4, #0x30]
movs r1, #8
ands r0, r1
ldr r1, _0807645C @ =0x0000093C
cmp r0, #0
bne _0807644C
movs r1, #0xcf
lsls r1, r1, #2
_0807644C:
ldrh r0, [r5, #0x10]
cmp r1, r0
bne _08076476
adds r0, r5, #0
bl UpdateItemAnim
b _08076486
.align 2, 0
_0807645C: .4byte 0x0000093C
_08076460:
strb r0, [r7, #0xf]
ldr r0, [r4, #0x30]
movs r1, #8
ands r0, r1
cmp r0, #0
bne _08076472
movs r1, #0xd0
lsls r1, r1, #2
b _08076476
_08076472:
movs r1, #0x94
lsls r1, r1, #4
_08076476:
adds r0, r5, #0
bl SetItemAnim
b _08076486
_0807647E:
adds r0, r5, #0
adds r1, r6, #0
bl PlayerCancelHoldItem
_08076486:
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -1,112 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r4, _080A4210 @ =gOamCmd
movs r0, #0
strh r0, [r4, #4]
strh r0, [r4, #6]
ldr r0, _080A4214 @ =gMenu
ldrh r0, [r0, #0x10]
ldr r1, _080A4218 @ =0x00000B21
bl __divsi3
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
movs r5, #3
rsbs r5, r5, #0
movs r1, #0xff
mov r8, r1
adds r7, r4, #0
ldr r6, _080A421C @ =gSineTable
rsbs r0, r0, #0
adds r4, r0, #0
subs r4, #0x45
ldr r2, _080A4220 @ =gSave+0x12b
mov sb, r2
_080A4180:
adds r2, r4, #0
mov r3, r8
ands r2, r3
lsls r0, r2, #1
adds r0, r0, r6
movs r3, #0
ldrsh r1, [r0, r3]
lsls r0, r1, #4
adds r0, r0, r1
lsls r0, r0, #2
cmp r0, #0
bge _080A419A
adds r0, #0xff
_080A419A:
asrs r0, r0, #8
adds r0, #0x4f
strh r0, [r7, #2]
adds r0, r2, #0
adds r0, #0x40
mov r1, r8
ands r0, r1
lsls r0, r0, #1
adds r0, r0, r6
movs r2, #0
ldrsh r1, [r0, r2]
lsls r0, r1, #5
adds r0, r0, r1
lsls r0, r0, #1
cmp r0, #0
bge _080A41BC
adds r0, #0xff
_080A41BC:
asrs r0, r0, #8
subs r0, #0x10
strh r0, [r7]
ldr r2, _080A4214 @ =gMenu
ldr r0, [r2, #0x10]
cmp r0, #0
bge _080A41CE
ldr r3, _080A4224 @ =0x0000FFFF
adds r0, r0, r3
_080A41CE:
asrs r0, r0, #0x10
adds r3, r0, r5
cmp r3, #0
blt _080A4200
mov r1, sb
adds r0, r3, r1
ldrb r1, [r0]
ldr r0, _080A4228 @ =gSave
cmp r5, #0
bne _080A41EE
ldrb r2, [r2, #1]
cmp r2, #4
bgt _080A41EE
cmp r2, #3
blt _080A41EE
subs r1, #1
_080A41EE:
cmp r1, #0
ble _080A4200
movs r2, #0x8c
lsls r2, r2, #1
adds r0, r0, r2
adds r0, r3, r0
ldrb r0, [r0]
bl sub_080A42E0
_080A4200:
adds r4, #0x17
adds r5, #1
cmp r5, #3
ble _080A4180
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A4210: .4byte gOamCmd
_080A4214: .4byte gMenu
_080A4218: .4byte 0x00000B21
_080A421C: .4byte gSineTable
_080A4220: .4byte gSave+0x12b
_080A4224: .4byte 0x0000FFFF
_080A4228: .4byte gSave
.syntax divided
-66
View File
@@ -1,66 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
mov ip, r0
adds r5, r1, #0
ldrb r1, [r0, #0xb]
movs r0, #0x10
ands r0, r1
cmp r0, #0
beq _0806650A
mov r1, ip
ldrh r0, [r1, #0x2e]
adds r1, #0x86
strh r0, [r1]
mov r0, ip
adds r0, #0x7e
ldrh r2, [r0]
adds r0, #4
ldrh r0, [r0]
adds r3, r2, r0
subs r4, r2, r0
movs r6, #0x2e
ldrsh r0, [r5, r6]
cmp r0, r3
bge _080664C6
cmp r0, r4
ble _080664C6
adds r2, r0, #0
b _080664D2
_080664C6:
movs r2, #0x2e
ldrsh r0, [r5, r2]
adds r2, r4, #0
cmp r0, r3
blt _080664D2
adds r2, r3, #0
_080664D2:
ldrh r0, [r1]
cmp r0, r2
bne _080664F0
mov r1, ip
adds r1, #0x84
ldrh r0, [r1]
cmp r0, #1
bne _0806650A
movs r0, #0
strh r0, [r1]
mov r0, ip
movs r1, #2
bl InitializeAnimation
b _0806650A
_080664F0:
mov r6, ip
strh r2, [r6, #0x2e]
mov r1, ip
adds r1, #0x84
ldrh r0, [r1]
cmp r0, #0
bne _0806650A
movs r0, #1
strh r0, [r1]
mov r0, ip
movs r1, #6
bl InitializeAnimation
_0806650A:
pop {r4, r5, r6, pc}
.syntax divided
-144
View File
@@ -1,144 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
mov sb, r0
movs r6, #0
ldr r0, [r0, #0x64]
str r0, [sp, #4]
mov r4, sb
adds r4, #0x70
ldr r0, _080A12F8 @ =gRoomControls
movs r2, #0xd8
lsls r2, r2, #2
adds r1, r2, #0
ldrh r3, [r0, #6]
adds r1, r1, r3
movs r7, #0xd4
lsls r7, r7, #2
adds r2, r7, #0
ldrh r0, [r0, #8]
adds r2, r2, r0
lsls r1, r1, #0x10
asrs r1, r1, #0x10
mov r8, r1
lsls r2, r2, #0x10
asrs r3, r2, #0x10
movs r0, #9
mov sl, r0
movs r1, #1
rsbs r1, r1, #0
adds r5, r1, #0
_080A12B2:
ldr r7, [sp, #4]
ldr r2, [r7]
movs r0, #0
ldrsb r0, [r4, r0]
cmp r0, #0
bne _080A1300
ldr r0, [r2, #4]
cmp r0, #0
beq _080A132C
cmp r2, #0
beq _080A132C
movs r1, #0x2e
ldrsh r0, [r2, r1]
cmp r8, r0
bgt _080A132E
movs r7, #0x32
ldrsh r0, [r2, r7]
cmp r3, r0
bgt _080A132E
ldrb r0, [r2, #0xa]
adds r0, #1
strb r0, [r4]
movs r0, #1
strb r0, [r2, #0xb]
adds r6, #1
ldr r1, _080A12FC @ =CuccoMinigame_Sounds
ldrb r0, [r2, #0xa]
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
str r3, [sp]
bl SoundReq
ldr r3, [sp]
b _080A132E
.align 2, 0
_080A12F8: .4byte gRoomControls
_080A12FC: .4byte CuccoMinigame_Sounds
_080A1300:
cmp r0, #0
ble _080A132E
adds r6, #1
ldr r0, [r2, #4]
cmp r0, #0
beq _080A132C
cmp r2, #0
beq _080A132C
mov r1, r8
adds r1, #4
movs r7, #0x2e
ldrsh r0, [r2, r7]
cmp r1, r0
ble _080A131E
strh r1, [r2, #0x2e]
_080A131E:
adds r1, r3, #4
movs r7, #0x32
ldrsh r0, [r2, r7]
cmp r1, r0
ble _080A132E
strh r1, [r2, #0x32]
b _080A132E
_080A132C:
strb r5, [r4]
_080A132E:
movs r0, #1
rsbs r0, r0, #0
add sl, r0
adds r4, #1
ldr r1, [sp, #4]
adds r1, #4
str r1, [sp, #4]
mov r2, sl
cmp r2, #0
bge _080A12B2
mov r0, sb
adds r0, #0x6a
strh r6, [r0]
ldr r0, _080A136C @ =gPlayerState
adds r0, #0x27
movs r1, #0xff
strb r1, [r0]
mov r1, sb
adds r1, #0x68
ldrh r0, [r1]
subs r0, #1
strh r0, [r1]
lsls r0, r0, #0x10
cmp r0, #0
bgt _080A1370
movs r0, #0xe2
bl SoundReq
bl sub_08050384
b _080A1376
.align 2, 0
_080A136C: .4byte gPlayerState
_080A1370:
ldr r1, _080A1384 @ =gActiveScriptInfo
movs r0, #0
strb r0, [r1, #6]
_080A1376:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080A1384: .4byte gActiveScriptInfo
.syntax divided
@@ -1,315 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r0, _080784FC @ =gPossibleInteraction
ldrb r1, [r0]
mov r8, r0
cmp r1, #0
beq _08078500
ldr r0, [r0, #4]
b _0807876A
.align 2, 0
_080784FC: .4byte gPossibleInteraction
_08078500:
ldr r2, _08078528 @ =gPlayerState
adds r0, r2, #0
adds r0, #0x27
adds r3, r2, #0
adds r3, #0x26
ldrb r1, [r0]
ldrb r0, [r3]
orrs r0, r1
cmp r0, #0
bne _08078598
adds r1, r2, #0
adds r1, #0xa8
ldrb r0, [r1]
cmp r0, #0
bne _0807852C
adds r0, r2, #0
adds r0, #0xa9
ldrb r0, [r0]
b _0807852E
.align 2, 0
_08078528: .4byte gPlayerState
_0807852C:
ldrb r0, [r1]
_0807852E:
subs r0, #2
cmp r0, #0x14
bhi _080785B0
lsls r0, r0, #2
ldr r1, _08078540 @ =_08078544
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08078540: .4byte _08078544
_08078544: @ jump table
.4byte _08078598 @ case 0
.4byte _08078598 @ case 1
.4byte _080785B0 @ case 2
.4byte _080785B0 @ case 3
.4byte _080785B0 @ case 4
.4byte _080785B0 @ case 5
.4byte _080785B0 @ case 6
.4byte _080785B0 @ case 7
.4byte _080785B0 @ case 8
.4byte _080785B0 @ case 9
.4byte _080785B0 @ case 10
.4byte _080785B0 @ case 11
.4byte _080785B0 @ case 12
.4byte _080785B0 @ case 13
.4byte _080785B0 @ case 14
.4byte _080785B0 @ case 15
.4byte _08078598 @ case 16
.4byte _080785B0 @ case 17
.4byte _080785B0 @ case 18
.4byte _08078598 @ case 19
.4byte _08078598 @ case 20
_08078598:
movs r0, #0xff
mov r1, r8
strb r0, [r1, #3]
ldr r0, _080785AC @ =gNoInteraction
str r0, [r1, #4]
movs r1, #1
mov r2, r8
strb r1, [r2]
b _0807876A
.align 2, 0
_080785AC: .4byte gNoInteraction
_080785B0:
ldr r0, [r2, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _080785F0
bl HasDungeonSmallKey
cmp r0, #0
beq _080785C4
movs r0, #1
_080785C4:
adds r7, r0, #0
bl HasDungeonBigKey
cmp r0, #0
beq _080785D2
movs r0, #2
orrs r7, r0
_080785D2:
ldr r3, _080785E4 @ =gPlayerEntity
ldrb r0, [r3, #0x14]
movs r1, #6
ands r1, r0
ldr r0, _080785E8 @ =gPlayerInteractHitboxOffsetNormal
adds r2, r1, r0
ldr r5, _080785EC @ =gPossibleInteraction
mov r8, r5
b _080785FE
.align 2, 0
_080785E4: .4byte gPlayerEntity
_080785E8: .4byte gPlayerInteractHitboxOffsetNormal
_080785EC: .4byte gPossibleInteraction
_080785F0:
ldr r3, _08078624 @ =gPlayerEntity
ldrb r0, [r3, #0x14]
movs r1, #6
ands r1, r0
ldr r0, _08078628 @ =gPlayerInteractHitboxOffsetMinish
adds r2, r1, r0
movs r7, #0
_080785FE:
mov ip, r3
mov r0, ip
movs r3, #0x2e
ldrsh r1, [r0, r3]
movs r0, #0
ldrsb r0, [r2, r0]
adds r1, r1, r0
mov sl, r1
mov r5, ip
movs r0, #0x32
ldrsh r1, [r5, r0]
movs r0, #1
ldrsb r0, [r2, r0]
adds r1, r1, r0
mov sb, r1
movs r6, #0
ldr r5, _0807862C @ =gInteractableObjects
b _08078724
.align 2, 0
_08078624: .4byte gPlayerEntity
_08078628: .4byte gPlayerInteractHitboxOffsetMinish
_0807862C: .4byte gInteractableObjects
_08078630:
ldrb r1, [r5]
movs r3, #1
adds r0, r3, #0
ands r0, r1
cmp r0, #0
bne _0807864E
mov r0, ip
adds r0, #0x38
adds r1, r2, #0
adds r1, #0x38
ldrb r2, [r0]
ldrb r0, [r1]
ands r0, r2
cmp r0, #0
beq _08078714
_0807864E:
ldrb r1, [r5, #2]
mov r2, ip
ldrb r0, [r2, #0x14]
lsrs r0, r0, #1
asrs r1, r0
ands r1, r3
cmp r1, #0
bne _08078714
ldrb r0, [r5, #1]
cmp r0, #0xa
bhi _080786D4
lsls r0, r0, #2
ldr r1, _08078670 @ =_08078674
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08078670: .4byte _08078674
_08078674: @ jump table
.4byte _08078714 @ case 0
.4byte _080786A0 @ case 1
.4byte _080786C4 @ case 2
.4byte _080786A0 @ case 3
.4byte _080786A0 @ case 4
.4byte _080786C8 @ case 5
.4byte _080786CC @ case 6
.4byte _080786B4 @ case 7
.4byte _080786A0 @ case 8
.4byte _080786A0 @ case 9
.4byte _080786D4 @ case 10
_080786A0:
ldr r0, _080786B0 @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _08078714
b _080786D4
.align 2, 0
_080786B0: .4byte gPlayerState
_080786B4:
ldr r0, _080786C0 @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
b _080786D0
.align 2, 0
_080786C0: .4byte gPlayerState
_080786C4:
ldrb r0, [r5, #3]
b _080786D0
_080786C8:
movs r0, #1
b _080786CE
_080786CC:
movs r0, #2
_080786CE:
ands r0, r7
_080786D0:
cmp r0, #0
beq _08078714
_080786D4:
ldr r0, [r5, #8]
movs r1, #0x2e
ldrsh r3, [r0, r1]
movs r2, #0x32
ldrsh r4, [r0, r2]
ldr r1, [r5, #4]
cmp r1, #0
beq _080786F4
movs r0, #0
ldrsb r0, [r1, r0]
adds r3, r3, r0
movs r0, #1
ldrsb r0, [r1, r0]
adds r4, r4, r0
adds r2, r1, #2
b _080786F8
_080786F4:
ldr r0, [r0, #0x48]
adds r2, r0, #6
_080786F8:
ldrb r1, [r2]
mov r5, sl
adds r0, r1, r5
subs r0, r0, r3
lsls r1, r1, #1
cmp r0, r1
bhs _08078714
ldrb r1, [r2, #1]
mov r2, sb
adds r0, r1, r2
subs r0, r0, r4
lsls r1, r1, #1
cmp r0, r1
blo _0807873A
_08078714:
adds r6, #1
cmp r6, #0x1f
bhi _08078758
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
ldr r3, _08078754 @ =gInteractableObjects
adds r5, r0, r3
_08078724:
ldr r2, [r5, #8]
cmp r2, #0
beq _08078714
adds r0, r2, #0
adds r0, #0x39
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
blt _0807873A
b _08078630
_0807873A:
cmp r6, #0x1f
bhi _08078758
mov r5, r8
strb r6, [r5, #3]
lsls r0, r6, #1
adds r0, r0, r6
lsls r0, r0, #2
mov r1, r8
adds r1, #8
adds r0, r0, r1
str r0, [r5, #4]
b _08078762
.align 2, 0
_08078754: .4byte gInteractableObjects
_08078758:
movs r0, #0xff
mov r1, r8
strb r0, [r1, #3]
ldr r0, _08078774 @ =gNoInteraction
str r0, [r1, #4]
_08078762:
movs r0, #1
mov r2, r8
strb r0, [r2]
ldr r0, [r2, #4]
_0807876A:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08078774: .4byte gNoInteraction
.syntax divided
@@ -1,116 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
ldr r1, _080789BC @ =gCarriedEntity
ldrb r0, [r1]
cmp r0, #0
beq _080789C0
ldrb r0, [r1, #1]
b _08078A88
.align 2, 0
_080789BC: .4byte gCarriedEntity
_080789C0:
ldr r0, _08078A5C @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _08078A56
ldr r0, _08078A60 @ =gPlayerEntity
bl GetCollisionDataAtEntity
adds r4, r0, #0
cmp r4, #0xf
bls _080789E6
ldr r0, _08078A64 @ =gUnk_080084BC
adds r1, r4, #0
subs r1, #0x10
adds r1, r1, r0
ldrb r0, [r1]
cmp r0, #0xf
beq _08078A56
_080789E6:
ldr r0, _08078A5C @ =gPlayerState
ldrb r0, [r0, #0x12]
cmp r0, #0x12
beq _08078A56
ldr r3, _08078A68 @ =gCarriedEntity
movs r0, #1
strb r0, [r3]
ldrb r4, [r3, #2]
cmp r4, #0
beq _08078A2E
ldr r2, _08078A60 @ =gPlayerEntity
ldrb r1, [r2, #0x14]
movs r0, #6
ands r0, r1
ldr r1, _08078A6C @ =gUnk_0811BFE0
adds r6, r0, r1
adds r7, r2, #0
adds r3, #8
mov r8, r3
_08078A0C:
lsls r0, r4, #2
mov r1, r8
adds r5, r0, r1
ldr r1, [r5]
cmp r1, #0
beq _08078A26
ldrb r2, [r6]
ldrb r3, [r6, #1]
adds r0, r7, #0
bl sub_0807A180
cmp r0, #0
bne _08078A74
_08078A26:
subs r4, #1
ldr r7, _08078A60 @ =gPlayerEntity
cmp r4, #0
bne _08078A0C
_08078A2E:
ldr r0, _08078A60 @ =gPlayerEntity
ldrb r1, [r0, #0x14]
movs r2, #6
ands r2, r1
ldr r1, _08078A70 @ =gUnk_08007DF4
adds r2, r2, r1
movs r1, #0
ldrsb r1, [r2, r1]
ldrb r2, [r2, #1]
lsls r2, r2, #0x18
asrs r2, r2, #0x18
bl sub_080B1A0C
ldr r4, _08078A68 @ =gCarriedEntity
strh r0, [r4, #4]
movs r1, #6
bl sub_0806FC24
cmp r0, #0
bne _08078A84
_08078A56:
movs r0, #0
b _08078A88
.align 2, 0
_08078A5C: .4byte gPlayerState
_08078A60: .4byte gPlayerEntity
_08078A64: .4byte gUnk_080084BC
_08078A68: .4byte gCarriedEntity
_08078A6C: .4byte gUnk_0811BFE0
_08078A70: .4byte gUnk_08007DF4
_08078A74:
mov r0, r8
subs r0, #8
ldr r1, [r5]
str r1, [r0, #8]
movs r1, #2
strb r1, [r0, #1]
movs r0, #2
b _08078A88
_08078A84:
movs r0, #1
strb r0, [r4, #1]
_08078A88:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,139 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
ldr r5, _08079344 @ =gPlayerEntity
adds r3, r5, #0
adds r3, #0x42
ldrb r0, [r3]
cmp r0, #0
beq _080793E0
ldrb r2, [r5, #0xc]
cmp r2, #0xb
beq _08079338
ldr r0, _08079348 @ =gPlayerState
ldrb r1, [r0, #0x1e]
adds r6, r0, #0
cmp r1, #0
bne _08079338
ldrb r0, [r6, #5]
subs r0, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #3
bls _08079338
ldrb r0, [r6, #2]
cmp r0, #0
bne _08079338
ldrb r0, [r6, #0x12]
cmp r0, #0xff
beq _08079338
ldrb r1, [r6, #7]
movs r0, #0x80
ands r0, r1
cmp r0, #0
bne _08079338
adds r0, r6, #0
adds r0, #0x26
ldrb r1, [r0]
movs r0, #0xf
ands r0, r1
subs r0, #1
cmp r0, #0
bgt _08079338
cmp r2, #3
beq _08079338
ldr r1, [r6, #0x30]
movs r0, #0x80
lsls r0, r0, #0xb
ands r1, r0
cmp r1, #0
beq _0807934C
_08079338:
adds r1, r5, #0
adds r1, #0x42
movs r0, #0
strb r0, [r1]
b _080793E0
.align 2, 0
_08079344: .4byte gPlayerEntity
_08079348: .4byte gPlayerState
_0807934C:
cmp r2, #0x1d
bne _0807935E
adds r0, r5, #0
adds r0, #0x3e
ldrb r0, [r0]
cmp r0, #0x10
beq _0807935E
strb r1, [r3]
b _080793E0
_0807935E:
adds r0, r5, #0
adds r0, #0x42
ldrb r3, [r0]
movs r1, #0
ldrsb r1, [r0, r1]
adds r2, r0, #0
cmp r1, #0
ble _08079372
subs r0, r3, #1
b _08079374
_08079372:
adds r0, r3, #1
_08079374:
strb r0, [r2]
ldrb r0, [r2]
cmp r0, #0
beq _080793E0
adds r4, r6, #0
ldrb r0, [r4, #7]
movs r1, #0xdf
ands r1, r0
strb r1, [r4, #7]
adds r0, r5, #0
adds r0, #0x3d
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #0
ble _080793CA
adds r0, r4, #0
adds r0, #0x26
ldrb r0, [r0]
cmp r0, #0
bne _080793CA
ldr r0, [r4, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _080793CA
ldrb r0, [r4, #2]
cmp r0, #0
bne _080793CA
bl ResetActiveItems
ldr r0, [r4, #0x30]
movs r1, #8
ands r0, r1
cmp r0, #0
bne _080793C4
movs r0, #0x8a
lsls r0, r0, #1
strh r0, [r4, #8]
b _080793CA
_080793C4:
movs r0, #0x83
lsls r0, r0, #3
strh r0, [r6, #8]
_080793CA:
movs r1, #0xa0
lsls r1, r1, #2
adds r4, r5, #0
adds r4, #0x3e
ldrb r2, [r4]
adds r0, r5, #0
bl sub_080027EA
ldrb r0, [r4]
bl sub_0807A5B8
_080793E0:
pop {r4, r5, r6, pc}
.align 2, 0
.syntax divided
@@ -1,257 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
adds r4, r0, #0
ldr r0, _0807A364 @ =gRoomControls
mov r8, r0
ldrb r0, [r0, #4]
cmp r0, #8
bne _0807A312
b _0807A4F2
_0807A312:
bl sub_08079778
orrs r0, r4
cmp r0, #0
bne _0807A31E
b _0807A4F2
_0807A31E:
ldr r7, _0807A368 @ =gPlayerEntity
ldrb r1, [r7, #0x14]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _0807A36C
movs r1, #0x2e
ldrsh r2, [r7, r1]
mov r6, r8
ldrh r0, [r6, #6]
subs r2, r2, r0
asrs r2, r2, #4
movs r3, #0x3f
ands r2, r3
movs r0, #0x32
ldrsh r1, [r7, r0]
ldr r0, [r7, #0x48]
ldrb r5, [r0, #5]
adds r0, r1, r5
ldrh r4, [r6, #8]
subs r0, r0, r4
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r0, r2
lsls r7, r0, #1
subs r1, r1, r5
subs r1, r1, r4
asrs r1, r1, #4
ands r1, r3
lsls r1, r1, #6
orrs r2, r1
lsls r6, r2, #1
b _0807A3A2
.align 2, 0
_0807A364: .4byte gRoomControls
_0807A368: .4byte gPlayerEntity
_0807A36C:
movs r1, #0x2e
ldrsh r3, [r7, r1]
ldr r0, [r7, #0x48]
ldrb r6, [r0, #2]
adds r1, r3, r6
mov r2, r8
ldrh r5, [r2, #6]
subs r1, r1, r5
asrs r1, r1, #4
movs r4, #0x3f
ands r1, r4
movs r2, #0x32
ldrsh r0, [r7, r2]
mov r7, r8
ldrh r2, [r7, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r4
lsls r0, r0, #6
orrs r1, r0
lsls r7, r1, #1
subs r3, r3, r6
subs r3, r3, r5
asrs r3, r3, #4
ands r3, r4
orrs r3, r0
lsls r6, r3, #1
_0807A3A2:
movs r0, #0
mov sb, r0
ldr r1, _0807A3F4 @ =gPlayerEntity
mov sl, r1
_0807A3AA:
movs r2, #0
mov r8, r2
mov r0, sl
mov r1, sp
adds r2, r7, #0
bl sub_08004202
adds r7, r0, #0
lsrs r4, r7, #1
adds r0, r4, #0
movs r1, #1
bl GetCollisionDataAtMetaTilePos
cmp r0, #0
beq _0807A3FC
lsls r0, r4, #0x10
lsrs r0, r0, #0x10
mov r1, sl
adds r1, #0x38
ldrb r1, [r1]
bl GetVvvAtMetaTilePos
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r2, sl
ldrb r1, [r2, #0x14]
lsrs r1, r1, #1
lsls r1, r1, #2
ldr r2, _0807A3F8 @ =gUnk_0811C1D8
adds r1, r1, r2
ldr r1, [r1]
bl FindValueForKey
cmp r0, #0
beq _0807A468
b _0807A400
.align 2, 0
_0807A3F4: .4byte gPlayerEntity
_0807A3F8: .4byte gUnk_0811C1D8
_0807A3FC:
movs r0, #1
mov r8, r0
_0807A400:
ldr r5, _0807A444 @ =gPlayerEntity
adds r0, r5, #0
mov r1, sp
adds r2, r6, #0
bl sub_08004202
adds r6, r0, #0
lsrs r4, r6, #1
adds r0, r4, #0
movs r1, #1
bl GetCollisionDataAtMetaTilePos
cmp r0, #0
beq _0807A44C
lsls r0, r4, #0x10
lsrs r0, r0, #0x10
adds r1, r5, #0
adds r1, #0x38
ldrb r1, [r1]
bl GetVvvAtMetaTilePos
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldrb r1, [r5, #0x14]
lsrs r1, r1, #1
lsls r1, r1, #2
ldr r2, _0807A448 @ =gUnk_0811C1D8
adds r1, r1, r2
ldr r1, [r1]
bl FindValueForKey
cmp r0, #0
beq _0807A468
b _0807A450
.align 2, 0
_0807A444: .4byte gPlayerEntity
_0807A448: .4byte gUnk_0811C1D8
_0807A44C:
movs r0, #1
add r8, r0
_0807A450:
mov r1, r8
cmp r1, #2
bne _0807A45E
mov r2, sb
cmp r2, #0
bne _0807A46E
b _0807A4F2
_0807A45E:
movs r0, #1
add sb, r0
mov r1, sb
cmp r1, #1
bls _0807A3AA
_0807A468:
mov r2, sb
cmp r2, #0
beq _0807A4F2
_0807A46E:
bl AreaIsDungeon
cmp r0, #0
beq _0807A4B0
ldr r4, _0807A4AC @ =gPlayerEntity
adds r0, r4, #0
mov r1, sp
adds r2, r7, #0
bl sub_08004202
adds r7, r0, #0
lsrs r0, r7, #1
movs r1, #2
bl GetCollisionDataAtMetaTilePos
cmp r0, #0
bne _0807A4F2
adds r0, r4, #0
mov r1, sp
adds r2, r6, #0
bl sub_08004202
adds r6, r0, #0
lsrs r0, r6, #1
movs r1, #2
_0807A4A0:
bl GetCollisionDataAtMetaTilePos
cmp r0, #0
beq _0807A4EC
b _0807A4F2
.align 2, 0
_0807A4AC: .4byte gPlayerEntity
_0807A4B0:
mov r0, sb
cmp r0, #2
bne _0807A4C2
ldr r0, _0807A4E8 @ =gPlayerEntity
mov r1, sp
adds r2, r7, #0
bl sub_08004202
adds r7, r0, #0
_0807A4C2:
lsrs r0, r7, #1
movs r1, #1
bl GetCollisionDataAtMetaTilePos
cmp r0, #0
bne _0807A4F2
mov r1, sb
cmp r1, #2
bne _0807A4E0
ldr r0, _0807A4E8 @ =gPlayerEntity
mov r1, sp
adds r2, r6, #0
bl sub_08004202
adds r6, r0, #0
_0807A4E0:
lsrs r0, r6, #1
movs r1, #1
b _0807A4A0
.align 2, 0
_0807A4E8: .4byte gPlayerEntity
_0807A4EC:
mov r0, sb
adds r0, #1
b _0807A4F4
_0807A4F2:
movs r0, #0
_0807A4F4:
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -1,123 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
bl ClearBgAnimations
bl sub_0807BFA8
ldr r7, _0807C0B8 @ =0x0000FFFF
ldr r6, _0807C0BC @ =gMapBottom+0x5004
movs r0, #0x80
lsls r0, r0, #5
mov r8, r0
adds r0, r7, #0
adds r1, r6, #0
mov r2, r8
bl MemFill16
movs r5, #0
strh r5, [r6]
ldr r4, _0807C0C0 @ =gMapTop+0x5004
adds r0, r7, #0
adds r1, r4, #0
mov r2, r8
bl MemFill16
strh r5, [r4]
ldr r2, _0807C0C4 @ =gRoomControls
ldr r0, _0807C0C8 @ =gArea
ldr r1, _0807C0CC @ =0x0000085C
adds r4, r0, r1
ldr r0, [r4]
ldr r1, [r2, #0x34]
ldr r0, [r0, #8]
cmp r1, r0
beq _0807C01C
str r0, [r2, #0x34]
bl LoadMapData
_0807C01C:
ldr r0, [r4]
ldr r0, [r0, #0x10]
bl LoadMapData
ldr r1, _0807C0D0 @ =gPaletteBuffer
adds r0, r1, #0
adds r0, #0x60
movs r2, #0xa8
lsls r2, r2, #2
adds r1, r1, r2
movs r2, #0x20
bl MemCopy
ldr r2, _0807C0D4 @ =gUsedPalettes
ldr r0, [r2]
movs r1, #0x80
lsls r1, r1, #0xe
orrs r0, r1
str r0, [r2]
ldr r0, [r4]
ldr r0, [r0, #0x14]
cmp r0, #0
beq _0807C04E
bl LoadBgAnimations
_0807C04E:
adds r5, r6, #0
movs r0, #0x80
lsls r0, r0, #5
adds r6, r5, r0
adds r0, r7, #0
adds r1, r6, #0
mov r2, r8
bl MemFill16
movs r2, #0
ldr r3, _0807C0D8 @ =0x000007FF
adds r4, r7, #0
_0807C066:
ldrh r0, [r5]
cmp r0, r3
bhi _0807C078
lsls r0, r0, #1
adds r1, r0, r6
ldrh r0, [r1]
cmp r0, r4
bne _0807C078
strh r2, [r1]
_0807C078:
adds r2, #1
adds r5, #2
cmp r2, r3
ble _0807C066
movs r2, #0x80
lsls r2, r2, #5
ldr r5, _0807C0C0 @ =gMapTop+0x5004
adds r6, r5, r2
ldr r4, _0807C0B8 @ =0x0000FFFF
adds r0, r4, #0
adds r1, r6, #0
bl MemFill16
movs r2, #0
ldr r3, _0807C0D8 @ =0x000007FF
_0807C096:
ldrh r0, [r5]
cmp r0, r3
bhi _0807C0A8
lsls r0, r0, #1
adds r1, r0, r6
ldrh r0, [r1]
cmp r0, r4
bne _0807C0A8
strh r2, [r1]
_0807C0A8:
adds r2, #1
adds r5, #2
cmp r2, r3
ble _0807C096
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0807C0B8: .4byte 0x0000FFFF
_0807C0BC: .4byte gMapBottom+0x5004
_0807C0C0: .4byte gMapTop+0x5004
_0807C0C4: .4byte gRoomControls
_0807C0C8: .4byte gArea
_0807C0CC: .4byte 0x0000085C
_0807C0D0: .4byte gPaletteBuffer
_0807C0D4: .4byte gUsedPalettes
_0807C0D8: .4byte 0x000007FF
.syntax divided
@@ -1,98 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
mov r8, r0
adds r4, r1, #0
mov ip, r2
mov r0, ip
muls r0, r4, r0
lsls r0, r0, #1
add r0, r8
subs r7, r0, #2
mov r0, ip
subs r0, #1
lsls r0, r0, #7
add r0, r8
lsls r3, r4, #1
subs r1, r3, #2
adds r0, r0, r1
movs r5, #0
cmp r5, ip
bhs _0807C906
mov sb, r3
_0807C8DE:
movs r2, #0
adds r6, r0, #0
subs r6, #0x80
cmp r2, r4
bhs _0807C8FA
adds r1, r7, #0
adds r3, r0, #0
_0807C8EC:
ldrh r0, [r1]
strh r0, [r3]
subs r1, #2
subs r3, #2
adds r2, #1
cmp r2, r4
blo _0807C8EC
_0807C8FA:
adds r0, r6, #0
mov r1, sb
subs r7, r7, r1
adds r5, #1
cmp r5, ip
blo _0807C8DE
_0807C906:
movs r0, #0x40
subs r6, r0, r4
movs r5, #0
lsls r0, r4, #1
mov r2, ip
lsls r7, r2, #7
mov r2, r8
adds r1, r2, r0
_0807C916:
lsls r0, r5, #7
adds r0, r1, r0
movs r2, #0
adds r3, r5, #1
cmp r2, r6
bhs _0807C92E
movs r4, #0
_0807C924:
strh r4, [r0]
adds r0, #2
adds r2, #1
cmp r2, r6
blo _0807C924
_0807C92E:
adds r5, r3, #0
cmp r5, #0x3f
bls _0807C916
movs r0, #0x40
mov r1, ip
subs r6, r0, r1
mov r2, r8
adds r0, r2, r7
movs r5, #0
cmp r5, r6
bhs _0807C956
adds r4, r0, #0
_0807C946:
adds r0, r4, #0
movs r1, #0x80
bl MemClear
adds r4, #0x80
adds r5, #1
cmp r5, r6
blo _0807C946
_0807C956:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-290
View File
@@ -1,290 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x38
ldr r1, _080804F0 @ =gRoomControls
movs r2, #0xa
ldrsh r0, [r1, r2]
ldrh r2, [r1, #6]
subs r0, r0, r2
str r0, [sp, #0x18]
ldr r3, [r1, #0x30]
movs r4, #0x2e
ldrsh r0, [r3, r4]
subs r0, r0, r2
str r0, [sp, #0x10]
movs r2, #0xc
ldrsh r0, [r1, r2]
ldrh r1, [r1, #8]
subs r0, r0, r1
str r0, [sp, #0x1c]
movs r4, #0x32
ldrsh r0, [r3, r4]
subs r0, r0, r1
str r0, [sp, #0x14]
movs r0, #0x3c
str r0, [sp, #8]
_08080408:
movs r7, #0
ldr r1, [sp, #8]
adds r1, #6
str r1, [sp, #8]
adds r2, r1, #0
muls r2, r1, r2
mov sl, r2
lsls r4, r1, #1
adds r0, r4, #0
movs r1, #3
bl __divsi3
str r0, [sp, #0xc]
adds r1, r0, #0
muls r1, r0, r1
mov sb, r1
movs r2, #0
str r2, [sp, #4]
rsbs r4, r4, #0
adds r4, #1
mov r0, sb
muls r0, r4, r0
mov r4, sl
lsls r5, r4, #1
adds r4, r0, r5
ldr r0, [sp, #8]
mov r6, sb
muls r6, r0, r6
adds r0, r6, #0
mov r1, sl
bl __divsi3
adds r2, r0, #0
cmp r7, r2
bgt _08080506
ldr r1, [sp, #0x18]
adds r1, #0xf8
str r1, [sp, #0x20]
mov r1, sl
adds r0, r5, r1
lsls r3, r0, #1
str r6, [sp, #0x2c]
ldr r0, [sp, #8]
lsls r1, r0, #2
rsbs r1, r1, #0
adds r1, #4
mov r8, r1
rsbs r0, r0, #0
adds r0, #8
ldr r1, [sp, #0x10]
adds r6, r0, r1
ldr r0, [sp, #8]
adds r5, r0, r1
mov r0, r8
mov r1, sb
muls r1, r0, r1
mov r8, r1
_0808047A:
ldr r1, [sp, #0x1c]
adds r1, #0xa8
mov ip, r1
ldr r0, [sp, #0x14]
ldr r1, [sp, #4]
adds r0, r0, r1
str r0, [sp, #0x34]
cmp ip, r0
ble _080804A0
ldr r0, [sp, #0x20]
cmp r0, r5
ble _08080496
movs r0, #1
orrs r7, r0
_08080496:
ldr r1, [sp, #0x18]
cmp r1, r6
bge _080804A0
movs r0, #2
orrs r7, r0
_080804A0:
ldr r0, [sp, #0x14]
ldr r1, [sp, #4]
subs r0, r0, r1
mov ip, r0
adds r0, #8
ldr r1, [sp, #0x1c]
cmp r1, r0
bge _080804C4
ldr r0, [sp, #0x20]
cmp r0, r5
ble _080804BA
movs r0, #4
orrs r7, r0
_080804BA:
ldr r1, [sp, #0x18]
cmp r1, r6
bge _080804C4
movs r0, #8
orrs r7, r0
_080804C4:
cmp r4, #0
ble _080804F4
mov r2, r8
adds r0, r2, r3
adds r4, r4, r0
ldr r0, [sp, #0x2c]
mov r1, sb
subs r0, r0, r1
str r0, [sp, #0x2c]
lsls r0, r1, #2
add r8, r0
adds r6, #1
subs r5, #1
ldr r0, [sp, #0x2c]
mov r1, sl
str r3, [sp, #0x30]
bl __divsi3
adds r2, r0, #0
ldr r3, [sp, #0x30]
b _080804F6
.align 2, 0
_080804F0: .4byte gRoomControls
_080804F4:
adds r4, r4, r3
_080804F6:
mov r1, sl
lsls r0, r1, #2
adds r3, r3, r0
ldr r0, [sp, #4]
adds r0, #1
str r0, [sp, #4]
cmp r0, r2
ble _0808047A
_08080506:
movs r1, #0
str r1, [sp]
ldr r2, [sp, #0xc]
str r2, [sp, #4]
mov r4, sb
lsls r6, r4, #1
lsls r0, r2, #1
rsbs r0, r0, #0
adds r0, #1
mov r1, sl
muls r1, r0, r1
adds r0, r1, #0
adds r4, r6, r0
mov r5, sl
muls r5, r2, r5
adds r0, r5, #0
mov r1, sb
bl __divsi3
adds r2, r0, #0
ldr r0, [sp]
cmp r0, r2
bgt _080805E4
ldr r1, [sp, #0x18]
adds r1, #0xf8
str r1, [sp, #0x24]
mov r1, sb
adds r0, r6, r1
lsls r0, r0, #1
mov r8, r0
ldr r3, [sp, #0x10]
adds r3, #8
ldr r6, [sp, #0x10]
str r5, [sp, #0x28]
ldr r1, [sp, #4]
lsls r0, r1, #2
rsbs r0, r0, #0
adds r0, #4
mov r5, sl
muls r5, r0, r5
_08080556:
ldr r0, [sp, #0x1c]
adds r0, #0xa8
mov ip, r0
ldr r1, [sp, #0x14]
ldr r0, [sp, #4]
adds r1, r1, r0
str r1, [sp, #0x34]
cmp ip, r1
ble _0808057C
ldr r1, [sp, #0x24]
cmp r1, r6
ble _08080572
movs r0, #0x10
orrs r7, r0
_08080572:
ldr r0, [sp, #0x18]
cmp r0, r3
bge _0808057C
movs r0, #0x20
orrs r7, r0
_0808057C:
ldr r1, [sp, #0x14]
ldr r0, [sp, #4]
subs r1, r1, r0
mov ip, r1
mov r0, ip
adds r0, #8
ldr r1, [sp, #0x1c]
cmp r1, r0
bge _080805A2
ldr r0, [sp, #0x24]
cmp r0, r6
ble _08080598
movs r0, #0x40
orrs r7, r0
_08080598:
ldr r1, [sp, #0x18]
cmp r1, r3
bge _080805A2
movs r0, #0x80
orrs r7, r0
_080805A2:
cmp r4, #0
ble _080805CE
mov r2, r8
adds r0, r2, r5
adds r4, r4, r0
ldr r0, [sp, #0x28]
mov r1, sl
subs r0, r0, r1
str r0, [sp, #0x28]
lsls r0, r1, #2
adds r5, r5, r0
ldr r2, [sp, #4]
subs r2, #1
str r2, [sp, #4]
ldr r0, [sp, #0x28]
mov r1, sb
str r3, [sp, #0x30]
bl __divsi3
adds r2, r0, #0
ldr r3, [sp, #0x30]
b _080805D0
_080805CE:
add r4, r8
_080805D0:
mov r1, sb
lsls r0, r1, #2
add r8, r0
subs r3, #1
adds r6, #1
ldr r0, [sp]
adds r0, #1
str r0, [sp]
cmp r0, r2
ble _08080556
_080805E4:
cmp r7, #0
beq _080805EA
b _08080408
_080805EA:
ldr r0, [sp, #8]
add sp, #0x38
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided
-138
View File
@@ -1,138 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov sl, r0
mov r8, r1
lsls r0, r1, #4
movs r1, #0xa0
lsls r1, r1, #1
adds r0, r0, r1
mov ip, r0
mov r2, sl
lsls r0, r2, #4
adds r3, r0, r1
ldr r1, _080AE30C @ =gGFXSlots
lsls r0, r2, #1
add r0, sl
lsls r0, r0, #2
adds r0, r0, r1
ldrb r0, [r0, #5]
lsls r0, r0, #4
adds r7, r3, r0
movs r4, #0
ldr r6, _080AE310 @ =gUnk_020000C0
mov sb, r6
ldr r0, _080AE314 @ =gPlayerEntity
adds r2, r0, #0
adds r2, #0x26
adds r5, r0, #0
_080AE254:
ldr r0, [r5, #4]
cmp r0, #0
beq _080AE276
ldrb r0, [r2]
cmp sl, r0
bne _080AE264
mov r1, r8
strb r1, [r2]
_080AE264:
ldrh r0, [r2, #0x3a]
cmp r3, r0
bhi _080AE276
cmp r7, r0
bls _080AE276
subs r0, r0, r3
mov r6, ip
adds r1, r0, r6
strh r1, [r2, #0x3a]
_080AE276:
adds r2, #0x88
adds r5, #0x88
adds r4, #1
cmp r4, #0x4f
bls _080AE254
movs r0, #0
_080AE282:
movs r4, #0
adds r1, r0, #1
mov r8, r1
lsls r5, r0, #6
_080AE28A:
lsls r0, r4, #4
add r0, sb
adds r2, r5, r0
ldrb r1, [r2]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _080AE2B4
movs r0, #2
ands r0, r1
cmp r0, #0
bne _080AE2B4
ldrh r1, [r2, #0xa]
cmp r3, r1
bhi _080AE2B4
cmp r7, r1
bls _080AE2B4
subs r0, r1, r3
mov r6, ip
adds r1, r0, r6
strh r1, [r2, #0xa]
_080AE2B4:
adds r4, #1
cmp r4, #3
bls _080AE28A
mov r0, r8
cmp r0, #0x2f
bls _080AE282
movs r4, #0
ldr r0, _080AE318 @ =0xFFFFFC00
mov sl, r0
ldr r5, _080AE31C @ =gOAMControls
adds r5, #0x24
ldr r1, _080AE320 @ =0x000003FF
mov sb, r1
movs r2, #1
mov r8, r2
_080AE2D2:
ldrh r2, [r5]
lsls r0, r2, #0x16
lsrs r1, r0, #0x16
cmp r3, r1
bhi _080AE2F8
cmp r7, r1
bls _080AE2F8
subs r0, r1, r3
mov r6, ip
adds r1, r0, r6
mov r0, sb
ands r1, r0
mov r0, sl
ands r0, r2
orrs r0, r1
strh r0, [r5]
mov r2, r8
ldr r1, _080AE31C @ =gOAMControls
strb r2, [r1]
_080AE2F8:
adds r5, #8
adds r4, #1
cmp r4, #0x7f
bls _080AE2D2
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AE30C: .4byte gGFXSlots
_080AE310: .4byte gUnk_020000C0
_080AE314: .4byte gPlayerEntity
_080AE318: .4byte 0xFFFFFC00
_080AE31C: .4byte gOAMControls
_080AE320: .4byte 0x000003FF
.syntax divided
-570
View File
@@ -1,570 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ Please leave this file as a tutorial.
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
thumb_func_start EvilSpirit
EvilSpirit: @ 0x08086284
push {r4, lr}
adds r4, r0, #0
ldr r1, _080862B4 @ =gUnk_08120668
ldrb r0, [r4, #0xc]
lsls r0, r0, #2
adds r0, r0, r1
ldr r1, [r0]
adds r0, r4, #0
bl _call_via_r1
adds r1, r4, #0
adds r1, #0x41
movs r0, #0
strb r0, [r1]
adds r0, r4, #0
adds r0, #0x76
ldrh r1, [r0]
adds r0, #4
ldrh r2, [r0]
adds r0, r4, #0
movs r3, #0
bl SetAffineInfo
pop {r4, pc}
.align 2, 0
_080862B4: .4byte gUnk_08120668
thumb_func_start sub_080862B8
sub_080862B8: @ 0x080862B8
push {r4, r5, lr}
adds r4, r0, #0
movs r0, #0x63
bl CheckLocalFlag
cmp r0, #0
beq _080862CA
bl DeleteThisEntity
_080862CA:
movs r3, #1
strb r3, [r4, #0xc]
ldr r1, _08086350 @ =gUnk_08120678
ldrb r0, [r4, #0xa]
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
adds r1, r4, #0
adds r1, #0x7c
strh r0, [r1]
adds r2, r4, #0
adds r2, #0x76
strh r0, [r2]
ldrh r0, [r1]
subs r1, #2
strh r0, [r1]
ldrb r0, [r4, #0xa]
cmp r0, #0
bne _08086354
adds r1, #6
ldr r0, [r4, #0x2c]
str r0, [r1]
adds r1, #4
ldr r0, [r4, #0x30]
str r0, [r1]
ldrb r1, [r4, #0x19]
movs r0, #0x3f
ands r0, r1
strb r0, [r4, #0x19]
str r4, [r4, #0x50]
ldrb r0, [r4, #0x10]
movs r1, #0x80
orrs r0, r1
strb r0, [r4, #0x10]
adds r1, r4, #0
adds r1, #0x3c
movs r0, #7
strb r0, [r1]
adds r0, r4, #0
adds r0, #0x3f
strb r3, [r0]
subs r1, #1
movs r0, #4
strb r0, [r1]
movs r2, #0
_08086324:
adds r5, r2, #1
adds r0, r4, #0
movs r1, #0x18
adds r2, r5, #0
movs r3, #0
bl CreateObjectWithParent
adds r1, r0, #0
str r1, [r4, #0x54]
cmp r1, #0
beq _08086346
ldr r0, [r4, #0x50]
str r0, [r1, #0x50]
ldr r0, [r4, #0x54]
str r4, [r0, #0x54]
ldr r0, [r4, #0x54]
str r0, [r4, #0x50]
_08086346:
adds r2, r5, #0
cmp r2, #3
bls _08086324
b _08086360
.align 2, 0
_08086350: .4byte gUnk_08120678
_08086354:
ldrb r0, [r4, #0x19]
movs r1, #0x3f
ands r1, r0
movs r0, #0x40
orrs r1, r0
strb r1, [r4, #0x19]
_08086360:
ldrb r1, [r4, #0xa]
adds r0, r4, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_08086370
pop {r4, r5, pc}
thumb_func_start sub_08086370
sub_08086370: @ 0x08086370
push {r4, r5, r6, lr}
adds r6, r0, #0
ldrb r2, [r6, #0xa]
cmp r2, #0
beq _08086440
ldr r0, [r6, #0x54]
adds r0, #0x7f
ldrb r0, [r0]
cmp r0, #0
bne _080863B6
adds r1, r6, #0
adds r1, #0x7c
ldrh r0, [r1]
adds r2, r6, #0
adds r2, #0x76
strh r0, [r2]
ldrh r0, [r1]
subs r1, #2
strh r0, [r1]
movs r0, #0xc0
lsls r0, r0, #2
strh r0, [r6, #0x24]
ldr r2, [r6, #0x50]
ldr r0, [r2, #0x2c]
ldr r1, [r6, #0x2c]
subs r0, r0, r1
ldr r1, [r2, #0x30]
ldr r2, [r6, #0x30]
subs r1, r1, r2
bl CalculateDirectionFromOffsets
movs r1, #0x80
eors r0, r1
strb r0, [r6, #0x15]
b _08086428
_080863B6:
movs r0, #0xc0
lsls r0, r0, #3
strh r0, [r6, #0x24]
ldr r2, _080863E8 @ =gPlayerEntity
ldr r0, [r2, #0x2c]
ldr r1, [r6, #0x2c]
subs r0, r0, r1
ldr r1, [r2, #0x30]
ldr r2, [r6, #0x30]
subs r1, r1, r2
bl CalculateDirectionFromOffsets
adds r1, r0, #0
movs r0, #0x80
eors r1, r0
ldrb r2, [r6, #0x15]
cmp r1, r2
beq _080863F0
subs r0, r1, r2
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x80
bls _080863EC
adds r0, r2, #3
b _080863EE
.align 2, 0
_080863E8: .4byte gPlayerEntity
_080863EC:
subs r0, r2, #3
_080863EE:
strb r0, [r6, #0x15]
_080863F0:
ldr r0, _0808640C @ =gPlayerEntity
ldrb r1, [r0, #0x14]
movs r0, #2
ands r0, r1
cmp r0, #0
bne _08086410
adds r0, r6, #0
adds r0, #0x7c
ldrh r0, [r0]
adds r0, #0x40
adds r1, r6, #0
adds r1, #0x76
b _08086426
.align 2, 0
_0808640C: .4byte gPlayerEntity
_08086410:
adds r0, r6, #0
adds r0, #0x7c
ldrh r1, [r0]
subs r1, #0x20
adds r2, r6, #0
adds r2, #0x76
strh r1, [r2]
ldrh r0, [r0]
adds r0, #0x50
adds r1, r6, #0
adds r1, #0x7a
_08086426:
strh r0, [r1]
_08086428:
ldr r1, [r6, #0x50]
ldr r0, [r1, #0x2c]
str r0, [r6, #0x2c]
ldr r0, [r1, #0x30]
str r0, [r6, #0x30]
movs r0, #0x24
ldrsh r1, [r6, r0]
ldrb r2, [r6, #0x15]
adds r0, r6, #0
bl LinearMoveAngle
b _0808654A
_08086440:
adds r0, r6, #0
adds r0, #0x41
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0x13
bne _08086498
ldrb r0, [r6, #0x15]
adds r0, #1
strb r0, [r6, #0x15]
ldrb r0, [r6, #0x1d]
subs r0, #1
strb r0, [r6, #0x1d]
adds r2, r6, #0
adds r2, #0x7f
movs r0, #1
strb r0, [r2]
ldr r0, _08086480 @ =gPlayerEntity
ldrb r1, [r0, #0x14]
movs r0, #2
ands r0, r1
adds r3, r2, #0
cmp r0, #0
bne _08086484
adds r0, r6, #0
adds r0, #0x7c
ldrh r0, [r0]
adds r0, #0x10
adds r1, r6, #0
adds r1, #0x76
strh r0, [r1]
b _080864BC
.align 2, 0
_08086480: .4byte gPlayerEntity
_08086484:
adds r1, r6, #0
adds r1, #0x7c
ldrh r0, [r1]
subs r0, #0x20
adds r2, r6, #0
adds r2, #0x76
strh r0, [r2]
ldrh r0, [r1]
adds r0, #0x30
b _080864B6
_08086498:
ldrb r0, [r6, #0x15]
adds r0, #2
strb r0, [r6, #0x15]
movs r0, #0xf0
strb r0, [r6, #0x1d]
adds r3, r6, #0
adds r3, #0x7f
strb r2, [r3]
adds r1, r6, #0
adds r1, #0x7c
ldrh r0, [r1]
adds r2, r6, #0
adds r2, #0x76
strh r0, [r2]
ldrh r0, [r1]
_080864B6:
subs r1, #2
strh r0, [r1]
adds r1, r2, #0
_080864BC:
ldrb r2, [r6, #0x1d]
cmp r2, #0
bne _080864CA
movs r0, #2
strb r0, [r6, #0xc]
strb r2, [r3]
b _0808654A
_080864CA:
ldrb r0, [r6, #0x15]
adds r0, #0x40
lsls r0, r0, #0x18
cmp r0, #0
blt _080864E0
ldrh r2, [r1]
movs r3, #0
ldrsh r0, [r1, r3]
cmp r0, #0
ble _080864EE
b _080864EA
_080864E0:
ldrh r2, [r1]
movs r3, #0
ldrsh r0, [r1, r3]
cmp r0, #0
bge _080864EE
_080864EA:
rsbs r0, r2, #0
strh r0, [r1]
_080864EE:
ldr r5, _0808654C @ =gSineTable
ldrb r0, [r6, #0x15]
lsls r0, r0, #1
adds r0, r0, r5
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0x80
lsls r1, r1, #6
bl FixedMul
lsls r0, r0, #0x10
asrs r0, r0, #0x10
movs r4, #0x80
lsls r4, r4, #1
adds r1, r4, #0
bl FixedDiv
adds r1, r6, #0
adds r1, #0x80
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r1, [r1]
adds r1, r1, r0
str r1, [r6, #0x2c]
ldrb r0, [r6, #0x15]
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r5
movs r3, #0
ldrsh r0, [r0, r3]
movs r1, #0x80
lsls r1, r1, #5
bl FixedMul
lsls r0, r0, #0x10
asrs r0, r0, #0x10
adds r1, r4, #0
bl FixedDiv
adds r1, r6, #0
adds r1, #0x84
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r1, [r1]
subs r1, r1, r0
str r1, [r6, #0x30]
_0808654A:
pop {r4, r5, r6, pc}
.align 2, 0
_0808654C: .4byte gSineTable
thumb_func_start sub_08086550
sub_08086550: @ 0x08086550
push {r4, r5, lr}
adds r4, r0, #0
adds r0, #0x41
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0x13
beq _08086566
movs r0, #3
strb r0, [r4, #0xc]
b _08086592
_08086566:
adds r0, r4, #0
bl sub_0806F3E4
cmp r0, #0
beq _08086592
movs r0, #0x63
bl SetLocalFlag
movs r0, #0
bl SetRoomFlag
movs r5, #0
_0808657E:
ldr r0, [r4, #0x54]
ldr r1, [r0, #0x50]
str r1, [r4, #0x54]
bl DeleteEntity
adds r5, #1
cmp r5, #3
bls _0808657E
bl DeleteThisEntity
_08086592:
pop {r4, r5, pc}
thumb_func_start sub_08086594
sub_08086594: @ 0x08086594
push {r4, r5, r6, r7, lr}
adds r7, r0, #0
adds r0, #0x80
ldr r0, [r0]
ldr r1, [r7, #0x2c]
subs r0, r0, r1
adds r1, r7, #0
adds r1, #0x84
ldr r1, [r1]
ldr r2, [r7, #0x30]
subs r1, r1, r2
bl CalculateDirectionFromOffsets
strb r0, [r7, #0x15]
adds r0, r7, #0
adds r0, #0x41
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
cmp r0, #0x13
bne _08086608
movs r0, #0x80
lsls r0, r0, #1
strh r0, [r7, #0x24]
ldrb r0, [r7, #0x1d]
subs r0, #1
strb r0, [r7, #0x1d]
adds r2, r7, #0
adds r2, #0x7f
movs r0, #1
strb r0, [r2]
ldr r0, _080865EC @ =gPlayerEntity
ldrb r1, [r0, #0x14]
movs r0, #2
ands r0, r1
cmp r0, #0
bne _080865F0
adds r0, r7, #0
adds r0, #0x7c
ldrh r0, [r0]
adds r0, #0x10
adds r1, r7, #0
adds r1, #0x76
b _0808662A
.align 2, 0
_080865EC: .4byte gPlayerEntity
_080865F0:
adds r0, r7, #0
adds r0, #0x7c
ldrh r1, [r0]
subs r1, #0x20
adds r3, r7, #0
adds r3, #0x76
strh r1, [r3]
ldrh r0, [r0]
adds r0, #0x30
adds r1, r7, #0
adds r1, #0x7a
b _0808662A
_08086608:
movs r1, #0
movs r0, #0x80
lsls r0, r0, #2
strh r0, [r7, #0x24]
movs r0, #0xf0
strb r0, [r7, #0x1d]
adds r2, r7, #0
adds r2, #0x7f
strb r1, [r2]
adds r1, r7, #0
adds r1, #0x7c
ldrh r0, [r1]
adds r3, r7, #0
adds r3, #0x76
strh r0, [r3]
ldrh r0, [r1]
subs r1, #2
_0808662A:
strh r0, [r1]
ldrb r1, [r7, #0x1d]
cmp r1, #0
bne _0808663A
movs r0, #2
strb r0, [r7, #0xc]
strb r1, [r2]
b _080866B8
_0808663A:
movs r0, #0x24
ldrsh r1, [r7, r0]
ldrb r2, [r7, #0x15]
adds r0, r7, #0
bl LinearMoveAngle
ldrb r0, [r7, #0x15]
movs r1, #0x80
eors r0, r1
strb r0, [r7, #0x15]
ldr r6, _080866BC @ =gSineTable
ldrb r0, [r7, #0x15]
lsls r0, r0, #1
adds r0, r0, r6
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0x80
lsls r1, r1, #6
bl FixedMul
lsls r0, r0, #0x10
asrs r0, r0, #0x10
movs r5, #0x80
lsls r5, r5, #1
adds r1, r5, #0
bl FixedDiv
adds r1, r7, #0
adds r1, #0x80
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r4, [r1]
adds r4, r4, r0
ldrb r0, [r7, #0x15]
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r6
movs r1, #0
ldrsh r0, [r0, r1]
movs r1, #0x80
lsls r1, r1, #5
bl FixedMul
lsls r0, r0, #0x10
asrs r0, r0, #0x10
adds r1, r5, #0
bl FixedDiv
adds r1, r7, #0
adds r1, #0x84
lsls r0, r0, #0x10
asrs r0, r0, #8
ldr r2, [r1]
subs r2, r2, r0
adds r0, r7, #0
adds r1, r4, #0
movs r3, #2
bl EntityWithinDistance
cmp r0, #0
beq _080866B8
movs r0, #1
strb r0, [r7, #0xc]
_080866B8:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080866BC: .4byte gSineTable
+4 -9
View File
@@ -19730,11 +19730,6 @@
"size": 4,
"type": "animation"
},
{
"path": "evilSpirit/gUnk_08120678.bin",
"start": 1181304,
"size": 10
},
{
"path": "animations/gSpriteAnimations_EvilSpirit_0.bin",
"start": 1181314,
@@ -20784,19 +20779,19 @@
"type": "animation"
},
{
"path": "animations/gSpriteAnimations_Thunderbold_0.bin",
"path": "animations/gSpriteAnimations_Thunderbolt_0.bin",
"start": 1190252,
"size": 16,
"type": "animation"
},
{
"path": "animations/gSpriteAnimations_Thunderbold_1.bin",
"path": "animations/gSpriteAnimations_Thunderbolt_1.bin",
"start": 1190268,
"size": 12,
"type": "animation"
},
{
"path": "animations/gSpriteAnimations_Thunderbold_2.bin",
"path": "animations/gSpriteAnimations_Thunderbolt_2.bin",
"start": 1190280,
"size": 28,
"type": "animation"
@@ -23908,4 +23903,4 @@
},
"size": 129
}
]
]
-20
View File
@@ -1,20 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gSpriteAnimations_Thunderbold_0:: @ 0812296C
.include "animations/gSpriteAnimations_Thunderbold_0.s"
gSpriteAnimations_Thunderbold_1:: @ 0812297C
.include "animations/gSpriteAnimations_Thunderbold_1.s"
gSpriteAnimations_Thunderbold_2:: @ 08122988
.include "animations/gSpriteAnimations_Thunderbold_2.s"
gSpriteAnimations_Thunderbold:: @ 081229A4
.4byte gSpriteAnimations_Thunderbold_0
.4byte gSpriteAnimations_Thunderbold_1
.4byte gSpriteAnimations_Thunderbold_2
.4byte 00000000
+20
View File
@@ -0,0 +1,20 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gSpriteAnimations_Thunderbolt_0:: @ 0812296C
.include "animations/gSpriteAnimations_Thunderbolt_0.s"
gSpriteAnimations_Thunderbolt_1:: @ 0812297C
.include "animations/gSpriteAnimations_Thunderbolt_1.s"
gSpriteAnimations_Thunderbolt_2:: @ 08122988
.include "animations/gSpriteAnimations_Thunderbolt_2.s"
gSpriteAnimations_Thunderbolt:: @ 081229A4
.4byte gSpriteAnimations_Thunderbolt_0
.4byte gSpriteAnimations_Thunderbolt_1
.4byte gSpriteAnimations_Thunderbolt_2
.4byte 00000000
-15
View File
@@ -1,15 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_08120668:: @ 08120668
.4byte sub_080862B8
.4byte sub_08086370
.4byte sub_08086550
.4byte sub_08086594
gUnk_08120678:: @ 08120678
.incbin "evilSpirit/gUnk_08120678.bin"
+1 -1
View File
@@ -825,7 +825,7 @@ gSpritePtrs:: @ 080029B4
.4byte 00000000
.4byte 00000000
.4byte gSpriteAnimations_Thunderbold
.4byte gSpriteAnimations_Thunderbolt
.4byte 00000000
.4byte 00000000
.4byte 00000000
@@ -8,7 +8,7 @@ SCRIPT_START script_CastorWildsStatueLeft
EndBlock
script_0800B268:
_0807EA4C
_0807E9F0
UpdateFusion
SetPlayerIdle
CheckKinstoneFused KINSTONE_CASTOR_WILDS_STATUE_LEFT
JumpIf script_0800B2E2
@@ -8,7 +8,7 @@ SCRIPT_START script_CastorWildsStatueMiddle
EndBlock
script_0800B298:
_0807EA4C
_0807E9F0
UpdateFusion
SetPlayerIdle
CheckKinstoneFused KINSTONE_CASTOR_WILDS_STATUE_MIDDLE
JumpIf script_0800B2E2
@@ -8,7 +8,7 @@ SCRIPT_START script_CastorWildsStatueRight
EndBlock
script_0800B2C8:
_0807EA4C
_0807E9F0
UpdateFusion
SetPlayerIdle
CheckKinstoneFused KINSTONE_CASTOR_WILDS_STATUE_RIGHT
JumpIf script_0800B2E2
@@ -15,6 +15,7 @@ script_0800B6D4:
WaitForSyncFlagAndClear 0x00000004
SetRoomFlag 0x0000
WaitForSyncFlagAndClear 0x00000004
//30
CheckLocalFlag 0x009f
JumpIf script_0800B7A2
MessageNoOverlap TEXT_ITEM_GET, 0x7b
@@ -22,7 +23,7 @@ script_0800B6D4:
CallWithArg CheckMessageEqual, TEXT_ITEM_GET << 8 | 0x7d
JumpIf script_0800B6A6
WaitUntilTextboxCloses
SetLocalFlag 0x009f
SetLocalFlag IZUMI_01_FAIRY
GivePlayerItem ITEM_WALLET
Jump script_0800B698
.2byte 0x0000
@@ -17,9 +17,9 @@ script_08014C4C:
script_08014C56:
Call sub_0806CCB4
JumpIfNot script_08014C56
CheckLocalFlag 0x0066
CheckLocalFlag SORA_ELDER_TALK2ND
JumpIf script_08014C7C
SetLocalFlag 0x0066
SetLocalFlag SORA_ELDER_TALK2ND
MessageNoOverlap TEXT_WIND_TRIBE, 0x0d
WaitUntilTextboxCloses
GivePlayerItem ITEM_LIGHT_ARROW
+3 -3
View File
@@ -4,7 +4,7 @@ SCRIPT_START script_GregalSick
DoPostScriptAction 0x000a
SetAnimation 0x0000
EndBlock
CheckLocalFlag 0x0063
CheckLocalFlag SORA_ELDER_RECOVER
JumpIf script_08014BE8
script_08014B48:
EndBlock
@@ -54,9 +54,9 @@ script_08014BF2:
CheckEntityInteractType
JumpIfNot script_08014BF2
SetPlayerIdle
CheckLocalFlag 0x0065
CheckLocalFlag SORA_ELDER_TALK1ST
JumpIf script_08014C1C
SetLocalFlag 0x0065
SetLocalFlag SORA_ELDER_TALK1ST
MessageNoOverlap TEXT_WIND_TRIBE, 0x07
WaitUntilTextboxCloses
SetIntVariable 100
@@ -12,7 +12,7 @@ SCRIPT_START script_Npc4EFirstCloud
EndBlock
script_0800D636:
_0807EA4C
_0807E9F0
UpdateFusion
Call NPC4E_IsKinstoneFused
JumpIf script_0800D650
Call EnablePauseMenu
@@ -3,7 +3,7 @@ SCRIPT_START script_PlayerGetSword
SetInventoryValue ITEM_SMITH_SWORD, 0x0001
CallWithArg PutItemAnySlot, ITEM_SMITH_SWORD
PlaySound SFX_ITEM_GET
CallWithArg SetPlayerAnimation2, 0x0000045f
CallWithArg SetPlayerAnimation2, ANIM_GET_ITEM_SWORD
Call WaitForPlayerAnim
MessageFromTargetPos TEXT_ITEM_GET, 0x01, 0x000e
WaitUntilTextboxCloses
@@ -2,7 +2,7 @@
SCRIPT_START script_PlayerGetGreenCap
BeginBlock
Call sub_08094BE0
CallWithArg SetPlayerAnimation2, 0x0000045b
CallWithArg SetPlayerAnimation2, ANIM_GET_ITEM_BIG_NOCAP
PlaySound SFX_ITEM_GET
EndBlock
Call WaitForPlayerAnim
@@ -10,7 +10,7 @@ SCRIPT_START script_PlayerGetGreenCap
SetSyncFlag 0x00000008
BeginBlock
CallWithArg ResetPlayerFlag, PL_NO_CAP
CallWithArg SetPlayerAnimation2, 0x000008e4
CallWithArg SetPlayerAnimation2, ANIM_GET_NEWCAP
EndBlock
Call WaitForPlayerAnim
SetAnimationState 0x0004
@@ -7,11 +7,11 @@ SCRIPT_START script_PlayerAtTakeover
MoveTo 0x0168, 0x0058
SetAnimationState 0x0004
DoPostScriptAction 0x0000
CallWithArg SetPlayerAnimation2, 0x000003c5
CallWithArg SetPlayerAnimation2, ANIM_EZLO_SEARCH
Call WaitForPlayerAnim
MessageFromTargetPos TEXT_VAATI, 0x18, 0x000c
WaitUntilTextboxCloses
CallWithArg SetPlayerAnimation2, 0x000003c9
CallWithArg SetPlayerAnimation2, ANIM_EZLO_LEAVE_LEFT
Call WaitForPlayerAnim
SetAnimationState 0x0004
DoPostScriptAction 0x0000
+4 -4
View File
@@ -3,9 +3,9 @@ SCRIPT_START script_KingDaltusStone
BeginBlock
SetAnimationState 0x0004
DoPostScriptAction 0x000a
CheckLocalFlag 0x0071
CheckLocalFlag LV6_1d_KEYGET
JumpIf script_0800E3E8
CheckLocalFlag 0x0096
CheckLocalFlag LV6_39_KING
JumpIf script_0800E3BE
SetAnimation 0x000c
CallWithArg sub_0807F8E8, 0x00000000
@@ -28,7 +28,7 @@ script_0800E37A:
Wait 0x001e
DoPostScriptAction 0x0000
FacePlayer
SetLocalFlag 0x0096
SetLocalFlag LV6_39_KING
script_0800E3BE:
DoPostScriptAction 0x0000
_0807E9D4
@@ -44,7 +44,7 @@ script_0800E3C8:
Wait 0x000f
GivePlayerItem ITEM_SMALL_KEY
WaitPlayerGetItem
SetLocalFlag 0x0071
SetLocalFlag LV6_1d_KEYGET
EnablePlayerControl
script_0800E3E8:
_0807E9D4
+1 -1
View File
@@ -3,7 +3,7 @@ SCRIPT_START script_PlayerStonesFall
EndBlock
SetAnimationState 0x0004
DoPostScriptAction 0x0000
CallWithArg SetPlayerAnimation2, 0x000003c5
CallWithArg SetPlayerAnimation2, ANIM_EZLO_SEARCH
Call WaitForPlayerAnim
SetSyncFlag 0x00000004
Call SetPlayerActionNormal
@@ -31,7 +31,7 @@ script_0800B684:
Jump script_0800B6A6
script_0800B68E:
WaitUntilTextboxCloses
SetLocalFlag 0x009e
SetLocalFlag IZUMI_00_FAIRY
GivePlayerItem ITEM_LARGE_QUIVER
script_0800B698:
WaitPlayerGetItem
+1 -1
View File
@@ -1,4 +1,4 @@
@ Hyrule Town Carlov
@ Hyrule Town ~~Carlov~~ Burlov
SCRIPT_START script_Carlov
BeginBlock
_0807E9D4
+6 -6
View File
@@ -47,7 +47,7 @@ script_080146E2:
JumpIf script_0801472E
CheckLocalFlag 0x005f
JumpIf script_08014720
Call sub_08088574
Call FigurineDevice_TryAgainMessage
SetRoomFlag 0x000a
Jump script_0801473C
script_0801472E_2:
@@ -104,7 +104,7 @@ script_080146C6:
JumpIf script_0801472E
CheckLocalFlag 0x005f
JumpIf script_08014720
Call sub_08088574
Call FigurineDevice_TryAgainMessage
SetRoomFlag 0x0009
Jump script_0801473C
.endif
@@ -135,7 +135,7 @@ script_08014720:
.else
SetRoomFlag 0x0009
.endif
Call sub_08088504
Call FigurineDevice_NothingNewToDrawMessage
Jump script_0801473C
script_0801472E:
.ifdef EU
@@ -144,7 +144,7 @@ script_0801472E:
SetRoomFlag 0x0009
.endif
ClearRoomFlag 0x0006
Call sub_08088544
Call FigurineDevice_NewFigurinesMessage
script_0801473C:
CheckTextboxResult
JumpIfNot script_08014770
@@ -179,9 +179,9 @@ script_0801477A:
CheckRoomFlag 0x0007
JumpIf script_080147A4
script_0801478A:
Call sub_08088478
Call FigurineDevice_NoFigurinesLeftMessage
WaitUntilTextboxCloses
Call sub_080885B0
Call FigurineDevice_LostOrFinishedMessage
WaitPlayerGetItem
SetSyncFlag 0x00000008
Jump script_080147CE
+2 -2
View File
@@ -28,12 +28,12 @@ script_0800E974:
SetAnimation 0x0000
StartPlayerScript script_PlayerActivatedTrapCard
WaitForSyncFlagAndClear 0x00000001
SetLocalFlag 0x0074
SetLocalFlag MIZUKAKI_STAIR
PlaySound SFX_SECRET
Wait 0x00f0
MessageFromTarget TEXT_TOWN_MINISH1, 0x26
WaitUntilTextboxCloses
SetLocalFlag 0x0075
SetLocalFlag MIZUKAKI_STAIR_WARP_OK
script_0800E9E4:
WaitUntilTextboxCloses
Wait 0x000f
@@ -1,4 +1,4 @@
@ Library if you talk to him later?
@ Librari at the lake
SCRIPT_START script_LibrariLater
BeginBlock
DoPostScriptAction 0x000a
@@ -14,9 +14,9 @@ script_08012440:
SetAnimation 0x0009
Call sub_0806B2B4
WaitUntilTextboxCloses
CheckLocalFlag 0x00b3
CheckLocalFlag KHOUSE23_TALK1ST
JumpIf script_08012474
SetLocalFlag 0x00b3
SetLocalFlag KHOUSE23_TALK1ST
GivePlayerItem ITEM_HEART_CONTAINER
WaitPlayerGetItem
.ifdef USA
+1 -1
View File
@@ -6,7 +6,7 @@ SCRIPT_START script_Rem
SetAnimation 0x0002
CheckInventory1 ITEM_PEGASUS_BOOTS
JumpIf script_080130B6
CheckLocalFlag 0x0060
CheckLocalFlag SHOP02_KUTSU_00
JumpIf script_08012FD2
CheckGlobalFlag DASHBOOTS
JumpIf script_RemFallingAsleep
@@ -84,7 +84,7 @@ script_0801309E:
SetAction 0x0001
Jump script_0801308A
script_080130B6:
CheckLocalFlag 0x0062
CheckLocalFlag NPC37_REM_SLEEP
JumpIfNot script_080130C4
Call sub_0806A9B0
script_080130C4:
@@ -23,7 +23,7 @@ script_0800B9F4:
FacePlayer
DoPostScriptAction 0x0000
Call sub_0807F650
_0807E9F0
UpdateFusion
SetPlayerIdle
Call sub_0806948C
JumpIf script_0800BA24
@@ -55,7 +55,7 @@ script_08009FB6:
Jump script_08009F86
script_08009FD2:
EndBlock
CheckLocalFlag 0x00b0
CheckLocalFlag KHOUSE26_REMOCON
JumpIf script_0800A024
script_08009FDC:
EndBlock
@@ -3,7 +3,7 @@ SCRIPT_START script_CutsceneMiscObjectBrokenSword
BeginBlock
CheckInventory1 ITEM_FIRE_ELEMENT
JumpIf script_0800D24C
CheckLocalFlag 0x007e
CheckLocalFlag OYAKATA_DEMO
JumpIf script_0800D242
DoPostScriptAction 0x0008
EndBlock
@@ -24,7 +24,7 @@ script_0800B734:
Jump script_0800B6A6
script_0800B794:
WaitUntilTextboxCloses
SetLocalFlag 0x00a0
SetLocalFlag IZUMI_02_FAIRY
GivePlayerItem ITEM_BOMBBAG
Jump script_0800B698
script_0800B7A2:
+4 -4
View File
@@ -8,7 +8,7 @@ SCRIPT_START script_Melari
EndBlock
CheckInventory1 ITEM_FIRE_ELEMENT
JumpIf script_0800CFD2
CheckLocalFlag 0x007e
CheckLocalFlag OYAKATA_DEMO
JumpIfNot script_0800CFD2
SetAnimation 0x0008
script_0800CFD2:
@@ -19,7 +19,7 @@ script_0800CFD2:
SetSyncFlag 0x00000020
Jump script_0800CFFA
script_0800CFEC:
CheckLocalFlag 0x007e
CheckLocalFlag OYAKATA_DEMO
JumpIfNot script_0800CFFA
SetSyncFlag 0x00000010
script_0800CFFA:
@@ -60,7 +60,7 @@ script_0800D032:
MessageFromTargetPos TEXT_MINISH2, 0x5d, 0x0002
Jump script_0800D17C
script_0800D098:
CheckLocalFlag 0x007e
CheckLocalFlag OYAKATA_DEMO
JumpIfNot script_0800D0A8
MessageFromTarget TEXT_MINISH2, 0x3e
Jump script_0800D17C
@@ -88,7 +88,7 @@ script_0800D108:
JumpIf script_0800D108
PlaySound SFX_F8
SetSyncFlag 0x00000010
SetLocalFlag 0x007e
SetLocalFlag OYAKATA_DEMO
MessageFromTargetPos TEXT_MINISH2, 0x3e, 0x0002
WaitUntilTextboxCloses
Wait 0x000f
@@ -7,7 +7,7 @@ SCRIPT_START script_MountainMinish3
script_0800D282:
CheckInventory1 ITEM_FIRE_ELEMENT
JumpIf script_0800D292
CheckLocalFlag 0x007e
CheckLocalFlag OYAKATA_DEMO
JumpIf script_0800D2EA
script_0800D292:
BeginBlock
@@ -3,7 +3,7 @@ SCRIPT_START script_PlayerGetWhiteSword
SetInventoryValue ITEM_GREEN_SWORD, 0x0001
CallWithArg PutItemAnySlot, ITEM_GREEN_SWORD
PlaySound SFX_ITEM_GET
CallWithArg SetPlayerAnimation2, 0x000001e2
CallWithArg SetPlayerAnimation2, ANIM_GET_WHITE_SWORD
Call WaitForPlayerAnim
MessageNoOverlap TEXT_ITEM_GET, 0x02
WaitUntilTextboxCloses
+1 -1
View File
@@ -28,7 +28,7 @@ script_0800B134:
FacePlayer
CallWithArg sub_0806BC94, 0x00000004
Call sub_0807F650
_0807E9F0
UpdateFusion
.ifndef EU
@! @bug: In EU, Eenie is marked as done fusing if kinstone menu is closed without fusing
JumpIfNot script_0800B160
+1 -1
View File
@@ -10,7 +10,7 @@ SCRIPT_START script_MysteriousWall
EndBlock
script_0800B98A:
_0807EA4C
_0807E9F0
UpdateFusion
JumpIf script_0800B99E
Call EnablePauseMenu
EnablePlayerControl
@@ -2,7 +2,7 @@
SCRIPT_START script_PlayerPickUpFinalSword
CallWithArg sub_08095E7C, script_CutsceneMiscObjectSwordCharge11
PlaySound SFX_1D3
CallWithArg SetPlayerAnimation2, 0x000008e3
CallWithArg SetPlayerAnimation2, ANIM_GET_LAST_SWORD
Call sub_08096028
Wait 0x0078
SetSyncFlag 0x00020000
@@ -1,7 +1,7 @@
@ Player at Sanctuary pick up sword
SCRIPT_START script_PlayerPickUpSword
PlaySound SFX_1D3
CallWithArg SetPlayerAnimation2, 0x000008bf
CallWithArg SetPlayerAnimation2, ANIM_GET_NEW_SWORD
Call sub_08096028
Wait 0x003c
SetSyncFlag 0x00020000
+1 -1
View File
@@ -14,7 +14,7 @@ SCRIPT_START script_08016482
DisablePlayerControl
SetPlayerAction 0x00005408
StartPlayerScript script_08016384
SetPlayerAnimation 0x03a0
SetPlayerAnimation ANIM_FALL_ON_BACK
_0807E8E4_0
_0807E8E4_1
_0807E8E4_2
@@ -10,7 +10,7 @@ SCRIPT_START script_NPC4ESourceOfTheFlow
EndBlock
script_08015FE4:
_0807EA4C
_0807E9F0
UpdateFusion
SetPlayerIdle
CheckKinstoneFused KINSTONE_SOURCE_FLOW
JumpIf script_08015FFE
@@ -12,9 +12,9 @@ script_08012338:
SetPlayerIdle
MessageFromTarget TEXT_PERCY, 0x04
WaitUntilTextboxCloses
CheckLocalFlag 0x0042
CheckLocalFlag MHOUSE08_03
JumpIf script_0801235A
SetLocalFlag 0x0042
SetLocalFlag MHOUSE08_03
GivePlayerItem ITEM_RUPEE50
WaitPlayerGetItem
script_0801235A:
+10
View File
@@ -7,6 +7,16 @@
#define MAX_ROOMS 64
typedef enum {
PT_TREESTUMP,
PT_ROCK,
PT_2,
PT_DUNGEON,
PT_JAR,
PT_5,
PT_TOD,
} PortalTypes;
typedef struct {
u16 pixel_width;
u16 pixel_height;
+1 -1
View File
@@ -20,7 +20,7 @@ extern void sub_08001290(struct Entity_*, u32);
extern void GenericKnockback(struct Entity_*);
extern u32 GetFuserId(struct Entity_*);
extern u32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
extern u32 GravityUpdate(struct Entity_*, u32);
extern u32 GravityUpdate(struct Entity_* entity, u32 gravity);
extern u32 CheckOnScreen(struct Entity_*);
extern bool32 EntityInRectRadius(struct Entity_*, struct Entity_*, u32, u32);
extern void UpdateAnimationVariableFrames(struct Entity_*, u32);
+2 -2
View File
@@ -120,8 +120,8 @@ void sub_0801E1EC(u32, u32, u32);
void sub_0801DD58(u32, u32);
void sub_0801E1B8(u32, u32);
void AddKinstoneToBag(u32);
void sub_0801DFB4(struct Entity_*, u32, u32, u32);
u32 sub_0801E00C(void);
void InitializeFuseInfo(struct Entity_* entity, u32 textIndex, u32 cancelledTextIndex, u32 fusingTextIndex);
u32 PerformFuseAction(void);
bool32 CheckFusionMapMarkerDisabled(u32);
u32 sub_0801DB94(void);
u32 GetRandomSharedFusion(u8*);
+8
View File
@@ -13,6 +13,14 @@
#include "projectile.h"
bool32 EnemyInit(Entity* this);
/**
* 0: _OnTick
* 1: _OnCollision
* 2: _OnKnockback
* 3: _OnDeath
* 4: _OnConfused
* 5: _OnGrabbed
*/
u32 GetNextFunction(Entity*);
void EnemyFunctionHandler(Entity*, EntityActionArray);
void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
+1 -1
View File
@@ -20,7 +20,7 @@ typedef struct {
static_assert(sizeof(OctorokBossHeap) == 0x30);
struct OctorokBossEntity {
Entity base;
/*0x00*/ Entity base;
/*0x68*/ union SplitHWord field_0x68;
/*0x6a*/ union SplitHWord field_0x6a;
/*0x6c*/ union SplitHWord field_0x6c;
-1
View File
@@ -91,7 +91,6 @@ extern void sub_0805EC60(Entity*);
extern void InitPlayerMacro(PlayerMacroEntry*);
extern u32* sub_0805F25C(u32);
extern void sub_0805F8E4(u32 r0, WStruct* r1);
extern void sub_08060158(Entity*);
extern void sub_0806D0B0(Entity*);
extern bool32 sub_080806BC(u32, u32, u32, u32);
extern void sub_0808091C(const ScreenTransitionData* screenTransition, u32 transitionType);
+7
View File
@@ -143,4 +143,11 @@ union SplitHWord {
/* forward decls */
struct Entity_;
/**
* bitset macros
*/
#define BIT(bit) (1 << (bit))
#define IS_BIT_SET(value, bit) ((value)&BIT(bit))
#endif // GLOBAL_H
-1
View File
@@ -6,7 +6,6 @@
#include "player.h"
void CreateItemEntity(u32, u32, u32);
void sub_08081404(Entity*, u32);
extern void ExecuteItemFunction(ItemBehavior* this, u32 index);
extern void ItemDebug(ItemBehavior*, u32);
+14 -4
View File
@@ -6,17 +6,27 @@
extern void sub_08018C58(u32);
typedef enum {
FUSION_STATE_0, // fusion was not yet started
FUSION_STATE_1, // failed?
FUSION_STATE_2, // successful?
FUSION_STATE_3, // fusion is being performed
FUSION_STATE_4, // player has closed the first messagebox
FUSION_STATE_5, // fusion declined by the player
FUSION_STATE_6, // Successful, but not yet finished?
} FusionState;
typedef struct {
u8 _0;
u8 fusionState; /** @see FusionState */
u8 action;
u8 _2;
u8 kinstoneId;
u8 prevUpdatePriority;
u8 _5;
u16 textIndex;
u16 _8;
u16 _a;
Entity* ent;
u16 cancelledTextIndex;
u16 fusingTextIndex;
Entity* entity;
} FuseInfo;
static_assert(sizeof(FuseInfo) == 0x10);
extern FuseInfo gFuseInfo;
+60 -61
View File
@@ -73,7 +73,7 @@ s32 GetFacingDirectionInRectRadius(Entity* ent, u32 x, u32 y);
void sub_0806EE04(Entity* ent, void* a2, u32 a3);
u32 sub_0806EE20(Entity* ent);
s32 sub_0806F078(Entity* ent, s32 a2);
void sub_0806F118(Entity* ent);
void InitializeNPCFusion(Entity* ent);
void MarkFuserDone(Entity* ent);
void ShowNPCDialogue(Entity* ent, const Dialog* dia);
@@ -85,7 +85,6 @@ void CollideFollowers(void);
// TODO move?
void AddInteractableWhenBigFuser(Entity* ent, u32 kinstoneId);
u32 sub_0806F5A4(u32);
u32 GetFusionToOffer(Entity*);
void AddInteractableWhenBigObject(Entity*);
void sub_0807000C(Entity*);
@@ -222,23 +221,23 @@ enum NPC {
/*0x7f*/ NPC_NONE_39,
};
void Gentari(Entity*);
void Gentari();
void Gentari_Fusion(Entity*);
void Festari(Entity*);
void Festari_Fusion(Entity*);
void ForestMinish(Entity*);
void Festari();
void Festari_Fusion();
void ForestMinish();
void ForestMinish_Head(Entity*);
void ForestMinish_Fusion(Entity*);
void Postman(Entity*);
void Postman();
void Postman_Fusion(Entity*);
void NPC5(Entity*);
void NPC5();
void Townsperson(Entity*);
void Townsperson_Head(Entity*);
void Townsperson_Fusion(Entity*);
void Kid(Entity*);
void Kid();
void Kid_Head(Entity*);
void Kid_Fusion(Entity*);
void Guard(Entity*);
void Guard();
void Guard_Head(Entity*);
void NPC9(Entity*);
void Stamp(Entity*);
@@ -246,90 +245,90 @@ void Maid(Entity*);
void Maid_Head(Entity*);
void Marcy(Entity*);
void Wheaton(Entity*);
void Pita(Entity*);
void Pita();
void MinishEzlo(Entity*);
void MinishEzlo_Head(Entity*);
void Mailbox(Entity*);
void Beedle(Entity*);
void Beedle_Head(Entity*);
void Brocco(Entity*);
void Brocco();
void Brocco_Fusion(Entity*);
void SittingPerson(Entity*);
void SittingPerson();
void SittingPerson_Head(Entity*);
void SittingPerson_Fusion(Entity*);
void Pina(Entity*);
void Pina();
void Pina_Fusion(Entity*);
void Din(Entity*);
void Din();
void Din_Fusion(Entity*);
void Nayru(Entity*);
void Nayru();
void Nayru_Fusion(Entity*);
void Farore(Entity*);
void Farore();
void Farore_Fusion(Entity*);
void Sturgeon(Entity*);
void Sturgeon();
void Sturgeon_Head(Entity*);
void Sturgeon_Fusion(Entity*);
void TingleSiblings(Entity*);
void TingleSiblings_Fusion(Entity*);
void Stockwell(Entity*);
void Talon(Entity*);
void Stockwell();
void Talon();
void Talon_Head(Entity*);
void Talon_Fusion(Entity*);
void Malon(Entity*);
void Malon();
void Malon_Fusion(Entity*);
void Epona(Entity*);
void Epona_Fusion(Entity*);
void Epona();
void Epona_Fusion();
void MilkCart(Entity*);
void GhostBrothers(Entity*);
void GhostBrothers();
void GhostBrothers_Fusion(Entity*);
void Smith(Entity*);
void Smith();
void Smith_Head(Entity*);
void Smith_Fusion(Entity*);
void NPC23(Entity*);
void KingDaltus(Entity*);
void NPC23();
void KingDaltus();
void KingDaltus_Fusion(Entity*);
void MinisterPotho(Entity*);
void MinisterPotho();
void MinisterPotho_Fusion(Entity*);
void NPC26(Entity*);
void Vaati(Entity*);
void Zelda(Entity*);
void Mutoh(Entity*);
void Mutoh();
void Mutoh_Head(Entity*);
void Mutoh_Fusion(Entity*);
void Carpenter(Entity*);
void Carpenter();
void Carpenter_Head(Entity*);
void Carpenter_Fusion(Entity*);
void CastorWildsStatue(Entity*);
void CastorWildsStatue();
void CastorWildsStatue_Fusion(Entity*);
void Cat(Entity*);
void Cat();
void Cat_Fusion(Entity*);
void MountainMinish(Entity*);
void MountainMinish();
void MountainMinish_Head(Entity*);
void MountainMinish_Fusion(Entity*);
void ZeldaFollower(Entity*);
void Melari(Entity*);
void Melari_Head(Entity*);
void Melari_Fusion(Entity*);
void BladeBrothers(Entity*);
void BladeBrothers();
void BladeBrothers_Fusion(Entity*);
void Cow(Entity*);
void Cow_Fusion(Entity*);
void Goron(Entity*);
void Cow();
void Cow_Fusion();
void Goron();
void Goron_Fusion(Entity*);
void GoronMerchant(Entity*);
void Gorman(Entity*);
void Gorman();
void Gorman_Head(Entity*);
void Dog(Entity*);
void Dog_Head(Entity*);
void Dog_Fusion(Entity*);
void Syrup(Entity*);
void Dog();
void Dog_Head();
void Dog_Fusion();
void Syrup();
void Syrup_Head(Entity*);
void Rem(Entity*);
void TownMinish(Entity*);
void TownMinish_Head(Entity*);
void Rem();
void TownMinish();
void TownMinish_Head();
void TownMinish_Fusion(Entity*);
void Librari(Entity*);
void Librari();
void Librari_Fusion(Entity*);
void Percy(Entity*);
void Percy();
void Percy_Head(Entity*);
void Percy_Fusion(Entity*);
void VaatiReborn(Entity*);
@@ -343,26 +342,26 @@ void Dampe(Entity*);
void Dampe_Fusion(Entity*);
void DrLeft(Entity*);
void KingGustaf(Entity*);
void Gina(Entity*);
void Gina();
void Gina_Fusion(Entity*);
void Simon(Entity*);
void Anju(Entity*);
void Anju_Fusion(Entity*);
void Mama(Entity*);
void Anju();
void Anju_Fusion();
void Mama();
void Mama_Head(Entity*);
void Mama_Fusion(Entity*);
void Emma(Entity*);
void Teachers(Entity*);
void Teachers();
void Teachers_Head(Entity*);
void Teachers_Fusion(Entity*);
void WindTribespeople(Entity*);
void WindTribespeople_Head(Entity*);
void WindTribespeople_Fusion(Entity*);
void Gregal(Entity*);
void Gregal();
void Gregal_Fusion(Entity*);
void MayorHagen(Entity*);
void MayorHagen();
void MayorHagen_Fusion(Entity*);
void BigGoron(Entity*);
void BigGoron();
void Ezlo(Entity*);
void NPC4E(Entity*);
void NPC4E_Fusion(Entity*);
@@ -370,18 +369,18 @@ void NPC4F(Entity*);
void ClothesRack(Entity*);
void PicolyteBottle(Entity*);
void SmallTownMinish(Entity*);
void HurdyGurdyMan(Entity*);
void HurdyGurdyMan();
void HurdyGurdyMan_Head(Entity*);
void HurdyGurdyMan_Fusion(Entity*);
void Cucco(Entity*);
void Cucco();
void Cucco_Fusion(Entity*);
void CuccoChick(Entity*);
void CuccoChick_Fusion(Entity*);
void CuccoChick();
void CuccoChick_Fusion();
void FusionMenuNPC(Entity*);
void FusionMenuNPC_Head(Entity*);
void Phonograph(Entity*);
void NPC58(Entity*);
void NPC58_Head(Entity*);
void NPC58();
void NPC58_Head();
extern void (*const gNPCFunctions[128][3])(Entity*);
+20
View File
@@ -0,0 +1,20 @@
#ifndef ZELDA_H
#define ZELDA_H
#include "entity.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unused[24];
/*0x80*/ u16 unk_80;
} ZeldaEntity;
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ s8 unk_68;
/*0x69*/ s8 unk_69;
/*0x6a*/ u8 unused[10];
/*0x74*/ u16 unk_74;
} ZeldaFollowerEntity;
#endif // ZELDA_H
+2 -2
View File
@@ -134,7 +134,7 @@ typedef enum {
EZLO_CAP_FLYING,
GIANT_TWIG,
OBJECT_63,
THUNDERBOLD,
THUNDERBOLT,
LADDER_HOLE,
WATER_DROP_OBJECT,
GLEEROK_PARTICLE,
@@ -330,7 +330,7 @@ void SwordsmanNewsletter();
void EzloCapFlying();
void GiantTwig();
void Object63();
void Thunderbold();
void Thunderbolt();
void LadderHoleInBookshelf();
void WaterDropObject();
void GleerokParticle();
+12
View File
@@ -0,0 +1,12 @@
#ifndef CUTSCENEORCHESTRATOR_H
#define CUTSCENEORCHESTRATOR_H
#include "script.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unused1[28];
/*0x84*/ ScriptExecutionContext* context;
} CutsceneOrchestratorEntity;
#endif // CUTSCENEORCHESTRATOR_H
+18
View File
@@ -0,0 +1,18 @@
#ifndef ITEMONGROUND_H
#define ITEMONGROUND_H
#include "entity.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68;
/*0x69*/ u8 unk_69;
/*0x6a*/ u8 unk_6a;
/*0x6b*/ u8 unused1[1];
/*0x6c*/ u16 unk_6c;
/*0x6e*/ u16 unk_6e;
/*0x70*/ u8 unused2[22];
/*0x86*/ u16 unk_86;
} ItemOnGroundEntity;
#endif // ITEMONGROUND_H
+21
View File
@@ -0,0 +1,21 @@
#ifndef LILYPADLARGE_H
#define LILYPADLARGE_H
#include "entity.h"
typedef struct {
Entity base;
u8 unk_68[4];
s32 unk_6c;
s32 unk_70;
s16 unk_74;
s16 unk_76;
union SplitWord unk_78;
union SplitWord unk_7c;
u8 unk_80[2];
u16 unk_82;
u8 unk_84;
u8 unk_85;
} LilypadLargeEntity;
#endif // LILYPADLARGE_H
+4 -2
View File
@@ -25,7 +25,6 @@ bool32 EntityWithinDistance(Entity* entity, s32 x, s32 y, s32 distance);
u32 sub_0806FCA0(Entity*, Entity*);
u32 sub_0806F58C(Entity*, Entity*);
u32 PointInsideRadius(s32 x, s32 y, s32 radius);
u32 sub_0806F5A4(u32 idx);
bool32 sub_0806F3E4(Entity*);
void LinearMoveUpdate(Entity*);
bool32 sub_0806FD54(Entity*);
@@ -35,7 +34,10 @@ u32 sub_0806F730(Entity*);
bool32 sub_0806F520(Entity*);
void sub_0806F4E8(Entity*);
bool32 sub_0806FC80(Entity*, Entity*, s32);
u32 sub_0806F5B0(u32);
/** Maps the direction to an animation state 0 to 3. */
u32 GetAnimationStateForDirection4(u32 direction);
/** Maps the direction to an animation state 0 to 8. */
u32 GetAnimationStateForDirection8(u32 direction);
u32 sub_0806F824(Entity*, Entity*, s32, s32);
u32 sub_0806F948(Entity*);
void sub_0806FBB4(Entity*);
+184 -5
View File
@@ -95,6 +95,12 @@ typedef enum {
CONTROL_DISABLED,
} PlayerControlMode;
typedef enum {
DIR_DIAGONAL = 0x4,
DIR_NOT_MOVING_CHECK = 0x80,
DIR_NONE = 0xff,
} PlayerDirections;
typedef enum {
PL_BUSY = 0x1,
PL_FLAGS2 = 0x2,
@@ -125,6 +131,8 @@ typedef enum {
PL_SWORD_THRUST = 0x8000000,
PL_USE_OCARINA = 0x10000000,
PL_CLIMBING = 0x20000000,
PL_FLAGS40000000 = 0x40000000,
PL_FLAGS80000000 = 0x80000000,
} PlayerFlags;
enum PlayerItemId {
@@ -201,7 +209,8 @@ typedef enum {
SURFACE_AUTO_LADDER,
SURFACE_CLIMB_WALL,
SURFACE_2C,
SURFACE_2D // reuses SurfaceAction_Dust
SURFACE_2D, // reuses SurfaceAction_Dust
SURFACE_FF = 0xff,
} SurfaceType;
typedef enum {
@@ -275,6 +284,174 @@ typedef enum {
SWORD_MOVE_LOW_BEAM,
} SwordMove;
typedef enum {
ANIM_DEFAULT = 0x100,
ANIM_WALK = 0x104,
ANIM_SWORD = 0x108,
ANIM_BOUNCE = 0x114,
ANIM_SPINATTACK = 0x124,
ANIM_GREATSPIN = 0x128,
ANIM_ROLLATTACK_SPIN = 0x12c,
ANIM_ROLLATTACK_SLIDE = 0x130,
ANIM_ROLLATTACK_END = 0x134,
ANIM_SHIELD_PULLOUT = 0x158,
ANIM_SHIELD_WALK = 0x160,
ANIM_SHIELD = 0x164,
ANIM_SWORD_CHARGE = 0x168,
ANIM_SWORD_CHARGE_WALK = 0x16c,
ANIM_SWORD_CHARGE_BUMP = 0x170,
ANIM_DOWN_THRUST = 0x174,
ANIM_FALL = 0x1b8,
ANIM_GET_ITEM_BIG = 0x1b9,
ANIM_FALL_MINISH = 0x1ba,
ANIM_DIE1 = 0x1bc,
ANIM_GET_WHITE_SWORD = 0x1e2,
ANIM_BOW_PULLOUT = 0x21c,
ANIM_TRAPPED = 0x25c,
ANIM_BOW_SHOOT = 0x27c,
ANIM_BOW_CHARGE = 0x280,
ANIM_BOW_WALK = 0x284,
ANIM_ROCS_CAPE = 0x288,
ANIM_SWIM_STILL = 0x28c,
ANIM_SWIM_MOVE = 0x290,
ANIM_FROZEN = 0x294,
ANIM_DASH = 0x298,
ANIM_ELECTROCUTED = 0x29c,
ANIM_ROLL = 0x2ac,
ANIM_DIE2 = 0x2bd,
ANIM_DIVE = 0x2be,
ANIM_IN_LAVA = 0x2c1,
ANIM_PORTAL = 0x2c2,
ANIM_PORTAL_SHRINK = 0x2c3,
ANIM_DROWN_RESPAWN = 0x2ce,
ANIM_CLIMB1_UP = 0x2cf,
ANIM_CLIMB2_UP = 0x2d0,
ANIM_CLIMB1_DOWN = 0x2d1,
ANIM_CLIMB2_DOWN = 0x2d2,
ANIM_CLIMB_FROM_TOP = 0x2d3,
ANIM_CLIMB_LEFT = 0x2d4,
ANIM_CLIMB_RIGHT = 0x2d5,
ANIM_CLIMB_TO_TOP = 0x2d6,
ANIM_BOTTLE_DRINK = 0x2df,
ANIM_GET_ITEM_SMALL = 0x2e0,
ANIM_PICKUP = 0x338,
ANIM_PUSH = 0x33c,
ANIM_PULL = 0x340,
ANIM_THROW = 0x344,
ANIM_CARRY = 0x348,
ANIM_PULL2 = 0x34c,
ANIM_CARRY_STAND = 0x350,
ANIM_GRAB = 0x378,
ANIM_FALL_ON_BACK = 0x3a0,
ANIM_LAUNCHED = 0x3c0,
ANIM_EZLO_SEARCH = 0x3c5,
ANIM_EZLO_APPEAR_LEFT = 0x3c6,
ANIM_EZLO_EYES_UP = 0x3c7,
ANIM_EZLO_HEAD_DOWN = 0x3c8,
ANIM_EZLO_LEAVE_LEFT = 0x3c9,
ANIM_EZLO_APPEAR_RIGHT = 0x3ca,
ANIM_EZLO_EYES_MIDDLE = 0x3cc,
ANIM_EZLO_LEAVE_RIGHT = 0x3cd,
ANIM_DEFAULT_NOCAP = 0x400,
ANIM_WALK_NOCAP = 0x404,
ANIM_SWORD_NOCAP = 0x408,
ANIM_SHIELD_PULLOUT_NOCAP = 0x40c,
ANIM_SHIELD_WALK_NOCAP = 0x410,
ANIM_SHIELD_NOCAP = 0x414,
ANIM_BOUNCE_NOCAP = 0x418,
ANIM_HOP_NOCAP = 0x41c,
ANIM_JUMP_NOCAP = 0x420,
ANIM_LAND_NOCAP = 0x424,
ANIM_ROLL_NOCAP = 0x438,
ANIM_DROWN_NOCAP = 0x44c,
ANIM_FALL_NOCAP = 0x458,
ANIM_DIE1_NOCAP = 0x459,
ANIM_DIE2_NOCAP = 0x45a,
ANIM_GET_ITEM_BIG_NOCAP = 0x45b,
ANIM_GET_ITEM_SMALL_NOCAP = 0x45e,
ANIM_GET_ITEM_SWORD = 0x45f,
ANIM_GUSTJAR_PULLOUT = 0x500,
ANIM_GUSTJAR_SUCK = 0x504,
ANIM_MOLEMITTS_FLOOR = 0x508,
ANIM_MOLEMITTS_DIG = 0x50c,
ANIM_GUSTJAR_END = 0x510,
ANIM_GUSTJAR_BLOW = 0x514,
ANIM_GUSTJAR_WALK = 0x518,
ANIM_MOLEMITTS_CLANG = 0x51c,
ANIM_MOLEMITTS_MISS = 0x520,
ANIM_GUSTJAR_524 = 0x524,
ANIM_ENTER_POT = 0x52c,
ANIM_IN_POT = 0x530,
ANIM_LANTERN_LIGHT = 0x600,
ANIM_LANTERN_ON = 0x604,
ANIM_LANTERN = 0x608,
ANIM_LANTERN_BURN = 0x60c,
ANIM_BOTTLE_POUR = 0x610,
ANIM_BOTTLE_SWING = 0x614,
ANIM_BOTTLE_SWING_END = 0x618,
ANIM_FALL_IN_HOLE = 0x61c,
ANIM_IN_HOLE = 0x620,
ANIM_SPRING_JUMP = 0x624,
ANIM_CANE = 0x628,
ANIM_PARACHUTE_ACTIVATE = 0x700,
ANIM_BOOMERANG_MAGIC = 0x704,
ANIM_PARACHUTE = 0x708,
ANIM_MINECART_PAUSE = 0x70c,
ANIM_MINECART = 0x710,
ANIM_PARACHUTE_TURN_RIGHT = 0x714,
ANIM_PARACHUTE_TURN_OPPOSITE = 0x718,
ANIM_PARACHUTE_TURN_LEFT = 0x71c,
ANIM_PARACHUTE_TURN2_RIGHT = 0x720,
ANIM_PARACHUTE_TURN2_OPPOSITE = 0x724,
ANIM_PARACHUTE_TURN2_LEFT = 0x728,
ANIM_DROWN = 0x72c,
ANIM_PARACHUTE_FALL = 0x730,
ANIM_PUT_ON_EZLO = 0x734,
ANIM_SLEEP = 0x736,
ANIM_WAKEUP = 0x737,
ANIM_PORTAL_ACTIVATE = 0x738,
ANIM_SLEEP_NOCAP = 0x73a,
ANIM_WAKEUP_NOCAP = 0x73b,
ANIM_GROW = 0x73c,
ANIM_HOP = 0x80c,
ANIM_JUMP = 0x810,
ANIM_BOOMERANG = 0x818,
ANIM_LAND = 0x820,
ANIM_MOLDWORM_CAPTURED = 0x8b0,
ANIM_GET_NEW_SWORD = 0x8bf,
ANIM_OCARINA = 0x8e1,
ANIM_GET_LAST_SWORD = 0x8e3,
ANIM_GET_NEWCAP = 0x8e4,
ANIM_PICKUP_NOCAP = 0x928,
ANIM_CARRY_STAND_NOCAP = 0x92c,
ANIM_THROW_NOCAP = 0x930,
ANIM_CARRY_NOCAP = 0x934,
ANIM_PUSH_NOCAP = 0x93c,
ANIM_PULL_START_NOCAP = 0x940,
ANIM_PULL_NOCAP = 0x944,
ANIM_GRAB_NOCAP = 0x948,
ANIM_FALL_IN_HOLE_NOCAP = 0x950,
ANIM_IN_HOLE_NOCAP = 0x954,
ANIM_SWORD_MINISH = 0xc00,
ANIM_WALK_MINISH = 0xc04,
ANIM_ROLL_MINISH = 0xc08,
ANIM_SWIM_MINISH = 0xc0c,
ANIM_DASH_MINISH = 0xc10,
ANIM_DASH_CHARGE_MINISH = 0xc14,
ANIM_BOUNCE_MINISH = 0xc18,
ANIM_DROWN_MINISH = 0xc19,
ANIM_DIE1_MINISH = 0xc1a,
ANIM_DIE2_MINISH = 0xc1b,
ANIM_DIVE_MINISH = 0xc1c,
} PlayerAnimation;
typedef enum {
PAS_NORTH,
PAS_EAST,
PAS_SOUTH,
PAS_WEST,
} PlayerAnimationState;
typedef struct {
/*0x00*/ u8 prevAnim;
/*0x01*/ u8 grab_status;
@@ -304,7 +481,8 @@ typedef struct {
/*0x1c*/ u8 field_0x1c;
/*0x1d*/ u8 gustJarSpeed;
/*0x1e*/ u8 dash_state;
/*0x1f*/ u8 field_0x1f[3];
/*0x1f*/ u8 field_0x1f[2];
/*0x21*/ u8 bow_state;
/*0x22*/ u16 tilePosition;
/*0x24*/ u16 tileType;
/*0x26*/ u8 swim_state; /**< Is the player swimming? 0x80 for diving */
@@ -354,20 +532,21 @@ typedef struct {
/*0x05*/ u8 arrowCount;
/*0x06*/ u8 bombBagType;
/*0x07*/ u8 quiverType;
/*0x08*/ u8 filler[2];
/*0x08*/ u8 figurineCount;
/*0x09*/ u8 _hasAllFigurines;
/*0x0a*/ u8 charm;
/*0x0b*/ u8 picolyteType;
/*0x0c*/ u8 itemButtons[2];
/*0x0e*/ u8 bottles[4];
/*0x12*/ u8 effect;
/*0x13*/ u8 hasAllFigurines;
/*0x14*/ u8 filler3[4];
/*0x14*/ u8 filler14[4];
/*0x18*/ u16 rupees;
/*0x1a*/ u16 shells;
/*0x1c*/ u16 charmTimer;
/*0x1e*/ u16 picolyteTimer;
/*0x20*/ u16 effectTimer;
/*0x22*/ u8 filler4[6];
/*0x22*/ u8 filler22[2];
} Stats;
#define SLOT_A 0
+12 -12
View File
@@ -16,31 +16,31 @@ void DirtBallProjectile(Entity*);
void WindProjectile(Entity*);
void FireProjectile(Entity*);
void IceProjectile(Entity*);
void GleerokProjectile(Entity*);
void GleerokProjectile();
void KeatonDagger(Entity*);
void GuardLineOfSight(Entity*);
void ArrowProjectile(Entity*);
void MazaalEnergyBeam(Entity*);
void OctorokBossProjectile(Entity*);
void OctorokBossProjectile();
void StalfosProjectile(Entity*);
void LakituCloudProjectile(Entity*);
void LakituLightning(Entity*);
void MandiblesProjectile(Entity*);
void RemovableDust(Entity*);
void SpiderWeb(Entity*);
void MandiblesProjectile();
void RemovableDust();
void SpiderWeb();
void TorchTrapProjectile(Entity*);
void GuruguruBarProjectile(Entity*);
void V1DarkMagicProjectile(Entity*);
void BallAndChain(Entity*);
void V1FireProjectile(Entity*);
void V1DarkMagicProjectile();
void BallAndChain();
void V1FireProjectile();
void CannonballProjectile(Entity*);
void V1EyeLaser(Entity*);
void V1EyeLaser();
void Winder(Entity*);
void SpikedRollers(Entity*);
void V2Projectile(Entity*);
void V2Projectile();
void V3HandProjectile(Entity*);
void V3ElectricProjectile(Entity*);
void GyorgTail(Entity*);
void V3ElectricProjectile();
void GyorgTail();
void GyorgMaleEnergyProjectile(Entity*);
void V3TennisBallProjectile(Entity*);
+2 -2
View File
@@ -5,8 +5,8 @@
#define WINDER_NUM_SEGMENTS 8
typedef struct {
Entity base;
s16 positions[2 * WINDER_NUM_SEGMENTS];
/*0x00*/ Entity base;
/*0x68*/ s16 positions[2 * WINDER_NUM_SEGMENTS];
} WinderEntity;
#endif // WINDER_H
+16 -4
View File
@@ -135,7 +135,7 @@ typedef struct {
/* 0x04 */ s16 start_pos_x;
/* 0x06 */ s16 start_pos_y;
/* 0x08 */ u8 layer;
/* 0x09 */ u8 field_0x15;
/* 0x09 */ u8 filler9;
/* 0x0a */ u8 dungeon_area;
/* 0x0b */ u8 dungeon_room;
/* 0x0c */ s16 dungeon_x;
@@ -144,7 +144,7 @@ typedef struct {
/* 0x12 */ u16 dungeon_map_y;
/* 0x14 */ u16 overworld_map_x;
/* 0x16 */ u16 overworld_map_y;
/* 0x18 */ u8 field_0x24[8];
/* 0x18 */ u8 filler18[8];
} PlayerRoomStatus;
static_assert(sizeof(PlayerRoomStatus) == 0x20);
@@ -157,8 +157,20 @@ typedef struct {
/* 0x0a */ u16 stairs_idx; // seems to be a tile type @see MetaTileType, set in UpdateDoorTransition()
/* 0x0c */ PlayerRoomStatus player_status;
/* 0x2c */ u8 entity_update_type; // differentiates entity priority on kinstone menu?
/* 0x2d */ u8 field_0x2c[0x8];
/* 0x2d */ u8 field2d;
/* 0x2e */ u8 location;
/* 0x2f */ u8 field2f;
/* 0x30 */ u8 field30;
/* 0x31 */ u8 field31;
/* 0x32 */ u8 field32;
/* 0x33 */ u8 field33;
#if defined(JP) || defined(EU)
/* 0x34 */ u8 hint_height;
/* 0x35 */ u8 field35;
#else
/* 0x34 */ u8 field35;
/* 0x35 */ u8 hint_height;
#endif
/* 0x36 */ u16 hint_idx;
/* 0x38 */ u8 field_0x38;
/* 0x39 */ u8 field_0x39;
@@ -239,7 +251,7 @@ void* GetRoomProperty(u32 area, u32 room, u32 property);
bool32 LoadFixedGFX(Entity*, u32);
void UnloadGFXSlots(Entity*);
void sub_0804B3C4(TileEntity*);
void LoadSmallChestTile2(TileEntity*);
void sub_0804B0B0(u32 arg0, u32 arg1);
void DoExitTransition(const ScreenTransitionData* data);
+56 -39
View File
@@ -28,52 +28,69 @@ typedef enum {
*/
extern SaveResult HandleSave(u32 idx);
/**
* Contains save data regarding kinstones
*/
typedef struct {
u8 unused[2]; /**< unused */
u8 didAllFusions; /**< completed all 100 kinstone fusions */
u8 fusedCount; /**< number of kinstones fused */
u8 types[19]; /**< item id for each kinstone type present in kinstone bag */
u8 amounts[19]; /**< amount of each kinstone type above */
u8 filler[3]; /**< unused filler */
u8 fuserProgress[128]; /**< indexed by fuser id, incremented after fusion */
u8 fuserOffers[128]; /**< available kinstone fusion for each fuser */
u8 fusedKinstones[13]; /**< bitfield for fused kinstones
* @see CheckKinstoneFused */
u8 fusionUnmarked[13]; /**< bitfield for disabled fusion map markers
* @see CheckFusionMapMarkerDisabled */
} KinstoneSave;
/**
* Contains all information about a save file.
* The contents of this structure are read from and written to EEPROM.
*/
typedef struct {
/*0x000*/ u8 invalid; /**< File is invalid. */
/*0x001*/ u8 initialized; /**< File is initialized. */
/*0x002*/ u8 msg_speed; /**< Message speed. */
/*0x003*/ u8 brightness; /**< Brightness. */
/*0x004*/ u8 filler4[0x2];
/*0x006*/ u8 saw_staffroll;
/*0x007*/ u8 unk7; // TODO rolling barrel state?
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 field_0x9[0x17];
/*0x020*/ u16 field_0x20;
/*0x022*/ u8 field_0x22[0x1e];
/*0x040*/ u32 windcrests; /**< Windcrest flags. bits 0 - 0x10: Visited area of the overworld. Above 0x18: windcrest
activated. */
/*0x044*/ u8 filler44[0xC];
/*0x050*/ u32 unk50;
/*0x054*/ u8 filler54[0x8];
/*0x05C*/ u32 unk5C;
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
/*0x086*/ u8 filler86[0x2];
/*0x000*/ u8 invalid; /**< save file is invalid */
/*0x001*/ u8 initialized; /**< save file is initialized */
/*0x002*/ u8 msg_speed; /**< message speed setting */
/*0x003*/ u8 brightness; /**< brightness setting */
/*0x004*/ u8 filler4[2]; /**< unused filler */
/*0x006*/ u8 saw_staffroll; /**< beat the game and watched the credits */
/*0x007*/ u8 dws_barrel_state; /**< state of the big barrel in DWS, 0 or 2 */
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 available_figurines; /**< figurines available to get */
/*0x00A*/ u8 fillerA[22]; /**< unused filler */
/*0x020*/ u16 map_hints; /**< bitmask, used by subtask MapHint */
/*0x022*/ u8 filler22[30]; /**< unused filler */
/*0x040*/ u32 windcrests; /**< upper 8 bit Windcrest flags @see WindcrestID
* lower bits used for other things */
/*0x044*/ u8 filler44[12]; /**< unused filler */
/*0x050*/ u32 enemies_killed; /**< number of enemies killed */
/*0x054*/ u8 filler54[8]; /**< unused filler */
/*0x05C*/ u32 items_bought; /**< number of items bought in stockwells shop */
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
/*0x086*/ u8 filler86[2]; /**< unused filler */
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
/*0x0A8*/ Stats stats; /**< Player stats. */
/*0x0D0*/ u8 fillerD0[34];
/*0x0F2*/ u8 inventory[36];
/*0x116*/ u8 didAllFusions;
/*0x117*/ u8 fusedKinstoneCount;
/*0x118*/ u8 kinstoneTypes[0x13]; // 0x65-0x75 for each kinstone type present in kinstone bag
/*0x12B*/ u8 kinstoneAmounts[0x13]; // amount of each kinstone type above
/*0x13E*/ u8 filler13E[3];
/*0x141*/ u8 fuserProgress[128]; // indexed by fuser id, incremented after fusion
/*0x1C1*/ u8 fuserOffers[128]; // available kinstone fusion for each fuser
/*0x241*/ u8 fusedKinstones[13]; /**< Bitfield for fused kinstones. @see CheckKinstoneFused */
/*0x24E*/ u8 fusionUnmarked[13]; /**< Bitfield for disabled fusion map markers. @see CheckFusionMapMarkerDisabled */
/*0x25B*/ u8 filler25B;
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
/*0x45C*/ u8 dungeonKeys[0x10]; // TODO Indexed by dungeon id, keys per dungeon
/*0x46C*/ u8 dungeonItems[0x10]; // TODO items in the dungeon. 4: compass, 2: big key, 1: small key
/*0x47C*/ u8 dungeonWarps[0x10]; // TODO indexed by dungeon id, EnableDungeonWarp, IsDungeonWarpActive
/*0x48C*/ u32 timers[7];
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
/*0x4AC*/ u8 filler4ac[0x8];
/*0x0CC*/ u8 fillerCC[2]; /**< unused filler */
/*0x0D0*/ u8 figurines[36]; /**< figurine bitset */
/*0x0F2*/ u8 inventory[34]; /**< 2 bit per item @see Item */
/*0x114*/ KinstoneSave kinstones; /**< save data for kinstones @see KinstoneSave */
/*0x25C*/ u8 flags[0x200]; /**< flags */
/*0x45C*/ u8 dungeonKeys[0x10]; /**< indexed by dungeon id, keys per dungeon */
/*0x46C*/ u8 dungeonItems[0x10]; /**< dungeon items 4: compass, 2: big key, 1: small key */
/*0x47C*/ u8 dungeonWarps[0x10]; /**< indexed by dungeon id */
/*0x48C*/ u32 darknut_timer; /**< timer for darknut fight before Vaati fight */
/*0x490*/ u32 drug_kill_count; /**< "timer" enemy kill count when turning in the last drug quest item */
/*0x494*/ u32 biggoron_timer; /**< timer for biggoron mirror shield */
/*0x498*/ u32 vaati_timer; /**< timer for vaati wrath fight */
/*0x49C*/ u32 timer4; /**< "timer4" unused */
/*0x4A0*/ u32 timer5; /**< "timer5" unused */
/*0x4A4*/ u32 timer6; /**< "timer6" unused */
/*0x4A8*/ u32 demo_timer; /**< timer for US demo version playtime limit */
/*0x4AC*/ u8 filler4ac[8]; /**< unused filler */
} SaveFile;
/**
+2 -2
View File
@@ -51,7 +51,7 @@ extern u32 GetNextScriptCommandHalfwordAfterCommandMetadata(u16*);
void UnloadCutsceneData(Entity* entity);
void StartPlayerScript(Script* script);
void sub_0807DD50(Entity* entity);
void InitScriptForNPC(Entity* entity);
void sub_0807DD64(Entity* entity);
void sub_0807DD80(Entity* entity, Script* script);
void LookAt(Entity*, ScriptExecutionContext*, u32, u32);
@@ -60,7 +60,7 @@ ScriptExecutionContext* StartCutscene(Entity* entity, Script* script);
void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*));
void HandlePostScriptActions(Entity* entity, ScriptExecutionContext* context);
void HandleEntity0x82Actions(Entity* entity);
void sub_0807DD94(Entity*, void (*function)(Entity*, ScriptExecutionContext*));
void ExecuteScriptAndHandleAnimation(Entity* entity, void (*postScriptCallback)(Entity*, ScriptExecutionContext*));
ScriptExecutionContext* CreateScriptExecutionContext(void);
void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, Script* script);
+2 -2
View File
@@ -168,7 +168,7 @@ typedef enum {
SFX_FALL_HOLE,
SFX_86,
SFX_PLY_DIE,
SFX_88,
SFX_GRAB,
SFX_BARREL_RELEASE,
SFX_BARREL_ENTER,
SFX_BARREL_ROLL,
@@ -295,7 +295,7 @@ typedef enum {
SFX_PLACE_OBJ,
SFX_105,
SFX_106,
SFX_107,
SFX_ITEM_GLOVES_AIR,
SFX_108,
SFX_ITEM_GET,
SFX_10A,
+9 -9
View File
@@ -118,14 +118,14 @@ typedef enum {
META_TILE_TYPE_113, // 0x71
META_TILE_TYPE_114, // 0x72
META_TILE_TYPE_115, // 0x73 CHEST
META_TILE_TYPE_116, // 0x74
META_TILE_TYPE_116, // 0x74 CHEST_OPEN
META_TILE_TYPE_117, // 0x75
META_TILE_TYPE_118, // 0x76
META_TILE_TYPE_119, // 0x77
META_TILE_TYPE_120, // 0x78
META_TILE_TYPE_121, // 0x79
META_TILE_TYPE_122, // 0x7a
META_TILE_TYPE_123, // 0x7b
META_TILE_TYPE_118, // 0x76 TORCH
META_TILE_TYPE_119, // 0x77 TORCH_LIT
META_TILE_TYPE_120, // 0x78 PRESSURE_BUTTON
META_TILE_TYPE_121, // 0x79 PRESSURE_BUTTON_PRESSED
META_TILE_TYPE_122, // 0x7a PRESSURE_SQUARE
META_TILE_TYPE_123, // 0x7b PRESSURE_SQUARE_PRESSED
META_TILE_TYPE_124, // 0x7c
META_TILE_TYPE_125, // 0x7d
META_TILE_TYPE_126, // 0x7e
@@ -148,8 +148,8 @@ typedef enum {
META_TILE_TYPE_143, // 0x8f
META_TILE_TYPE_144, // 0x90
META_TILE_TYPE_145, // 0x91
META_TILE_TYPE_146, // 0x92
META_TILE_TYPE_147, // 0x93
META_TILE_TYPE_146, // 0x92 STAIRS_UP
META_TILE_TYPE_147, // 0x93 STAIRS_DOWN
META_TILE_TYPE_148, // 0x94
META_TILE_TYPE_149, // 0x95
META_TILE_TYPE_150, // 0x96
+15
View File
@@ -0,0 +1,15 @@
#ifndef SAVEFILE_WINDCREST_H
#define SAVEFILE_WINDCREST_H
typedef enum WindcrestID {
WINDCREST_MT_CRENEL = 24,
WINDCREST_VEIL_FALLS,
WINDCREST_CLOUD_TOPS,
WINDCREST_HYRULE_TOWN,
WINDCREST_LAKE_HYLIA,
WINDCREST_CASTOR_WILDS,
WINDCREST_SOUTH_HYRULE_FIELD,
WINDCREST_MINISH_WOODS,
} WindcrestID;
#endif // SAVEFILE_WINDCREST_H
+5 -5
View File
@@ -628,7 +628,7 @@ SECTIONS {
src/object/chuchuBossParticle.o(.text);
src/object/floatingPlatform.o(.text);
src/object/gustJarParticle.o(.text);
asm/object/evilSpirit.o(.text);
src/object/evilSpirit.o(.text);
src/object/houseDoorExterior.o(.text);
src/object/rupee.o(.text);
src/object/greatFairy.o(.text);
@@ -704,7 +704,7 @@ SECTIONS {
src/object/ezloCapFlying.o(.text);
src/object/giantTwig.o(.text);
src/object/object63.o(.text);
src/object/thunderbold.o(.text);
src/object/thunderbolt.o(.text);
src/object/ladderHoleInBookshelf.o(.text);
src/object/waterDropObject.o(.text);
src/object/gleerokParticle.o(.text);
@@ -1386,7 +1386,7 @@ SECTIONS {
src/object/chuchuBossParticle.o(.rodata);
src/object/floatingPlatform.o(.rodata);
src/object/gustJarParticle.o(.rodata);
data/const/object/evilSpirit.o(.rodata);
src/object/evilSpirit.o(.rodata);
data/animations/object/evilSpirit.o(.rodata);
src/object/houseDoorExterior.o(.rodata);
src/object/rupee.o(.rodata);
@@ -1483,8 +1483,8 @@ SECTIONS {
src/object/ezloCapFlying.o(.rodata);
src/object/giantTwig.o(.rodata);
src/object/object63.o(.rodata);
src/object/thunderbold.o(.rodata);
data/animations/object/thunderbold.o(.rodata);
src/object/thunderbolt.o(.rodata);
data/animations/object/thunderbolt.o(.rodata);
src/object/ladderHoleInBookshelf.o(.rodata);
src/object/gleerokParticle.o(.rodata);
src/object/linkEmptyingBottle.o(.rodata);
+1 -1
View File
@@ -53,7 +53,7 @@ void CopyOAM(void) {
void DrawEntities(void) {
void (*fn)(void);
gOAMControls._0[6] = gRoomTransition.field_0x2c[2] ? 15 : 0;
gOAMControls._0[6] = gRoomTransition.field2f ? 15 : 0;
gOAMControls._4 = gRoomControls.aff_x + gRoomControls.scroll_x;
gOAMControls._6 = gRoomControls.aff_y + gRoomControls.scroll_y;
gOAMControls.field_0x1++;
+186 -25
View File
@@ -116,7 +116,7 @@ void sub_08019764(void) {
UpdateEntities();
DrawEntities();
CopyOAM();
if ((--gUnk_02018EB0.unk_4 == 0) || ((gInput.newKeys & 10) != 0)) {
if ((--gUnk_02018EB0.unk_4 == 0) || ((gInput.newKeys & (B_BUTTON | START_BUTTON)) != 0)) {
gUnk_02018EB0.unk_0++;
}
}
@@ -170,7 +170,7 @@ u32 UpdatePlayerCollision(void) {
u32 index;
const s16* ptr1;
const s16* ptr2;
s32 tmp1;
s32 framestate;
u32 tmp2;
u32 tmp3;
// There are some weird assignment necessary to access gPlayerEntity.animationState correctly.
@@ -178,18 +178,18 @@ u32 UpdatePlayerCollision(void) {
u32 animationState2;
u32 animationState3;
if (gPlayerState.framestate == 0) {
tmp1 = gPlayerState.framestate_last;
if (gPlayerState.framestate == PL_STATE_IDLE) {
framestate = gPlayerState.framestate_last;
} else {
tmp1 = gPlayerState.framestate;
framestate = gPlayerState.framestate;
}
switch (tmp1) {
case 3:
switch (framestate) {
case PL_STATE_GUSTJAR:
return 0;
case 0x12:
case PL_STATE_DIE:
return 0;
case 0x16:
case PL_STATE_DROWN:
return 0;
}
@@ -198,7 +198,7 @@ u32 UpdatePlayerCollision(void) {
} else {
direction = gPlayerState.direction;
}
if (((direction & 0x83) == 0) && (gPlayerState.field_0xa == 0)) {
if (((direction & (DIR_NOT_MOVING_CHECK | 0x3)) == 0) && (gPlayerState.field_0xa == 0)) {
index = sub_0807BDB8(&gPlayerEntity, direction >> 2);
if (index != 0xff && (gRoomControls.scroll_flags & 4) == 0) {
ptr1 = &gUnk_080B4490[index * 2];
@@ -254,10 +254,11 @@ u32 UpdatePlayerCollision(void) {
if (gPlayerState.field_0xa != 0) {
return 0;
}
if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction != 0) {
if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction !=
DirectionNorth) {
return 0;
}
if ((gPlayerEntity.direction & 0x80) != 0) {
if ((gPlayerEntity.direction & DIR_NOT_MOVING_CHECK) != 0) {
return 0;
}
if (GetCollisionDataAtMetaTilePos(position, gPlayerEntity.collisionLayer) != COLLISION_DATA_15) {
@@ -306,10 +307,10 @@ u32 UpdatePlayerCollision(void) {
case VVV_58:
case VVV_91:
case SPECIAL_META_TILE_81:
if ((gPlayerState.flags & PL_MINISH) != 0) {
if (gPlayerState.flags & PL_MINISH) {
return 0;
}
if (gPlayerEntity.animationState != 0) {
if (gPlayerEntity.animationState != IdleNorth) {
return 0;
}
gHUD.rActionInteractTile = R_ACTION_READ;
@@ -357,7 +358,8 @@ u32 UpdatePlayerCollision(void) {
return 0;
}
#endif
if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction != 0) {
if ((Direction8FromAnimationState(gPlayerEntity.animationState)) - gPlayerState.direction !=
DirectionNorth) {
return 0;
}
if ((gPlayerEntity.direction & 0x80) != 0) {
@@ -417,7 +419,7 @@ u32 UpdatePlayerCollision(void) {
if ((animationState1 & 0xff) != 0) {
return 0;
}
if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) {
if (((gPlayerState.field_0x35 | gPlayerState.direction) & DIR_NOT_MOVING_CHECK) != 0) {
return 0;
}
if ((gPlayerEntity.frame & 2) == 0) {
@@ -557,7 +559,7 @@ u32 UpdatePlayerCollision(void) {
if (animationState3 == 0) {
return 0;
}
if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) {
if (((gPlayerState.field_0x35 | gPlayerState.direction) & DIR_NOT_MOVING_CHECK) != 0) {
return 0;
}
if ((gPlayerEntity.frame & 1) == 0) {
@@ -576,7 +578,7 @@ u32 UpdatePlayerCollision(void) {
if ((animationState2) != 4) {
return 0;
}
if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) {
if (((gPlayerState.field_0x35 | gPlayerState.direction) & DIR_NOT_MOVING_CHECK) != 0) {
return 0;
}
if ((gPlayerEntity.frame & 1) == 0) {
@@ -597,7 +599,8 @@ bool32 sub_0801A2B0(MapLayer* mapLayer, u32 position, u32 collisionType) {
u16 temp4;
uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1];
if ((((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) == 0) && ((gPlayerEntity.frame & 1) != 0)) {
if ((((gPlayerState.field_0x35 | gPlayerState.direction) & DIR_NOT_MOVING_CHECK) == 0) &&
((gPlayerEntity.frame & 1) != 0)) {
position = (u16)(position - (-uVar1)); // necessary for match
temp4 = GetVvvForMetaTileType(GetMetaTileType(position, gPlayerEntity.collisionLayer));
switch (temp4) {
@@ -714,18 +717,18 @@ bool32 sub_0801A4F8(void) {
if (GetInventoryValue(ITEM_POWER_BRACELETS) != 1) {
return FALSE;
}
if ((gPlayerState.direction & 0x80) != 0) {
if ((gPlayerState.direction & DIR_NOT_MOVING_CHECK) != 0) {
return FALSE;
}
if (gPlayerState.direction != gPlayerEntity.direction) {
return FALSE;
}
tmp = (((gPlayerEntity.direction + 4) & 0x18) >> 3);
tmp = (((gPlayerEntity.direction + 4) & DirectionWest) >> 3);
if ((gUnk_080B44A0[tmp] & gPlayerEntity.collisions) == 0) {
return FALSE;
}
} else {
if (((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) != 0) {
if (((gPlayerState.field_0x35 | gPlayerState.direction) & DIR_NOT_MOVING_CHECK) != 0) {
return FALSE;
}
if ((gPlayerEntity.frame & 1) == 0) {
@@ -735,7 +738,165 @@ bool32 sub_0801A4F8(void) {
return TRUE;
}
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", u32 sub_0801A570(Entity* a, u32 b))
u32 sub_0801A570(Entity* this, u32 param_2) {
MapLayer* layer;
u32 tileType;
u32 position;
u32 index1;
u32 index2;
u16* metatileTypes;
u8* collisionData;
if (this == NULL) {
return 0xffff;
}
layer = GetLayerByIndex(this->collisionLayer);
metatileTypes = layer->metatileTypes;
index1 = 4;
index2 = 2;
switch (this->animationState >> 1) {
case 0:
default:
position = COORD_TO_TILE_OFFSET(this, 0, 10);
do {
if (metatileTypes[layer->mapData[position]] == 0x370)
break;
position--;
index1--;
} while (index1 != 0);
position = position - 0x40;
do {
if (metatileTypes[layer->mapData[(position)]] != 0x374)
break;
index2++;
position -= 0x40;
} while (index2 < 4);
if (param_2 == 0) {
return position;
}
index1 = GetMetaTileType(position, this->collisionLayer);
if ((index1 - 0x369) > 1) {
position = 0xffff;
} else {
collisionData = layer->collisionData - 0x40 + position;
for (index1 = 0; index1 < index2; index1++) {
if (collisionData[index1] != 0) {
position = 0xffff;
break;
}
}
}
break;
case 1:
position = COORD_TO_TILE_OFFSET(this, -10, 0);
do {
if (layer->metatileTypes[layer->mapData[position]] == 0x370)
break;
position += 0x40;
index1--;
} while (index1 != 0);
position = position - 0x40;
do {
if (metatileTypes[layer->mapData[(position)]] != 0x374)
break;
index2++;
position -= 0x40;
} while (index2 < 4);
if (param_2 == 0) {
return position;
}
index1 = GetMetaTileType(position, this->collisionLayer);
if (!(index1 == 0x369) && !(index1 == 0x36d))
position = 0xffff;
else {
collisionData = layer->collisionData + (position + index2);
for (index1 = 0; index1 < index2; index1++) {
if (collisionData[index1 * 0x40] != 0) {
position = 0xffff;
break;
}
}
}
break;
case 2:
position = COORD_TO_TILE_OFFSET(this, 0, -10);
do {
if (layer->metatileTypes[layer->mapData[position]] == 0x36f)
break;
position++;
index1--;
} while (index1 != 0);
position = position - 1;
do {
if (metatileTypes[layer->mapData[position]] != 0x372)
break;
index2++;
position--;
} while (index2 < 4);
if (param_2 == 0) {
return position;
}
index1 = GetMetaTileType(position, this->collisionLayer);
if (!(index1 == 0x369) && !(index1 == 0x36b))
position = 0xffff;
else {
collisionData = layer->collisionData + (position + (index2 * 0x40));
for (index1 = 0; index1 < index2; index1++) {
if (collisionData[index1] != 0) {
position = 0xffff;
break;
}
}
}
break;
case 3:
position = COORD_TO_TILE_OFFSET(this, 10, 0);
do {
if (layer->metatileTypes[layer->mapData[position]] == 0x36f)
break;
position -= 0x40;
index1--;
} while (index1 != 0);
position = position - 1;
do {
if (metatileTypes[layer->mapData[position]] != 0x372)
break;
index2++;
position--;
} while (index2 < 4);
if (param_2 == 0) {
return position;
}
index1 = GetMetaTileType(position, this->collisionLayer);
if (!(index1 == 0x369) && !(index1 == 0x36c))
position = 0xffff;
else {
collisionData = layer->collisionData - 1 + position;
for (index1 = 0; index1 < index2; index1++) {
if (collisionData[index1 * 0x40] != 0) {
position = 0xffff;
break;
}
}
}
}
if (param_2 != 0) {
position |= index2 << 0xc;
}
return position;
}
u32 sub_0801A8D0(Entity* this, u32 param_2) {
u16* mapData;
@@ -1032,7 +1193,7 @@ void sub_0801AE44(bool32 loadGfx) {
}
sub_080809D4();
UpdateIsDiggingCave();
if (gRoomTransition.field_0x2c[0] != 0) {
if (gRoomTransition.field2d != 0) {
sub_0807C898();
}
if (gArea.lightType != 0) {
@@ -1069,7 +1230,7 @@ void SetMultipleTiles(const TileData* tileData, u32 basePosition, u32 layer) {
// Add a new entry at the end of gMetaTilesForSpecialTiles
void StoreMetaTileForSpecialTile(u32 metaTileIndex, u32 metaTilePos, u32 layer) {
u32 index;
if ((metaTileIndex < 0x4000) && (gRoomTransition.field_0x2c[3] == 0)) {
if ((metaTileIndex < 0x4000) && (gRoomTransition.field30 == 0)) {
index = gRoomVars.specialTileCount;
if (index < 0x100) {
gMetaTilesForSpecialTiles[index].metaTileIndex = metaTileIndex;
+19 -28
View File
@@ -77,44 +77,35 @@ void UpdatePlayerInput(void) {
u32 prevState;
PlayerInput* playerInput;
PlayerMacroEntry* playerMacro;
u32 zero;
if (gPlayerState.playerInput.playerMacro != NULL) {
// Player is controlled by macro.
playerInput = &gPlayerState.playerInput;
playerMacro = playerInput->playerMacro;
if (playerInput->playerMacroWaiting == 0) { // Execute next macro entry.
zero = 0;
goto code_2;
code_0:
if (flags != 2) { // !PLAYER_MACRO_IGNORE
playerInput->playerMacroWaiting = playerMacro->flags;
playerInput->playerMacroHeldKeys = playerMacro->keys;
}
playerMacro++;
playerInput->playerMacro = playerMacro;
goto code_4;
code_2:
do {
flags = playerMacro->flags >> 0xe;
if (flags != 1) {
break;
if (flags == 1) // PLAYER_MACRO_JUMPTO
(u8*)playerMacro += ((s16)playerMacro->keys);
else {
if (flags == 3) { // PLAYER_MACRO_END
playerInput->playerMacroWaiting = 0;
playerInput->playerMacroHeldKeys = 0;
playerMacro = NULL;
playerInput->playerMacro = playerMacro;
break;
} else {
if (flags != 2) { // !PLAYER_MACRO_IGNORE
playerInput->playerMacroWaiting = playerMacro->flags;
playerInput->playerMacroHeldKeys = playerMacro->keys;
}
playerMacro++;
playerInput->playerMacro = playerMacro;
break;
}
}
// PLAYER_MACRO_JUMPTO
(u8*)playerMacro += ((s16)playerMacro->keys);
} while (TRUE);
if (flags == 3) {
// PLAYER_MACRO_END
playerInput->playerMacroWaiting = zero;
playerInput->playerMacroHeldKeys = zero;
playerMacro = NULL;
playerInput->playerMacro = playerMacro;
} else {
goto code_0;
}
}
code_4:
playerInput->playerMacroWaiting--;
keys = playerInput->playerMacroHeldKeys;
} else {
@@ -185,7 +176,7 @@ u32 ConvInputToState(u32 keys) {
}
void sub_0805EE88(void) {
if ((gRoomTransition.field_0x2c[2] != 0) && ((gRoomTransition.frameCount & 3) == 0)) {
if ((gRoomTransition.field2f != 0) && ((gRoomTransition.frameCount & 3) == 0)) {
LoadPaletteGroup((((u32)gRoomTransition.frameCount & 0xc) >> 2) + 0x2f);
}
}
+1 -1
View File
@@ -54,7 +54,7 @@ void sub_0801D000(u32 a1) {
tmp = 0;
}
roomTransition->field_0x2c[2] = tmp;
roomTransition->field2f = tmp;
if (a1) {
CleanUpObjPalettes();
sub_0801CFD0(0xf);
+314 -153
View File
@@ -19,10 +19,11 @@
extern u8 gUnk_03003DE0;
extern u8 gzHeap[0x1000];
extern u8 gUnk_02035542[];
extern u32 gDungeonMap[0x800];
extern s16 gUnk_02018EE0[];
extern void (*const gUnk_080C9CAC[])(void);
extern void (*const gFuseActions[])(void);
static void StoreKeyInput(Input* input, u32 keyInput);
void ClearOAM(void);
@@ -78,6 +79,7 @@ bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank);
u32 sub_0801DF60(u32 a1, u8* p);
u32 sub_0801DF78(u32 a1, u32 a2);
void DrawMapPixel(u32 x, u32 y, s32 color);
void sub_0801E64C(s32 x1, s32 y1, s32 x2, s32 y2, s32 offset);
extern void* GetRoomProperty(u32, u32, u32);
@@ -341,20 +343,106 @@ void sub_0801D898(void* dest, void* src, u32 word, u32 size) {
} while (--size);
}
ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size));
void* zMalloc(u32 size) {
u16* heapStartOffset;
u32 slotFound;
u8* allocatedEntryStartOffset;
u8* allocatedEntryEndOffset;
u8* candidateSlotEndOffset;
u8* candidateSlotStartOffset;
u16 index1, index2;
u16 numEntries;
// align to 4
size = (size + 3) & ~3;
typedef struct {
u16 start; // chunk start (offset from gzHeap)
u16 end; // chunk end (offset from gzHeap)
} HEAP_ENTRY;
heapStartOffset = (u16*)(gzHeap);
numEntries = heapStartOffset[0];
slotFound = TRUE;
typedef struct {
u16 num_entries; // allocated HEAP_ENTRYs in entries
// Check for a candidate slot at the tail-end of the heap buffer
candidateSlotEndOffset = (u8*)heapStartOffset + sizeof(gzHeap);
candidateSlotStartOffset = candidateSlotEndOffset - size;
for (index2 = 0; index2 < numEntries; index2++) {
// maybe union, HEAP_ENTRY and heap space share the same space
HEAP_ENTRY entries[0];
u8 buf[4096 - 4]; // pads to 0x1000
} HEAP;
// Check if there is overlap with already allocated slots
allocatedEntryStartOffset = gzHeap + heapStartOffset[(index2 * 2) + 1];
allocatedEntryEndOffset = gzHeap + heapStartOffset[(index2 * 2) + 2];
if ((allocatedEntryStartOffset <= candidateSlotStartOffset &&
candidateSlotStartOffset <= allocatedEntryEndOffset)) {
slotFound = FALSE;
break;
}
if ((allocatedEntryStartOffset <= candidateSlotEndOffset &&
candidateSlotEndOffset <= allocatedEntryEndOffset)) {
slotFound = FALSE;
break;
}
if ((allocatedEntryStartOffset <= candidateSlotStartOffset &&
candidateSlotEndOffset <= allocatedEntryEndOffset) ||
(candidateSlotStartOffset <= allocatedEntryStartOffset &&
allocatedEntryEndOffset <= candidateSlotEndOffset)) {
slotFound = FALSE;
break;
}
}
if (!slotFound) {
index1 = 0;
// Start searching for candidate slot from the left side of the heap buffer.
do {
candidateSlotEndOffset = gzHeap + heapStartOffset[(index1 * 2) + 1];
candidateSlotStartOffset = candidateSlotEndOffset - size;
slotFound = FALSE;
// Ensure that the candidate slot doesn't collide with heap offsets section
if (candidateSlotStartOffset >= (u8*)(2 + (u32)heapStartOffset + (numEntries << 2) + 4)) {
slotFound = TRUE;
// Check if there is overlap with already allocated slots
for (index2 = 0; index2 < numEntries; index2++) {
allocatedEntryStartOffset = gzHeap + heapStartOffset[(index2 * 2) + 1];
allocatedEntryEndOffset = gzHeap + heapStartOffset[(index2 * 2) + 2];
if ((allocatedEntryStartOffset <= candidateSlotStartOffset &&
candidateSlotStartOffset < allocatedEntryEndOffset)) {
slotFound = FALSE;
break;
}
if ((allocatedEntryStartOffset < candidateSlotEndOffset &&
candidateSlotEndOffset <= allocatedEntryEndOffset)) {
slotFound = FALSE;
break;
}
if ((allocatedEntryStartOffset <= candidateSlotStartOffset &&
candidateSlotEndOffset <= allocatedEntryEndOffset) ||
(candidateSlotStartOffset <= allocatedEntryStartOffset &&
allocatedEntryEndOffset <= candidateSlotEndOffset)) {
slotFound = FALSE;
break;
}
}
if (slotFound) {
break;
}
}
} while ((index1 = (u16)(index1 + 1)) < numEntries);
}
if (!slotFound)
return 0;
// Register successful allocation
*(u16*)(gUnk_02035542 + (numEntries << 2)) = candidateSlotStartOffset - (gUnk_02035542 - 2);
*(u16*)(gUnk_02035542 + (numEntries << 2) + 2) = candidateSlotStartOffset - (gUnk_02035542 - 2) + size;
*(u16*)(gUnk_02035542 - 2) = numEntries + 1;
MemClear(candidateSlotStartOffset, size);
return candidateSlotStartOffset;
}
void zFree(void* ptr) {
u32 uVar1;
@@ -627,69 +715,71 @@ bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank) {
return FALSE;
}
void sub_0801DFB4(Entity* entity, u32 textIndex, u32 a3, u32 a4) {
void InitializeFuseInfo(Entity* entity, u32 textIndex, u32 cancelledTextIndex, u32 fusingTextIndex) {
MemClear(&gFuseInfo, sizeof(gFuseInfo));
gFuseInfo.textIndex = textIndex;
gFuseInfo._8 = a3;
gFuseInfo._a = a4;
gFuseInfo.ent = entity;
gFuseInfo.cancelledTextIndex = cancelledTextIndex;
gFuseInfo.fusingTextIndex = fusingTextIndex;
gFuseInfo.entity = entity;
gFuseInfo.kinstoneId = gPossibleInteraction.kinstoneId;
if (entity != NULL) {
gFuseInfo.prevUpdatePriority = entity->updatePriority;
entity->updatePriority = 2;
}
gFuseInfo._0 = 0;
gFuseInfo.fusionState = FUSION_STATE_0;
}
u32 sub_0801E00C(void) {
gUnk_080C9CAC[gFuseInfo.action]();
return gFuseInfo._0;
// returns the fusion state
u32 PerformFuseAction(void) {
gFuseActions[gFuseInfo.action]();
return gFuseInfo.fusionState;
}
void sub_0801E02C(void) {
void Fuse_Action0(void) {
MessageFromFusionTarget(gFuseInfo.textIndex);
gFuseInfo._0 = 3;
gFuseInfo.fusionState = FUSION_STATE_3;
gFuseInfo.action = 1;
}
void sub_0801E044(void) {
void Fuse_Action1(void) {
if ((gMessage.doTextBox & 0x7F) == 0) {
MenuFadeIn(4, 0);
gFuseInfo._0 = 4;
gFuseInfo.fusionState = FUSION_STATE_4;
gFuseInfo.action = 2;
SoundReq(SFX_6B);
}
}
void sub_0801E074(void) {
u32 tmp;
switch (gFuseInfo._0) {
case 5:
tmp = gFuseInfo._8;
// Waits until FUSION_STATE_5 or FUSION_STATE_6 is reached and displays the corresponding message.
void Fuse_Action2(void) {
u32 textIndex;
switch (gFuseInfo.fusionState) {
case FUSION_STATE_5:
textIndex = gFuseInfo.cancelledTextIndex;
break;
case 6:
tmp = gFuseInfo._a;
case FUSION_STATE_6:
textIndex = gFuseInfo.fusingTextIndex;
break;
default:
return;
}
MessageFromFusionTarget(tmp);
MessageFromFusionTarget(textIndex);
gFuseInfo.action = 3;
}
void sub_0801E0A0(void) {
void Fuse_Action3(void) {
if ((gMessage.doTextBox & 0x7f) == 0) {
if (gFuseInfo.ent != NULL) {
gFuseInfo.ent->updatePriority = gFuseInfo.prevUpdatePriority;
if (gFuseInfo.entity != NULL) {
gFuseInfo.entity->updatePriority = gFuseInfo.prevUpdatePriority;
}
gFuseInfo._0 = gFuseInfo._0 == 6 ? 2 : 1;
gFuseInfo.fusionState = gFuseInfo.fusionState == FUSION_STATE_6 ? FUSION_STATE_2 : FUSION_STATE_1;
}
}
void MessageFromFusionTarget(u32 textIndex) {
if (textIndex != 0) {
if (gFuseInfo.ent != NULL) {
MessageNoOverlap(textIndex, gFuseInfo.ent);
if (gFuseInfo.entity != NULL) {
MessageNoOverlap(textIndex, gFuseInfo.entity);
} else {
MessageFromTarget(textIndex);
}
@@ -798,46 +888,159 @@ void sub_0801E290(u32 param_1, u32 param_2, u32 count) {
}
}
ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4));
void sub_0801E31C(u32 sp00, u32 sp04, s32 r10, s32 r9) {
u16 sp1c, sp1c2;
u16 kk, kk2;
u16 uVar2;
s32 r5;
s32 r6;
s32 r7;
s32 r8; // the lower one of param3 and param4
ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4));
MemClear(&gUnk_02017AA0[gUnk_03003DE4[0]], 0xa00);
if (r10 < r9) {
r6 = 0;
r7 = r8 = r10;
r5 = 3 - r8 * 2;
void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5) {
s32 sVar1;
s32* ptr = (s32*)gUnk_02018EE0;
FORCE_REGISTER(s32 tmp, r1);
if ((0 <= param_2 || 0 <= param_4) && (param_2 < 0xa0 || (param_4 < 0xa0))) {
if (param_2 > param_4) {
SWAP(param_2, param_4, tmp);
SWAP(param_1, param_3, tmp);
while (r6 <= r7) {
sp1c = Div(r9 * r6, r10);
kk = Div(r9 * r7, r10);
// TODO: Fix data type in declaration. There shouldn't be a need to cast this.
((u32*)gUnk_02018EE0)[r6] = kk;
((u32*)gUnk_02018EE0)[r7] = sp1c;
if (r5 < 0) {
r5 += 6 + r6 * 4;
r6++;
} else {
r5 += 10 + (r6 - r7) * 4;
r7--;
r6++;
}
}
if (param_2 != param_4) {
sVar1 = Div((param_3 - param_1) * 0x10000, param_4 - param_2);
if (param_2 < 0) {
param_1 += (sVar1 * -param_2) >> 0x10;
param_2 = 0;
} else {
r6 = 0;
r7 = r8 = r9;
r5 = 3 - r8 * 2;
while (r6 <= r7) {
sp1c2 = Div(r10 * r6, r9);
kk2 = Div(r10 * r7, r9);
// TODO: Fix data type in declaration. There shouldn't be a need to cast this.
((u32*)gUnk_02018EE0)[r6] = kk2;
((u32*)gUnk_02018EE0)[r7] = sp1c2;
if (r5 < 0) {
r5 += 6 + r6 * 4;
r6++;
} else {
r5 += 10 + (r6 - r7) * 4;
r7--;
r6++;
}
if (0x9f < param_4) {
param_4 = 0x9f;
}
param_3 = param_1 << 0x10;
ptr += param_2 * 3 + param_5;
do {
if (param_1 < 0) {
param_1 = 0;
}
if (0xf0 < param_1) {
param_1 = 0xf0;
}
*ptr = param_1;
param_3 += sVar1;
param_1 = param_3 >> 0x10;
param_2++;
ptr += 3;
} while (param_2 <= param_4);
}
}
sub_0801E290(sp00, sp04, r8);
SetVBlankDMA((u16*)&gUnk_02017AA0[gUnk_03003DE4[0]], (u16*)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) +
0x1);
}
void sub_0801E49C(s32 baseX, s32 baseY, s32 radius, u32 baseAngle) {
u8* ptr2;
u32* ptr1;
u32 angle;
s32 x1, x2, x3, y1, y2, y3;
MemFill16(0xffff, gUnk_02018EE0, 0x780);
angle = (baseAngle - 0x40) & 0xff;
x1 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y1 = baseY + (gSineTable[angle] * radius >> 8);
angle = (baseAngle + 0x68) & 0xff;
x2 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y2 = baseY + (gSineTable[angle] * radius >> 8);
angle = (baseAngle - 0xe8) & 0xff;
x3 = baseX + (gSineTable[angle + 0x40] * radius >> 8);
y3 = baseY + (gSineTable[angle] * radius >> 8);
sub_0801E64C(x1, y1, x2, y2, 0);
sub_0801E64C(x1, y1, x3, y3, 1);
sub_0801E64C(x2, y2, x3, y3, 2);
MemClear(gUnk_02017AA0[gUnk_03003DE4[0]].filler, 0xa00);
ptr1 = (u32*)gUnk_02018EE0;
ptr2 = gUnk_02017AA0[gUnk_03003DE4[0]].filler;
for (y1 = 0xa0; y1 > 0; y1--, ptr2 += 2) {
x1 = ptr1[0];
x2 = ptr1[1];
x3 = ptr1[2];
ptr1 += 3;
if (x1 > x2) {
SWAP(x1, x2, y2);
}
if (x1 > x3) {
SWAP(x1, x3, y2);
}
if (x2 > x3) {
SWAP(x2, x3, y2);
}
if (x1 != 0xffffffff) {
ptr2[0] = x3;
ptr2[1] = x1;
} else {
if (x2 != x1) {
ptr2[0] = x3;
ptr2[1] = x2;
} else {
if (x3 != x1) {
ptr2[1] = x1;
ptr2[0] = x1;
}
}
}
}
SetVBlankDMA((u16*)(gUnk_02017AA0[gUnk_03003DE4[0]].filler), (u16*)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) +
0x1);
}
void sub_0801E64C(s32 x1, s32 y1, s32 x2, s32 y2, s32 offset) {
// GBA Resolutions
const s32 MAX_X_COORD = 240;
const s32 MAX_Y_COORD = 160;
s32 slope, preciseX, tmp;
s32* drawPtr = (s32*)gUnk_02018EE0;
if ((y1 < 0 && y2 < 0) || (y1 >= MAX_Y_COORD && y2 >= MAX_Y_COORD))
return;
if (y1 > y2) {
SWAP(y1, y2, tmp);
SWAP(x1, x2, tmp);
}
if (y1 == y2)
return;
slope = Div((x2 - x1) * 0x10000, y2 - y1);
if (y1 < 0) {
x1 += (slope * -y1) >> 0x10;
y1 = 0;
}
if (y2 >= MAX_Y_COORD) {
y2 = MAX_Y_COORD - 1;
}
preciseX = x1 << 0x10;
drawPtr += y1 * 3 + offset;
do {
// Clamp x1 in range
x1 = x1 < 0 ? 0 : x1;
x1 = x1 < MAX_X_COORD ? x1 : MAX_X_COORD;
*drawPtr = x1;
preciseX += slope;
x1 = preciseX >> 0x10;
y1++;
drawPtr += 3;
} while (y1 <= y2);
}
void NotifyFusersOnFusionDone(KinstoneId kinstoneId) {
@@ -845,13 +1048,13 @@ void NotifyFusersOnFusionDone(KinstoneId kinstoneId) {
u32 index;
if (kinstoneId - 1 < 100) {
for (index = 0; index < 0x80; index++) {
if (kinstoneId == gSave.fuserOffers[index]) {
gSave.fuserOffers[index] = KINSTONE_NEEDS_REPLACEMENT;
if (kinstoneId == gSave.kinstones.fuserOffers[index]) {
gSave.kinstones.fuserOffers[index] = KINSTONE_NEEDS_REPLACEMENT;
}
}
tmp = GetFuserId(gFuseInfo.ent);
if ((tmp - 1 < 0x7f) && (gSave.fuserOffers[tmp] == KINSTONE_NEEDS_REPLACEMENT)) {
gSave.fuserOffers[tmp] = KINSTONE_JUST_FUSED;
tmp = GetFuserId(gFuseInfo.entity);
if ((tmp - 1 < 0x7f) && (gSave.kinstones.fuserOffers[tmp] == KINSTONE_NEEDS_REPLACEMENT)) {
gSave.kinstones.fuserOffers[tmp] = KINSTONE_JUST_FUSED;
}
for (index = 0; index < 0x20; index++) {
if (kinstoneId == gPossibleInteraction.candidates[index].kinstoneId) {
@@ -870,17 +1073,17 @@ void AddKinstoneToBag(KinstoneId kinstoneId) {
index = GetIndexInKinstoneBag(kinstoneId);
if (index < 0) {
index = 0;
while (gSave.kinstoneTypes[index] != KINSTONE_NONE) {
while (gSave.kinstones.types[index] != KINSTONE_NONE) {
index++;
}
}
if ((u32)index < 0x12) {
gSave.kinstoneTypes[index] = kinstoneId;
tmp = gSave.kinstoneAmounts[index] + 1;
gSave.kinstones.types[index] = kinstoneId;
tmp = gSave.kinstones.amounts[index] + 1;
if (tmp > 99) {
tmp = 99;
}
gSave.kinstoneAmounts[index] = tmp;
gSave.kinstones.amounts[index] = tmp;
}
}
}
@@ -888,12 +1091,12 @@ void AddKinstoneToBag(KinstoneId kinstoneId) {
void RemoveKinstoneFromBag(KinstoneId kinstoneId) {
s32 idx = GetIndexInKinstoneBag(kinstoneId);
if (idx >= 0) {
s32 next = gSave.kinstoneAmounts[idx] - 1;
s32 next = gSave.kinstones.amounts[idx] - 1;
if (next <= 0) {
gSave.kinstoneTypes[idx] = KINSTONE_NONE;
gSave.kinstones.types[idx] = KINSTONE_NONE;
next = 0;
}
gSave.kinstoneAmounts[idx] = next;
gSave.kinstones.amounts[idx] = next;
}
}
@@ -902,92 +1105,50 @@ u32 GetAmountInKinstoneBag(KinstoneId kinstoneId) {
if (index < 0) {
return 0;
}
return gSave.kinstoneAmounts[index];
return gSave.kinstones.amounts[index];
}
u32 CheckKinstoneFused(KinstoneId kinstoneId) {
if (kinstoneId - 1 >= 100) {
return 0;
}
return ReadBit(&gSave.fusedKinstones, kinstoneId);
return ReadBit(&gSave.kinstones.fusedKinstones, kinstoneId);
}
bool32 CheckFusionMapMarkerDisabled(KinstoneId kinstoneId) {
if (kinstoneId - 1 >= 100) {
return FALSE;
}
return ReadBit(&gSave.fusionUnmarked, kinstoneId);
return ReadBit(&gSave.kinstones.fusionUnmarked, kinstoneId);
}
void SortKinstoneBag(void) {
#ifdef NON_MATCHING
u32 r5;
u32 i;
for (r5 = 0; r5 < 0x13; r5++) {
if (gSave.kinstoneAmounts[r5] == 0) {
gSave.kinstoneTypes[r5] = gSave.kinstoneAmounts[r5];
KinstoneSave* ptr = &gSave.kinstones;
for (i = 0; i < 19; i++) {
if (ptr->amounts[i] == 0) {
ptr->types[i] = 0;
}
}
gSave.kinstoneTypes[0x12] = 0;
gSave.kinstoneAmounts[0x12] = 0;
ptr->types[18] = 0;
ptr->amounts[18] = 0;
for (r5 = 0; r5 < 0x12; r5++) {
if ((gSave.kinstoneTypes[r5] - 0x65) > 0x10) {
MemCopy(&gSave.kinstoneTypes[r5 + 1], &gSave.kinstoneTypes[r5], 0x12 - r5);
MemCopy(&gSave.kinstoneAmounts[r5 + 1], &gSave.kinstoneAmounts[r5], 0x12 - r5);
for (i = 0; i < 18; i++) {
u32 t = ptr->types[i];
if (t < 0x65 || t > 0x75) {
MemCopy(&ptr->types[i + 1], &ptr->types[i], 0x12 - i);
MemCopy(&ptr->amounts[i + 1], &ptr->amounts[i], 0x12 - i);
}
}
#else
u32 r0, r4, r5;
u32 new_var;
u8 *r1, *r2, *r3, *r6, *r7, *r8, *r9, *r10;
new_var = 4;
r1 = &gSave.inventory[34];
r5 = 0;
r2 = gSave.kinstoneTypes;
code0_0:
r0 = r2[0x13];
r3 = &r1[4];
r10 = r3;
if (r0 == 0) {
*r2 = r0;
}
r2++;
r5++;
if (r5 <= 0x12)
goto code0_0;
r1[0x16] = 0;
r1[0x29] = 0;
r5 = 0;
r9 = &r1[0x17];
r3 = &r1[0x18];
r8 = r3;
r7 = &r1[new_var];
r6 = &r1[5];
code0_2:
r0 = r10[r5] - 0x65;
if (r0 > 0x10) {
MemCopy(r6, r7, 0x12 - r5);
MemCopy(r8, r9, 0x12 - r5);
}
r9++;
r8++;
r7++;
r6++;
r5++;
if (r5 <= 0x11)
goto code0_2;
#endif
}
s32 GetIndexInKinstoneBag(KinstoneId kinstoneId) {
u32 i;
for (i = 0; i < 0x12; ++i) {
if (kinstoneId == gSave.kinstoneTypes[i])
if (kinstoneId == gSave.kinstones.types[i])
return i;
}
return -1;
@@ -1055,7 +1216,7 @@ void UpdateVisibleFusionMapMarkers(void) {
#else
if (sub_0807CB24(tmp, s->flag)) {
#endif
WriteBit(&gSave.fusionUnmarked, kinstoneId);
WriteBit(&gSave.kinstones.fusionUnmarked, kinstoneId);
}
}
}
@@ -1076,8 +1237,8 @@ KinstoneId GetFusionToOffer(Entity* entity) {
if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0 || fuserData[0] > gSave.global_progress) {
return KINSTONE_NONE;
}
offeredFusion = gSave.fuserOffers[fuserId];
fuserProgress = gSave.fuserProgress[fuserId];
offeredFusion = gSave.kinstones.fuserOffers[fuserId];
fuserProgress = gSave.kinstones.fuserProgress[fuserId];
fuserFusionData = (u8*)(fuserProgress + (u32)fuserData);
while (TRUE) { // loop through fusions for this fuser
switch (offeredFusion) {
@@ -1108,8 +1269,8 @@ KinstoneId GetFusionToOffer(Entity* entity) {
}
offeredFusion = KINSTONE_NEEDS_REPLACEMENT; // already completed, try next fusion in the list
}
gSave.fuserOffers[fuserId] = offeredFusion;
gSave.fuserProgress[fuserId] = fuserProgress;
gSave.kinstones.fuserOffers[fuserId] = offeredFusion;
gSave.kinstones.fuserProgress[fuserId] = fuserProgress;
randomMood = Random();
fuserStability = fuserData[1];
if (fuserStability <= randomMood % 100) {
@@ -1619,11 +1780,11 @@ const DungeonFloorMetadata gDungeonFloorMetadatas[] = {
{ 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 }, { 1, 3, 3 },
};
void (*const gUnk_080C9CAC[])(void) = {
sub_0801E02C,
sub_0801E044,
sub_0801E074,
sub_0801E0A0,
void (*const gFuseActions[])(void) = {
Fuse_Action0,
Fuse_Action1,
Fuse_Action2,
Fuse_Action3,
};
// TODO merge
+3 -3
View File
@@ -445,7 +445,7 @@ void AcroBandit_Type1Action4(Entity* this) {
}
}
if (this->direction & 0xf)
if (this->direction & (0x3 | DirectionEast | DIR_DIAGONAL))
this->spriteSettings.flipX = (this->direction >> 4 ^ 1);
ProcessMovement0(this);
@@ -486,7 +486,7 @@ void AcroBandit_Type1Action6(Entity* this) {
this->action = 7;
dir = fallDirections[this->field_0x74.HALF.LO * 5 + this->type2];
this->direction = dir;
if (dir >= 0x10) {
if (dir >= DirectionSouth) {
this->spriteSettings.flipX = 1;
} else {
this->spriteSettings.flipX = 0;
@@ -570,7 +570,7 @@ static void sub_080322E8(Entity* this) {
}
} else {
u8 tmp = this->direction;
if (tmp & 0xF) {
if (tmp & (0x3 | DirectionEast | DIR_DIAGONAL)) {
tmp >>= 4;
tmp ^= 1;
if (tmp != this->spriteSettings.flipX) {
+4 -3
View File
@@ -105,7 +105,8 @@ void sub_080218CC(Entity* this) {
if (this->subAction == 0) {
this->subAction = 1;
this->spriteSettings.draw = 1;
this->direction = ((sub_08049F84(this, 1) ^ 0x10) + gUnk_080CB5DC[Random() & 7]) & 0x1f;
this->direction = ((sub_08049F84(this, 1) ^ 0x10) + gUnk_080CB5DC[Random() & 7]) &
(0x3 | DIR_DIAGONAL | DirectionNorth | DirectionEast | DirectionSouth | DirectionWest);
this->speed = 0x100;
this->zVelocity = Q_16_16(1.125);
}
@@ -244,9 +245,9 @@ void sub_08021B64(Entity* this) {
this->zVelocity = Q_16_16(1.0);
((u8*)&this->field_0x86)[1] = 0;
if (gPlayerEntity.direction != 0xff) {
this->direction = 0x10 ^ gPlayerEntity.direction;
this->direction = DirectionSouth ^ gPlayerEntity.direction;
} else {
this->direction = (gPlayerEntity.animationState << 2) ^ 0x10;
this->direction = (gPlayerEntity.animationState << 2) ^ DirectionSouth;
}
InitializeAnimation(this, 5);
} else {
+4 -2
View File
@@ -10,18 +10,20 @@
#include "room.h"
#include "object.h"
#define DIR_NOT_MOVING_CHECK 0x80
void BladeTrap(Entity* this) {
if (this->action == 0) {
this->action = 1;
this->child = GetCurrentRoomProperty(this->type);
UpdateRailMovement(this, (u16**)&this->child, &this->field_0x74.HWORD);
}
if (!(this->direction & 0x80)) {
if (!(this->direction & DIR_NOT_MOVING_CHECK)) {
LinearMoveUpdate(this);
}
if (!(--this->field_0x74.HWORD)) {
if (!(this->direction & 0x80)) {
if (!(this->direction & DIR_NOT_MOVING_CHECK)) {
EnqueueSFX(SFX_METAL_CLINK);
}
UpdateRailMovement(this, (u16**)&this->child, &this->field_0x74.HWORD);
+10 -10
View File
@@ -62,7 +62,7 @@ void Bobomb_OnCollision(Entity* this) {
this->zVelocity = Q_16_16(1.5);
this->speed = 0;
this->field_0x80.HALF.HI = 1;
InitializeAnimation(this, this->direction >> 4 | 6);
InitializeAnimation(this, this->direction >> 4 | IdleWest);
break;
}
}
@@ -123,7 +123,7 @@ void sub_0802C83C(Entity* this) {
} else {
this->field_0x82.HALF.LO = 2;
this->timer = 120;
InitializeAnimation(this, (this->direction >> 4) | 6);
InitializeAnimation(this, (this->direction >> 4) | IdleWest);
COLLISION_OFF(this);
this->hitType = 0x6e;
}
@@ -147,7 +147,7 @@ void sub_0802C8D8(Entity* this) {
this->action = 1;
this->timer = 60;
this->subtimer = 0;
this->direction = (Random() & 0x18) | 4;
this->direction = (Random() & 0x18) | DIR_DIAGONAL;
this->carryFlags = 0;
this->gustJarFlags = 0x12;
this->field_0x82.HALF.LO = 0;
@@ -163,7 +163,7 @@ void sub_0802C91C(Entity* this) {
if (this->field_0x82.HALF.LO) {
if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
InitializeAnimation(this, (this->direction >> 4) | 2);
InitializeAnimation(this, (this->direction >> 4) | IdleEast);
}
if (--this->timer == 0) {
sub_0802CBC4(this);
@@ -180,7 +180,7 @@ void sub_0802C91C(Entity* this) {
}
if (--this->timer == 0) {
this->timer = 60;
this->direction = (this->direction + 8) & 0x1c;
this->direction = (this->direction + 8) & (DirectionWest | DIR_DIAGONAL);
InitializeAnimation(this, this->direction >> 4);
}
}
@@ -196,7 +196,7 @@ void sub_0802C9D0(Entity* this) {
this->spritePriority.b1 = 0;
this->field_0x82.HALF.HI = 1;
sub_0802CC18(this);
InitializeAnimation(this, (this->direction >> 4) | 6);
InitializeAnimation(this, (this->direction >> 4) | IdleWest);
GetNextFrame(this);
}
@@ -210,7 +210,7 @@ void sub_0802CA10(Entity* this) {
}
} else {
this->field_0x82.HALF.HI = 2;
this->direction = (((gPlayerEntity.animationState) << 2) | 4) & 0x1c;
this->direction = (((gPlayerEntity.animationState) << 2) | IdleSouth) & (DIR_DIAGONAL | DirectionWest);
sub_0802CC18(this);
GetNextFrame(this);
}
@@ -234,8 +234,8 @@ void sub_0802CA94(Entity* this) {
this->speed = 0;
this->field_0x82.HALF.HI = 0;
this->field_0x80.HALF.HI = 0;
this->direction = ((gPlayerEntity.animationState << 2) | 4) & 0x1c;
InitializeAnimation(this, (this->direction >> 4) | 6);
this->direction = ((gPlayerEntity.animationState << 2) | IdleSouth) & (DirectionWest | DIR_DIAGONAL);
InitializeAnimation(this, (this->direction >> 4) | IdleWest);
}
void sub_0802CAF8(Entity* this) {
@@ -264,7 +264,7 @@ void sub_0802CB68(Entity* this) {
this->action = 1;
this->subAction = 0;
this->direction = Random() & 0x18;
this->direction |= 4;
this->direction |= IdleSouth;
COLLISION_ON(this);
if (this->field_0x82.HALF.LO) {
this->timer = 200;
+3 -3
View File
@@ -141,10 +141,10 @@ void sub_0802A9A8(Entity* this) {
this->field_0x82.HWORD = 1;
if (this->field_0x80.HALF.LO) {
this->x.HALF.HI = gRoomControls.scroll_x - 0x10;
this->direction = 8;
this->direction = DirectionEast;
} else {
this->x.HALF.HI = gRoomControls.scroll_x + 0x100;
this->direction = 0x18;
this->direction = DirectionWest;
}
this->y.HALF.HI = gRoomControls.scroll_y + 0x40;
this->timer = 128;
@@ -221,7 +221,7 @@ void sub_0802AAC0(Entity* this) {
#ifndef EU
this->field_0x78.HALF.LO = 0;
this->field_0x78.HALF.HI = 4;
this->direction = 0xff;
this->direction = DIR_NONE;
#endif
InitializeAnimation(this, 0);
}
+55 -55
View File
@@ -25,14 +25,14 @@ void sub_08029078(Entity*);
void sub_080290E0(Entity*, u32);
void sub_080290FC(Entity*);
bool32 sub_0802915C(Entity*);
bool32 sub_080291DC(Entity*);
bool32 BusinessScrub_CheckRefillFitsBag(Entity*);
void sub_0802922C(Entity*);
void sub_0802925C(Entity*);
extern const struct SalesOffering gUnk_080CC954[];
extern const u8 kinstoneTypes[];
extern void (*const BusinessScrub_Functions[])(Entity*);
extern void (*const gUnk_080CC9E0[])(Entity*);
extern void (*const BusinessScrub_Actions[])(Entity*);
extern const u8 gUnk_080CCA04[];
struct SalesOffering {
@@ -42,8 +42,8 @@ struct SalesOffering {
u16 field_0x4;
u16 field_0x6;
u8 offeredItem; /**< @see Item */
u8 field_0x9;
u16 field_0xa;
u8 item_subtype;
u16 local_flag;
};
void BusinessScrub(Entity* this) {
@@ -51,7 +51,7 @@ void BusinessScrub(Entity* this) {
}
void BusinessScrub_OnTick(Entity* this) {
gUnk_080CC9E0[this->action](this);
BusinessScrub_Actions[this->action](this);
}
void BusinessScrub_OnCollision(Entity* this) {
@@ -75,12 +75,12 @@ void BusinessScrub_OnGrabbed(Entity* this) {
/* ... */
}
void sub_08028994(Entity* this) {
void BusinessScrub_Action0(Entity* this) {
this->subtimer = 0;
this->field_0x78.HWORD = this->x.HALF.HI;
this->field_0x7a.HWORD = this->y.HALF.HI;
this->animationState = 0;
this->direction = 0x10;
this->direction = DirectionSouth;
sub_08028E9C(this);
if ((*(u8*)this->field_0x7c.WORD & 1) || CheckFlags(this->field_0x86.HWORD)) {
this->action = 4;
@@ -97,7 +97,7 @@ void sub_08028994(Entity* this) {
}
}
void sub_08028A48(Entity* this) {
void BusinessScrub_Action1(Entity* this) {
if (this->timer != 0) {
this->timer--;
} else if (sub_08028F98(this, 0)) {
@@ -107,7 +107,7 @@ void sub_08028A48(Entity* this) {
}
}
void sub_08028A74(Entity* this) {
void BusinessScrub_Action2(Entity* this) {
u32 unk;
GetNextFrame(this);
@@ -185,7 +185,7 @@ void sub_08028A74(Entity* this) {
}
}
void sub_08028BC4(Entity* this) {
void BusinessScrub_Action3(Entity* this) {
Entity* iVar1;
switch (this->subAction) {
@@ -227,7 +227,7 @@ void sub_08028BC4(Entity* this) {
extern void sub_0804AA1C(Entity*);
void sub_08028F0C(Entity*);
void sub_08028C84(Entity* this) {
void BusinessScrub_Action4(Entity* this) {
if (--this->timer == 0) {
this->timer = 48;
if (this->subtimer) {
@@ -244,21 +244,21 @@ void sub_08028C84(Entity* this) {
sub_08028F0C(this);
}
void sub_08028CE8(Entity* this) {
void BusinessScrub_Action5(Entity* this) {
struct SalesOffering* offer = (struct SalesOffering*)this->field_0x7c.WORD;
u32 subtype;
if ((gMessage.doTextBox & 0x7f) == 0 && sub_0802915C(this) && !sub_08056338()) {
if (offer->price <= gSave.stats.rupees) {
if (sub_080291DC(this)) {
if (BusinessScrub_CheckRefillFitsBag(this)) {
/* Bag full. */
MessageFromTarget(TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x04));
SetPlayerControl(0);
} else {
ModRupees(-offer->price);
switch (offer->field_0x0 >> 2) {
case 0:
subtype = offer->field_0x9;
case 0: // random kinstone
subtype = offer->item_subtype;
if (subtype == KINSTONE_RANDOM) {
subtype = kinstoneTypes[Random() & 7];
}
@@ -273,13 +273,13 @@ void sub_08028CE8(Entity* this) {
SetLocalFlag(KS_B06);
#endif
return;
case 1:
CreateItemEntity(offer->offeredItem, offer->field_0x9, 0);
case 1: // refill, bottle, specific kinstone
CreateItemEntity(offer->offeredItem, offer->item_subtype, 0);
this->timer = 4;
sub_0802922C(this);
return;
case 2:
CreateItemEntity(offer->offeredItem, offer->field_0x9, 0);
case 2: // grip ring
CreateItemEntity(offer->offeredItem, offer->item_subtype, 0);
this->timer = 8;
sub_0802922C(this);
return;
@@ -298,7 +298,7 @@ void sub_08028CE8(Entity* this) {
sub_080290E0(this, 0);
}
void sub_08028DE8(Entity* this) {
void BusinessScrub_Action6(Entity* this) {
if (gPlayerEntity.action == PLAYER_ITEMGET) {
if (this->field_0x80.HALF.HI == 0) {
SetPlayerControl(1);
@@ -316,15 +316,15 @@ void sub_08028DE8(Entity* this) {
}
}
void sub_08028E40(Entity* this) {
void BusinessScrub_Action7(Entity* this) {
if ((gMessage.doTextBox & 0x7f) == 0) {
struct SalesOffering* offer = (struct SalesOffering*)this->field_0x7c.WORD;
this->action = 4;
this->subAction = gMessage.doTextBox & 0x7f;
this->timer = 1;
if (CheckLocalFlag(offer->field_0xa) == 0) {
SetLocalFlag(offer->field_0xa);
if (!CheckLocalFlag(offer->local_flag)) {
SetLocalFlag(offer->local_flag);
}
SetPlayerControl(0);
}
@@ -332,7 +332,7 @@ void sub_08028E40(Entity* this) {
GetNextFrame(this);
}
void sub_08028E84(Entity* this) {
void BusinessScrub_Action8(Entity* this) {
if (UpdateFuseInteraction(this)) {
this->action = 4;
this->timer = 1;
@@ -344,7 +344,7 @@ bool32 sub_08029198(const struct SalesOffering*);
void sub_08028E9C(Entity* this) {
const struct SalesOffering* offer = &gUnk_080CC954[this->type];
if (sub_08029198(offer) && (offer->field_0x0 & 2)) {
offer = &gUnk_080CC954[offer->field_0xa];
offer = &gUnk_080CC954[offer->local_flag];
}
this->field_0x7c.WORD = (u32)offer;
this->field_0x80.HALF.LO = 0;
@@ -353,21 +353,21 @@ void sub_08028E9C(Entity* this) {
void sub_08028EDC(Entity* this) {
const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
if (sub_08029198(offer) && (offer->field_0x0 & 2)) {
offer = &gUnk_080CC954[offer->field_0xa];
offer = &gUnk_080CC954[offer->local_flag];
this->field_0x7c.WORD = (u32)offer;
}
}
void sub_08028F0C(Entity* this) {
if (this->interactType == 2) {
if (this->interactType == INTERACTION_FUSE) {
this->action = 8;
this->interactType = 0;
sub_0806F118(this);
} else if (this->interactType != 0) {
this->interactType = INTERACTION_NONE;
InitializeNPCFusion(this);
} else if (this->interactType != INTERACTION_NONE) {
u16 dialog;
const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
this->interactType = 0;
this->interactType = INTERACTION_NONE;
sub_0804AA1C(this);
this->direction = (GetAnimationState(this) << 3);
sub_080290E0(this, 3);
@@ -456,8 +456,8 @@ void sub_080290FC(Entity* this) {
if (this->timer != 0) {
this->timer--;
if ((this->timer < 16) && ((this->timer & 1) == 0)) {
s32 sVar3 = ((this->direction & 0x10) != 0) ? -1 : 1;
if ((this->direction & 8) != 0) {
s32 sVar3 = (this->direction & DirectionSouth) ? -1 : 1;
if (this->direction & DirectionEast) {
this->x.HALF.HI += ((this->timer & 8) != 0) ? -sVar3 : sVar3;
} else {
this->y.HALF.HI += ((this->timer & 8) != 0) ? sVar3 : -sVar3;
@@ -502,7 +502,7 @@ bool32 sub_08029198(const struct SalesOffering* offer) {
return 0;
}
} else {
tmp = CheckLocalFlag(offer->field_0xa);
tmp = CheckLocalFlag(offer->local_flag);
}
if (tmp == 0) {
@@ -512,7 +512,7 @@ bool32 sub_08029198(const struct SalesOffering* offer) {
return TRUE;
}
bool32 sub_080291DC(Entity* this) {
bool32 BusinessScrub_CheckRefillFitsBag(Entity* this) {
const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
switch (offer->offeredItem) {
@@ -540,7 +540,7 @@ void sub_0802922C(Entity* this) {
SetGlobalFlag(AKINDO_BOTTLE_SELL);
// It only matters here that ITEM_BOMBS10 is here and some item that is higher
// Not sure about the original code
case ITEM_ARROWS10:
case ITEM_ARROWS30:
case ITEM_BOMBS10:
default:
sub_080290E0(this, 3);
@@ -564,18 +564,18 @@ void sub_08029270(Entity* this) {
// clang-format off
const struct SalesOffering gUnk_080CC954[] = {
{0x06, 0x00, 0xffff, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0f), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x09, 0xff, 0x0001},
{0x04, 0x00, 0x001e, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0e), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x6f, 0xff, 0xffff},
{0x04, 0x00, 0x001e, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0b), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x6c, 0xff, 0xffff},
{0x08, 0x00, 0x0028, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0c), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x11), 0x44, 0xff, 0xffff},
{0x00, 0x00, 0x0064, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x5c, 0xff, 0xffff},
{0x04, 0x00, 0x0014, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x10), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x11), 0x1c, 0xff, 0xffff},
{0x06, 0x00, 0xffff, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0f), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_BOW, 0xff, 0x0001},
{0x04, 0x00, 30, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0e), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_ARROWS30, 0xff, 0xffff},
{0x04, 0x00, 30, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0b), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_BOMBS10, 0xff, 0xffff},
{0x08, 0x00, 40, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0c), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x11), ITEM_GRIP_RING, 0xff, 0xffff},
{0x00, 0x00, 100, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_KINSTONE, 0xff, 0xffff},
{0x04, 0x00, 20, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x10), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x11), ITEM_BOTTLE1, 0xff, 0xffff},
{0x0c, 0x00, 0xffff, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x12), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x13), 0xff, 0xff, 0x0046},
{0x04, 0x00, 0x0064, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x13), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x5c, 0x75, 0xffff},
{0x04, 0x00, 100, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x13), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_KINSTONE, 0x75, 0xffff},
#ifdef EU
{0x00, 0x00, 0x0064, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x5c, 0xff, 0xffff},
{0x00, 0x00, 100, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_KINSTONE, 0xff, 0xffff},
#else
{0x00, 0x00, 0x00C8, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), 0x5c, 0xff, 0xffff},
{0x00, 0x00, 200, TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x0d), TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02), ITEM_KINSTONE, 0xff, 0xffff},
#endif
};
@@ -590,16 +590,16 @@ void (*const BusinessScrub_Functions[])(Entity*) = {
BusinessScrub_OnGrabbed,
};
void (*const gUnk_080CC9E0[])(Entity*) = {
sub_08028994,
sub_08028A48,
sub_08028A74,
sub_08028BC4,
sub_08028C84,
sub_08028CE8,
sub_08028DE8,
sub_08028E40,
sub_08028E84,
void (*const BusinessScrub_Actions[])(Entity*) = {
BusinessScrub_Action0,
BusinessScrub_Action1,
BusinessScrub_Action2,
BusinessScrub_Action3,
BusinessScrub_Action4,
BusinessScrub_Action5,
BusinessScrub_Action6,
BusinessScrub_Action7,
BusinessScrub_Action8,
};
const u8 gUnk_080CCA04[] = {
+3 -3
View File
@@ -66,7 +66,7 @@ void sub_08045C3C(BusinessScrubPrologueEntity* this) {
super->subtimer = 0;
this->unk_78 = super->x.HALF.HI;
this->unk_7a = super->y.HALF.HI;
super->animationState = 0;
super->animationState = IdleNorth;
super->direction = 0x10;
super->action = 5;
super->timer = 120;
@@ -75,7 +75,7 @@ void sub_08045C3C(BusinessScrubPrologueEntity* this) {
sub_08046030(this, 0);
sub_08095C48(super);
StartCutscene(super, script_BusinessScrubIntro);
sub_0807DD50(super);
InitScriptForNPC(super);
}
void sub_08045CA4(BusinessScrubPrologueEntity* this) {
@@ -200,7 +200,7 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) {
}
void sub_08045EC8(BusinessScrubPrologueEntity* this) {
sub_0807DD94(super, 0);
ExecuteScriptAndHandleAnimation(super, NULL);
}
void sub_08045ED4(BusinessScrubPrologueEntity* this) {
+1 -1
View File
@@ -34,7 +34,7 @@ void sub_0802B540(Entity* this) {
this->timer--;
} else {
u32 direction = sub_0804A024(this, 1, 0xc);
if (direction != 0xff) {
if (direction != DIR_NONE) {
this->action = 2;
this->speed = 0x40;
this->direction = direction;

Some files were not shown because too many files have changed in this diff Show More