mirror of
https://github.com/zeldaret/tmc
synced 2026-05-25 07:23:16 -04:00
Merge pull request #518 from hatal175/sub_0801A8D0
This commit is contained in:
@@ -1,92 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
cmp r5, #0
|
||||
beq _0801A978
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
bl GetLayerByIndex
|
||||
adds r6, r0, #4
|
||||
cmp r4, #0
|
||||
bne _0801A92C
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
ldr r2, _0801A91C @ =gRoomControls
|
||||
ldrh r1, [r2, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r4, r0, #4
|
||||
movs r3, #0x3f
|
||||
ands r4, r3
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r5, r1]
|
||||
ldrh r1, [r2, #8]
|
||||
adds r1, #8
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
ands r0, r3
|
||||
lsls r0, r0, #6
|
||||
orrs r4, r0
|
||||
lsls r0, r4, #1
|
||||
adds r0, r0, r6
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0801A920 @ =0x00004055
|
||||
cmp r1, r0
|
||||
bne _0801A924
|
||||
subs r0, r4, #1
|
||||
b _0801A97A
|
||||
.align 2, 0
|
||||
_0801A91C: .4byte gRoomControls
|
||||
_0801A920: .4byte 0x00004055
|
||||
_0801A924:
|
||||
ldr r0, _0801A928 @ =0x00004056
|
||||
b _0801A96A
|
||||
.align 2, 0
|
||||
_0801A928: .4byte 0x00004056
|
||||
_0801A92C:
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r5, r0]
|
||||
ldr r3, _0801A960 @ =gRoomControls
|
||||
ldrh r0, [r3, #6]
|
||||
adds r0, #8
|
||||
subs r1, r1, r0
|
||||
asrs r4, r1, #4
|
||||
movs r2, #0x3f
|
||||
ands r4, r2
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r5, r1]
|
||||
ldrh r1, [r3, #8]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
ands r0, r2
|
||||
lsls r0, r0, #6
|
||||
orrs r4, r0
|
||||
lsls r0, r4, #1
|
||||
adds r0, r0, r6
|
||||
ldrh r1, [r0]
|
||||
ldr r0, _0801A964 @ =0x00004057
|
||||
cmp r1, r0
|
||||
bne _0801A968
|
||||
adds r0, r4, #0
|
||||
subs r0, #0x40
|
||||
b _0801A97A
|
||||
.align 2, 0
|
||||
_0801A960: .4byte gRoomControls
|
||||
_0801A964: .4byte 0x00004057
|
||||
_0801A968:
|
||||
ldr r0, _0801A974 @ =0x00004058
|
||||
_0801A96A:
|
||||
cmp r1, r0
|
||||
bne _0801A978
|
||||
adds r0, r4, #0
|
||||
b _0801A97A
|
||||
.align 2, 0
|
||||
_0801A974: .4byte 0x00004058
|
||||
_0801A978:
|
||||
ldr r0, _0801A97C @ =0x0000FFFF
|
||||
_0801A97A:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0801A97C: .4byte 0x0000FFFF
|
||||
.syntax divided
|
||||
@@ -1,55 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r3, r0, #0
|
||||
adds r4, r2, #0
|
||||
movs r2, #0
|
||||
ldr r5, _0801AA0C @ =0xFFFFFCA0
|
||||
adds r0, r1, r5
|
||||
cmp r0, #4
|
||||
bhi _0801AA40
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _0801AA10 @ =_0801AA14
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0801AA0C: .4byte 0xFFFFFCA0
|
||||
_0801AA10: .4byte _0801AA14
|
||||
_0801AA14: @ jump table
|
||||
.4byte _0801AA44 @ case 0
|
||||
.4byte _0801AA28 @ case 1
|
||||
.4byte _0801AA34 @ case 2
|
||||
.4byte _0801AA3A @ case 3
|
||||
.4byte _0801AA2E @ case 4
|
||||
_0801AA28:
|
||||
cmp r3, #0
|
||||
bne _0801AA40
|
||||
b _0801AA44
|
||||
_0801AA2E:
|
||||
cmp r3, #8
|
||||
bne _0801AA40
|
||||
b _0801AA44
|
||||
_0801AA34:
|
||||
cmp r3, #0x10
|
||||
bne _0801AA40
|
||||
b _0801AA44
|
||||
_0801AA3A:
|
||||
cmp r3, #0x18
|
||||
bne _0801AA40
|
||||
movs r2, #1
|
||||
_0801AA40:
|
||||
cmp r2, #0
|
||||
beq _0801AA54
|
||||
_0801AA44:
|
||||
ldr r0, _0801AA50 @ =gPlayerEntity
|
||||
adds r1, r4, #0
|
||||
adds r2, r3, #0
|
||||
bl sub_0801AA58
|
||||
b _0801AA56
|
||||
.align 2, 0
|
||||
_0801AA50: .4byte gPlayerEntity
|
||||
_0801AA54:
|
||||
movs r0, #0
|
||||
_0801AA56:
|
||||
pop {r4, r5, pc}
|
||||
.syntax divided
|
||||
@@ -1,71 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, #4
|
||||
adds r6, r0, #0
|
||||
adds r3, r1, #0
|
||||
ldr r0, _0801D50C @ =gPaletteList
|
||||
mov r8, r0
|
||||
lsls r0, r6, #2
|
||||
mov r1, r8
|
||||
adds r4, r0, r1
|
||||
ldrb r0, [r4]
|
||||
lsrs r5, r0, #4
|
||||
subs r5, #1
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
cmp r5, r0
|
||||
beq _0801D4F8
|
||||
ldr r2, _0801D510 @ =gPaletteBuffer
|
||||
lsls r0, r3, #5
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #2
|
||||
adds r0, r0, r1
|
||||
adds r7, r0, r2
|
||||
lsls r0, r3, #2
|
||||
add r8, r0
|
||||
lsls r0, r6, #5
|
||||
adds r0, r0, r1
|
||||
adds r6, r0, r2
|
||||
movs r3, #0
|
||||
_0801D4C8:
|
||||
ldr r0, [r4]
|
||||
mov r1, r8
|
||||
adds r1, #4
|
||||
mov r8, r1
|
||||
subs r1, #4
|
||||
stm r1!, {r0}
|
||||
strb r3, [r4]
|
||||
strb r3, [r4, #1]
|
||||
strh r3, [r4, #2]
|
||||
adds r0, r6, #0
|
||||
adds r1, r7, #0
|
||||
movs r2, #0x20
|
||||
str r3, [sp]
|
||||
bl MemCopy
|
||||
adds r6, #0x20
|
||||
adds r4, #4
|
||||
adds r7, #0x20
|
||||
subs r5, #1
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
ldr r3, [sp]
|
||||
cmp r5, r0
|
||||
bne _0801D4C8
|
||||
_0801D4F8:
|
||||
ldr r0, _0801D514 @ =gUsedPalettes
|
||||
ldr r1, [r0]
|
||||
ldr r2, _0801D518 @ =0xFFFF0000
|
||||
orrs r1, r2
|
||||
str r1, [r0]
|
||||
add sp, #4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0801D50C: .4byte gPaletteList
|
||||
_0801D510: .4byte gPaletteBuffer
|
||||
_0801D514: .4byte gUsedPalettes
|
||||
_0801D518: .4byte 0xFFFF0000
|
||||
.syntax divided
|
||||
@@ -1,58 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
ldr r3, _0801DA44 @ =gzHeap
|
||||
subs r1, r0, r3
|
||||
ldr r0, _0801DA48 @ =0x00000FFF
|
||||
cmp r1, r0
|
||||
bhi _0801DA74
|
||||
adds r4, r3, #0
|
||||
ldrh r5, [r4]
|
||||
adds r4, #2
|
||||
movs r2, #0
|
||||
cmp r2, r5
|
||||
bhs _0801DA74
|
||||
ldrh r0, [r4]
|
||||
cmp r0, r1
|
||||
bne _0801DA4C
|
||||
lsls r0, r5, #2
|
||||
subs r1, r3, #2
|
||||
adds r0, r0, r1
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r4]
|
||||
strh r2, [r0]
|
||||
adds r0, #2
|
||||
ldrh r1, [r0]
|
||||
strh r1, [r4, #2]
|
||||
strh r2, [r0]
|
||||
subs r0, r5, #1
|
||||
strh r0, [r3]
|
||||
b _0801DA74
|
||||
.align 2, 0
|
||||
_0801DA44: .4byte gzHeap
|
||||
_0801DA48: .4byte 0x00000FFF
|
||||
_0801DA4C:
|
||||
adds r4, #4
|
||||
adds r2, #1
|
||||
cmp r2, r5
|
||||
bhs _0801DA74
|
||||
ldrh r0, [r4]
|
||||
cmp r0, r1
|
||||
bne _0801DA4C
|
||||
lsls r1, r5, #2
|
||||
ldr r3, _0801DA78 @ =gUnk_0203553E
|
||||
adds r1, r1, r3
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r4]
|
||||
movs r2, #0
|
||||
strh r2, [r1]
|
||||
adds r1, #2
|
||||
ldrh r0, [r1]
|
||||
strh r0, [r4, #2]
|
||||
strh r2, [r1]
|
||||
subs r0, r5, #1
|
||||
strh r0, [r3, #2]
|
||||
_0801DA74:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0801DA78: .4byte gUnk_0203553E
|
||||
.syntax divided
|
||||
@@ -1,36 +0,0 @@
|
||||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
subs r0, #3
|
||||
cmp r0, #2
|
||||
bhi _0802129A
|
||||
movs r3, #0x18
|
||||
adds r0, r1, #0
|
||||
ands r0, r3
|
||||
lsrs r0, r0, #3
|
||||
cmp r0, r2
|
||||
beq _080212AA
|
||||
adds r0, r1, #0
|
||||
adds r0, #8
|
||||
ands r0, r3
|
||||
lsrs r0, r0, #3
|
||||
cmp r0, r2
|
||||
beq _080212AA
|
||||
_0802129A:
|
||||
adds r0, r1, #4
|
||||
movs r1, #0x18
|
||||
ands r0, r1
|
||||
lsrs r1, r0, #3
|
||||
cmp r2, r1
|
||||
beq _080212AA
|
||||
adds r0, r1, #0
|
||||
b _080212AC
|
||||
_080212AA:
|
||||
movs r0, #0xff
|
||||
_080212AC:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
.syntax divided
|
||||
@@ -1,128 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sl
|
||||
mov r6, sb
|
||||
mov r5, r8
|
||||
push {r5, r6, r7}
|
||||
adds r5, r0, #0
|
||||
ldr r1, _080AC3E4 @ =gUnk_0812A9B8
|
||||
ldrb r0, [r5, #0xa]
|
||||
adds r0, r0, r1
|
||||
ldrb r3, [r0]
|
||||
ldr r0, [r5, #0x50]
|
||||
mov sl, r0
|
||||
ldrb r0, [r0, #0x14]
|
||||
movs r1, #0x80
|
||||
mov sb, r1
|
||||
mov r1, sb
|
||||
eors r1, r0
|
||||
adds r6, r5, #0
|
||||
adds r6, #0x7c
|
||||
ldrh r4, [r6]
|
||||
lsrs r0, r4, #8
|
||||
subs r1, r1, r0
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x7a
|
||||
ldrh r7, [r2]
|
||||
mov ip, r7
|
||||
movs r7, #0
|
||||
ldrsh r0, [r2, r7]
|
||||
cmp r0, #0
|
||||
bge _080AC404
|
||||
subs r0, r1, r3
|
||||
movs r7, #0xff
|
||||
mov r8, r7
|
||||
ands r0, r7
|
||||
cmp r0, #0x7f
|
||||
bhi _080AC3E8
|
||||
movs r1, #0
|
||||
ldrsh r0, [r2, r1]
|
||||
rsbs r0, r0, #0
|
||||
strh r0, [r2]
|
||||
mov r2, sl
|
||||
ldrb r0, [r2, #0x14]
|
||||
mov r7, sb
|
||||
eors r0, r7
|
||||
subs r0, r0, r3
|
||||
b _080AC422
|
||||
.align 2, 0
|
||||
_080AC3E4: .4byte gUnk_0812A9B8
|
||||
_080AC3E8:
|
||||
mov r2, ip
|
||||
adds r0, r4, r2
|
||||
strh r0, [r6]
|
||||
adds r0, r1, r3
|
||||
mov r7, r8
|
||||
ands r0, r7
|
||||
cmp r0, #0x80
|
||||
bls _080AC45A
|
||||
mov r1, sl
|
||||
ldrb r0, [r1, #0x14]
|
||||
mov r2, sb
|
||||
eors r0, r2
|
||||
adds r0, r0, r3
|
||||
b _080AC44E
|
||||
_080AC404:
|
||||
adds r0, r1, r3
|
||||
movs r7, #0xff
|
||||
mov r8, r7
|
||||
ands r0, r7
|
||||
cmp r0, #0x80
|
||||
bls _080AC432
|
||||
movs r1, #0
|
||||
ldrsh r0, [r2, r1]
|
||||
rsbs r0, r0, #0
|
||||
strh r0, [r2]
|
||||
mov r2, sl
|
||||
ldrb r0, [r2, #0x14]
|
||||
mov r7, sb
|
||||
eors r0, r7
|
||||
adds r0, r0, r3
|
||||
_080AC422:
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
lsls r0, r0, #8
|
||||
strh r0, [r6]
|
||||
adds r0, r5, #0
|
||||
bl sub_080AC884
|
||||
b _080AC45A
|
||||
_080AC432:
|
||||
mov r2, ip
|
||||
adds r0, r4, r2
|
||||
strh r0, [r6]
|
||||
subs r0, r1, r3
|
||||
mov r7, r8
|
||||
ands r0, r7
|
||||
subs r0, #1
|
||||
cmp r0, #0x7e
|
||||
bhi _080AC45A
|
||||
mov r1, sl
|
||||
ldrb r0, [r1, #0x14]
|
||||
mov r2, sb
|
||||
eors r0, r2
|
||||
subs r0, r0, r3
|
||||
_080AC44E:
|
||||
movs r1, #0xff
|
||||
ands r0, r1
|
||||
lsls r0, r0, #8
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strh r0, [r6]
|
||||
_080AC45A:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x7c
|
||||
ldrh r0, [r0]
|
||||
lsrs r0, r0, #8
|
||||
strb r0, [r5, #0x15]
|
||||
adds r0, r5, #0
|
||||
bl sub_080AC6F0
|
||||
adds r0, r5, #0
|
||||
bl sub_080AC760
|
||||
adds r0, r5, #0
|
||||
bl sub_080AC7C4
|
||||
pop {r3, r4, r5}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
mov sl, r5
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.syntax divided
|
||||
@@ -1,63 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0x15]
|
||||
movs r2, #0x1f
|
||||
ands r2, r0
|
||||
lsrs r0, r0, #5
|
||||
lsls r1, r0, #1
|
||||
adds r3, r1, r0
|
||||
ldr r1, _080AC724 @ =gUnk_0812A9C0
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
subs r0, r0, r3
|
||||
adds r5, r1, #0
|
||||
cmp r0, #3
|
||||
bhi _080AC73A
|
||||
cmp r0, #1
|
||||
beq _080AC72E
|
||||
cmp r0, #1
|
||||
blo _080AC728
|
||||
cmp r0, #2
|
||||
beq _080AC732
|
||||
cmp r2, #0x19
|
||||
bhi _080AC75C
|
||||
b _080AC73A
|
||||
.align 2, 0
|
||||
_080AC724: .4byte gUnk_0812A9C0
|
||||
_080AC728:
|
||||
cmp r2, #6
|
||||
bls _080AC75C
|
||||
b _080AC73A
|
||||
_080AC72E:
|
||||
subs r0, r2, #5
|
||||
b _080AC736
|
||||
_080AC732:
|
||||
adds r0, r2, #0
|
||||
subs r0, #0xf
|
||||
_080AC736:
|
||||
cmp r0, #0xc
|
||||
bls _080AC75C
|
||||
_080AC73A:
|
||||
adds r0, r3, #3
|
||||
cmp r2, #0x1a
|
||||
bhi _080AC74E
|
||||
adds r0, r3, #2
|
||||
cmp r2, #0x10
|
||||
bhi _080AC74E
|
||||
adds r0, r3, #0
|
||||
cmp r2, #5
|
||||
bls _080AC74E
|
||||
adds r0, #1
|
||||
_080AC74E:
|
||||
movs r1, #0x18
|
||||
bl __modsi3
|
||||
strb r0, [r4, #0x14]
|
||||
adds r0, r0, r5
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r4, #0x1e]
|
||||
_080AC75C:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,95 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x54]
|
||||
mov r8, r0
|
||||
ldr r7, [r0, #0x54]
|
||||
ldr r5, [r7, #0x54]
|
||||
cmp r5, #0
|
||||
beq _080AC7E4
|
||||
ldr r0, [r4, #0x50]
|
||||
adds r1, r5, #0
|
||||
bl CopyPosition
|
||||
b _080AC7E6
|
||||
_080AC7E4:
|
||||
ldr r5, [r4, #0x50]
|
||||
_080AC7E6:
|
||||
adds r0, r7, #0
|
||||
adds r0, #0x79
|
||||
ldrb r2, [r0]
|
||||
lsls r2, r2, #8
|
||||
ldr r3, _080AC880 @ =gSineTable
|
||||
mov sb, r3
|
||||
ldrb r1, [r7, #0x15]
|
||||
lsls r0, r1, #1
|
||||
add r0, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r0, r3]
|
||||
adds r6, r0, #0
|
||||
muls r6, r2, r6
|
||||
adds r1, #0x40
|
||||
lsls r1, r1, #1
|
||||
add r1, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r1, r3]
|
||||
muls r0, r2, r0
|
||||
rsbs r3, r0, #0
|
||||
adds r0, r5, #0
|
||||
adds r1, r7, #0
|
||||
adds r2, r6, #0
|
||||
bl PositionRelative
|
||||
mov r0, r8
|
||||
adds r0, #0x79
|
||||
ldrb r2, [r0]
|
||||
lsls r2, r2, #8
|
||||
mov r0, r8
|
||||
ldrb r1, [r0, #0x15]
|
||||
lsls r0, r1, #1
|
||||
add r0, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r0, r3]
|
||||
adds r6, r0, #0
|
||||
muls r6, r2, r6
|
||||
adds r1, #0x40
|
||||
lsls r1, r1, #1
|
||||
add r1, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r1, r3]
|
||||
muls r0, r2, r0
|
||||
rsbs r3, r0, #0
|
||||
adds r0, r7, #0
|
||||
mov r1, r8
|
||||
adds r2, r6, #0
|
||||
bl PositionRelative
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x79
|
||||
ldrb r2, [r0]
|
||||
lsls r2, r2, #8
|
||||
ldrb r1, [r4, #0x15]
|
||||
lsls r0, r1, #1
|
||||
add r0, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r0, r3]
|
||||
adds r6, r0, #0
|
||||
muls r6, r2, r6
|
||||
adds r1, #0x40
|
||||
lsls r1, r1, #1
|
||||
add r1, sb
|
||||
movs r3, #0
|
||||
ldrsh r0, [r1, r3]
|
||||
muls r0, r2, r0
|
||||
rsbs r3, r0, #0
|
||||
mov r0, r8
|
||||
adds r1, r4, #0
|
||||
adds r2, r6, #0
|
||||
bl PositionRelative
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_080AC880: .4byte gSineTable
|
||||
.syntax divided
|
||||
@@ -1,147 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r4, r0, #0
|
||||
adds r3, r1, #0
|
||||
adds r5, r2, #0
|
||||
cmp r3, #0
|
||||
beq _080760AA
|
||||
ldrb r0, [r3, #0x16]
|
||||
movs r1, #1
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _080760A4
|
||||
b _080761A0
|
||||
_080760A4:
|
||||
movs r0, #2
|
||||
strb r0, [r3, #0xc]
|
||||
strb r1, [r3, #0xd]
|
||||
_080760AA:
|
||||
str r3, [r4, #0x18]
|
||||
ldr r0, _080760C4 @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #8
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _080760CC
|
||||
ldr r1, _080760C8 @ =0x00000928
|
||||
adds r0, r4, #0
|
||||
bl sub_08077DF4
|
||||
b _080760D6
|
||||
.align 2, 0
|
||||
_080760C4: .4byte gPlayerState
|
||||
_080760C8: .4byte 0x00000928
|
||||
_080760CC:
|
||||
movs r1, #0xce
|
||||
lsls r1, r1, #2
|
||||
adds r0, r4, #0
|
||||
bl sub_08077DF4
|
||||
_080760D6:
|
||||
ldr r3, _08076130 @ =gPlayerState
|
||||
movs r0, #0
|
||||
mov r8, r0
|
||||
movs r7, #3
|
||||
strb r7, [r3, #5]
|
||||
adds r0, r3, #0
|
||||
adds r0, #0xa8
|
||||
movs r6, #4
|
||||
strb r6, [r0]
|
||||
movs r0, #2
|
||||
strb r0, [r4, #4]
|
||||
movs r0, #0xf
|
||||
strb r0, [r4, #0xf]
|
||||
ldr r2, _08076134 @ =gPlayerEntity
|
||||
movs r1, #0x79
|
||||
adds r1, r1, r2
|
||||
mov ip, r1
|
||||
ldrb r1, [r1]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08076138
|
||||
mov r1, r8
|
||||
mov r0, ip
|
||||
strb r1, [r0]
|
||||
ldrb r0, [r2, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #0x10]
|
||||
strb r6, [r3, #5]
|
||||
movs r1, #8
|
||||
asrs r1, r5
|
||||
mvns r1, r1
|
||||
ldrb r2, [r3, #0xb]
|
||||
adds r0, r1, #0
|
||||
ands r0, r2
|
||||
strb r0, [r3, #0xb]
|
||||
ldrb r0, [r3, #0xa]
|
||||
ands r1, r0
|
||||
strb r1, [r3, #0xa]
|
||||
strb r7, [r4, #4]
|
||||
mov r0, r8
|
||||
strb r0, [r4, #0xf]
|
||||
b _0807614A
|
||||
.align 2, 0
|
||||
_08076130: .4byte gPlayerState
|
||||
_08076134: .4byte gPlayerEntity
|
||||
_08076138:
|
||||
movs r1, #8
|
||||
asrs r1, r5
|
||||
ldrb r2, [r3, #0xa]
|
||||
adds r0, r1, #0
|
||||
orrs r0, r2
|
||||
strb r0, [r3, #0xa]
|
||||
ldrb r0, [r3, #0xb]
|
||||
orrs r1, r0
|
||||
strb r1, [r3, #0xb]
|
||||
_0807614A:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x13
|
||||
bl CreatePlayerItemWithParent
|
||||
adds r3, r0, #0
|
||||
cmp r3, #0
|
||||
bne _08076162
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl PlayerCancelHoldItem
|
||||
b _080761A0
|
||||
_08076162:
|
||||
ldr r1, _08076194 @ =gPlayerEntity
|
||||
str r3, [r1, #0x74]
|
||||
movs r2, #0
|
||||
strb r2, [r1, #0xf]
|
||||
ldr r0, [r4, #0x18]
|
||||
str r0, [r3, #0x54]
|
||||
ldrb r0, [r1, #0x16]
|
||||
strb r0, [r3, #0x16]
|
||||
str r4, [r3, #0x50]
|
||||
str r3, [r4, #0x18]
|
||||
ldrb r0, [r4, #3]
|
||||
strb r0, [r3, #0xb]
|
||||
ldrb r0, [r4, #7]
|
||||
strb r0, [r3, #0xe]
|
||||
ldrb r0, [r4, #8]
|
||||
strb r0, [r3, #0xf]
|
||||
ldr r0, [r4, #0x18]
|
||||
ldrb r1, [r0, #0x16]
|
||||
movs r0, #0xf0
|
||||
ands r0, r1
|
||||
cmp r0, #0x10
|
||||
bne _08076198
|
||||
movs r0, #8
|
||||
strb r0, [r4, #7]
|
||||
b _0807619A
|
||||
.align 2, 0
|
||||
_08076194: .4byte gPlayerEntity
|
||||
_08076198:
|
||||
strb r2, [r4, #7]
|
||||
_0807619A:
|
||||
movs r0, #0x7f
|
||||
bl SoundReq
|
||||
_080761A0:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,70 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r4, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _080850A6
|
||||
movs r0, #3
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x63
|
||||
movs r0, #4
|
||||
strb r0, [r1]
|
||||
ldr r0, _080850A8 @ =gScreen
|
||||
mov ip, r0
|
||||
ldrh r1, [r0]
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #6
|
||||
adds r0, r2, #0
|
||||
orrs r0, r1
|
||||
mov r1, ip
|
||||
strh r0, [r1]
|
||||
adds r1, #0x60
|
||||
movs r0, #0x1f
|
||||
strh r0, [r1]
|
||||
adds r1, #2
|
||||
movs r0, #0xf
|
||||
strh r0, [r1]
|
||||
movs r2, #0x2e
|
||||
ldrsh r0, [r4, r2]
|
||||
ldr r3, _080850AC @ =gRoomControls
|
||||
movs r2, #0xa
|
||||
ldrsh r1, [r3, r2]
|
||||
subs r0, r0, r1
|
||||
adds r1, r0, #0
|
||||
subs r1, #0x18
|
||||
movs r2, #0xff
|
||||
ands r1, r2
|
||||
lsls r1, r1, #8
|
||||
adds r0, #0x18
|
||||
ands r0, r2
|
||||
orrs r1, r0
|
||||
mov r0, ip
|
||||
adds r0, #0x58
|
||||
strh r1, [r0]
|
||||
movs r1, #0x32
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r4, #0xc
|
||||
ldrsh r1, [r3, r4]
|
||||
subs r0, r0, r1
|
||||
adds r1, r0, #0
|
||||
subs r1, #0x18
|
||||
ands r1, r2
|
||||
lsls r1, r1, #8
|
||||
adds r0, #0x18
|
||||
ands r0, r2
|
||||
orrs r1, r0
|
||||
mov r0, ip
|
||||
adds r0, #0x5c
|
||||
strh r1, [r0]
|
||||
_080850A6:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_080850A8: .4byte gScreen
|
||||
_080850AC: .4byte gRoomControls
|
||||
.syntax divided
|
||||
@@ -1,107 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldr r0, _08087590 @ =gPlayerEntity
|
||||
ldrb r0, [r0, #0x14]
|
||||
lsrs r0, r0, #1
|
||||
strb r0, [r4, #0x14]
|
||||
ldrb r1, [r4, #0x19]
|
||||
movs r2, #0x3f
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x19]
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x29
|
||||
ldrb r1, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #3
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldrb r1, [r4, #0x1b]
|
||||
lsrs r0, r1, #6
|
||||
subs r0, #1
|
||||
lsls r0, r0, #6
|
||||
ands r2, r1
|
||||
orrs r2, r0
|
||||
strb r2, [r4, #0x1b]
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #0
|
||||
beq _08087594
|
||||
ldrb r1, [r4, #0x1a]
|
||||
movs r0, #0x10
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x1a]
|
||||
ldrb r0, [r4, #0x14]
|
||||
cmp r0, #1
|
||||
bne _08087588
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
_08087588:
|
||||
adds r0, r4, #0
|
||||
bl sub_08087640
|
||||
b _080875DC
|
||||
.align 2, 0
|
||||
_08087590: .4byte gPlayerEntity
|
||||
_08087594:
|
||||
ldr r0, _080875B4 @ =gArea
|
||||
ldrb r0, [r0, #1]
|
||||
movs r1, #4
|
||||
cmp r0, #0x10
|
||||
bne _080875A2
|
||||
movs r1, #0xb5
|
||||
lsls r1, r1, #1
|
||||
_080875A2:
|
||||
adds r0, r4, #0
|
||||
bl ChangeObjPalette
|
||||
ldrb r0, [r4, #0x14]
|
||||
cmp r0, #1
|
||||
beq _080875B8
|
||||
cmp r0, #3
|
||||
bne _080875CE
|
||||
b _080875C0
|
||||
.align 2, 0
|
||||
_080875B4: .4byte gArea
|
||||
_080875B8:
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
_080875C0:
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x40
|
||||
bne _080875DC
|
||||
ldrh r0, [r4, #0x32]
|
||||
adds r0, #4
|
||||
strh r0, [r4, #0x32]
|
||||
b _080875DC
|
||||
_080875CE:
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0x40
|
||||
bne _080875DC
|
||||
ldrb r0, [r4, #0x18]
|
||||
movs r1, #0x40
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
_080875DC:
|
||||
adds r0, r4, #0
|
||||
movs r1, #3
|
||||
bl SetDefaultPriority
|
||||
ldrb r1, [r4, #0xb]
|
||||
lsls r1, r1, #2
|
||||
ldrb r0, [r4, #0x14]
|
||||
adds r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl InitializeAnimation
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,209 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, sb
|
||||
mov r6, r8
|
||||
push {r6, r7}
|
||||
adds r5, r0, #0
|
||||
ldr r0, _0807AA5C @ =gPlayerState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0807A8F0
|
||||
b _0807A9F6
|
||||
_0807A8F0:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
ldr r7, _0807AA60 @ =gRoomControls
|
||||
ldrh r1, [r7, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r6, #0x3f
|
||||
ands r0, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
adds r2, #1
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
ldr r1, _0807AA64 @ =gPlayerEntity
|
||||
adds r1, #0x38
|
||||
mov sb, r1
|
||||
ldrb r1, [r1]
|
||||
bl sub_080B1B84
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x20
|
||||
mov r8, r0
|
||||
ands r4, r0
|
||||
cmp r4, #0
|
||||
beq _0807A94E
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r0, [r7, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
adds r2, #1
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AAF8
|
||||
_0807A94E:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
ldrh r1, [r7, #6]
|
||||
subs r1, #2
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
mov r2, sb
|
||||
ldrb r1, [r2]
|
||||
bl sub_080B1B84
|
||||
adds r4, r0, #0
|
||||
mov r0, r8
|
||||
ands r4, r0
|
||||
cmp r4, #0
|
||||
beq _0807A9A2
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r0, [r7, #6]
|
||||
subs r0, #2
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AAF8
|
||||
_0807A9A2:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
ldrh r1, [r7, #6]
|
||||
adds r1, #2
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
mov r2, sb
|
||||
ldrb r1, [r2]
|
||||
bl sub_080B1B84
|
||||
adds r4, r0, #0
|
||||
mov r0, r8
|
||||
ands r4, r0
|
||||
cmp r4, #0
|
||||
beq _0807A9F6
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r0, [r7, #6]
|
||||
adds r0, #2
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AAF8
|
||||
_0807A9F6:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r5, r1]
|
||||
ldr r7, _0807AA60 @ =gRoomControls
|
||||
ldrh r1, [r7, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r6, #0x3f
|
||||
ands r0, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
ldr r1, _0807AA64 @ =gPlayerEntity
|
||||
adds r1, #0x38
|
||||
ldrb r1, [r1]
|
||||
bl sub_080B1B84
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x20
|
||||
ands r0, r4
|
||||
cmp r0, #0
|
||||
beq _0807AA4C
|
||||
movs r0, #0x2e
|
||||
ldrsh r1, [r5, r0]
|
||||
ldrh r0, [r7, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r5, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AAF8
|
||||
_0807AA4C:
|
||||
movs r0, #2
|
||||
ands r0, r4
|
||||
cmp r0, #0
|
||||
beq _0807AA68
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AABC
|
||||
b _0807AA76
|
||||
.align 2, 0
|
||||
_0807AA5C: .4byte gPlayerState
|
||||
_0807AA60: .4byte gRoomControls
|
||||
_0807AA64: .4byte gPlayerEntity
|
||||
_0807AA68:
|
||||
movs r0, #4
|
||||
ands r0, r4
|
||||
cmp r0, #0
|
||||
beq _0807AA76
|
||||
adds r0, r5, #0
|
||||
bl sub_0807AA80
|
||||
_0807AA76:
|
||||
pop {r3, r4}
|
||||
mov r8, r3
|
||||
mov sb, r4
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -32,15 +32,12 @@ SECTIONS {
|
||||
. = 0x00002AC0; gUnk_02002AC0 = .;
|
||||
. = 0x00002B0E; gUnk_02002B0E = .;
|
||||
. = 0x00002B54; gUnk_02002B54 = .;
|
||||
. = 0x00002B58; gUnk_02002B58 = .;
|
||||
. = 0x00002B6B; gUnk_02002B6B = .;
|
||||
. = 0x00002C01; gUnk_02002C01 = .;
|
||||
. = 0x00002C81; gUnk_02002C81 = .;
|
||||
. = 0x00002C8E; gUnk_02002C8E = .;
|
||||
. = 0x00002F00; gMapDataTopSpecial = .;
|
||||
. = 0x00006F00; gUnk_02006F00 = .;
|
||||
. = 0x0000AF00; gUnk_0200AF00 = .;
|
||||
. = 0x0000AF13; gUnk_0200AF13 = .;
|
||||
. = 0x0000AF34; gUnk_0200AF34 = .;
|
||||
. = 0x0000B240; gUnk_0200B240 = .;
|
||||
. = 0x0000B640; gUnk_0200B640 = .;
|
||||
@@ -127,7 +124,6 @@ SECTIONS {
|
||||
. = 0x000354B0; gUnk_020354B0 = .;
|
||||
. = 0x000354B4; gManagerCount = .;
|
||||
. = 0x000354C0; gUnk_020354C0 = .;
|
||||
. = 0x0003553E; gUnk_0203553E = .;
|
||||
. = 0x00035540; gzHeap = .;
|
||||
. = 0x00035542; gUnk_02035542 = .;
|
||||
. = 0x00036540; gUnk_02036540 = .;
|
||||
@@ -154,10 +150,8 @@ SECTIONS {
|
||||
|
||||
iwram (NOLOAD) : ALIGN(4) {
|
||||
. = 0x00000000; gOAMControls = .;
|
||||
. = 0x00000020; gUnk_03000020 = .;
|
||||
. = 0x00000420; gUnk_03000420 = .;
|
||||
. = 0x00000B80; gUnk_03000B80 = .;
|
||||
. = 0x00000BD4; gUnk_03000BD4 = .;
|
||||
. = 0x00000BF0; gRoomControls = .;
|
||||
. = 0x00000C24; gUnk_03000C24 = .;
|
||||
. = 0x00000C30; gUnk_03000C30 = .;
|
||||
|
||||
+46
-50
@@ -280,36 +280,36 @@ bool32 sub_0801A4F8(void) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
|
||||
|
||||
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc", u32 sub_0801A8D0(Entity* this, u32 param_2)) {
|
||||
u32 sub_0801A8D0(Entity* this, u32 param_2) {
|
||||
u16* mapData;
|
||||
u32 tile;
|
||||
u32 position;
|
||||
|
||||
if (this != NULL) {
|
||||
mapData = GetLayerByIndex(this->collisionLayer)->mapData;
|
||||
if (param_2 == 0) {
|
||||
position = COORD_TO_TILE_OFFSET(this, 0, 8);
|
||||
tile = mapData[position];
|
||||
if (tile == 0x4055) {
|
||||
return position - 1;
|
||||
}
|
||||
if (tile == 0x4056) {
|
||||
return position;
|
||||
}
|
||||
} else {
|
||||
position = COORD_TO_TILE_OFFSET(this, 8, 0);
|
||||
tile = mapData[position];
|
||||
if (tile == 0x4057) {
|
||||
return position - 0x40;
|
||||
}
|
||||
if (tile == 0x4058) {
|
||||
return position;
|
||||
}
|
||||
if (this == NULL)
|
||||
return 0xffff;
|
||||
|
||||
mapData = GetLayerByIndex(this->collisionLayer)->mapData;
|
||||
if (param_2 == 0) {
|
||||
position = COORD_TO_TILE_OFFSET(this, 0, 8);
|
||||
tile = mapData[position];
|
||||
if (tile == 0x4055) {
|
||||
return position - 1;
|
||||
}
|
||||
if (tile == 0x4056) {
|
||||
return position;
|
||||
}
|
||||
} else {
|
||||
position = COORD_TO_TILE_OFFSET(this, 8, 0);
|
||||
tile = mapData[position];
|
||||
if (tile == 0x4057) {
|
||||
return position - 0x40;
|
||||
}
|
||||
if (tile == 0x4058) {
|
||||
return position;
|
||||
}
|
||||
}
|
||||
return 0xffff;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
bool32 sub_0801A980(void) {
|
||||
u16 tileType;
|
||||
@@ -323,46 +323,42 @@ bool32 sub_0801A980(void) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc",
|
||||
bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3)) {
|
||||
|
||||
bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3) {
|
||||
bool32 cond = FALSE;
|
||||
switch (param_2) {
|
||||
case 0x360:
|
||||
cond = TRUE;
|
||||
break;
|
||||
case 0x361:
|
||||
if (param_1 == 0) {
|
||||
goto result;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 0x362:
|
||||
if (param_1 == 0x10) {
|
||||
goto result;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case 0x363:
|
||||
if (param_1 == 0x18) {
|
||||
goto result;
|
||||
} else {
|
||||
return FALSE;
|
||||
cond = TRUE;
|
||||
}
|
||||
break;
|
||||
case 0x364:
|
||||
if (param_1 == 8) {
|
||||
goto result;
|
||||
} else {
|
||||
return FALSE;
|
||||
cond = TRUE;
|
||||
}
|
||||
break;
|
||||
case 0x362:
|
||||
if (param_1 == 0x10) {
|
||||
cond = TRUE;
|
||||
}
|
||||
break;
|
||||
case 0x363:
|
||||
if (param_1 == 0x18) {
|
||||
cond = TRUE;
|
||||
}
|
||||
break;
|
||||
case 0x360:
|
||||
result:
|
||||
return sub_0801AA58(&gPlayerEntity, param_3, param_1);
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cond) {
|
||||
return sub_0801AA58(&gPlayerEntity, param_3, param_1);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
bool32 sub_0801AA58(Entity* this, u32 param_2, u32 param_3) {
|
||||
LayerStruct* layer;
|
||||
|
||||
+36
-1
@@ -289,4 +289,39 @@ u32 sub_0801D458(u32 a1) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/color/sub_0801D48C.inc", void sub_0801D48C(u32 a1, u32 a2));
|
||||
void sub_0801D48C(u32 a1, u32 a2) {
|
||||
Palette* pPVar1;
|
||||
Palette* pPVar2;
|
||||
s32 iVar2;
|
||||
u16* iVar3;
|
||||
u16* iVar4;
|
||||
Palette* pPVar5;
|
||||
u32 tmp;
|
||||
u16* ptr;
|
||||
Palette* ptr2;
|
||||
|
||||
pPVar2 = gPaletteList;
|
||||
pPVar1 = pPVar2 + a1;
|
||||
iVar2 = (*(u8*)pPVar1) >> 4;
|
||||
if (--iVar2 != -1) {
|
||||
ptr = gPaletteBuffer;
|
||||
iVar4 = ptr + 0x100 + a2 * 0x10;
|
||||
pPVar5 = gPaletteList + a2;
|
||||
iVar3 = ptr + 0x100 + a1 * 0x10;
|
||||
do {
|
||||
*pPVar5 = *pPVar1;
|
||||
pPVar1->_0_0 = 0;
|
||||
pPVar1->_0_4 = 0;
|
||||
pPVar1->_1 = 0;
|
||||
pPVar1->_2 = 0;
|
||||
MemCopy(iVar3, iVar4, 0x20);
|
||||
iVar3 += 0x10;
|
||||
pPVar1++;
|
||||
iVar4 += 0x10;
|
||||
iVar2--;
|
||||
pPVar5++;
|
||||
} while (iVar2 != -1);
|
||||
}
|
||||
|
||||
gUsedPalettes |= 0xffff0000;
|
||||
}
|
||||
|
||||
+25
-1
@@ -310,7 +310,31 @@ void sub_0801D898(void* dest, void* src, u32 word, u32 size) {
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size));
|
||||
|
||||
ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr));
|
||||
void zFree(void* ptr) {
|
||||
u32 uVar1;
|
||||
u32 i;
|
||||
u16* puVar3;
|
||||
s32 uVar5;
|
||||
u16* ptr2;
|
||||
|
||||
uVar1 = (int)ptr - (int)gzHeap;
|
||||
if (uVar1 < 0x1000) {
|
||||
puVar3 = (u16*)gzHeap;
|
||||
uVar5 = *puVar3++;
|
||||
|
||||
for (i = 0; i < uVar5; puVar3 += 2, i++) {
|
||||
if (*puVar3 == uVar1) {
|
||||
ptr2 = &((u16*)(gzHeap - 2))[uVar5 * 2];
|
||||
*puVar3 = *ptr2;
|
||||
*ptr2++ = 0;
|
||||
*(puVar3 + 1) = *ptr2;
|
||||
*ptr2 = 0;
|
||||
*(u16*)(gzHeap) = uVar5 - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void zMallocInit(void) {
|
||||
MemClear(gzHeap, sizeof(gzHeap));
|
||||
|
||||
+37
-3
@@ -12,6 +12,7 @@
|
||||
#include "hitbox.h"
|
||||
#include "common.h"
|
||||
#include "flags.h"
|
||||
#include "collision.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
@@ -27,8 +28,8 @@ typedef struct {
|
||||
} ArmosEntity;
|
||||
|
||||
extern Entity* gUnk_020000B0;
|
||||
extern Entity gUnk_02027EB4;
|
||||
extern Entity gUnk_0200D654;
|
||||
extern u8 gUnk_02027EB4[];
|
||||
extern u8 gUnk_0200D654[];
|
||||
|
||||
extern void (*const gUnk_080CE124[])(ArmosEntity*);
|
||||
extern void (*const gUnk_080CE13C[])(ArmosEntity*);
|
||||
@@ -361,7 +362,40 @@ bool32 sub_08030650(ArmosEntity* this) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/armos/sub_080306C4.inc", void sub_080306C4(ArmosEntity* this))
|
||||
void sub_080306C4(ArmosEntity* this) {
|
||||
u32 uVar3;
|
||||
u32 var;
|
||||
u32 tmp;
|
||||
|
||||
if (sub_08049FDC(super, 1) && this->unk_7a != 0) {
|
||||
|
||||
super->timer = 0x18;
|
||||
uVar3 = sub_0800132C(super, gUnk_020000B0);
|
||||
if (uVar3 != 0xff) {
|
||||
var = 0;
|
||||
if ((((Random() & 7) != 0) || (super->animationState == 0xff)) && ((this->unk_82 & 3) != 3)) {
|
||||
super->direction = (uVar3 + 4) & 0x18;
|
||||
var = 1;
|
||||
}
|
||||
if (!var) {
|
||||
super->direction = (4 + uVar3 + ((Random() & 2) - 1) * 8) & 0x18;
|
||||
}
|
||||
if (IsTileCollision(super->collisionLayer == 2 ? gUnk_0200D654 : gUnk_02027EB4,
|
||||
super->x.HALF.HI + gUnk_080CE164[super->direction >> 2],
|
||||
super->y.HALF.HI + gUnk_080CE164[(super->direction >> 2) + 1], 0)) {
|
||||
super->direction = ((u8)(((uVar3 & 4) ^ 4) << 1)) | (uVar3 & 0x10);
|
||||
var = 0;
|
||||
}
|
||||
sub_080307D4(this);
|
||||
tmp = this->unk_82 << 1 | var;
|
||||
this->unk_82 = tmp;
|
||||
}
|
||||
} else {
|
||||
super->action = 4;
|
||||
super->timer = 0x78;
|
||||
super->speed = 0xa0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080307D4(ArmosEntity* this) {
|
||||
u8 tmp = super->direction >> 3;
|
||||
|
||||
+11
-1
@@ -392,7 +392,17 @@ void sub_0802124C(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/darkNut/sub_08021274.inc", u32 sub_08021274(u32 a, u32 b))
|
||||
u32 sub_08021274(u32 animationState, u32 dir) {
|
||||
if (((dir & 7) - 3 < 3) && (((dir & 0x18) >> 3 == animationState || (((dir + 8) & 0x18) >> 3 == animationState)))) {
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
dir = DirectionToAnimationState(DirectionRoundUp(dir));
|
||||
if (animationState == dir) {
|
||||
return 0xff;
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
|
||||
void sub_080212B0(Entity* this) {
|
||||
u8 tmp;
|
||||
|
||||
@@ -175,7 +175,6 @@ typedef struct {
|
||||
} CutsceneData;
|
||||
static const CutsceneData sCutsceneData[];
|
||||
|
||||
extern u8 gUnk_0200AF13;
|
||||
extern u8 gUnk_0200AF14;
|
||||
extern u8 gUnk_080FE1C6[];
|
||||
extern void (*const gUnk_080FE2AC[])(void);
|
||||
|
||||
+55
-2
@@ -36,7 +36,7 @@ void sub_08075FF8(ItemBehavior* this, u32 idx) {
|
||||
}
|
||||
maxBombs = this->behaviorID == 7 ? 3 : 1;
|
||||
if (maxBombs > bombCount) {
|
||||
entity = CreatePlayerItemWithParent(this, 2);
|
||||
entity = CreatePlayerItemWithParent(this, PLAYER_ITEM_BOMB);
|
||||
if (entity != NULL) {
|
||||
pos = &gUnk_0811BDAC[gPlayerEntity.animationState & 6];
|
||||
PositionRelative(&gPlayerEntity, entity, Q_16_16(pos[0]), Q_16_16(pos[1]));
|
||||
@@ -48,4 +48,57 @@ void sub_08075FF8(ItemBehavior* this, u32 idx) {
|
||||
DeletePlayerItem(this, idx);
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/itemBomb/sub_08076088.inc", void sub_08076088(ItemBehavior* this, void* arg1))
|
||||
void sub_08076088(ItemBehavior* this, Entity* param_2, u32 param_3) {
|
||||
if (param_2 != NULL) {
|
||||
if ((param_2->carryFlags & 1) != 0) {
|
||||
return;
|
||||
}
|
||||
param_2->action = 2;
|
||||
param_2->subAction = param_2->carryFlags & 1;
|
||||
}
|
||||
|
||||
this->field_0x18 = param_2;
|
||||
if ((gPlayerState.flags & PL_NO_CAP)) {
|
||||
sub_08077DF4(this, 0x928);
|
||||
} else {
|
||||
sub_08077DF4(this, 0x338);
|
||||
}
|
||||
gPlayerState.heldObject = 3;
|
||||
gPlayerState.framestate = 4;
|
||||
this->stateID = 2;
|
||||
this->field_0xf = 0xf;
|
||||
if ((gPlayerEntity.field_0x78.HALF.HI & 0x80)) {
|
||||
gPlayerEntity.field_0x78.HALF.HI = 0;
|
||||
COLLISION_ON(&gPlayerEntity);
|
||||
gPlayerState.heldObject = 4;
|
||||
gPlayerState.keepFacing = ~(8 >> param_3) & gPlayerState.keepFacing;
|
||||
gPlayerState.field_0xa = ~(8 >> param_3) & gPlayerState.field_0xa;
|
||||
this->stateID = 3;
|
||||
this->field_0xf = 0;
|
||||
} else {
|
||||
gPlayerState.field_0xa |= (8 >> param_3);
|
||||
gPlayerState.keepFacing |= (8 >> param_3);
|
||||
}
|
||||
|
||||
param_2 = CreatePlayerItemWithParent(this, PLAYER_ITEM_13);
|
||||
if (param_2 == NULL) {
|
||||
PlayerCancelHoldItem(this, param_3);
|
||||
} else {
|
||||
Entity* playerEnt = &gPlayerEntity;
|
||||
*(Entity**)&playerEnt->field_0x74 = param_2;
|
||||
playerEnt->subtimer = 0;
|
||||
param_2->child = this->field_0x18;
|
||||
param_2->carryFlags = playerEnt->carryFlags;
|
||||
param_2->parent = (Entity*)this;
|
||||
this->field_0x18 = param_2;
|
||||
param_2->type2 = this->field_0x2[1];
|
||||
param_2->timer = this->field_0x5[2];
|
||||
param_2->subtimer = this->field_0x5[3];
|
||||
if ((this->field_0x18->carryFlags & 0xf0) == 0x10) {
|
||||
this->field_0x5[2] = 8;
|
||||
} else {
|
||||
this->field_0x5[2] = 0;
|
||||
}
|
||||
SoundReq(SFX_PLY_LIFT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "entity.h"
|
||||
#include "item.h"
|
||||
#include "functions.h"
|
||||
#include "playeritem.h"
|
||||
|
||||
void sub_08076C98(ItemBehavior*, u32);
|
||||
void sub_08076CBC(ItemBehavior*, u32);
|
||||
@@ -26,7 +27,7 @@ void sub_08076CBC(ItemBehavior* beh, u32 idx) {
|
||||
DeletePlayerItem(beh, idx);
|
||||
} else {
|
||||
if ((beh->field_0x5[9] & 0x40) != 0) {
|
||||
CreatePlayerItemWithParent(beh, 0x12);
|
||||
CreatePlayerItemWithParent(beh, PLAYER_ITEM_12);
|
||||
}
|
||||
UpdateItemAnim(beh);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "effects.h"
|
||||
#include "game.h"
|
||||
#include "save.h"
|
||||
#include "playeritem.h"
|
||||
|
||||
void sub_08076964(ItemBehavior*, u32);
|
||||
void sub_080768F8(ItemBehavior*, u32);
|
||||
@@ -105,7 +106,7 @@ void sub_08076964(ItemBehavior* this, u32 idx) {
|
||||
(gPlayerState.skills & SKILL_DASH_ATTACK) != 0) {
|
||||
gPlayerState.field_0xab = 3;
|
||||
sub_08077DF4(this, 0x298);
|
||||
bombEntity = CreatePlayerItemWithParent(this, 0xc);
|
||||
bombEntity = CreatePlayerItemWithParent(this, PLAYER_ITEM_C);
|
||||
if (bombEntity != NULL) {
|
||||
if (ItemIsSword(gSave.stats.itemButtons[SLOT_A]) != 0) {
|
||||
uVar3 = gSave.stats.itemButtons[SLOT_A];
|
||||
|
||||
@@ -114,7 +114,7 @@ void sub_080754B8(ItemBehavior* this, u32 idx) {
|
||||
if (gPlayerEntity.frameSpriteSettings & 1) {
|
||||
iVar1 = sub_0807B014();
|
||||
if (iVar1 && FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_SWORD_BEAM1, 2) == 0) {
|
||||
CreatePlayerItemWithParent(this, 0xf);
|
||||
CreatePlayerItemWithParent(this, PLAYER_ITEM_SWORD_BEAM1);
|
||||
if (iVar1 == 0xf) {
|
||||
gPlayerState.field_0xab = 5;
|
||||
} else {
|
||||
@@ -235,7 +235,7 @@ void sub_08075738(ItemBehavior* this, u32 idx) {
|
||||
} else {
|
||||
if (((((gPlayerEntity.frameSpriteSettings & 1) != 0) && ((gPlayerState.sword_state & 0x80) == 0)) &&
|
||||
((gPlayerState.skills & SKILL_FOURSWORD) != 0))) {
|
||||
Entity* bombEnt = CreatePlayerItemWithParent(this, 0x14);
|
||||
Entity* bombEnt = CreatePlayerItemWithParent(this, PLAYER_ITEM_14);
|
||||
if (bombEnt) {
|
||||
bombEnt->animationState = (gPlayerEntity.animationState & 6) | 0x80;
|
||||
}
|
||||
|
||||
@@ -5,8 +5,33 @@
|
||||
* @brief Delayed entity loader.
|
||||
*/
|
||||
#include "manager/delayedEntityLoadManager.h"
|
||||
#include "room.h"
|
||||
|
||||
ASM_FUNC("asm/non_matching/delayedEntityLoadManager/DelayedEntityLoadManager_Main.inc",
|
||||
void DelayedEntityLoadManager_Main())
|
||||
|
||||
ASM_FUNC("asm/non_matching/delayedEntityLoadManager/sub_0805ACC0.inc", u32 sub_0805ACC0(Entity* ent))
|
||||
u32 sub_0805ACC0(Entity* param_1) {
|
||||
u16* ptr;
|
||||
Entity* entity;
|
||||
Entity* list;
|
||||
s32 tmp;
|
||||
|
||||
if (param_1->health == 0) {
|
||||
return 0;
|
||||
}
|
||||
tmp = (param_1->health & 0x7f) - 1;
|
||||
list = (Entity*)(gEntityLists + 6);
|
||||
|
||||
for (entity = gEntityLists[6].first; entity != list; entity = entity->next) {
|
||||
if ((entity->kind == 9 && entity->id == 0x16) && entity->type2 <= tmp &&
|
||||
(entity->type2 + *(u8*)((u32)&entity->zVelocity + 1)) > tmp) {
|
||||
|
||||
ptr = (u16*)GetCurrentRoomProperty(entity->type);
|
||||
if (ptr != NULL) {
|
||||
ptr += (tmp - entity->type2) * 8;
|
||||
return (((ptr[2] + gRoomControls.origin_x) * 0x10000) | ptr[3]) + gRoomControls.origin_y;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -79,8 +79,7 @@ void sub_08057118(LightRayManager* this) {
|
||||
RegisterTransitionManager(this, sub_080570B8, sub_080570F8);
|
||||
}
|
||||
|
||||
// regalloc
|
||||
NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174(LightRayManager* this)) {
|
||||
void sub_08057174(LightRayManager* this) {
|
||||
LightRayManagerProp* prop = GetCurrentRoomProperty(super->type);
|
||||
s32 temp;
|
||||
s32 x;
|
||||
@@ -88,23 +87,14 @@ NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174(
|
||||
|
||||
if (prop->unk0 == 0xff)
|
||||
return;
|
||||
temp = gPlayerEntity.x.HALF.HI;
|
||||
if (temp < 0) {
|
||||
temp += 0xf;
|
||||
}
|
||||
|
||||
x = temp >> 4;
|
||||
temp = gPlayerEntity.y.HALF.HI;
|
||||
if (temp < 0) {
|
||||
temp += 0xf;
|
||||
}
|
||||
|
||||
y = temp >> 4;
|
||||
x = gPlayerEntity.x.HALF.HI / 16;
|
||||
y = gPlayerEntity.y.HALF.HI / 16;
|
||||
|
||||
for (; prop->unk0 != 0xff; prop++) {
|
||||
if (prop->unk0 != this->unk_21) {
|
||||
u32 x2 = (gRoomControls.origin_x >> 4) + prop->unk1;
|
||||
u32 y2 = (gRoomControls.origin_y >> 4) + prop->unk2;
|
||||
u32 x2 = (gRoomControls.origin_x / 16) + prop->unk1;
|
||||
u32 y2 = (gRoomControls.origin_y / 16) + prop->unk2;
|
||||
|
||||
if (y - y2 < prop->unk4 && x - x2 < prop->unk3) {
|
||||
switch (prop->unk0) {
|
||||
@@ -158,7 +148,6 @@ NONMATCH("asm/non_matching/lightRayManager/sub_08057174.inc", void sub_08057174(
|
||||
}
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_0805728C(LightRayManager* this) {
|
||||
if (--super->subtimer == 0) {
|
||||
|
||||
+10
-6
@@ -51,8 +51,9 @@ void Object12_Init(Object12Entity* this) {
|
||||
void Object12_Action1(Object12Entity* this) {
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/object12/Object12_Action2.inc", void Object12_Action2(Object12Entity* this)) {
|
||||
void Object12_Action2(Object12Entity* this) {
|
||||
u32 tmp;
|
||||
u32 tmp2;
|
||||
if (--super->timer == 0) {
|
||||
super->action = 3;
|
||||
super->timer = 0x1e;
|
||||
@@ -60,13 +61,16 @@ NONMATCH("asm/non_matching/object12/Object12_Action2.inc", void Object12_Action2
|
||||
gScreen.lcd.displayControl |= 0x2000;
|
||||
gScreen.controls.windowInsideControl = 0x1f;
|
||||
gScreen.controls.windowOutsideControl = 0xf;
|
||||
tmp = super->x.HALF.HI - gRoomControls.scroll_x;
|
||||
gScreen.controls.window0HorizontalDimensions = (((tmp - 0x18) & 0xff) << 8) | ((tmp + 0x18) & 0xff);
|
||||
tmp = super->y.HALF.HI - gRoomControls.scroll_y;
|
||||
gScreen.controls.window0VerticalDimensions = (((tmp - 0x18) & 0xff) << 8) | ((tmp + 0x18) & 0xff);
|
||||
tmp2 = super->x.HALF.HI;
|
||||
tmp = gRoomControls.scroll_x;
|
||||
tmp2 = tmp2 - tmp;
|
||||
gScreen.controls.window0HorizontalDimensions = (((tmp2 - 0x18) & 0xff) << 8) | ((tmp2 + 0x18) & 0xff);
|
||||
tmp2 = super->y.HALF.HI;
|
||||
tmp = gRoomControls.scroll_y;
|
||||
tmp2 = tmp2 - tmp;
|
||||
gScreen.controls.window0VerticalDimensions = (((tmp2 - 0x18) & 0xff) << 8) | ((tmp2 + 0x18) & 0xff);
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void Object12_Action3(Object12Entity* this) {
|
||||
if (--super->timer == 0) {
|
||||
|
||||
@@ -25,7 +25,7 @@ void Object1E(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity* this)) {
|
||||
void sub_08087528(Entity* this) {
|
||||
u32 palette;
|
||||
|
||||
this->action = 1;
|
||||
@@ -47,13 +47,13 @@ NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity*
|
||||
}
|
||||
ChangeObjPalette(this, palette);
|
||||
switch (this->animationState) {
|
||||
case 1:
|
||||
this->spriteSettings.flipX = 1;
|
||||
case 3:
|
||||
if (this->type == 0x40) {
|
||||
this->y.HALF.HI += 4;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case 1:
|
||||
this->spriteSettings.flipX = 1;
|
||||
if (this->type == 0x40) {
|
||||
this->y.HALF.HI += 4;
|
||||
}
|
||||
@@ -68,7 +68,6 @@ NONMATCH("asm/non_matching/object1E/sub_08087528.inc", void sub_08087528(Entity*
|
||||
SetDefaultPriority(this, 3);
|
||||
InitializeAnimation(this, this->type2 * 4 + this->animationState);
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_080875F4(Entity* this) {
|
||||
GetNextFrame(this);
|
||||
|
||||
+2
-1
@@ -22,6 +22,7 @@
|
||||
#include "game.h"
|
||||
#include "screen.h"
|
||||
#include "main.h"
|
||||
#include "playeritem.h"
|
||||
|
||||
#define GRAVITY_RATE Q_8_8(32)
|
||||
#define SLOPE_SPEED_MODIFIER 0x50
|
||||
@@ -1657,7 +1658,7 @@ static void PlayerEmptyBottleInit(Entity* this) {
|
||||
Entity* ent;
|
||||
|
||||
ResetPlayerItem();
|
||||
ent = CreatePlayerItemWithParent((ItemBehavior*)this, 0xe);
|
||||
ent = CreatePlayerItemWithParent((ItemBehavior*)this, PLAYER_ITEM_BOTTLE);
|
||||
if (ent != NULL) {
|
||||
ent->field_0x68.HALF.LO = gPlayerState.field_0x38;
|
||||
this->subAction++;
|
||||
|
||||
+7
-8
@@ -1812,20 +1812,20 @@ u32 sub_0807A894(Entity* this) {
|
||||
void nullsub_505(void) {
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/playerUtils/sub_0807A8D8.inc", void sub_0807A8D8(Entity* this)) {
|
||||
void sub_0807A8D8(Entity* this) {
|
||||
u32 tmp;
|
||||
|
||||
if ((gPlayerState.flags & PL_MINISH) == 0) {
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 0, 1), gPlayerEntity.collisionLayer) & 0x20;
|
||||
if (tmp != 0) {
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 0, 1), gPlayerEntity.collisionLayer);
|
||||
if ((tmp & 0x20) != 0) {
|
||||
sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 0, 1));
|
||||
}
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, -2, 0), gPlayerEntity.collisionLayer) & 0x20;
|
||||
if (tmp != 0) {
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, -2, 0), gPlayerEntity.collisionLayer);
|
||||
if ((tmp & 0x20) != 0) {
|
||||
sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, -2, 0));
|
||||
}
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 2, 0), gPlayerEntity.collisionLayer) & 0x20;
|
||||
if (tmp != 0) {
|
||||
tmp = sub_080B1B84(COORD_TO_TILE_OFFSET(this, 2, 0), gPlayerEntity.collisionLayer);
|
||||
if ((tmp & 0x20) != 0) {
|
||||
sub_0807AAF8(this, COORD_TO_TILE_OFFSET(this, 2, 0));
|
||||
}
|
||||
}
|
||||
@@ -1841,7 +1841,6 @@ NONMATCH("asm/non_matching/playerUtils/sub_0807A8D8.inc", void sub_0807A8D8(Enti
|
||||
}
|
||||
}
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_0807AA80(Entity* this) {
|
||||
if (((gPlayerState.flags & PL_HIDDEN) == 0) && (this->collisionLayer = 2, this->z.HALF.HI == 0)) {
|
||||
|
||||
+130
-36
@@ -6,22 +6,22 @@
|
||||
#include "projectile.h"
|
||||
#include "hitbox.h"
|
||||
|
||||
extern u8 gEntCount;
|
||||
|
||||
extern void (*const gUnk_0812A994[])(Entity*);
|
||||
extern void (*const GyorgTail_Actions[])(Entity*);
|
||||
extern const s16 gUnk_0812A9B4[];
|
||||
extern const u8 gUnk_0812A9B8[];
|
||||
extern const u8 gUnk_0812A9BA[];
|
||||
extern const u8 gUnk_0812A9C0[];
|
||||
|
||||
bool32 sub_080AC5E4(Entity*);
|
||||
void sub_080AC388(Entity*);
|
||||
void sub_080AC6F0(Entity*);
|
||||
void sub_080AC760(Entity*);
|
||||
void sub_080AC7C4(Entity*);
|
||||
void sub_080AC328(Entity*);
|
||||
void sub_080AC510(Entity*);
|
||||
void sub_080AC560(Entity*);
|
||||
void sub_080AC884(Entity*);
|
||||
void sub_080AC480(Entity*);
|
||||
void GyorgTail_Init(Entity*);
|
||||
|
||||
void GyorgTail(Entity* this) {
|
||||
static void (*const gUnk_0812A994[])(Entity*) = {
|
||||
sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560,
|
||||
};
|
||||
Entity* parent;
|
||||
|
||||
if (this->parent->next == NULL) {
|
||||
@@ -47,10 +47,16 @@ void GyorgTail(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_080AC328(Entity* this) {
|
||||
static void (*const GyorgTail_Actions[])(Entity*) = {
|
||||
GyorgTail_Init,
|
||||
sub_080AC388,
|
||||
sub_080AC480,
|
||||
};
|
||||
GyorgTail_Actions[this->action](this);
|
||||
}
|
||||
|
||||
void GyorgTail_Init(Entity* this) {
|
||||
static const s16 gUnk_0812A9B4[] = { -64, 64 };
|
||||
if (sub_080AC5E4(this) != 0) {
|
||||
this->action = 1;
|
||||
this->frameIndex = 0xc;
|
||||
@@ -61,7 +67,46 @@ void GyorgTail_Init(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC388.inc", void sub_080AC388(Entity* this))
|
||||
void sub_080AC388(Entity* this) {
|
||||
static const u8 gUnk_0812A9B8[] = { 24, 20 };
|
||||
Entity* pEVar2;
|
||||
int iVar3;
|
||||
u32 uVar5;
|
||||
|
||||
uVar5 = gUnk_0812A9B8[this->type];
|
||||
pEVar2 = this->parent;
|
||||
iVar3 = (pEVar2->animationState ^ 0x80) - (this->field_0x7c.HALF_U.LO >> 8);
|
||||
if ((short)this->field_0x7a.HWORD < 0) {
|
||||
if (((iVar3 - uVar5) & 0xff) <= 0x7f) {
|
||||
s32 tmp = -(short)this->field_0x7a.HWORD;
|
||||
this->field_0x7a.HWORD = tmp;
|
||||
this->field_0x7c.HALF_U.LO = (short)((((pEVar2->animationState ^ 0x80) - uVar5) & 0xff) << 8);
|
||||
sub_080AC884(this);
|
||||
} else {
|
||||
this->field_0x7c.HALF_U.LO = this->field_0x7c.HALF_U.LO + this->field_0x7a.HWORD;
|
||||
if (((iVar3 + uVar5) & 0xff) >= 0x81) {
|
||||
this->field_0x7c.HALF_U.LO = ((((pEVar2->animationState ^ 0x80) + uVar5) & 0xff) << 8) | 0x80;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (((iVar3 + uVar5) & 0xff) >= 0x81) {
|
||||
s32 tmp = -(short)this->field_0x7a.HWORD;
|
||||
this->field_0x7a.HWORD = tmp;
|
||||
this->field_0x7c.HALF_U.LO = (short)((((pEVar2->animationState ^ 0x80) + uVar5) & 0xff) << 8);
|
||||
sub_080AC884(this);
|
||||
} else {
|
||||
this->field_0x7c.HALF_U.LO = this->field_0x7c.HALF_U.LO + this->field_0x7a.HWORD;
|
||||
if (0x7e >= ((iVar3 - uVar5) & 0xff) - 1) {
|
||||
this->field_0x7c.HALF_U.LO = ((((pEVar2->animationState ^ 0x80) - uVar5) & 0xff) << 8) | 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this->direction = this->field_0x7c.HALF_U.LO >> 8;
|
||||
sub_080AC6F0(this);
|
||||
sub_080AC760(this);
|
||||
sub_080AC7C4(this);
|
||||
}
|
||||
|
||||
void sub_080AC480(Entity* this) {
|
||||
if (this->timer != 0) {
|
||||
@@ -88,6 +133,7 @@ void sub_080AC480(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_080AC510(Entity* this) {
|
||||
static const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 };
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->frameIndex = gUnk_0812A9BA[this->type * 3 + this->type2 - 1];
|
||||
@@ -186,7 +232,57 @@ NONMATCH("asm/non_matching/gyorgTail/sub_080AC5E4.inc", bool32 sub_080AC5E4(Enti
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
ASM_FUNC("asm/non_matching/gyorgTail/sub_080AC6F0.inc", void sub_080AC6F0(Entity* this))
|
||||
void sub_080AC6F0(Entity* this) {
|
||||
static const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
|
||||
|
||||
u32 uVar1;
|
||||
s32 iVar2;
|
||||
s32 iVar3;
|
||||
u32 uVar4;
|
||||
u32 tmp;
|
||||
|
||||
uVar4 = this->direction & 0x1f;
|
||||
uVar1 = this->direction >> 5;
|
||||
iVar3 = uVar1 * 3;
|
||||
tmp = gUnk_0812A9C0[this->animationState] - uVar1 * 3;
|
||||
if (tmp <= 3) {
|
||||
switch (tmp) {
|
||||
default:
|
||||
if (uVar4 > 0x19) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
if (uVar4 < 7) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (uVar4 - 5 < 0xd) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (uVar4 - 0xf < 0xd) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
iVar2 = iVar3 + 3;
|
||||
if (uVar4 < 0x1b) {
|
||||
iVar2 = iVar3 + 2;
|
||||
if (uVar4 < 0x11) {
|
||||
iVar2 = iVar3;
|
||||
if (5 < uVar4) {
|
||||
iVar2 = iVar3 + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->animationState = iVar2 % 0x18;
|
||||
this->frameIndex = gUnk_0812A9C0[iVar2 % 0x18];
|
||||
}
|
||||
|
||||
void sub_080AC760(Entity* param_1) {
|
||||
s32 tmp;
|
||||
@@ -218,14 +314,17 @@ void sub_080AC760(Entity* param_1) {
|
||||
}
|
||||
}
|
||||
|
||||
NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity* this)) {
|
||||
// TODO regalloc
|
||||
void sub_080AC7C4(Entity* this) {
|
||||
Entity* entity1;
|
||||
Entity* entity2;
|
||||
Entity* entity3;
|
||||
s32 iVar1;
|
||||
s32 iVar2;
|
||||
s32 iVar3;
|
||||
s32 tmp;
|
||||
s32 tmp2;
|
||||
s32 tmp3;
|
||||
s32 tmp4;
|
||||
s32 tmp5;
|
||||
s32 tmp6;
|
||||
s32 r6;
|
||||
|
||||
entity1 = this->child;
|
||||
entity2 = entity1->child;
|
||||
@@ -235,14 +334,22 @@ NONMATCH("asm/non_matching/gyorgTail/sub_080AC7C4.inc", void sub_080AC7C4(Entity
|
||||
} else {
|
||||
entity3 = this->parent;
|
||||
}
|
||||
PositionRelative(entity3, entity2, (entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction],
|
||||
-((entity2->field_0x78.HALF.HI << 8) * gSineTable[entity2->direction + 0x40]));
|
||||
PositionRelative(entity2, entity1, (entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction],
|
||||
-((entity1->field_0x78.HALF.HI << 8) * gSineTable[entity1->direction + 0x40]));
|
||||
PositionRelative(entity1, this, (this->field_0x78.HALF.HI << 8) * gSineTable[this->direction],
|
||||
-((this->field_0x78.HALF.HI << 8) * gSineTable[this->direction + 0x40]));
|
||||
tmp = entity2->field_0x78.HALF.HI << 8;
|
||||
tmp2 = gSineTable[entity2->direction];
|
||||
r6 = tmp2 * tmp;
|
||||
tmp2 = gSineTable[entity2->direction + 0x40] * tmp;
|
||||
PositionRelative(entity3, entity2, r6, -tmp2);
|
||||
tmp3 = entity1->field_0x78.HALF.HI << 8;
|
||||
tmp4 = gSineTable[entity1->direction];
|
||||
r6 = tmp4 * tmp3;
|
||||
tmp4 = gSineTable[entity1->direction + 0x40] * tmp3;
|
||||
PositionRelative(entity2, entity1, r6, -tmp4);
|
||||
tmp5 = this->field_0x78.HALF.HI << 8;
|
||||
tmp6 = gSineTable[this->direction];
|
||||
r6 = tmp6 * tmp5;
|
||||
tmp6 = gSineTable[this->direction + 0x40] * tmp5;
|
||||
PositionRelative(entity1, this, r6, -tmp6);
|
||||
}
|
||||
END_NONMATCH
|
||||
|
||||
void sub_080AC884(Entity* this) {
|
||||
if (this->parent->field_0x70.HALF_U.HI != 0) {
|
||||
@@ -252,16 +359,3 @@ void sub_080AC884(Entity* this) {
|
||||
this->subtimer = 0x56;
|
||||
}
|
||||
}
|
||||
|
||||
void (*const gUnk_0812A994[])(Entity*) = {
|
||||
sub_080AC328, sub_080AC510, sub_080AC510, sub_080AC510, sub_080AC560,
|
||||
};
|
||||
void (*const GyorgTail_Actions[])(Entity*) = {
|
||||
GyorgTail_Init,
|
||||
sub_080AC388,
|
||||
sub_080AC480,
|
||||
};
|
||||
const s16 gUnk_0812A9B4[] = { -64, 64 };
|
||||
const u8 gUnk_0812A9B8[] = { 24, 20 };
|
||||
const u8 gUnk_0812A9BA[] = { 24, 25, 25, 24, 24, 24 };
|
||||
const u8 gUnk_0812A9C0[] = { 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
|
||||
|
||||
Reference in New Issue
Block a user