Decompile ObjectOnPillar

This commit is contained in:
octorock 2022-02-13 11:13:11 +01:00
parent 9036135c6f
commit 8d33a5857c
8 changed files with 306 additions and 1008 deletions

View File

@ -1,60 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xd]
cmp r0, #0
bne _0806E7F2
adds r0, #1
strb r0, [r4, #0xd]
bl Random
movs r5, #1
ands r0, r5
cmp r0, #0
beq _0806E7DE
ldrb r0, [r4, #0x18]
lsls r1, r0, #0x19
lsrs r1, r1, #0x1f
eors r1, r5
lsls r1, r1, #6
movs r2, #0x41
rsbs r2, r2, #0
ands r2, r0
orrs r2, r1
strb r2, [r4, #0x18]
_0806E7DE:
bl Random
movs r1, #3
ands r0, r1
adds r0, #1
strb r0, [r4, #0xe]
movs r0, #0x80
lsls r0, r0, #9
str r0, [r4, #0x20]
strb r5, [r4, #0x1e]
_0806E7F2:
movs r1, #0xc0
lsls r1, r1, #6
adds r0, r4, #0
bl GravityUpdate
cmp r0, #0
bne _0806E81C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #0
bne _0806E816
movs r0, #1
strb r0, [r4, #0xc]
strb r1, [r4, #0xd]
b _0806E81C
_0806E816:
movs r0, #0x80
lsls r0, r0, #9
str r0, [r4, #0x20]
_0806E81C:
adds r0, r4, #0
bl sub_0806E838
pop {r4, r5, pc}
.syntax divided

View File

@ -1,185 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
ldr r0, _08070244 @ =gUnk_0811B9C8
ldrb r1, [r5, #0x14]
adds r2, r1, r0
movs r6, #0
ldrsb r6, [r2, r6]
adds r1, #1
adds r1, r1, r0
movs r7, #0
ldrsb r7, [r1, r7]
adds r0, r5, #0
movs r1, #0xa
adds r2, r6, #0
adds r3, r7, #0
bl sub_08008782
adds r4, r0, #0
cmp r4, #0
beq _08070248
ldrb r1, [r4, #5]
ldrb r2, [r4, #2]
movs r0, #0x53
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _08070260
ldrb r0, [r4, #3]
strb r0, [r1, #0xe]
ldrh r0, [r5, #0x2e]
adds r0, r0, r6
strh r0, [r1, #0x2e]
ldrh r0, [r5, #0x32]
adds r0, r0, r7
strh r0, [r1, #0x32]
b _08070260
.align 2, 0
_08070244: .4byte gUnk_0811B9C8
_08070248:
ldr r0, [r5, #0x74]
subs r0, #1
str r0, [r5, #0x74]
movs r1, #1
rsbs r1, r1, #0
cmp r0, r1
beq _08070260
ldr r0, [r5, #0x78]
subs r0, #1
str r0, [r5, #0x78]
cmp r0, r1
bne _08070268
_08070260:
adds r0, r5, #0
bl sub_08070458
b _0807037A
_08070268:
adds r0, r5, #0
bl GetNextFrame
adds r0, r5, #0
bl LinearMoveUpdate
ldrb r0, [r5, #0xa]
cmp r0, #0
bne _08070280
adds r0, r5, #0
bl sub_0800451C
_08070280:
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r7, _08070354 @ =gRoomControls
ldrh r1, [r7, #6]
subs r0, r0, r1
asrs r0, r0, #4
movs r6, #0x3f
ands r0, r6
movs r2, #0x32
ldrsh r1, [r5, r2]
ldrh r2, [r7, #8]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r6
lsls r1, r1, #6
orrs r0, r1
ldr r1, _08070358 @ =gPlayerEntity
adds r1, #0x38
ldrb r1, [r1]
movs r2, #0x80
bl sub_080002F0
cmp r0, #0
bne _0807036A
ldr r1, _0807035C @ =gUnk_08003E44
movs r3, #0x2e
ldrsh r2, [r5, r3]
movs r0, #0x32
ldrsh r3, [r5, r0]
adds r0, r5, #0
bl sub_080040D8
cmp r0, #0
bne _08070364
adds r0, r5, #0
bl sub_080002B8
cmp r0, #0x19
bne _0807036A
movs r0, #4
strb r0, [r5, #0xc]
ldrb r1, [r5, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r5, #0x10]
ldrh r2, [r5, #0x2e]
movs r1, #0x10
rsbs r1, r1, #0
adds r0, r1, #0
ands r0, r2
movs r2, #8
orrs r0, r2
strh r0, [r5, #0x2e]
ldrh r0, [r5, #0x32]
ands r1, r0
orrs r1, r2
strh r1, [r5, #0x32]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldrh r1, [r7, #6]
subs r0, r0, r1
asrs r0, r0, #4
ands r0, r6
movs r2, #0x32
ldrsh r1, [r5, r2]
ldrh r2, [r7, #8]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r6
lsls r1, r1, #6
orrs r0, r1
adds r4, r5, #0
adds r4, #0x38
ldrb r1, [r4]
bl GetTileIndex
str r0, [r5, #0x7c]
adds r0, r5, #0
movs r1, #0x14
bl InitializeAnimation
ldr r0, _08070360 @ =0x00004020
movs r3, #0x2e
ldrsh r1, [r5, r3]
ldrh r2, [r7, #6]
subs r1, r1, r2
asrs r1, r1, #4
ands r1, r6
movs r3, #0x32
ldrsh r2, [r5, r3]
ldrh r3, [r7, #8]
subs r2, r2, r3
asrs r2, r2, #4
ands r2, r6
lsls r2, r2, #6
orrs r1, r2
ldrb r2, [r4]
bl SetTile
b _0807037A
.align 2, 0
_08070354: .4byte gRoomControls
_08070358: .4byte gPlayerEntity
_0807035C: .4byte gUnk_08003E44
_08070360: .4byte 0x00004020
_08070364:
adds r0, r5, #0
bl sub_08070458
_0807036A:
adds r0, r5, #0
adds r0, #0x41
ldrb r0, [r0]
cmp r0, #0
beq _0807037A
adds r0, r5, #0
bl sub_08070458
_0807037A:
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -1,720 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ObjectOnPillar
ObjectOnPillar: @ 0x08096E10
push {lr}
ldr r2, _08096E24 @ =gUnk_08123250
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08096E24: .4byte gUnk_08123250
thumb_func_start sub_08096E28
sub_08096E28: @ 0x08096E28
push {r4, r5, lr}
adds r4, r0, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
adds r5, r0, #0
cmp r5, #0
bne _08096EBC
movs r2, #1
movs r3, #1
strb r3, [r4, #0xc]
movs r0, #0x80
strh r0, [r4, #0x24]
ldrb r1, [r4, #0x11]
subs r0, #0x90
ands r0, r1
movs r1, #3
orrs r0, r1
strb r0, [r4, #0x11]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #0x39
rsbs r0, r0, #0
ands r0, r1
movs r1, #8
orrs r0, r1
strb r0, [r2]
ldrb r1, [r4, #0x18]
movs r0, #0x31
rsbs r0, r0, #0
ands r0, r1
movs r1, #0x10
orrs r0, r1
strb r0, [r4, #0x18]
adds r1, r4, #0
adds r1, #0x63
movs r0, #4
strb r0, [r1]
ldr r0, _08096EB4 @ =gUnk_080FD1F4
str r0, [r4, #0x48]
strb r3, [r4, #0x16]
adds r0, r4, #0
adds r0, #0x72
strh r5, [r0]
adds r0, #0xb
ldrb r0, [r0]
lsrs r0, r0, #4
subs r1, #0x2b
strb r0, [r1]
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
adds r0, r4, #0
bl sub_080970F4
ldr r1, _08096EB8 @ =gUnk_08123264
ldrb r0, [r4, #0xa]
adds r0, r0, r1
ldrb r0, [r0]
strb r0, [r4, #0x1e]
b _08096F04
.align 2, 0
_08096EB4: .4byte gUnk_080FD1F4
_08096EB8: .4byte gUnk_08123264
_08096EBC:
adds r0, r4, #0
adds r0, #0x7c
ldrb r2, [r0]
adds r0, #1
ldrb r3, [r0]
movs r1, #0xf
adds r0, r1, #0
ands r0, r3
lsls r0, r0, #8
ldr r3, _08096F08 @ =gRoomControls
orrs r2, r0
ldrh r0, [r3, #6]
adds r2, r2, r0
strh r2, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x7e
ldrb r0, [r0]
movs r2, #0x7f
adds r2, r2, r4
mov ip, r2
ldrb r2, [r2]
ands r1, r2
lsls r1, r1, #8
orrs r0, r1
ldrh r3, [r3, #8]
adds r0, r0, r3
strh r0, [r4, #0x32]
mov r5, ip
ldrb r0, [r5]
lsrs r0, r0, #4
adds r1, r4, #0
adds r1, #0x38
strb r0, [r1]
adds r0, r4, #0
bl sub_080971E0
_08096F04:
pop {r4, r5, pc}
.align 2, 0
_08096F08: .4byte gRoomControls
thumb_func_start sub_08096F0C
sub_08096F0C: @ 0x08096F0C
push {r4, lr}
adds r4, r0, #0
bl sub_08097194
cmp r0, #0
bne _08096F2E
adds r0, r4, #0
bl sub_08097008
cmp r0, #0
beq _08096F28
movs r0, #3
strb r0, [r4, #0xc]
b _08096F2E
_08096F28:
adds r0, r4, #0
bl sub_08078930
_08096F2E:
pop {r4, pc}
thumb_func_start sub_08096F30
sub_08096F30: @ 0x08096F30
push {lr}
adds r2, r0, #0
adds r0, #0x76
ldrh r0, [r0]
cmp r0, #0
beq _08096F44
adds r0, r2, #0
bl sub_08097144
b _08096F62
_08096F44:
ldr r0, _08096F64 @ =gPlayerState
ldrb r0, [r0, #5]
cmp r0, #0
bne _08096F50
movs r0, #6
strb r0, [r2, #0xd]
_08096F50:
ldr r0, _08096F68 @ =gUnk_0812326C
ldrb r1, [r2, #0xd]
subs r1, #5
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
_08096F62:
pop {pc}
.align 2, 0
_08096F64: .4byte gPlayerState
_08096F68: .4byte gUnk_0812326C
thumb_func_start sub_08096F6C
sub_08096F6C: @ 0x08096F6C
push {r4, lr}
adds r4, r0, #0
adds r1, r4, #0
adds r1, #0x72
ldrh r0, [r1]
cmp r0, #0
bne _08096F98
movs r0, #1
strh r0, [r1]
ldr r1, _08096FD8 @ =gPlayerEntity
ldrb r0, [r1, #0x14]
ldr r2, _08096FDC @ =gUnk_08123274
adds r0, r0, r2
movs r2, #0
ldrsb r2, [r0, r2]
lsls r2, r2, #0x10
movs r3, #1
ldrsb r3, [r0, r3]
lsls r3, r3, #0x10
adds r0, r4, #0
bl PositionRelative
_08096F98:
adds r0, r4, #0
bl sub_08097008
bl sub_080896B0
cmp r0, #0
beq _08096FD4
ldr r2, _08096FE0 @ =gPlayerState
movs r3, #0
movs r0, #0x10
strb r0, [r2, #0xc]
adds r1, r2, #0
adds r1, #0x38
movs r0, #0x20
strb r0, [r1]
ldr r0, [r2, #0x30]
movs r1, #1
orrs r0, r1
str r0, [r2, #0x30]
ldr r0, _08096FD8 @ =gPlayerEntity
strh r3, [r0, #0x2c]
strh r3, [r0, #0x30]
ldrb r0, [r0, #0x14]
movs r1, #4
eors r0, r1
lsls r0, r0, #2
strb r0, [r4, #0x15]
adds r0, r4, #0
bl sub_08097098
_08096FD4:
pop {r4, pc}
.align 2, 0
_08096FD8: .4byte gPlayerEntity
_08096FDC: .4byte gUnk_08123274
_08096FE0: .4byte gPlayerState
thumb_func_start sub_08096FE4
sub_08096FE4: @ 0x08096FE4
movs r2, #0
movs r1, #1
strb r1, [r0, #0xc]
adds r0, #0x72
strh r2, [r0]
bx lr
thumb_func_start sub_08096FF0
sub_08096FF0: @ 0x08096FF0
push {r4, lr}
adds r4, r0, #0
bl sub_08097144
cmp r0, #0
beq _08097000
movs r0, #1
strb r0, [r4, #0xc]
_08097000:
pop {r4, pc}
.align 2, 0
thumb_func_start nullsub_122
nullsub_122: @ 0x08097004
bx lr
.align 2, 0
thumb_func_start sub_08097008
sub_08097008: @ 0x08097008
push {r4, r5, lr}
adds r5, r0, #0
adds r0, #0x74
ldrh r0, [r0]
adds r1, r5, #0
adds r1, #0x38
ldrb r1, [r1]
bl GetTileType
adds r4, r0, #0
ldr r0, _08097048 @ =0x00004036
cmp r4, r0
beq _08097070
adds r0, r4, #0
bl sub_08097074
cmp r0, #1
beq _0809704C
cmp r0, #2
beq _08097062
movs r0, #0xf
movs r1, #4
movs r2, #0
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _0809706A
adds r0, r5, #0
bl CopyPosition
b _0809706A
.align 2, 0
_08097048: .4byte 0x00004036
_0809704C:
adds r0, r4, #0
subs r0, #0x37
movs r1, #3
ands r0, r1
lsls r0, r0, #3
strb r0, [r5, #0x15]
adds r0, r5, #0
bl sub_08097098
movs r0, #1
b _08097072
_08097062:
adds r0, r5, #0
adds r0, #0x70
strh r4, [r0]
b _08097070
_0809706A:
adds r0, r5, #0
bl DeleteEntity
_08097070:
movs r0, #0
_08097072:
pop {r4, r5, pc}
thumb_func_start sub_08097074
sub_08097074: @ 0x08097074
push {lr}
adds r2, r0, #0
ldr r1, _0809707C @ =gUnk_0812327C
b _0809708C
.align 2, 0
_0809707C: .4byte gUnk_0812327C
_08097080:
ldrh r0, [r1]
cmp r0, r2
bne _0809708A
ldrh r0, [r1, #2]
b _08097094
_0809708A:
adds r1, #4
_0809708C:
ldrh r0, [r1]
cmp r0, #0
bne _08097080
movs r0, #0
_08097094:
pop {pc}
.align 2, 0
thumb_func_start sub_08097098
sub_08097098: @ 0x08097098
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r1, r6, #0
adds r1, #0x76
movs r0, #0x20
strh r0, [r1]
adds r0, #0xef
bl EnqueueSFX
adds r0, r6, #0
adds r0, #0x70
ldrh r0, [r0]
adds r5, r6, #0
adds r5, #0x74
ldrh r1, [r5]
adds r4, r6, #0
adds r4, #0x38
ldrb r2, [r4]
bl SetTile
ldr r1, _080970F0 @ =gUnk_080B4488
ldrb r0, [r6, #0x15]
lsrs r0, r0, #3
lsls r0, r0, #1
adds r0, r0, r1
movs r1, #0
ldrsh r0, [r0, r1]
ldrh r5, [r5]
adds r0, r0, r5
ldrb r1, [r4]
bl GetTileType
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #0x79
beq _080970E4
cmp r0, #0x77
bne _080970EC
_080970E4:
adds r1, r6, #0
adds r1, #0x63
movs r0, #2
strb r0, [r1]
_080970EC:
pop {r4, r5, r6, pc}
.align 2, 0
_080970F0: .4byte gUnk_080B4488
thumb_func_start sub_080970F4
sub_080970F4: @ 0x080970F4
push {r4, r5, r6, lr}
adds r6, r0, #0
movs r0, #0x2e
ldrsh r1, [r6, r0]
ldr r2, _0809713C @ =gRoomControls
ldrh r0, [r2, #6]
subs r1, r1, r0
asrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
movs r4, #0x32
ldrsh r0, [r6, r4]
ldrh r2, [r2, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r1, r0
adds r4, r6, #0
adds r4, #0x74
strh r1, [r4]
ldrh r0, [r4]
adds r5, r6, #0
adds r5, #0x38
ldrb r1, [r5]
bl GetTileIndex
adds r1, r6, #0
adds r1, #0x70
strh r0, [r1]
ldr r0, _08097140 @ =0x00004036
ldrh r1, [r4]
ldrb r2, [r5]
bl SetTile
pop {r4, r5, r6, pc}
.align 2, 0
_0809713C: .4byte gRoomControls
_08097140: .4byte 0x00004036
thumb_func_start sub_08097144
sub_08097144: @ 0x08097144
push {r4, lr}
adds r4, r0, #0
bl LinearMoveUpdate
adds r0, r4, #0
bl sub_0800445C
adds r0, r4, #0
bl sub_080002B8
cmp r0, #0x19
bne _08097164
adds r1, r4, #0
adds r1, #0x63
movs r0, #2
strb r0, [r1]
_08097164:
adds r1, r4, #0
adds r1, #0x76
ldrh r0, [r1]
subs r0, #1
strh r0, [r1]
lsls r0, r0, #0x10
cmp r0, #0
bne _08097190
adds r0, r4, #0
bl sub_08097194
cmp r0, #0
bne _08097190
adds r1, r4, #0
adds r1, #0x63
movs r0, #4
strb r0, [r1]
adds r0, r4, #0
bl sub_080970F4
movs r0, #1
b _08097192
_08097190:
movs r0, #0
_08097192:
pop {r4, pc}
thumb_func_start sub_08097194
sub_08097194: @ 0x08097194
push {r4, lr}
adds r4, r0, #0
bl sub_0800442E
cmp r0, #0
beq _080971A4
movs r0, #1
b _080971DE
_080971A4:
adds r0, r4, #0
bl GetTileTypeByEntity
adds r1, r0, #0
subs r0, #0x71
cmp r0, #1
bls _080971B8
ldr r0, _080971D4 @ =0x00004020
cmp r1, r0
bne _080971DC
_080971B8:
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
bl SetFlag
ldr r0, _080971D8 @ =0x0000010B
bl EnqueueSFX
adds r0, r4, #0
bl sub_080971E0
movs r0, #1
b _080971DE
.align 2, 0
_080971D4: .4byte 0x00004020
_080971D8: .4byte 0x0000010B
_080971DC:
movs r0, #0
_080971DE:
pop {r4, pc}
thumb_func_start sub_080971E0
sub_080971E0: @ 0x080971E0
push {r4, r5, lr}
adds r5, r0, #0
movs r0, #0xf
movs r1, #0x11
movs r2, #0x40
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08097202
ldr r2, _0809727C @ =0xFFF80000
movs r3, #0x80
lsls r3, r3, #0xa
adds r0, r5, #0
adds r1, r4, #0
bl PositionRelative
_08097202:
movs r0, #0xf
movs r1, #0x11
movs r2, #0x40
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08097222
movs r2, #0x80
lsls r2, r2, #0xc
movs r3, #0x80
lsls r3, r3, #0xa
adds r0, r5, #0
adds r1, r4, #0
bl PositionRelative
_08097222:
ldrb r0, [r5, #0xa]
cmp r0, #1
beq _08097284
cmp r0, #1
ble _08097234
cmp r0, #2
beq _080972C4
cmp r0, #3
beq _08097304
_08097234:
movs r0, #4
strb r0, [r5, #0xc]
movs r0, #1
strb r0, [r5, #0x1e]
adds r2, r5, #0
adds r2, #0x29
ldrb r0, [r2]
movs r1, #7
orrs r0, r1
strb r0, [r2]
movs r0, #0x2e
ldrsh r1, [r5, r0]
ldr r2, _08097280 @ =gRoomControls
ldrh r0, [r2, #6]
subs r1, r1, r0
asrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
movs r4, #0x32
ldrsh r0, [r5, r4]
ldrh r2, [r2, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r1, r0
adds r0, r5, #0
adds r0, #0x38
ldrb r2, [r0]
movs r0, #0
bl SetTile
_08097274:
bl DeleteThisEntity
b _08097346
.align 2, 0
_0809727C: .4byte 0xFFF80000
_08097280: .4byte gRoomControls
_08097284:
movs r1, #0x2e
ldrsh r0, [r5, r1]
ldr r3, _080972C0 @ =gRoomControls
ldrh r1, [r3, #6]
subs r0, r0, r1
asrs r4, r0, #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
adds r0, r4, #0
bl sub_08097348
cmp r0, #0
bne _08097274
adds r0, r5, #0
adds r0, #0x38
ldrb r2, [r0]
movs r0, #0x73
adds r1, r4, #0
bl SetTileType
b _08097274
.align 2, 0
_080972C0: .4byte gRoomControls
_080972C4:
movs r0, #0x2f
movs r1, #0
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08097274
ldrh r2, [r5, #0x2e]
movs r1, #0x10
rsbs r1, r1, #0
adds r0, r1, #0
ands r0, r2
adds r0, #8
strh r0, [r4, #0x2e]
ldrh r0, [r5, #0x32]
ands r1, r0
adds r1, #8
strh r1, [r4, #0x32]
adds r0, r5, #0
adds r0, #0x38
ldrb r1, [r0]
adds r0, r4, #0
adds r0, #0x38
strb r1, [r0]
adds r0, r5, #0
adds r0, #0x84
ldrh r1, [r0]
adds r0, r4, #0
adds r0, #0x86
strh r1, [r0]
b _08097274
_08097304:
movs r0, #0x2f
movs r1, #1
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08097342
ldrh r2, [r5, #0x2e]
movs r1, #0x10
rsbs r1, r1, #0
adds r0, r1, #0
ands r0, r2
adds r0, #8
strh r0, [r4, #0x2e]
ldrh r0, [r5, #0x32]
ands r1, r0
adds r1, #8
strh r1, [r4, #0x32]
adds r0, r5, #0
adds r0, #0x38
ldrb r1, [r0]
adds r0, r4, #0
adds r0, #0x38
strb r1, [r0]
adds r0, r5, #0
adds r0, #0x84
ldrh r1, [r0]
adds r0, r4, #0
adds r0, #0x86
strh r1, [r0]
_08097342:
bl DeleteThisEntity
_08097346:
pop {r4, r5, pc}
thumb_func_start sub_08097348
sub_08097348: @ 0x08097348
push {lr}
adds r3, r0, #0
ldr r1, _08097360 @ =gSmallChests
movs r2, #0
_08097350:
ldrh r0, [r1, #4]
cmp r0, r3
bne _08097364
ldrb r0, [r1, #1]
bl CheckLocalFlag
b _0809736E
.align 2, 0
_08097360: .4byte gSmallChests
_08097364:
adds r2, #1
adds r1, #8
cmp r2, #7
bls _08097350
movs r0, #0
_0809736E:
pop {pc}

View File

@ -44913,21 +44913,6 @@
"start": 1192372,
"size": 6
},
{
"path": "objectOnPillar/gUnk_08123264.bin",
"start": 1192548,
"size": 8
},
{
"path": "objectOnPillar/gUnk_08123274.bin",
"start": 1192564,
"size": 8
},
{
"path": "objectOnPillar/gUnk_0812327C.bin",
"start": 1192572,
"size": 28
},
{
"path": "mineralWaterSource/MineralWaterSourceParameters.bin",
"start": 1192608,

View File

@ -1,25 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_08123250:: @ 08123250
.4byte sub_08096E28
.4byte sub_08096F0C
.4byte sub_08096F30
.4byte sub_08096FF0
.4byte nullsub_122
gUnk_08123264:: @ 08123264
.incbin "objectOnPillar/gUnk_08123264.bin"
gUnk_0812326C:: @ 0812326C
.4byte sub_08096F6C
.4byte sub_08096FE4
gUnk_08123274:: @ 08123274
.incbin "objectOnPillar/gUnk_08123274.bin"
gUnk_0812327C:: @ 0812327C
.incbin "objectOnPillar/gUnk_0812327C.bin"

View File

@ -335,7 +335,7 @@ void Object69(Entity*);
void Object6A(Entity*);
void CrenalBeanSprout(Entity*);
void MinecartDoor(Entity*);
void ObjectOnPillar(Entity*);
void ObjectOnPillar();
void MineralWaterSource(Entity*);
void MinishSizedArchway(Entity*);
void Object70(Entity*);

View File

@ -757,7 +757,7 @@ SECTIONS {
src/object/object6A.o(.text);
asm/object/crenalBeanSprout.o(.text);
asm/object/minecartDoor.o(.text);
asm/object/objectOnPillar.o(.text);
src/object/objectOnPillar.o(.text);
src/object/mineralWaterSource.o(.text);
src/object/minishSizedArchway.o(.text);
asm/object/object70.o(.text);
@ -1504,7 +1504,7 @@ SECTIONS {
data/const/object/crenalBeanSprout.o(.rodata);
data/animations/object/crenalBeanSprout.o(.rodata);
data/const/object/minecartDoor.o(.rodata);
data/const/object/objectOnPillar.o(.rodata);
src/object/objectOnPillar.o(.rodata);
data/const/object/mineralWaterSource.o(.rodata);
data/const/object/object70.o(.rodata);
src/object/pushableGrave.o(.rodata);

303
src/object/objectOnPillar.c Normal file
View File

@ -0,0 +1,303 @@
/**
* @file objectOnPillar.c
* @ingroup Objects
*
* @brief Object on Pillar object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[8];
/*0x70*/ u16 tileIndex;
/*0x72*/ u16 unk_72;
/*0x74*/ u16 tilePosition;
/*0x76*/ u16 unk_76;
/*0x78*/ u8 unk_78[0x4];
/*0x7c*/ u8 unk_7c;
/*0x7d*/ u8 unk_7d;
/*0x7e*/ u8 unk_7e;
/*0x7f*/ u8 unk_7f;
/*0x80*/ u8 unk_80[0x4];
/*0x84*/ u16 hitFlag;
/*0x86*/ u16 unk_86;
} ObjectOnPillarEntity;
extern bool32 sub_080896B0(void); // pushableStatue
extern Hitbox gUnk_080FD1F4;
extern s16 gUnk_080B4488[];
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[10 + 0x14];
/*0x86*/ u16 hitFlag;
} EntityWithHitFlag;
typedef struct {
u16 key;
u16 value;
} KeyValuePair;
void sub_080970F4(ObjectOnPillarEntity*);
void sub_080971E0(ObjectOnPillarEntity*);
bool32 sub_08097194(ObjectOnPillarEntity*);
bool32 sub_08097008(ObjectOnPillarEntity*);
bool32 sub_08097144(ObjectOnPillarEntity*);
void sub_08097098(ObjectOnPillarEntity*);
u32 sub_08097074(u32);
bool32 sub_08097348(u32);
void ObjectOnPillar_Init(ObjectOnPillarEntity*);
void ObjectOnPillar_Action1(ObjectOnPillarEntity*);
void ObjectOnPillar_Action2(ObjectOnPillarEntity*);
void ObjectOnPillar_Action3(ObjectOnPillarEntity*);
void ObjectOnPillar_Action4(ObjectOnPillarEntity*);
void ObjectOnPillar_SubAction0(ObjectOnPillarEntity*);
void ObjectOnPillar_SubAction1(ObjectOnPillarEntity*);
void ObjectOnPillar(ObjectOnPillarEntity* this) {
static void (*const ObjectOnPillar_Actions[])(ObjectOnPillarEntity*) = {
ObjectOnPillar_Init, ObjectOnPillar_Action1, ObjectOnPillar_Action2,
ObjectOnPillar_Action3, ObjectOnPillar_Action4,
};
ObjectOnPillar_Actions[super->action](this);
}
void ObjectOnPillar_Init(ObjectOnPillarEntity* this) {
static const u8 gUnk_08123264[] = {
0, 2, 4, 3, 7, 5, 0, 0,
};
if (CheckFlags(this->unk_86) == 0) {
super->action = 1;
super->speed = 0x80;
super->updatePriority = 3;
super->spriteSettings.draw = 1;
super->spritePriority.b1 = 1;
super->spriteSettings.shadow = 1;
super->spriteOffsetY = 4;
super->hitbox = (Hitbox*)&gUnk_080FD1F4;
super->field_0x16 = 1;
this->unk_72 = 0;
super->collisionLayer = this->unk_7d >> 4;
UpdateSpriteForCollisionLayer(super);
sub_080970F4(this);
super->frameIndex = gUnk_08123264[super->type];
} else {
super->x.HALF.HI = (this->unk_7c | ((this->unk_7d & 0xf) << 8)) + gRoomControls.origin_x;
super->y.HALF.HI = (this->unk_7e | ((this->unk_7f & 0xf) << 8)) + gRoomControls.origin_y;
super->collisionLayer = this->unk_7f >> 4;
sub_080971E0(this);
}
}
void ObjectOnPillar_Action1(ObjectOnPillarEntity* this) {
if (sub_08097194(this) == FALSE) {
if (sub_08097008(this)) {
super->action = 3;
} else {
sub_08078930(super);
}
}
}
void ObjectOnPillar_Action2(ObjectOnPillarEntity* this) {
static void (*const ObjectOnPillar_SubActions[])(ObjectOnPillarEntity*) = {
ObjectOnPillar_SubAction0,
ObjectOnPillar_SubAction1,
};
if (this->unk_76 != 0) {
sub_08097144(this);
} else {
if (gPlayerState.heldObject == 0) {
super->subAction = 6;
}
ObjectOnPillar_SubActions[super->subAction - 5](this);
}
}
void ObjectOnPillar_SubAction0(ObjectOnPillarEntity* this) {
static const s8 gUnk_08123274[] = { 0, 14, -14, 2, 0, -14, 14, 2 };
const s8* ptr;
if (this->unk_72 == 0) {
this->unk_72 = 1;
ptr = &gUnk_08123274[gPlayerEntity.animationState];
PositionRelative(super, &gPlayerEntity, ptr[0] << 0x10, ptr[1] << 0x10);
}
sub_08097008(this);
if (sub_080896B0()) {
gPlayerState.queued_action = 0x10;
gPlayerState.field_0x38 = 0x20;
gPlayerState.flags |= PL_BUSY;
gPlayerEntity.x.HALF.LO = 0;
gPlayerEntity.y.HALF.LO = 0;
super->direction = ((gPlayerEntity.animationState ^ 4) << 2);
sub_08097098(this);
}
}
void ObjectOnPillar_SubAction1(ObjectOnPillarEntity* this) {
super->action = 1;
this->unk_72 = 0;
}
void ObjectOnPillar_Action3(ObjectOnPillarEntity* this) {
if (sub_08097144(this)) {
super->action = 1;
}
}
void ObjectOnPillar_Action4(ObjectOnPillarEntity* this) {
}
bool32 sub_08097008(ObjectOnPillarEntity* this) {
Entity* effect;
u32 tileType = GetTileType(this->tilePosition, super->collisionLayer);
if (tileType != 0x4036) {
switch (sub_08097074(tileType)) {
case 1:
super->direction = (((tileType - 0x37) & 3) << 3);
sub_08097098(this);
return TRUE;
case 2:
this->tileIndex = tileType;
break;
default:
effect = CreateObject(SPECIAL_FX, 4, 0);
if (effect != NULL) {
CopyPosition(super, effect);
}
DeleteEntity(super);
break;
}
}
return FALSE;
}
u32 sub_08097074(u32 tileType) {
static const KeyValuePair gUnk_0812327C[] = {
{ 0x4037, 1 }, { 0x4038, 1 }, { 0x4039, 1 }, { 0x403a, 1 }, { 0x7a, 2 }, { 0x78, 2 }, { 0, 0 },
};
const KeyValuePair* entry = gUnk_0812327C;
for (; entry->key != 0; entry++) {
if (entry->key == tileType) {
return entry->value;
}
}
return 0;
}
void sub_08097098(ObjectOnPillarEntity* this) {
u16 tileType;
this->unk_76 = 0x20;
EnqueueSFX(SFX_10F);
SetTile(this->tileIndex, this->tilePosition, super->collisionLayer);
tileType = GetTileType(gUnk_080B4488[super->direction >> 3] + this->tilePosition, super->collisionLayer);
if ((tileType == 0x79) || tileType == 0x77) {
super->spriteOffsetY = 2;
}
}
void sub_080970F4(ObjectOnPillarEntity* this) {
this->tilePosition = COORD_TO_TILE(super);
this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer);
SetTile(0x4036, this->tilePosition, super->collisionLayer);
}
bool32 sub_08097144(ObjectOnPillarEntity* this) {
LinearMoveUpdate(super);
sub_0800445C(super);
if (sub_080002B8(super) == 0x19) {
super->spriteOffsetY = 2;
}
if ((--this->unk_76 == 0) && sub_08097194(this) == FALSE) {
super->spriteOffsetY = 4;
sub_080970F4(this);
return TRUE;
} else {
return FALSE;
}
}
bool32 sub_08097194(ObjectOnPillarEntity* this) {
if (sub_0800442E(super)) {
return TRUE;
} else {
u32 tileType = GetTileTypeByEntity(super);
if (tileType == 0x71 || tileType == 0x72 || (tileType == 0x4020)) {
SetFlag(this->unk_86);
EnqueueSFX(SFX_10B);
sub_080971E0(this);
return TRUE;
} else {
return FALSE;
}
}
return FALSE;
}
void sub_080971E0(ObjectOnPillarEntity* this) {
EntityWithHitFlag* entity;
u32 tilePosition;
entity = (EntityWithHitFlag*)CreateObject(SPECIAL_FX, 0x11, 0x40);
if (entity != NULL) {
PositionRelative(super, &entity->base, -0x80000, 0x20000);
}
entity = (EntityWithHitFlag*)CreateObject(SPECIAL_FX, 0x11, 0x40);
if (entity != NULL) {
PositionRelative(super, &entity->base, 0x80000, 0x20000);
}
switch (super->type) {
case 0:
default:
super->action = 4;
super->frameIndex = 1;
super->spritePriority.b0 = 7;
SetTile(0, COORD_TO_TILE(super), super->collisionLayer);
DeleteThisEntity();
break;
case 1:
tilePosition = COORD_TO_TILE(super);
if (sub_08097348(tilePosition) == 0) {
SetTileType(0x73, tilePosition, super->collisionLayer);
}
DeleteThisEntity();
break;
case 2:
entity = (EntityWithHitFlag*)CreateObject(HITTABLE_LEVER, 0, 0);
if (entity != NULL) {
(entity->base).x.HALF.HI = (super->x.HALF.HI & 0xfff0) + 8;
(entity->base).y.HALF.HI = (super->y.HALF.HI & 0xfff0) + 8;
(entity->base).collisionLayer = super->collisionLayer;
entity->hitFlag = this->hitFlag;
}
DeleteThisEntity();
break;
case 3:
entity = (EntityWithHitFlag*)CreateObject(HITTABLE_LEVER, 1, 0);
if (entity != NULL) {
(entity->base).x.HALF.HI = (super->x.HALF.HI & 0xfff0) + 8;
(entity->base).y.HALF.HI = (super->y.HALF.HI & 0xfff0) + 8;
(entity->base).collisionLayer = super->collisionLayer;
entity->hitFlag = this->hitFlag;
}
DeleteThisEntity();
break;
}
}
bool32 sub_08097348(u32 tilePosition) {
u32 index;
TileEntity* tileEntity = gSmallChests;
for (index = 0; index < 8; index++, tileEntity++) {
if (tileEntity->_4 == tilePosition) {
return CheckLocalFlag(tileEntity->_1);
}
}
return FALSE;
}