summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/furniture.s1102
-rw-r--r--asm/non_matching/furniture/sub_08090E64.s33
-rw-r--r--data/animations/object/furniture.s18
-rw-r--r--include/entity.h2
-rw-r--r--include/global.h2
-rw-r--r--linker.ld3
-rw-r--r--src/object/furniture.c390
7 files changed, 429 insertions, 1121 deletions
diff --git a/asm/furniture.s b/asm/furniture.s
deleted file mode 100644
index 9b2cf28d..00000000
--- a/asm/furniture.s
+++ /dev/null
@@ -1,1102 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start Furniture
-Furniture: @ 0x080905A0
- push {lr}
- ldr r2, _080905B4 @ =gUnk_08122218
- ldrb r1, [r0, #0xc]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_080905B4: .4byte gUnk_08122218
-
- thumb_func_start sub_080905B8
-sub_080905B8: @ 0x080905B8
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- adds r7, r0, #0
- movs r0, #1
- mov sb, r0
- mov r1, sb
- strb r1, [r7, #0xc]
- movs r5, #0x2e
- ldrsh r2, [r7, r5]
- ldr r6, _08090618 @ =gRoomControls
- ldrh r0, [r6, #6]
- subs r2, r2, r0
- asrs r2, r2, #4
- movs r4, #0x3f
- ands r2, r4
- movs r1, #0x32
- ldrsh r0, [r7, r1]
- ldrh r1, [r6, #8]
- subs r0, r0, r1
- asrs r0, r0, #4
- ands r0, r4
- lsls r0, r0, #6
- orrs r2, r0
- adds r5, r7, #0
- adds r5, #0x78
- movs r0, #0
- mov r8, r0
- strh r2, [r5]
- adds r0, r7, #0
- bl sub_08090DC4
- adds r0, r7, #0
- adds r0, #0x82
- ldrh r0, [r0]
- ldr r1, _0809061C @ =0x00007FFF
- ands r1, r0
- cmp r1, #0x80
- beq _08090680
- cmp r1, #0x80
- bgt _08090620
- cmp r1, #0x20
- beq _080906E6
- cmp r1, #0x40
- beq _08090650
- b _080906E0
- .align 2, 0
-_08090618: .4byte gRoomControls
-_0809061C: .4byte 0x00007FFF
-_08090620:
- movs r0, #0x80
- lsls r0, r0, #2
- cmp r1, r0
- beq _080906E6
- cmp r1, r0
- bgt _08090636
- movs r0, #0x80
- lsls r0, r0, #1
- cmp r1, r0
- beq _08090640
- b _080906E0
-_08090636:
- movs r0, #0x80
- lsls r0, r0, #3
- cmp r1, r0
- beq _080906C4
- b _080906E0
-_08090640:
- adds r1, r7, #0
- adds r1, #0x38
- movs r0, #2
- strb r0, [r1]
- adds r0, r7, #0
- bl UpdateSpriteForCollisionLayer
- b _080906E6
-_08090650:
- ldrh r1, [r7, #0x32]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strh r0, [r7, #0x32]
- ldr r4, _0809067C @ =0x00004017
- ldrh r1, [r5]
- subs r1, #0x80
- adds r0, r4, #0
- movs r2, #1
- bl SetTile
- ldrh r1, [r5]
- subs r1, #0x40
- adds r0, r4, #0
- movs r2, #1
- bl SetTile
- b _080906E6
- .align 2, 0
-_0809067C: .4byte 0x00004017
-_08090680:
- mov r1, r8
- strb r1, [r7, #0x1e]
- ldrh r1, [r7, #0x32]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #6
- orrs r0, r1
- strh r0, [r7, #0x32]
- movs r2, #0x2e
- ldrsh r1, [r7, r2]
- ldrh r0, [r6, #6]
- subs r1, r1, r0
- asrs r1, r1, #4
- ands r1, r4
- movs r2, #0x32
- ldrsh r0, [r7, r2]
- ldrh r2, [r6, #8]
- subs r0, r0, r2
- asrs r0, r0, #4
- ands r0, r4
- lsls r0, r0, #6
- orrs r1, r0
- strh r1, [r5]
- ldr r0, _080906C0 @ =0x00004026
- ldrh r1, [r5]
- adds r2, r7, #0
- adds r2, #0x38
- ldrb r2, [r2]
- bl SetTile
- b _080906E6
- .align 2, 0
-_080906C0: .4byte 0x00004026
-_080906C4:
- adds r0, r7, #0
- bl sub_08090E64
- ldrb r0, [r7, #0xb]
- cmp r0, #0
- beq _080906E0
- adds r0, r7, #0
- adds r0, #0x62
- mov r5, sb
- strb r5, [r0]
- adds r1, r7, #0
- adds r1, #0x80
- movs r0, #0x30
- strb r0, [r1]
-_080906E0:
- adds r0, r7, #0
- bl sub_08090B6C
-_080906E6:
- adds r0, r7, #0
- adds r0, #0x81
- ldrb r1, [r0]
- cmp r1, #0x10
- beq _0809075C
- movs r0, #0x70
- ands r0, r1
- adds r4, r7, #0
- adds r4, #0x78
- cmp r0, #0x20
- beq _0809072E
- cmp r0, #0x30
- bne _0809073A
- ldrh r0, [r4]
- subs r0, #0x40
- strh r0, [r4]
- adds r0, r7, #0
- bl sub_08090B6C
- movs r0, #0x2e
- ldrsh r1, [r7, r0]
- ldr r2, _08090778 @ =gRoomControls
- ldrh r0, [r2, #6]
- subs r1, r1, r0
- asrs r1, r1, #4
- movs r3, #0x3f
- ands r1, r3
- movs r5, #0x32
- ldrsh r0, [r7, r5]
- ldrh r2, [r2, #8]
- subs r0, r0, r2
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r1, r0
- strh r1, [r4]
-_0809072E:
- ldrh r0, [r4]
- adds r0, #0x40
- strh r0, [r4]
- adds r0, r7, #0
- bl sub_08090B6C
-_0809073A:
- movs r0, #0x2e
- ldrsh r1, [r7, r0]
- ldr r2, _08090778 @ =gRoomControls
- ldrh r0, [r2, #6]
- subs r1, r1, r0
- asrs r1, r1, #4
- movs r3, #0x3f
- ands r1, r3
- movs r5, #0x32
- ldrsh r0, [r7, r5]
- ldrh r2, [r2, #8]
- subs r0, r0, r2
- asrs r0, r0, #4
- ands r0, r3
- lsls r0, r0, #6
- orrs r1, r0
- strh r1, [r4]
-_0809075C:
- adds r0, r7, #0
- adds r0, #0x82
- ldrh r0, [r0]
- ldr r1, _0809077C @ =0x00007FFF
- ands r1, r0
- cmp r1, #2
- beq _08090780
- cmp r1, #4
- bne _080907C8
- adds r0, r7, #0
- movs r1, #0x7e
- bl ChangeObjPalette
- b _080907C8
- .align 2, 0
-_08090778: .4byte gRoomControls
-_0809077C: .4byte 0x00007FFF
-_08090780:
- adds r0, r7, #0
- adds r0, #0x78
- ldrh r0, [r0]
- adds r4, r0, #0
- subs r4, #0x81
- ldrb r0, [r7, #0xa]
- movs r1, #2
- mov r8, r1
- cmp r0, #0x1a
- beq _08090798
- movs r2, #3
- mov r8, r2
-_08090798:
- movs r5, #0
- cmp r5, r8
- bhs _080907C8
- ldr r6, _080907DC @ =0x00004026
-_080907A0:
- adds r0, r6, #0
- adds r1, r4, #0
- movs r2, #2
- bl SetTile
- adds r0, r6, #0
- adds r1, r4, #0
- movs r2, #1
- bl SetTile
- adds r1, r4, #0
- adds r1, #0x40
- movs r0, #0
- movs r2, #1
- bl sub_080001D0
- adds r5, #1
- adds r4, #1
- cmp r5, r8
- blo _080907A0
-_080907C8:
- ldrb r0, [r7, #0xa]
- subs r0, #1
- cmp r0, #0x3b
- bls _080907D2
- b _080909DC
-_080907D2:
- lsls r0, r0, #2
- ldr r1, _080907E0 @ =_080907E4
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080907DC: .4byte 0x00004026
-_080907E0: .4byte _080907E4
-_080907E4: @ jump table
- .4byte _080908D4 @ case 0
- .4byte _080909DC @ case 1
- .4byte _080909DC @ case 2
- .4byte _080909DC @ case 3
- .4byte _080909DC @ case 4
- .4byte _080909DC @ case 5
- .4byte _080909DC @ case 6
- .4byte _080909DC @ case 7
- .4byte _080908F0 @ case 8
- .4byte _080909DC @ case 9
- .4byte _080909DC @ case 10
- .4byte _080909DC @ case 11
- .4byte _080909DC @ case 12
- .4byte _080909DC @ case 13
- .4byte _080909DC @ case 14
- .4byte _080909DC @ case 15
- .4byte _080909DC @ case 16
- .4byte _080909DC @ case 17
- .4byte _080909DC @ case 18
- .4byte _080909DC @ case 19
- .4byte _080909DC @ case 20
- .4byte _080909DC @ case 21
- .4byte _080909DC @ case 22
- .4byte _080909DC @ case 23
- .4byte _080909DC @ case 24
- .4byte _080909DC @ case 25
- .4byte _080909DC @ case 26
- .4byte _080909DC @ case 27
- .4byte _080909DC @ case 28
- .4byte _08090920 @ case 29
- .4byte _08090938 @ case 30
- .4byte _080909DC @ case 31
- .4byte _080909DC @ case 32
- .4byte _080909DC @ case 33
- .4byte _080909DC @ case 34
- .4byte _080909DC @ case 35
- .4byte _080909DC @ case 36
- .4byte _080909DC @ case 37
- .4byte _080909DC @ case 38
- .4byte _08090984 @ case 39
- .4byte _080909DC @ case 40
- .4byte _080909DC @ case 41
- .4byte _080909DC @ case 42
- .4byte _080909DC @ case 43
- .4byte _080909DC @ case 44
- .4byte _080909DC @ case 45
- .4byte _080909DC @ case 46
- .4byte _080909DC @ case 47
- .4byte _080909DC @ case 48
- .4byte _080909DC @ case 49
- .4byte _080909DC @ case 50
- .4byte _080909DC @ case 51
- .4byte _080909DC @ case 52
- .4byte _080909DC @ case 53
- .4byte _080909DC @ case 54
- .4byte _080909DC @ case 55
- .4byte _080909DC @ case 56
- .4byte _080909DC @ case 57
- .4byte _08090994 @ case 58
- .4byte _080909C8 @ case 59
-_080908D4:
- ldrb r0, [r7, #0xb]
- cmp r0, #0
- bne _080908DC
- b _080909DC
-_080908DC:
- adds r2, r7, #0
- adds r2, #0x29
- ldrb r1, [r2]
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #4
- orrs r0, r1
- strb r0, [r2]
- b _080909DC
-_080908F0:
- movs r0, #0x4d
- movs r1, #0x3e
- movs r2, #0
- bl CreateObject
- adds r4, r0, #0
- cmp r4, #0
- beq _080909DC
- movs r3, #0x80
- lsls r3, r3, #0xd
- adds r0, r7, #0
- adds r1, r4, #0
- adds r2, r3, #0
- bl PositionRelative
- movs r0, #1
- strb r0, [r4, #0x1e]
- ldrb r1, [r4, #0x11]
- subs r0, #0x11
- ands r0, r1
- movs r1, #2
- orrs r0, r1
- strb r0, [r4, #0x11]
- b _080909DC
-_08090920:
- ldr r0, _08090934 @ =0x00000306
- adds r1, r7, #0
- adds r1, #0x78
- ldrh r1, [r1]
- adds r1, #0x41
- movs r2, #2
- bl sub_0807B7D8
- b _080909DC
- .align 2, 0
-_08090934: .4byte 0x00000306
-_08090938:
- adds r5, r7, #0
- adds r5, #0x38
- movs r0, #1
- strb r0, [r5]
- ldrb r1, [r7, #0x1b]
- movs r0, #0x3f
- ands r0, r1
- movs r1, #0x80
- orrs r0, r1
- strb r0, [r7, #0x1b]
- ldr r0, _0809097C @ =0x00004074
- adds r4, r7, #0
- adds r4, #0x78
- ldrh r1, [r4]
- subs r1, #0x40
- ldrb r2, [r5]
- bl SetTile
- ldrh r1, [r4]
- subs r1, #0x40
- ldrb r2, [r5]
- movs r0, #0x3f
- bl sub_080001D0
- ldr r6, _08090980 @ =0x00004017
- ldrh r1, [r4]
- ldrb r2, [r5]
- adds r0, r6, #0
- bl SetTile
- ldrh r1, [r4]
- adds r1, #0x40
- ldrb r2, [r5]
- b _080909BC
- .align 2, 0
-_0809097C: .4byte 0x00004074
-_08090980: .4byte 0x00004017
-_08090984:
- ldrb r0, [r7, #0xb]
- cmp r0, #0
- beq _080909DC
- adds r1, r7, #0
- adds r1, #0x62
- movs r0, #0xfc
- strb r0, [r1]
- b _080909DC
-_08090994:
- ldr r6, _080909C4 @ =0x00004023
- adds r5, r7, #0
- adds r5, #0x78
- ldrh r1, [r5]
- subs r1, #0x41
- adds r4, r7, #0
- adds r4, #0x38
- ldrb r2, [r4]
- adds r0, r6, #0
- bl SetTile
- ldrh r1, [r5]
- subs r1, #0x40
- ldrb r2, [r4]
- adds r0, r6, #0
- bl SetTile
- ldrh r1, [r5]
- subs r1, #0x3f
- ldrb r2, [r4]
-_080909BC:
- adds r0, r6, #0
- bl SetTile
- b _080909DC
- .align 2, 0
-_080909C4: .4byte 0x00004023
-_080909C8:
- ldr r0, _080909E4 @ =0x00004022
- adds r1, r7, #0
- adds r1, #0x78
- ldrh r1, [r1]
- adds r1, #0x41
- adds r2, r7, #0
- adds r2, #0x38
- ldrb r2, [r2]
- bl SetTile
-_080909DC:
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_080909E4: .4byte 0x00004022
-
- thumb_func_start sub_080909E8
-sub_080909E8: @ 0x080909E8
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- adds r0, #0x82
- ldrh r0, [r0]
- ldr r1, _08090A04 @ =0x00007FFF
- ands r1, r0
- cmp r1, #8
- beq _08090A42
- cmp r1, #8
- bgt _08090A08
- cmp r1, #1
- beq _08090A12
- b _08090B60
- .align 2, 0
-_08090A04: .4byte 0x00007FFF
-_08090A08:
- cmp r1, #0x10
- beq _08090A68
- cmp r1, #0x80
- beq _08090AB0
- b _08090B60
-_08090A12:
- ldr r2, _08090A34 @ =gPlayerEntity
- movs r0, #0x32
- ldrsh r1, [r2, r0]
- movs r3, #0x32
- ldrsh r0, [r5, r3]
- cmp r1, r0
- blt _08090A26
- adds r0, #0x18
- cmp r1, r0
- ble _08090A38
-_08090A26:
- ldrb r0, [r5, #0x19]
- movs r1, #0x3f
- ands r1, r0
- movs r0, #0x80
- orrs r1, r0
- strb r1, [r5, #0x19]
- b _08090B60
- .align 2, 0
-_08090A34: .4byte gPlayerEntity
-_08090A38:
- ldrb r0, [r5, #0x19]
- movs r1, #0xc0
- orrs r0, r1
- strb r0, [r5, #0x19]
- b _08090B60
-_08090A42:
- ldrb r0, [r5, #0xe]
- adds r0, #1
- strb r0, [r5, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x10
- beq _08090A52
- b _08090B60
-_08090A52:
- movs r0, #0
- strb r0, [r5, #0xe]
- ldrb r0, [r5, #0xf]
- adds r0, #1
- movs r1, #3
- ands r0, r1
- strb r0, [r5, #0xf]
- adds r0, r5, #0
- bl sub_08090E4C
- b _08090B60
-_08090A68:
- ldrb r0, [r5, #0xa]
- cmp r0, #0x3e
- beq _08090A8C
- ldrb r0, [r5, #0xe]
- adds r0, #1
- strb r0, [r5, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x14
- bne _08090B60
- ldrb r0, [r5, #0x1e]
- adds r0, #1
- movs r1, #3
- ands r0, r1
- strb r0, [r5, #0x1e]
- movs r0, #0
- strb r0, [r5, #0xe]
- b _08090B60
-_08090A8C:
- ldrb r0, [r5, #0xe]
- adds r0, #1
- strb r0, [r5, #0xe]
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0xe
- bne _08090B60
- movs r0, #0
- strb r0, [r5, #0xe]
- ldrb r0, [r5, #0xf]
- adds r0, #1
- movs r1, #3
- bl __modsi3
- strb r0, [r5, #0xf]
- adds r0, #1
- strb r0, [r5, #0x1e]
- b _08090B60
-_08090AB0:
- ldr r2, _08090B00 @ =gPlayerEntity
- movs r3, #0x32
- ldrsh r1, [r2, r3]
- movs r3, #0x32
- ldrsh r0, [r5, r3]
- adds r0, #8
- cmp r1, r0
- bge _08090B14
- ldr r0, _08090B04 @ =gPlayerState
- ldrb r0, [r0, #0x12]
- cmp r0, #0x1e
- beq _08090B60
- adds r0, r5, #0
- bl GetTileTypeByEntity
- ldr r1, _08090B08 @ =0x00004017
- cmp r0, r1
- bne _08090B60
- ldr r0, _08090B0C @ =0x00004026
- adds r4, r5, #0
- adds r4, #0x78
- ldrh r1, [r4]
- adds r5, #0x38
- ldrb r2, [r5]
- bl SetTile
- ldr r6, _08090B10 @ =0x0000403D
- ldrh r1, [r4]
- subs r1, #0x40
- ldrb r2, [r5]
- adds r0, r6, #0
- bl SetTile
- ldrh r1, [r4]
- subs r1, #0x80
- ldrb r2, [r5]
- adds r0, r6, #0
- bl SetTile
- b _08090B60
- .align 2, 0
-_08090B00: .4byte gPlayerEntity
-_08090B04: .4byte gPlayerState
-_08090B08: .4byte 0x00004017
-_08090B0C: .4byte 0x00004026
-_08090B10: .4byte 0x0000403D
-_08090B14:
- adds r3, r2, #0
- adds r3, #0x38
- ldrb r1, [r3]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _08090B2C
- movs r0, #1
- strb r0, [r3]
- adds r0, r2, #0
- bl UpdateSpriteForCollisionLayer
-_08090B2C:
- adds r0, r5, #0
- bl GetTileTypeByEntity
- ldr r6, _08090B64 @ =0x00004017
- cmp r0, r6
- beq _08090B60
- adds r4, r5, #0
- adds r4, #0x78
- ldrh r1, [r4]
- adds r5, #0x38
- ldrb r2, [r5]
- adds r0, r6, #0
- bl SetTile
- ldrh r1, [r4]
- subs r1, #0x40
- ldrb r2, [r5]
- adds r0, r6, #0
- bl SetTile
- ldr r0, _08090B68 @ =0x00004014
- ldrh r1, [r4]
- subs r1, #0x80
- ldrb r2, [r5]
- bl SetTile
-_08090B60:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_08090B64: .4byte 0x00004017
-_08090B68: .4byte 0x00004014
-
- thumb_func_start sub_08090B6C
-sub_08090B6C: @ 0x08090B6C
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- adds r1, r0, #0
- adds r0, #0x80
- ldrb r0, [r0]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _08090B80
- b _08090CD2
-_08090B80:
- lsrs r0, r0, #0x1b
- lsls r2, r0, #0x18
- lsrs r3, r2, #0x18
- ldrh r0, [r1, #0x2e]
- movs r4, #0xf
- mov r8, r4
- ands r4, r0
- mov r8, r4
- adds r0, r1, #0
- adds r0, #0x78
- ldrh r6, [r0]
- subs r0, #0x40
- ldrb r7, [r0]
- movs r0, #3
- ands r0, r3
- cmp r0, #1
- beq _08090BF8
- cmp r0, #1
- blo _08090BB0
- cmp r0, #2
- beq _08090C48
- cmp r0, #3
- beq _08090C90
- b _08090CD2
-_08090BB0:
- lsrs r5, r2, #0x1b
- cmp r3, #0xc
- bne _08090BB8
- movs r5, #2
-_08090BB8:
- rsbs r4, r5, #0
- cmp r4, r5
- bgt _08090BCE
-_08090BBE:
- adds r1, r6, r4
- ldr r0, _08090BE4 @ =0x00004022
- adds r2, r7, #0
- bl SetTile
- adds r4, #1
- cmp r4, r5
- ble _08090BBE
-_08090BCE:
- movs r0, #8
- mov r1, r8
- ands r1, r0
- cmp r1, #0
- beq _08090BEC
- ldr r0, _08090BE8 @ =0x00004024
- subs r1, r6, r4
- adds r2, r7, #0
- bl sub_08090CDC
- b _08090CB2
- .align 2, 0
-_08090BE4: .4byte 0x00004022
-_08090BE8: .4byte 0x00004024
-_08090BEC:
- ldr r0, _08090BF4 @ =0x00004022
- subs r1, r6, r4
- b _08090C6E
- .align 2, 0
-_08090BF4: .4byte 0x00004022
-_08090BF8:
- lsrs r5, r2, #0x1b
- rsbs r4, r5, #0
- cmp r4, r5
- bgt _08090C10
-_08090C00:
- adds r1, r6, r4
- ldr r0, _08090C2C @ =0x00004022
- adds r2, r7, #0
- bl SetTile
- adds r4, #1
- cmp r4, r5
- ble _08090C00
-_08090C10:
- movs r0, #8
- mov r1, r8
- ands r1, r0
- cmp r1, #0
- beq _08090C34
- ldr r0, _08090C30 @ =0x00004024
- subs r1, r6, r4
- adds r2, r7, #0
- bl sub_08090CDC
- cmp r4, #0
- beq _08090CD2
- b _08090C6A
- .align 2, 0
-_08090C2C: .4byte 0x00004022
-_08090C30: .4byte 0x00004024
-_08090C34:
- cmp r4, #0
- beq _08090CB2
- ldr r0, _08090C44 @ =0x00004022
- subs r1, r6, r4
- adds r2, r7, #0
- bl SetTile
- b _08090CB2
- .align 2, 0
-_08090C44: .4byte 0x00004022
-_08090C48:
- lsrs r5, r2, #0x1a
- rsbs r4, r5, #0
- cmp r4, r5
- bge _08090C60
-_08090C50:
- adds r1, r6, r4
- ldr r0, _08090C78 @ =0x00004022
- adds r2, r7, #0
- bl SetTile
- adds r4, #1
- cmp r4, r5
- blt _08090C50
-_08090C60:
- movs r0, #8
- mov r1, r8
- ands r1, r0
- cmp r1, #0
- beq _08090C7C
-_08090C6A:
- ldr r0, _08090C78 @ =0x00004022
- adds r1, r6, r4
-_08090C6E:
- adds r2, r7, #0
- bl SetTile
- b _08090CD2
- .align 2, 0
-_08090C78: .4byte 0x00004022
-_08090C7C:
- ldr r0, _08090C8C @ =0x00004024
- subs r1, r6, r4
- subs r1, #1
- adds r2, r7, #0
- bl sub_08090CDC
- b _08090CB2
- .align 2, 0
-_08090C8C: .4byte 0x00004024
-_08090C90:
- lsrs r5, r2, #0x1a
- rsbs r4, r5, #0
- cmp r4, r5
- bgt _08090CA8
-_08090C98:
- adds r1, r6, r4
- ldr r0, _08090CC0 @ =0x00004022
- adds r2, r7, #0
- bl SetTile
- adds r4, #1
- cmp r4, r5
- ble _08090C98
-_08090CA8:
- movs r0, #8
- mov r1, r8
- ands r1, r0
- cmp r1, #0
- beq _08090CC8
-_08090CB2:
- ldr r0, _08090CC4 @ =0x00004025
- adds r1, r6, r4
- adds r2, r7, #0
- bl sub_08090CDC
- b _08090CD2
- .align 2, 0
-_08090CC0: .4byte 0x00004022
-_08090CC4: .4byte 0x00004025
-_08090CC8:
- ldr r0, _08090CD8 @ =0x00004024
- subs r1, r6, r4
- adds r2, r7, #0
- bl sub_08090CDC
-_08090CD2:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08090CD8: .4byte 0x00004024
-
- thumb_func_start sub_08090CDC
-sub_08090CDC: @ 0x08090CDC
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- adds r6, r2, #0
- adds r0, r5, #0
- adds r1, r6, #0
- bl sub_080001DA
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
- movs r0, #0x80
- lsls r0, r0, #7
- ands r0, r2
- cmp r0, #0
- bne _08090D06
- adds r0, r4, #0
- adds r1, r5, #0
- adds r2, r6, #0
- bl SetTile
- b _08090DB2
-_08090D06:
- ldr r1, _08090D18 @ =0xFFFFBFDE
- adds r0, r2, r1
- cmp r0, #0xb
- bhi _08090DB2
- lsls r0, r0, #2
- ldr r1, _08090D1C @ =_08090D20
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08090D18: .4byte 0xFFFFBFDE
-_08090D1C: .4byte _08090D20
-_08090D20: @ jump table
- .4byte _08090DB2 @ case 0
- .4byte _08090DB2 @ case 1
- .4byte _08090D80 @ case 2
- .4byte _08090D50 @ case 3
- .4byte _08090DB2 @ case 4
- .4byte _08090DB2 @ case 5
- .4byte _08090DB2 @ case 6
- .4byte _08090DB2 @ case 7
- .4byte _08090DB2 @ case 8
- .4byte _08090DB2 @ case 9
- .4byte _08090D98 @ case 10
- .4byte _08090D68 @ case 11
-_08090D50:
- ldr r0, _08090D5C @ =0x00004024
- cmp r4, r0
- bne _08090D58
- ldr r2, _08090D60 @ =0x00004022
-_08090D58:
- ldr r0, _08090D64 @ =0x0000402C
- b _08090DA2
- .align 2, 0
-_08090D5C: .4byte 0x00004024
-_08090D60: .4byte 0x00004022
-_08090D64: .4byte 0x0000402C
-_08090D68:
- ldr r0, _08090D74 @ =0x0000402C
- cmp r4, r0
- bne _08090D70
- ldr r2, _08090D78 @ =0x0000402B
-_08090D70:
- ldr r0, _08090D7C @ =0x00004024
- b _08090DA2
- .align 2, 0
-_08090D74: .4byte 0x0000402C
-_08090D78: .4byte 0x0000402B
-_08090D7C: .4byte 0x00004024
-_08090D80:
- ldr r0, _08090D8C @ =0x00004025
- cmp r4, r0
- bne _08090D88
- ldr r2, _08090D90 @ =0x00004022
-_08090D88:
- ldr r0, _08090D94 @ =0x0000402D
- b _08090DA2
- .align 2, 0
-_08090D8C: .4byte 0x00004025
-_08090D90: .4byte 0x00004022
-_08090D94: .4byte 0x0000402D
-_08090D98:
- ldr r0, _08090DB4 @ =0x0000402D
- cmp r4, r0
- bne _08090DA0
- ldr r2, _08090DB8 @ =0x0000402B
-_08090DA0:
- ldr r0, _08090DBC @ =0x00004025
-_08090DA2:
- cmp r4, r0
- bne _08090DA8
- ldr r2, _08090DC0 @ =0x00004022
-_08090DA8:
- adds r0, r2, #0
- adds r1, r5, #0
- adds r2, r6, #0
- bl SetTile
-_08090DB2:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_08090DB4: .4byte 0x0000402D
-_08090DB8: .4byte 0x0000402B
-_08090DBC: .4byte 0x00004025
-_08090DC0: .4byte 0x00004022
-
- thumb_func_start sub_08090DC4
-sub_08090DC4: @ 0x08090DC4
- push {r4, lr}
- mov ip, r0
- ldrb r0, [r0, #0xa]
- lsls r0, r0, #3
- ldr r1, _08090E44 @ =gUnk_08121EF8
- adds r3, r0, r1
- ldrh r1, [r3, #6]
- movs r0, #0x80
- lsls r0, r0, #8
- ands r0, r1
- cmp r0, #0
- beq _08090DF4
- ldr r1, _08090E48 @ =gUnk_08122220
- movs r0, #3
- ldrsb r0, [r3, r0]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r3, [r0]
- mov r0, ip
- ldrb r1, [r0, #0xb]
- lsls r0, r1, #3
- adds r3, r3, r0
- mov r0, ip
- strb r1, [r0, #0x1e]
-_08090DF4:
- ldrb r1, [r3]
- mov r0, ip
- adds r0, #0x80
- strb r1, [r0]
- ldrb r0, [r3, #1]
- mov r1, ip
- adds r1, #0x81
- strb r0, [r1]
- ldrb r0, [r3, #2]
- subs r1, #0x1f
- strb r0, [r1]
- ldrb r0, [r3, #3]
- adds r1, #1
- strb r0, [r1]
- ldrb r1, [r3, #4]
- lsls r1, r1, #6
- mov r0, ip
- ldrb r2, [r0, #0x19]
- movs r0, #0x3f
- ands r0, r2
- orrs r0, r1
- mov r1, ip
- strb r0, [r1, #0x19]
- ldrb r0, [r3, #5]
- mov r4, ip
- adds r4, #0x29
- movs r1, #7
- ands r1, r0
- ldrb r2, [r4]
- movs r0, #8
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4]
- ldrh r1, [r3, #6]
- mov r0, ip
- adds r0, #0x82
- strh r1, [r0]
- pop {r4, pc}
- .align 2, 0
-_08090E44: .4byte gUnk_08121EF8
-_08090E48: .4byte gUnk_08122220
-
- thumb_func_start sub_08090E4C
-sub_08090E4C: @ 0x08090E4C
- push {lr}
- ldr r2, _08090E60 @ =gUnk_08122244
- ldrb r1, [r0, #0xf]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl ChangeObjPalette
- pop {pc}
- .align 2, 0
-_08090E60: .4byte gUnk_08122244
-
- thumb_func_start sub_08090E64
-sub_08090E64: @ 0x08090E64
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #0x2a
- movs r1, #0
- movs r2, #0
- bl CreateObject
- adds r4, r0, #0
- cmp r4, #0
- beq _08090EA0
- ldr r0, _08090EA4 @ =0x0000FFFE
- adds r2, r0, #0
- ldrb r0, [r5, #0xb]
- adds r2, r2, r0
- lsls r2, r2, #0x10
- adds r0, r5, #0
- adds r1, r4, #0
- movs r3, #0
- bl PositionRelative
- ldrh r0, [r4, #0x36]
- subs r0, #0x10
- strh r0, [r4, #0x36]
- adds r1, r4, #0
- adds r1, #0x38
- movs r0, #2
- strb r0, [r1]
- adds r0, r4, #0
- bl UpdateSpriteForCollisionLayer
-_08090EA0:
- pop {r4, r5, pc}
- .align 2, 0
-_08090EA4: .4byte 0x0000FFFE
diff --git a/asm/non_matching/furniture/sub_08090E64.s b/asm/non_matching/furniture/sub_08090E64.s
new file mode 100644
index 00000000..51b42bc6
--- /dev/null
+++ b/asm/non_matching/furniture/sub_08090E64.s
@@ -0,0 +1,33 @@
+ .syntax unified
+ push {r4, r5, lr}
+ adds r5, r0, #0
+ movs r0, #0x2a
+ movs r1, #0
+ movs r2, #0
+ bl CreateObject
+ adds r4, r0, #0
+ cmp r4, #0
+ beq _08090EA0
+ ldr r0, _08090EA4 @ =0x0000FFFE
+ adds r2, r0, #0
+ ldrb r0, [r5, #0xb]
+ adds r2, r2, r0
+ lsls r2, r2, #0x10
+ adds r0, r5, #0
+ adds r1, r4, #0
+ movs r3, #0
+ bl PositionRelative
+ ldrh r0, [r4, #0x36]
+ subs r0, #0x10
+ strh r0, [r4, #0x36]
+ adds r1, r4, #0
+ adds r1, #0x38
+ movs r0, #2
+ strb r0, [r1]
+ adds r0, r4, #0
+ bl UpdateSpriteForCollisionLayer
+_08090EA0:
+ pop {r4, r5, pc}
+ .align 2, 0
+_08090EA4: .4byte 0x0000FFFE
+ .syntax divided
diff --git a/data/animations/object/furniture.s b/data/animations/object/furniture.s
index 07c8a6ef..d33e0045 100644
--- a/data/animations/object/furniture.s
+++ b/data/animations/object/furniture.s
@@ -30,21 +30,3 @@ gUnk_081221F8:: @ 081221F8
gUnk_08122208:: @ 08122208
.incbin "furniture/gUnk_08122208.bin"
-
-gUnk_08122218:: @ 08122218
- .4byte sub_080905B8
- .4byte sub_080909E8
-
-gUnk_08122220:: @ 08122220
- .4byte gUnk_08122128
- .4byte gUnk_08122198
- .4byte gUnk_081221A8
- .4byte gUnk_081221B8
- .4byte gUnk_081221C8
- .4byte gUnk_081221D8
- .4byte gUnk_081221E8
- .4byte gUnk_081221F8
- .4byte gUnk_08122208
-
-gUnk_08122244:: @ 08122244
- .incbin "furniture/gUnk_08122244.bin"
diff --git a/include/entity.h b/include/entity.h
index 778a3f8e..83c3a6c5 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -130,6 +130,7 @@ typedef struct Entity {
/*0x62*/ u8 spriteOffsetX;
/*0x63*/ s8 spriteOffsetY;
/*0x64*/ u32* myHeap;
+#ifndef NENT_DEPRECATED
/*0x68*/ union SplitHWord field_0x68;
/*0x6a*/ union SplitHWord field_0x6a;
/*0x6c*/ union SplitHWord field_0x6c;
@@ -144,6 +145,7 @@ typedef struct Entity {
/*0x82*/ union SplitHWord field_0x82;
/*0x84*/ union SplitHWord cutsceneBeh;
/*0x86*/ union SplitHWord field_0x86;
+#endif
} Entity;
typedef struct LinkedList {
diff --git a/include/global.h b/include/global.h
index 669d2557..e7eddd31 100644
--- a/include/global.h
+++ b/include/global.h
@@ -50,6 +50,8 @@
#define BOOLCAST(x) ((-(x) | (x)) >> 31)
#define static_assert(cond) extern char assertion[(cond) ? 1 : -1]
+#define super (&this->base)
+
#if NON_MATCHING
#define ASM_FUNC(path, decl)
#else
diff --git a/linker.ld b/linker.ld
index 162ed5bc..2d25fba6 100644
--- a/linker.ld
+++ b/linker.ld
@@ -783,7 +783,7 @@ SECTIONS {
src/object/backgroundCloud.o(.text);
asm/object4B.o(.text);
asm/pushableFurniture.o(.text);
- asm/furniture.o(.text);
+ src/object/furniture.o(.text);
src/object/minishSizedEntrance.o(.text);
src/object/archway.o(.text);
asm/giantRock.o(.text);
@@ -1519,6 +1519,7 @@ SECTIONS {
data/const/object/pushableFurniture.o(.rodata);
data/const/object/furniture.o(.rodata);
data/animations/object/furniture.o(.rodata);
+ src/object/furniture.o(.rodata);
data/const/object/minishSizedEntrance.o(.rodata);
data/animations/object/minishSizedEntrance.o(.rodata);
data/const/object/object51.o(.rodata);
diff --git a/src/object/furniture.c b/src/object/furniture.c
new file mode 100644
index 00000000..130c2ce4
--- /dev/null
+++ b/src/object/furniture.c
@@ -0,0 +1,390 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "room.h"
+#include "functions.h"
+#include "object.h"
+
+extern void sub_080001D0(u32, u32, u32);
+extern u32 sub_080001DA(u32, u32);
+
+enum {
+ FURNITURE_INIT,
+ FURNITURE_UPDATE,
+};
+
+typedef enum {
+ TMP,
+} FurnitureFlag;
+
+typedef enum {
+ TMP2,
+} FurnitureType;
+
+typedef struct {
+ Entity base;
+ /* 0x68 */ u8 pad[0x10];
+ /* 0x78 */ u16 tile;
+ /* 0x7a */ u16 unk1;
+ /* 0x7c */ u16 unk2;
+ /* 0x7e */ u16 unk3;
+ /* 0x80 */ u8 width;
+ /* 0x81 */ u8 height;
+ /* 0x82 */ u16 flags;
+} FurnitureEntity;
+
+typedef void(FurnitureAction)(FurnitureEntity*);
+
+static FurnitureAction FurnitureInit;
+static FurnitureAction FurnitureUpdate;
+
+typedef struct {
+ u8 width;
+ u8 height;
+ s8 x;
+ s8 y;
+ u8 rendering;
+ u8 priority;
+ u16 flags;
+} FurnitureCfg;
+
+extern FurnitureCfg gUnk_08122128[];
+extern FurnitureCfg gUnk_08122198[];
+extern FurnitureCfg gUnk_081221A8[];
+extern FurnitureCfg gUnk_081221B8[];
+extern FurnitureCfg gUnk_081221C8[];
+extern FurnitureCfg gUnk_081221D8[];
+extern FurnitureCfg gUnk_081221E8[];
+extern FurnitureCfg gUnk_081221F8[];
+extern FurnitureCfg gUnk_08122208[];
+extern const FurnitureCfg gUnk_08121EF8[];
+
+static void sub_08090DC4(FurnitureEntity*);
+static void sub_08090E64(FurnitureEntity*);
+static void sub_08090B6C(FurnitureEntity*);
+static void sub_08090E4C(FurnitureEntity*);
+static void sub_08090CDC(u32, u32, u32);
+
+void Furniture(FurnitureEntity* this) {
+ static FurnitureAction* const sFurnitureActions[] = {
+ FurnitureInit,
+ FurnitureUpdate,
+ };
+
+ sFurnitureActions[super->action](this);
+}
+
+static void FurnitureInit(FurnitureEntity* this) {
+ u32 i, tile, cnt;
+ Entity* e;
+
+ super->action = FURNITURE_UPDATE;
+ this->tile = COORD_TO_TILE(super);
+ sub_08090DC4(this);
+ switch (this->flags & 0x7fff) {
+ case 0x100:
+ super->collisionLayer = 2;
+ UpdateSpriteForCollisionLayer(super);
+ break;
+ case 0x20:
+ break;
+ case 0x40:
+ super->y.HALF.HI = (super->y.HALF.HI & ~0xF) | 4;
+ SetTile(0x4017, this->tile - 128, 1);
+ SetTile(0x4017, this->tile - 64, 1);
+ break;
+ case 0x80:
+ super->frameIndex = 0;
+ super->y.HALF.HI = (super->y.HALF.HI & ~0xF) | 6;
+ this->tile = COORD_TO_TILE(super);
+ SetTile(0x4026, this->tile, super->collisionLayer);
+ break;
+ case 0x200:
+ break;
+ case 0x400:
+ sub_08090E64(this);
+ if (super->type2 != 0) {
+ super->spriteOffsetX = 1;
+ this->width = 48;
+ }
+ default:
+ sub_08090B6C(this);
+ break;
+ }
+
+ if (this->height != 16) {
+ switch (this->height & 0x70) {
+ case 0x30:
+ this->tile -= 64;
+ sub_08090B6C(this);
+ this->tile = COORD_TO_TILE(super);
+ case 0x20:
+ this->tile += 64;
+ sub_08090B6C(this);
+ }
+ this->tile = COORD_TO_TILE(super);
+ }
+
+ switch (this->flags & 0x7fff) {
+ case 0x4:
+ ChangeObjPalette(super, 0x7E);
+ break;
+ case 0x2:
+ tile = this->tile - 129;
+ cnt = super->type != 26 ? 3 : 2;
+ for (i = 0; i < cnt; ++i, ++tile) {
+ SetTile(0x4026, tile, 2);
+ SetTile(0x4026, tile, 1);
+ sub_080001D0(0, tile + 64, 1);
+ }
+ break;
+ }
+
+ switch (super->type) {
+ case 1:
+ if (super->type2 != 0) {
+ super->spritePriority.b0 = 4;
+ }
+ break;
+ case 9:
+ e = CreateObject(FURNITURE, 62, 0);
+ if (e != NULL) {
+ PositionRelative(super, e, 0x100000, 0x100000);
+ e->frameIndex = 1;
+ e->updatePriority = 2;
+ }
+ break;
+ case 30:
+ sub_0807B7D8(774, this->tile + 65, 2);
+ break;
+ case 31:
+ super->collisionLayer = 1;
+ super->spriteOrientation.flipY = 2;
+ SetTile(0x4074, this->tile - 64, super->collisionLayer);
+ sub_080001D0(63, this->tile - 64, super->collisionLayer);
+ SetTile(0x4017, this->tile, super->collisionLayer);
+ SetTile(0x4017, this->tile + 64, super->collisionLayer);
+ break;
+ case 40:
+ if (super->type2 != 0)
+ super->spriteOffsetX = -4;
+ break;
+ case 59:
+ SetTile(0x4023, this->tile - 65, super->collisionLayer);
+ SetTile(0x4023, this->tile - 64, super->collisionLayer);
+ SetTile(0x4023, this->tile - 63, super->collisionLayer);
+ break;
+ case 60:
+ SetTile(0x4022, this->tile + 65, super->collisionLayer);
+ }
+}
+
+static void FurnitureUpdate(FurnitureEntity* this) {
+ switch (this->flags & 0x7FFF) {
+ case 0x1:
+ if (gPlayerEntity.y.HALF.HI < super->y.HALF.HI || gPlayerEntity.y.HALF.HI > super->y.HALF.HI + 24) {
+ super->spriteRendering.b3 = 2;
+ } else {
+ super->spriteRendering.b3 = 3;
+ }
+ break;
+ case 0x8:
+ if (++super->actionDelay == 16) {
+ super->actionDelay = 0;
+ super->field_0xf = (super->field_0xf + 1) & 3;
+ sub_08090E4C(this);
+ }
+ break;
+ case 0x10:
+ if (super->type != 62) {
+ if (++super->actionDelay == 20) {
+ super->frameIndex = (super->frameIndex + 1) & 3;
+ super->actionDelay = 0;
+ }
+ } else {
+ if (++super->actionDelay == 14) {
+ super->actionDelay = 0;
+ super->field_0xf = (super->field_0xf + 1) % 3;
+ super->frameIndex = super->field_0xf + 1;
+ }
+ }
+ break;
+ case 0x80:
+ if (gPlayerEntity.y.HALF.HI < super->y.HALF.HI + 8) {
+ if (gPlayerState.field_0x10[2] != 30 && GetTileTypeByEntity(super) == 0x4017) {
+ SetTile(0x4026, this->tile, super->collisionLayer);
+ SetTile(0x403D, this->tile - 64, super->collisionLayer);
+ SetTile(0x403D, this->tile - 128, super->collisionLayer);
+ }
+ } else {
+ if (gPlayerEntity.collisionLayer & 2) {
+ gPlayerEntity.collisionLayer = 1;
+ UpdateSpriteForCollisionLayer(&gPlayerEntity);
+ }
+ if (GetTileTypeByEntity(super) != 0x4017) {
+ SetTile(0x4017, this->tile, super->collisionLayer);
+ SetTile(0x4017, this->tile - 64, super->collisionLayer);
+ SetTile(0x4014, this->tile - 128, super->collisionLayer);
+ }
+ }
+ break;
+ }
+}
+
+static void sub_08090B6C(FurnitureEntity* this) {
+ s32 num;
+
+ u32 width = (u32)(this->width << 0x18) >> 0x18;
+ if (width != 0) {
+ u8 w2 = width / 8;
+ u32 px = super->x.HALF.HI & 0xF;
+ u32 tile = this->tile;
+ u32 cl = super->collisionLayer;
+ int i;
+
+ switch ((u32)w2 & 3) {
+ case 0:
+ num = w2 / 8;
+ if (w2 == 0xc) {
+ num = 2;
+ }
+ for (i = -num; i <= num; ++i) {
+ SetTile(0x4022, tile + i, cl);
+ }
+ if (px & 8) {
+ sub_08090CDC(0x4024, tile - i, cl);
+ sub_08090CDC(0x4025, tile + i, cl);
+ } else {
+ SetTile(0x4022, tile - i, cl);
+ }
+ break;
+ case 1:
+ num = w2 / 8;
+ for (i = -num; i <= num; i++) {
+ SetTile(0x4022, tile + i, cl);
+ }
+ if (px & 8) {
+ sub_08090CDC(0x4024, tile - i, cl);
+ if (i != 0) {
+ SetTile(0x4022, tile + i, cl);
+ }
+ } else {
+ if (i != 0) {
+ SetTile(0x4022, tile - i, cl);
+ }
+ sub_08090CDC(0x4025, tile + i, cl);
+ }
+ break;
+ case 2:
+ num = w2 / 4;
+ for (i = -num; i < num; ++i) {
+ SetTile(0x4022, tile + i, cl);
+ }
+ if (px & 8) {
+ SetTile(0x4022, tile + i, cl);
+ } else {
+ sub_08090CDC(0x4024, tile - i - 1, cl);
+ sub_08090CDC(0x4025, tile + i, cl);
+ }
+ break;
+ case 3:
+ num = w2 / 4;
+ for (i = -num; i <= num; ++i) {
+ SetTile(0x4022, tile + i, cl);
+ }
+ if (px & 8) {
+ sub_08090CDC(0x4025, tile + i, cl);
+ } else {
+ sub_08090CDC(0x4024, tile - i, cl);
+ }
+ break;
+ }
+ }
+}
+
+static void sub_08090CDC(u32 id, u32 pos, u32 layer) {
+ u16 cur = sub_080001DA(pos, layer);
+ u32 next = cur;
+ u32 id2;
+
+ if ((cur & 0x4000) == 0) {
+ SetTile(id, pos, layer);
+ } else {
+ switch (cur) {
+ case 0x4025:
+ if (id == 0x4024)
+ next = 0x4022;
+ if (id == 0x402c)
+ next = 0x4022;
+ break;
+ case 0x402D:
+ if (id == 0x402c)
+ next = 0x402b;
+ if (id == 0x4024)
+ next = 0x4022;
+ break;
+ case 0x4024:
+ if (id == 0x4025)
+ next = 0x4022;
+ if (id == 0x402d)
+ next = 0x4022;
+ break;
+ case 0x402C:
+ if (id == 0x402d)
+ next = 0x402b;
+ if (id == 0x4025)
+ next = 0x4022;
+ break;
+ case 0x4022:
+ case 0x4023:
+ case 0x4026:
+ case 0x4027:
+ case 0x4028:
+ case 0x4029:
+ case 0x402a:
+ case 0x402b:
+ default:
+ return;
+ }
+ SetTile(next, pos, layer);
+ }
+}
+
+static void sub_08090DC4(FurnitureEntity* this) {
+ static const FurnitureCfg* const sCfgTable[] = {
+ gUnk_08122128, gUnk_08122198, gUnk_081221A8, gUnk_081221B8, gUnk_081221C8,
+ gUnk_081221D8, gUnk_081221E8, gUnk_081221F8, gUnk_08122208,
+ };
+
+ const FurnitureCfg* cfg = &gUnk_08121EF8[super->type];
+ if (cfg->flags & 0x8000) {
+ cfg = sCfgTable[cfg->y];
+ cfg += super->type2;
+ super->frameIndex = super->type2;
+ }
+ this->width = cfg->width;
+ this->height = cfg->height;
+ super->spriteOffsetX = cfg->x;
+ super->spriteOffsetY = cfg->y;
+ super->spriteRendering.b3 = cfg->rendering;
+ super->spritePriority.b0 = cfg->priority;
+ this->flags = cfg->flags;
+}
+
+static void sub_08090E4C(FurnitureEntity* this) {
+ static const u32 sPalettes[] = { 0x5f, 0x60, 0x61, 0x62 };
+
+ ChangeObjPalette(super, sPalettes[super->field_0xf]);
+}
+
+static NONMATCH("asm/non_matching/furniture/sub_08090E64.s", void sub_08090E64(FurnitureEntity* this)) {
+ Entity* e = CreateObject(OBJECT_42, 0, 0);
+ u32 tmp = 0x10000 - 2;
+
+ if (e != NULL) {
+ PositionRelative(super, e, (tmp + super->type2) * 0x10000, 0);
+ e->z.HALF.HI -= 16;
+ e->collisionLayer = 2;
+ UpdateSpriteForCollisionLayer(e);
+ }
+}
+END_NONMATCH