Merge remote-tracking branch 'upstream/master' into enumasm

This commit is contained in:
Tal Hayon
2022-05-14 20:55:51 +03:00
39 changed files with 749 additions and 2071 deletions
-946
View File
@@ -1,946 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_08018500
sub_08018500: @ 0x08018500
push {r4, lr}
ldr r4, _08018550 @ =gUnk_02033AB8
adds r3, r4, #4
ldr r0, _08018554 @ =gUnk_080B3D14
ldrb r1, [r4]
lsls r1, r1, #1
adds r1, r1, r0
ldrb r2, [r4, #1]
lsls r0, r2, #1
adds r0, r0, r2
ldrh r1, [r1]
adds r0, r0, r1
movs r2, #0
_0801851A:
strh r0, [r3]
adds r0, #1
adds r3, #2
adds r2, #1
cmp r2, #2
bls _0801851A
ldrb r1, [r4]
lsls r0, r1, #2
adds r0, r0, r1
ldr r1, _08018558 @ =0x00000C81
adds r0, r0, r1
movs r2, #0
adds r1, r4, #0
adds r1, #0xa
_08018536:
strh r0, [r3]
adds r0, #1
adds r3, #2
adds r2, #1
cmp r2, #4
bls _08018536
movs r0, #5
bl sub_08018690
movs r0, #0
strb r0, [r4, #2]
pop {r4, pc}
.align 2, 0
_08018550: .4byte gUnk_02033AB8
_08018554: .4byte gUnk_080B3D14
_08018558: .4byte 0x00000C81
thumb_func_start sub_0801855C
sub_0801855C: @ 0x0801855C
push {r4, r5, r6, lr}
ldr r4, _08018570 @ =gUnk_02033AB8
adds r0, r4, #0
movs r1, #0x14
bl MemClear
adds r5, r4, #0
ldr r4, _08018574 @ =gUnk_080B3D20
movs r6, #0
b _0801858C
.align 2, 0
_08018570: .4byte gUnk_02033AB8
_08018574: .4byte gUnk_080B3D20
_08018578:
adds r0, r4, #0
bl sub_080185B4
cmp r0, #0
beq _08018584
ldrb r6, [r5, #3]
_08018584:
ldrb r0, [r5, #3]
adds r0, #1
strb r0, [r5, #3]
adds r4, #4
_0801858C:
ldrb r0, [r4]
cmp r0, #0xff
bne _08018578
strb r6, [r5, #3]
ldrb r0, [r5, #3]
lsls r0, r0, #2
ldr r1, _080185B0 @ =gUnk_080B3D20
adds r4, r0, r1
ldrb r0, [r4, #2]
strb r0, [r5]
ldrb r0, [r4, #3]
strb r0, [r5, #1]
adds r0, r6, #1
strb r0, [r5, #3]
bl sub_08018500
pop {r4, r5, r6, pc}
.align 2, 0
_080185B0: .4byte gUnk_080B3D20
thumb_func_start sub_080185B4
sub_080185B4: @ 0x080185B4
push {lr}
adds r2, r0, #0
ldrb r0, [r2]
cmp r0, #0xff
bne _080185C2
movs r0, #0
b _080185F6
_080185C2:
cmp r0, #0xfe
bne _080185D4
ldrb r0, [r2, #1]
bl GetInventoryValue
cmp r0, #0
beq _080185F6
movs r0, #1
b _080185F6
_080185D4:
cmp r0, #0xfd
beq _080185F0
ldr r1, _080185EC @ =gLocalFlagBanks
ldrb r0, [r2]
lsls r0, r0, #1
adds r0, r0, r1
ldrh r0, [r0]
ldrb r1, [r2, #1]
bl CheckLocalFlagByBank
b _080185F6
.align 2, 0
_080185EC: .4byte gLocalFlagBanks
_080185F0:
ldrb r0, [r2, #1]
bl CheckKinstoneFused
_080185F6:
pop {pc}
thumb_func_start sub_080185F8
sub_080185F8: @ 0x080185F8
push {r4, r5, lr}
ldr r5, _08018624 @ =gUnk_02033AB8
ldrb r0, [r5, #3]
lsls r0, r0, #2
ldr r1, _08018628 @ =gUnk_080B3D20
adds r4, r0, r1
adds r0, r4, #0
bl sub_080185B4
cmp r0, #0
beq _08018620
ldrb r0, [r4, #2]
strb r0, [r5]
ldrb r0, [r4, #3]
strb r0, [r5, #1]
ldrb r0, [r5, #3]
adds r0, #1
strb r0, [r5, #3]
bl sub_08018500
_08018620:
pop {r4, r5, pc}
.align 2, 0
_08018624: .4byte gUnk_02033AB8
_08018628: .4byte gUnk_080B3D20
thumb_func_start GenerateAreaHint
GenerateAreaHint: @ 0x0801862C
push {r4, r5, lr}
ldr r1, _0801864C @ =gPlayerState
movs r2, #0
movs r0, #0x16
strb r0, [r1, #0xc]
ldr r5, _08018650 @ =gRoomTransition
adds r0, r5, #0
.ifdef JP
adds r0, #0x34
.else
.ifdef EU
adds r0, #0x34
.else
adds r0, #0x35
.endif
.endif
strb r2, [r0]
ldr r4, _08018654 @ =gUnk_02033AB8
ldrb r0, [r4]
cmp r0, #0xff
bne _08018658
ldrh r0, [r4, #4]
strh r0, [r5, #0x36]
b _0801868C
.align 2, 0
_0801864C: .4byte gPlayerState
_08018650: .4byte gRoomTransition
_08018654: .4byte gUnk_02033AB8
_08018658:
ldrb r0, [r4, #2]
lsls r0, r0, #1
adds r1, r4, #4
adds r0, r0, r1
ldrh r0, [r0]
strh r0, [r5, #0x36]
ldrb r0, [r4, #2]
adds r0, #1
strb r0, [r4, #2]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #7
bls _0801868C
movs r0, #0
strb r0, [r4, #2]
movs r0, #8
bl sub_08018690
ldrh r0, [r4, #4]
ldrh r5, [r5, #0x36]
cmp r0, r5
bne _0801868C
adds r1, r0, #0
ldrh r0, [r4, #0x12]
strh r0, [r4, #4]
strh r1, [r4, #0x12]
_0801868C:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08018690
sub_08018690: @ 0x08018690
push {r4, r5, r6, lr}
adds r6, r1, #0
subs r4, r0, #1
cmp r4, #0
beq _080186BC
lsls r0, r4, #1
adds r5, r0, r6
_0801869E:
bl Random
adds r1, r4, #1
bl __modsi3
ldrh r2, [r5]
lsls r0, r0, #1
adds r0, r0, r6
ldrh r1, [r0]
strh r1, [r5]
strh r2, [r0]
subs r5, #2
subs r4, #1
cmp r4, #0
bne _0801869E
_080186BC:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start sub_080186C0
sub_080186C0: @ 0x080186C0
ldr r3, _080186D0 @ =gArea
adds r2, r3, #0
adds r2, #0x28
movs r1, #0xff
strb r1, [r2]
strh r0, [r3, #0x2c]
bx lr
.align 2, 0
_080186D0: .4byte gArea
thumb_func_start sub_080186D4
sub_080186D4: @ 0x080186D4
push {lr}
ldr r0, _080186E8 @ =gArea
adds r0, #0x28
ldrb r0, [r0]
cmp r0, #0xff
bne _080186E4
bl sub_0801855C
_080186E4:
pop {pc}
.align 2, 0
_080186E8: .4byte gArea
thumb_func_start sub_080186EC
sub_080186EC: @ 0x080186EC
push {r4, r5, lr}
movs r5, #0
ldr r4, _0801870C @ =gUnk_080C9CBC
_080186F2:
ldrb r0, [r4, #3]
cmp r0, #8
bne _08018700
ldrb r1, [r4, #4]
adds r0, r5, #0
bl sub_08018738
_08018700:
adds r4, #8
adds r5, #1
cmp r5, #0x64
bls _080186F2
pop {r4, r5, pc}
.align 2, 0
_0801870C: .4byte gUnk_080C9CBC
thumb_func_start sub_08018710
sub_08018710: @ 0x08018710
push {r4, r5, r6, lr}
adds r6, r0, #0
movs r5, #0
ldr r4, _08018734 @ =gUnk_080C9CBC
_08018718:
ldrb r0, [r4, #3]
cmp r0, #8
bne _0801872A
ldrb r1, [r4, #4]
cmp r6, r1
beq _0801872A
adds r0, r5, #0
bl sub_08018738
_0801872A:
adds r4, #8
adds r5, #1
cmp r5, #0x64
bls _08018718
pop {r4, r5, r6, pc}
.align 2, 0
_08018734: .4byte gUnk_080C9CBC
thumb_func_start sub_08018738
sub_08018738: @ 0x08018738
push {r4, lr}
adds r2, r0, #0
adds r4, r1, #0
lsls r0, r4, #2
adds r0, r0, r4
lsls r0, r0, #2
ldr r1, _08018764 @ =gUnk_080FE320
adds r0, r0, r1
ldr r1, _08018768 @ =gRoomControls
ldrh r0, [r0, #2]
ldrh r1, [r1, #4]
cmp r0, r1
bne _08018760
adds r0, r2, #0
bl CheckKinstoneFused
adds r1, r0, #0
adds r0, r4, #0
bl sub_0801876C
_08018760:
pop {r4, pc}
.align 2, 0
_08018764: .4byte gUnk_080FE320
_08018768: .4byte gRoomControls
thumb_func_start sub_0801876C
sub_0801876C: @ 0x0801876C
push {r4, r5, lr}
adds r2, r0, #0
adds r4, r1, #0
lsls r0, r2, #2
adds r0, r0, r2
lsls r0, r0, #2
ldr r1, _08018790 @ =gUnk_080FE320
adds r5, r0, r1
ldrb r0, [r5]
cmp r0, #0x1c
bls _08018784
b _080189E4
_08018784:
lsls r0, r0, #2
ldr r1, _08018794 @ =_08018798
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08018790: .4byte gUnk_080FE320
_08018794: .4byte _08018798
_08018798: @ jump table
.4byte _080189E4 @ case 0
.4byte _08018838 @ case 1
.4byte _0801882A @ case 2
.4byte _08018858 @ case 3
.4byte _08018878 @ case 4
.4byte _08018886 @ case 5
.4byte _0801880C @ case 6
.4byte _08018894 @ case 7
.4byte _080188E0 @ case 8
.4byte _08018930 @ case 9
.4byte _080189E4 @ case 10
.4byte _080188FE @ case 11
.4byte _080189E4 @ case 12
.4byte _080189E4 @ case 13
.4byte _080189E4 @ case 14
.4byte _080189B4 @ case 15
.4byte _080189E4 @ case 16
.4byte _080189D0 @ case 17
.4byte _080189E4 @ case 18
.4byte _080189E4 @ case 19
.4byte _080189E4 @ case 20
.4byte _080189E4 @ case 21
.4byte _080189E4 @ case 22
.4byte _080189E4 @ case 23
.4byte _080189A4 @ case 24
.4byte _080188B8 @ case 25
.4byte _080189E4 @ case 26
.4byte _080189E4 @ case 27
.4byte _080189E4 @ case 28
_0801880C:
cmp r4, #0
beq _08018812
b _080189E4
_08018812:
ldrh r0, [r5, #8]
lsrs r0, r0, #4
movs r2, #0x3f
ands r0, r2
ldrh r1, [r5, #0xa]
lsrs r1, r1, #4
ands r1, r2
lsls r1, r1, #6
orrs r0, r1
bl sub_08018AB4
b _080189E4
_0801882A:
cmp r4, #0
bne _08018830
b _080189E4
_08018830:
adds r0, r2, #0
bl sub_08018BB4
b _080189E4
_08018838:
cmp r4, #0
bne _0801883E
b _080189E4
_0801883E:
ldrh r0, [r5, #0x12]
bl CheckGlobalFlag
cmp r0, #0
beq _0801884A
b _080189E4
_0801884A:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018854 @ =gUnk_080FEC28
b _080188A4
.align 2, 0
_08018854: .4byte gUnk_080FEC28
_08018858:
cmp r4, #0
bne _0801885E
b _080189E4
_0801885E:
ldrh r0, [r5, #0x12]
bl GetInventoryValue
cmp r0, #0
beq _0801886A
b _080189E4
_0801886A:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018874 @ =gUnk_080FEBE8
b _080188A4
.align 2, 0
_08018874: .4byte gUnk_080FEBE8
_08018878:
cmp r4, #0
beq _0801887E
b _080189E4
_0801887E:
adds r0, r2, #0
bl sub_08018A58
b _080189E4
_08018886:
cmp r4, #0
bne _0801888C
b _080189E4
_0801888C:
adds r0, r2, #0
bl sub_08018B50
b _080189E4
_08018894:
cmp r4, #0
beq _0801889A
b _080189E4
_0801889A:
ldrb r0, [r5, #1]
cmp r0, #0x80
beq _080188B0
lsls r0, r0, #4
ldr r1, _080188AC @ =gUnk_080FECC8
_080188A4:
adds r0, r0, r1
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080188AC: .4byte gUnk_080FECC8
_080188B0:
adds r0, r2, #0
bl sub_080189EC
b _080189E4
_080188B8:
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _080188DC @ =gUnk_080FED18
adds r0, r0, r1
bl LoadRoomEntity
adds r2, r0, #0
cmp r2, #0
bne _080188CC
b _080189E4
_080188CC:
rsbs r0, r4, #0
orrs r0, r4
asrs r0, r0, #0x1f
movs r1, #2
ands r0, r1
strb r0, [r2, #0xa]
b _080189E4
.align 2, 0
_080188DC: .4byte gUnk_080FED18
_080188E0:
cmp r4, #0
bne _080188E6
b _080189E4
_080188E6:
movs r0, #0xb4
lsls r0, r0, #1
ldrh r1, [r5, #8]
lsrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
ldrh r2, [r5, #0xa]
lsrs r2, r2, #4
ands r2, r3
lsls r2, r2, #6
orrs r1, r2
b _0801899C
_080188FE:
cmp r4, #0
beq _080189E4
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018924 @ =gUnk_080FED58
adds r0, r0, r1
bl LoadRoomEntity
ldr r2, _08018928 @ =gRoomVars
ldrb r0, [r5, #1]
lsls r0, r0, #2
adds r2, #0x8c
adds r2, r0, r2
ldr r1, _0801892C @ =gUnk_080FED98
adds r0, r0, r1
ldr r0, [r0]
str r0, [r2]
b _080189E4
.align 2, 0
_08018924: .4byte gUnk_080FED58
_08018928: .4byte gRoomVars
_0801892C: .4byte gUnk_080FED98
_08018930:
cmp r4, #0
beq _080189E4
ldrb r0, [r5, #1]
lsls r0, r0, #4
ldr r1, _08018974 @ =gUnk_080FEE78
adds r0, r0, r1
bl LoadRoomEntity
adds r2, r0, #0
cmp r2, #0
beq _08018958
ldr r0, _08018978 @ =gRoomControls
ldrh r1, [r0, #6]
ldrh r3, [r5, #8]
adds r1, r1, r3
strh r1, [r2, #0x38]
ldrh r0, [r0, #8]
ldrh r1, [r5, #0xa]
adds r0, r0, r1
strh r0, [r2, #0x3a]
_08018958:
ldrb r0, [r5, #1]
cmp r0, #0
bne _0801897C
ldrh r1, [r5, #8]
lsrs r1, r1, #4
movs r2, #0x3f
ands r1, r2
ldrh r0, [r5, #0xa]
lsrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r1, r0
movs r0, #0x8d
b _0801899C
.align 2, 0
_08018974: .4byte gUnk_080FEE78
_08018978: .4byte gRoomControls
_0801897C:
ldrh r4, [r5, #8]
lsrs r4, r4, #4
movs r1, #0x3f
ands r4, r1
ldrh r0, [r5, #0xa]
lsrs r0, r0, #4
ands r0, r1
lsls r0, r0, #6
orrs r4, r0
subs r1, r4, #1
movs r0, #0x8c
movs r2, #1
bl SetTileType
movs r0, #0x8e
adds r1, r4, #0
_0801899C:
movs r2, #1
bl SetTileType
b _080189E4
_080189A4:
cmp r4, #0
beq _080189E4
ldr r0, _080189B0 @ =gUnk_080FEE18
bl LoadRoomEntityList
b _080189E4
.align 2, 0
_080189B0: .4byte gUnk_080FEE18
_080189B4:
cmp r4, #0
beq _080189C4
ldr r0, _080189C0 @ =gUnk_080FEE58
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080189C0: .4byte gUnk_080FEE58
_080189C4:
ldr r0, _080189CC @ =gUnk_080FEE48
bl LoadRoomEntity
b _080189E4
.align 2, 0
_080189CC: .4byte gUnk_080FEE48
_080189D0:
cmp r4, #0
beq _080189E4
movs r0, #0x80
lsls r0, r0, #1
.ifdef JP
movs r1, #0x77
.else
.ifdef EU
movs r1, #0x77
.else
.ifdef DEMO_JP
movs r1, #0x77 @ TODO deduplicate
.else
movs r1, #0x79
.endif
.endif
.endif
bl SetLocalFlagByBank
ldr r0, _080189E8 @ =gUnk_080FEE38
bl LoadRoomEntityList
_080189E4:
pop {r4, r5, pc}
.align 2, 0
_080189E8: .4byte gUnk_080FEE38
thumb_func_start sub_080189EC
sub_080189EC: @ 0x080189EC
push {r4, r5, r6, lr}
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08018A48 @ =gUnk_080FE320
adds r1, r1, r0
ldrh r0, [r1, #8]
lsrs r6, r0, #4
movs r2, #0x3f
ands r6, r2
ldrh r0, [r1, #0xa]
lsrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r6, r0
subs r6, #0x42
movs r5, #0
_08018A0E:
ldr r1, _08018A4C @ =0x000001DF
adds r0, r5, r1
adds r1, r6, r5
movs r2, #2
bl SetTileType
adds r5, #1
cmp r5, #3
bls _08018A0E
adds r6, #0x40
movs r5, #0
_08018A24:
ldr r1, _08018A50 @ =0x000001E3
adds r0, r5, r1
adds r4, r6, r5
adds r1, r4, #0
movs r2, #2
bl SetTileType
ldr r1, _08018A54 @ =0x000001DB
adds r0, r5, r1
adds r1, r4, #0
movs r2, #1
bl SetTileType
adds r5, #1
cmp r5, #3
bls _08018A24
pop {r4, r5, r6, pc}
.align 2, 0
_08018A48: .4byte gUnk_080FE320
_08018A4C: .4byte 0x000001DF
_08018A50: .4byte 0x000001E3
_08018A54: .4byte 0x000001DB
thumb_func_start sub_08018A58
sub_08018A58: @ 0x08018A58
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08018AAC @ =gUnk_080FE320
adds r1, r1, r0
ldrh r0, [r1, #8]
lsrs r5, r0, #4
movs r2, #0x3f
ands r5, r2
ldrh r0, [r1, #0xa]
lsrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r5, r0
subs r5, #0x43
ldr r6, _08018AB0 @ =0x00000232
movs r0, #0
_08018A80:
movs r4, #0
movs r1, #0x40
adds r1, r1, r5
mov r8, r1
adds r7, r0, #1
_08018A8A:
adds r0, r6, #0
adds r6, #1
adds r1, r5, r4
movs r2, #1
bl SetTileType
adds r4, #1
cmp r4, #6
bls _08018A8A
mov r5, r8
adds r0, r7, #0
cmp r0, #3
bls _08018A80
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08018AAC: .4byte gUnk_080FE320
_08018AB0: .4byte 0x00000232
thumb_func_start sub_08018AB4
sub_08018AB4: @ 0x08018AB4
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
sub sp, #4
adds r5, r0, #0
movs r3, #0xf4
lsls r3, r3, #1
movs r7, #0xfa
lsls r7, r7, #1
movs r0, #0
_08018ACA:
movs r6, #0
movs r1, #0x40
adds r1, r1, r5
mov r8, r1
adds r0, #1
mov sb, r0
adds r4, r5, #0
subs r4, #0x40
_08018ADA:
adds r0, r3, #0
adds r3, #1
adds r1, r5, r6
movs r2, #1
str r3, [sp]
bl SetTileType
adds r0, r7, #0
adds r7, #1
adds r1, r4, #0
movs r2, #2
bl SetTileType
adds r4, #1
adds r6, #1
ldr r3, [sp]
cmp r6, #3
bls _08018ADA
mov r5, r8
mov r0, sb
cmp r0, #2
bls _08018ACA
add sp, #4
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_08018B10
sub_08018B10: @ 0x08018B10
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r6, r0, #0
movs r0, #0xf8
lsls r0, r0, #1
mov r8, r0
movs r7, #0xfe
lsls r7, r7, #1
movs r5, #0
adds r4, r6, #0
subs r4, #0x40
_08018B28:
mov r0, r8
movs r1, #1
add r8, r1
adds r1, r6, r5
movs r2, #1
bl SetTileType
adds r0, r7, #0
adds r7, #1
adds r1, r4, #0
movs r2, #2
bl SetTileType
adds r4, #1
adds r5, #1
cmp r5, #3
bls _08018B28
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
thumb_func_start sub_08018B50
sub_08018B50: @ 0x08018B50
push {r4, r5, r6, r7, lr}
sub sp, #4
lsls r1, r0, #2
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _08018BAC @ =gUnk_080FE320
adds r2, r1, r0
ldrb r1, [r2, #1]
movs r0, #0x80
ands r0, r1
ldr r3, _08018BB0 @ =0x00000219
cmp r0, #0
bne _08018B6C
subs r3, #0x19
_08018B6C:
ldrh r0, [r2, #8]
lsrs r5, r0, #4
movs r1, #0x3f
ands r5, r1
ldrh r0, [r2, #0xa]
lsrs r0, r0, #4
ands r0, r1
lsls r0, r0, #6
orrs r5, r0
subs r5, #0x82
movs r0, #0
_08018B82:
movs r4, #0
adds r6, r5, #0
adds r6, #0x40
adds r7, r0, #1
_08018B8A:
adds r0, r3, #0
adds r3, #1
adds r1, r5, r4
movs r2, #1
str r3, [sp]
bl SetTileType
adds r4, #1
ldr r3, [sp]
cmp r4, #4
bls _08018B8A
adds r5, r6, #0
adds r0, r7, #0
cmp r0, #4
bls _08018B82
add sp, #4
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08018BAC: .4byte gUnk_080FE320
_08018BB0: .4byte 0x00000219
thumb_func_start sub_08018BB4
sub_08018BB4: @ 0x08018BB4
push {r4, r5, lr}
sub sp, #8
adds r4, r0, #0
lsls r0, r4, #3
ldr r1, _08018C14 @ =gUnk_080FEAC8
adds r0, r0, r1
mov r5, sp
mov r1, sp
movs r2, #8
bl MemCopy
lsls r0, r4, #2
adds r0, r0, r4
lsls r0, r0, #2
ldr r1, _08018C18 @ =gUnk_080FE320
adds r0, r0, r1
ldrh r1, [r0, #8]
lsrs r1, r1, #4
movs r2, #0x3f
ands r1, r2
ldrh r0, [r0, #0xa]
lsrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r1, r0
strh r1, [r5, #4]
mov r0, sp
bl sub_0804B3C4
ldrb r0, [r5, #1]
bl CheckLocalFlag
cmp r0, #0
bne _08018C10
ldrh r3, [r5, #4]
ldrb r1, [r5, #6]
movs r0, #1
ands r0, r1
movs r2, #2
cmp r0, #0
bne _08018C08
movs r2, #1
_08018C08:
movs r0, #0x73
adds r1, r3, #0
bl SetTileType
_08018C10:
add sp, #8
pop {r4, r5, pc}
.align 2, 0
_08018C14: .4byte gUnk_080FEAC8
_08018C18: .4byte gUnk_080FE320
-129
View File
@@ -1,129 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r4, r0, #0
adds r5, r1, #0
mov r8, r2
mov sb, r3
movs r7, #0
movs r6, #0
ldrh r0, [r4, #0x2a]
movs r1, #0xe
ands r1, r0
mov ip, r1
movs r2, #0xe0
lsls r2, r2, #8
ands r2, r0
adds r3, r2, #0
cmp r1, #0
beq _080AE904
cmp r2, #0
bne _080AE99E
_080AE904:
orrs r1, r2
cmp r1, #0
bne _080AE928
ldr r1, _080AE924 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
adds r7, r0, #0
muls r7, r5, r7
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
b _080AE98A
.align 2, 0
_080AE924: .4byte gSineTable
_080AE928:
mov r2, ip
cmp r2, #2
bne _080AE942
lsls r7, r5, #8
ldr r0, [r4, #0x2c]
adds r0, r0, r7
str r0, [r4, #0x2c]
adds r0, r4, #0
movs r1, #4
mov r2, sb
bl CalculateEntityTileCollisions
b _080AE95C
_080AE942:
movs r0, #0x80
lsls r0, r0, #7
cmp r3, r0
bne _080AE95C
lsls r7, r5, #8
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
adds r0, r4, #0
movs r1, #4
mov r2, sb
bl CalculateEntityTileCollisions
_080AE95C:
ldrh r2, [r4, #0x2a]
movs r0, #0xe
ands r0, r2
cmp r0, #0
bne _080AE97E
ldr r1, _080AE9B4 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x30]
subs r0, r0, r6
str r0, [r4, #0x30]
_080AE97E:
movs r0, #0xe0
lsls r0, r0, #8
ands r0, r2
cmp r0, #0
bne _080AE99E
ldr r1, _080AE9B4 @ =gSineTable
_080AE98A:
mov r2, r8
lsls r0, r2, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x2c]
adds r0, r0, r6
str r0, [r4, #0x2c]
_080AE99E:
ldr r2, _080AE9B8 @ =0x00003333
adds r0, r7, r2
ldr r1, _080AE9BC @ =0x00006665
cmp r0, r1
bhi _080AE9C0
ldr r2, _080AE9B8 @ =0x00003333
adds r0, r6, r2
cmp r0, r1
bhi _080AE9C0
movs r0, #0
b _080AE9C2
.align 2, 0
_080AE9B4: .4byte gSineTable
_080AE9B8: .4byte 0x00003333
_080AE9BC: .4byte 0x00006665
_080AE9C0:
movs r0, #1
_080AE9C2:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-129
View File
@@ -1,129 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r4, r0, #0
adds r5, r1, #0
mov r8, r2
mov sb, r3
movs r7, #0
movs r6, #0
ldrh r0, [r4, #0x2a]
movs r1, #0xe
ands r1, r0
mov ip, r1
movs r2, #0xe0
lsls r2, r2, #4
ands r2, r0
adds r3, r2, #0
cmp r1, #0
beq _080AEEC0
cmp r2, #0
bne _080AEF5A
_080AEEC0:
orrs r1, r2
cmp r1, #0
bne _080AEEE4
ldr r1, _080AEEE0 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
adds r7, r0, #0
muls r7, r5, r7
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
b _080AEF46
.align 2, 0
_080AEEE0: .4byte gSineTable
_080AEEE4:
mov r2, ip
cmp r2, #4
bne _080AEEFE
lsls r7, r5, #8
ldr r0, [r4, #0x2c]
subs r0, r0, r7
str r0, [r4, #0x2c]
adds r0, r4, #0
movs r1, #0x1c
mov r2, sb
bl CalculateEntityTileCollisions
b _080AEF18
_080AEEFE:
movs r0, #0x80
lsls r0, r0, #3
cmp r3, r0
bne _080AEF18
lsls r7, r5, #8
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
adds r0, r4, #0
movs r1, #0x1c
mov r2, sb
bl CalculateEntityTileCollisions
_080AEF18:
ldrh r2, [r4, #0x2a]
movs r0, #0xe
ands r0, r2
cmp r0, #0
bne _080AEF3A
ldr r1, _080AEF70 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x30]
subs r0, r0, r6
str r0, [r4, #0x30]
_080AEF3A:
movs r0, #0xe0
lsls r0, r0, #4
ands r0, r2
cmp r0, #0
bne _080AEF5A
ldr r1, _080AEF70 @ =gSineTable
_080AEF46:
mov r2, r8
lsls r0, r2, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x2c]
adds r0, r0, r6
str r0, [r4, #0x2c]
_080AEF5A:
ldr r2, _080AEF74 @ =0x00003333
adds r0, r7, r2
ldr r1, _080AEF78 @ =0x00006665
cmp r0, r1
bhi _080AEF7C
ldr r2, _080AEF74 @ =0x00003333
adds r0, r6, r2
cmp r0, r1
bhi _080AEF7C
movs r0, #0
b _080AEF7E
.align 2, 0
_080AEF70: .4byte gSineTable
_080AEF74: .4byte 0x00003333
_080AEF78: .4byte 0x00006665
_080AEF7C:
movs r0, #1
_080AEF7E:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-129
View File
@@ -1,129 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r4, r0, #0
adds r5, r1, #0
mov r8, r2
mov sb, r3
movs r7, #0
movs r6, #0
ldrh r0, [r4, #0x2a]
movs r1, #0xe0
ands r1, r0
mov ip, r1
movs r2, #0xe0
lsls r2, r2, #8
ands r2, r0
adds r3, r2, #0
cmp r1, #0
beq _080AEAEC
cmp r2, #0
bne _080AEB86
_080AEAEC:
orrs r1, r2
cmp r1, #0
bne _080AEB10
ldr r1, _080AEB0C @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
adds r7, r0, #0
muls r7, r5, r7
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
b _080AEB72
.align 2, 0
_080AEB0C: .4byte gSineTable
_080AEB10:
mov r2, ip
cmp r2, #0x20
bne _080AEB2A
lsls r7, r5, #8
ldr r0, [r4, #0x2c]
adds r0, r0, r7
str r0, [r4, #0x2c]
adds r0, r4, #0
movs r1, #0xc
mov r2, sb
bl CalculateEntityTileCollisions
b _080AEB44
_080AEB2A:
movs r0, #0x80
lsls r0, r0, #6
cmp r3, r0
bne _080AEB44
lsls r7, r5, #8
ldr r0, [r4, #0x30]
adds r0, r0, r7
str r0, [r4, #0x30]
adds r0, r4, #0
movs r1, #0xc
mov r2, sb
bl CalculateEntityTileCollisions
_080AEB44:
ldrh r2, [r4, #0x2a]
movs r0, #0xe0
ands r0, r2
cmp r0, #0
bne _080AEB66
ldr r1, _080AEB9C @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x30]
subs r0, r0, r6
str r0, [r4, #0x30]
_080AEB66:
movs r0, #0xe0
lsls r0, r0, #8
ands r0, r2
cmp r0, #0
bne _080AEB86
ldr r1, _080AEB9C @ =gSineTable
_080AEB72:
mov r2, r8
lsls r0, r2, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x2c]
adds r0, r0, r6
str r0, [r4, #0x2c]
_080AEB86:
ldr r2, _080AEBA0 @ =0x00003333
adds r0, r7, r2
ldr r1, _080AEBA4 @ =0x00006665
cmp r0, r1
bhi _080AEBA8
ldr r2, _080AEBA0 @ =0x00003333
adds r0, r6, r2
cmp r0, r1
bhi _080AEBA8
movs r0, #0
b _080AEBAA
.align 2, 0
_080AEB9C: .4byte gSineTable
_080AEBA0: .4byte 0x00003333
_080AEBA4: .4byte 0x00006665
_080AEBA8:
movs r0, #1
_080AEBAA:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-129
View File
@@ -1,129 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
adds r4, r0, #0
adds r5, r1, #0
mov r8, r2
mov sb, r3
movs r7, #0
movs r6, #0
ldrh r0, [r4, #0x2a]
movs r1, #0xe0
ands r1, r0
mov ip, r1
movs r2, #0xe0
lsls r2, r2, #4
ands r2, r0
adds r3, r2, #0
cmp r1, #0
beq _080AECD8
cmp r2, #0
bne _080AED72
_080AECD8:
orrs r1, r2
cmp r1, #0
bne _080AECFC
ldr r1, _080AECF8 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r2, #0
ldrsh r0, [r0, r2]
adds r7, r0, #0
muls r7, r5, r7
ldr r0, [r4, #0x30]
subs r0, r0, r7
str r0, [r4, #0x30]
b _080AED5E
.align 2, 0
_080AECF8: .4byte gSineTable
_080AECFC:
mov r2, ip
cmp r2, #0x40
bne _080AED16
lsls r7, r5, #8
ldr r0, [r4, #0x2c]
subs r0, r0, r7
str r0, [r4, #0x2c]
adds r0, r4, #0
movs r1, #0x14
mov r2, sb
bl CalculateEntityTileCollisions
b _080AED30
_080AED16:
movs r0, #0x80
lsls r0, r0, #2
cmp r3, r0
bne _080AED30
lsls r7, r5, #8
ldr r0, [r4, #0x30]
adds r0, r0, r7
str r0, [r4, #0x30]
adds r0, r4, #0
movs r1, #0x14
mov r2, sb
bl CalculateEntityTileCollisions
_080AED30:
ldrh r2, [r4, #0x2a]
movs r0, #0xe0
ands r0, r2
cmp r0, #0
bne _080AED52
ldr r1, _080AED88 @ =gSineTable
mov r0, r8
adds r0, #0x40
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x30]
subs r0, r0, r6
str r0, [r4, #0x30]
_080AED52:
movs r0, #0xe0
lsls r0, r0, #4
ands r0, r2
cmp r0, #0
bne _080AED72
ldr r1, _080AED88 @ =gSineTable
_080AED5E:
mov r2, r8
lsls r0, r2, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
adds r6, r0, #0
muls r6, r5, r6
ldr r0, [r4, #0x2c]
adds r0, r0, r6
str r0, [r4, #0x2c]
_080AED72:
ldr r2, _080AED8C @ =0x00003333
adds r0, r7, r2
ldr r1, _080AED90 @ =0x00006665
cmp r0, r1
bhi _080AED94
ldr r2, _080AED8C @ =0x00003333
adds r0, r6, r2
cmp r0, r1
bhi _080AED94
movs r0, #0
b _080AED96
.align 2, 0
_080AED88: .4byte gSineTable
_080AED8C: .4byte 0x00003333
_080AED90: .4byte 0x00006665
_080AED94:
movs r0, #1
_080AED96:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -1,40 +0,0 @@
.syntax unified
push {r4, r5, r6, lr}
adds r4, r0, #0
adds r6, r1, #0
subs r0, r4, #1
cmp r0, #0x1e
bhi _080778C0
lsls r0, r4, #1
adds r0, r0, r4
lsls r0, r0, #2
ldr r1, _080778C4 @ =gUnk_0811BE48
adds r5, r0, r1
ldr r1, _080778C8 @ =gPlayerState + 0x90
ldrb r0, [r5]
cmp r0, #0
beq _080778A0
adds r1, #2
_080778A0:
ldrh r0, [r1]
ands r0, r6
cmp r0, #0
bne _080778AC
cmp r2, #0
beq _080778C0
_080778AC:
adds r0, r4, #0
bl sub_0807794C
adds r1, r0, #0
cmp r1, #0
beq _080778C0
ldrb r0, [r5, #1]
strb r0, [r1, #9]
strb r4, [r1, #1]
strb r6, [r1, #3]
_080778C0:
pop {r4, r5, r6, pc}
.align 2, 0
_080778C4: .4byte gUnk_0811BE48
_080778C8: .4byte gPlayerState + 0x90
.syntax divided
@@ -1,123 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #4
adds r5, r0, #0
movs r6, #6
movs r7, #0
movs r4, #0
movs r0, #0x32
ldrsh r2, [r5, r0]
ldr r1, _080AB818 @ =gRoomControls
ldrh r0, [r1, #8]
adds r0, #0xd4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov r8, r1
cmp r2, r0
bhi _080AB7B4
movs r3, #7
_080AB77E:
adds r0, r4, #0
ands r0, r3
cmp r0, #7
bne _080AB798
adds r0, r5, #0
movs r1, #4
adds r2, r6, #0
str r3, [sp]
bl sub_080AB844
adds r6, #0x3e
adds r7, #0x3e
ldr r3, [sp]
_080AB798:
adds r4, #1
ands r4, r3
movs r1, #0x32
ldrsh r0, [r5, r1]
adds r0, r0, r7
lsls r1, r4, #3
adds r2, r0, r1
ldr r0, _080AB818 @ =gRoomControls
ldrh r0, [r0, #8]
adds r0, #0xd4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r2, r0
bls _080AB77E
_080AB7B4:
movs r4, #0
movs r1, #0x32
ldrsh r0, [r5, r1]
adds r2, r0, r7
mov r1, r8
ldrh r0, [r1, #8]
adds r0, #0xd4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r2, r0
bhi _080AB802
movs r3, #3
_080AB7CC:
adds r0, r4, #0
ands r0, r3
cmp r0, #3
bne _080AB7E6
adds r0, r5, #0
movs r1, #3
adds r2, r6, #0
str r3, [sp]
bl sub_080AB844
adds r6, #0x1e
adds r7, #0x1e
ldr r3, [sp]
_080AB7E6:
adds r4, #1
ands r4, r3
movs r1, #0x32
ldrsh r0, [r5, r1]
adds r0, r0, r7
lsls r1, r4, #3
adds r2, r0, r1
ldr r0, _080AB818 @ =gRoomControls
ldrh r0, [r0, #8]
adds r0, #0xd4
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r2, r0
bls _080AB7CC
_080AB802:
movs r0, #2
ands r0, r4
cmp r0, #0
beq _080AB81C
adds r0, r5, #0
movs r1, #2
adds r2, r6, #0
bl sub_080AB844
adds r6, #0xe
b _080AB830
.align 2, 0
_080AB818: .4byte gRoomControls
_080AB81C:
movs r0, #1
ands r4, r0
cmp r4, #0
beq _080AB830
adds r0, r5, #0
movs r1, #1
adds r2, r6, #0
bl sub_080AB844
adds r6, #6
_080AB830:
adds r0, r5, #0
movs r1, #6
adds r2, r6, #0
bl sub_080AB844
add sp, #4
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
-211
View File
@@ -1,211 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_0808C964
sub_0808C964: @ 0x0808C964
push {r4, lr}
adds r4, r0, #0
ldrb r1, [r4, #0xa]
strb r1, [r4, #0x1e]
ldrb r0, [r4, #9]
cmp r0, #0x76
bne _0808C982
ldr r0, _0808CA08 @ =gUI
adds r0, #0x20
ldrb r0, [r0]
cmp r0, #2
beq _0808C982
adds r0, r1, #0
subs r0, #9
strb r0, [r4, #0xa]
_0808C982:
ldrb r0, [r4, #0xa]
cmp r0, #4
bls _0808C996
ldr r0, _0808CA0C @ =gArea
ldrb r0, [r0, #0x16]
ldrb r1, [r4, #0xb]
cmp r0, r1
beq _0808C996
bl DeleteThisEntity
_0808C996:
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
ldrb r2, [r4, #0x1b]
movs r1, #0x3f
adds r0, r1, #0
ands r0, r2
movs r2, #0x80
orrs r0, r2
strb r0, [r4, #0x1b]
ldrb r0, [r4, #0x19]
ands r1, r0
orrs r1, r2
strb r1, [r4, #0x19]
ldrb r0, [r4, #0xb]
adds r3, r4, #0
adds r3, #0x29
movs r1, #7
ands r1, r0
ldrb r2, [r3]
movs r0, #8
rsbs r0, r0, #0
ands r0, r2
orrs r0, r1
strb r0, [r3]
ldrb r0, [r4, #9]
cmp r0, #0x75
beq _0808CA04
ldrb r2, [r4, #0xa]
subs r0, r2, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #2
bhi _0808CA04
ldrb r0, [r4, #0x19]
movs r1, #3
orrs r0, r1
strb r0, [r4, #0x19]
lsls r0, r2, #0x18
lsrs r0, r0, #0x18
movs r2, #0x80
lsls r2, r2, #1
cmp r0, #1
bne _0808C9FA
movs r2, #0xe0
_0808C9FA:
adds r0, r4, #0
adds r1, r2, #0
movs r3, #0
bl SetAffineInfo
_0808CA04:
pop {r4, pc}
.align 2, 0
_0808CA08: .4byte gUI
_0808CA0C: .4byte gArea
thumb_func_start sub_0808CA10
sub_0808CA10: @ 0x0808CA10
push {r4, r5, r6, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xa]
cmp r0, #2
beq _0808CA40
cmp r0, #2
bgt _0808CA24
cmp r0, #1
beq _0808CA2A
b _0808CA78
_0808CA24:
cmp r0, #3
beq _0808CA60
b _0808CA78
_0808CA2A:
ldr r2, _0808CA3C @ =gUnk_02018EB0
ldrb r0, [r2, #0x18]
cmp r0, #0
beq _0808CA78
movs r0, #0
movs r1, #0x20
strb r1, [r4, #0xe]
strb r0, [r2, #0x18]
b _0808CA50
.align 2, 0
_0808CA3C: .4byte gUnk_02018EB0
_0808CA40:
ldr r2, _0808CA5C @ =gUnk_02018EB0
ldrb r0, [r2, #0x19]
cmp r0, #0
beq _0808CA78
movs r0, #0
movs r1, #0x20
strb r1, [r4, #0xe]
strb r0, [r2, #0x19]
_0808CA50:
movs r0, #0x97
lsls r0, r0, #1
bl SoundReq
b _0808CA78
.align 2, 0
_0808CA5C: .4byte gUnk_02018EB0
_0808CA60:
ldr r2, _0808CABC @ =gUnk_02018EB0
ldrb r0, [r2, #0x1a]
cmp r0, #0
beq _0808CA78
movs r0, #0
movs r1, #0x20
strb r1, [r4, #0xe]
strb r0, [r2, #0x1a]
movs r0, #0x97
lsls r0, r0, #1
bl SoundReq
_0808CA78:
ldrb r0, [r4, #9]
cmp r0, #0x75
beq _0808CAE0
ldrb r1, [r4, #0xa]
subs r0, r1, #1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
adds r5, r1, #0
cmp r0, #2
bhi _0808CAE0
ldrb r1, [r4, #0xe]
cmp r1, #0
beq _0808CAE0
subs r1, #1
strb r1, [r4, #0xe]
ldrb r0, [r4, #0xf]
adds r2, r0, #1
strb r2, [r4, #0xf]
lsls r1, r1, #0x18
cmp r1, #0
beq _0808CAC4
ldr r0, _0808CAC0 @ =gUnk_08121648
movs r1, #0xe
ands r1, r2
lsls r2, r1, #1
adds r2, r2, r0
movs r6, #0
ldrsh r3, [r2, r6]
adds r1, #1
lsls r1, r1, #1
adds r1, r1, r0
movs r0, #0
ldrsh r2, [r1, r0]
b _0808CACA
.align 2, 0
_0808CABC: .4byte gUnk_02018EB0
_0808CAC0: .4byte gUnk_08121648
_0808CAC4:
movs r2, #0x80
lsls r2, r2, #1
adds r3, r2, #0
_0808CACA:
lsls r0, r5, #0x18
lsrs r0, r0, #0x18
cmp r0, #1
bne _0808CAD6
subs r3, #0x20
subs r2, #0x20
_0808CAD6:
adds r0, r4, #0
adds r1, r3, #0
movs r3, #0
bl SetAffineInfo
_0808CAE0:
pop {r4, r5, r6, pc}
.align 2, 0
+11 -3
View File
@@ -20,6 +20,15 @@ typedef struct {
} RoomResInfo;
static_assert(sizeof(RoomResInfo) == 0x20);
typedef struct {
u8 inventoryGfxIdx;
u8 unk29;
u8 unk2a;
u8 unk2b;
u16 unk2C[7];
u16 unk3E;
} struct_area_28;
typedef struct {
u8 areaMetadata;
u8 locationIndex;
@@ -43,14 +52,13 @@ typedef struct {
bool8 portal_in_use;
u8 unk1A;
u8 filler2[13];
u8 inventoryGfxIdx;
u8 filler4[0x13];
struct_area_28 unk28;
RoomResInfo roomResInfos[MAX_ROOMS];
RoomResInfo currentRoomInfo;
RoomResInfo* pCurrentRoomInfo;
u32 bgm;
u32 queued_bgm;
u8 filler5[0x20];
u8 filler6[0x20];
void* transitionManager;
void (*onEnter)();
void (*onExit)();
+2 -2
View File
@@ -20,8 +20,8 @@ extern Input gInput; /**< Input instance. */
typedef struct {
u8 evt_type;
u8 entity_idx;
u8 _2;
u8 _3;
u8 area;
u8 room;
u16 _4;
u16 _6;
u16 x;
+1 -1
View File
@@ -289,7 +289,7 @@ void Object37();
void JarPortal();
void BossDoor();
void Object3A();
void MacroMushromStalks();
void MacroMushroomStalks();
void MacroPlayer();
void Object3D();
void Object3E();
+7 -4
View File
@@ -190,15 +190,17 @@ typedef struct {
typedef struct {
u8 type;
u8 _1;
u8 localFlag;
u8 _2;
u8 _3;
u16 _4;
u16 tilePos;
u8 _6;
u8 _7;
} TileEntity;
extern TileEntity gSmallChests[8];
extern TileEntity gUnk_080FEAC8[];
typedef enum {
NONE,
ROOM_VISIT_MARKER,
@@ -226,11 +228,12 @@ void LoadRoom(void);
void SetCurrentRoomPropertyList(u32 area, u32 room);
void* GetCurrentRoomProperty(u32);
void LoadRoomTileEntities();
void LoadRoomEntityList(EntityData* listPtr);
Entity* LoadRoomEntity(const EntityData*);
void LoadRoomEntityList(const EntityData* listPtr);
bool32 LoadFixedGFX(Entity*, u32);
void UnloadGFXSlots(Entity*);
void sub_0804B3C4(void*);
void sub_0804B3C4(TileEntity*);
void sub_0804B0B0(u32 arg0, u32 arg1);
void DoExitTransition(const ScreenTransitionData* data);
-8
View File
@@ -107,8 +107,6 @@ SECTIONS {
. = 0x00033280; gActiveScriptInfo = .;
. = 0x00033290; gUnk_02033290 = .;
. = 0x00033A90; gArea = .;
. = 0x00033AB8; gUnk_02033AB8 = .;
. = 0x00033ACC; gUnk_02033ACC = .;
. = 0x000342F8; gUnk_020342F8 = .;
. = 0x00034330; gUnk_02034330 = .;
. = 0x00034350; gRoomVars = .;
@@ -305,7 +303,6 @@ SECTIONS {
src/npc.o(.text);
src/collision.o(.text);
/* C source compiled without interworking */
asm/kinstone.o(.text);
src/kinstone.o(.text);
src/playerItem/playerItemGustBig.o(.text);
src/playerItem/playerItemBow.o(.text);
@@ -680,9 +677,6 @@ SECTIONS {
src/object/bossDoor.o(.text);
src/object/object3A.o(.text);
src/object/macroMushroomStalks.o(.text);
src/object/object75.o(.text); /* 75 and 76 are mislocated in object table */
src/object/object76.o(.text);
asm/object/code_0808C964.o(.text);
src/object/macroPlayer.o(.text);
src/object/object3D.o(.text);
src/object/object3E.o(.text);
@@ -1408,8 +1402,6 @@ SECTIONS {
data/animations/object/bossDoor.o(.rodata);
src/object/object3A.o(.rodata);
src/object/macroMushroomStalks.o(.rodata);
src/object/object75.o(.rodata);
src/object/object76.o(.rodata);
src/object/macroPlayer.o(.rodata);
src/object/object3D.o(.rodata);
src/object/object3E.o(.rodata);
+5 -10
View File
@@ -324,28 +324,23 @@ void sub_0803981C(StalfosEntity* this) {
EnqueueSFX(SFX_12B);
}
NONMATCH("asm/non_matching/stalfos/sub_08039858.inc", void sub_08039858(StalfosEntity* this)) {
void sub_08039858(StalfosEntity* this) {
s32 iVar1;
u32 uVar2;
u32 uVar3;
u32 tmp;
iVar1 = sub_080398C0(this);
uVar2 = (u32)super->animationState;
tmp = uVar2 * 8;
if (((iVar1 + 4U) & 0x18) == tmp) {
uVar2 = (u32)super->animationState * 8;
if (((iVar1 + 4U) & 0x18) == uVar2) {
if (this->unk_7b != 3) {
return;
}
this->unk_7b = 0;
uVar3 = Random();
iVar1 += ((uVar3 & 2) - 1) * 8;
iVar1 += ((Random() & 2) - 1) * 8;
}
uVar2 = ((iVar1 + uVar2 * -8) & 0x1f) >> 4 ^ 1;
uVar2 = ((iVar1 - uVar2) & 0x1f) >> 4 ^ 1;
InitAnimationForceUpdate(super, gUnk_080CF8F8[(u32)super->animationState * 2 + uVar2]);
super->animationState = ((uVar2 * 2 + super->animationState) - 1) & 3;
}
END_NONMATCH
u32 sub_080398C0(StalfosEntity* this) {
u32 rand = Random();
+11 -11
View File
@@ -374,7 +374,7 @@ static void GameMain_ChangeRoom(void) {
SetPlayerControl(0);
gPauseMenuOptions.disabled = 0;
#if defined(USA) || defined(DEMO_USA)
if (gArea.inventoryGfxIdx != 0xff) {
if (gArea.unk28.inventoryGfxIdx != 0xff) {
sub_0801855C();
}
CreateManagerF();
@@ -384,13 +384,13 @@ static void GameMain_ChangeRoom(void) {
sub_0801855C();
#elif defined(JP)
CheckAreaDiscovery();
if (gArea.inventoryGfxIdx != 0xff) {
if (gArea.unk28.inventoryGfxIdx != 0xff) {
sub_0801855C();
}
#elif defined(DEMO_JP)
if (gRoomTransition.field_0x2c[4])
CheckAreaDiscovery();
if (gArea.inventoryGfxIdx != 0xff) {
if (gArea.unk28.inventoryGfxIdx != 0xff) {
sub_0801855C();
}
CreateManagerF();
@@ -2105,10 +2105,10 @@ void sub_08053CC8(void) {
void sub_08053D34(void) {
if (gMenu.field_0xa != 0) {
gMenu.field_0xa = 0;
if (CheckLocalFlagByBank(0x680, 0x3d)) {
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3d)) {
SetTileType(0x74, 0xc4, 1);
}
if (CheckLocalFlagByBank(0x680, 0x3e)) {
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3e)) {
SetTileType(0x74, 0xcc, 1);
}
}
@@ -2682,22 +2682,22 @@ void sub_08054968(void) {
void sub_08054974(s32 param_1, s32 param_2) {
struct_080FE320* ptr = &gUnk_080FE320[param_1];
SetCurrentRoomPropertyList(ptr->_2, ptr->_3);
gRoomControls.area = ptr->_2;
gRoomControls.room = ptr->_3;
SetCurrentRoomPropertyList(ptr->area, ptr->room);
gRoomControls.area = ptr->area;
gRoomControls.room = ptr->room;
LoadGfxGroups();
gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area);
if (param_2 != 0) {
LoadAuxiliaryRoom(ptr->_2, ptr->_3);
LoadAuxiliaryRoom(ptr->area, ptr->room);
} else {
sub_08052FF4(ptr->_2, ptr->_3);
sub_08052FF4(ptr->area, ptr->room);
InitializeCamera();
gUpdateVisibleTiles = 1;
}
gScreen.lcd.displayControl &= 0x1fff;
gRoomControls.scroll_x = gRoomControls.origin_x + ptr->_4;
gRoomControls.scroll_y = gRoomControls.origin_y + ptr->_6;
if (ptr->_2 == 2) {
if (ptr->area == AREA_HYRULE_TOWN) {
TryLoadPrologueHyruleTown();
}
sub_08018710(gUI.field_0x3);
+456
View File
@@ -1,5 +1,461 @@
#include "global.h"
#include "room.h"
#include "subtask.h"
#include "common.h"
#include "flags.h"
#include "player.h"
#include "kinstone.h"
#include "area.h"
#include "manager.h"
#include "asm.h"
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
} struct_gUnk_080B3D20;
extern struct_gUnk_080B3D20 gUnk_080B3D20[];
extern EntityData gUnk_080FEC28[];
extern EntityData gUnk_080FEBE8[];
extern EntityData gUnk_080FECC8[];
extern EntityData gUnk_080FEE78[];
extern EntityData gUnk_080FED58[];
extern const EntityData gUnk_080FED18[];
extern const EntityData gUnk_080FEE38[];
extern const EntityData gUnk_080FEE18[];
extern const EntityData gUnk_080FEE48[];
extern const EntityData gUnk_080FEE58[];
extern const void* gUnk_080FED98[];
extern const u16 gUnk_080B3D14[];
void sub_08018AB4(int);
void sub_08018BB4(int);
void sub_08018A58(int);
void sub_08018B50(int);
void sub_080189EC(int);
void sub_0801876C(int, int);
void sub_08018738(u32, int);
void sub_08018690(int param_1, u16* param_2);
void sub_08018500();
bool32 sub_080185B4(const struct_gUnk_080B3D20* param_1);
void sub_08018500(void) {
s32 sVar1;
u32 i;
u16* puVar3;
u16* puVar4;
struct_area_28* ptr = &gArea.unk28;
puVar3 = ptr->unk2C;
sVar1 = gUnk_080B3D14[ptr->inventoryGfxIdx] + ptr->unk29 * 3;
for (i = 0; i < 3; i++) {
*puVar3 = sVar1;
sVar1++;
puVar3++;
}
sVar1 = ptr->inventoryGfxIdx * 5 + 0xc81;
for (i = 0, puVar4 = &ptr->unk2C[3]; i < 5; i++) {
*puVar3 = sVar1;
sVar1++;
puVar3++;
}
sub_08018690(5, puVar4);
ptr->unk2a = 0;
}
void sub_0801855C(void) {
u32 bVar3;
struct_area_28* ptr;
// TODO: Figure out what is up with the pointer assignment
struct_gUnk_080B3D20* pcVar2 = (struct_gUnk_080B3D20*)&gArea.unk28;
MemClear(pcVar2, 0x14);
ptr = (struct_area_28*)pcVar2;
for (pcVar2 = gUnk_080B3D20, bVar3 = 0; pcVar2->unk0 != 0xff; pcVar2++) {
if (sub_080185B4(pcVar2)) {
bVar3 = ptr->unk2b;
}
ptr->unk2b++;
}
ptr->unk2b = bVar3;
pcVar2 = &gUnk_080B3D20[ptr->unk2b];
ptr->inventoryGfxIdx = pcVar2->unk2;
ptr->unk29 = pcVar2->unk3;
ptr->unk2b = bVar3 + 1;
sub_08018500();
}
bool32 sub_080185B4(const struct_gUnk_080B3D20* param_1) {
if (param_1->unk0 == 0xff)
return 0;
if (param_1->unk0 == 0xfe) {
return GetInventoryValue(param_1->unk1) != 0;
}
if (param_1->unk0 == 0xfd) {
return CheckKinstoneFused(param_1->unk1);
}
return CheckLocalFlagByBank(gLocalFlagBanks[param_1->unk0], param_1->unk1);
}
void sub_080185F8(void) {
struct_area_28* ptr2 = &gArea.unk28;
struct_gUnk_080B3D20* ptr = &gUnk_080B3D20[ptr2->unk2b];
if (sub_080185B4(ptr)) {
ptr2->inventoryGfxIdx = ptr->unk2;
ptr2->unk29 = ptr->unk3;
ptr2->unk2b++;
sub_08018500();
}
}
void GenerateAreaHint(void) {
u16 uVar1;
struct_area_28* ptr;
gPlayerState.queued_action = 0x16;
#if defined(EU) || defined(JP)
// TODO what fields of the room transition are switched in these variants?
gRoomTransition.field_0x2c[7] = 0;
#else
gRoomTransition.hint_height = 0;
#endif
ptr = &gArea.unk28;
if (ptr->inventoryGfxIdx == 0xff) {
gRoomTransition.hint_idx = ptr->unk2C[0];
} else {
gRoomTransition.hint_idx = ptr->unk2C[ptr->unk2a];
ptr->unk2a++;
if (ptr->unk2a > 7) {
ptr->unk2a = 0;
sub_08018690(8, ptr->unk2C);
if (ptr->unk2C[0] == gRoomTransition.hint_idx) {
uVar1 = ptr->unk2C[0];
ptr->unk2C[0] = ptr->unk3E;
ptr->unk3E = uVar1;
}
}
}
}
void sub_08018690(int param_1, u16* param_2) {
u32 uVar1;
s32 uVar4;
s32 uVar2;
s32 iVar3;
u16* puVar4;
u16* puVar5;
uVar4 = param_1 - 1;
if (uVar4 != 0) {
puVar5 = (u16*)(uVar4 * 2 + (int)param_2);
do {
uVar2 = Random();
iVar3 = uVar2 % (uVar4 + 1);
uVar1 = *puVar5;
puVar4 = (u16*)(iVar3 * 2 + (int)param_2);
*puVar5 = *puVar4;
*puVar4 = uVar1;
puVar5--;
uVar4--;
} while (uVar4 != 0);
}
}
void sub_080186C0(u32 param_1) {
gArea.unk28.inventoryGfxIdx = 0xff;
gArea.unk28.unk2C[0] = param_1;
}
void sub_080186D4(void) {
if (gArea.unk28.inventoryGfxIdx == 0xff) {
sub_0801855C();
}
}
void sub_080186EC(u32 param_1) {
struct_080C9CBC* psVar1;
u32 i;
for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) {
if (psVar1->unk3 == 8) {
sub_08018738(i, psVar1->evt_type);
}
}
}
void sub_08018710(u32 param_1) {
struct_080C9CBC* psVar1;
u32 i;
for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) {
if (psVar1->unk3 == 8 && param_1 != psVar1->evt_type) {
sub_08018738(i, psVar1->evt_type);
}
}
}
void sub_08018738(u32 param_1, int param_2) {
struct_080FE320* ptr = &gUnk_080FE320[param_2];
if (ptr->area == gRoomControls.area && ptr->room == gRoomControls.room) {
sub_0801876C(param_2, CheckKinstoneFused(param_1));
}
}
void sub_0801876C(int param_1, int param_2) {
Entity* roomEnt;
Entity* ent;
u32 uVar3;
u32 tmp;
u8* puVar4;
u32 uVar5;
struct_080FE320* ptr;
ptr = &gUnk_080FE320[param_1];
switch (ptr->evt_type) {
case 6:
if (param_2 == 0) {
sub_08018AB4((ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6);
}
break;
case 0:
break;
case 2:
if (param_2 != 0) {
sub_08018BB4(param_1);
}
break;
case 1:
if (param_2 == 0) {
return;
}
if (CheckGlobalFlag(ptr->flag)) {
return;
}
LoadRoomEntity(gUnk_080FEC28 + ptr->entity_idx);
break;
case 3:
if (param_2 == 0) {
return;
}
if (GetInventoryValue(ptr->flag)) {
return;
}
LoadRoomEntity(gUnk_080FEBE8 + ptr->entity_idx);
break;
case 4:
if (param_2 == 0) {
sub_08018A58(param_1);
}
break;
case 5:
if (param_2 != 0) {
sub_08018B50(param_1);
}
break;
case 7:
if (param_2 != 0) {
return;
}
if (ptr->entity_idx != 0x80) {
LoadRoomEntity(gUnk_080FECC8 + ptr->entity_idx);
} else {
sub_080189EC(param_1);
}
break;
case 0x19:
roomEnt = LoadRoomEntity(&gUnk_080FED18[ptr->entity_idx]);
if (roomEnt != 0) {
roomEnt->type = param_2 ? 2 : 0;
}
break;
case 8:
if (param_2 == 0) {
return;
}
SetTileType(0x168, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
break;
case 0xb:
if (param_2 != 0) {
LoadRoomEntity(&gUnk_080FED58[ptr->entity_idx]);
gRoomVars.field_0x8c[ptr->entity_idx] = (void*)gUnk_080FED98[ptr->entity_idx];
}
break;
case 9:
if (param_2 == 0) {
return;
}
ent = LoadRoomEntity(&gUnk_080FEE78[ptr->entity_idx]);
if (ent != 0) {
*(u16*)&ent->collisionLayer = ptr->x + gRoomControls.origin_x;
*(u16*)&ent->gustJarState = ptr->y + gRoomControls.origin_y;
}
if (ptr->entity_idx == 0) {
SetTileType(0x8d, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
} else {
uVar5 = (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6;
SetTileType(0x8c, uVar5 - 1, 1);
uVar3 = 0x8e;
SetTileType(uVar3, uVar5, 1);
}
break;
case 0x18:
if (param_2 != 0) {
LoadRoomEntityList(gUnk_080FEE18);
}
break;
case 0xf:
if (param_2 != 0) {
LoadRoomEntity(gUnk_080FEE58);
} else {
LoadRoomEntity(gUnk_080FEE48);
}
break;
case 0x11:
if (param_2 != 0) {
SetLocalFlagByBank(FLAG_BANK_1, SOUGEN_05_BOMB_00);
LoadRoomEntityList(gUnk_080FEE38);
}
break;
case 0x1a:
case 0x1b:
case 0x1c:
break;
}
}
void sub_080189EC(int param_1) {
u32 i;
int iVar1;
int tilePosition;
struct_080FE320* ptr;
ptr = &gUnk_080FE320[param_1];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x42;
for (i = 0; i < 4; i++) {
SetTileType(i + 0x1df, tilePosition + i, 2);
}
tilePosition += 0x40;
for (i = 0; i < 4; i++) {
SetTileType(i + 0x1e3, tilePosition + i, 2);
SetTileType(i + 0x1db, tilePosition + i, 1);
}
}
void sub_08018A58(int param_1) {
u32 i;
int iVar2;
u32 j;
int tilePosition;
struct_080FE320* ptr;
ptr = &gUnk_080FE320[param_1];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x43;
iVar2 = 0x232;
for (i = 0; i < 4; tilePosition += 0x40, i++) {
for (j = 0; j < 7; j++) {
SetTileType(iVar2++, tilePosition + j, 1);
}
}
}
void sub_08018AB4(int param_1) {
u32 i;
int iVar2;
u32 j;
int iVar6;
iVar2 = 0x1e8;
iVar6 = 500;
for (i = 0; i < 3; i++) {
j = 0;
for (; j < 4; j++) {
SetTileType(iVar2++, param_1 + j, 1);
SetTileType(iVar6++, param_1 - 0x40 + j, 2);
}
param_1 += 0x40;
}
}
void sub_08018B10(int param_1) {
int iVar1;
u32 index;
int iVar3;
int iVar4;
iVar4 = 0x1f0;
iVar3 = 0x1fc;
index = 0;
iVar1 = param_1 - 0x40;
for (; index < 4; iVar1++, index++) {
SetTileType(iVar4++, param_1 + index, 1);
SetTileType(iVar3++, iVar1, 2);
}
}
void sub_08018B50(int param_1) {
u32 i;
int iVar2;
u32 j;
int tilePosition;
struct_080FE320* ptr;
ptr = &gUnk_080FE320[param_1];
if ((ptr->entity_idx & 0x80) == 0) {
iVar2 = 0x200;
} else {
iVar2 = 0x219;
}
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x82;
for (i = 0; i < 5; tilePosition += 0x40, i++) {
for (j = 0; j < 5; j++) {
SetTileType(iVar2++, tilePosition + j, 1);
}
}
}
void sub_08018BB4(int param_1) {
u32 layer;
TileEntity tile;
struct_080FE320* ptr;
u32 position;
MemCopy(gUnk_080FEAC8 + param_1, &tile, sizeof(TileEntity));
ptr = &gUnk_080FE320[param_1];
tile.tilePos = (ptr->x >> 4 & 0x3f) | (((ptr->y) >> 4 & 0x3f) << 6);
sub_0804B3C4(&tile);
if (CheckLocalFlag(tile.localFlag) == 0) {
position = tile.tilePos;
if ((tile._6 & 1) == 0) {
layer = 1;
} else {
layer = 2;
}
SetTileType(0x73, position, layer);
}
}
void CreateMinishEntrance(u32 tilePos) {
u32 x, y;
-2
View File
@@ -1,8 +1,6 @@
#include "entity.h"
#include "room.h"
extern Entity* LoadRoomEntity(EntityData*);
void sub_0805E0C0(Entity*);
void sub_0805E0F4(Entity*);
+1 -1
View File
@@ -147,7 +147,7 @@ static void sub_08058514(ManagerA* this) {
}
static void sub_080585B0(ManagerA* this) {
if (gArea.inventoryGfxIdx != 0xFF) {
if (gArea.unk28.inventoryGfxIdx != 0xFF) {
DeleteThisEntity();
}
if (CheckFlags(this->flag1)) {
-2
View File
@@ -81,8 +81,6 @@ void ManagerB_WaitForDone(ManagerB* this) {
ManagerBHelper* CreateHelper(Manager*);
void ManagerBHelper_Monitor(ManagerBHelper*, Entity*, u32);
extern Entity* LoadRoomEntity(EntityData*);
void ManagerB_LoadFight(Manager* this) {
ManagerBHelper* monitor;
EntityData* prop;
+1 -1
View File
@@ -414,7 +414,7 @@ void sub_080594DC(ManagerF* this) {
break;
case 2:
default:
if (gArea.inventoryGfxIdx != 0xFF) {
if (gArea.unk28.inventoryGfxIdx != 0xFF) {
DeleteThisEntity();
}
if (CheckLocalFlagByBank(FLAG_BANK_10, 0x85)) {
+73 -63
View File
@@ -1775,25 +1775,26 @@ bool32 MoveNorth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
}
}
ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc",
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
/*NONMATCH("asm/non_matching/movement/MoveNorthEast.inc",
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_NORTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
if ((this->collisions & (COL_NORTH_ANY | COL_EAST_ANY)) == COL_NONE) {
moveA = radius * gSineTable[angle + 0x40];
s32 northCollision = (this->collisions & COL_NORTH_ANY);
u32 northCollision2 = northCollision;
s32 eastCollision = (this->collisions & COL_EAST_ANY);
u32 eastCollision2 = eastCollision;
if ((northCollision == COL_NONE) || (eastCollision == COL_NONE)) {
if ((northCollision | eastCollision) == COL_NONE) {
moveA = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveA;
moveB = radius * gSineTable[angle];
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
} else {
if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) {
if (northCollision2 == COL_NORTH_WEST) {
moveA = radius * 0x100;
this->x.WORD += moveA;
CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
} else {
if ((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) {
if (eastCollision2 == COL_EAST_NORTH) {
moveA = radius * 0x100;
this->y.WORD -= moveA;
CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType);
@@ -1809,13 +1810,14 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc",
}
}
}
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
return FALSE;
} else {
if (((moveA < -0x3333) || (moveA >= 0x3333))) {
return TRUE;
} else if ((moveB < -0x3333) || (moveB >= 0x3333)) {
return TRUE;
} else {
return FALSE;
}
}
END_NONMATCH*/
bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
@@ -1855,24 +1857,25 @@ bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
}
}
ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc",
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType))
/*NONMATCH("asm/non_matching/movement/MoveSouthEast.inc",
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) {
if ((this->collisions & (COL_SOUTH_ANY | COL_EAST_ANY)) == COL_NONE) {
s32 anySouth = this->collisions & COL_SOUTH_ANY;
s32 anySouth2 = anySouth;
s32 anyEast = this->collisions & COL_EAST_ANY;
s32 anyEast2 = anyEast;
if ((anySouth == COL_NONE) || (anyEast == COL_NONE)) {
if ((anySouth | anyEast) == COL_NONE) {
moveA = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveA;
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
} else {
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_WEST) {
if (anySouth2 == COL_SOUTH_WEST) {
moveA = radius * 0x100;
this->x.WORD += moveA;
CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
} else if ((this->collisions & COL_EAST_ANY) == COL_EAST_SOUTH) {
} else if (anyEast2 == COL_EAST_SOUTH) {
moveA = radius * 0x100;
this->y.WORD += moveA;
CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType);
@@ -1887,13 +1890,16 @@ ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc",
}
}
}
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
return FALSE;
} else {
if (moveA < -0x3333 || moveA >= 0x3333) {
return TRUE;
}
if (moveB < -0x3333 || moveB >= 0x3333) {
return TRUE;
}
return FALSE;
}
END_NONMATCH*/
bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
@@ -1934,47 +1940,49 @@ bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) {
}
}
ASM_FUNC("asm/non_matching/movement/MoveSouthWest.inc",
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
/*NONMATCH("asm/non_matching/movement/MoveSouthWest.inc",
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_WEST_ANY) == COL_NONE)) {
if ((this->collisions & (COL_SOUTH_ANY | COL_WEST_ANY)) == COL_NONE) {
moveB = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveB;
moveA = gSineTable[angle] * radius;
this->x.WORD += moveA;
s32 anySouth = this->collisions & COL_SOUTH_ANY;
s32 anySouth2 = anySouth;
s32 anyWest = this->collisions & COL_WEST_ANY;
s32 anyWest2 = anyWest;
if ((anySouth == COL_NONE) || (anyWest == COL_NONE)) {
if ((anySouth | anyWest) == COL_NONE) {
moveA = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveA;
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
} else {
if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_EAST) {
moveB = radius * 0x100;
this->x.WORD -= moveB;
if (anySouth2 == COL_SOUTH_EAST) {
moveA = radius * 0x100;
this->x.WORD -= moveA;
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
} else if (anyWest2 == COL_WEST_SOUTH) {
moveA = radius * 0x100;
this->y.WORD += moveA;
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
} else {
if ((this->collisions & COL_WEST_ANY) == COL_WEST_SOUTH) {
moveB = radius * 0x100;
this->y.WORD += moveB;
CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType);
}
}
if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) {
moveA = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveA;
moveB = gSineTable[angle + 0x40] * radius;
this->y.WORD -= moveB;
}
if ((this->collisions & COL_WEST_ANY) == COL_NONE) {
moveA = gSineTable[angle] * radius;
this->x.WORD += moveA;
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
}
}
}
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
return FALSE;
} else {
if (moveA < -0x3333 || moveA >= 0x3333) {
return TRUE;
}
if (moveB < -0x3333 || moveB >= 0x3333) {
return TRUE;
}
return FALSE;
}
END_NONMATCH*/
bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
@@ -2018,14 +2026,13 @@ bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
}
}
ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType))
/*NONMATCH("asm/non_matching/movement/MoveNorthWest.inc",
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) {
bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) {
s32 moveA = 0;
s32 moveB = 0;
u32 colNorthAny = (this->collisions & COL_NORTH_ANY);
u32 colNorthAny2 = colNorthAny;
u32 colWestAny = (this->collisions & COL_WEST_ANY);
u32 colWestAny2 = colWestAny;
if ((colNorthAny == COL_NONE) || (colWestAny == COL_NONE)) {
if ((colNorthAny | colWestAny) == COL_NONE) {
moveA = gSineTable[angle + 0x40] * radius;
@@ -2033,12 +2040,12 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
moveB = gSineTable[angle] * radius;
this->x.WORD += moveB;
} else {
if (colNorthAny == COL_NORTH_EAST) {
if (colNorthAny2 == COL_NORTH_EAST) {
moveA = radius * 0x100;
this->x.WORD -= moveA;
CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
} else {
if (colWestAny == COL_WEST_NORTH) {
if (colWestAny2 == COL_WEST_NORTH) {
moveA = radius * 0x100;
this->y.WORD -= moveA;
CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType);
@@ -2054,13 +2061,16 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc",
}
}
}
if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) {
return FALSE;
} else {
if (moveA < -0x3333 || moveA >= 0x3333) {
return TRUE;
}
if (moveB < -0x3333 || moveB >= 0x3333) {
return TRUE;
}
return FALSE;
}
END_NONMATCH*/
bool32 ProcessMovement0(Entity* this) {
bool32 result;
+1 -1
View File
@@ -61,7 +61,7 @@ void (*const gObjectFunctions[])(Entity*) = {
[JAR_PORTAL] = JarPortal,
[BOSS_DOOR] = BossDoor,
[OBJECT_3A] = Object3A,
[PORTAL_MUSHROOM_STALKS] = MacroMushromStalks,
[PORTAL_MUSHROOM_STALKS] = MacroMushroomStalks,
[PORTAL_FALLING_PLAYER] = MacroPlayer,
[OBJECT_3D] = Object3D,
[OBJECT_3E] = Object3E,
+101 -1
View File
@@ -1,12 +1,112 @@
#include "entity.h"
#include "area.h"
#include "main.h"
#include "sound.h"
#include "object.h"
void sub_0808C964(Entity*);
void sub_0808CA10(Entity*);
void MacroMushromStalks(Entity* this) {
static const s16 gUnk_08121648[] = { 264, 252, 256, 256, 248, 260, 240, 264, 248, 260, 256, 256, 264, 252, 272, 248 };
void MacroMushroomStalks(Entity* this) {
static void (*const actionFuncs[])(Entity*) = {
sub_0808C964,
sub_0808CA10,
};
actionFuncs[this->action](this);
}
void Object75(Entity* this) {
static void (*const actionFuncs[])(Entity*) = {
sub_0808C964,
sub_0808CA10,
};
actionFuncs[this->action](this);
}
void Object76(Entity* this) {
static void (*const actionFuncs[])(Entity*) = {
sub_0808C964,
sub_0808CA10,
};
actionFuncs[this->action](this);
}
void sub_0808C964(Entity* this) {
u32 uVar1;
this->frameIndex = this->type;
if ((this->id == OBJECT_76) && (gUI.roomControls.area != AREA_HYRULE_TOWN)) {
this->type -= 9;
}
if (4 < this->type) {
if (gArea.portal_exit_dir != this->type2) {
DeleteThisEntity();
}
}
this->action = 1;
this->spriteSettings.draw = 1;
this->spriteOrientation.flipY = 2;
this->spriteRendering.b3 = 2;
;
this->spritePriority.b0 = this->type2;
if (this->id != OBJECT_75 && (u8)(this->type - 1) < 3) {
this->spriteRendering.b0 = 3;
if (this->type == 1) {
uVar1 = 0xe0;
} else {
uVar1 = 0x100;
}
SetAffineInfo(this, uVar1, uVar1, 0);
}
}
void sub_0808CA10(Entity* this) {
s32 sVar3;
s32 sVar5;
switch (this->type) {
case 1:
if (gUnk_02018EB0.unk_18 != 0) {
this->timer = 0x20;
gUnk_02018EB0.unk_18 = 0;
SoundReq(SFX_12E);
}
break;
case 2:
if (gUnk_02018EB0.unk_19 != 0) {
this->timer = 0x20;
gUnk_02018EB0.unk_19 = 0;
SoundReq(SFX_12E);
}
break;
case 3:
if (gUnk_02018EB0.unk_1a != 0) {
this->timer = 0x20;
gUnk_02018EB0.unk_1a = 0;
SoundReq(SFX_12E);
}
break;
}
if ((this->id != OBJECT_75 && ((u8)(this->type - 1) < 3)) && this->timer != 0) {
this->timer--;
this->subtimer++;
if (this->timer != 0) {
sVar5 = gUnk_08121648[this->subtimer & 0xe];
sVar3 = gUnk_08121648[(this->subtimer & 0xe) + 1];
} else {
sVar3 = 0x100;
sVar5 = sVar3;
}
if (this->type == 1) {
sVar5 = sVar5 - 0x20;
sVar3 = sVar3 - 0x20;
}
SetAffineInfo(this, sVar5, sVar3, 0);
}
}
-2
View File
@@ -160,5 +160,3 @@ void sub_0808C8B8(Object3AEntity* this) {
DeleteThisEntity();
}
}
const u16 gUnk_08121648[] = { 264, 252, 256, 256, 248, 260, 240, 264, 248, 260, 256, 256, 264, 252, 272, 248 };
+3 -3
View File
@@ -808,7 +808,7 @@ void sub_0809584C(Object6AEntity* this) {
u32 tmp, idx;
idx = super->health;
if ((idx & 0x7F) != 0 && !ReadBit((u32*)gArea.filler5, idx - 1))
if ((idx & 0x7F) != 0 && !ReadBit((u32*)gArea.filler6, idx - 1))
DeleteThisEntity();
if (super->timer != 0 && CheckKinstoneFused(super->type2))
DeleteThisEntity();
@@ -1178,9 +1178,9 @@ void sub_08095F38(Object6AEntity* this) {
void sub_08096028(Object6AEntity* this) {
u32 type2 = 6;
if (!CheckLocalFlagByBank(768, 123))
if (!CheckLocalFlagByBank(FLAG_BANK_3, 123))
type2 = 4;
if (!CheckLocalFlagByBank(768, 122))
if (!CheckLocalFlagByBank(FLAG_BANK_3, 122))
type2 = 3;
CreateObject(OBJECT_6A, 0x1F, type2);
}
-14
View File
@@ -1,14 +0,0 @@
#define NENT_DEPRECATED
#include "entity.h"
extern void sub_0808C964(Entity*);
extern void sub_0808CA10(Entity*);
void Object75(Entity* this) {
static void (*const actionFuncs[])(Entity*) = {
sub_0808C964,
sub_0808CA10,
};
actionFuncs[this->action](this);
}
-14
View File
@@ -1,14 +0,0 @@
#define NENT_DEPRECATED
#include "entity.h"
extern void sub_0808C964(Entity*);
extern void sub_0808CA10(Entity*);
void Object76(Entity* this) {
static void (*const actionFuncs[])(Entity*) = {
sub_0808C964,
sub_0808CA10,
};
actionFuncs[this->action](this);
}
+2 -2
View File
@@ -283,8 +283,8 @@ typedef struct {
} struct_gUnk_08122898;
const struct_gUnk_08122898 gUnk_08122898[] = {
{ 0x200, 0xa1, 0xa2 },
{ 0x8c0, 0x6f, 0x70 },
{ FLAG_BANK_2, 0xa1, 0xa2 },
{ FLAG_BANK_10, 0x6f, 0x70 },
};
u32 sub_080932D8(u32 param_1) {
+3 -3
View File
@@ -294,9 +294,9 @@ void sub_080971E0(ObjectOnPillarEntity* this) {
bool32 sub_08097348(u32 tilePosition) {
u32 index;
TileEntity* tileEntity = gSmallChests;
for (index = 0; index < 8; index++, tileEntity++) {
if (tileEntity->_4 == tilePosition) {
return CheckLocalFlag(tileEntity->_1);
for (index = 0; index < ARRAY_COUNT(gSmallChests); index++, tileEntity++) {
if (tileEntity->tilePos == tilePosition) {
return CheckLocalFlag(tileEntity->localFlag);
}
}
return FALSE;
+1 -1
View File
@@ -23,7 +23,7 @@ void Whirlwind(Entity* this) {
Whirlwind_Action2,
};
u32 tmp = this->health;
if (((tmp & 0x7f) != 0) && (ReadBit(gArea.filler5, tmp - 1) == 0)) {
if (((tmp & 0x7f) != 0) && (ReadBit(gArea.filler6, tmp - 1) == 0)) {
DeleteThisEntity();
}
Whirlwind_Actions[this->action](this);
+1 -1
View File
@@ -26,7 +26,7 @@ static bool32 sub_0807007C(struct_gUnk_020000C0*, u32);
void sub_0806F364(void) {
gArea.filler[2] ^= 0x80;
MemClear(&gArea.filler5[(gArea.filler[2] + 7) / 8], 16);
MemClear(&gArea.filler6[(gArea.filler[2] + 7) / 8], 16);
}
void sub_0806F38C(void) {
+4 -4
View File
@@ -56,14 +56,14 @@ void sub_080A7C8C(u32 pos, u32 layer) {
u32 found = 0;
u32 i;
for (i = 0; i < 8; ++i, ++t) {
if (*(u16*)&t->_4 == pos) {
if (*(u16*)&t->tilePos == pos) {
found = 1;
break;
}
}
if ((layer >> 1) == ((u32)(t->_6 << 31) >> 31)) {
if (found) {
SetLocalFlag(t->_1);
SetLocalFlag(t->localFlag);
CreateItemEntity(t->_2, t->_3, 0);
} else {
CreateItemEntity(0x60, 0, 0);
@@ -81,7 +81,7 @@ u32 sub_080A7CFC(u32 a1) {
TileEntity* t = GetCurrentRoomProperty(3);
if (t != 0) {
do {
if (t->_4 == a1) {
if (t->tilePos == a1) {
switch (t->type) {
case SIGN:
hint = FALSE;
@@ -95,7 +95,7 @@ u32 sub_080A7CFC(u32 a1) {
break;
}
t++;
} while (t->_4 != 0);
} while (t->tilePos != 0);
}
InitTileMessage(msg, hint);
}
+20 -20
View File
@@ -215,27 +215,27 @@ bool32 sub_080777A0(void) {
}
}
NONMATCH("asm/non_matching/playerUtils/sub_08077880.inc", void sub_08077880(u32 param_1, u32 param_2, u32 param_3)) {
void sub_08077880(Item itemId, u32 param_2, u32 param_3) {
ItemBehavior* item;
u16* puVar2;
if (param_1 - 1 < 0x1f) {
if (gUnk_0811BE48[param_1].unk0[0] != 0) {
if (itemId - 1 < 0x1f) {
struct_0811BE48* ptr = &gUnk_0811BE48[itemId];
puVar2 = &gPlayerState.field_0x90;
if (ptr->unk0[0] != 0) {
puVar2 = &gPlayerState.field_0x92;
} else {
puVar2 = &gPlayerState.field_0x90;
}
if (((*puVar2 & param_2) != 0) || (param_3 != 0)) {
item = sub_0807794C(param_1);
item = sub_0807794C(itemId);
if (item != NULL) {
item->field_0x5[4] = gUnk_0811BE48[param_1].unk0[1];
item->behaviorID = (u8)param_1;
item->field_0x2[1] = (u8)param_2;
item->field_0x5[4] = gUnk_0811BE48[itemId].unk0[1];
item->behaviorID = itemId;
item->field_0x2[1] = param_2;
}
}
}
}
END_NONMATCH
bool32 sub_080778CC(void) {
ItemBehavior* item;
@@ -246,9 +246,9 @@ bool32 sub_080778CC(void) {
(((sub_080789A8() != 0 || ((gPlayerState.field_0x90 & 0xf03) == 0)))))) {
return FALSE;
}
item = sub_0807794C(0x1b);
item = sub_0807794C(ITEM_TRAP);
if (item != NULL) {
item->behaviorID = 0x1b;
item->behaviorID = ITEM_TRAP;
item->field_0x5[4] = gUnk_0811BE48[0].unk0[0x145];
return TRUE;
} else {
@@ -256,16 +256,16 @@ bool32 sub_080778CC(void) {
}
}
ItemBehavior* sub_0807794C(u32 param_1) {
if (((((gPlayerState.queued_action == PLAYER_ROLL) && (param_1 != 0x1b)) ||
(((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (6 < param_1)))) ||
((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (6 < param_1)) ||
(((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[param_1].unk6[2] == 0)))))) ||
((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) {
ItemBehavior* sub_0807794C(Item itemId) {
if (((((gPlayerState.queued_action == PLAYER_ROLL) && (itemId != ITEM_TRAP)) ||
(((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (ITEM_FOURSWORD < itemId)))) ||
((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (ITEM_FOURSWORD < itemId)) ||
(((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[itemId].unk6[2] == 0)))))) ||
((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < itemId - 0x14)))))) {
return NULL;
} else {
u32 tmp = gUnk_0811BE48[param_1].unk0[2];
return gUnk_0811BFC8[tmp](param_1);
u32 tmp = gUnk_0811BE48[itemId].unk0[2];
return gUnk_0811BFC8[tmp](itemId);
}
}
-1
View File
@@ -5,7 +5,6 @@
#include "object.h"
extern u32 sub_080B1AE0(u16, u8);
extern Entity* LoadRoomEntity(EntityData*);
extern void (*const RemovableDust_Functions[])(Entity*);
extern const u16 gUnk_08129FD0[];
+18 -22
View File
@@ -51,32 +51,29 @@ void V1EyeLaser_Action2(Entity* this) {
}
}
NONMATCH("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this)) {
void sub_080AB758(Entity* this) {
s32 r6 = 6;
u32 r7 = 0;
u32 index = 0;
if (((u32)this->y.HALF.HI) <= (u16)(gRoomControls.origin_y + 0xd4)) {
u32 tmp = 7;
do {
if ((index & tmp) == 7) {
sub_080AB844(this, 4, r6);
r6 += 0x3e;
r7 += 0x3e;
}
index = (index + 1) & tmp;
} while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4));
u32 tmp = this->y.HALF.HI + r7 + (index << 3);
for (; tmp <= (u16)(gRoomControls.origin_y + 0xd4);
index = (index + 1) & 7, tmp = this->y.HALF.HI + r7 + (index << 3)) {
if ((index & 7) == 7) {
sub_080AB844(this, 4, r6);
r6 += 0x3e;
r7 += 0x3e;
}
}
index = 0;
if (this->y.HALF.HI + r7 <= (u16)(gRoomControls.origin_y + 0xd4)) {
u32 tmp = 3;
do {
if ((index & tmp) == 3) {
sub_080AB844(this, 3, r6);
r6 += 0x1e;
r7 += 0x1e;
}
index = (index + 1) & tmp;
} while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4));
tmp = this->y.HALF.HI + r7 + (index << 3);
for (; tmp <= (u16)(gRoomControls.origin_y + 0xd4);
index = (index + 1) & 3, tmp = this->y.HALF.HI + r7 + (index << 3)) {
if ((index & 3) == 3) {
sub_080AB844(this, 3, r6);
r6 += 0x1e;
r7 += 0x1e;
}
}
if (index & 0x2) {
@@ -89,7 +86,6 @@ NONMATCH("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entit
sub_080AB844(this, 6, r6);
}
END_NONMATCH
void sub_080AB844(Entity* this, s32 param_1, s32 param_2) {
Entity* entity;
+21 -21
View File
@@ -10,7 +10,7 @@
static void sub_0804B058(EntityData* dat);
extern void sub_0801AC98(void);
extern u32 sub_08049D1C(u32);
extern Entity* LoadRoomEntity(EntityData*);
extern Entity* LoadRoomEntity(const EntityData*);
extern void* GetRoomProperty(u32, u32, u32);
extern void** gCurrentRoomProperties;
@@ -22,8 +22,8 @@ extern void sub_0804B16C(void);
extern void ClearSmallChests(void);
extern Entity* GetEmptyEntityByKind(u32 kind);
void RegisterRoomEntity(Entity*, EntityData*);
void sub_0804AF0C(Entity*, EntityData*);
void RegisterRoomEntity(Entity*, const EntityData*);
void sub_0804AF0C(Entity*, const EntityData*);
void sub_0804AFB0(void** properties);
void sub_08054524(void);
@@ -39,7 +39,7 @@ static void LoadDestructibleTile(TileEntity*);
static void LoadGrassDropTile(TileEntity*);
static void LoadLocationTile(TileEntity*);
void LoadRoomEntityList(EntityData* listPtr) {
void LoadRoomEntityList(const EntityData* listPtr) {
if (listPtr != NULL) {
while (listPtr->kind != 0xFF) {
LoadRoomEntity(listPtr++);
@@ -47,7 +47,7 @@ void LoadRoomEntityList(EntityData* listPtr) {
}
}
NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityData* dat)) {
NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(const EntityData* dat)) {
int kind;
Entity* v4;
Entity* v5;
@@ -86,7 +86,7 @@ NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityDat
}
END_NONMATCH
void RegisterRoomEntity(Entity* ent, EntityData* dat) {
void RegisterRoomEntity(Entity* ent, const EntityData* dat) {
u32 list;
u32 kind;
void* offset;
@@ -108,7 +108,7 @@ void RegisterRoomEntity(Entity* ent, EntityData* dat) {
MemCopy(dat, offset, sizeof(EntityData));
}
void sub_0804AF0C(Entity* ent, EntityData* dat) {
void sub_0804AF0C(Entity* ent, const EntityData* dat) {
switch (dat->flags & 0xf0) {
case 0x0:
ent->x.HALF.HI = dat->xPos + gRoomControls.origin_x;
@@ -251,8 +251,8 @@ void* GetCurrentRoomProperty(u32 idx) {
void sub_0804B16C(void) {
TileEntity* tile = gSmallChests;
do {
if (tile->_4 != 0 && CheckLocalFlag(tile->_1)) {
SetTileType(0x74, tile->_4, tile->_6 & 1 ? 2 : 1);
if (tile->tilePos != 0 && CheckLocalFlag(tile->localFlag)) {
SetTileType(0x74, tile->tilePos, tile->_6 & 1 ? 2 : 1);
}
} while (++tile < gSmallChests + 8);
}
@@ -297,28 +297,28 @@ void LoadRoomTileEntities(TileEntity* list) {
}
static void LoadGrassDropTile(TileEntity* tile) {
MemCopy(&gAreaDroptables[tile->_1], &gRoomVars.currentAreaDroptable, 0x20);
MemCopy(&gAreaDroptables[tile->localFlag], &gRoomVars.currentAreaDroptable, 0x20);
}
static void LoadLocationTile(TileEntity* tile) {
gArea.locationIndex = tile->_1;
gArea.locationIndex = tile->localFlag;
sub_08054524();
}
static void LoadRoomVisitTile(TileEntity* tile) {
SetLocalFlag(tile->_1);
SetLocalFlag(tile->localFlag);
}
static void LoadSmallChestTile(TileEntity* tile) {
TileEntity* t = gSmallChests;
u32 i = 0;
for (i = 0; i < 8; ++i, ++t) {
if (!t->_4) {
if (!t->tilePos) {
MemCopy(tile, t, sizeof(TileEntity));
if ((t->_6 & 1) && (gRoomControls.scroll_flags & 2) && !CheckLocalFlag(t->_1)) {
Entity* e = CreateObject(OBJECT_52, t->_1, 0);
if ((t->_6 & 1) && (gRoomControls.scroll_flags & 2) && !CheckLocalFlag(t->localFlag)) {
Entity* e = CreateObject(OBJECT_52, t->localFlag, 0);
if (e != NULL) {
sub_0806F704(e, t->_4);
sub_0806F704(e, t->tilePos);
}
}
return;
@@ -331,10 +331,10 @@ static void LoadBombableWallTile(TileEntity* tile) {
if (mgr != NULL) {
mgr->manager.type = 9;
mgr->manager.subtype = 0x24;
mgr->x = tile->_4;
mgr->x = tile->tilePos;
mgr->y = *(u16*)&tile->_6;
mgr->field_0x35 = tile->_2;
mgr->field_0x3e = tile->_1;
mgr->field_0x3e = tile->localFlag;
AppendEntityToList((Entity*)mgr, 6);
}
}
@@ -345,7 +345,7 @@ static void LoadDarknessTile(TileEntity* tile) {
static void LoadDestructibleTile(TileEntity* tile) {
if (CheckLocalFlag(*(u16*)&tile->_2)) {
SetTileType(*(u16*)&tile->_6, tile->_4, tile->_1);
SetTileType(*(u16*)&tile->_6, tile->tilePos, tile->localFlag);
} else if (!gRoomVars.filler_0x1) {
Manager* mgr;
gRoomVars.filler_0x1 = 1;
@@ -369,6 +369,6 @@ void sub_0804B388(u32 a1, u32 a2) {
sub_080526F8(-1);
}
void sub_0804B3C4(void* arg0) {
LoadSmallChestTile(arg0);
void sub_0804B3C4(TileEntity* tile) {
LoadSmallChestTile(tile);
}
+3 -6
View File
@@ -4633,10 +4633,7 @@ u32 sub_unk3_SimonsSimulation_Main(void) {
extern u8* gUnk_080F0D58[4];
extern Entity* gUnk_080F0CB8[15];
extern u8* gUnk_080F0E08[];
extern struct {
u32 unk_00;
u32 unk_04;
} gUnk_080F0E1C[];
extern TileEntity gUnk_080F0E1C[];
void sub_StateChange_SimonsSimulation_Main(void) {
u32 r;
@@ -5356,7 +5353,7 @@ extern EntityData gUnk_080F5788;
void sub_StateChange_HouseInteriors3_StockwellShop(void) {
LoadRoomEntityList(&gUnk_080F5758);
if (!GetInventoryValue(ITEM_QST_DOGFOOD) && CheckLocalFlagByBank(0x200, 0x8f)) {
if (!GetInventoryValue(ITEM_QST_DOGFOOD) && CheckLocalFlagByBank(FLAG_BANK_2, 0x8f)) {
LoadRoomEntityList(&gUnk_080F57E8);
}
if (!CheckLocalFlag(0x55)) {
@@ -5549,7 +5546,7 @@ extern EntityData gUnk_080F66AC;
void sub_StateChange_WindTribeTowerRoof_Main(void) {
sub_0805B4D0(5);
if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByBank(0x100, 5)) {
if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByBank(FLAG_BANK_1, 5)) {
LoadRoomEntityList(&gUnk_080F66AC);
}
SetWorldMapPos(8, 0, 0x1e8, 0x158);
+2 -10
View File
@@ -69,7 +69,6 @@ extern const EntityData gUnk_080FF264[];
extern void (*const gUnk_080FF28C[])(void);
extern Entity* LoadRoomEntity(EntityData*);
extern void sub_08054A14(u32);
extern const EntityData gUnk_080FEE48[];
@@ -90,13 +89,6 @@ extern void (*const gUnk_080FF330[])(void);
void sub_08055994(void);
typedef struct {
u8 unk_0[6];
u8 unk_6;
u8 unk_7;
} struct_080FEAC8;
extern struct_080FEAC8 gUnk_080FEAC8[];
extern void (*const gUnk_080FF35C[])(void);
extern const EntityData gUnk_080FF33C[];
@@ -676,8 +668,8 @@ void sub_08055978(void) {
void sub_08055994(void) {
u32 layer;
struct_080FEAC8* ptr = &gUnk_080FEAC8[gMenu.field_0x4];
if ((ptr->unk_6 & 1) != 0) {
TileEntity* ptr = &gUnk_080FEAC8[gMenu.field_0x4];
if ((ptr->_6 & 1) != 0) {
layer = 2;
} else {
layer = 1;
+1 -1
View File
@@ -765,7 +765,7 @@ void sub_080A5D1C(void) {
bool32 sub_080A5F24(void) {
bool32 result = TRUE;
if ((gArea.dungeon_idx == 6) && CheckLocalFlagByBank(0x8c0, 0x7b)) {
if ((gArea.dungeon_idx == 6) && CheckLocalFlagByBank(FLAG_BANK_10, 0x7b)) {
result = 0;
}
return result;