mirror of
https://github.com/zeldaret/tmc
synced 2026-06-01 17:58:06 -04:00
Merge pull request #483 from octorock/beanstalkSubtask
Decompile some of beanstalkSubtask
This commit is contained in:
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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user