Merge pull request #483 from octorock/beanstalkSubtask

Decompile some of beanstalkSubtask
This commit is contained in:
notyourav
2022-03-31 14:11:59 -07:00
committed by GitHub
38 changed files with 3585 additions and 3673 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,46 @@
.syntax unified
push {r4, r5, r6, lr}
adds r4, r0, #0
lsls r1, r1, #0xc
orrs r4, r1
ldr r2, _0801AFB8 @ =gUnk_0200B240
ldr r0, _0801AFBC @ =gRoomVars
ldrh r1, [r0, #0xe]
movs r3, #0
adds r5, r2, #0
cmp r3, r1
bhs _0801AFE0
ldrh r6, [r2]
cmp r4, r6
bne _0801AFC0
subs r1, #1
strh r1, [r0, #0xe]
lsls r0, r1, #2
adds r0, r0, r2
ldr r0, [r0]
str r0, [r2]
b _0801AFE0
.align 2, 0
_0801AFB8: .4byte gUnk_0200B240
_0801AFBC: .4byte gRoomVars
_0801AFC0:
adds r2, #4
adds r3, #1
cmp r3, r1
bhs _0801AFE0
ldrh r6, [r2]
cmp r4, r6
bne _0801AFC0
subs r1, #1
strh r1, [r0, #0xe]
adds r2, r5, #0
lsls r0, r3, #2
adds r0, r0, r2
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
str r1, [r0]
_0801AFE0:
pop {r4, r5, r6, pc}
.align 2, 0
.syntax divided
@@ -0,0 +1,19 @@
.syntax unified
ldr r0, _080197C4 @ =gMapBottom
ldr r1, _080197C8 @ =gBGAffSettings
str r1, [r0]
ldr r2, _080197CC @ =gUnk_080B77C0
ldrh r0, [r2]
strh r0, [r1]
ldr r0, _080197D0 @ =gMapTop
subs r1, #0xc
str r1, [r0]
ldrh r0, [r2, #2]
strh r0, [r1]
bx lr
.align 2, 0
_080197C4: .4byte gMapBottom
_080197C8: .4byte gScreen + 0x20
_080197CC: .4byte gUnk_080B77C0
_080197D0: .4byte gMapTop
.syntax divided
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,54 @@
.syntax unified
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x80
lsls r5, r5, #0x18
_080197DC:
ldr r3, [r4, #4]
cmp r3, #0
beq _08019824
ldr r1, [r4]
ldr r0, _08019808 @ =0x7FFFFFFF
ands r1, r0
ldr r0, _0801980C @ =gMapData
adds r1, r1, r0
ldr r2, [r4, #8]
adds r0, r2, #0
ands r0, r5
cmp r0, #0
beq _0801981A
lsrs r0, r3, #0x18
cmp r0, #6
bne _08019810
adds r0, r1, #0
adds r1, r3, #0
bl LZ77UnCompVram
b _0801982E
.align 2, 0
_08019808: .4byte 0x7FFFFFFF
_0801980C: .4byte gMapData
_08019810:
adds r0, r1, #0
adds r1, r3, #0
bl LZ77UnCompWram
b _0801982E
_0801981A:
adds r0, r1, #0
adds r1, r3, #0
bl MemCopy
b _0801982E
_08019824:
ldrh r0, [r4]
bl LoadPaletteGroup
bl sub_080533CC
_0801982E:
adds r4, #0xc
adds r0, r4, #0
subs r0, #0xc
ldr r0, [r0]
ands r0, r5
cmp r0, #0
bne _080197DC
pop {r4, r5, pc}
.align 2, 0
.syntax divided
@@ -0,0 +1,95 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r4, r1, #0
adds r6, r2, #0
ldr r1, _0801A31C @ =gUnk_080B4488
ldr r2, _0801A320 @ =gPlayerEntity
ldrb r0, [r2, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #1
adds r0, r0, r1
ldrh r3, [r0]
ldr r1, _0801A324 @ =gPlayerState
adds r0, r1, #0
adds r0, #0x35
ldrb r0, [r0]
ldrb r1, [r1, #0xd]
orrs r0, r1
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _0801A36C
adds r0, r2, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0801A36C
adds r0, r4, r3
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
adds r0, r2, #0
adds r0, #0x38
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
bl sub_080B1B54
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r1, r0, #0
cmp r0, #0x52
beq _0801A36C
cmp r0, #0x52
bgt _0801A328
cmp r0, #0x26
blt _0801A32C
cmp r0, #0x27
ble _0801A36C
cmp r0, #0x29
beq _0801A36C
b _0801A32C
.align 2, 0
_0801A31C: .4byte gUnk_080B4488
_0801A320: .4byte gPlayerEntity
_0801A324: .4byte gPlayerState
_0801A328:
cmp r1, #0x74
beq _0801A36C
_0801A32C:
ldr r0, _0801A364 @ =0x00002004
adds r3, r5, r0
adds r0, r3, r4
ldrb r0, [r0]
cmp r0, #0x28
beq _0801A36C
movs r1, #0x3f
ands r1, r4
ldr r0, _0801A368 @ =gRoomControls
lsls r1, r1, #4
ldrh r2, [r0, #6]
adds r1, r1, r2
lsrs r2, r4, #6
lsls r2, r2, #4
ldrh r0, [r0, #8]
adds r2, r2, r0
lsls r1, r1, #0x10
asrs r1, r1, #0x10
lsls r2, r2, #0x10
asrs r2, r2, #0x10
adds r0, r3, #0
adds r3, r6, #0
bl IsTileCollision
cmp r0, #0
bne _0801A36C
movs r0, #1
b _0801A36E
.align 2, 0
_0801A364: .4byte 0x00002004
_0801A368: .4byte gRoomControls
_0801A36C:
movs r0, #0
_0801A36E:
pop {r4, r5, r6, pc}
.syntax divided
@@ -0,0 +1,120 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
mov r8, r0
adds r4, r1, #0
ldr r5, _0801A3C8 @ =gPlayerEntity
ldrb r1, [r5, #0x14]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _0801A44E
bl sub_0801A4F8
cmp r0, #0
beq _0801A44E
movs r0, #2
bl GetLayerByIndex
adds r7, r0, #0
ldr r1, _0801A3CC @ =gUnk_080B4488
ldrb r0, [r5, #0x14]
lsrs r0, r0, #1
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r6, [r0, r1]
adds r4, r4, r6
adds r0, r5, #0
adds r0, #0x38
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
adds r1, r0, #0
ldr r0, _0801A3D0 @ =0x0000402B
cmp r1, r0
beq _0801A3D4
cmp r1, r0
blo _0801A3D6
adds r0, #4
cmp r1, r0
bhi _0801A3D6
_0801A3C4:
movs r0, #1
b _0801A450
.align 2, 0
_0801A3C8: .4byte gPlayerEntity
_0801A3CC: .4byte gUnk_080B4488
_0801A3D0: .4byte 0x0000402B
_0801A3D4:
adds r4, r4, r6
_0801A3D6:
adds r0, r7, r4
ldr r1, _0801A40C @ =0x00001F84
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0x46
beq _0801A44E
ldr r0, _0801A410 @ =gPlayerEntity
adds r0, #0x38
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
bl sub_080B1B54
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x52
beq _0801A44E
cmp r0, #0x52
bgt _0801A414
cmp r0, #0x26
blt _0801A418
cmp r0, #0x27
ble _0801A44E
cmp r0, #0x29
beq _0801A44E
b _0801A418
.align 2, 0
_0801A40C: .4byte 0x00001F84
_0801A410: .4byte gPlayerEntity
_0801A414:
cmp r0, #0x74
beq _0801A44E
_0801A418:
ldr r0, _0801A434 @ =0x00002004
add r0, r8
adds r0, r0, r4
ldrb r0, [r0]
adds r1, r0, #0
cmp r0, #0xa
beq _0801A446
cmp r0, #0xa
bgt _0801A438
cmp r0, #0
beq _0801A3C4
cmp r0, #5
beq _0801A440
b _0801A44E
.align 2, 0
_0801A434: .4byte 0x00002004
_0801A438:
cmp r1, #0x44
beq _0801A446
cmp r1, #0x45
bne _0801A44E
_0801A440:
cmp r6, #1
bne _0801A44E
b _0801A3C4
_0801A446:
movs r0, #1
rsbs r0, r0, #0
cmp r6, r0
beq _0801A3C4
_0801A44E:
movs r0, #0
_0801A450:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -0,0 +1,63 @@
.syntax unified
push {r4, r5, lr}
ldr r4, _0801A538 @ =gPlayerState
ldr r0, [r4, #0x30]
movs r5, #0x80
ands r0, r5
cmp r0, #0
beq _0801A544
movs r0, #0x45
bl GetInventoryValue
cmp r0, #1
bne _0801A564
ldrb r1, [r4, #0xd]
adds r0, r5, #0
ands r0, r1
cmp r0, #0
bne _0801A564
ldr r2, _0801A53C @ =gPlayerEntity
ldrb r0, [r2, #0x15]
cmp r1, r0
bne _0801A564
ldrb r0, [r2, #0x15]
adds r0, #4
movs r1, #0x18
ands r0, r1
ldr r1, _0801A540 @ =gUnk_080B44A0
lsrs r0, r0, #2
adds r0, r0, r1
ldrh r1, [r0]
ldrh r0, [r2, #0x2a]
b _0801A55E
.align 2, 0
_0801A538: .4byte gPlayerState
_0801A53C: .4byte gPlayerEntity
_0801A540: .4byte gUnk_080B44A0
_0801A544:
adds r0, r4, #0
adds r0, #0x35
ldrb r0, [r0]
ldrb r1, [r4, #0xd]
orrs r0, r1
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _0801A564
ldr r0, _0801A568 @ =gPlayerEntity
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #1
_0801A55E:
ands r0, r1
cmp r0, #0
bne _0801A56C
_0801A564:
movs r0, #0
b _0801A56E
.align 2, 0
_0801A568: .4byte gPlayerEntity
_0801A56C:
movs r0, #1
_0801A56E:
pop {r4, r5, pc}
.syntax divided
@@ -0,0 +1,454 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r6, r0, #0
mov sl, r1
cmp r6, #0
bne _0801A58C
ldr r0, _0801A588 @ =0x0000FFFF
b _0801A8C2
.align 2, 0
_0801A588: .4byte 0x0000FFFF
_0801A58C:
adds r4, r6, #0
adds r4, #0x38
ldrb r0, [r4]
bl GetLayerByIndex
mov r8, r0
ldr r0, _0801A668 @ =0x00005004
add r0, r8
mov ip, r0
movs r5, #4
movs r7, #2
ldrb r0, [r6, #0x14]
lsrs r0, r0, #1
mov sb, r4
cmp r0, #1
beq _0801A678
cmp r0, #1
ble _0801A5BC
cmp r0, #2
bne _0801A5B6
b _0801A73C
_0801A5B6:
cmp r0, #3
bne _0801A5BC
b _0801A7FC
_0801A5BC:
movs r1, #0x2e
ldrsh r0, [r6, r1]
ldr r2, _0801A66C @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r2, #8]
adds r1, #0xa
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
movs r3, #0xdc
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A5EA:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
beq _0801A600
subs r1, #2
subs r4, #1
subs r5, #1
cmp r5, #0
bne _0801A5EA
_0801A600:
subs r4, #0x40
movs r3, #0xdd
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A60A:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A620
adds r7, #1
subs r1, #0x80
subs r4, #0x40
cmp r7, #3
bls _0801A60A
_0801A620:
mov r2, sl
cmp r2, #0
bne _0801A628
b _0801A8C0
_0801A628:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
adds r5, r0, #0
ldr r1, _0801A670 @ =0xFFFFFC97
adds r0, r5, r1
cmp r0, #1
bls _0801A63E
b _0801A8B4
_0801A63E:
ldr r2, _0801A674 @ =0x00001FC4
adds r0, r4, r2
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
blo _0801A64E
b _0801A8B6
_0801A64E:
ldrb r0, [r1]
cmp r0, #0
beq _0801A656
b _0801A8B4
_0801A656:
adds r5, #1
cmp r5, r7
blo _0801A65E
b _0801A8B6
_0801A65E:
adds r0, r1, r5
ldrb r0, [r0]
cmp r0, #0
beq _0801A656
b _0801A8B4
.align 2, 0
_0801A668: .4byte 0x00005004
_0801A66C: .4byte gRoomControls
_0801A670: .4byte 0xFFFFFC97
_0801A674: .4byte 0x00001FC4
_0801A678:
movs r0, #0x2e
ldrsh r1, [r6, r0]
ldr r3, _0801A730 @ =gRoomControls
ldrh r0, [r3, #6]
subs r0, #0xa
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
movs r6, #0xdc
lsls r6, r6, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A6A8:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A6BE
adds r1, #0x80
adds r4, #0x40
subs r5, #1
cmp r5, #0
bne _0801A6A8
_0801A6BE:
subs r4, #0x40
movs r3, #0xdd
lsls r3, r3, #2
lsls r0, r4, #1
adds r1, r0, r2
_0801A6C8:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A6DE
adds r7, #1
subs r1, #0x80
subs r4, #0x40
cmp r7, #3
bls _0801A6C8
_0801A6DE:
mov r2, sl
cmp r2, #0
bne _0801A6E6
b _0801A8C0
_0801A6E6:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
adds r5, r0, #0
ldr r0, _0801A734 @ =0x00000369
cmp r5, r0
beq _0801A700
adds r0, #4
cmp r5, r0
beq _0801A700
b _0801A8B4
_0801A700:
adds r0, r4, r7
ldr r1, _0801A738 @ =0x00002004
adds r0, r0, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
blo _0801A712
b _0801A8B6
_0801A712:
ldrb r0, [r1]
cmp r0, #0
beq _0801A71A
b _0801A8B4
_0801A71A:
adds r5, #1
cmp r5, r7
blo _0801A722
b _0801A8B6
_0801A722:
lsls r0, r5, #6
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0
beq _0801A71A
b _0801A8B4
.align 2, 0
_0801A730: .4byte gRoomControls
_0801A734: .4byte 0x00000369
_0801A738: .4byte 0x00002004
_0801A73C:
movs r1, #0x2e
ldrsh r0, [r6, r1]
ldr r2, _0801A7E8 @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r2, #8]
subs r1, #0xa
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
ldr r6, _0801A7EC @ =0x0000036F
lsls r0, r4, #1
adds r1, r0, r2
_0801A76A:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A780
adds r1, #2
adds r4, #1
subs r5, #1
cmp r5, #0
bne _0801A76A
_0801A780:
subs r4, #1
ldr r3, _0801A7F0 @ =0x00000372
lsls r0, r4, #1
adds r1, r0, r2
_0801A788:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A79E
adds r7, #1
subs r1, #2
subs r4, #1
cmp r7, #3
bls _0801A788
_0801A79E:
mov r2, sl
cmp r2, #0
bne _0801A7A6
b _0801A8C0
_0801A7A6:
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
adds r5, r0, #0
ldr r0, _0801A7F4 @ =0x00000369
cmp r5, r0
beq _0801A7BE
adds r0, #2
cmp r5, r0
bne _0801A8B4
_0801A7BE:
lsls r0, r7, #6
adds r0, r4, r0
ldr r1, _0801A7F8 @ =0x00002004
adds r0, r0, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
bhs _0801A8B6
ldrb r0, [r1]
cmp r0, #0
bne _0801A8B4
_0801A7D6:
adds r5, #1
cmp r5, r7
bhs _0801A8B6
adds r0, r1, r5
ldrb r0, [r0]
cmp r0, #0
beq _0801A7D6
b _0801A8B4
.align 2, 0
_0801A7E8: .4byte gRoomControls
_0801A7EC: .4byte 0x0000036F
_0801A7F0: .4byte 0x00000372
_0801A7F4: .4byte 0x00000369
_0801A7F8: .4byte 0x00002004
_0801A7FC:
movs r0, #0x2e
ldrsh r1, [r6, r0]
ldr r3, _0801A890 @ =gRoomControls
ldrh r0, [r3, #6]
adds r0, #0xa
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r6, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
mov r2, r8
adds r2, #4
mov r3, ip
ldr r6, _0801A894 @ =0x0000036F
lsls r0, r4, #1
adds r1, r0, r2
_0801A82A:
ldrh r0, [r1]
lsls r0, r0, #1
adds r0, r3, r0
ldrh r0, [r0]
cmp r0, r6
beq _0801A840
subs r1, #0x80
subs r4, #0x40
subs r5, #1
cmp r5, #0
bne _0801A82A
_0801A840:
subs r4, #1
ldr r3, _0801A898 @ =0x00000372
lsls r0, r4, #1
adds r1, r0, r2
_0801A848:
ldrh r0, [r1]
lsls r0, r0, #1
add r0, ip
ldrh r0, [r0]
cmp r0, r3
bne _0801A85E
adds r7, #1
subs r1, #2
subs r4, #1
cmp r7, #3
bls _0801A848
_0801A85E:
mov r2, sl
cmp r2, #0
beq _0801A8C0
mov r0, sb
ldrb r1, [r0]
adds r0, r4, #0
bl GetTileType
adds r5, r0, #0
ldr r0, _0801A89C @ =0x00000369
cmp r5, r0
beq _0801A87C
adds r0, #3
cmp r5, r0
bne _0801A8B4
_0801A87C:
ldr r1, _0801A8A0 @ =0x00002003
adds r0, r4, r1
mov r2, r8
adds r1, r2, r0
movs r5, #0
cmp r5, r7
bhs _0801A8B6
ldrb r0, [r1]
b _0801A8B0
.align 2, 0
_0801A890: .4byte gRoomControls
_0801A894: .4byte 0x0000036F
_0801A898: .4byte 0x00000372
_0801A89C: .4byte 0x00000369
_0801A8A0: .4byte 0x00002003
_0801A8A4:
adds r5, #1
cmp r5, r7
bhs _0801A8B6
lsls r0, r5, #6
adds r0, r0, r1
ldrb r0, [r0]
_0801A8B0:
cmp r0, #0
beq _0801A8A4
_0801A8B4:
ldr r4, _0801A8CC @ =0x0000FFFF
_0801A8B6:
mov r0, sl
cmp r0, #0
beq _0801A8C0
lsls r0, r7, #0xc
orrs r4, r0
_0801A8C0:
adds r0, r4, #0
_0801A8C2:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801A8CC: .4byte 0x0000FFFF
.syntax divided
@@ -0,0 +1,92 @@
.syntax unified
push {r4, r5, r6, lr}
adds r5, r0, #0
adds r4, r1, #0
cmp r5, #0
beq _0801A978
adds r0, r5, #0
adds r0, #0x38
ldrb r0, [r0]
bl GetLayerByIndex
adds r6, r0, #4
cmp r4, #0
bne _0801A92C
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r2, _0801A91C @ =gRoomControls
ldrh r1, [r2, #6]
subs r0, r0, r1
asrs r4, r0, #4
movs r3, #0x3f
ands r4, r3
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r2, #8]
adds r1, #8
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r4, r0
lsls r0, r4, #1
adds r0, r0, r6
ldrh r1, [r0]
ldr r0, _0801A920 @ =0x00004055
cmp r1, r0
bne _0801A924
subs r0, r4, #1
b _0801A97A
.align 2, 0
_0801A91C: .4byte gRoomControls
_0801A920: .4byte 0x00004055
_0801A924:
ldr r0, _0801A928 @ =0x00004056
b _0801A96A
.align 2, 0
_0801A928: .4byte 0x00004056
_0801A92C:
movs r0, #0x2e
ldrsh r1, [r5, r0]
ldr r3, _0801A960 @ =gRoomControls
ldrh r0, [r3, #6]
adds r0, #8
subs r1, r1, r0
asrs r4, r1, #4
movs r2, #0x3f
ands r4, r2
movs r1, #0x32
ldrsh r0, [r5, r1]
ldrh r1, [r3, #8]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r2
lsls r0, r0, #6
orrs r4, r0
lsls r0, r4, #1
adds r0, r0, r6
ldrh r1, [r0]
ldr r0, _0801A964 @ =0x00004057
cmp r1, r0
bne _0801A968
adds r0, r4, #0
subs r0, #0x40
b _0801A97A
.align 2, 0
_0801A960: .4byte gRoomControls
_0801A964: .4byte 0x00004057
_0801A968:
ldr r0, _0801A974 @ =0x00004058
_0801A96A:
cmp r1, r0
bne _0801A978
adds r0, r4, #0
b _0801A97A
.align 2, 0
_0801A974: .4byte 0x00004058
_0801A978:
ldr r0, _0801A97C @ =0x0000FFFF
_0801A97A:
pop {r4, r5, r6, pc}
.align 2, 0
_0801A97C: .4byte 0x0000FFFF
.syntax divided
@@ -0,0 +1,55 @@
.syntax unified
push {r4, r5, lr}
adds r3, r0, #0
adds r4, r2, #0
movs r2, #0
ldr r5, _0801AA0C @ =0xFFFFFCA0
adds r0, r1, r5
cmp r0, #4
bhi _0801AA40
lsls r0, r0, #2
ldr r1, _0801AA10 @ =_0801AA14
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0801AA0C: .4byte 0xFFFFFCA0
_0801AA10: .4byte _0801AA14
_0801AA14: @ jump table
.4byte _0801AA44 @ case 0
.4byte _0801AA28 @ case 1
.4byte _0801AA34 @ case 2
.4byte _0801AA3A @ case 3
.4byte _0801AA2E @ case 4
_0801AA28:
cmp r3, #0
bne _0801AA40
b _0801AA44
_0801AA2E:
cmp r3, #8
bne _0801AA40
b _0801AA44
_0801AA34:
cmp r3, #0x10
bne _0801AA40
b _0801AA44
_0801AA3A:
cmp r3, #0x18
bne _0801AA40
movs r2, #1
_0801AA40:
cmp r2, #0
beq _0801AA54
_0801AA44:
ldr r0, _0801AA50 @ =gPlayerEntity
adds r1, r4, #0
adds r2, r3, #0
bl sub_0801AA58
b _0801AA56
.align 2, 0
_0801AA50: .4byte gPlayerEntity
_0801AA54:
movs r0, #0
_0801AA56:
pop {r4, r5, pc}
.syntax divided
@@ -0,0 +1,88 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r6, r0, #0
adds r5, r1, #0
adds r7, r2, #0
movs r0, #0x38
adds r0, r0, r6
mov r8, r0
ldrb r0, [r0]
bl GetLayerByIndex
ldr r2, _0801AAF0 @ =gUnk_080B4488
lsrs r1, r7, #3
lsls r1, r1, #1
adds r1, r1, r2
movs r2, #0
ldrsh r1, [r1, r2]
adds r1, r5, r1
ldr r2, _0801AAF4 @ =0x00002004
adds r0, r0, r2
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0
beq _0801AA94
subs r0, #0x20
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x1f
bhi _0801AB00
_0801AA94:
movs r0, #7
movs r1, #0
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _0801AB00
movs r3, #0
strb r7, [r4, #0x15]
movs r1, #0x3f
adds r0, r5, #0
ands r0, r1
lsls r0, r0, #4
adds r0, #8
ldr r2, _0801AAF8 @ =gRoomControls
ldrh r1, [r2, #6]
adds r1, r1, r0
strh r1, [r4, #0x2e]
movs r0, #0xfc
lsls r0, r0, #4
ands r0, r5
lsrs r0, r0, #2
adds r0, #8
ldrh r1, [r2, #8]
adds r1, r1, r0
strh r1, [r4, #0x32]
mov r0, r8
ldrb r1, [r0]
adds r0, r4, #0
adds r0, #0x38
strb r1, [r0]
ldr r2, _0801AAFC @ =gPlayerState
movs r0, #0xa0
strb r0, [r2, #6]
movs r0, #5
strb r0, [r2, #0xc]
ldr r0, [r2, #0x30]
movs r1, #1
orrs r0, r1
str r0, [r2, #0x30]
strh r3, [r6, #0x2c]
strh r3, [r6, #0x30]
strb r7, [r6, #0x15]
movs r0, #1
b _0801AB02
.align 2, 0
_0801AAF0: .4byte gUnk_080B4488
_0801AAF4: .4byte 0x00002004
_0801AAF8: .4byte gRoomControls
_0801AAFC: .4byte gPlayerState
_0801AB00:
movs r0, #0
_0801AB02:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided
@@ -0,0 +1,183 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
adds r5, r0, #0
mov r8, r1
ldr r0, _0801AB4C @ =gMapBottom
movs r1, #2
cmp r8, r0
bne _0801AB22
movs r1, #1
_0801AB22:
lsls r2, r1, #0xc
ldr r7, _0801AB50 @ =0x00003004
add r7, r8
mov r6, r8
adds r6, #4
movs r0, #0
ldr r1, _0801AB54 @ =0x00003FFF
mov sb, r1
_0801AB32:
movs r3, #0
mov sl, r3
adds r0, #1
str r0, [sp]
movs r0, #0x80
lsls r0, r0, #1
adds r4, r5, r0
_0801AB40:
ldrh r0, [r6]
cmp r0, sb
bhi _0801AB58
lsls r0, r0, #2
b _0801AB64
.align 2, 0
_0801AB4C: .4byte gMapBottom
_0801AB50: .4byte 0x00003004
_0801AB54: .4byte 0x00003FFF
_0801AB58:
ldrh r1, [r7]
adds r0, r2, #0
str r2, [sp, #4]
bl sub_0801AC68
ldr r2, [sp, #4]
_0801AB64:
lsls r0, r0, #1
ldr r1, _0801AB8C @ =0x00007004
adds r0, r0, r1
mov r3, r8
adds r1, r3, r0
ldrh r0, [r1]
strh r0, [r5]
ldrh r0, [r1, #2]
strh r0, [r5, #2]
ldrh r0, [r1, #4]
strh r0, [r4]
ldrh r0, [r1, #6]
strh r0, [r4, #2]
adds r4, #4
adds r5, #4
ldrh r0, [r6, #2]
cmp r0, sb
bhi _0801AB90
lsls r0, r0, #2
b _0801AB9C
.align 2, 0
_0801AB8C: .4byte 0x00007004
_0801AB90:
adds r0, r2, #1
ldrh r1, [r7, #2]
str r2, [sp, #4]
bl sub_0801AC68
ldr r2, [sp, #4]
_0801AB9C:
lsls r0, r0, #1
ldr r1, _0801ABC4 @ =0x00007004
adds r0, r0, r1
mov r3, r8
adds r1, r3, r0
ldrh r0, [r1]
strh r0, [r5]
ldrh r0, [r1, #2]
strh r0, [r5, #2]
ldrh r0, [r1, #4]
strh r0, [r4]
ldrh r0, [r1, #6]
strh r0, [r4, #2]
adds r4, #4
adds r5, #4
ldrh r0, [r6, #4]
cmp r0, sb
bhi _0801ABC8
lsls r0, r0, #2
b _0801ABD4
.align 2, 0
_0801ABC4: .4byte 0x00007004
_0801ABC8:
adds r0, r2, #2
ldrh r1, [r7, #4]
str r2, [sp, #4]
bl sub_0801AC68
ldr r2, [sp, #4]
_0801ABD4:
lsls r0, r0, #1
ldr r1, _0801ABFC @ =0x00007004
adds r0, r0, r1
mov r3, r8
adds r1, r3, r0
ldrh r0, [r1]
strh r0, [r5]
ldrh r0, [r1, #2]
strh r0, [r5, #2]
ldrh r0, [r1, #4]
strh r0, [r4]
ldrh r0, [r1, #6]
strh r0, [r4, #2]
adds r4, #4
adds r5, #4
ldrh r0, [r6, #6]
cmp r0, sb
bhi _0801AC00
lsls r0, r0, #2
b _0801AC0C
.align 2, 0
_0801ABFC: .4byte 0x00007004
_0801AC00:
adds r0, r2, #3
ldrh r1, [r7, #6]
str r2, [sp, #4]
bl sub_0801AC68
ldr r2, [sp, #4]
_0801AC0C:
lsls r0, r0, #1
ldr r1, _0801AC64 @ =0x00007004
adds r0, r0, r1
mov r3, r8
adds r1, r3, r0
ldrh r0, [r1]
strh r0, [r5]
ldrh r0, [r1, #2]
strh r0, [r5, #2]
ldrh r0, [r1, #4]
strh r0, [r4]
ldrh r0, [r1, #6]
strh r0, [r4, #2]
adds r4, #4
adds r5, #4
adds r6, #8
adds r7, #8
adds r0, r2, #4
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
mov r0, sl
adds r0, #1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
mov sl, r0
cmp r0, #0xf
bhi _0801AC44
b _0801AB40
_0801AC44:
movs r0, #0x80
lsls r0, r0, #1
adds r5, r5, r0
ldr r1, [sp]
lsls r0, r1, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x3f
bhi _0801AC56
b _0801AB32
_0801AC56:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801AC64: .4byte 0x00007004
.syntax divided
@@ -0,0 +1,29 @@
.syntax unified
push {r4, r5, lr}
adds r4, r0, #0
ldr r2, _0801AC84 @ =gUnk_0200B240
ldr r0, _0801AC88 @ =gRoomVars
ldrh r3, [r0, #0xe]
movs r0, #0
cmp r0, r3
bhs _0801AC94
_0801AC78:
ldrh r5, [r2]
cmp r4, r5
bne _0801AC8C
ldrh r0, [r2, #2]
lsls r0, r0, #2
b _0801AC96
.align 2, 0
_0801AC84: .4byte gUnk_0200B240
_0801AC88: .4byte gRoomVars
_0801AC8C:
adds r2, #4
adds r0, #1
cmp r0, r3
blo _0801AC78
_0801AC94:
lsls r0, r1, #2
_0801AC96:
pop {r4, r5, pc}
.syntax divided
@@ -0,0 +1,111 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #8
ldr r0, _0801ACD0 @ =gRoomControls
ldrh r1, [r0, #0x1e]
lsrs r1, r1, #4
mov r8, r1
ldrh r0, [r0, #0x20]
lsrs r0, r0, #4
str r0, [sp]
movs r6, #0
movs r1, #0
cmp r1, r0
bhs _0801AD5C
_0801ACBA:
movs r0, #0
adds r1, #1
str r1, [sp, #4]
cmp r0, r8
bhs _0801AD4C
_0801ACC4:
ldr r5, _0801ACD4 @ =gUnk_080B44C0
adds r0, #1
mov sl, r0
adds r0, r6, #1
mov sb, r0
b _0801ACDA
.align 2, 0
_0801ACD0: .4byte gRoomControls
_0801ACD4: .4byte gUnk_080B44C0
_0801ACD8:
adds r5, #0xc
_0801ACDA:
ldrh r0, [r5]
ldr r1, _0801AD0C @ =0x0000FFFF
cmp r0, r1
beq _0801AD06
adds r4, r0, #0
adds r0, r6, #0
movs r1, #1
bl GetTileType
cmp r4, r0
bne _0801ACD8
ldrh r0, [r5, #0xa]
lsls r0, r0, #2
ldr r1, _0801AD10 @ =gUnk_080B44B8
adds r0, r0, r1
ldr r0, [r0]
cmp r0, #0
beq _0801ACD8
adds r0, r5, #0
adds r1, r6, #0
bl sub_0801AD6C
_0801AD06:
ldr r5, _0801AD14 @ =gUnk_080B44C2
ldr r7, _0801AD0C @ =0x0000FFFF
b _0801AD1A
.align 2, 0
_0801AD0C: .4byte 0x0000FFFF
_0801AD10: .4byte gUnk_080B44B8
_0801AD14: .4byte gUnk_080B44C2
_0801AD18:
adds r5, #0xc
_0801AD1A:
ldrh r0, [r5]
cmp r0, r7
beq _0801AD44
adds r4, r0, #0
adds r0, r6, #0
movs r1, #2
bl GetTileType
cmp r4, r0
bne _0801AD18
ldrh r0, [r5, #0xa]
lsls r0, r0, #2
ldr r1, _0801AD68 @ =gUnk_080B44B8
adds r0, r0, r1
ldr r0, [r0]
cmp r0, #0
beq _0801AD18
adds r0, r5, #0
adds r1, r6, #0
bl sub_0801AD6C
_0801AD44:
mov r0, sl
mov r6, sb
cmp r0, r8
blo _0801ACC4
_0801AD4C:
adds r0, r6, #0
adds r0, #0x40
mov r1, r8
subs r6, r0, r1
ldr r1, [sp, #4]
ldr r0, [sp]
cmp r1, r0
blo _0801ACBA
_0801AD5C:
add sp, #8
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_0801AD68: .4byte gUnk_080B44B8
.syntax divided
@@ -0,0 +1,67 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
ldr r3, _0801B018 @ =gUnk_02027EB4
ldr r0, _0801B01C @ =gRoomControls
ldrh r1, [r0, #0x1e]
lsrs r1, r1, #4
mov sl, r1
ldrh r0, [r0, #0x20]
lsrs r0, r0, #4
mov sb, r0
movs r7, #0
cmp r7, sb
bhs _0801B054
_0801B004:
movs r2, #0
adds r0, r7, #1
mov r8, r0
cmp r2, sl
bhs _0801B046
_0801B00E:
ldr r1, _0801B020 @ =gUnk_080B44D0
adds r4, r3, #1
adds r5, r2, #1
b _0801B026
.align 2, 0
_0801B018: .4byte gUnk_02027EB4
_0801B01C: .4byte gRoomControls
_0801B020: .4byte gUnk_080B44D0
_0801B024:
adds r1, #4
_0801B026:
ldrh r0, [r1]
cmp r0, #0
beq _0801B03E
ldrb r6, [r3]
cmp r0, r6
bne _0801B024
ldrh r0, [r1, #2]
lsls r1, r7, #6
adds r1, r1, r2
movs r2, #1
bl SetTile
_0801B03E:
adds r3, r4, #0
adds r2, r5, #0
cmp r2, sl
blo _0801B00E
_0801B046:
adds r0, r3, #0
adds r0, #0x40
mov r1, sl
subs r3, r0, r1
mov r7, r8
cmp r7, sb
blo _0801B004
_0801B054:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
.syntax divided
@@ -2,7 +2,7 @@
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
bl sub_0801B170
bl ClearBgAnimations
bl sub_0807BFA8
ldr r7, _0807C0B8 @ =0x0000FFFF
ldr r6, _0807C0BC @ =gMetatileTypesBottom
@@ -54,7 +54,7 @@ _0807C01C:
ldr r0, [r0, #0x14]
cmp r0, #0
beq _0807C04E
bl sub_0801B130
bl LoadBgAnimations
_0807C04E:
adds r5, r6, #0
movs r0, #0x80
+36
View File
@@ -0,0 +1,36 @@
#ifndef BEANSTALK_SUBTASK_H
#define BEANSTALK_SUBTASK_H
#include "global.h"
/*
tiles 0x4000 and above create an entry here
*/
#define MAX_0200B240 0x100
typedef struct {
u16 position; // (layer << 0xc) | position
u16 data;
} struct_0200B240;
extern struct_0200B240 gUnk_0200B240[MAX_0200B240];
typedef struct {
u16 vramOffset;
u8 gfxSize;
u8 unk_3;
u32 gfxOffset;
} BgAnimationGfx;
typedef struct {
BgAnimationGfx* gfx;
u32 unk_4;
} BgAnimationFrame;
typedef struct {
BgAnimationFrame* currentFrame;
u16 unk_4;
u16 timer;
} BgAnimation;
#define MAX_BG_ANIMATIONS 8
extern BgAnimation gBgAnimations[MAX_BG_ANIMATIONS];
#endif // BEANSTALK_SUBTASK_H
+2 -2
View File
@@ -42,7 +42,7 @@ extern void SetDirtTile(u32);
* @param basePosition the position the offsets in tileData are based on
* @param layer the tile layer
*/
extern void SetMultipleTiles(u16* tileData, u32 basePosition, u32 layer);
extern void SetMultipleTiles(TileData* tileData, u32 basePosition, u32 layer);
extern void TryLoadPrologueHyruleTown(void);
extern void UnloadGFXSlots(Entity*);
extern void UnloadOBJPalette(Entity*);
@@ -74,7 +74,7 @@ extern u32 sub_080044EC(Entity*, u32);
extern void sub_0800451C(Entity*);
extern void sub_08004542(Entity*);
extern void sub_080085B0(Entity*);
extern void sub_08008796(Entity*, u32, u32, u32);
extern u16* sub_08008796(Entity*, u32, u32, u32);
extern void sub_08016AD2(Entity*);
extern u32 sub_0801766C(Entity*);
extern void sub_0801AFE4(void);
+1 -1
View File
@@ -81,7 +81,7 @@ typedef struct {
/*0x0A*/ u16 fadeInTime;
/*0x0C*/ u8 fillerC[0x10];
/*0x1c*/ RoomControls unk_1c;
/*0x2e*/ u8 unk_2e[0x364];
/*0x2e+4*/ u8 unk_2e[0x360];
} UI;
static_assert(sizeof(UI) == 0x3b4);
+1 -2
View File
@@ -269,8 +269,7 @@ typedef struct {
/*0x3a*/ u8 field_0x3a;
/*0x3b*/ u8 field_0x3b;
/*0x3c*/ u8 field_0x3c[2];
/*0x3e*/ u8 swordGoldParticle : 1;
/* */ u8 swordBlueParticle : 1;
/*0x3e*/ u8 swordDamage : 2;
/* */ u8 filler14 : 6;
/*0x3f*/ u8 field_0x3f;
/*0x40*/ u8 path_memory[64];
+2 -1
View File
@@ -52,6 +52,7 @@ typedef struct {
/*0x28*/ union SplitWord bg3OffsetX;
/*0x2C*/ union SplitWord bg3OffsetY;
/*0x30*/ Entity* camera_target;
/*0x34*/ u32 unk_34;
} RoomControls;
extern RoomControls gRoomControls;
@@ -69,7 +70,7 @@ typedef struct {
/* 0x0a */ u8 unk2;
/* 0x0b */ u8 filler2;
/* 0x0c */ s16 lightLevel;
/* 0x0e */ u8 filler3[2];
/* 0x0e */ u16 unk_0e;
/* 0x10 */ u8 unk_10[4];
/* 0x14 */ u32 flags;
/* 0x18 */ u32 unk3;
+1 -1
View File
@@ -41,7 +41,7 @@ typedef struct {
/*0x006*/ u8 saw_staffroll;
/*0x007*/ u8 unk7;
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
/*0x009*/ u8 field_0x9[0x34];
/*0x009*/ u8 field_0x9[0x37];
/*0x040*/ u32 windcrests; /**< Windcrest flags. */
/*0x044*/ u8 filler44[0xC];
/*0x050*/ u32 unk50;
+20
View File
@@ -318,4 +318,24 @@ typedef struct {
u8 stylized;
} Font;
typedef struct {
u8 unk_0;
u8 unk_1;
u8 unk_2[2];
u16 unk_4;
u8 filler[12];
Entity* unk_14;
u8 unk_18;
u8 unk_19;
u8 unk_1a;
u8 unk_1b;
} struct_02018EB0;
extern struct_02018EB0 gUnk_02018EB0;
typedef struct {
s16 tile;
s16 position;
} TileData;
#endif
+2 -2
View File
@@ -23,7 +23,7 @@ SECTIONS {
. = 0x00000090; gUnk_02000090 = .;
. = 0x000000B0; gUnk_020000B0 = .;
. = 0x000000C0; gUnk_020000C0 = .;
. = 0x00000CC0; gUnk_02000CC0 = .;
. = 0x00000CC0; gBgAnimations = .;
. = 0x00000D00; gTextGfxBuffer = .;
. = 0x00001A00; gPaletteList = .;
. = 0x00001A3C; gUnk_02001A3C = .;
@@ -311,7 +311,7 @@ SECTIONS {
src/playerItem/playerItemGustBig.o(.text);
src/playerItem/playerItemBow.o(.text);
src/playerItem/playerItemSwordBeam.o(.text);
asm/beanstalkSubtask.o(.text);
src/beanstalkSubtask.o(.text);
src/playerItem/playerItemBomb.o(.text);
src/playerItem/playerItemBoomerang.o(.text);
src/playerItem/playerItemDashSword.o(.text);
+603
View File
@@ -0,0 +1,603 @@
#include "beanstalkSubtask.h"
#include "collision.h"
#include "common.h"
#include "fade.h"
#include "functions.h"
#include "game.h"
#include "global.h"
#include "item.h"
#include "main.h"
#include "manager.h"
#include "menu.h"
#include "object.h"
#include "screen.h"
#include "structures.h"
extern void UpdateIsDiggingCave(void);
extern void sub_0807C898(void);
extern void sub_0805BB74(s32);
extern void LoadRoomGfx(void);
extern void sub_0807BFD0(void);
extern void sub_0807C4F8(void);
extern void gMapData;
extern u8 gUpdateVisibleTiles;
extern u16 gMapDataTopSpecial[];
extern u16 gMapDataBottomSpecial[];
extern const u8 gGlobalGfxAndPalettes[];
extern const u8 gUnk_081091E4[];
extern void (*const gUnk_080B4458[])(void);
extern const u16 gUnk_080B44A0[];
extern const u16 gUnk_080B4410[];
extern const s16 gUnk_080B4488[];
extern const s16 gUnk_080B44A8[];
extern const u16 gUnk_080B44D0[];
extern const u16* gUnk_080B4550[];
extern const u16 gUnk_080B77C0[];
extern BgAnimationFrame* gUnk_080B7278[];
bool32 sub_0801A4F8(void);
bool32 sub_0801AA58(Entity*, u32, u32);
void sub_0801AB08(u16*, LayerStruct*);
void LoadBgAnimationGfx(BgAnimationGfx*);
u32 GetBgAnimationTimer(s32*);
void ClearBgAnimations(void);
void sub_0801967C(void) {
gUnk_080B4458[gMenu.overlayType]();
}
void sub_08019698(void) {
Entity* object;
const u16* ptr;
ptr = &gUnk_080B4410[gUI.field_0x3 * 7];
SetLocalFlagByBank(0x100, ptr[2]);
LoadAuxiliaryRoom(ptr[0], ptr[1]);
gRoomControls.scroll_x += ptr[3];
gRoomControls.scroll_y += ptr[4];
gUpdateVisibleTiles = 1;
UpdateScrollVram();
gScreen.lcd.displayControl &= 0xfeff;
object = CreateObject(BEANSTALK, 0, 0);
if (object != NULL) {
object->x.HALF.HI = gRoomControls.scroll_x + ptr[5];
object->y.HALF.HI = gRoomControls.scroll_y + ptr[6];
}
LoadGfxGroup(0x11);
FlushSprites();
DrawEntities();
CopyOAM();
SetFade(4, 8);
gUnk_02018EB0.unk_0++;
}
void sub_08019740(void) {
if (gFadeControl.active == 0) {
gUnk_02018EB0.unk_0++;
gUnk_02018EB0.unk_4 = 0x186;
}
}
void sub_08019764(void) {
FlushSprites();
UpdateEntities();
DrawEntities();
CopyOAM();
if ((--gUnk_02018EB0.unk_4 == 0) || ((gInput.newKeys & 10) != 0)) {
gUnk_02018EB0.unk_0++;
}
}
void sub_080197A0(void) {
MenuFadeIn(2, 0xb);
}
NONMATCH("asm/non_matching/beanstalkSubtask/SetBGDefaults.inc", void SetBGDefaults(void)) {
u16* ptr;
BgSettings* bg;
gMapBottom.bgControlPtr = (u16*)&gScreen.bg2;
gScreen.bg2.control = gUnk_080B77C0[0];
gMapTop.bgControlPtr = (u16*)&gScreen.bg1;
gScreen.bg1.control = gUnk_080B77C0[1];
}
END_NONMATCH
NONMATCH("asm/non_matching/beanstalkSubtask/sub_080197D4.inc", void sub_080197D4(u32* param_1)) {
u32 uVar1;
u8* src;
void* dest;
do {
dest = (void*)param_1[1];
if (dest != NULL) {
src = &gMapData + (*param_1 & 0x7fffffff);
if ((param_1[2] & 0x80000000) != 0) {
if ((u32)dest >> 0x18 == 6) {
LZ77UnCompVram(src, dest);
} else {
LZ77UnCompWram(src, dest);
}
} else {
MemCopy(src, dest, param_1[2]);
}
} else {
LoadPaletteGroup((u32) * (u16*)param_1);
sub_080533CC();
}
uVar1 = *param_1;
param_1 += 3;
} while ((uVar1 & 0x80000000) != 0);
}
END_NONMATCH
// Has ifdefs for other variants
ASM_FUNC("asm/non_matching/beanstalkSubtask/UpdatePlayerCollision.inc", void UpdatePlayerCollision())
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A2B0.inc",
bool32 sub_0801A2B0(LayerStruct* layer, u32 position, u32 collisionType)) {
u16 uVar1;
u32 uVar2;
bool32 bVar3;
u32 pos;
uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1];
if ((((gPlayerState.field_0x35 | gPlayerState.field_0xd) & 0x80) == 0) && ((gPlayerEntity.frame & 1) != 0)) {
switch ((s32)sub_080B1B54(GetTileType(position + uVar1, gPlayerEntity.collisionLayer))) {
case 0x52:
break;
case 0x26:
case 0x27:
return FALSE;
case 0x29:
return FALSE;
case 0x74:
return FALSE;
default:
if ((layer->collisionData[(position + uVar1)] != 0x28) &&
(!IsTileCollision(
layer->collisionData,
(s32)((((position + uVar1) & 0x3f) * 0x10 + (u32)gRoomControls.origin_x) * 0x10000) >> 0x10,
(s32)((((position + uVar1) >> 6) * 0x10 + (u32)gRoomControls.origin_y) * 0x10000) >> 0x10,
collisionType))) {
return TRUE;
}
break;
}
}
return FALSE;
}
END_NONMATCH
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A370.inc", bool32 sub_0801A370(LayerStruct* layer, u32 position)) {
LayerStruct* topLayer;
u32 tileType;
u32 pos;
s32 offset;
if ((gPlayerEntity.animationState & 2) == 0) {
return FALSE;
}
if (!sub_0801A4F8()) {
return FALSE;
}
topLayer = GetLayerByIndex(2);
offset = gUnk_080B4488[gPlayerEntity.animationState >> 1];
pos = position + offset;
tileType = GetTileType(pos, gPlayerEntity.collisionLayer);
switch (tileType) {
case 0x402b:
pos += offset;
break;
case 0x402c ... 0x402f:
return TRUE;
}
if (topLayer->collisionData[pos - 0x80] == 0x46) {
return FALSE;
}
switch ((u16)sub_080B1B54(GetTileType(pos, gPlayerEntity.collisionLayer))) {
case 0x52:
return FALSE;
case 0x26:
case 0x27:
return FALSE;
case 0x29:
return FALSE;
case 0x74:
return FALSE;
}
switch (layer->collisionData[pos]) {
case 0:
return TRUE;
case 5:
case 0x45:
if (offset == 1) {
return TRUE;
}
break;
case 0xa:
case 0x44:
if (offset == -1) {
return TRUE;
}
break;
}
return FALSE;
}
END_NONMATCH
bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType) {
u32 tileType;
u32 pos;
s32 offset = gUnk_080B4488[gPlayerEntity.animationState >> 1];
if (sub_0801A4F8()) {
pos = position + offset;
tileType = GetTileType(pos, gPlayerEntity.collisionLayer);
switch (sub_080B1B54(tileType)) {
case 0x52:
case 0x26:
case 0x27:
case 0x29:
case 0x74:
return FALSE;
default:
if (((layer->collisionData[pos] != 0x28) &&
(!IsTileCollision(layer->collisionData, (pos & 0x3f) * 0x10 + gRoomControls.origin_x,
(pos >> 6) * 0x10 + gRoomControls.origin_y, collisionType))) &&
(0xe < (u32)layer->collisionData[pos] - 1)) {
return TRUE;
}
break;
}
}
return FALSE;
}
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A4F8.inc", bool32 sub_0801A4F8(void)) {
u32 uVar1;
u32 uVar3;
if ((gPlayerState.flags & PL_MINISH) != 0) {
if (GetInventoryValue(ITEM_POWER_BRACELETS) != 1) {
return FALSE;
}
if ((gPlayerState.field_0xd & 0x80) != 0) {
return FALSE;
}
if (gPlayerState.field_0xd != gPlayerEntity.direction) {
return FALSE;
}
if ((gPlayerEntity.collisions & gUnk_080B44A0[(((gPlayerEntity.direction + 4) & 0x18) >> 2)]) == 0) {
return FALSE;
}
} else {
if (((gPlayerState.field_0x35 | gPlayerState.field_0xd) & 0x80) != 0) {
return FALSE;
}
if ((gPlayerEntity.frame & 1) == 0) {
return FALSE;
}
}
return TRUE;
}
END_NONMATCH
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801A570.inc", void sub_0801A570())
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A8D0.inc", u32 sub_0801A8D0(Entity* this, u32 param_2)) {
u16* mapData;
u32 tile;
u32 position;
if (this != NULL) {
mapData = GetLayerByIndex(this->collisionLayer)->mapData;
if (param_2 == 0) {
position = COORD_TO_TILE_OFFSET(this, 0, 8);
tile = mapData[position];
if (tile == 0x4055) {
return position - 1;
}
if (tile == 0x4056) {
return position;
}
} else {
position = COORD_TO_TILE_OFFSET(this, 8, 0);
tile = mapData[position];
if (tile == 0x4057) {
return position - 0x40;
}
if (tile == 0x4058) {
return position;
}
}
}
return 0xffff;
}
END_NONMATCH
bool32 sub_0801A980(void) {
u16 tileType;
const s16* ptr;
GetLayerByIndex(gPlayerEntity.collisionLayer);
ptr = &gUnk_080B44A8[gPlayerEntity.animationState & 6];
tileType = GetTileType(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]), gPlayerEntity.collisionLayer);
if (tileType < 0x4000) {
sub_080B1B54(tileType);
}
return FALSE;
}
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801A9F0.inc",
bool32 sub_0801A9F0(u32 param_1, u32 param_2, u32 param_3)) {
switch (param_2) {
case 0x361:
if (param_1 == 0) {
goto result;
} else {
return FALSE;
}
break;
case 0x362:
if (param_1 == 0x10) {
goto result;
} else {
return FALSE;
}
break;
case 0x363:
if (param_1 == 0x18) {
goto result;
} else {
return FALSE;
}
break;
case 0x364:
if (param_1 == 8) {
goto result;
} else {
return FALSE;
}
break;
case 0x360:
result:
return sub_0801AA58(&gPlayerEntity, param_3, param_1);
default:
return FALSE;
}
}
END_NONMATCH
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AA58.inc",
bool32 sub_0801AA58(Entity* this, u32 param_2, u32 param_3)) {
LayerStruct* layer;
Entity* object;
layer = GetLayerByIndex(this->collisionLayer);
if (((layer->collisionData[param_2 + gUnk_080B4488[param_3 >> 3]] == 0) ||
((u8)(layer->collisionData[param_2 + gUnk_080B4488[param_3 >> 3]] - 0x20) < 0x20))) {
object = CreateObject(PUSHED_BLOCK, 0, 0);
if (object != NULL) {
object->direction = param_3;
object->x.HALF.HI = ((param_2 & 0x3f) * 0x10 + 8) + gRoomControls.origin_x;
object->y.HALF.HI = (((param_2 & 0xfc0) >> 2) + 8) + gRoomControls.origin_y;
object->collisionLayer = this->collisionLayer;
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = 5;
gPlayerState.flags |= 1;
this->x.HALF.LO = 0;
this->y.HALF.LO = 0;
this->direction = param_3;
return TRUE;
}
}
return FALSE;
}
END_NONMATCH
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AB08.inc", void sub_0801AB08(u16* a, LayerStruct* layer))
NONMATCH("asm/non_matching/beanstalkSubtask/sub_0801AC68.inc", u32 sub_0801AC68(u32 position, u32 data)) {
u32 index;
struct_0200B240* ptr;
u32 end;
ptr = gUnk_0200B240;
end = gRoomVars.unk_0e;
for (index = 0; index < end; index++) {
if (position == ptr[index].position) {
return ptr[index].data << 2;
}
}
return data << 2;
}
END_NONMATCH
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AC98.inc", void sub_0801AC98())
void sub_0801AD6C(u16* param_1, u32 param_2) {
Entity* entity;
Manager* manager;
s32 tmpX1;
s32 tmpY1;
s32 tmpX2;
s32 tmpY2;
if (param_1[1] != 9) {
entity = GetEmptyEntity();
if (entity != NULL) {
entity->kind = (u8)param_1[1];
entity->id = (u8)param_1[2];
entity->type = (u8)param_1[3];
entity->type2 = (u8)param_1[4];
tmpX1 = ((u16)param_2 & 0x3f) * 0x10 + 8;
entity->x.HALF.HI = tmpX1 + gRoomControls.origin_x;
tmpY1 = (s16)((param_2 & 0xfc0) >> 2) + 8;
entity->y.HALF.HI = tmpY1 + gRoomControls.origin_y;
entity->collisionLayer = 0;
ResolveCollisionLayer(entity);
AppendEntityToList(entity, gUnk_081091E4[entity->kind]);
}
} else {
manager = GetEmptyManager();
if (manager != NULL) {
manager->type = (u8)param_1[1];
manager->subtype = (u8)param_1[2];
manager->unk_0a = (u8)param_1[3];
manager->unk_0b = (u8)param_1[4];
tmpX2 = ((u16)param_2 & 0x3f) * 0x10 + 8;
*(u16*)(&manager[1].unk_0e + 10) = tmpX2 + gRoomControls.origin_x;
tmpY2 = (s16)((param_2 & 0xfc0) >> 2) + 8;
*(u16*)(&manager[1].unk_0e + 12) = tmpY2 + gRoomControls.origin_y;
AppendEntityToList((Entity*)manager, gUnk_081091E4[manager->type]);
}
}
}
bool32 sub_0801AE30(void) {
return TRUE;
}
u32 sub_0801AE34(void) {
return gRoomControls.scroll_flags >> 1 & 1;
}
void sub_0801AE44(s32 param_1) {
void (*func)(void);
gRoomControls.unk_34 = 0;
sub_0807BFD0();
if (param_1 != 0) {
LoadRoomGfx();
}
sub_080809D4();
UpdateIsDiggingCave();
if (gRoomTransition.field_0x2c[0] != 0) {
sub_0807C898();
}
if (gArea.lightType != 0) {
MemFill16(0xf, (void*)0x600f000, 0x800);
sub_0805BB74(-1);
}
func = GetCurrentRoomProperty(5);
if (func != NULL) {
func();
}
if ((gUnk_03004030.isDiggingCave == 0) && (gArea.onEnter != NULL)) {
gArea.onEnter(gArea.transitionManager);
}
if ((gRoomControls.scroll_flags & 1) == 0) {
if (gMapBottom.bgControlPtr != NULL) {
sub_0801AB08(gMapDataBottomSpecial, &gMapBottom);
}
if (gMapTop.bgControlPtr != NULL) {
sub_0801AB08(gMapDataTopSpecial, &gMapTop);
}
} else {
sub_0807C4F8();
}
UpdateScrollVram();
}
void SetMultipleTiles(TileData* tileData, u32 basePosition, u32 layer) {
while (tileData->tile != -1) {
SetTile((u16)tileData->tile, basePosition + tileData->position, layer);
tileData++;
}
}
// Add a new entry at the end of gUnk_0200B240
void sub_0801AF48(u32 data, u32 position, u32 layer) {
u32 index;
if ((data < 0x4000) && (gRoomTransition.field_0x2c[3] == 0)) {
index = gRoomVars.unk_0e;
if (index < 0x100) {
gUnk_0200B240[index].data = data;
gUnk_0200B240[index].position = (layer << 0xc) | position;
gRoomVars.unk_0e = index + 1;
}
}
}
ASM_FUNC("asm/non_matching/beanstalkSubtask/DeleteLoadedTileEntity.inc",
void DeleteLoadedTileEntity(u32 position, u32 layer))
ASM_FUNC("asm/non_matching/beanstalkSubtask/sub_0801AFE4.inc", void sub_0801AFE4(void))
void UpdateBgAnimations(void) {
bool32 alreadyUploadedGfx = FALSE;
BgAnimation* animation = gBgAnimations;
s32 index = 8;
while (index != 0) {
if (animation->currentFrame == NULL) {
return;
}
if (--animation->timer == 0) {
if (!alreadyUploadedGfx) {
if (gFadeControl.active == 0) {
LoadBgAnimationGfx(animation->currentFrame->gfx);
}
animation->timer = GetBgAnimationTimer(&animation->currentFrame->unk_4);
animation->currentFrame++;
if (animation->currentFrame->gfx == NULL) {
animation->currentFrame -= animation->currentFrame->unk_4;
}
alreadyUploadedGfx = TRUE;
} else {
animation->timer++;
}
}
animation++;
index--;
}
}
u32 GetBgAnimationTimer(s32* param_1) {
if (param_1[0] < 0) {
return gUnk_080B4550[*(u8*)param_1][(Random() & 7)];
} else {
return param_1[0];
}
}
void LoadBgAnimationGfx(BgAnimationGfx* param_1) {
const u8* src;
u32 vramOffset;
u32 size;
while (TRUE) {
src = &gGlobalGfxAndPalettes[param_1->gfxOffset];
size = param_1->gfxSize;
vramOffset = param_1->vramOffset;
if ((*(u32*)param_1 >> 0x1c & 1) != 0) {
LoadPalettes(src, vramOffset >> 5, size);
} else {
MemCopy(src, (void*)(vramOffset + 0x6000000), size << 5);
}
if (*(int*)param_1 >= 0) {
return;
}
param_1++;
}
}
void LoadBgAnimations(u16* param_1) {
BgAnimation* animation;
ClearBgAnimations();
animation = gBgAnimations;
while (param_1[0] != 0xffff) {
animation->currentFrame = gUnk_080B7278[param_1[0]];
animation->timer = GetBgAnimationTimer(&animation->currentFrame->unk_4);
;
animation++;
param_1++;
}
}
void ClearBgAnimations(void) {
u32 index;
for (index = 0; index < MAX_BG_ANIMATIONS; index++) {
gBgAnimations[index].currentFrame = NULL;
}
}
-10
View File
@@ -9,19 +9,9 @@
#include "game.h"
#include "fileselect.h"
typedef struct {
u8 filler[18];
Entity* unk_14;
u8 unk_18;
u8 unk_19;
u8 unk_1a;
u8 unk_1b;
} struct_02018EB0;
extern void ClearArmosData(void);
extern void sub_080300C4(void);
extern struct_02018EB0 gUnk_02018EB0;
extern u16 gUnk_020178E0[];
extern u8 gUnk_02017700[];
+9 -9
View File
@@ -102,14 +102,14 @@ extern bool32 CheckInitPortal(void);
extern void UpdateCarriedObject(void);
extern void DrawUI(void);
extern void CollisionMain(void);
extern void sub_0805BB74(u32);
extern void sub_0805BB74(s32);
extern void CreateZeldaFollower(void);
extern void LoadRoomGfx(void);
extern void RecycleEntities(void);
extern void sub_0804AF90(void);
extern void CallRoomProp6(void);
extern void UpdateScroll(void);
extern void UpdateBgAnim(void);
extern void UpdateBgAnimations(void);
extern void CleanUpGFXSlots(void);
extern void sub_080ADE24(void);
extern void InitUI(bool32);
@@ -246,7 +246,7 @@ extern void (*const gUnk_080FD138[])(void);
extern const u16 gUnk_080FD964[];
extern void sub_0801B170(void);
extern void ClearBgAnimations(void);
void GameTask(void) {
static GameState* const sStates[] = {
@@ -344,7 +344,7 @@ static void GameMain_ChangeRoom(void) {
UpdateEntities();
if (!UpdateLightLevel())
UpdateScroll();
UpdateBgAnim();
UpdateBgAnimations();
UpdateScrollVram();
DrawUI();
UpdateManagers();
@@ -421,7 +421,7 @@ static void GameMain_Update(void) {
UpdateDoorTransition();
CollisionMain();
UpdateScroll();
UpdateBgAnim();
UpdateBgAnimations();
UpdateScrollVram();
sub_08052C3C();
DrawUI();
@@ -508,7 +508,7 @@ static void InitializeEntities(void) {
CallRoomProp5And7();
sub_0805329C();
UpdateScrollVram();
sub_0805BB74(0xffffffff);
sub_0805BB74(-1);
UpdatePlayerRoomStatus();
}
@@ -608,7 +608,7 @@ static void AuxCutscene_Main(void) {
DrawEntities();
CopyOAM();
UpdateScroll();
UpdateBgAnim();
UpdateBgAnimations();
UpdateManagers();
UpdateScrollVram();
}
@@ -1878,7 +1878,7 @@ void sub_08053758(void) {
gRoomControls.camera_target = NULL;
gRoomControls.scroll_y = 0;
gRoomControls.scroll_x = 0;
sub_0801B170();
ClearBgAnimations();
DispReset(0);
gScreen.lcd.displayControl = 0x2640;
gScreen.controls.layerFXControl = 0x2244;
@@ -2601,7 +2601,7 @@ void sub_080548E8(void) {
DrawEntities();
CopyOAM();
UpdateScroll();
UpdateBgAnim();
UpdateBgAnimations();
UpdateScrollVram();
}
+2 -2
View File
@@ -7,7 +7,7 @@ extern void (*const gUnk_0811BDB4[])(ItemBehavior*, u32);
u32 sub_08077F64(ItemBehavior* arg0, u32 idx);
u32 sub_080789A8(void);
void sub_080762C4(ItemBehavior*, void*, u8, u32);
void sub_080762C4(ItemBehavior*, Entity*, u8, u32);
void sub_08076088(ItemBehavior*, void*, u32);
void ItemTryPickupObject(ItemBehavior* this, u32 idx) {
@@ -61,7 +61,7 @@ void ItemPickupCheck(ItemBehavior* this, u32 idx) {
}
}
void sub_080762C4(ItemBehavior* this, void* arg1, u8 arg2, u32 arg3) {
void sub_080762C4(ItemBehavior* this, Entity* arg1, u8 arg2, u32 arg3) {
this->field_0x18 = arg1;
gPlayerState.heldObject = arg2;
sub_08077D38(this, arg3);
+2 -3
View File
@@ -16,7 +16,6 @@ extern u32 gSpriteAnimations_GhostBrothers[];
extern u32 gUnk_08110188;
extern s8 gUnk_0811015C[8];
extern u8 gUnk_02018EB0[];
extern u8 gUnk_0811022E[];
void sub_08065C0C(Entity* this);
@@ -144,7 +143,7 @@ void sub_08065DB8(Entity* this) {
if (--this->timer == 0) {
this->subAction++;
this->timer = 0xb4;
gUnk_02018EB0[1]++;
gUnk_02018EB0.unk_1++;
InitAnimationForceUpdate(this, 2);
}
break;
@@ -174,7 +173,7 @@ void sub_08065DB8(Entity* this) {
this->timer = (u8) * (puVar3 + 1);
*(u16**)&this->field_0x6c = (puVar3 + 2);
} else {
gUnk_02018EB0[0]++;
gUnk_02018EB0.unk_0++;
DeleteThisEntity();
}
}
+2 -1
View File
@@ -288,6 +288,7 @@ void ChestSpawner_Type0Action3(ChestSpawnerEntity* this) {
}
void sub_080842D8(ChestSpawnerEntity* this) {
// TODO recreate as TileData[]
static const u8 gUnk_0811F854[] = {
35, 64, 191, 255, 35, 64, 192, 255, 38, 64, 255, 255, 38, 64, 0, 0, 255, 255,
};
@@ -310,7 +311,7 @@ void sub_080842D8(ChestSpawnerEntity* this) {
if ((super->y.HALF.HI & 8) != 0) {
index += 2;
}
SetMultipleTiles((u16*)gUnk_0811F898[index], COORD_TO_TILE(super), super->collisionLayer);
SetMultipleTiles((TileData*)gUnk_0811F898[index], COORD_TO_TILE(super), super->collisionLayer);
}
const Hitbox gUnk_0811F8A8 = { 0, -3, { 0, 0, 0, 0 }, 6, 6 };
+3 -3
View File
@@ -8,8 +8,8 @@
static void SetJailBarTiles(Entity*, u32);
extern void (*const gUnk_08124950[])(Entity*);
extern u16 gUnk_08124960[];
extern u16 gUnk_0812497A[];
extern TileData gUnk_08124960[];
extern TileData gUnk_0812497A[];
void JailBars(Entity* this) {
gUnk_08124950[this->action](this);
@@ -49,7 +49,7 @@ void nullsub_127(Entity* this) {
}
static void SetJailBarTiles(Entity* this, u32 arg1) {
u16* puVar1;
TileData* puVar1;
puVar1 = gUnk_08124960;
if (arg1 == 1) {
+8 -10
View File
@@ -11,7 +11,6 @@ typedef struct {
u16 unk6a;
} MacroPlayerEntity;
extern u8 gUnk_02018EB0[];
extern int sub_0807A094(int);
void MacroPlayer_Type0(MacroPlayerEntity*);
@@ -112,8 +111,7 @@ void MacroPlayer_Type0_Init(MacroPlayerEntity* this) {
this->unk6a = 4;
super->spriteRendering.b0 = 3;
SetAffineInfo(super, 4, 4, 0);
ptr = gUnk_02018EB0;
*(Entity**)&ptr[0x14] = super;
gUnk_02018EB0.unk_14 = super;
ChangeObjPalette(super, sub_0807A094(0));
pEVar1 = CreateObject(PORTAL_FALLING_PLAYER, 1, 0);
if (pEVar1 != NULL) {
@@ -139,7 +137,7 @@ void MacroPlayer_Type0_Action1(MacroPlayerEntity* this) {
super->zVelocity = 0x30000;
super->spriteSettings.shadow = 0;
super->child->subAction = 1;
gUnk_02018EB0[0x18] = 1;
gUnk_02018EB0.unk_18 = 1;
}
}
@@ -153,7 +151,7 @@ void MacroPlayer_Type0_Action2(MacroPlayerEntity* this) {
super->direction = 10;
super->speed = 0xc0;
super->zVelocity = 0x28000;
gUnk_02018EB0[0x19] = 1;
gUnk_02018EB0.unk_19 = 1;
}
}
@@ -167,7 +165,7 @@ void MacroPlayer_Type0_Action3(MacroPlayerEntity* this) {
super->direction = 17;
super->speed = 0x100;
super->zVelocity = 0x24000;
gUnk_02018EB0[0x1a] = 1;
gUnk_02018EB0.unk_1a = 1;
}
}
@@ -216,7 +214,7 @@ void MacroPlayer_Type0_Action7(MacroPlayerEntity* this) {
super->direction = DirectionWest;
}
if (super->x.HALF.HI < 0x30) {
gUnk_02018EB0[0x1b] = 1;
gUnk_02018EB0.unk_1b = 1;
}
}
@@ -227,7 +225,7 @@ void MacroPlayer_Type0_Action8(MacroPlayerEntity* this) {
super->direction = DirectionEast;
}
if (super->x.HALF.HI > 0xd0) {
gUnk_02018EB0[0x1b] = 1;
gUnk_02018EB0.unk_1b = 1;
}
}
@@ -235,7 +233,7 @@ void MacroPlayer_Type0_Action9(MacroPlayerEntity* this) {
UpdateAnimationSingleFrame(super);
LinearMoveUpdate(super);
if (super->y.HALF.HI > 0x120) {
gUnk_02018EB0[0x1b] = 1;
gUnk_02018EB0.unk_1b = 1;
}
}
@@ -246,6 +244,6 @@ void MacroPlayer_Type0_Action10(MacroPlayerEntity* this) {
super->direction = DirectionWest;
}
if (super->x.HALF.HI < 0x10) {
gUnk_02018EB0[0x1b] = 1;
gUnk_02018EB0.unk_1b = 1;
}
}
+3 -2
View File
@@ -103,14 +103,15 @@ void sub_08097CB4(Object74Entity* this) {
}
void sub_08097CFC(Object74Entity* this) {
// TODO recreate as TileData[]
static const u16 gUnk_08123344[] = { 16448, 65471, 16449, 65472, 16450, 65473, 16451, 65535, 16452, 0,
16453, 1, 16454, 63, 16455, 64, 16456, 65, 65535 };
static const u16 gUnk_0812336A[] = {
16449, 65471, 16449, 65472, 16452, 65535, 16452, 0, 16455, 63, 16455, 64, 65535
};
if ((super->x.HALF.HI & 0xf) == 0) {
SetMultipleTiles((u16*)gUnk_0812336A, COORD_TO_TILE(super), super->collisionLayer);
SetMultipleTiles((TileData*)gUnk_0812336A, COORD_TO_TILE(super), super->collisionLayer);
} else {
SetMultipleTiles((u16*)gUnk_08123344, COORD_TO_TILE(super), super->collisionLayer);
SetMultipleTiles((TileData*)gUnk_08123344, COORD_TO_TILE(super), super->collisionLayer);
}
}
+3 -1
View File
@@ -78,7 +78,7 @@ void PushableGrave_Init(PushableGraveEntity* this) {
super->hitbox = (Hitbox*)&gUnk_080FD570;
SetTile(tileIndex, tilePosition, super->collisionLayer);
if (super->type2 == 2) {
SetMultipleTiles((u16*)gUnk_081232C0, tilePosition, super->collisionLayer);
SetMultipleTiles((TileData*)gUnk_081232C0, tilePosition, super->collisionLayer);
}
}
}
@@ -200,6 +200,8 @@ bool32 sub_0809798C(PushableGraveEntity* this) {
void (*const gUnk_081232AC[])(PushableGraveEntity*) = {
PushableGrave_Init, PushableGrave_Action1, PushableGrave_Action2, PushableGrave_Action3, PushableGrave_Action4,
};
// TODO recreate as TileData[]
const u8 gUnk_081232C0[] = {
61, 64, 191, 255, 61, 64, 192, 255, 61, 64, 193, 255, 61, 64, 255,
255, 61, 64, 1, 0, 61, 64, 63, 0, 61, 64, 65, 0, 255, 255,
+3 -2
View File
@@ -15,6 +15,7 @@ void StoneTablet(Entity* this) {
}
void sub_080979CC(Entity* this) {
// TODO recreate as TileData[]
static const u16 gUnk_081232EC[] = { 0x4022, 0xfffe, 0x4022, 0xffff, 0x4022, 0x0, 0x4022, 0x1, 0xffff };
static const u16 gUnk_081232FE[] = { 0x4065, 0xffbf, 0x4022, 0xffc0, 0x4066, 0xffc1, 0x4029,
0xffff, 0x4026, 0x0, 0x402a, 0x1, 0xffff };
@@ -22,10 +23,10 @@ void sub_080979CC(Entity* this) {
this->spriteSettings.draw = 1;
if (this->type == 3) {
this->frameIndex = 0;
SetMultipleTiles((u16*)gUnk_081232FE, COORD_TO_TILE(this), this->collisionLayer);
SetMultipleTiles((TileData*)gUnk_081232FE, COORD_TO_TILE(this), this->collisionLayer);
} else {
this->frameIndex = this->type;
SetMultipleTiles((u16*)gUnk_081232EC, COORD_TO_TILE(this), this->collisionLayer);
SetMultipleTiles((TileData*)gUnk_081232EC, COORD_TO_TILE(this), this->collisionLayer);
}
}
+8 -8
View File
@@ -217,31 +217,31 @@ u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) {
return CalculateDirectionTo(a->x.HALF.HI, a->y.HALF.HI, b->x.HALF.HI + x, b->y.HALF.HI + y);
}
u32 sub_0806F854(Entity* ent, s32 x, s32 y) {
bool32 sub_0806F854(Entity* ent, s32 x, s32 y) {
if (ent->z.WORD == 0 || (ent->collisionLayer & 2))
return 0;
return FALSE;
if (!sub_080B1BA4(TILE(ent->x.HALF.HI + x, ent->y.HALF.HI + y), 2, 8)) {
ent->spriteRendering.b3 = 1;
ent->spriteOrientation.flipY = 1;
return 0;
return FALSE;
}
ent->spriteRendering.b3 = 2;
ent->spriteOrientation.flipY = 2;
return 1;
return TRUE;
}
u32 sub_0806F8DC(Entity* ent) {
bool32 sub_0806F8DC(Entity* ent) {
if (ent->collisionLayer & 2)
return 0;
return FALSE;
if (!GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, 2)) {
GetTileTypeByPos(ent->x.HALF.HI, ent->y.HALF.HI - 4, ent->collisionLayer);
ent->spriteRendering.b3 = 1;
ent->spriteOrientation.flipY = 1;
return 0;
return FALSE;
}
ent->spriteRendering.b3 = 2;
ent->spriteOrientation.flipY = 2;
return 1;
return TRUE;
}
u32 sub_0806F948(Entity* ent) {
+2 -4
View File
@@ -47,8 +47,6 @@ u32 sub_080A6D74(u32);
extern const ScreenTransitionData gUnk_08128024[];
void sub_080A71F4(ScreenTransitionData*);
extern u8 gUnk_02018EB0[];
extern void DeleteAllEntities(void);
extern void sub_0805E974(void);
@@ -314,8 +312,8 @@ void MenuFadeIn(u32 param_1, u32 param_2) {
gUI.fadeInTime = 0x20;
gMain.substate = GAMEMAIN_SUBTASK;
SetFade(5, 0x20);
gUnk_02018EB0[0] = 0;
gUnk_02018EB0[1] = 0;
gUnk_02018EB0.unk_0 = 0;
gUnk_02018EB0.unk_1 = 0;
}
void sub_080A71A4(u32 param_1, u32 param_2, u32 param_3) {