mirror of
https://github.com/zeldaret/tmc
synced 2026-06-09 04:40:07 -04:00
Merge branch 'huderlem-pot'
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# The Legend of Zelda: The Minish Cap
|
||||
|
||||
**Progress:** [⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 5%
|
||||
**Progress:** [⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 10%
|
||||
|
||||
```diff
|
||||
- WARNING! -
|
||||
|
||||
@@ -5,688 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_0805E744
|
||||
sub_0805E744: @ 0x0805E744
|
||||
push {lr}
|
||||
ldr r1, _0805E760 @ =gUnk_030011E8
|
||||
movs r0, #0xee
|
||||
lsls r0, r0, #2
|
||||
adds r2, r1, r0
|
||||
_0805E74E:
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
beq _0805E764
|
||||
adds r1, #0x88
|
||||
cmp r1, r2
|
||||
blo _0805E74E
|
||||
movs r0, #0
|
||||
b _0805E766
|
||||
.align 2, 0
|
||||
_0805E760: .4byte gUnk_030011E8
|
||||
_0805E764:
|
||||
adds r0, r1, #0
|
||||
_0805E766:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0805E768
|
||||
sub_0805E768: @ 0x0805E768
|
||||
push {lr}
|
||||
ldr r1, _0805E778 @ =GetEmptyEntity
|
||||
cmp r0, #9
|
||||
bne _0805E772
|
||||
ldr r1, _0805E77C @ =sub_0805E8D4
|
||||
_0805E772:
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E778: .4byte GetEmptyEntity
|
||||
_0805E77C: .4byte sub_0805E8D4
|
||||
|
||||
thumb_func_start DeleteThisEntity
|
||||
DeleteThisEntity: @ 0x0805E780
|
||||
push {lr}
|
||||
ldr r0, _0805E794 @ =gUnk_03003DD0
|
||||
ldr r0, [r0, #8]
|
||||
bl sub_0805E79C
|
||||
ldr r0, _0805E798 @ =gUnk_03005F24
|
||||
bl _call_via_r0
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E794: .4byte gUnk_03003DD0
|
||||
_0805E798: .4byte gUnk_03005F24
|
||||
|
||||
thumb_func_start sub_0805E79C
|
||||
sub_0805E79C: @ 0x0805E79C
|
||||
push {lr}
|
||||
adds r1, r0, #0
|
||||
ldrb r0, [r1, #8]
|
||||
ldr r2, _0805E7B4 @ =DeleteEntity
|
||||
cmp r0, #9
|
||||
bne _0805E7AA
|
||||
ldr r2, _0805E7B8 @ =sub_0805E900
|
||||
_0805E7AA:
|
||||
adds r0, r1, #0
|
||||
bl _call_via_r2
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E7B4: .4byte DeleteEntity
|
||||
_0805E7B8: .4byte sub_0805E900
|
||||
|
||||
thumb_func_start DeleteEntity
|
||||
DeleteEntity: @ 0x0805E7BC
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #4]
|
||||
cmp r0, #0
|
||||
beq _0805E84A
|
||||
adds r0, r4, #0
|
||||
bl sub_080AE068
|
||||
adds r0, r4, #0
|
||||
bl sub_0801D230
|
||||
adds r0, r4, #0
|
||||
bl sub_0806FE84
|
||||
adds r0, r4, #0
|
||||
bl sub_080788E0
|
||||
adds r0, r4, #0
|
||||
bl sub_08078954
|
||||
adds r0, r4, #0
|
||||
bl sub_0805EC60
|
||||
adds r0, r4, #0
|
||||
bl sub_08017744
|
||||
adds r0, r4, #0
|
||||
bl sub_0805E92C
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DB08
|
||||
adds r0, r4, #0
|
||||
bl sub_0806FBEC
|
||||
ldr r0, [r4, #0x64]
|
||||
bl sub_0801DA0C
|
||||
movs r5, #0
|
||||
str r5, [r4, #0x64]
|
||||
ldrb r0, [r4, #8]
|
||||
cmp r0, #3
|
||||
bne _0805E818
|
||||
adds r0, r4, #0
|
||||
bl sub_0804AA1C
|
||||
_0805E818:
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #4
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x3c
|
||||
strb r5, [r0]
|
||||
adds r0, #5
|
||||
strb r5, [r0]
|
||||
adds r0, #1
|
||||
strb r5, [r0]
|
||||
adds r0, #3
|
||||
strb r5, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0805EA98
|
||||
str r5, [r4, #4]
|
||||
movs r0, #1
|
||||
rsbs r0, r0, #0
|
||||
str r0, [r4]
|
||||
_0805E84A:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_0805E84C
|
||||
sub_0805E84C: @ 0x0805E84C
|
||||
push {r4, r5, lr}
|
||||
ldr r4, _0805E86C @ =gLinkEntity
|
||||
movs r0, #0xaa
|
||||
lsls r0, r0, #6
|
||||
adds r5, r4, r0
|
||||
_0805E856:
|
||||
ldr r0, [r4]
|
||||
cmp r0, #0
|
||||
bge _0805E862
|
||||
adds r0, r4, #0
|
||||
bl sub_0805E870
|
||||
_0805E862:
|
||||
adds r4, #0x88
|
||||
cmp r4, r5
|
||||
blo _0805E856
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0805E86C: .4byte gLinkEntity
|
||||
|
||||
thumb_func_start sub_0805E870
|
||||
sub_0805E870: @ 0x0805E870
|
||||
sub sp, #4
|
||||
movs r1, #0
|
||||
str r1, [sp]
|
||||
ldr r1, _0805E890 @ =0x040000D4
|
||||
mov r2, sp
|
||||
str r2, [r1]
|
||||
str r0, [r1, #4]
|
||||
ldr r0, _0805E894 @ =0x85000022
|
||||
str r0, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
ldr r1, _0805E898 @ =gUnk_03003DBC
|
||||
ldrb r0, [r1]
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
add sp, #4
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0805E890: .4byte 0x040000D4
|
||||
_0805E894: .4byte 0x85000022
|
||||
_0805E898: .4byte gUnk_03003DBC
|
||||
|
||||
thumb_func_start sub_0805E89C
|
||||
sub_0805E89C: @ 0x0805E89C
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r5, _0805E8CC @ =gUnk_03003D70
|
||||
ldr r0, [r5, #4]
|
||||
cmp r0, #0
|
||||
beq _0805E8C8
|
||||
_0805E8A6:
|
||||
ldr r0, [r5, #4]
|
||||
adds r6, r5, #0
|
||||
adds r6, #8
|
||||
cmp r0, r5
|
||||
beq _0805E8BC
|
||||
_0805E8B0:
|
||||
ldr r4, [r0, #4]
|
||||
bl sub_0805E79C
|
||||
adds r0, r4, #0
|
||||
cmp r0, r5
|
||||
bne _0805E8B0
|
||||
_0805E8BC:
|
||||
adds r5, r6, #0
|
||||
ldr r0, _0805E8D0 @ =gUnk_03003DB8
|
||||
cmp r5, r0
|
||||
blo _0805E8A6
|
||||
bl sub_0805E84C
|
||||
_0805E8C8:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0805E8CC: .4byte gUnk_03003D70
|
||||
_0805E8D0: .4byte gUnk_03003DB8
|
||||
|
||||
thumb_func_start sub_0805E8D4
|
||||
sub_0805E8D4: @ 0x0805E8D4
|
||||
push {lr}
|
||||
ldr r1, _0805E8F0 @ =gUnk_02033290
|
||||
movs r2, #0x80
|
||||
lsls r2, r2, #4
|
||||
adds r0, r1, r2
|
||||
cmp r1, r0
|
||||
bhs _0805E8FA
|
||||
adds r2, r0, #0
|
||||
_0805E8E4:
|
||||
ldr r0, [r1]
|
||||
cmp r0, #0
|
||||
bne _0805E8F4
|
||||
adds r0, r1, #0
|
||||
b _0805E8FC
|
||||
.align 2, 0
|
||||
_0805E8F0: .4byte gUnk_02033290
|
||||
_0805E8F4:
|
||||
adds r1, #0x40
|
||||
cmp r1, r2
|
||||
blo _0805E8E4
|
||||
_0805E8FA:
|
||||
movs r0, #0
|
||||
_0805E8FC:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0805E900
|
||||
sub_0805E900: @ 0x0805E900
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #4]
|
||||
cmp r0, #0
|
||||
beq _0805E926
|
||||
adds r0, r4, #0
|
||||
bl sub_0805E92C
|
||||
adds r0, r4, #0
|
||||
bl sub_0805EA98
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x40
|
||||
bl _DmaZero
|
||||
ldr r1, _0805E928 @ =gUnk_020354B4
|
||||
ldrb r0, [r1]
|
||||
subs r0, #1
|
||||
strb r0, [r1]
|
||||
_0805E926:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0805E928: .4byte gUnk_020354B4
|
||||
|
||||
thumb_func_start sub_0805E92C
|
||||
sub_0805E92C: @ 0x0805E92C
|
||||
push {lr}
|
||||
ldr r2, _0805E94C @ =gArea
|
||||
ldr r1, _0805E950 @ =0x00000888
|
||||
adds r3, r2, r1
|
||||
ldr r1, [r3]
|
||||
cmp r0, r1
|
||||
bne _0805E94A
|
||||
movs r0, #0
|
||||
str r0, [r3]
|
||||
ldr r3, _0805E954 @ =0x0000088C
|
||||
adds r1, r2, r3
|
||||
str r0, [r1]
|
||||
adds r3, #4
|
||||
adds r1, r2, r3
|
||||
str r0, [r1]
|
||||
_0805E94A:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E94C: .4byte gArea
|
||||
_0805E950: .4byte 0x00000888
|
||||
_0805E954: .4byte 0x0000088C
|
||||
|
||||
thumb_func_start sub_0805E958
|
||||
sub_0805E958: @ 0x0805E958
|
||||
push {lr}
|
||||
ldr r0, _0805E96C @ =gUnk_03003D70
|
||||
ldr r1, _0805E970 @ =gUnk_020369F0
|
||||
movs r2, #0x48
|
||||
bl sub_0801D66C
|
||||
bl sub_0805E98C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E96C: .4byte gUnk_03003D70
|
||||
_0805E970: .4byte gUnk_020369F0
|
||||
|
||||
thumb_func_start sub_0805E974
|
||||
sub_0805E974: @ 0x0805E974
|
||||
push {lr}
|
||||
ldr r0, _0805E984 @ =gUnk_020369F0
|
||||
ldr r1, _0805E988 @ =gUnk_03003D70
|
||||
movs r2, #0x48
|
||||
bl sub_0801D66C
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E984: .4byte gUnk_020369F0
|
||||
_0805E988: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805E98C
|
||||
sub_0805E98C: @ 0x0805E98C
|
||||
push {lr}
|
||||
ldr r0, _0805E9A4 @ =gUnk_03003D70
|
||||
adds r1, r0, #0
|
||||
adds r1, #0x48
|
||||
cmp r0, r1
|
||||
bhs _0805E9A2
|
||||
_0805E998:
|
||||
str r0, [r0]
|
||||
str r0, [r0, #4]
|
||||
adds r0, #8
|
||||
cmp r0, r1
|
||||
blo _0805E998
|
||||
_0805E9A2:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805E9A4: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805E9A8
|
||||
sub_0805E9A8: @ 0x0805E9A8
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r3, _0805E9F0 @ =gUnk_03003D70
|
||||
movs r7, #0x10
|
||||
movs r0, #0x48
|
||||
adds r0, r0, r3
|
||||
mov r8, r0
|
||||
_0805E9B8:
|
||||
ldr r2, [r3, #4]
|
||||
adds r4, r3, #0
|
||||
adds r4, #8
|
||||
cmp r2, r3
|
||||
beq _0805E9E2
|
||||
movs r6, #0xfd
|
||||
movs r5, #0x20
|
||||
_0805E9C6:
|
||||
ldrb r0, [r2, #0x10]
|
||||
adds r1, r6, #0
|
||||
ands r1, r0
|
||||
strb r1, [r2, #0x10]
|
||||
adds r0, r1, #0
|
||||
ands r0, r5
|
||||
cmp r0, #0
|
||||
bne _0805E9DC
|
||||
adds r0, r1, #0
|
||||
orrs r0, r7
|
||||
strb r0, [r2, #0x10]
|
||||
_0805E9DC:
|
||||
ldr r2, [r2, #4]
|
||||
cmp r2, r3
|
||||
bne _0805E9C6
|
||||
_0805E9E2:
|
||||
adds r3, r4, #0
|
||||
cmp r3, r8
|
||||
blo _0805E9B8
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0805E9F0: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805E9F4
|
||||
sub_0805E9F4: @ 0x0805E9F4
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r5, _0805EA24 @ =gUnk_03003D70
|
||||
_0805E9F8:
|
||||
ldr r2, [r5, #4]
|
||||
adds r6, r5, #0
|
||||
adds r6, #8
|
||||
cmp r2, r5
|
||||
beq _0805EA1A
|
||||
_0805EA02:
|
||||
ldr r4, [r2, #4]
|
||||
ldrb r1, [r2, #0x10]
|
||||
movs r0, #0x10
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0805EA14
|
||||
adds r0, r2, #0
|
||||
bl sub_0805E79C
|
||||
_0805EA14:
|
||||
adds r2, r4, #0
|
||||
cmp r2, r5
|
||||
bne _0805EA02
|
||||
_0805EA1A:
|
||||
adds r5, r6, #0
|
||||
ldr r0, _0805EA28 @ =gUnk_03003DB8
|
||||
cmp r5, r0
|
||||
blo _0805E9F8
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0805EA24: .4byte gUnk_03003D70
|
||||
_0805EA28: .4byte gUnk_03003DB8
|
||||
|
||||
thumb_func_start sub_0805EA2C
|
||||
sub_0805EA2C: @ 0x0805EA2C
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
lsls r1, r1, #3
|
||||
ldr r0, _0805EA5C @ =gUnk_03003D70
|
||||
adds r1, r1, r0
|
||||
str r1, [r2, #4]
|
||||
ldr r0, [r1]
|
||||
str r0, [r2]
|
||||
str r2, [r0, #4]
|
||||
str r2, [r1]
|
||||
ldrb r0, [r2, #8]
|
||||
cmp r0, #9
|
||||
beq _0805EA64
|
||||
adds r3, r2, #0
|
||||
adds r3, #0x29
|
||||
ldrb r1, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #4
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
ldr r1, _0805EA60 @ =gUnk_03003DBC
|
||||
b _0805EA66
|
||||
.align 2, 0
|
||||
_0805EA5C: .4byte gUnk_03003D70
|
||||
_0805EA60: .4byte gUnk_03003DBC
|
||||
_0805EA64:
|
||||
ldr r1, _0805EA74 @ =gUnk_020354B4
|
||||
_0805EA66:
|
||||
ldrb r0, [r1]
|
||||
adds r0, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r2, #0
|
||||
bl sub_0805E374
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805EA74: .4byte gUnk_020354B4
|
||||
|
||||
thumb_func_start sub_0805EA78
|
||||
sub_0805EA78: @ 0x0805EA78
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
adds r4, r1, #0
|
||||
bl sub_0805EA98
|
||||
lsls r4, r4, #3
|
||||
ldr r0, _0805EA94 @ =gUnk_03003D70
|
||||
adds r4, r4, r0
|
||||
str r4, [r5]
|
||||
ldr r0, [r4, #4]
|
||||
str r0, [r5, #4]
|
||||
str r5, [r0]
|
||||
str r5, [r4, #4]
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0805EA94: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805EA98
|
||||
sub_0805EA98: @ 0x0805EA98
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
ldr r1, _0805EAB8 @ =gUnk_03003DD0
|
||||
ldr r0, [r1, #8]
|
||||
cmp r2, r0
|
||||
bne _0805EAA8
|
||||
ldr r0, [r2]
|
||||
str r0, [r1, #8]
|
||||
_0805EAA8:
|
||||
ldr r1, [r2]
|
||||
ldr r0, [r2, #4]
|
||||
str r0, [r1, #4]
|
||||
ldr r1, [r2, #4]
|
||||
ldr r0, [r2]
|
||||
str r0, [r1]
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0805EAB8: .4byte gUnk_03003DD0
|
||||
|
||||
thumb_func_start sub_0805EABC
|
||||
sub_0805EABC: @ 0x0805EABC
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r6, r0, #0
|
||||
ldr r4, _0805EAE8 @ =gUnk_03003D70
|
||||
adds r7, r4, #0
|
||||
adds r7, #0x48
|
||||
_0805EAC6:
|
||||
ldr r3, [r4, #4]
|
||||
cmp r3, r4
|
||||
beq _0805EAF6
|
||||
ldr r5, _0805EAEC @ =0x0000FFFF
|
||||
_0805EACE:
|
||||
cmp r3, r6
|
||||
beq _0805EAF0
|
||||
ldrh r0, [r3, #8]
|
||||
ldrh r2, [r6, #8]
|
||||
adds r1, r5, #0
|
||||
ands r1, r0
|
||||
adds r0, r5, #0
|
||||
ands r0, r2
|
||||
cmp r1, r0
|
||||
bne _0805EAF0
|
||||
movs r0, #1
|
||||
b _0805EAFE
|
||||
.align 2, 0
|
||||
_0805EAE8: .4byte gUnk_03003D70
|
||||
_0805EAEC: .4byte 0x0000FFFF
|
||||
_0805EAF0:
|
||||
ldr r3, [r3, #4]
|
||||
cmp r3, r4
|
||||
bne _0805EACE
|
||||
_0805EAF6:
|
||||
adds r4, #8
|
||||
cmp r4, r7
|
||||
blo _0805EAC6
|
||||
movs r0, #0
|
||||
_0805EAFE:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
thumb_func_start sub_0805EB00
|
||||
sub_0805EB00: @ 0x0805EB00
|
||||
push {r4, lr}
|
||||
adds r3, r0, #0
|
||||
lsls r2, r2, #3
|
||||
ldr r0, _0805EB28 @ =gUnk_03003D70
|
||||
adds r2, r2, r0
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, r2
|
||||
beq _0805EB22
|
||||
_0805EB10:
|
||||
ldrb r4, [r0, #8]
|
||||
cmp r3, r4
|
||||
bne _0805EB1C
|
||||
ldrb r4, [r0, #9]
|
||||
cmp r1, r4
|
||||
beq _0805EB24
|
||||
_0805EB1C:
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, r2
|
||||
bne _0805EB10
|
||||
_0805EB22:
|
||||
movs r0, #0
|
||||
_0805EB24:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0805EB28: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805EB2C
|
||||
sub_0805EB2C: @ 0x0805EB2C
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r5, [sp, #0x10]
|
||||
lsls r2, r2, #3
|
||||
ldr r0, _0805EB60 @ =gUnk_03003D70
|
||||
adds r2, r2, r0
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, r2
|
||||
beq _0805EB5C
|
||||
_0805EB3E:
|
||||
ldrb r6, [r0, #8]
|
||||
cmp r4, r6
|
||||
bne _0805EB56
|
||||
ldrb r6, [r0, #9]
|
||||
cmp r1, r6
|
||||
bne _0805EB56
|
||||
ldrb r6, [r0, #0xa]
|
||||
cmp r3, r6
|
||||
bne _0805EB56
|
||||
ldrb r6, [r0, #0xb]
|
||||
cmp r5, r6
|
||||
beq _0805EB5E
|
||||
_0805EB56:
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, r2
|
||||
bne _0805EB3E
|
||||
_0805EB5C:
|
||||
movs r0, #0
|
||||
_0805EB5E:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0805EB60: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805EB64
|
||||
sub_0805EB64: @ 0x0805EB64
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
lsls r1, r1, #3
|
||||
ldr r0, _0805EB88 @ =gUnk_03003D70
|
||||
adds r3, r1, r0
|
||||
ldr r2, [r4, #4]
|
||||
cmp r2, r3
|
||||
beq _0805EB96
|
||||
ldr r5, _0805EB8C @ =0x0000FFFF
|
||||
ldrh r4, [r4, #8]
|
||||
_0805EB78:
|
||||
ldrh r1, [r2, #8]
|
||||
adds r0, r5, #0
|
||||
ands r0, r1
|
||||
cmp r0, r4
|
||||
bne _0805EB90
|
||||
adds r0, r2, #0
|
||||
b _0805EB98
|
||||
.align 2, 0
|
||||
_0805EB88: .4byte gUnk_03003D70
|
||||
_0805EB8C: .4byte 0x0000FFFF
|
||||
_0805EB90:
|
||||
ldr r2, [r2, #4]
|
||||
cmp r2, r3
|
||||
bne _0805EB78
|
||||
_0805EB96:
|
||||
movs r0, #0
|
||||
_0805EB98:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0805EB9C
|
||||
sub_0805EB9C: @ 0x0805EB9C
|
||||
push {r4, r5, lr}
|
||||
adds r3, r0, #0
|
||||
ldr r2, _0805EBC8 @ =gUnk_03003D70
|
||||
adds r4, r2, #0
|
||||
adds r4, #0x48
|
||||
_0805EBA6:
|
||||
ldr r0, [r2, #4]
|
||||
cmp r0, r2
|
||||
beq _0805EBBE
|
||||
_0805EBAC:
|
||||
ldrb r5, [r0, #8]
|
||||
cmp r3, r5
|
||||
bne _0805EBB8
|
||||
ldrb r5, [r0, #9]
|
||||
cmp r1, r5
|
||||
beq _0805EBC6
|
||||
_0805EBB8:
|
||||
ldr r0, [r0, #4]
|
||||
cmp r0, r2
|
||||
bne _0805EBAC
|
||||
_0805EBBE:
|
||||
adds r2, #8
|
||||
cmp r2, r4
|
||||
blo _0805EBA6
|
||||
movs r0, #0
|
||||
_0805EBC6:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0805EBC8: .4byte gUnk_03003D70
|
||||
|
||||
thumb_func_start sub_0805EBCC
|
||||
sub_0805EBCC: @ 0x0805EBCC
|
||||
push {r4, r5, r6, lr}
|
||||
ldr r5, _0805EBFC @ =gUnk_03003D70
|
||||
_0805EBD0:
|
||||
ldr r1, [r5, #4]
|
||||
adds r6, r5, #0
|
||||
adds r6, #8
|
||||
cmp r1, r5
|
||||
beq _0805EBEE
|
||||
_0805EBDA:
|
||||
ldr r4, [r1, #4]
|
||||
ldrb r0, [r1, #8]
|
||||
cmp r0, #3
|
||||
bne _0805EBE8
|
||||
adds r0, r1, #0
|
||||
bl DeleteEntity
|
||||
_0805EBE8:
|
||||
adds r1, r4, #0
|
||||
cmp r1, r5
|
||||
bne _0805EBDA
|
||||
_0805EBEE:
|
||||
adds r5, r6, #0
|
||||
ldr r0, _0805EC00 @ =gUnk_03003DB8
|
||||
cmp r5, r0
|
||||
blo _0805EBD0
|
||||
bl sub_0805E84C
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0805EBFC: .4byte gUnk_03003D70
|
||||
_0805EC00: .4byte gUnk_03003DB8
|
||||
|
||||
thumb_func_start sub_0805EC04
|
||||
sub_0805EC04: @ 0x0805EC04
|
||||
push {r4, r5, r6, r7, lr}
|
||||
@@ -2934,4 +2252,4 @@ _0805FD1C:
|
||||
bl DeleteThisEntity
|
||||
_0805FD20:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.align 2, 0
|
||||
@@ -1,87 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_08057CB4
|
||||
sub_08057CB4: @ 0x08057CB4
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xc]
|
||||
cmp r0, #0
|
||||
bne _08057CD6
|
||||
movs r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r0, [r4, #0xa]
|
||||
bl GetCurrentRoomProperty
|
||||
str r0, [r4, #0x20]
|
||||
cmp r0, #0
|
||||
bne _08057CD6
|
||||
adds r0, r4, #0
|
||||
bl sub_0805E900
|
||||
b _08057D42
|
||||
_08057CD6:
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08057CE4
|
||||
ldr r0, _08057D44 @ =gLinkState
|
||||
ldrb r0, [r0, #0x12]
|
||||
cmp r0, #0x1e
|
||||
bne _08057D42
|
||||
_08057CE4:
|
||||
ldr r4, [r4, #0x20]
|
||||
ldrh r0, [r4]
|
||||
ldr r1, _08057D48 @ =0x0000FFFF
|
||||
cmp r0, r1
|
||||
beq _08057D42
|
||||
ldr r5, _08057D4C @ =gLinkEntity
|
||||
adds r6, r1, #0
|
||||
_08057CF2:
|
||||
ldrb r2, [r4, #7]
|
||||
movs r0, #3
|
||||
ands r0, r2
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x38
|
||||
ldrb r1, [r1]
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08057D3A
|
||||
ldr r0, _08057D44 @ =gLinkState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08057D18
|
||||
movs r0, #0x10
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _08057D3A
|
||||
_08057D18:
|
||||
ldrh r0, [r4]
|
||||
ldrh r1, [r4, #2]
|
||||
ldrb r2, [r4, #4]
|
||||
ldrb r3, [r4, #5]
|
||||
bl CheckPlayerInRegion
|
||||
cmp r0, #0
|
||||
beq _08057D3A
|
||||
movs r1, #0x36
|
||||
ldrsh r0, [r5, r1]
|
||||
cmp r0, #0
|
||||
bne _08057D3A
|
||||
ldrb r0, [r4, #6]
|
||||
bl GetCurrentRoomProperty
|
||||
bl DoExitTransition
|
||||
_08057D3A:
|
||||
adds r4, #8
|
||||
ldrh r0, [r4]
|
||||
cmp r0, r6
|
||||
bne _08057CF2
|
||||
_08057D42:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08057D44: .4byte gLinkState
|
||||
_08057D48: .4byte 0x0000FFFF
|
||||
_08057D4C: .4byte gLinkEntity
|
||||
@@ -1,115 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xc]
|
||||
cmp r0, #0
|
||||
bne _0806CF5E
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
strb r0, [r5, #0xd]
|
||||
ldrh r1, [r5, #0x2e]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
adds r0, r5, #0
|
||||
movs r1, #2
|
||||
bl sub_0805E3A0
|
||||
adds r0, r5, #0
|
||||
bl sub_0806D0B0
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DD64
|
||||
b _0806CF6C
|
||||
_0806CF5E:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl sub_0807DDAC
|
||||
adds r0, r5, #0
|
||||
bl sub_0807DDE4
|
||||
_0806CF6C:
|
||||
ldrb r0, [r5, #0xd]
|
||||
cmp r0, #2
|
||||
beq _0806CFD4
|
||||
cmp r0, #2
|
||||
bgt _0806D000
|
||||
cmp r0, #0
|
||||
blt _0806D000
|
||||
ldr r0, _0806CFCC @ =gScreenTransition
|
||||
ldr r0, [r0]
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0806D000
|
||||
ldr r0, _0806CFD0 @ =gLinkEntity
|
||||
movs r1, #0x2e
|
||||
ldrsh r2, [r0, r1]
|
||||
ldrh r3, [r5, #0x2e]
|
||||
movs r4, #0x2e
|
||||
ldrsh r1, [r5, r4]
|
||||
adds r4, r0, #0
|
||||
cmp r2, r1
|
||||
bge _0806CFA8
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x68
|
||||
ldrh r0, [r0]
|
||||
subs r0, #0x20
|
||||
cmp r0, r1
|
||||
bge _0806CFA8
|
||||
subs r0, r3, #1
|
||||
strh r0, [r5, #0x2e]
|
||||
_0806CFA8:
|
||||
movs r3, #0x2e
|
||||
ldrsh r1, [r4, r3]
|
||||
ldrh r2, [r5, #0x2e]
|
||||
movs r4, #0x2e
|
||||
ldrsh r0, [r5, r4]
|
||||
cmp r1, r0
|
||||
ble _0806D000
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x68
|
||||
ldrh r0, [r0]
|
||||
adds r0, #0x20
|
||||
movs r3, #0x2e
|
||||
ldrsh r1, [r5, r3]
|
||||
cmp r0, r1
|
||||
ble _0806D000
|
||||
adds r0, r2, #1
|
||||
strh r0, [r5, #0x2e]
|
||||
b _0806D000
|
||||
.align 2, 0
|
||||
_0806CFCC: .4byte gScreenTransition
|
||||
_0806CFD0: .4byte gLinkEntity
|
||||
_0806CFD4:
|
||||
ldrb r0, [r5, #0xe]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xe]
|
||||
lsls r0, r0, #0x18
|
||||
cmp r0, #0
|
||||
bne _0806D000
|
||||
bl Random
|
||||
adds r4, r0, #0
|
||||
ldr r1, _0806D008 @ =gUnk_081140CC
|
||||
movs r0, #3
|
||||
ands r0, r4
|
||||
lsls r0, r0, #1
|
||||
adds r0, r0, r1
|
||||
ldrh r0, [r0]
|
||||
bl PlaySFX
|
||||
movs r0, #7
|
||||
ands r4, r0
|
||||
lsls r4, r4, #4
|
||||
adds r4, #0x80
|
||||
strb r4, [r5, #0xe]
|
||||
_0806D000:
|
||||
adds r0, r5, #0
|
||||
bl sub_0806D02C
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806D008: .4byte gUnk_081140CC
|
||||
.syntax divided
|
||||
@@ -1,45 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
movs r0, #0xa3
|
||||
movs r1, #1
|
||||
movs r2, #0
|
||||
bl CreateObject
|
||||
adds r4, r0, #0
|
||||
cmp r4, #0
|
||||
beq _0809F7B6
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
bl PositionEntityOnTop
|
||||
bl Random
|
||||
ldrh r2, [r4, #0x2e]
|
||||
subs r2, #0x10
|
||||
movs r3, #0x1f
|
||||
adds r1, r0, #0
|
||||
ands r1, r3
|
||||
adds r2, r2, r1
|
||||
strh r2, [r4, #0x2e]
|
||||
ldrh r2, [r4, #0x32]
|
||||
subs r2, #0x10
|
||||
asrs r1, r0, #8
|
||||
ands r1, r3
|
||||
adds r2, r2, r1
|
||||
strh r2, [r4, #0x32]
|
||||
asrs r0, r0, #0x10
|
||||
movs r1, #3
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x1e]
|
||||
movs r0, #0xff
|
||||
strb r0, [r4, #0x15]
|
||||
_0809F7B6:
|
||||
adds r0, r4, #0
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,110 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x39
|
||||
movs r1, #0
|
||||
ldrsb r1, [r2, r1]
|
||||
cmp r1, #2
|
||||
bne _0805FE80
|
||||
movs r0, #0
|
||||
strb r1, [r5, #0xc]
|
||||
strb r0, [r2]
|
||||
ldr r1, _0805FE7C @ =gLinkEntity
|
||||
adds r0, r5, #0
|
||||
bl GetFacingDirection
|
||||
bl sub_0806F5A4
|
||||
adds r1, r0, #0
|
||||
adds r0, r5, #0
|
||||
bl InitAnimationForceUpdate
|
||||
adds r0, r5, #0
|
||||
bl sub_0806F118
|
||||
b _0805FF14
|
||||
.align 2, 0
|
||||
_0805FE7C: .4byte gLinkEntity
|
||||
_0805FE80:
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x84
|
||||
ldr r1, [r4]
|
||||
adds r0, r5, #0
|
||||
bl ExecuteScriptCommandSet
|
||||
ldr r1, [r4]
|
||||
adds r0, r5, #0
|
||||
bl sub_0805FF2C
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x80
|
||||
ldrh r3, [r0]
|
||||
adds r7, r0, #0
|
||||
adds r6, r5, #0
|
||||
adds r6, #0x82
|
||||
cmp r3, #7
|
||||
bhi _0805FEC6
|
||||
ldrh r1, [r6]
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0805FEBA
|
||||
movs r1, #0xfc
|
||||
ands r1, r3
|
||||
ldrb r0, [r5, #0xf]
|
||||
lsrs r0, r0, #1
|
||||
adds r3, r1, r0
|
||||
b _0805FEC6
|
||||
_0805FEBA:
|
||||
movs r0, #0xfc
|
||||
ands r0, r3
|
||||
ldrb r2, [r5, #0x14]
|
||||
lsrs r1, r2, #1
|
||||
adds r3, r0, r1
|
||||
strb r2, [r5, #0xf]
|
||||
_0805FEC6:
|
||||
adds r4, r5, #0
|
||||
adds r4, #0x58
|
||||
ldrb r0, [r4]
|
||||
cmp r3, r0
|
||||
beq _0805FED8
|
||||
adds r0, r5, #0
|
||||
adds r1, r3, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_0805FED8:
|
||||
adds r0, r5, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0805FF02
|
||||
ldrb r0, [r4]
|
||||
cmp r0, #8
|
||||
beq _0805FEFE
|
||||
cmp r0, #8
|
||||
blt _0805FF02
|
||||
cmp r0, #0xc
|
||||
bgt _0805FF02
|
||||
cmp r0, #0xa
|
||||
blt _0805FF02
|
||||
_0805FEFE:
|
||||
movs r0, #0
|
||||
strh r0, [r7]
|
||||
_0805FF02:
|
||||
ldrh r1, [r6]
|
||||
mvns r0, r1
|
||||
adds r0, #1
|
||||
ands r1, r0
|
||||
cmp r1, #2
|
||||
bne _0805FF14
|
||||
adds r0, r5, #0
|
||||
bl sub_0806ED78
|
||||
_0805FF14:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,69 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, _08063DA0 @ =gUnk_03003DBC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, #0x46
|
||||
bhi _08063DC6
|
||||
ldrb r0, [r4, #9]
|
||||
movs r1, #0x15
|
||||
eors r0, r1
|
||||
rsbs r1, r0, #0
|
||||
orrs r1, r0
|
||||
lsrs r1, r1, #0x1f
|
||||
lsls r1, r1, #4
|
||||
ldr r0, _08063DA4 @ =gUnk_0810F524
|
||||
adds r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _08063DC6
|
||||
adds r0, r4, #0
|
||||
movs r1, #4
|
||||
bl InitializeAnimation
|
||||
ldr r0, _08063DA8 @ =gUnk_0810F6BC
|
||||
ldrb r1, [r4, #0xa]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r0
|
||||
ldr r1, [r1]
|
||||
adds r0, r4, #0
|
||||
movs r2, #0
|
||||
bl sub_0806EE04
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
blt _08063DB6
|
||||
cmp r0, #3
|
||||
bgt _08063DAC
|
||||
movs r0, #0xc
|
||||
bl sub_080A7EE0
|
||||
str r4, [r0, #0x50]
|
||||
movs r1, #0x3c
|
||||
strb r1, [r0, #0xf]
|
||||
b _08063DB6
|
||||
.align 2, 0
|
||||
_08063DA0: .4byte gUnk_03003DBC
|
||||
_08063DA4: .4byte gUnk_0810F524
|
||||
_08063DA8: .4byte gUnk_0810F6BC
|
||||
_08063DAC:
|
||||
cmp r0, #5
|
||||
bgt _08063DB6
|
||||
adds r0, r4, #0
|
||||
bl sub_08078778
|
||||
_08063DB6:
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
movs r1, #0
|
||||
strb r0, [r4, #0xc]
|
||||
strb r1, [r4, #0xa]
|
||||
adds r0, r4, #0
|
||||
bl sub_08063DC8
|
||||
_08063DC6:
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,73 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #9]
|
||||
movs r1, #0x15
|
||||
eors r0, r1
|
||||
rsbs r1, r0, #0
|
||||
orrs r1, r0
|
||||
lsrs r1, r1, #0x1f
|
||||
lsls r1, r1, #4
|
||||
ldr r0, _08063EC8 @ =gUnk_0810F524
|
||||
adds r1, r1, r0
|
||||
adds r0, r4, #0
|
||||
bl LoadExtraSpriteData
|
||||
cmp r0, #0
|
||||
beq _08063F1E
|
||||
ldrb r0, [r4, #0xc]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #0xc]
|
||||
ldrb r1, [r4, #0xe]
|
||||
cmp r1, #0
|
||||
beq _08063ECC
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x70
|
||||
movs r0, #8
|
||||
strb r0, [r1]
|
||||
b _08063ED2
|
||||
.align 2, 0
|
||||
_08063EC8: .4byte gUnk_0810F524
|
||||
_08063ECC:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x70
|
||||
strb r1, [r0]
|
||||
_08063ED2:
|
||||
movs r0, #0
|
||||
strb r0, [r4, #0xe]
|
||||
adds r0, r4, #0
|
||||
bl sub_0805ACC0
|
||||
adds r2, r0, #0
|
||||
cmp r2, #0
|
||||
bne _08063EF2
|
||||
ldrh r0, [r4, #0x2e]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x68
|
||||
strh r0, [r1]
|
||||
ldrh r0, [r4, #0x32]
|
||||
adds r1, #2
|
||||
strh r0, [r1]
|
||||
b _08063EFE
|
||||
_08063EF2:
|
||||
lsrs r1, r2, #0x10
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
adds r0, #2
|
||||
strh r2, [r0]
|
||||
_08063EFE:
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x71
|
||||
movs r0, #0
|
||||
strb r0, [r1]
|
||||
subs r1, #0x39
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
adds r0, r4, #0
|
||||
bl UpdateSpriteForCollisionLayer
|
||||
adds r0, r4, #0
|
||||
bl sub_0807DD64
|
||||
adds r0, r4, #0
|
||||
bl sub_08063F20
|
||||
_08063F1E:
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -1,50 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r0, [r4, #0x54]
|
||||
cmp r0, #0
|
||||
beq _0803258A
|
||||
adds r0, #0x41
|
||||
ldrb r1, [r0]
|
||||
movs r0, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080325A4
|
||||
_0803258A:
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x76
|
||||
ldrh r0, [r5]
|
||||
subs r0, #1
|
||||
strh r0, [r5]
|
||||
lsls r0, r0, #0x10
|
||||
cmp r0, #0
|
||||
beq _080325A4
|
||||
adds r0, r4, #0
|
||||
bl sub_080AEFE0
|
||||
cmp r0, #0
|
||||
bne _080325AC
|
||||
_080325A4:
|
||||
adds r0, r4, #0
|
||||
bl sub_0803275C
|
||||
b _080325C2
|
||||
_080325AC:
|
||||
adds r0, r4, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
ldrh r1, [r5]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080325C2
|
||||
adds r0, r4, #0
|
||||
bl sub_08032794
|
||||
_080325C2:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,72 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r1, #1
|
||||
bl sub_08049FDC
|
||||
cmp r0, #0
|
||||
bne _0801FEEA
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x74
|
||||
movs r0, #1
|
||||
strh r0, [r1]
|
||||
_0801FEEA:
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x5a
|
||||
ldrb r0, [r0]
|
||||
movs r2, #0xf
|
||||
adds r1, r2, #0
|
||||
ands r1, r0
|
||||
lsls r1, r1, #5
|
||||
strh r1, [r4, #0x24]
|
||||
ldrb r0, [r4, #0xa]
|
||||
cmp r0, #0
|
||||
bne _0801FF28
|
||||
ldrb r1, [r4, #0xf]
|
||||
adds r0, r1, #1
|
||||
strb r0, [r4, #0xf]
|
||||
adds r0, r2, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0801FF4E
|
||||
ldr r0, _0801FF24 @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0800132C
|
||||
adds r1, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl sub_08004596
|
||||
b _0801FF4E
|
||||
.align 2, 0
|
||||
_0801FF24: .4byte gUnk_020000B0
|
||||
_0801FF28:
|
||||
adds r0, r1, #0
|
||||
adds r0, #0x40
|
||||
strh r0, [r4, #0x24]
|
||||
ldrb r1, [r4, #0xf]
|
||||
adds r0, r1, #1
|
||||
strb r0, [r4, #0xf]
|
||||
movs r0, #7
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0801FF4E
|
||||
ldr r0, _0801FF58 @ =gUnk_020000B0
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_0800132C
|
||||
adds r1, r0, #0
|
||||
adds r0, r4, #0
|
||||
bl sub_08004596
|
||||
_0801FF4E:
|
||||
adds r0, r4, #0
|
||||
bl sub_080AEF88
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0801FF58: .4byte gUnk_020000B0
|
||||
.syntax divided
|
||||
@@ -1,287 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r5, r0, #0
|
||||
ldr r1, _080919D4 @ =gRoomControls
|
||||
movs r0, #0
|
||||
mov r8, r0
|
||||
movs r0, #7
|
||||
strb r0, [r1, #0xe]
|
||||
ldr r0, _080919D8 @ =gLinkState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #5
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _080919DC
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
b _08091C04
|
||||
.align 2, 0
|
||||
_080919D4: .4byte gRoomControls
|
||||
_080919D8: .4byte gLinkState
|
||||
_080919DC:
|
||||
ldr r4, _08091A14 @ =gLinkEntity
|
||||
adds r6, r4, #0
|
||||
adds r6, #0x5a
|
||||
ldrb r1, [r6]
|
||||
movs r7, #0xf
|
||||
adds r0, r7, #0
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _08091A22
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0x7f
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
bl CopyPosition
|
||||
ldrb r1, [r6]
|
||||
movs r0, #0xf0
|
||||
ands r0, r1
|
||||
cmp r0, #0x10
|
||||
bne _08091A18
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x63
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
b _08091C04
|
||||
.align 2, 0
|
||||
_08091A14: .4byte gLinkEntity
|
||||
_08091A18:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x63
|
||||
mov r1, r8
|
||||
strb r1, [r0]
|
||||
b _08091C04
|
||||
_08091A22:
|
||||
ldrb r0, [r5, #0x10]
|
||||
movs r1, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
mov r0, r8
|
||||
strh r0, [r4, #0x24]
|
||||
adds r0, r5, #0
|
||||
bl sub_0806F69C
|
||||
adds r0, r5, #0
|
||||
adds r1, r4, #0
|
||||
bl CopyPosition
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x29
|
||||
ldrb r1, [r0]
|
||||
lsls r1, r1, #0x1d
|
||||
lsrs r1, r1, #0x1d
|
||||
subs r1, #1
|
||||
adds r3, r4, #0
|
||||
adds r3, #0x29
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
ldrb r2, [r3]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r2
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
adds r0, r5, #0
|
||||
bl sub_08091DDC
|
||||
cmp r0, #0
|
||||
beq _08091A68
|
||||
b _08091C04
|
||||
_08091A68:
|
||||
ldr r0, _08091AD8 @ =gScreenTransition
|
||||
ldr r0, [r0]
|
||||
ands r0, r7
|
||||
cmp r0, #0
|
||||
bne _08091A7A
|
||||
movs r0, #0x9c
|
||||
lsls r0, r0, #1
|
||||
bl PlaySFX
|
||||
_08091A7A:
|
||||
ldrb r0, [r5, #0xf]
|
||||
subs r0, #1
|
||||
strb r0, [r5, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r0, #0xff
|
||||
bne _08091A92
|
||||
movs r0, #0x7b
|
||||
bl PlaySFX
|
||||
movs r0, #0x3c
|
||||
strb r0, [r5, #0xf]
|
||||
_08091A92:
|
||||
ldr r2, _08091ADC @ =gUnk_081223C8
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r0, r0, #1
|
||||
adds r1, r0, r2
|
||||
ldrb r1, [r1]
|
||||
lsls r1, r1, #0x18
|
||||
asrs r1, r1, #0x18
|
||||
adds r0, #1
|
||||
adds r0, r0, r2
|
||||
movs r2, #0
|
||||
ldrsb r2, [r0, r2]
|
||||
adds r0, r5, #0
|
||||
bl sub_080002B4
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08091AE0 @ =gUnk_081223D8
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl sub_08007DD6
|
||||
cmp r0, #0
|
||||
bne _08091AE4
|
||||
ldrb r0, [r5, #0x15]
|
||||
movs r1, #0x10
|
||||
eors r0, r1
|
||||
strb r0, [r5, #0x15]
|
||||
ldrb r0, [r5, #0x14]
|
||||
movs r1, #2
|
||||
eors r0, r1
|
||||
strb r0, [r5, #0x14]
|
||||
b _08091BD8
|
||||
.align 2, 0
|
||||
_08091AD8: .4byte gScreenTransition
|
||||
_08091ADC: .4byte gUnk_081223C8
|
||||
_08091AE0: .4byte gUnk_081223D8
|
||||
_08091AE4:
|
||||
adds r0, r4, #0
|
||||
subs r0, #0x64
|
||||
cmp r0, #0xb
|
||||
bhi _08091BD8
|
||||
lsls r0, r0, #2
|
||||
ldr r1, _08091AF8 @ =_08091AFC
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_08091AF8: .4byte _08091AFC
|
||||
_08091AFC: @ jump table
|
||||
.4byte _08091B2C @ case 0
|
||||
.4byte _08091BD8 @ case 1
|
||||
.4byte _08091BD8 @ case 2
|
||||
.4byte _08091BB8 @ case 3
|
||||
.4byte _08091BB8 @ case 4
|
||||
.4byte _08091BB8 @ case 5
|
||||
.4byte _08091BB8 @ case 6
|
||||
.4byte _08091BD8 @ case 7
|
||||
.4byte _08091BB8 @ case 8
|
||||
.4byte _08091BB8 @ case 9
|
||||
.4byte _08091BB8 @ case 10
|
||||
.4byte _08091BB8 @ case 11
|
||||
_08091B2C:
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0xdf
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x3f
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
subs r1, #3
|
||||
movs r0, #0x47
|
||||
strb r0, [r1]
|
||||
adds r1, #4
|
||||
movs r0, #0x44
|
||||
strb r0, [r1]
|
||||
subs r1, #5
|
||||
movs r4, #0x80
|
||||
movs r0, #0x80
|
||||
strb r0, [r1]
|
||||
movs r0, #6
|
||||
strb r0, [r5, #0xc]
|
||||
adds r0, r5, #0
|
||||
bl sub_08017744
|
||||
ldr r2, _08091BAC @ =gLinkState
|
||||
movs r0, #0x41
|
||||
strb r0, [r2, #2]
|
||||
ldr r0, [r2, #0x30]
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #5
|
||||
eors r0, r1
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #0x13
|
||||
orrs r0, r1
|
||||
str r0, [r2, #0x30]
|
||||
ldr r1, _08091BB0 @ =gLinkEntity
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0xa
|
||||
str r0, [r1, #0x20]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #2
|
||||
strh r0, [r1, #0x24]
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r0, r0, #1
|
||||
strb r0, [r1, #0x14]
|
||||
ldrb r0, [r5, #0x15]
|
||||
strb r0, [r1, #0x15]
|
||||
ldrb r0, [r1, #0x10]
|
||||
orrs r4, r0
|
||||
strb r4, [r1, #0x10]
|
||||
adds r0, r5, #0
|
||||
bl sub_08004168
|
||||
ldrb r1, [r5, #0x14]
|
||||
adds r1, #0xc
|
||||
adds r0, r5, #0
|
||||
bl InitAnimationForceUpdate
|
||||
movs r0, #0x78
|
||||
bl PlaySFX
|
||||
ldr r0, _08091BB4 @ =0x00000139
|
||||
bl PlaySFX
|
||||
b _08091C04
|
||||
.align 2, 0
|
||||
_08091BAC: .4byte gLinkState
|
||||
_08091BB0: .4byte gLinkEntity
|
||||
_08091BB4: .4byte 0x00000139
|
||||
_08091BB8:
|
||||
adds r0, r5, #0
|
||||
bl sub_080002B8
|
||||
cmp r4, r0
|
||||
bne _08091BD8
|
||||
adds r0, r5, #0
|
||||
bl sub_08091C0C
|
||||
ldr r1, _08091BD4 @ =gLinkEntity
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r0, r0, #1
|
||||
strb r0, [r1, #0x14]
|
||||
b _08091C04
|
||||
.align 2, 0
|
||||
_08091BD4: .4byte gLinkEntity
|
||||
_08091BD8:
|
||||
ldr r2, _08091BF8 @ =gLinkEntity
|
||||
ldrb r0, [r5, #0x14]
|
||||
lsls r1, r0, #1
|
||||
strb r1, [r2, #0x14]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x58
|
||||
ldrb r1, [r1]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x18
|
||||
cmp r1, r0
|
||||
bne _08091BFC
|
||||
adds r0, r5, #0
|
||||
bl UpdateAnimationSingleFrame
|
||||
b _08091C04
|
||||
.align 2, 0
|
||||
_08091BF8: .4byte gLinkEntity
|
||||
_08091BFC:
|
||||
ldrb r1, [r5, #0x14]
|
||||
adds r0, r5, #0
|
||||
bl InitAnimationForceUpdate
|
||||
_08091C04:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
@@ -1,51 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
push {r4, r5, lr}
|
||||
ldr r3, _0806074C @ =gUnk_0810A918
|
||||
adds r2, r0, #0
|
||||
adds r2, #0x68
|
||||
ldrb r2, [r2]
|
||||
lsls r2, r2, #0x18
|
||||
asrs r2, r2, #0x18
|
||||
lsls r2, r2, #2
|
||||
adds r2, r2, r3
|
||||
ldr r2, [r2]
|
||||
adds r3, r0, #0
|
||||
adds r3, #0x69
|
||||
ldrb r3, [r3]
|
||||
lsls r3, r3, #0x18
|
||||
asrs r3, r3, #0x18
|
||||
adds r2, r2, r3
|
||||
movs r3, #0
|
||||
ldrsb r3, [r2, r3]
|
||||
lsls r3, r3, #2
|
||||
ldr r2, _08060750 @ =gUnk_0810A66C
|
||||
adds r3, r3, r2
|
||||
ldr r4, _08060754 @ =gRoomControls
|
||||
movs r5, #0
|
||||
ldrsh r2, [r3, r5]
|
||||
ldrh r5, [r4, #6]
|
||||
adds r2, r2, r5
|
||||
movs r5, #2
|
||||
ldrsh r3, [r3, r5]
|
||||
ldrh r4, [r4, #8]
|
||||
adds r3, r3, r4
|
||||
bl sub_0807DEDC
|
||||
ldr r2, _08060758 @ =gUnk_02033280
|
||||
ldrb r1, [r2, #7]
|
||||
movs r0, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r2, #7]
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0806074C: .4byte gUnk_0810A918
|
||||
_08060750: .4byte gUnk_0810A66C
|
||||
_08060754: .4byte gRoomControls
|
||||
_08060758: .4byte gUnk_02033280
|
||||
.syntax divided
|
||||
@@ -1,36 +0,0 @@
|
||||
.syntax unified
|
||||
push {r4, lr}
|
||||
ldr r2, _080854E0 @ =gUnk_081205E0
|
||||
ldrb r1, [r0, #0x14]
|
||||
lsrs r1, r1, #1
|
||||
lsls r1, r1, #1
|
||||
adds r2, r1, r2
|
||||
ldrh r3, [r2]
|
||||
adds r4, r3, #0
|
||||
ldr r2, _080854E4 @ =gUnk_080B4488
|
||||
adds r1, r1, r2
|
||||
ldr r2, [r0, #0x70]
|
||||
movs r0, #0
|
||||
ldrsb r0, [r1, r0]
|
||||
lsls r1, r0, #1
|
||||
subs r0, r2, r1
|
||||
ldrh r0, [r0]
|
||||
cmp r3, r0
|
||||
bne _080854E8
|
||||
ldrh r0, [r2]
|
||||
cmp r3, r0
|
||||
bne _080854E8
|
||||
adds r0, r1, r2
|
||||
ldrh r0, [r0]
|
||||
cmp r4, r0
|
||||
bne _080854E8
|
||||
movs r0, #0
|
||||
b _080854EA
|
||||
.align 2, 0
|
||||
_080854E0: .4byte gUnk_081205E0
|
||||
_080854E4: .4byte gUnk_080B4488
|
||||
_080854E8:
|
||||
movs r0, #1
|
||||
_080854EA:
|
||||
pop {r4, pc}
|
||||
.syntax divided
|
||||
@@ -6,538 +6,6 @@
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Pot
|
||||
Pot: @ 0x0808220C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _08082228 @ =gUnk_0811F090
|
||||
ldrb r0, [r4, #0xc]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
adds r4, #0x41
|
||||
movs r0, #0
|
||||
strb r0, [r4]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08082228: .4byte gUnk_0811F090
|
||||
|
||||
thumb_func_start sub_0808222C
|
||||
sub_0808222C: @ 0x0808222C
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
adds r4, r0, #0
|
||||
ldrb r0, [r4, #0xb]
|
||||
cmp r0, #1
|
||||
bne _0808224C
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x86
|
||||
ldrh r0, [r0]
|
||||
bl CheckFlags
|
||||
cmp r0, #0
|
||||
beq _0808224C
|
||||
bl DeleteThisEntity
|
||||
_0808224C:
|
||||
movs r2, #1
|
||||
strb r2, [r4, #0xc]
|
||||
ldr r0, _08082308 @ =gUnk_080FD338
|
||||
str r0, [r4, #0x48]
|
||||
movs r1, #0
|
||||
movs r0, #0x80
|
||||
strh r0, [r4, #0x24]
|
||||
ldrh r0, [r4, #0x32]
|
||||
adds r0, #3
|
||||
strh r0, [r4, #0x32]
|
||||
strb r1, [r4, #0x16]
|
||||
ldrb r1, [r4, #0x10]
|
||||
movs r0, #0x80
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x10]
|
||||
adds r0, r4, #0
|
||||
adds r0, #0x45
|
||||
strb r2, [r0]
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x3c
|
||||
movs r0, #7
|
||||
strb r0, [r1]
|
||||
adds r1, #3
|
||||
movs r0, #0x6e
|
||||
strb r0, [r1]
|
||||
subs r1, #4
|
||||
movs r0, #0x84
|
||||
strb r0, [r1]
|
||||
movs r0, #0x12
|
||||
strb r0, [r4, #0x1c]
|
||||
adds r5, r4, #0
|
||||
adds r5, #0x38
|
||||
ldrb r0, [r5]
|
||||
cmp r0, #0
|
||||
bne _08082298
|
||||
adds r0, r4, #0
|
||||
bl sub_08016A30
|
||||
_08082298:
|
||||
movs r1, #0x2e
|
||||
ldrsh r0, [r4, r1]
|
||||
ldr r7, _0808230C @ =gRoomControls
|
||||
ldrh r1, [r7, #6]
|
||||
subs r0, r0, r1
|
||||
asrs r0, r0, #4
|
||||
movs r6, #0x3f
|
||||
ands r0, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r1, [r4, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
lsls r1, r1, #6
|
||||
orrs r0, r1
|
||||
ldrb r1, [r5]
|
||||
bl sub_080001DA
|
||||
adds r1, r4, #0
|
||||
adds r1, #0x70
|
||||
strh r0, [r1]
|
||||
lsls r0, r0, #0x10
|
||||
lsrs r0, r0, #0x10
|
||||
movs r1, #0x80
|
||||
lsls r1, r1, #7
|
||||
mov r8, r1
|
||||
cmp r0, r8
|
||||
bne _080822D6
|
||||
bl DeleteThisEntity
|
||||
_080822D6:
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r4, r2]
|
||||
ldrh r0, [r7, #6]
|
||||
subs r1, r1, r0
|
||||
asrs r1, r1, #4
|
||||
ands r1, r6
|
||||
movs r2, #0x32
|
||||
ldrsh r0, [r4, r2]
|
||||
ldrh r2, [r7, #8]
|
||||
subs r0, r0, r2
|
||||
asrs r0, r0, #4
|
||||
ands r0, r6
|
||||
lsls r0, r0, #6
|
||||
orrs r1, r0
|
||||
ldrb r2, [r5]
|
||||
mov r0, r8
|
||||
bl SetTile
|
||||
adds r0, r4, #0
|
||||
movs r1, #5
|
||||
bl InitializeAnimation
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_08082308: .4byte gUnk_080FD338
|
||||
_0808230C: .4byte gRoomControls
|
||||
|
||||
thumb_func_start sub_08082310
|
||||
sub_08082310: @ 0x08082310
|
||||
push {r4, r5, r6, r7, lr}
|
||||
adds r5, r0, #0
|
||||
adds r0, #0x41
|
||||
ldrb r0, [r0]
|
||||
movs r6, #0x7f
|
||||
adds r1, r6, #0
|
||||
ands r1, r0
|
||||
cmp r1, #0x13
|
||||
beq _08082342
|
||||
cmp r1, #0x1d
|
||||
beq _0808234C
|
||||
adds r0, r5, #0
|
||||
bl GetTileTypeByEntity
|
||||
adds r4, r0, #0
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #7
|
||||
cmp r4, r0
|
||||
bne _08082338
|
||||
b _080824F0
|
||||
_08082338:
|
||||
adds r0, #1
|
||||
cmp r4, r0
|
||||
bhs _08082340
|
||||
b _08082484
|
||||
_08082340:
|
||||
b _080823C4
|
||||
_08082342:
|
||||
movs r1, #0
|
||||
movs r0, #3
|
||||
strb r0, [r5, #0xc]
|
||||
strb r1, [r5, #0xd]
|
||||
b _080824F6
|
||||
_0808234C:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldr r3, _080823C0 @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r7, #0x32
|
||||
ldrsh r2, [r5, r7]
|
||||
ldrh r3, [r3, #8]
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
movs r1, #0
|
||||
movs r0, #5
|
||||
strb r0, [r5, #0xc]
|
||||
movs r0, #0xa8
|
||||
lsls r0, r0, #0xa
|
||||
str r0, [r5, #0x20]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x63
|
||||
strb r1, [r0]
|
||||
ldrb r1, [r5, #0x18]
|
||||
movs r0, #0x31
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x10
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x18]
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x39
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x18
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r1, [r5, #0x10]
|
||||
adds r0, r6, #0
|
||||
ands r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
adds r0, r5, #0
|
||||
bl sub_08082824
|
||||
b _080824F6
|
||||
.align 2, 0
|
||||
_080823C0: .4byte gRoomControls
|
||||
_080823C4:
|
||||
ldr r0, _080823D4 @ =0x00004004
|
||||
cmp r4, r0
|
||||
bls _080823D8
|
||||
adds r0, #0x63
|
||||
cmp r4, r0
|
||||
beq _08082448
|
||||
b _08082484
|
||||
.align 2, 0
|
||||
_080823D4: .4byte 0x00004004
|
||||
_080823D8:
|
||||
ldr r1, _08082438 @ =0xFFFFBFFF
|
||||
adds r0, r4, r1
|
||||
lsls r0, r0, #3
|
||||
strb r0, [r5, #0x15]
|
||||
movs r0, #0x20
|
||||
strb r0, [r5, #0xe]
|
||||
movs r0, #4
|
||||
strb r0, [r5, #0xc]
|
||||
ldr r0, _0808243C @ =gLinkState
|
||||
ldr r0, [r0, #0x30]
|
||||
movs r1, #0x80
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _08082400
|
||||
ldrh r0, [r5, #0x24]
|
||||
lsls r0, r0, #0x10
|
||||
asrs r0, r0, #0x11
|
||||
strh r0, [r5, #0x24]
|
||||
movs r0, #0x40
|
||||
strb r0, [r5, #0xe]
|
||||
_08082400:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldr r3, _08082440 @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r6, #0x32
|
||||
ldrsh r2, [r5, r6]
|
||||
ldrh r3, [r3, #8]
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
ldr r0, _08082444 @ =0x0000010F
|
||||
bl sub_08004488
|
||||
b _080824F6
|
||||
.align 2, 0
|
||||
_08082438: .4byte 0xFFFFBFFF
|
||||
_0808243C: .4byte gLinkState
|
||||
_08082440: .4byte gRoomControls
|
||||
_08082444: .4byte 0x0000010F
|
||||
_08082448:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
movs r7, #0x2e
|
||||
ldrsh r1, [r5, r7]
|
||||
ldr r3, _08082480 @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r6, #0x32
|
||||
ldrsh r2, [r5, r6]
|
||||
ldrh r3, [r3, #8]
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
bl DeleteThisEntity
|
||||
b _080824F6
|
||||
.align 2, 0
|
||||
_08082480: .4byte gRoomControls
|
||||
_08082484:
|
||||
adds r0, r5, #0
|
||||
bl sub_080002B8
|
||||
cmp r0, #0xd
|
||||
bne _0808249A
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
b _080824D8
|
||||
_0808249A:
|
||||
ldr r0, _080824E4 @ =0x00004005
|
||||
cmp r4, r0
|
||||
bne _080824D8
|
||||
ldr r0, _080824E8 @ =gLinkState
|
||||
adds r0, #0xab
|
||||
movs r1, #4
|
||||
strb r1, [r0]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x70
|
||||
ldrh r0, [r0]
|
||||
movs r7, #0x2e
|
||||
ldrsh r1, [r5, r7]
|
||||
ldr r3, _080824EC @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r6, #0x32
|
||||
ldrsh r2, [r5, r6]
|
||||
ldrh r3, [r3, #8]
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
_080824D8:
|
||||
adds r0, r5, #0
|
||||
movs r1, #0
|
||||
bl sub_08082850
|
||||
b _080824F6
|
||||
.align 2, 0
|
||||
_080824E4: .4byte 0x00004005
|
||||
_080824E8: .4byte gLinkState
|
||||
_080824EC: .4byte gRoomControls
|
||||
_080824F0:
|
||||
adds r0, r5, #0
|
||||
bl sub_08078930
|
||||
_080824F6:
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
|
||||
thumb_func_start sub_080824F8
|
||||
sub_080824F8: @ 0x080824F8
|
||||
push {lr}
|
||||
ldr r2, _0808250C @ =gUnk_0811F0A8
|
||||
ldrb r1, [r0, #0xd]
|
||||
lsls r1, r1, #2
|
||||
adds r1, r1, r2
|
||||
ldr r1, [r1]
|
||||
bl _call_via_r1
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_0808250C: .4byte gUnk_0811F0A8
|
||||
|
||||
thumb_func_start sub_08082510
|
||||
sub_08082510: @ 0x08082510
|
||||
push {r4, r5, r6, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r1, [r5, #0x10]
|
||||
movs r0, #0x80
|
||||
movs r2, #0
|
||||
orrs r0, r1
|
||||
strb r0, [r5, #0x10]
|
||||
ldr r0, _08082578 @ =gUnk_080FD340
|
||||
str r0, [r5, #0x48]
|
||||
adds r1, r5, #0
|
||||
adds r1, #0x3c
|
||||
movs r0, #7
|
||||
strb r0, [r1]
|
||||
adds r1, #3
|
||||
movs r0, #1
|
||||
strb r0, [r1]
|
||||
ldr r0, _0808257C @ =gLinkEntity
|
||||
adds r0, #0x3b
|
||||
ldrb r0, [r0]
|
||||
subs r1, #4
|
||||
strb r0, [r1]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x63
|
||||
strb r2, [r0]
|
||||
adds r0, #0xd
|
||||
ldrh r0, [r0]
|
||||
movs r2, #0x2e
|
||||
ldrsh r1, [r5, r2]
|
||||
ldr r3, _08082580 @ =gRoomControls
|
||||
ldrh r2, [r3, #6]
|
||||
subs r1, r1, r2
|
||||
asrs r1, r1, #4
|
||||
movs r4, #0x3f
|
||||
ands r1, r4
|
||||
movs r6, #0x32
|
||||
ldrsh r2, [r5, r6]
|
||||
ldrh r3, [r3, #8]
|
||||
subs r2, r2, r3
|
||||
asrs r2, r2, #4
|
||||
ands r2, r4
|
||||
lsls r2, r2, #6
|
||||
orrs r1, r2
|
||||
adds r2, r5, #0
|
||||
adds r2, #0x38
|
||||
ldrb r2, [r2]
|
||||
bl SetTile
|
||||
ldrb r0, [r5, #0xd]
|
||||
adds r0, #1
|
||||
strb r0, [r5, #0xd]
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08082578: .4byte gUnk_080FD340
|
||||
_0808257C: .4byte gLinkEntity
|
||||
_08082580: .4byte gRoomControls
|
||||
|
||||
thumb_func_start nullsub_511
|
||||
nullsub_511: @ 0x08082584
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08082588
|
||||
sub_08082588: @ 0x08082588
|
||||
adds r0, #0x29
|
||||
ldrb r2, [r0]
|
||||
movs r1, #0x39
|
||||
rsbs r1, r1, #0
|
||||
ands r1, r2
|
||||
movs r2, #0x18
|
||||
orrs r1, r2
|
||||
strb r1, [r0]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0808259C
|
||||
sub_0808259C: @ 0x0808259C
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
bl sub_080043E8
|
||||
cmp r0, #2
|
||||
beq _080825B8
|
||||
cmp r0, #2
|
||||
bhi _080825B2
|
||||
cmp r0, #1
|
||||
beq _080825BE
|
||||
b _080825D0
|
||||
_080825B2:
|
||||
cmp r0, #3
|
||||
beq _080825C4
|
||||
b _080825D0
|
||||
_080825B8:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xb
|
||||
b _080825C8
|
||||
_080825BE:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0
|
||||
b _080825C8
|
||||
_080825C4:
|
||||
adds r0, r4, #0
|
||||
movs r1, #0xc
|
||||
_080825C8:
|
||||
movs r2, #0
|
||||
bl CreateFx
|
||||
b _080825E0
|
||||
_080825D0:
|
||||
ldr r1, _080825DC @ =gLinkEntity
|
||||
adds r0, r4, #0
|
||||
bl sub_08082850
|
||||
b _080825E4
|
||||
.align 2, 0
|
||||
_080825DC: .4byte gLinkEntity
|
||||
_080825E0:
|
||||
bl DeleteThisEntity
|
||||
_080825E4:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_080825E8
|
||||
sub_080825E8: @ 0x080825E8
|
||||
push {lr}
|
||||
bl DeleteThisEntity
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_080825F0
|
||||
sub_080825F0: @ 0x080825F0
|
||||
push {lr}
|
||||
adds r1, r0, #0
|
||||
ldr r0, _08082604 @ =gLinkState
|
||||
ldrb r0, [r0, #5]
|
||||
cmp r0, #0
|
||||
bne _08082602
|
||||
adds r0, r1, #0
|
||||
bl sub_08082608
|
||||
_08082602:
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08082604: .4byte gLinkState
|
||||
|
||||
thumb_func_start sub_08082608
|
||||
sub_08082608: @ 0x08082608
|
||||
movs r2, #0
|
||||
movs r1, #1
|
||||
strb r1, [r0, #0xc]
|
||||
strb r2, [r0, #0xd]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_08082614
|
||||
sub_08082614: @ 0x08082614
|
||||
push {r4, r5, r6, r7, lr}
|
||||
|
||||
@@ -17,6 +17,10 @@ typedef struct {
|
||||
u8 filler4[0x835];
|
||||
u32 musicIndex;
|
||||
u32 pMusicIndex;
|
||||
u8 filler5[0x20];
|
||||
u32 unk2;
|
||||
u32 unk3;
|
||||
u32 unk4;
|
||||
} Area;
|
||||
|
||||
extern Area gArea;
|
||||
|
||||
+3
-4
@@ -26,7 +26,7 @@ typedef struct {
|
||||
} BoundingBox;
|
||||
|
||||
typedef struct Entity {
|
||||
/*0x00*/ u32* field_0x0;
|
||||
/*0x00*/ struct Entity* field_0x0;
|
||||
/*0x04*/ struct Entity* field_0x4;
|
||||
/*0x08*/ EntityType entityType;
|
||||
/*0x0c*/ u8 action;
|
||||
@@ -47,8 +47,7 @@ typedef struct Entity {
|
||||
/* */ u8 draw : 2; // 1-2
|
||||
/* */ u8 ss2 : 1; // 4
|
||||
/* */ u8 ss3 : 1; // 8
|
||||
/* */ u8 bigShadow : 1; //0x10
|
||||
/* */ u8 giantShadow : 1; //0x20
|
||||
/* */ u8 shadow : 2; //0x10
|
||||
/* */ u8 flipX : 1; //0x40
|
||||
/* */ u8 flipY : 1; //0x80
|
||||
/* */ } PACKED b;
|
||||
@@ -71,7 +70,7 @@ typedef struct Entity {
|
||||
/* */ u8 flipX : 2; //0x10
|
||||
/* */ u8 flipY : 2; //0x40
|
||||
/* */ } PACKED spriteOrientation;
|
||||
/*0x1c*/ u8 filler[1];
|
||||
/*0x1c*/ u8 field_0x1c;
|
||||
/*0x1d*/ u8 field_0x1d;
|
||||
/*0x1e*/ u8 frameIndex;
|
||||
/*0x1f*/ u8 lastFrameIndex;
|
||||
|
||||
+1
-1
@@ -192,7 +192,7 @@ extern void sub_080A70AC(void*);
|
||||
extern void sub_080A7114(u32);
|
||||
extern void sub_08001242(void);
|
||||
extern u32 sub_08003FC4(Entity*, u32);
|
||||
extern u8 sub_080043E8(Entity*);
|
||||
extern u32 sub_080043E8(Entity*);
|
||||
extern void sub_08001290(Entity*, u32);
|
||||
extern void sub_08004488(u32);
|
||||
extern void sub_08004596(Entity*, u32);
|
||||
|
||||
+3
-1
@@ -35,7 +35,9 @@ typedef struct {
|
||||
/* */ u32 noMinishCap : 1;
|
||||
/* */ u32 pullingState : 1;
|
||||
/* */ u32 windyState : 1;
|
||||
/* */ u32 filler10 : 4;
|
||||
/* */ u32 filler6 : 1;
|
||||
/* */ u32 unk7 : 1;
|
||||
/* */ u32 filler8 : 2;
|
||||
/* */ u32 slipperyState : 1;
|
||||
/* */ u32 filler11 : 5;
|
||||
/* */ u32 filler11b : 16;
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#ifndef MANAGER_H
|
||||
#define MANAGER_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u16 field_0x00;
|
||||
u16 field_0x02;
|
||||
u8 field_0x04;
|
||||
u8 field_0x05;
|
||||
u8 field_0x06;
|
||||
union {
|
||||
u8 all;
|
||||
struct {
|
||||
u8 layer : 2;
|
||||
u8 unk1 : 2;
|
||||
u8 unk2 : 1;
|
||||
u8 unk3 : 3;
|
||||
} PACKED b;
|
||||
} PACKED field_0x07;
|
||||
} UnkManagerHelperStruct;
|
||||
|
||||
#endif
|
||||
@@ -472,7 +472,7 @@ SECTIONS {
|
||||
asm/manager3.o(.text);
|
||||
asm/manager4.o(.text);
|
||||
asm/manager5.o(.text);
|
||||
asm/manager6.o(.text);
|
||||
src/manager/manager6.o(.text);
|
||||
asm/manager7.o(.text);
|
||||
asm/manager8.o(.text);
|
||||
asm/manager9.o(.text);
|
||||
@@ -529,7 +529,8 @@ SECTIONS {
|
||||
src/sub_0805E3A0.o(.text);
|
||||
asm/code_0805E3B0.o(.text);
|
||||
asm/getEmptyEntity.o(.text);
|
||||
asm/code_0805E744.o(.text);
|
||||
src/entity.o(.text);
|
||||
asm/code_0805EC04.o(.text);
|
||||
/* npcs */
|
||||
src/npc/gentari.o(.text);
|
||||
src/npc/festari.o(.text);
|
||||
@@ -672,6 +673,7 @@ SECTIONS {
|
||||
asm/itemForSale.o(.text);
|
||||
asm/button.o(.text);
|
||||
asm/object4.o(.text);
|
||||
src/object/pot.o(.text);
|
||||
asm/pot.o(.text);
|
||||
asm/object6.o(.text);
|
||||
asm/blockPushed.o(.text);
|
||||
|
||||
@@ -57,7 +57,7 @@ void sub_0802A8C8(Entity* this)
|
||||
void sub_0802A8E0(Entity *this)
|
||||
{
|
||||
this->previousActionFlag = 1;
|
||||
this->filler[1] = 0x3c;
|
||||
this->field_0x1d = 0x3c;
|
||||
}
|
||||
|
||||
void sub_0802A8EC(Entity *this)
|
||||
|
||||
+13
-17
@@ -115,26 +115,22 @@ void sub_080324FC(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
#if NON_MATCHING // r4-r5 register swap
|
||||
void sub_08032574(Entity* this) {
|
||||
if (this->attachedEntity == NULL || !(this->attachedEntity->bitfield & 0x80)) {
|
||||
(this->field_0x76)--;
|
||||
if ((this->field_0x76 == 0) || (sub_080AEFE0(this) == 0)) {
|
||||
sub_0803275C(this);
|
||||
} else {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if (!(this->field_0x76 & 0x7)) {
|
||||
sub_08032794(this);
|
||||
}
|
||||
}
|
||||
if (this->attachedEntity && (this->attachedEntity->bitfield & 0x80)) {
|
||||
sub_0803275C(this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (--this->field_0x76 == 0 || !sub_080AEFE0(this)) {
|
||||
sub_0803275C(this);
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateAnimationSingleFrame(this);
|
||||
if ((this->field_0x76 & 0x7) == 0) {
|
||||
sub_08032794(this);
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_08032574(Entity* this) {
|
||||
asm(".include \"asm/non_matching/keaton/sub_08032574.inc\"");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_080325C4(Entity* this) {
|
||||
this->actionDelay--;
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ void sub_08021DF0(Entity *this)
|
||||
this->height.HALF.HI = -0x10;
|
||||
}
|
||||
this->direction = Random() & 0x1f;
|
||||
this->filler[0] = 1;
|
||||
this->field_0x1c = 1;
|
||||
this->spritePriority.b0 = 3;
|
||||
this->collisionLayer = 3;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
|
||||
+118
-145
@@ -22,115 +22,100 @@ extern Entity* gUnk_020000B0;
|
||||
extern u8 gUnk_080CA4C8[];
|
||||
extern u16 gUnk_080CA4CA[];
|
||||
extern s16 gSineTable[];
|
||||
void Leever(Entity *this)
|
||||
{
|
||||
EnemyFunctionHandler(this, gUnk_080CA49C);
|
||||
SetChildOffset(this, 0, 1, -0x10);
|
||||
void Leever(Entity* this) {
|
||||
EnemyFunctionHandler(this, gUnk_080CA49C);
|
||||
SetChildOffset(this, 0, 1, -0x10);
|
||||
}
|
||||
|
||||
void sub_0801FC28(Entity *this)
|
||||
{
|
||||
gUnk_080CA4B4[this->action](this);
|
||||
void sub_0801FC28(Entity* this) {
|
||||
gUnk_080CA4B4[this->action](this);
|
||||
}
|
||||
|
||||
void sub_0801FC40(Entity *this)
|
||||
{
|
||||
if (this->bitfield == 0x80) {
|
||||
if (this->action == 3) {
|
||||
this->field_0x74 = 1;
|
||||
void sub_0801FC40(Entity* this) {
|
||||
if (this->bitfield == 0x80) {
|
||||
if (this->action == 3) {
|
||||
this->field_0x74 = 1;
|
||||
}
|
||||
} else {
|
||||
if (this->field_0x43 != 0) {
|
||||
sub_0804A9FC(this, 0x1c);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this->field_0x43 != 0) {
|
||||
sub_0804A9FC(this, 0x1c);
|
||||
}
|
||||
}
|
||||
sub_0804AA30(this, gUnk_080CA49C);
|
||||
sub_0804AA30(this, gUnk_080CA49C);
|
||||
}
|
||||
|
||||
void sub_0801FC7C(Entity *this)
|
||||
{
|
||||
if ((this->entityType).form == 0) {
|
||||
sub_0804A7D4(this);
|
||||
}
|
||||
else {
|
||||
CreateDeathFx(this, 0xf1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FC9C(Entity *this)
|
||||
{
|
||||
sub_0804A720(this);
|
||||
this->action = 1;
|
||||
this->actionDelay = Random();
|
||||
}
|
||||
|
||||
void sub_0801FCB0(Entity *this)
|
||||
{
|
||||
if (--this->actionDelay == 0) {
|
||||
if (sub_0801FE68(this, Random() & 0x1f) != 0) {
|
||||
this->action = 2;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
this->direction = (GetFacingDirection(this, gUnk_020000B0) + gUnk_080CA4C8[Random() & 1]) & 0x1f;
|
||||
InitializeAnimation(this, 0);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
}
|
||||
else {
|
||||
this->actionDelay = (Random() & 0x18) + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FD2C(Entity *this)
|
||||
{
|
||||
|
||||
GetNextFrame(this);
|
||||
|
||||
if (this->frames.b.f3 != 0) {
|
||||
this->action = 3;
|
||||
if (this->entityType.form == 0) {
|
||||
this->field_0x74 = 0xb4;
|
||||
}
|
||||
else {
|
||||
this->field_0x74 = 0x6e;
|
||||
}
|
||||
InitializeAnimation(this,2);
|
||||
}
|
||||
else if (this->frames.b.f0 != 0) {
|
||||
this->frames.all &= 0xfe;
|
||||
this->flags |= 0x80;
|
||||
void sub_0801FC7C(Entity* this) {
|
||||
if ((this->entityType).form == 0) {
|
||||
sub_0804A7D4(this);
|
||||
} else {
|
||||
CreateDeathFx(this, 0xf1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FD80(Entity *this)
|
||||
{
|
||||
|
||||
sub_0801FED4(this);
|
||||
GetNextFrame(this);
|
||||
|
||||
if (--this->field_0x74 == 0) {
|
||||
this->action = 4;
|
||||
this->flags &= 0x7f;
|
||||
InitializeAnimation(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FDB4(Entity *this)
|
||||
{
|
||||
sub_0801FED4(this);
|
||||
GetNextFrame(this);
|
||||
if ((this->frames.b.f3) != 0) {
|
||||
void sub_0801FC9C(Entity* this) {
|
||||
sub_0804A720(this);
|
||||
this->action = 1;
|
||||
this->actionDelay = 0xf0;
|
||||
this->spriteSettings.b.draw = FALSE;
|
||||
}
|
||||
this->actionDelay = Random();
|
||||
}
|
||||
|
||||
u32 sub_0801FDE4(Entity *ent, s32 x, s32 y)
|
||||
{
|
||||
void sub_0801FCB0(Entity* this) {
|
||||
if (--this->actionDelay == 0) {
|
||||
if (sub_0801FE68(this, Random() & 0x1f) != 0) {
|
||||
this->action = 2;
|
||||
this->spriteSettings.b.draw = TRUE;
|
||||
this->direction = (GetFacingDirection(this, gUnk_020000B0) + gUnk_080CA4C8[Random() & 1]) & 0x1f;
|
||||
InitializeAnimation(this, 0);
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
} else {
|
||||
this->actionDelay = (Random() & 0x18) + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FD2C(Entity* this) {
|
||||
|
||||
GetNextFrame(this);
|
||||
|
||||
if (this->frames.b.f3 != 0) {
|
||||
this->action = 3;
|
||||
if (this->entityType.form == 0) {
|
||||
this->field_0x74 = 0xb4;
|
||||
} else {
|
||||
this->field_0x74 = 0x6e;
|
||||
}
|
||||
InitializeAnimation(this, 2);
|
||||
} else if (this->frames.b.f0 != 0) {
|
||||
this->frames.all &= 0xfe;
|
||||
this->flags |= 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FD80(Entity* this) {
|
||||
|
||||
sub_0801FED4(this);
|
||||
GetNextFrame(this);
|
||||
|
||||
if (--this->field_0x74 == 0) {
|
||||
this->action = 4;
|
||||
this->flags &= 0x7f;
|
||||
InitializeAnimation(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801FDB4(Entity* this) {
|
||||
sub_0801FED4(this);
|
||||
GetNextFrame(this);
|
||||
if ((this->frames.b.f3) != 0) {
|
||||
this->action = 1;
|
||||
this->actionDelay = 0xf0;
|
||||
this->spriteSettings.b.draw = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) {
|
||||
u32 uVar3;
|
||||
u16 *puVar4;
|
||||
|
||||
u16* puVar4;
|
||||
|
||||
if (sub_080002D4(x, y, gUnk_020000B0->collisionLayer) != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
@@ -147,60 +132,48 @@ u32 sub_0801FDE4(Entity *ent, s32 x, s32 y)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_0801FE68(Entity *ent, s32 arg2)
|
||||
{
|
||||
s32 sin, cos;
|
||||
s32 x, y;
|
||||
u32 i;
|
||||
bool32 sub_0801FE68(Entity* ent, s32 arg2) {
|
||||
s32 sin, cos;
|
||||
s32 x, y;
|
||||
u32 i;
|
||||
|
||||
|
||||
if (sub_08049FDC(ent, 1) == 0) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
x = gUnk_020000B0->x.WORD;
|
||||
y = gUnk_020000B0->y.WORD;
|
||||
sin = gSineTable[arg2 * 8] << 11;
|
||||
cos = gSineTable[arg2 * 8 + 0x40] << 11;
|
||||
for (i = 0; i < 8; i++) {
|
||||
x += sin;
|
||||
y += -cos;
|
||||
if (sub_0801FDE4(ent, x >> 0x10, y >> 0x10) == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (sub_08049FDC(ent, 1) == 0) {
|
||||
return 0;
|
||||
} else {
|
||||
x = gUnk_020000B0->x.WORD;
|
||||
y = gUnk_020000B0->y.WORD;
|
||||
sin = gSineTable[arg2 * 8] << 11;
|
||||
cos = gSineTable[arg2 * 8 + 0x40] << 11;
|
||||
for (i = 0; i < 8; i++) {
|
||||
x += sin;
|
||||
y += -cos;
|
||||
if (sub_0801FDE4(ent, x >> 0x10, y >> 0x10) == 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#if NON_MATCHING
|
||||
void sub_0801FED4(Entity *this)
|
||||
{
|
||||
s16 sVar2;
|
||||
|
||||
if (sub_08049FDC(this, 1) == 0) {
|
||||
this->field_0x74 = 1;
|
||||
}
|
||||
sVar2 = (this->frames.all & 0xf) * 0x20;
|
||||
this->nonPlanarMovement = sVar2;
|
||||
if (this->entityType.form == 0) {
|
||||
this->field_0xf++;
|
||||
if ((this->field_0xf & 0xf) == 0) {
|
||||
sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
|
||||
extern u32 sub_0800132C(Entity*, Entity*);
|
||||
|
||||
void sub_0801FED4(Entity* this) {
|
||||
s16 sVar2;
|
||||
|
||||
if (sub_08049FDC(this, 1) == 0) {
|
||||
this->field_0x74 = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
this->nonPlanarMovement = sVar2 + 0x40;
|
||||
this->field_0xf++;
|
||||
if ((this->field_0xf & 0x7) == 0) {
|
||||
sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
|
||||
sVar2 = (this->frames.all & 0xf) * 0x20;
|
||||
this->nonPlanarMovement = sVar2;
|
||||
if (this->entityType.form == 0) {
|
||||
if ((this->field_0xf++ & 0xf) == 0) {
|
||||
sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
|
||||
}
|
||||
} else {
|
||||
this->nonPlanarMovement = sVar2 + 0x40;
|
||||
if ((this->field_0xf++ & 0x7) == 0) {
|
||||
sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
|
||||
}
|
||||
}
|
||||
}
|
||||
sub_080AEF88(this);
|
||||
sub_080AEF88(this);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_0801FED4(Entity *this) {
|
||||
asm(".include \"asm/non_matching/leever/sub_0801FED4.inc\"");
|
||||
}
|
||||
#endif
|
||||
+1
-1
@@ -62,7 +62,7 @@ void sub_0801EB2C(Entity* ent) {
|
||||
|
||||
void sub_0801EB68(Entity* ent) {
|
||||
ent->previousActionFlag = 1;
|
||||
ent->filler[1] = 60;
|
||||
ent->field_0x1d = 60;
|
||||
}
|
||||
|
||||
void sub_0801EB74(Entity* ent) {
|
||||
|
||||
@@ -25,7 +25,7 @@ void RupeeLike(Entity* this) {
|
||||
u32 uVar1;
|
||||
|
||||
if (this->entityType.parameter == 0) {
|
||||
uVar1 = sub_080043E8(this);
|
||||
uVar1 = (u8)sub_080043E8(this);
|
||||
if (uVar1 != 0) {
|
||||
if (this->action == 4) {
|
||||
sub_080296D8(this);
|
||||
|
||||
@@ -46,7 +46,7 @@ void sub_0803169C(Entity *this)
|
||||
void sub_080316DC(Entity *this)
|
||||
{
|
||||
this->previousActionFlag = 1;
|
||||
this->filler[1] = 0x3c;
|
||||
this->field_0x1d = 0x3c;
|
||||
}
|
||||
|
||||
void sub_080316E8(Entity *this)
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ void sub_08033674(Entity* this) {
|
||||
sub_0804A720(this);
|
||||
this->actionDelay = 0;
|
||||
this->action = 1;
|
||||
this->filler[0] = 1;
|
||||
this->field_0x1c = 1;
|
||||
this->field_0x80.HWORD = this->x.HALF.HI;
|
||||
this->field_0x82.HWORD = this->y.HALF.HI;
|
||||
sub_08033744(this);
|
||||
|
||||
+423
@@ -0,0 +1,423 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
typedef struct OtherEntity {
|
||||
struct OtherEntity* prev;
|
||||
struct OtherEntity* next;
|
||||
Entity* field_0x8;
|
||||
u8 field_0xC[0x34];
|
||||
} OtherEntity;
|
||||
|
||||
extern Entity gUnk_030011E8[7];
|
||||
|
||||
Entity* sub_0805E744(void)
|
||||
|
||||
{
|
||||
Entity* ent = gUnk_030011E8;
|
||||
|
||||
do {
|
||||
if (ent->field_0x0 == NULL) {
|
||||
return ent;
|
||||
}
|
||||
} while (ent++, ent < &gUnk_030011E8[7]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern Entity* GetEmptyEntity();
|
||||
OtherEntity* sub_0805E8D4();
|
||||
|
||||
typedef void* (*Getter)(void);
|
||||
|
||||
void* sub_0805E768(int type)
|
||||
|
||||
{
|
||||
Getter getter = NULL;
|
||||
if (type == 9) {
|
||||
getter = (Getter)sub_0805E8D4;
|
||||
} else {
|
||||
getter = (Getter)GetEmptyEntity;
|
||||
}
|
||||
return getter();
|
||||
}
|
||||
typedef struct {
|
||||
int field_0x0;
|
||||
int field_0x4;
|
||||
Entity* field_0x8;
|
||||
int field_0xc;
|
||||
} struct_03003DD0;
|
||||
|
||||
extern struct_03003DD0 gUnk_03003DD0;
|
||||
extern u32 _call_via_r0(u32*);
|
||||
extern u32 gUnk_03005F24;
|
||||
extern void sub_0805E79C(Entity*);
|
||||
|
||||
void DeleteThisEntity(void)
|
||||
|
||||
{
|
||||
sub_0805E79C(gUnk_03003DD0.field_0x8);
|
||||
_call_via_r0((u32*)&gUnk_03005F24);
|
||||
return;
|
||||
}
|
||||
|
||||
void DeleteEntity(Entity*);
|
||||
void sub_0805E900(OtherEntity*);
|
||||
|
||||
typedef void (*Deleter)(void*);
|
||||
|
||||
void sub_0805E79C(Entity* ent)
|
||||
|
||||
{
|
||||
Deleter deleter = NULL;
|
||||
if (ent->entityType.type == 9) {
|
||||
deleter = (Deleter)sub_0805E900;
|
||||
} else {
|
||||
deleter = (Deleter)DeleteEntity;
|
||||
}
|
||||
deleter(ent);
|
||||
}
|
||||
|
||||
extern void sub_080AE068();
|
||||
extern void sub_0801D230();
|
||||
extern void sub_0806FE84();
|
||||
extern void sub_080788E0();
|
||||
extern void sub_08078954();
|
||||
extern void sub_0805EC60();
|
||||
extern void sub_08017744();
|
||||
extern void sub_0805E92C();
|
||||
extern void sub_0807DB08();
|
||||
extern void sub_0806FBEC();
|
||||
extern void sub_0801DA0C();
|
||||
extern void sub_0804AA1C();
|
||||
extern void sub_0805EA98(); // Unlink
|
||||
|
||||
void DeleteEntity(Entity* ent)
|
||||
|
||||
{
|
||||
if (ent->field_0x4) {
|
||||
sub_080AE068(ent);
|
||||
sub_0801D230(ent);
|
||||
sub_0806FE84(ent);
|
||||
sub_080788E0(ent);
|
||||
sub_08078954(ent);
|
||||
sub_0805EC60(ent);
|
||||
sub_08017744(ent);
|
||||
sub_0805E92C(ent);
|
||||
sub_0807DB08(ent);
|
||||
sub_0806FBEC(ent);
|
||||
sub_0801DA0C(ent->otherEntity);
|
||||
ent->otherEntity = NULL;
|
||||
if ((ent->entityType).type == '\x03') {
|
||||
sub_0804AA1C(ent);
|
||||
}
|
||||
ent->flags = ent->flags & 0x7f;
|
||||
ent->spriteSettings.b.draw = 0;
|
||||
ent->field_0x3c = 0;
|
||||
ent->bitfield = 0;
|
||||
ent->field_0x42 = 0;
|
||||
ent->currentHealth = 0;
|
||||
sub_0805EA98(ent);
|
||||
ent->field_0x4 = NULL;
|
||||
ent->field_0x0 = (Entity*)0xffffffff;
|
||||
}
|
||||
}
|
||||
|
||||
extern Entity gLinkEntity;
|
||||
void sub_0805E870(Entity*);
|
||||
|
||||
void sub_0805E84C(void)
|
||||
|
||||
{
|
||||
Entity* ent = &gLinkEntity;
|
||||
do {
|
||||
if ((int)ent->field_0x0 < 0) {
|
||||
sub_0805E870(ent);
|
||||
}
|
||||
} while (ent++, ent < (&gLinkEntity + 80));
|
||||
return;
|
||||
}
|
||||
|
||||
extern u8 gUnk_03003DBC;
|
||||
|
||||
void sub_0805E870(Entity* ent)
|
||||
|
||||
{
|
||||
DmaClear32(3, ent, sizeof(Entity));
|
||||
gUnk_03003DBC--;
|
||||
}
|
||||
|
||||
typedef struct struct_03003D70 {
|
||||
void* field_0x0;
|
||||
void* field_0x4;
|
||||
} struct_03003D70;
|
||||
|
||||
extern struct_03003D70 gUnk_03003D70[9];
|
||||
extern EntityType gUnk_03003DB8;
|
||||
|
||||
void sub_0805E89C(void)
|
||||
|
||||
{
|
||||
Entity* ent;
|
||||
Entity* next;
|
||||
struct_03003D70* it;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
if (it->field_0x4) {
|
||||
do {
|
||||
for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) {
|
||||
next = ent->field_0x4;
|
||||
sub_0805E79C(ent);
|
||||
}
|
||||
} while (it++, it < (gUnk_03003D70 + 9));
|
||||
sub_0805E84C();
|
||||
}
|
||||
}
|
||||
|
||||
extern OtherEntity gUnk_02033290;
|
||||
|
||||
OtherEntity* sub_0805E8D4(void)
|
||||
|
||||
{
|
||||
OtherEntity* it;
|
||||
for (it = &gUnk_02033290; it < (&gUnk_02033290 + 32); it++) {
|
||||
if (it->prev == 0) {
|
||||
return it;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern void _DmaZero(void*, u32);
|
||||
extern u8 gUnk_020354B4;
|
||||
|
||||
void sub_0805E900(OtherEntity* ent)
|
||||
|
||||
{
|
||||
if (!ent->next)
|
||||
return;
|
||||
|
||||
sub_0805E92C(ent);
|
||||
sub_0805EA98(ent);
|
||||
_DmaZero(ent, 0x40);
|
||||
gUnk_020354B4--;
|
||||
}
|
||||
|
||||
#include "area.h"
|
||||
|
||||
void sub_0805E92C(u32 param_1)
|
||||
|
||||
{
|
||||
if (param_1 == gArea.unk2) {
|
||||
gArea.unk2 = 0;
|
||||
gArea.unk3 = 0;
|
||||
gArea.unk4 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
extern Entity gUnk_020369F0;
|
||||
extern void sub_0801D66C(void* dst, void* src, size_t size); // dma copy
|
||||
extern void sub_0805E98C(void);
|
||||
|
||||
void sub_0805E958(void)
|
||||
|
||||
{
|
||||
sub_0801D66C(&gUnk_03003D70, &gUnk_020369F0, 0x48);
|
||||
sub_0805E98C();
|
||||
}
|
||||
|
||||
void sub_0805E974(void)
|
||||
|
||||
{
|
||||
sub_0801D66C(&gUnk_020369F0, &gUnk_03003D70, 0x48);
|
||||
}
|
||||
|
||||
void sub_0805E98C(void)
|
||||
|
||||
{
|
||||
struct_03003D70* it;
|
||||
|
||||
for (it = gUnk_03003D70; it < &gUnk_03003D70[9]; it++) {
|
||||
it->field_0x0 = it;
|
||||
it->field_0x4 = (Entity*)it;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0805E9A8(void)
|
||||
|
||||
{
|
||||
Entity* entry;
|
||||
struct_03003D70* it;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
do {
|
||||
for (entry = it->field_0x4; (u32)entry != (u32)it; entry = entry->field_0x4) {
|
||||
entry->flags &= 0xfd;
|
||||
if ((entry->flags & 0x20) == 0) {
|
||||
entry->flags |= 0x10;
|
||||
}
|
||||
}
|
||||
} while (it++, it < (gUnk_03003D70 + 9));
|
||||
}
|
||||
|
||||
void sub_0805E9F4(void)
|
||||
|
||||
{
|
||||
Entity* ent;
|
||||
Entity* next;
|
||||
struct_03003D70* it;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
do {
|
||||
for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) {
|
||||
next = ent->field_0x4;
|
||||
if (ent->flags & 0x10)
|
||||
sub_0805E79C(ent);
|
||||
}
|
||||
} while (it++, it < (gUnk_03003D70 + 9));
|
||||
}
|
||||
|
||||
extern void sub_0805E374(Entity*);
|
||||
|
||||
void sub_0805EA2C(Entity* ent, int kind)
|
||||
|
||||
{
|
||||
Entity* prev;
|
||||
struct_03003D70* next;
|
||||
|
||||
next = (gUnk_03003D70 + kind);
|
||||
ent->field_0x4 = (Entity*)next;
|
||||
prev = next->field_0x0;
|
||||
ent->field_0x0 = prev;
|
||||
prev->field_0x4 = ent;
|
||||
next->field_0x0 = ent;
|
||||
if (ent->entityType.type != 9) {
|
||||
ent->spritePriority.b0 = 4;
|
||||
gUnk_03003DBC++;
|
||||
} else {
|
||||
gUnk_020354B4++;
|
||||
}
|
||||
sub_0805E374(ent);
|
||||
}
|
||||
|
||||
void sub_0805EA78(Entity* ent, int kind)
|
||||
|
||||
{
|
||||
struct_03003D70* it;
|
||||
|
||||
sub_0805EA98(ent);
|
||||
it = &gUnk_03003D70[kind];
|
||||
ent->field_0x0 = (Entity*)it;
|
||||
ent->field_0x4 = it->field_0x4;
|
||||
((Entity*)it->field_0x4)->field_0x0 = ent;
|
||||
it->field_0x4 = ent;
|
||||
}
|
||||
|
||||
void sub_0805EA98(Entity* ent)
|
||||
|
||||
{
|
||||
if (ent == gUnk_03003DD0.field_0x8) {
|
||||
gUnk_03003DD0.field_0x8 = ent->field_0x0;
|
||||
}
|
||||
ent->field_0x0->field_0x4 = ent->field_0x4;
|
||||
ent->field_0x4->field_0x0 = ent->field_0x0;
|
||||
}
|
||||
|
||||
int sub_0805EABC(Entity* ent)
|
||||
|
||||
{
|
||||
Entity* ent2;
|
||||
struct_03003D70 *it, *end;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
end = (gUnk_03003D70 + 9);
|
||||
do {
|
||||
for (ent2 = (Entity*)it->field_0x4; (u32)ent2 != (u32)it; ent2 = ent2->field_0x4) {
|
||||
if ((u32)ent2 != (u32)ent && ent2->entityType.type == ent->entityType.type &&
|
||||
ent2->entityType.subtype == ent->entityType.subtype) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} while (it++, it < end);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Entity* sub_0805EB00(int type, int subtype, int kind)
|
||||
|
||||
{
|
||||
Entity* it;
|
||||
struct_03003D70* node;
|
||||
|
||||
node = &gUnk_03003D70[kind];
|
||||
for (it = node->field_0x4; (u32)it != (u32)node; it = it->field_0x4) {
|
||||
if (type == it->entityType.type && subtype == it->entityType.subtype)
|
||||
return it;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Entity* sub_0805EB2C(int type, int subtype, int kind, int form, int parameter)
|
||||
|
||||
{
|
||||
Entity* it;
|
||||
struct_03003D70* node;
|
||||
|
||||
node = &gUnk_03003D70[kind];
|
||||
node = &gUnk_03003D70[kind];
|
||||
for (it = node->field_0x4; (u32)it != (u32)node; it = it->field_0x4) {
|
||||
if (type == it->entityType.type && subtype == it->entityType.subtype && form == it->entityType.form &&
|
||||
parameter == it->entityType.parameter)
|
||||
return it;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Entity* sub_0805EB64(Entity* ent, int kind)
|
||||
|
||||
{
|
||||
Entity* it;
|
||||
struct_03003D70* end;
|
||||
|
||||
end = &gUnk_03003D70[kind];
|
||||
for (it = ent->field_0x4; (u32)it != (u32)end; it = it->field_0x4) {
|
||||
if (it->entityType.type == ent->entityType.type && it->entityType.subtype == ent->entityType.subtype)
|
||||
return it;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Entity* sub_0805EB9C(int type, int subtype)
|
||||
|
||||
{
|
||||
Entity* it2;
|
||||
struct_03003D70 *it, *end;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
end = (gUnk_03003D70 + 9);
|
||||
do {
|
||||
for (it2 = (Entity*)it->field_0x4; (u32)it2 != (u32)it; it2 = it2->field_0x4) {
|
||||
if ((type == (it2->entityType).type) && (subtype == (it2->entityType).subtype))
|
||||
return it2;
|
||||
}
|
||||
} while (it++, it < end);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_0805EBCC(void)
|
||||
|
||||
{
|
||||
Entity* ent;
|
||||
Entity* next;
|
||||
struct_03003D70* it;
|
||||
|
||||
it = gUnk_03003D70;
|
||||
do {
|
||||
for (ent = it->field_0x4; (u32)ent != (u32)it; ent = next) {
|
||||
next = ent->field_0x4;
|
||||
if (ent->entityType.type == 3)
|
||||
DeleteEntity(ent);
|
||||
}
|
||||
} while (it++, it < (gUnk_03003D70 + 9));
|
||||
sub_0805E84C();
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "link.h"
|
||||
#include "manager.h"
|
||||
|
||||
extern void* GetCurrentRoomProperty(u8);
|
||||
extern u32 CheckPlayerInRegion(u16, u16, u8, u8);
|
||||
extern void DoExitTransition(void*);
|
||||
extern void sub_0805E900(Entity*);
|
||||
|
||||
void sub_08057CB4(Entity * this) {
|
||||
u32 tmp;
|
||||
UnkManagerHelperStruct* i;
|
||||
if (this->action == 0){
|
||||
this->action = 1;
|
||||
this->field_0x20 = (s32) GetCurrentRoomProperty(this->entityType.form);
|
||||
if (this->field_0x20 == 0) {
|
||||
sub_0805E900(this);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this->actionDelay == 0 || gLinkState.field_0x10[2] == 0x1e) {
|
||||
for (i = ((UnkManagerHelperStruct*) this->field_0x20);i->field_0x00 != 0xFFFF; i++) {
|
||||
tmp = (i->field_0x07.all & 0x3);
|
||||
if (((tmp & (gLinkEntity.collisionLayer)) != 0) &&
|
||||
(((gLinkState.flags.all & 0x80) != 0) || ((i->field_0x07.b.unk2) != 0)) &&
|
||||
(CheckPlayerInRegion(i->field_0x00,i->field_0x02,i->field_0x04,i->field_0x05) != 0) &&
|
||||
(gLinkEntity.height.HALF.HI == 0)) {
|
||||
DoExitTransition(GetCurrentRoomProperty(i->field_0x06));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
-33
@@ -1,11 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "link.h"
|
||||
#include "structures.h"
|
||||
|
||||
extern void (*gUnk_081140D4[])(Entity*);
|
||||
|
||||
extern u16 gUnk_081140CC[];
|
||||
extern u32 gScreenTransition;
|
||||
extern void sub_0805E3A0(Entity*, u32);
|
||||
extern void sub_0806D0B0(Entity*);
|
||||
extern void sub_0807DD64(Entity*);
|
||||
@@ -20,16 +20,11 @@ void BigGoron(Entity* this) {
|
||||
gUnk_081140D4[this->entityType.form](this);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
void sub_0806CF30(Entity* this) {
|
||||
u8 bVar1;
|
||||
u32 uVar2;
|
||||
int iVar3;
|
||||
|
||||
if (this->action == 0) {
|
||||
this->action = 1;
|
||||
this->previousActionFlag = 1;
|
||||
this->field_0x68 = (this->x).HALF.HI;
|
||||
this->field_0x68.HWORD = this->x.HALF.HI;
|
||||
sub_0805E3A0(this, 2);
|
||||
sub_0806D0B0(this);
|
||||
sub_0807DD64(this);
|
||||
@@ -37,39 +32,32 @@ void sub_0806CF30(Entity* this) {
|
||||
sub_0807DDAC(this, 0);
|
||||
sub_0807DDE4(this);
|
||||
}
|
||||
if (this->previousActionFlag != 2) {
|
||||
|
||||
if (this->previousActionFlag < 3) {
|
||||
if ((gScreenTransition & 3) == 0) {
|
||||
iVar3 = this->x.HALF.HI;
|
||||
if (gLinkEntity.x.HALF.HI < iVar3) {
|
||||
if ((this->field_0x68 - 32) < iVar3) {
|
||||
this->x.HALF.HI = -1;
|
||||
}
|
||||
switch (this->previousActionFlag) {
|
||||
case 0:
|
||||
case 1:
|
||||
if (gScreenTransition.frameCount % 4 == 0) {
|
||||
if (gLinkEntity.x.HALF.HI < this->x.HALF.HI && this->field_0x68.HWORD - 32 < this->x.HALF.HI) {
|
||||
this->x.HALF.HI--;
|
||||
}
|
||||
if (this->x.HALF.HI > gLinkEntity.x.HALF.HI) {
|
||||
if (this->x.HALF.HI < (this->field_0x68 + 32)) {
|
||||
this->x.HALF.HI += 1;
|
||||
}
|
||||
if (gLinkEntity.x.HALF.HI > this->x.HALF.HI && this->field_0x68.HWORD + 32 > this->x.HALF.HI) {
|
||||
this->x.HALF.HI++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bVar1 = this->actionDelay -= 1;
|
||||
if (bVar1 == 0) {
|
||||
uVar2 = Random();
|
||||
PlaySFX(gUnk_081140CC[uVar2 & 3]);
|
||||
this->actionDelay = ((u8)uVar2 & 7) * 10 + 128;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (--this->actionDelay == 0) {
|
||||
u32 uVar2 = Random();
|
||||
PlaySFX(gUnk_081140CC[uVar2 % 4]);
|
||||
this->actionDelay = ((u8)uVar2 & 7) * 16;
|
||||
this->actionDelay += 128;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
sub_0806D02C(this);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_0806CF30(Entity* this) {
|
||||
asm(".include \"asm/non_matching/bigGoron/sub_0806CF30.inc\"");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_0806D00C(Entity* this) {
|
||||
Entity* pEVar1;
|
||||
|
||||
+40
-44
@@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "npc.h"
|
||||
#include "link.h"
|
||||
|
||||
@@ -30,58 +31,53 @@ void sub_0805FE10(Entity *this)
|
||||
sub_0807DD50(this);
|
||||
}
|
||||
|
||||
#if NON_MATCHING
|
||||
void sub_0805FE48(Entity *this)
|
||||
{
|
||||
u8 bVar1;
|
||||
u16 uVar2;
|
||||
u32 uVar3;
|
||||
u32 uVar4;
|
||||
u8 bVar1;
|
||||
u16 uVar2;
|
||||
u32 uVar3;
|
||||
u32 uVar4;
|
||||
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
|
||||
sub_0806F118(this);
|
||||
}
|
||||
else {
|
||||
ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh);
|
||||
sub_0805FF2C(this, *(void **)&this->cutsceneBeh);
|
||||
if (this->field_0x80 < 8) {
|
||||
if ((this->field_0x82 & 1) != 0) {
|
||||
uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1);
|
||||
}
|
||||
else {
|
||||
uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1);
|
||||
this->field_0xf = this->animationState;
|
||||
}
|
||||
if (this->interactType == 2) {
|
||||
this->action = 2;
|
||||
this->interactType = 0;
|
||||
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
|
||||
sub_0806F118(this);
|
||||
}
|
||||
if (uVar4 != this->animIndex) {
|
||||
InitAnimationForceUpdate(this, uVar4);
|
||||
}
|
||||
UpdateAnimationSingleFrame(this);
|
||||
else {
|
||||
ExecuteScriptCommandSet(this, *(void **)&this->cutsceneBeh);
|
||||
sub_0805FF2C(this, *(void **)&this->cutsceneBeh);
|
||||
uVar4 = this->field_0x80.HWORD;
|
||||
if (uVar4 < 8) {
|
||||
if ((this->field_0x82.HWORD & 1) != 0) {
|
||||
uVar4 = (uVar4 & 0xfc) + (this->field_0xf >> 1);
|
||||
}
|
||||
else {
|
||||
uVar4 = (uVar4 & 0xfc) + (this->animationState >> 1);
|
||||
this->field_0xf = this->animationState;
|
||||
}
|
||||
}
|
||||
if (uVar4 != this->animIndex) {
|
||||
InitAnimationForceUpdate(this, uVar4);
|
||||
}
|
||||
UpdateAnimationSingleFrame(this);
|
||||
|
||||
if (this->frames.b.f3)
|
||||
{
|
||||
switch (this->animIndex) {
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
this->field_0x80 = 0;
|
||||
if (this->frames.b.f3)
|
||||
{
|
||||
switch (this->animIndex) {
|
||||
case 8:
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
this->field_0x80.HWORD = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((this->field_0x82.HWORD & (~this->field_0x82.HWORD + 1)) == 2) {
|
||||
sub_0806ED78(this);
|
||||
}
|
||||
}
|
||||
if ((this->field_0x82 & (~this->field_0x82 + 1)) == 2) {
|
||||
sub_0806ED78(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_0805FE48(Entity *this) {
|
||||
asm(".include \"asm/non_matching/festari/sub_0805FE48.inc\"");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_0805FF18(Entity *this)
|
||||
{
|
||||
|
||||
+178
-134
@@ -30,6 +30,12 @@ extern u32 sub_0805ACC0(Entity*);
|
||||
extern void sub_0807DDAC(Entity*, u32);
|
||||
extern void sub_0807DDE4(Entity*);
|
||||
extern void sub_0807000C(Entity*);
|
||||
extern void sub_0806EE04(Entity*, void*, u32);
|
||||
extern Entity* sub_080A7EE0(int);
|
||||
extern void sub_08078778(Entity*);
|
||||
extern void sub_0807DD64(Entity*);
|
||||
void sub_08063DC8(Entity*);
|
||||
void sub_08063F20(Entity*);
|
||||
|
||||
extern void (*const gUnk_0810F544[])(Entity*);
|
||||
extern void (*const gUnk_0810F550[])(Entity*);
|
||||
@@ -40,157 +46,195 @@ extern SpriteLoadData gUnk_0810F524[];
|
||||
extern void* gUnk_0810F6BC[];
|
||||
extern ScreenTransition gScreenTransition;
|
||||
|
||||
void Guard(Entity *this)
|
||||
{
|
||||
if ((this->flags & 2) != 0) {
|
||||
gUnk_0810F544[this->action](this);
|
||||
}
|
||||
else {
|
||||
sub_08063D24(this);
|
||||
}
|
||||
void Guard(Entity* this) {
|
||||
if ((this->flags & 2) != 0) {
|
||||
gUnk_0810F544[this->action](this);
|
||||
} else {
|
||||
sub_08063D24(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08063D24(Entity *this)
|
||||
{
|
||||
gUnk_0810F550[this->action](this);
|
||||
sub_0806ED78(this);
|
||||
void sub_08063D24(Entity* this) {
|
||||
gUnk_0810F550[this->action](this);
|
||||
sub_0806ED78(this);
|
||||
}
|
||||
|
||||
NAKED
|
||||
void sub_08063D44(Entity* this) {
|
||||
asm(".include \"asm/non_matching/guard/sub_08063D44.inc\"");
|
||||
}
|
||||
Entity* ent;
|
||||
u32 temp, idx;
|
||||
|
||||
void sub_08063DC8(Entity *this)
|
||||
{
|
||||
if ((this->entityType).form == 0xff) {
|
||||
this->action = 2;
|
||||
this->actionDelay = 0x1e;
|
||||
this->animationState = sub_0806F5A4(GetFacingDirection(this,&gLinkEntity));
|
||||
InitAnimationForceUpdate(this, this->animationState + 4);
|
||||
}
|
||||
else {
|
||||
sub_0806EE20(this);
|
||||
if (this->field_0x3e != this->animationState) {
|
||||
this->animationState = this->field_0x3e;
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
if (gUnk_03003DBC > 0x46)
|
||||
return;
|
||||
|
||||
temp = this->entityType.subtype;
|
||||
temp ^= 0x15;
|
||||
idx = ((-temp | temp) >> 0x1f) * 4;
|
||||
if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx]))
|
||||
return;
|
||||
|
||||
InitializeAnimation(this, 4);
|
||||
sub_0806EE04(this, gUnk_0810F6BC[this->entityType.form], 0);
|
||||
switch (this->entityType.form) {
|
||||
case 0 ... 3:
|
||||
ent = sub_080A7EE0(0xc);
|
||||
ent->parent = this;
|
||||
ent->field_0xf = 0x3c;
|
||||
break;
|
||||
case 4 ... 5:
|
||||
sub_08078778(this);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
if (this->interactType != 0) {
|
||||
this->action = 3;
|
||||
this->interactType = 0;
|
||||
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this,&gLinkEntity)));
|
||||
sub_08064428(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08063E54(Entity *this)
|
||||
{
|
||||
if (--this->actionDelay == 0) {
|
||||
SetRoomFlag(0xf);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08063E6C(Entity *this)
|
||||
{
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
}
|
||||
}
|
||||
|
||||
NAKED
|
||||
void sub_08063E90(Entity* this) {
|
||||
asm(".include \"asm/non_matching/guard/sub_08063E90.inc\"");
|
||||
}
|
||||
|
||||
void sub_08063F20(Entity *this)
|
||||
{
|
||||
sub_0807DDAC(this, 0);
|
||||
sub_0807DDE4(this);
|
||||
GetNextFrame(this);
|
||||
if (this->interactType != 0) {
|
||||
this->action++;
|
||||
this->interactType = 0;
|
||||
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8 *)&this->field_0x70);
|
||||
sub_08064428(this);
|
||||
}
|
||||
this->entityType.form = 0;
|
||||
sub_08063DC8(this);
|
||||
}
|
||||
|
||||
void sub_08063F78(Entity *this)
|
||||
{
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
this->action = this->action - 1;
|
||||
InitializeAnimation(this,(this->animationState >> 1) + 4 + *(s8 *)&this->field_0x70);
|
||||
}
|
||||
}
|
||||
|
||||
void Guard_Head(Entity *this)
|
||||
{
|
||||
u8 bVar1;
|
||||
u32 uVar2;
|
||||
u32 pbVar3;
|
||||
u32 uVar4;
|
||||
u32 pbVar5;
|
||||
|
||||
uVar2 = this->frames.all & 0x3f;
|
||||
pbVar5 = (this->frameIndex & 0x3f);
|
||||
uVar4 = this->frameSpriteSettings & 0x3f;
|
||||
if ((this->entityType).subtype == 0x15) {
|
||||
if ((this->frameIndex & 0x40) != 0) {
|
||||
pbVar5 = pbVar5 + 0x21;
|
||||
pbVar3 = 0xffffffff;
|
||||
uVar4 = 0;
|
||||
void sub_08063DC8(Entity* this) {
|
||||
if ((this->entityType).form == 0xff) {
|
||||
this->action = 2;
|
||||
this->actionDelay = 0x1e;
|
||||
this->animationState = sub_0806F5A4(GetFacingDirection(this, &gLinkEntity));
|
||||
InitAnimationForceUpdate(this, this->animationState + 4);
|
||||
} else {
|
||||
sub_0806EE20(this);
|
||||
if (this->field_0x3e != this->animationState) {
|
||||
this->animationState = this->field_0x3e;
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
} else {
|
||||
GetNextFrame(this);
|
||||
}
|
||||
if (this->interactType != 0) {
|
||||
this->action = 3;
|
||||
this->interactType = 0;
|
||||
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
|
||||
sub_08064428(this);
|
||||
}
|
||||
}
|
||||
else {
|
||||
pbVar3 = (uVar2 + 0x19);
|
||||
if ((this->frameSpriteSettings & 0x3f) != 0) {
|
||||
uVar4 += 0x1f;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08063E54(Entity* this) {
|
||||
if (--this->actionDelay == 0) {
|
||||
SetRoomFlag(0xf);
|
||||
}
|
||||
}
|
||||
else {
|
||||
pbVar3 = (uVar2 + 0x46);
|
||||
pbVar5 = pbVar5 + 0x2d;
|
||||
if ((this->frameSpriteSettings & 0x3f) != 0) {
|
||||
uVar4 += 0x4c;
|
||||
}
|
||||
|
||||
void sub_08063E6C(Entity* this) {
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
this->action = 1;
|
||||
InitializeAnimation(this, this->animationState + 4);
|
||||
}
|
||||
}
|
||||
uVar4--;
|
||||
SetExtraSpriteFrame(this, 0, pbVar3);
|
||||
SetExtraSpriteFrame(this, 1, pbVar5);
|
||||
SetExtraSpriteFrame(this, 2, uVar4);
|
||||
SetSpriteSubEntryOffsetData1(this, 1, 0);
|
||||
SetSpriteSubEntryOffsetData2(this, 1, 2);
|
||||
sub_0807000C(this);
|
||||
}
|
||||
|
||||
void sub_08064030(Entity *arg0,Entity *arg1)
|
||||
{
|
||||
*(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f;
|
||||
void sub_08063E90(Entity* this) {
|
||||
Entity* ent;
|
||||
u32 temp, idx;
|
||||
u32 unk;
|
||||
|
||||
temp = this->entityType.subtype;
|
||||
temp ^= 0x15;
|
||||
idx = ((-temp | temp) >> 0x1f) * 4;
|
||||
if (!LoadExtraSpriteData(this, &gUnk_0810F524[idx]))
|
||||
return;
|
||||
|
||||
this->action++;
|
||||
if (this->actionDelay) {
|
||||
this->field_0x70.BYTES.byte0 = 8;
|
||||
} else {
|
||||
this->field_0x70.BYTES.byte0 = 0;
|
||||
}
|
||||
this->actionDelay = 0;
|
||||
|
||||
unk = sub_0805ACC0(this);
|
||||
if (unk == 0) {
|
||||
this->field_0x68.HWORD = this->x.HALF.HI;
|
||||
this->field_0x6a.HWORD = this->y.HALF.HI;
|
||||
} else {
|
||||
this->field_0x68.HWORD = unk >> 0x10;
|
||||
this->field_0x6a.HWORD = unk;
|
||||
}
|
||||
this->field_0x70.BYTES.byte1 = 0;
|
||||
this->collisionLayer = 1;
|
||||
UpdateSpriteForCollisionLayer(this);
|
||||
sub_0807DD64(this);
|
||||
sub_08063F20(this);
|
||||
}
|
||||
|
||||
void sub_08064044(void)
|
||||
{
|
||||
gScreenTransition.unk = 1;
|
||||
void sub_08063F20(Entity* this) {
|
||||
sub_0807DDAC(this, 0);
|
||||
sub_0807DDE4(this);
|
||||
GetNextFrame(this);
|
||||
if (this->interactType != 0) {
|
||||
this->action++;
|
||||
this->interactType = 0;
|
||||
InitializeAnimation(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)) + *(s8*)&this->field_0x70);
|
||||
sub_08064428(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08064050(Entity *arg0, struct_08064050 *arg1)
|
||||
{
|
||||
u32 unk;
|
||||
|
||||
arg1->unk2 = 0;
|
||||
switch (arg0->entityType.parameter) {
|
||||
case 0x11:
|
||||
arg1->unk2 = 1;
|
||||
break;
|
||||
case 0x12:
|
||||
arg1->unk2 = 2;
|
||||
break;
|
||||
case 0x13:
|
||||
arg1->unk2 = 3;
|
||||
}
|
||||
void sub_08063F78(Entity* this) {
|
||||
if ((gTextBox.doTextBox & 0x7f) == 0) {
|
||||
this->action = this->action - 1;
|
||||
InitializeAnimation(this, (this->animationState >> 1) + 4 + *(s8*)&this->field_0x70);
|
||||
}
|
||||
}
|
||||
|
||||
void Guard_Head(Entity* this) {
|
||||
u8 bVar1;
|
||||
u32 uVar2;
|
||||
u32 pbVar3;
|
||||
u32 uVar4;
|
||||
u32 pbVar5;
|
||||
|
||||
uVar2 = this->frames.all & 0x3f;
|
||||
pbVar5 = (this->frameIndex & 0x3f);
|
||||
uVar4 = this->frameSpriteSettings & 0x3f;
|
||||
if ((this->entityType).subtype == 0x15) {
|
||||
if ((this->frameIndex & 0x40) != 0) {
|
||||
pbVar5 = pbVar5 + 0x21;
|
||||
pbVar3 = 0xffffffff;
|
||||
uVar4 = 0;
|
||||
} else {
|
||||
pbVar3 = (uVar2 + 0x19);
|
||||
if ((this->frameSpriteSettings & 0x3f) != 0) {
|
||||
uVar4 += 0x1f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pbVar3 = (uVar2 + 0x46);
|
||||
pbVar5 = pbVar5 + 0x2d;
|
||||
if ((this->frameSpriteSettings & 0x3f) != 0) {
|
||||
uVar4 += 0x4c;
|
||||
}
|
||||
}
|
||||
uVar4--;
|
||||
SetExtraSpriteFrame(this, 0, pbVar3);
|
||||
SetExtraSpriteFrame(this, 1, pbVar5);
|
||||
SetExtraSpriteFrame(this, 2, uVar4);
|
||||
SetSpriteSubEntryOffsetData1(this, 1, 0);
|
||||
SetSpriteSubEntryOffsetData2(this, 1, 2);
|
||||
sub_0807000C(this);
|
||||
}
|
||||
|
||||
void sub_08064030(Entity* arg0, Entity* arg1) {
|
||||
*(u32*)&arg1->animationState = (-gRoomVars.greatFairyState | gRoomVars.greatFairyState) >> 0x1f;
|
||||
}
|
||||
|
||||
void sub_08064044(void) {
|
||||
gScreenTransition.unk = 1;
|
||||
}
|
||||
|
||||
void sub_08064050(Entity* arg0, struct_08064050* arg1) {
|
||||
u32 unk;
|
||||
|
||||
arg1->unk2 = 0;
|
||||
switch (arg0->entityType.parameter) {
|
||||
case 0x11:
|
||||
arg1->unk2 = 1;
|
||||
break;
|
||||
case 0x12:
|
||||
arg1->unk2 = 2;
|
||||
break;
|
||||
case 0x13:
|
||||
arg1->unk2 = 3;
|
||||
}
|
||||
}
|
||||
+19
-15
@@ -4,6 +4,7 @@
|
||||
#include "npc.h"
|
||||
#include "textbox.h"
|
||||
#include "link.h"
|
||||
#include "room.h"
|
||||
#include "structures.h"
|
||||
|
||||
typedef struct {
|
||||
@@ -34,10 +35,16 @@ extern void sub_0800451C(Entity*);
|
||||
extern void sub_08078784(Entity*, u32);
|
||||
extern void sub_0807DEDC(Entity*, u32, u32, u32);
|
||||
|
||||
typedef struct {
|
||||
s16 x;
|
||||
s16 y;
|
||||
} Coords16;
|
||||
|
||||
extern Coords16 gUnk_0810A66C[];
|
||||
extern s8* gUnk_0810A918[];
|
||||
|
||||
extern void (*const gUnk_0810AA24[])(Entity*);
|
||||
extern u32 gUnk_0810AA30[];
|
||||
extern u32** gUnk_0810A66C;
|
||||
extern u32 gUnk_0810A918[];
|
||||
extern struct_02033280 gUnk_02033280;
|
||||
|
||||
void Postman(Entity* this) {
|
||||
@@ -208,21 +215,18 @@ void sub_080606D8(Entity* this)
|
||||
ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void sub_08060700(Entity *arg0, u32 arg1)
|
||||
void sub_08060700(Entity *entity, u32 arg1)
|
||||
{
|
||||
sub_0807DEDC(arg0,arg1,
|
||||
gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginX],
|
||||
gUnk_0810A918[gUnk_0810A66C[arg0->field_0x68.HALF.HI][arg0->field_0x68.HALF.LO] * 4 + gRoomControls.roomOriginY + 2]);
|
||||
gUnk_02033280.unk |= 1;
|
||||
}
|
||||
#endif
|
||||
NAKED void sub_08060700(Entity *arg0, u32 arg1) {
|
||||
asm(".include \"asm/non_matching/postman/sub_08060700.inc\"");
|
||||
s8* var0 = gUnk_0810A918[(s8)entity->field_0x68.HALF.LO];
|
||||
Coords16* coords = &gUnk_0810A66C[var0[(s8)entity->field_0x68.HALF.HI]];
|
||||
u32 x = coords->x + gRoomControls.roomOriginX;
|
||||
u32 y = coords->y + gRoomControls.roomOriginY;
|
||||
sub_0807DEDC(entity, arg1, x, y);
|
||||
gUnk_02033280.unk |= 1;
|
||||
}
|
||||
|
||||
void sub_0806075C(Entity *this)
|
||||
{
|
||||
this->field_0x68.HALF.LO = 0xb;
|
||||
this->field_0x68.HALF.HI = 0xff;
|
||||
}
|
||||
this->field_0x68.HALF.LO = 0xb;
|
||||
this->field_0x68.HALF.HI = 0xff;
|
||||
}
|
||||
|
||||
+6
-13
@@ -156,28 +156,21 @@ void sub_0809F700(Entity* this) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
Entity* sub_0809F770(Entity* this) {
|
||||
Entity* cloud;
|
||||
s32 uVar1;
|
||||
int uVar1;
|
||||
|
||||
cloud = CreateObject(163, 1, 0);
|
||||
if (cloud != NULL) {
|
||||
if (cloud) {
|
||||
PositionEntityOnTop(this, cloud);
|
||||
uVar1 = Random();
|
||||
cloud->x.HALF.HI = ((cloud->x.HALF.HI - 16) + (uVar1 >> 0)) & 31;
|
||||
cloud->y.HALF.HI = ((cloud->y.HALF.HI - 16) + (uVar1 >> 8)) & 31;
|
||||
cloud->animationList = (u8)(uVar1 >> 16) & 3;
|
||||
cloud->direction = 255;
|
||||
cloud->x.HALF.HI += ((uVar1 >> 0) & 31) - 16;
|
||||
cloud->y.HALF.HI += ((uVar1 >> 8) & 31) - 16;
|
||||
cloud->frameIndex = (uVar1 >> 16) & 3;
|
||||
cloud->direction = 0xFF;
|
||||
}
|
||||
return cloud;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
Entity* sub_0809F770(Entity* this) {
|
||||
asm(".include \"asm/non_matching/cloud/sub_0809F770.inc\"");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_0809F7BC(Entity* this) {
|
||||
Entity* cloud;
|
||||
|
||||
+89
-98
@@ -3,6 +3,13 @@
|
||||
#include "functions.h"
|
||||
#include "room.h"
|
||||
|
||||
extern u32 sub_08091DDC(Entity*);
|
||||
extern u32 sub_080002B4(Entity*, u32, u32);
|
||||
extern u32 sub_08007DD6(u32, u32);
|
||||
extern void sub_08017744(Entity*);
|
||||
extern u32 sub_080002B8(Entity*);
|
||||
extern void sub_08091C0C(Entity*);
|
||||
|
||||
typedef struct {
|
||||
u16 field_0x0;
|
||||
u16 field_0x2;
|
||||
@@ -17,6 +24,9 @@ extern void (*const gUnk_081223A8[])(Entity*);
|
||||
extern struct_030010EC gUnk_030010EC[];
|
||||
extern BoundingBox gUnk_080FD310;
|
||||
|
||||
extern const s8 gUnk_081223C8[];
|
||||
extern const u32 gUnk_081223D8[];
|
||||
|
||||
void Minecart(Entity* this) {
|
||||
gUnk_081223A8[this->action](this);
|
||||
this->bitfield = 0;
|
||||
@@ -115,111 +125,92 @@ void sub_080918A4(Entity *this)
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
} struct_081223C8;
|
||||
|
||||
extern struct_081223C8 gUnk_081223C8[];
|
||||
|
||||
extern u32 gUnk_081223D8[];
|
||||
|
||||
void sub_080919AC(Entity *this)
|
||||
{
|
||||
u32 iVar2;
|
||||
u32 uVar3;
|
||||
u32 uVar4;
|
||||
struct_081223C8* temp;
|
||||
u32 iVar2;
|
||||
u32 uVar3;
|
||||
|
||||
gRoomControls.unk5 = 7;
|
||||
if ((gLinkState.flags.all & 0x1000) == 0) {
|
||||
this->action = 1;
|
||||
}
|
||||
else {
|
||||
if ((gLinkEntity.frames.all & 0xf) == 0) {
|
||||
this->flags = this->flags & 0x7f;
|
||||
CopyPosition(this,&gLinkEntity);
|
||||
if ((gLinkEntity.frames.all & 0xf0) == 0x10) {
|
||||
this->spriteOffsetY = 1;
|
||||
}
|
||||
else {
|
||||
this->spriteOffsetY = 0;
|
||||
}
|
||||
gRoomControls.unk5 = 7;
|
||||
if ((gLinkState.flags.all & 0x1000) == 0) {
|
||||
this->action = 1;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
this->flags = this->flags | 0x80;
|
||||
gLinkEntity.nonPlanarMovement = 0;
|
||||
sub_0806F69C(this);
|
||||
CopyPosition(this,&gLinkEntity);
|
||||
gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1;
|
||||
if (!sub_08091DDC(this)) {
|
||||
if ((gScreenTransition.field_0x0 & 0xf) == 0) {
|
||||
PlaySFX(0x138);
|
||||
}
|
||||
|
||||
if (--this->field_0xf == 0xff) {
|
||||
PlaySFX(0x7b);
|
||||
this->field_0xf = 0x3c;
|
||||
if ((gLinkEntity.frames.all & 0xf) == 0) {
|
||||
this->flags = this->flags & 0x7f;
|
||||
CopyPosition(this,&gLinkEntity);
|
||||
if ((gLinkEntity.frames.all & 0xf0) == 0x10) {
|
||||
this->spriteOffsetY = 1;
|
||||
} else {
|
||||
this->spriteOffsetY = 0;
|
||||
}
|
||||
uVar3 = sub_03005800(this, gUnk_081223C8[this->animationState].field_0x0, gUnk_081223C8[this->animationState].field_0x1);
|
||||
iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]);
|
||||
if (iVar2 == 0) {
|
||||
this->direction = this->direction ^ 0x10;
|
||||
this->animationState = this->animationState ^ 2;
|
||||
}
|
||||
else {
|
||||
switch(uVar3) {
|
||||
case 100:
|
||||
this->flags = this->flags & 0xdf;
|
||||
this->damageType = 1;
|
||||
this->field_0x3c = 0x47;
|
||||
this->field_0x40 = 0x44;
|
||||
this->flags2 = 0x80;
|
||||
this->action = 6;
|
||||
sub_08017744(this);
|
||||
gLinkState.jumpStatus = 0x41;
|
||||
gLinkState.flags.all = (gLinkState.flags.all ^ 0x1000) | 0x4000000;
|
||||
gLinkEntity.field_0x20 = 0x20000;
|
||||
gLinkEntity.nonPlanarMovement = 0x200;
|
||||
gLinkEntity.animationState = this->animationState << 1;
|
||||
gLinkEntity.direction = this->direction;
|
||||
gLinkEntity.flags |= 0x80;
|
||||
sub_08004168(this);
|
||||
InitAnimationForceUpdate(this, this->animationState + 0xc);
|
||||
PlaySFX(0x78);
|
||||
PlaySFX(0x139);
|
||||
return;
|
||||
case 0x67:
|
||||
case 0x68:
|
||||
case 0x69:
|
||||
case 0x6a:
|
||||
case 0x6c:
|
||||
case 0x6d:
|
||||
case 0x6e:
|
||||
case 0x6f:
|
||||
if (uVar3 == sub_080002B8()) {
|
||||
sub_08091C0C(this);
|
||||
gLinkEntity.animationState *= 2;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
this->flags = this->flags | 0x80;
|
||||
gLinkEntity.nonPlanarMovement = 0;
|
||||
sub_0806F69C(this);
|
||||
CopyPosition(this,&gLinkEntity);
|
||||
gLinkEntity.spritePriority.b0 = this->spritePriority.b0 - 1;
|
||||
if (!sub_08091DDC(this)) {
|
||||
if ((gScreenTransition.frameCount & 0xf) == 0) {
|
||||
PlaySFX(0x138);
|
||||
}
|
||||
|
||||
if (--this->field_0xf == 0xff) {
|
||||
PlaySFX(0x7b);
|
||||
this->field_0xf = 0x3c;
|
||||
}
|
||||
|
||||
uVar3 = sub_080002B4(this, gUnk_081223C8[this->animationState * 2], gUnk_081223C8[this->animationState * 2 + 1]);
|
||||
iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]);
|
||||
if (iVar2 == 0) {
|
||||
this->direction = this->direction ^ 0x10;
|
||||
this->animationState = this->animationState ^ 2;
|
||||
} else {
|
||||
switch (uVar3) {
|
||||
case 0x64:
|
||||
this->flags = this->flags & 0xdf;
|
||||
this->damageType = 1;
|
||||
this->field_0x3c = 0x47;
|
||||
this->field_0x40 = 0x44;
|
||||
this->flags2 = 0x80;
|
||||
this->action = 6;
|
||||
sub_08017744(this);
|
||||
gLinkState.jumpStatus = 0x41;
|
||||
gLinkState.flags.all = (gLinkState.flags.all ^ 0x1000) | 0x4000000;
|
||||
gLinkEntity.field_0x20 = 0x20000;
|
||||
gLinkEntity.nonPlanarMovement = 0x200;
|
||||
gLinkEntity.animationState = this->animationState << 1;
|
||||
gLinkEntity.direction = this->direction;
|
||||
gLinkEntity.flags |= 0x80;
|
||||
sub_08004168(this);
|
||||
InitAnimationForceUpdate(this, this->animationState + 0xc);
|
||||
PlaySFX(0x78);
|
||||
PlaySFX(0x139);
|
||||
return;
|
||||
case 0x67:
|
||||
case 0x68:
|
||||
case 0x69:
|
||||
case 0x6a:
|
||||
case 0x6c:
|
||||
case 0x6d:
|
||||
case 0x6e:
|
||||
case 0x6f:
|
||||
if (uVar3 == sub_080002B8(this)) {
|
||||
sub_08091C0C(this);
|
||||
gLinkEntity.animationState = this->animationState << 1;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gLinkEntity.animationState = this->animationState << 1;
|
||||
if (this->animIndex == this->animationState) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
else {
|
||||
InitAnimationForceUpdate(this, this->animationState);
|
||||
}
|
||||
}
|
||||
gLinkEntity.animationState *= 2;
|
||||
if (this->animIndex == this->animationState) {
|
||||
UpdateAnimationSingleFrame(this);
|
||||
}
|
||||
else {
|
||||
InitAnimationForceUpdate(this, this->animationState);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_080919AC(Entity *this) {
|
||||
asm(".include \"asm/non_matching/minecart/sub_080919AC.inc\"");
|
||||
}
|
||||
#endif
|
||||
Executable
+169
@@ -0,0 +1,169 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "functions.h"
|
||||
#include "flags.h"
|
||||
#include "link.h"
|
||||
#include "room.h"
|
||||
|
||||
extern void (*const gUnk_0811F090[])(Entity*);
|
||||
extern void (*const gUnk_0811F0A8[])(Entity*);
|
||||
|
||||
extern BoundingBox gUnk_080FD338; // TODO: should be const
|
||||
extern BoundingBox gUnk_080FD340; // TODO: should be const
|
||||
|
||||
extern u32 sub_08016A30(Entity*);
|
||||
extern u32 sub_080001DA(u32, u32);
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
extern void sub_08078930(Entity*);
|
||||
extern void sub_08082824(Entity*);
|
||||
extern u32 sub_080002B8(Entity*);
|
||||
extern void sub_08082850(Entity*, Entity*);
|
||||
extern void sub_08082608(Entity*);
|
||||
|
||||
void Pot(Entity* this) {
|
||||
gUnk_0811F090[this->action](this);
|
||||
this->bitfield = 0;
|
||||
}
|
||||
|
||||
void sub_0808222C(Entity* this) {
|
||||
if (this->entityType.parameter == 1 && CheckFlags(this->field_0x86)) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
this->action = 1;
|
||||
this->boundingBox = &gUnk_080FD338;
|
||||
this->nonPlanarMovement = 0x80;
|
||||
this->y.HALF.HI += 3;
|
||||
this->possibleBool = 0;
|
||||
this->flags |= 0x80;
|
||||
this->currentHealth = 1;
|
||||
this->field_0x3c = 7;
|
||||
this->damageType = 0x6E;
|
||||
this->flags2 = 0x84;
|
||||
this->field_0x1c = 0x12;
|
||||
if (this->collisionLayer == 0) {
|
||||
sub_08016A30(this);
|
||||
}
|
||||
|
||||
this->field_0x70.HALF.LO = sub_080001DA(COORD_TO_TILE(this), this->collisionLayer);
|
||||
if ((u16)this->field_0x70.HALF.LO == 0x4000) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
SetTile(0x4000, COORD_TO_TILE(this), this->collisionLayer);
|
||||
InitializeAnimation(this, 5);
|
||||
}
|
||||
|
||||
void sub_08082310(Entity* this) {
|
||||
u32 tileType;
|
||||
u32 var0 = this->bitfield & 0x7F;
|
||||
switch (var0) {
|
||||
case 0x13:
|
||||
this->action = 3;
|
||||
this->previousActionFlag = 0;
|
||||
break;
|
||||
case 0x1D:
|
||||
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
|
||||
this->action = 5;
|
||||
this->field_0x20 = 0x2A000;
|
||||
this->spriteOffsetY = 0;
|
||||
this->spriteSettings.b.shadow = 1;
|
||||
this->spritePriority.b1 = 3;
|
||||
this->flags &= 0x7F;
|
||||
sub_08082824(this);
|
||||
break;
|
||||
default:
|
||||
tileType = GetTileTypeByEntity(this);
|
||||
if (tileType != 0x4000) {
|
||||
switch (tileType) {
|
||||
case 0x4004:
|
||||
case 0x4003:
|
||||
case 0x4002:
|
||||
case 0x4001:
|
||||
this->direction = (tileType - 0x4001) * 8;
|
||||
this->actionDelay = 32;
|
||||
this->action = 4;
|
||||
if (gLinkState.flags.all & 0x80) {
|
||||
this->nonPlanarMovement >>= 1;
|
||||
this->actionDelay = 64;
|
||||
}
|
||||
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
|
||||
sub_08004488(0x10F);
|
||||
break;
|
||||
case 0x4067:
|
||||
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
|
||||
DeleteThisEntity();
|
||||
break;
|
||||
default:
|
||||
if (sub_080002B8(this) == 13) {
|
||||
CreateFx(this, 0, 0);
|
||||
} else if (tileType == 0x4005) {
|
||||
gLinkState.field_0xab = 4;
|
||||
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
|
||||
}
|
||||
sub_08082850(this, NULL);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
sub_08078930(this);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_080824F8(Entity* this) {
|
||||
gUnk_0811F0A8[this->previousActionFlag](this);
|
||||
}
|
||||
|
||||
void sub_08082510(Entity* this) {
|
||||
this->flags |= 0x80;
|
||||
this->boundingBox = &gUnk_080FD340;
|
||||
this->field_0x3c = 7;
|
||||
this->damageType = 1;
|
||||
this->flags2 = gLinkEntity.flags2;
|
||||
this->spriteOffsetY = 0;
|
||||
SetTile((u16)this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
|
||||
this->previousActionFlag++;
|
||||
}
|
||||
|
||||
|
||||
void nullsub_511(Entity* this) {
|
||||
}
|
||||
|
||||
void sub_08082588(Entity* this) {
|
||||
this->spritePriority.b1 = 3;
|
||||
}
|
||||
|
||||
void sub_0808259C(Entity* this) {
|
||||
switch (sub_080043E8(this)) {
|
||||
case 2:
|
||||
CreateFx(this, 11, 0);
|
||||
break;
|
||||
case 1:
|
||||
CreateFx(this, 0, 0);
|
||||
break;
|
||||
case 3:
|
||||
CreateFx(this, 12, 0);
|
||||
break;
|
||||
default:
|
||||
sub_08082850(this, &gLinkEntity);
|
||||
return;
|
||||
}
|
||||
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_080825E8(Entity* this) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_080825F0(Entity* this) {
|
||||
if (gLinkState.heldObject == 0) {
|
||||
sub_08082608(this);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_08082608(Entity* this) {
|
||||
this->action = 1;
|
||||
this->previousActionFlag = 0;
|
||||
}
|
||||
+20
-4
@@ -12,8 +12,8 @@ extern void SetTile(u32, u32, u32);
|
||||
|
||||
extern void (*const gUnk_081205D0[])(Entity*);
|
||||
|
||||
extern s8 gUnk_080B4488[][2];
|
||||
extern u16 gUnk_081205E0[];
|
||||
extern s8 gUnk_080B4488[];
|
||||
|
||||
void Railtrack(Entity* this) {
|
||||
gUnk_081205D0[this->action](this);
|
||||
@@ -135,14 +135,30 @@ void sub_0808543C(Entity *this)
|
||||
u32 uVar2;
|
||||
s8 temp;
|
||||
|
||||
temp = gUnk_080B4488[(this->animationState >> 1) << 1];
|
||||
temp = gUnk_080B4488[this->animationState / 2][0];
|
||||
uVar2 = COORD_TO_TILE(this);
|
||||
SetTile(this->field_0x74, uVar2 - temp, this->collisionLayer);
|
||||
SetTile(this->field_0x76, uVar2, this->collisionLayer);
|
||||
SetTile(this->field_0x78.HWORD, uVar2 + temp, this->collisionLayer);
|
||||
}
|
||||
|
||||
NAKED
|
||||
u32 sub_080854A8(Entity *this) {
|
||||
asm(".include \"asm/non_matching/railtrack/sub_080854A8.inc\"");
|
||||
u16 var0;
|
||||
u16* var1;
|
||||
s8* var2;
|
||||
|
||||
var0 = gUnk_081205E0[this->animationState / 2];
|
||||
var2 = gUnk_080B4488[this->animationState / 2];
|
||||
var1 = (u16 *)this->field_0x70.WORD;
|
||||
if (var0 != *(var1 - var2[0])) {
|
||||
return TRUE;
|
||||
}
|
||||
if (var0 != *var1) {
|
||||
return TRUE;
|
||||
}
|
||||
if (var0 != *(var1 + var2[0])) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
Reference in New Issue
Block a user